Move implementation of PacketTransportInternal::RegisterReceivedPacketCallback

Moved to cc file to fix link issue when linking with dynamic library
(crd).

Bug: webrtc:15368
Change-Id: I51cefcd439fda93d1135fcffa75198ab680e8583
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/340302
Reviewed-by: Jonas Oreland <jonaso@google.com>
Commit-Queue: Per Kjellander <perkj@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#41801}
diff --git a/p2p/BUILD.gn b/p2p/BUILD.gn
index 657e73d..c3858cb 100644
--- a/p2p/BUILD.gn
+++ b/p2p/BUILD.gn
@@ -637,7 +637,10 @@
     "../rtc_base/system:rtc_export",
     "../rtc_base/third_party/sigslot",
   ]
-  absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ]
+  absl_deps = [
+    "//third_party/abseil-cpp/absl/functional:any_invocable",
+    "//third_party/abseil-cpp/absl/types:optional",
+  ]
 }
 
 rtc_library("port") {
diff --git a/p2p/base/packet_transport_internal.cc b/p2p/base/packet_transport_internal.cc
index 2e8c00a..cbe8c55 100644
--- a/p2p/base/packet_transport_internal.cc
+++ b/p2p/base/packet_transport_internal.cc
@@ -27,6 +27,19 @@
   return absl::optional<NetworkRoute>();
 }
 
+void PacketTransportInternal::RegisterReceivedPacketCallback(
+    void* id,
+    absl::AnyInvocable<void(PacketTransportInternal*,
+                            const rtc::ReceivedPacket&)> callback) {
+  RTC_DCHECK_RUN_ON(&network_checker_);
+  received_packet_callback_list_.AddReceiver(id, std::move(callback));
+}
+
+void PacketTransportInternal::DeregisterReceivedPacketCallback(void* id) {
+  RTC_DCHECK_RUN_ON(&network_checker_);
+  received_packet_callback_list_.RemoveReceivers(id);
+}
+
 void PacketTransportInternal::NotifyPacketReceived(
     const rtc::ReceivedPacket& packet) {
   RTC_DCHECK_RUN_ON(&network_checker_);
diff --git a/p2p/base/packet_transport_internal.h b/p2p/base/packet_transport_internal.h
index 981554a..b758172 100644
--- a/p2p/base/packet_transport_internal.h
+++ b/p2p/base/packet_transport_internal.h
@@ -15,6 +15,7 @@
 #include <utility>
 #include <vector>
 
+#include "absl/functional/any_invocable.h"
 #include "absl/types/optional.h"
 #include "p2p/base/port.h"
 #include "rtc_base/async_packet_socket.h"
@@ -81,15 +82,13 @@
   // Emitted when receiving state changes to true.
   sigslot::signal1<PacketTransportInternal*> SignalReceivingState;
 
-  template <typename F>
-  void RegisterReceivedPacketCallback(void* id, F&& callback) {
-    RTC_DCHECK_RUN_ON(&network_checker_);
-    received_packet_callback_list_.AddReceiver(id, std::forward<F>(callback));
-  }
-  void DeregisterReceivedPacketCallback(void* id) {
-    RTC_DCHECK_RUN_ON(&network_checker_);
-    received_packet_callback_list_.RemoveReceivers(id);
-  }
+  // Callback is invoked each time a packet is received on this channel.
+  void RegisterReceivedPacketCallback(
+      void* id,
+      absl::AnyInvocable<void(PacketTransportInternal*,
+                              const rtc::ReceivedPacket&)> callback);
+
+  void DeregisterReceivedPacketCallback(void* id);
 
   // Signalled each time a packet is received on this channel.
   // TODO(bugs.webrtc.org:15368): Deprecate and remove. Replace with