OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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/ppb_flash_udp_socket_proxy.h" | 5 #include "ppapi/proxy/ppb_flash_udp_socket_proxy.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <cstring> | 8 #include <cstring> |
9 #include <map> | 9 #include <map> |
10 | 10 |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
52 class FlashUDPSocket : public PPB_Flash_UDPSocket_API, | 52 class FlashUDPSocket : public PPB_Flash_UDPSocket_API, |
53 public Resource { | 53 public Resource { |
54 public: | 54 public: |
55 FlashUDPSocket(const HostResource& resource, uint32 socket_id); | 55 FlashUDPSocket(const HostResource& resource, uint32 socket_id); |
56 virtual ~FlashUDPSocket(); | 56 virtual ~FlashUDPSocket(); |
57 | 57 |
58 // ResourceObjectBase overrides. | 58 // ResourceObjectBase overrides. |
59 virtual PPB_Flash_UDPSocket_API* AsPPB_Flash_UDPSocket_API() OVERRIDE; | 59 virtual PPB_Flash_UDPSocket_API* AsPPB_Flash_UDPSocket_API() OVERRIDE; |
60 | 60 |
61 // PPB_Flash_UDPSocket_API implementation. | 61 // PPB_Flash_UDPSocket_API implementation. |
62 virtual int32_t Bind(const PP_Flash_NetAddress* addr, | 62 virtual int32_t Bind(const PP_NetAddress_Private* addr, |
63 PP_CompletionCallback callback) OVERRIDE; | 63 PP_CompletionCallback callback) OVERRIDE; |
64 virtual int32_t RecvFrom(char* buffer, | 64 virtual int32_t RecvFrom(char* buffer, |
65 int32_t num_bytes, | 65 int32_t num_bytes, |
66 PP_CompletionCallback callback) OVERRIDE; | 66 PP_CompletionCallback callback) OVERRIDE; |
67 virtual PP_Bool GetRecvFromAddress(PP_Flash_NetAddress* addr) OVERRIDE; | 67 virtual PP_Bool GetRecvFromAddress(PP_NetAddress_Private* addr) OVERRIDE; |
68 | 68 |
69 virtual int32_t SendTo(const char* buffer, | 69 virtual int32_t SendTo(const char* buffer, |
70 int32_t num_bytes, | 70 int32_t num_bytes, |
71 const PP_Flash_NetAddress* addr, | 71 const PP_NetAddress_Private* addr, |
72 PP_CompletionCallback callback) OVERRIDE; | 72 PP_CompletionCallback callback) OVERRIDE; |
73 virtual void Close() OVERRIDE; | 73 virtual void Close() OVERRIDE; |
74 | 74 |
75 // Notifications from the proxy. | 75 // Notifications from the proxy. |
76 void OnBindCompleted(bool succeeded); | 76 void OnBindCompleted(bool succeeded); |
77 void OnRecvFromCompleted(bool succeeded, | 77 void OnRecvFromCompleted(bool succeeded, |
78 const std::string& data, | 78 const std::string& data, |
79 const PP_Flash_NetAddress& addr); | 79 const PP_NetAddress_Private& addr); |
80 void OnSendToCompleted(bool succeeded, | 80 void OnSendToCompleted(bool succeeded, |
81 int32_t bytes_written); | 81 int32_t bytes_written); |
82 | 82 |
83 private: | 83 private: |
84 void PostAbortAndClearIfNecessary(PP_CompletionCallback* callback); | 84 void PostAbortAndClearIfNecessary(PP_CompletionCallback* callback); |
85 | 85 |
86 PluginDispatcher* GetDispatcher() const { | 86 PluginDispatcher* GetDispatcher() const { |
87 return PluginDispatcher::GetForResource(this); | 87 return PluginDispatcher::GetForResource(this); |
88 } | 88 } |
89 | 89 |
90 uint32 socket_id_; | 90 uint32 socket_id_; |
91 | 91 |
92 bool binded_; | 92 bool binded_; |
93 bool closed_; | 93 bool closed_; |
94 | 94 |
95 PP_CompletionCallback bind_callback_; | 95 PP_CompletionCallback bind_callback_; |
96 PP_CompletionCallback recvfrom_callback_; | 96 PP_CompletionCallback recvfrom_callback_; |
97 PP_CompletionCallback sendto_callback_; | 97 PP_CompletionCallback sendto_callback_; |
98 | 98 |
99 char* read_buffer_; | 99 char* read_buffer_; |
100 int32_t bytes_to_read_; | 100 int32_t bytes_to_read_; |
101 | 101 |
102 PP_Flash_NetAddress recvfrom_addr_; | 102 PP_NetAddress_Private recvfrom_addr_; |
103 | 103 |
104 DISALLOW_COPY_AND_ASSIGN(FlashUDPSocket); | 104 DISALLOW_COPY_AND_ASSIGN(FlashUDPSocket); |
105 }; | 105 }; |
106 | 106 |
107 FlashUDPSocket::FlashUDPSocket(const HostResource& resource, | 107 FlashUDPSocket::FlashUDPSocket(const HostResource& resource, |
108 uint32 socket_id) | 108 uint32 socket_id) |
109 : Resource(resource), | 109 : Resource(resource), |
110 socket_id_(socket_id), | 110 socket_id_(socket_id), |
111 binded_(false), | 111 binded_(false), |
112 closed_(false), | 112 closed_(false), |
(...skipping 14 matching lines...) Expand all Loading... |
127 } | 127 } |
128 | 128 |
129 FlashUDPSocket::~FlashUDPSocket() { | 129 FlashUDPSocket::~FlashUDPSocket() { |
130 Close(); | 130 Close(); |
131 } | 131 } |
132 | 132 |
133 PPB_Flash_UDPSocket_API* FlashUDPSocket::AsPPB_Flash_UDPSocket_API() { | 133 PPB_Flash_UDPSocket_API* FlashUDPSocket::AsPPB_Flash_UDPSocket_API() { |
134 return this; | 134 return this; |
135 } | 135 } |
136 | 136 |
137 int32_t FlashUDPSocket::Bind(const PP_Flash_NetAddress* addr, | 137 int32_t FlashUDPSocket::Bind(const PP_NetAddress_Private* addr, |
138 PP_CompletionCallback callback) { | 138 PP_CompletionCallback callback) { |
139 if (!addr || !callback.func) | 139 if (!addr || !callback.func) |
140 return PP_ERROR_BADARGUMENT; | 140 return PP_ERROR_BADARGUMENT; |
141 if (binded_ || closed_) | 141 if (binded_ || closed_) |
142 return PP_ERROR_FAILED; | 142 return PP_ERROR_FAILED; |
143 if (bind_callback_.func) | 143 if (bind_callback_.func) |
144 return PP_ERROR_INPROGRESS; | 144 return PP_ERROR_INPROGRESS; |
145 | 145 |
146 bind_callback_ = callback; | 146 bind_callback_ = callback; |
147 | 147 |
(...skipping 17 matching lines...) Expand all Loading... |
165 bytes_to_read_ = std::min(num_bytes, kFlashUDPSocketMaxReadSize); | 165 bytes_to_read_ = std::min(num_bytes, kFlashUDPSocketMaxReadSize); |
166 recvfrom_callback_ = callback; | 166 recvfrom_callback_ = callback; |
167 | 167 |
168 // Send the request, the browser will call us back via RecvFromACK. | 168 // Send the request, the browser will call us back via RecvFromACK. |
169 GetDispatcher()->SendToBrowser( | 169 GetDispatcher()->SendToBrowser( |
170 new PpapiHostMsg_PPBFlashUDPSocket_RecvFrom( | 170 new PpapiHostMsg_PPBFlashUDPSocket_RecvFrom( |
171 socket_id_, num_bytes)); | 171 socket_id_, num_bytes)); |
172 return PP_OK_COMPLETIONPENDING; | 172 return PP_OK_COMPLETIONPENDING; |
173 } | 173 } |
174 | 174 |
175 PP_Bool FlashUDPSocket::GetRecvFromAddress(PP_Flash_NetAddress* addr) { | 175 PP_Bool FlashUDPSocket::GetRecvFromAddress(PP_NetAddress_Private* addr) { |
176 if (!addr) | 176 if (!addr) |
177 return PP_FALSE; | 177 return PP_FALSE; |
178 | 178 |
179 *addr = recvfrom_addr_; | 179 *addr = recvfrom_addr_; |
180 return PP_TRUE; | 180 return PP_TRUE; |
181 } | 181 } |
182 | 182 |
183 int32_t FlashUDPSocket::SendTo(const char* buffer, | 183 int32_t FlashUDPSocket::SendTo(const char* buffer, |
184 int32_t num_bytes, | 184 int32_t num_bytes, |
185 const PP_Flash_NetAddress* addr, | 185 const PP_NetAddress_Private* addr, |
186 PP_CompletionCallback callback) { | 186 PP_CompletionCallback callback) { |
187 if (!buffer || num_bytes <= 0 || !addr || !callback.func) | 187 if (!buffer || num_bytes <= 0 || !addr || !callback.func) |
188 return PP_ERROR_BADARGUMENT; | 188 return PP_ERROR_BADARGUMENT; |
189 if (!binded_) | 189 if (!binded_) |
190 return PP_ERROR_FAILED; | 190 return PP_ERROR_FAILED; |
191 if (sendto_callback_.func) | 191 if (sendto_callback_.func) |
192 return PP_ERROR_INPROGRESS; | 192 return PP_ERROR_INPROGRESS; |
193 | 193 |
194 if (num_bytes > kFlashUDPSocketMaxWriteSize) | 194 if (num_bytes > kFlashUDPSocketMaxWriteSize) |
195 num_bytes = kFlashUDPSocketMaxWriteSize; | 195 num_bytes = kFlashUDPSocketMaxWriteSize; |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
233 | 233 |
234 if (succeeded) | 234 if (succeeded) |
235 binded_ = true; | 235 binded_ = true; |
236 | 236 |
237 PP_RunAndClearCompletionCallback(&bind_callback_, | 237 PP_RunAndClearCompletionCallback(&bind_callback_, |
238 succeeded ? PP_OK : PP_ERROR_FAILED); | 238 succeeded ? PP_OK : PP_ERROR_FAILED); |
239 } | 239 } |
240 | 240 |
241 void FlashUDPSocket::OnRecvFromCompleted(bool succeeded, | 241 void FlashUDPSocket::OnRecvFromCompleted(bool succeeded, |
242 const std::string& data, | 242 const std::string& data, |
243 const PP_Flash_NetAddress& addr) { | 243 const PP_NetAddress_Private& addr) { |
244 if (!recvfrom_callback_.func || !read_buffer_) { | 244 if (!recvfrom_callback_.func || !read_buffer_) { |
245 NOTREACHED(); | 245 NOTREACHED(); |
246 return; | 246 return; |
247 } | 247 } |
248 | 248 |
249 if (succeeded) { | 249 if (succeeded) { |
250 CHECK_LE(static_cast<int32_t>(data.size()), bytes_to_read_); | 250 CHECK_LE(static_cast<int32_t>(data.size()), bytes_to_read_); |
251 if (!data.empty()) | 251 if (!data.empty()) |
252 memcpy(read_buffer_, data.c_str(), data.size()); | 252 memcpy(read_buffer_, data.c_str(), data.size()); |
253 } | 253 } |
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
336 if (iter == g_id_to_socket->end()) | 336 if (iter == g_id_to_socket->end()) |
337 return; | 337 return; |
338 iter->second->OnBindCompleted(succeeded); | 338 iter->second->OnBindCompleted(succeeded); |
339 } | 339 } |
340 | 340 |
341 void PPB_Flash_UDPSocket_Proxy::OnMsgRecvFromACK( | 341 void PPB_Flash_UDPSocket_Proxy::OnMsgRecvFromACK( |
342 uint32 /* plugin_dispatcher_id */, | 342 uint32 /* plugin_dispatcher_id */, |
343 uint32 socket_id, | 343 uint32 socket_id, |
344 bool succeeded, | 344 bool succeeded, |
345 const std::string& data, | 345 const std::string& data, |
346 const PP_Flash_NetAddress& addr) { | 346 const PP_NetAddress_Private& addr) { |
347 if (!g_id_to_socket) { | 347 if (!g_id_to_socket) { |
348 NOTREACHED(); | 348 NOTREACHED(); |
349 return; | 349 return; |
350 } | 350 } |
351 IDToSocketMap::iterator iter = g_id_to_socket->find(socket_id); | 351 IDToSocketMap::iterator iter = g_id_to_socket->find(socket_id); |
352 if (iter == g_id_to_socket->end()) | 352 if (iter == g_id_to_socket->end()) |
353 return; | 353 return; |
354 iter->second->OnRecvFromCompleted(succeeded, data, addr); | 354 iter->second->OnRecvFromCompleted(succeeded, data, addr); |
355 } | 355 } |
356 | 356 |
357 void PPB_Flash_UDPSocket_Proxy::OnMsgSendToACK( | 357 void PPB_Flash_UDPSocket_Proxy::OnMsgSendToACK( |
358 uint32 /* plugin_dispatcher_id */, | 358 uint32 /* plugin_dispatcher_id */, |
359 uint32 socket_id, | 359 uint32 socket_id, |
360 bool succeeded, | 360 bool succeeded, |
361 int32_t bytes_written) { | 361 int32_t bytes_written) { |
362 if (!g_id_to_socket) { | 362 if (!g_id_to_socket) { |
363 NOTREACHED(); | 363 NOTREACHED(); |
364 return; | 364 return; |
365 } | 365 } |
366 IDToSocketMap::iterator iter = g_id_to_socket->find(socket_id); | 366 IDToSocketMap::iterator iter = g_id_to_socket->find(socket_id); |
367 if (iter == g_id_to_socket->end()) | 367 if (iter == g_id_to_socket->end()) |
368 return; | 368 return; |
369 iter->second->OnSendToCompleted(succeeded, bytes_written); | 369 iter->second->OnSendToCompleted(succeeded, bytes_written); |
370 } | 370 } |
371 | 371 |
372 } // namespace proxy | 372 } // namespace proxy |
373 } // namespace ppapi | 373 } // namespace ppapi |
374 | |
OLD | NEW |