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" | |
8 #include "ppapi/proxy/ppapi_messages.h" | 7 #include "ppapi/proxy/ppapi_messages.h" |
9 #include "ppapi/proxy/ppb_tcp_socket_private_proxy.h" | 8 #include "ppapi/proxy/tcp_socket_private_resource.h" |
10 | 9 |
11 namespace ppapi { | 10 namespace ppapi { |
12 namespace proxy { | 11 namespace proxy { |
13 | 12 |
14 TCPServerSocketPrivateResource::TCPServerSocketPrivateResource( | 13 TCPServerSocketPrivateResource::TCPServerSocketPrivateResource( |
15 Connection connection, | 14 Connection connection, |
16 PP_Instance instance) | 15 PP_Instance instance) |
17 : PluginResource(connection, instance), | 16 : PluginResource(connection, instance), |
18 state_(STATE_BEFORE_LISTENING), | 17 state_(STATE_BEFORE_LISTENING), |
19 local_addr_(), | 18 local_addr_() { |
20 plugin_dispatcher_id_(0) { | |
21 SendCreate(BROWSER, PpapiHostMsg_TCPServerSocket_CreatePrivate()); | 19 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 } | 20 } |
29 | 21 |
30 TCPServerSocketPrivateResource::~TCPServerSocketPrivateResource() { | 22 TCPServerSocketPrivateResource::~TCPServerSocketPrivateResource() { |
31 } | 23 } |
32 | 24 |
33 thunk::PPB_TCPServerSocket_Private_API* | 25 thunk::PPB_TCPServerSocket_Private_API* |
34 TCPServerSocketPrivateResource::AsPPB_TCPServerSocket_Private_API() { | 26 TCPServerSocketPrivateResource::AsPPB_TCPServerSocket_Private_API() { |
35 return this; | 27 return this; |
36 } | 28 } |
37 | 29 |
(...skipping 26 matching lines...) Expand all Loading... |
64 return PP_ERROR_BADARGUMENT; | 56 return PP_ERROR_BADARGUMENT; |
65 if (state_ != STATE_LISTENING) | 57 if (state_ != STATE_LISTENING) |
66 return PP_ERROR_FAILED; | 58 return PP_ERROR_FAILED; |
67 if (TrackedCallback::IsPending(accept_callback_)) | 59 if (TrackedCallback::IsPending(accept_callback_)) |
68 return PP_ERROR_INPROGRESS; | 60 return PP_ERROR_INPROGRESS; |
69 | 61 |
70 accept_callback_ = callback; | 62 accept_callback_ = callback; |
71 | 63 |
72 Call<PpapiPluginMsg_TCPServerSocket_AcceptReply>( | 64 Call<PpapiPluginMsg_TCPServerSocket_AcceptReply>( |
73 BROWSER, | 65 BROWSER, |
74 PpapiHostMsg_TCPServerSocket_Accept(plugin_dispatcher_id_), | 66 PpapiHostMsg_TCPServerSocket_Accept(), |
75 base::Bind(&TCPServerSocketPrivateResource::OnPluginMsgAcceptReply, | 67 base::Bind(&TCPServerSocketPrivateResource::OnPluginMsgAcceptReply, |
76 base::Unretained(this), tcp_socket)); | 68 base::Unretained(this), tcp_socket)); |
77 return PP_OK_COMPLETIONPENDING; | 69 return PP_OK_COMPLETIONPENDING; |
78 } | 70 } |
79 | 71 |
80 int32_t TCPServerSocketPrivateResource::GetLocalAddress( | 72 int32_t TCPServerSocketPrivateResource::GetLocalAddress( |
81 PP_NetAddress_Private* addr) { | 73 PP_NetAddress_Private* addr) { |
82 if (!addr) | 74 if (!addr) |
83 return PP_ERROR_BADARGUMENT; | 75 return PP_ERROR_BADARGUMENT; |
84 if (state_ != STATE_LISTENING) | 76 if (state_ != STATE_LISTENING) |
(...skipping 23 matching lines...) Expand all Loading... |
108 if (params.result() == PP_OK) { | 100 if (params.result() == PP_OK) { |
109 local_addr_ = local_addr; | 101 local_addr_ = local_addr; |
110 state_ = STATE_LISTENING; | 102 state_ = STATE_LISTENING; |
111 } | 103 } |
112 listen_callback_->Run(params.result()); | 104 listen_callback_->Run(params.result()); |
113 } | 105 } |
114 | 106 |
115 void TCPServerSocketPrivateResource::OnPluginMsgAcceptReply( | 107 void TCPServerSocketPrivateResource::OnPluginMsgAcceptReply( |
116 PP_Resource* tcp_socket, | 108 PP_Resource* tcp_socket, |
117 const ResourceMessageReplyParams& params, | 109 const ResourceMessageReplyParams& params, |
118 uint32 accepted_socket_id, | 110 int pending_resource_id, |
119 const PP_NetAddress_Private& local_addr, | 111 const PP_NetAddress_Private& local_addr, |
120 const PP_NetAddress_Private& remote_addr) { | 112 const PP_NetAddress_Private& remote_addr) { |
121 DCHECK(tcp_socket); | 113 DCHECK(tcp_socket); |
122 if (state_ != STATE_LISTENING || | 114 if (state_ != STATE_LISTENING || |
123 !TrackedCallback::IsPending(accept_callback_)) { | 115 !TrackedCallback::IsPending(accept_callback_)) { |
124 return; | 116 return; |
125 } | 117 } |
126 if (params.result() == PP_OK) { | 118 if (params.result() == PP_OK) { |
127 *tcp_socket = | 119 *tcp_socket = (new TCPSocketPrivateResource(connection(), pp_instance(), |
128 PPB_TCPSocket_Private_Proxy::CreateProxyResourceForConnectedSocket( | 120 pending_resource_id, |
129 pp_instance(), | 121 local_addr, |
130 accepted_socket_id, | 122 remote_addr))->GetReference(); |
131 local_addr, | |
132 remote_addr); | |
133 } | 123 } |
134 accept_callback_->Run(params.result()); | 124 accept_callback_->Run(params.result()); |
135 } | 125 } |
136 | 126 |
137 } // namespace proxy | 127 } // namespace proxy |
138 } // namespace ppapi | 128 } // namespace ppapi |
OLD | NEW |