diff options
Diffstat (limited to 'third_party/libwebrtc/rtc_base/async_packet_socket.cc')
-rw-r--r-- | third_party/libwebrtc/rtc_base/async_packet_socket.cc | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/third_party/libwebrtc/rtc_base/async_packet_socket.cc b/third_party/libwebrtc/rtc_base/async_packet_socket.cc index f50138cb62..3721366099 100644 --- a/third_party/libwebrtc/rtc_base/async_packet_socket.cc +++ b/third_party/libwebrtc/rtc_base/async_packet_socket.cc @@ -10,6 +10,8 @@ #include "rtc_base/async_packet_socket.h" +#include "rtc_base/checks.h" + namespace rtc { PacketTimeUpdateParams::PacketTimeUpdateParams() = default; @@ -38,6 +40,41 @@ void AsyncPacketSocket::UnsubscribeCloseEvent(const void* removal_tag) { on_close_.RemoveReceivers(removal_tag); } +void AsyncPacketSocket::RegisterReceivedPacketCallback( + absl::AnyInvocable<void(AsyncPacketSocket*, const rtc::ReceivedPacket&)> + received_packet_callback) { + RTC_DCHECK_RUN_ON(&network_checker_); + RTC_CHECK(!received_packet_callback_); + SignalReadPacket.connect(this, &AsyncPacketSocket::NotifyPacketReceived); + received_packet_callback_ = std::move(received_packet_callback); +} + +void AsyncPacketSocket::DeregisterReceivedPacketCallback() { + RTC_DCHECK_RUN_ON(&network_checker_); + SignalReadPacket.disconnect(this); + received_packet_callback_ = nullptr; +} + +void AsyncPacketSocket::NotifyPacketReceived( + const rtc::ReceivedPacket& packet) { + RTC_DCHECK_RUN_ON(&network_checker_); + if (received_packet_callback_) { + received_packet_callback_(this, packet); + return; + } + if (SignalReadPacket.is_empty()) { + RTC_DCHECK_NOTREACHED() << " No listener registered"; + return; + } + // TODO(bugs.webrtc.org:15368): Remove. This code path is only used if + // SignalReadyPacket is used by clients to get notification of received + // packets but actual socket implementation use NotifyPacketReceived to + // trigger the notification. + SignalReadPacket(this, reinterpret_cast<const char*>(packet.payload().data()), + packet.payload().size(), packet.source_address(), + packet.arrival_time() ? packet.arrival_time()->us() : -1); +} + void CopySocketInformationToPacketInfo(size_t packet_size_bytes, const AsyncPacketSocket& socket_from, bool is_connectionless, |