OLD | NEW |
---|---|
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "ppapi/proxy/tcp_server_socket_private_resource.h" | 5 #include "ppapi/proxy/tcp_server_socket_private_resource.h" |
6 | 6 |
7 #include "ppapi/proxy/plugin_dispatcher.h" | 7 #include "ppapi/proxy/plugin_dispatcher.h" |
8 #include "ppapi/proxy/plugin_globals.h" | |
8 #include "ppapi/proxy/ppapi_messages.h" | 9 #include "ppapi/proxy/ppapi_messages.h" |
9 #include "ppapi/proxy/ppb_tcp_socket_private_proxy.h" | 10 #include "ppapi/proxy/tcp_socket_private_resource.h" |
10 | 11 |
11 namespace ppapi { | 12 namespace ppapi { |
12 namespace proxy { | 13 namespace proxy { |
13 | 14 |
14 TCPServerSocketPrivateResource::TCPServerSocketPrivateResource( | 15 TCPServerSocketPrivateResource::TCPServerSocketPrivateResource( |
15 Connection connection, | 16 Connection connection, |
16 PP_Instance instance) | 17 PP_Instance instance) |
17 : PluginResource(connection, instance), | 18 : PluginResource(connection, instance), |
18 state_(STATE_BEFORE_LISTENING), | 19 state_(STATE_BEFORE_LISTENING), |
19 local_addr_(), | 20 local_addr_() { |
20 plugin_dispatcher_id_(0) { | |
21 SendCreate(BROWSER, PpapiHostMsg_TCPServerSocket_CreatePrivate()); | 21 SendCreate(BROWSER, PpapiHostMsg_TCPServerSocket_CreatePrivate()); |
22 | |
23 PluginDispatcher* dispatcher = PluginDispatcher::GetForInstance(instance); | |
24 if (dispatcher) | |
25 plugin_dispatcher_id_ = dispatcher->plugin_dispatcher_id(); | |
26 else | |
27 NOTREACHED(); | |
28 } | 22 } |
29 | 23 |
30 TCPServerSocketPrivateResource::~TCPServerSocketPrivateResource() { | 24 TCPServerSocketPrivateResource::~TCPServerSocketPrivateResource() { |
31 } | 25 } |
32 | 26 |
33 thunk::PPB_TCPServerSocket_Private_API* | 27 thunk::PPB_TCPServerSocket_Private_API* |
34 TCPServerSocketPrivateResource::AsPPB_TCPServerSocket_Private_API() { | 28 TCPServerSocketPrivateResource::AsPPB_TCPServerSocket_Private_API() { |
35 return this; | 29 return this; |
36 } | 30 } |
37 | 31 |
(...skipping 26 matching lines...) Expand all Loading... | |
64 return PP_ERROR_BADARGUMENT; | 58 return PP_ERROR_BADARGUMENT; |
65 if (state_ != STATE_LISTENING) | 59 if (state_ != STATE_LISTENING) |
66 return PP_ERROR_FAILED; | 60 return PP_ERROR_FAILED; |
67 if (TrackedCallback::IsPending(accept_callback_)) | 61 if (TrackedCallback::IsPending(accept_callback_)) |
68 return PP_ERROR_INPROGRESS; | 62 return PP_ERROR_INPROGRESS; |
69 | 63 |
70 accept_callback_ = callback; | 64 accept_callback_ = callback; |
71 | 65 |
72 Call<PpapiPluginMsg_TCPServerSocket_AcceptReply>( | 66 Call<PpapiPluginMsg_TCPServerSocket_AcceptReply>( |
73 BROWSER, | 67 BROWSER, |
74 PpapiHostMsg_TCPServerSocket_Accept(plugin_dispatcher_id_), | 68 PpapiHostMsg_TCPServerSocket_Accept(), |
75 base::Bind(&TCPServerSocketPrivateResource::OnPluginMsgAcceptReply, | 69 base::Bind(&TCPServerSocketPrivateResource::OnPluginMsgAcceptReply, |
76 base::Unretained(this), tcp_socket)); | 70 base::Unretained(this), tcp_socket)); |
77 return PP_OK_COMPLETIONPENDING; | 71 return PP_OK_COMPLETIONPENDING; |
78 } | 72 } |
79 | 73 |
80 int32_t TCPServerSocketPrivateResource::GetLocalAddress( | 74 int32_t TCPServerSocketPrivateResource::GetLocalAddress( |
81 PP_NetAddress_Private* addr) { | 75 PP_NetAddress_Private* addr) { |
82 if (!addr) | 76 if (!addr) |
83 return PP_ERROR_BADARGUMENT; | 77 return PP_ERROR_BADARGUMENT; |
84 if (state_ != STATE_LISTENING) | 78 if (state_ != STATE_LISTENING) |
(...skipping 23 matching lines...) Expand all Loading... | |
108 if (params.result() == PP_OK) { | 102 if (params.result() == PP_OK) { |
109 local_addr_ = local_addr; | 103 local_addr_ = local_addr; |
110 state_ = STATE_LISTENING; | 104 state_ = STATE_LISTENING; |
111 } | 105 } |
112 listen_callback_->Run(params.result()); | 106 listen_callback_->Run(params.result()); |
113 } | 107 } |
114 | 108 |
115 void TCPServerSocketPrivateResource::OnPluginMsgAcceptReply( | 109 void TCPServerSocketPrivateResource::OnPluginMsgAcceptReply( |
116 PP_Resource* tcp_socket, | 110 PP_Resource* tcp_socket, |
117 const ResourceMessageReplyParams& params, | 111 const ResourceMessageReplyParams& params, |
118 uint32 accepted_socket_id, | 112 int pending_resource_id, |
119 const PP_NetAddress_Private& local_addr, | 113 const PP_NetAddress_Private& local_addr, |
120 const PP_NetAddress_Private& remote_addr) { | 114 const PP_NetAddress_Private& remote_addr) { |
121 DCHECK(tcp_socket); | 115 DCHECK(tcp_socket); |
122 if (state_ != STATE_LISTENING || | 116 if (state_ != STATE_LISTENING || |
123 !TrackedCallback::IsPending(accept_callback_)) { | 117 !TrackedCallback::IsPending(accept_callback_)) { |
124 return; | 118 return; |
125 } | 119 } |
126 if (params.result() == PP_OK) { | 120 if (params.result() == PP_OK) { |
127 *tcp_socket = | 121 Connection connection(PluginGlobals::Get()->GetBrowserSender(), |
yzshen1
2013/08/16 20:40:42
TCPServerSocketPrivateResource itself has a connec
ygorshenin1
2013/08/19 14:33:35
Done.
| |
128 PPB_TCPSocket_Private_Proxy::CreateProxyResourceForConnectedSocket( | 122 PluginDispatcher::GetForInstance(pp_instance())); |
129 pp_instance(), | 123 *tcp_socket = (new TCPSocketPrivateResource(connection, pp_instance(), |
130 accepted_socket_id, | 124 pending_resource_id, |
131 local_addr, | 125 local_addr, |
132 remote_addr); | 126 remote_addr))->GetReference(); |
133 } | 127 } |
134 accept_callback_->Run(params.result()); | 128 accept_callback_->Run(params.result()); |
135 } | 129 } |
136 | 130 |
137 } // namespace proxy | 131 } // namespace proxy |
138 } // namespace ppapi | 132 } // namespace ppapi |
OLD | NEW |