Index: ppapi/proxy/ppb_tcp_socket_private_proxy.cc |
diff --git a/ppapi/proxy/ppb_tcp_socket_private_proxy.cc b/ppapi/proxy/ppb_tcp_socket_private_proxy.cc |
index 7e926647e89917a598f101b35de3d7590ff0f6f7..26cdfcf5495e0ac7d17979b4aba27ec117f05da7 100644 |
--- a/ppapi/proxy/ppb_tcp_socket_private_proxy.cc |
+++ b/ppapi/proxy/ppb_tcp_socket_private_proxy.cc |
@@ -26,7 +26,13 @@ IDToSocketMap* g_id_to_socket = NULL; |
class TCPSocket : public TCPSocketPrivateImpl { |
public: |
+ // C-tor for new sockets. |
TCPSocket(const HostResource& resource, uint32 socket_id); |
+ // C-tor for already connected sockets. |
+ TCPSocket(const HostResource& resource, |
+ uint32 socket_id, |
+ const PP_NetAddress_Private& local_addr, |
+ const PP_NetAddress_Private& remote_addr); |
virtual ~TCPSocket(); |
virtual void SendConnect(const std::string& host, uint16_t port) OVERRIDE; |
@@ -52,6 +58,22 @@ TCPSocket::TCPSocket(const HostResource& resource, uint32 socket_id) |
(*g_id_to_socket)[socket_id] = this; |
} |
+TCPSocket::TCPSocket(const HostResource& resource, |
+ uint32 socket_id, |
+ const PP_NetAddress_Private& local_addr, |
+ const PP_NetAddress_Private& remote_addr) |
+ : TCPSocketPrivateImpl(resource, socket_id) { |
+ if (!g_id_to_socket) |
+ g_id_to_socket = new IDToSocketMap(); |
+ DCHECK(g_id_to_socket->find(socket_id) == g_id_to_socket->end()); |
+ |
+ connection_state_ = CONNECTED; |
+ local_addr_ = local_addr; |
+ remote_addr_ = remote_addr; |
+ |
+ (*g_id_to_socket)[socket_id] = this; |
+} |
+ |
TCPSocket::~TCPSocket() { |
Disconnect(); |
} |
@@ -121,6 +143,18 @@ PP_Resource PPB_TCPSocket_Private_Proxy::CreateProxyResource( |
socket_id))->GetReference(); |
} |
+// static |
+PP_Resource PPB_TCPSocket_Private_Proxy::CreateProxyResourceForConnectedSocket( |
+ PP_Instance instance, |
+ uint32 socket_id, |
+ const PP_NetAddress_Private& local_addr, |
+ const PP_NetAddress_Private& remote_addr) { |
+ return (new TCPSocket(HostResource::MakeInstanceOnly(instance), |
+ socket_id, |
+ local_addr, |
+ remote_addr))->GetReference(); |
+} |
+ |
bool PPB_TCPSocket_Private_Proxy::OnMessageReceived(const IPC::Message& msg) { |
bool handled = true; |
IPC_BEGIN_MESSAGE_MAP(PPB_TCPSocket_Private_Proxy, msg) |