summaryrefslogtreecommitdiffstats
path: root/third_party/libwebrtc/p2p/base/async_stun_tcp_socket.cc
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/libwebrtc/p2p/base/async_stun_tcp_socket.cc')
-rw-r--r--third_party/libwebrtc/p2p/base/async_stun_tcp_socket.cc33
1 files changed, 20 insertions, 13 deletions
diff --git a/third_party/libwebrtc/p2p/base/async_stun_tcp_socket.cc b/third_party/libwebrtc/p2p/base/async_stun_tcp_socket.cc
index 4a35903dfe..dcaf7d285d 100644
--- a/third_party/libwebrtc/p2p/base/async_stun_tcp_socket.cc
+++ b/third_party/libwebrtc/p2p/base/async_stun_tcp_socket.cc
@@ -14,9 +14,15 @@
#include <stdint.h>
#include <string.h>
+#include <cstddef>
+#include <cstdint>
+
+#include "api/array_view.h"
#include "api/transport/stun.h"
+#include "api/units/timestamp.h"
#include "rtc_base/byte_order.h"
#include "rtc_base/checks.h"
+#include "rtc_base/network/received_packet.h"
#include "rtc_base/network/sent_packet.h"
#include "rtc_base/time_utils.h"
@@ -89,7 +95,7 @@ int AsyncStunTCPSocket::Send(const void* pv,
return static_cast<int>(cb);
}
-void AsyncStunTCPSocket::ProcessInput(char* data, size_t* len) {
+size_t AsyncStunTCPSocket::ProcessInput(rtc::ArrayView<const uint8_t> data) {
rtc::SocketAddress remote_addr(GetRemoteAddress());
// STUN packet - First 4 bytes. Total header size is 20 bytes.
// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
@@ -101,26 +107,27 @@ void AsyncStunTCPSocket::ProcessInput(char* data, size_t* len) {
// | Channel Number | Length |
// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ size_t processed_bytes = 0;
while (true) {
+ size_t bytes_left = data.size() - processed_bytes;
// We need at least 4 bytes to read the STUN or ChannelData packet length.
- if (*len < kPacketLenOffset + kPacketLenSize)
- return;
+ if (bytes_left < kPacketLenOffset + kPacketLenSize)
+ return processed_bytes;
int pad_bytes;
- size_t expected_pkt_len = GetExpectedLength(data, *len, &pad_bytes);
+ size_t expected_pkt_len = GetExpectedLength(data.data() + processed_bytes,
+ bytes_left, &pad_bytes);
size_t actual_length = expected_pkt_len + pad_bytes;
- if (*len < actual_length) {
- return;
+ if (bytes_left < actual_length) {
+ return processed_bytes;
}
- SignalReadPacket(this, data, expected_pkt_len, remote_addr,
- rtc::TimeMicros());
-
- *len -= actual_length;
- if (*len > 0) {
- memmove(data, data + actual_length, *len);
- }
+ rtc::ReceivedPacket received_packet(
+ data.subview(processed_bytes, expected_pkt_len), remote_addr,
+ webrtc::Timestamp::Micros(rtc::TimeMicros()));
+ NotifyPacketReceived(received_packet);
+ processed_bytes += actual_length;
}
}