use sigslot trampoline in server_socket_adapters

Bug: webrtc:42222066
Change-Id: I6fd49f33e2a271f9de66dd9b419564f1b284a0af
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/411460
Reviewed-by: Harald Alvestrand <hta@webrtc.org>
Reviewed-by: Tomas Gunnarsson <tommi@webrtc.org>
Commit-Queue: Lena Kaplan <lenakaplan@meta.com>
Cr-Commit-Position: refs/heads/main@{#45820}
diff --git a/p2p/test/nat_server.cc b/p2p/test/nat_server.cc
index c330c7a..ab2b96d 100644
--- a/p2p/test/nat_server.cc
+++ b/p2p/test/nat_server.cc
@@ -125,7 +125,7 @@
 
     bool remainder = (*len > 0);
     BufferInput(false);
-    SignalConnectRequest(this, dest_addr);
+    NotifyConnectRequest(this, dest_addr);
     if (remainder) {
       SignalReadEvent(this);
     }
diff --git a/rtc_base/BUILD.gn b/rtc_base/BUILD.gn
index 8a66298..cb00a44 100644
--- a/rtc_base/BUILD.gn
+++ b/rtc_base/BUILD.gn
@@ -1284,6 +1284,7 @@
     ":stringutils",
     ":zero_memory",
     "../api:array_view",
+    "//third_party/abseil-cpp/absl/functional:any_invocable",
     "//third_party/abseil-cpp/absl/strings",
     "//third_party/abseil-cpp/absl/strings:string_view",
   ]
diff --git a/rtc_base/proxy_server.cc b/rtc_base/proxy_server.cc
index 31fdc50..6abb15b 100644
--- a/rtc_base/proxy_server.cc
+++ b/rtc_base/proxy_server.cc
@@ -73,8 +73,10 @@
       out_buffer_(kBufferSize),
       in_buffer_(kBufferSize),
       destroyed_trampoline_(this) {
-  int_socket_->SignalConnectRequest.connect(this,
-                                            &ProxyBinding::OnConnectRequest);
+  int_socket_->SubscribeConnectRequest(
+      [this](AsyncProxyServerSocket* socket, const SocketAddress& addr) {
+        OnConnectRequest(socket, addr);
+      });
   int_socket_->SignalReadEvent.connect(this, &ProxyBinding::OnInternalRead);
   int_socket_->SignalWriteEvent.connect(this, &ProxyBinding::OnInternalWrite);
   int_socket_->SignalCloseEvent.connect(this, &ProxyBinding::OnInternalClose);
diff --git a/rtc_base/server_socket_adapters.cc b/rtc_base/server_socket_adapters.cc
index c3416e6..bf41ce9 100644
--- a/rtc_base/server_socket_adapters.cc
+++ b/rtc_base/server_socket_adapters.cc
@@ -23,7 +23,8 @@
 
 AsyncProxyServerSocket::AsyncProxyServerSocket(Socket* socket,
                                                size_t buffer_size)
-    : BufferedReadAdapter(socket, buffer_size) {}
+    : BufferedReadAdapter(socket, buffer_size),
+      connect_request_trampoline_(this) {}
 
 AsyncProxyServerSocket::~AsyncProxyServerSocket() = default;
 
diff --git a/rtc_base/server_socket_adapters.h b/rtc_base/server_socket_adapters.h
index 8f53cf4..d65bf81 100644
--- a/rtc_base/server_socket_adapters.h
+++ b/rtc_base/server_socket_adapters.h
@@ -12,7 +12,10 @@
 #define RTC_BASE_SERVER_SOCKET_ADAPTERS_H_
 
 #include <cstddef>
+#include <utility>
 
+#include "absl/functional/any_invocable.h"
+#include "rtc_base/sigslot_trampoline.h"
 #include "rtc_base/socket.h"
 #include "rtc_base/socket_adapters.h"
 #include "rtc_base/socket_address.h"
@@ -27,7 +30,23 @@
   ~AsyncProxyServerSocket() override;
   sigslot::signal2<AsyncProxyServerSocket*, const SocketAddress&>
       SignalConnectRequest;
+
+  void SubscribeConnectRequest(
+      absl::AnyInvocable<void(AsyncProxyServerSocket*, const SocketAddress&)>
+          callback) {
+    connect_request_trampoline_.Subscribe(std::move(callback));
+  }
+  void NotifyConnectRequest(AsyncProxyServerSocket* socket,
+                            const SocketAddress& socket_address) {
+    SignalConnectRequest(socket, socket_address);
+  }
+
   virtual void SendConnectResult(int err, const SocketAddress& addr) = 0;
+
+ private:
+  SignalTrampoline<AsyncProxyServerSocket,
+                   &AsyncProxyServerSocket::SignalConnectRequest>
+      connect_request_trampoline_;
 };
 
 // Implements a socket adapter that performs the server side of a