OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/shared_impl/private/tcp_socket_private_impl.h" | 5 #include "ppapi/shared_impl/private/tcp_socket_private_impl.h" |
6 | 6 |
7 #include <string.h> | 7 #include <string.h> |
8 | 8 |
9 #include <algorithm> | 9 #include <algorithm> |
10 | 10 |
(...skipping 214 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
225 !TrackedCallback::IsPending(connect_callback_)) { | 225 !TrackedCallback::IsPending(connect_callback_)) { |
226 NOTREACHED(); | 226 NOTREACHED(); |
227 return; | 227 return; |
228 } | 228 } |
229 | 229 |
230 if (succeeded) { | 230 if (succeeded) { |
231 local_addr_ = local_addr; | 231 local_addr_ = local_addr; |
232 remote_addr_ = remote_addr; | 232 remote_addr_ = remote_addr; |
233 connection_state_ = CONNECTED; | 233 connection_state_ = CONNECTED; |
234 } | 234 } |
235 TrackedCallback::ClearAndRun(&connect_callback_, | 235 connect_callback_->Run(succeeded ? PP_OK : PP_ERROR_FAILED); |
236 succeeded ? PP_OK : PP_ERROR_FAILED); | |
237 } | 236 } |
238 | 237 |
239 void TCPSocketPrivateImpl::OnSSLHandshakeCompleted( | 238 void TCPSocketPrivateImpl::OnSSLHandshakeCompleted( |
240 bool succeeded, | 239 bool succeeded, |
241 const PPB_X509Certificate_Fields& certificate_fields) { | 240 const PPB_X509Certificate_Fields& certificate_fields) { |
242 if (connection_state_ != CONNECTED || | 241 if (connection_state_ != CONNECTED || |
243 !TrackedCallback::IsPending(ssl_handshake_callback_)) { | 242 !TrackedCallback::IsPending(ssl_handshake_callback_)) { |
244 NOTREACHED(); | 243 NOTREACHED(); |
245 return; | 244 return; |
246 } | 245 } |
247 | 246 |
248 if (succeeded) { | 247 if (succeeded) { |
249 connection_state_ = SSL_CONNECTED; | 248 connection_state_ = SSL_CONNECTED; |
250 server_certificate_ = new PPB_X509Certificate_Private_Shared( | 249 server_certificate_ = new PPB_X509Certificate_Private_Shared( |
251 resource_type_, | 250 resource_type_, |
252 pp_instance(), | 251 pp_instance(), |
253 certificate_fields); | 252 certificate_fields); |
254 TrackedCallback::ClearAndRun(&ssl_handshake_callback_, PP_OK); | 253 ssl_handshake_callback_->Run(PP_OK); |
255 } else { | 254 } else { |
256 // The resource might be released in the callback so we need to hold | 255 // The resource might be released in the callback so we need to hold |
257 // a reference so we can Disconnect() first. | 256 // a reference so we can Disconnect() first. |
258 AddRef(); | 257 AddRef(); |
259 TrackedCallback::ClearAndRun(&ssl_handshake_callback_, PP_ERROR_FAILED); | 258 ssl_handshake_callback_->Run(PP_ERROR_FAILED); |
260 Disconnect(); | 259 Disconnect(); |
261 Release(); | 260 Release(); |
262 } | 261 } |
263 } | 262 } |
264 | 263 |
265 void TCPSocketPrivateImpl::OnReadCompleted(bool succeeded, | 264 void TCPSocketPrivateImpl::OnReadCompleted(bool succeeded, |
266 const std::string& data) { | 265 const std::string& data) { |
267 if (!TrackedCallback::IsPending(read_callback_) || !read_buffer_) { | 266 if (!TrackedCallback::IsPending(read_callback_) || !read_buffer_) { |
268 NOTREACHED(); | 267 NOTREACHED(); |
269 return; | 268 return; |
270 } | 269 } |
271 | 270 |
272 if (succeeded) { | 271 if (succeeded) { |
273 CHECK_LE(static_cast<int32_t>(data.size()), bytes_to_read_); | 272 CHECK_LE(static_cast<int32_t>(data.size()), bytes_to_read_); |
274 if (!data.empty()) | 273 if (!data.empty()) |
275 memcpy(read_buffer_, data.c_str(), data.size()); | 274 memcpy(read_buffer_, data.c_str(), data.size()); |
276 } | 275 } |
277 read_buffer_ = NULL; | 276 read_buffer_ = NULL; |
278 bytes_to_read_ = -1; | 277 bytes_to_read_ = -1; |
279 | 278 |
280 TrackedCallback::ClearAndRun( | 279 read_callback_->Run( |
281 &read_callback_, | |
282 succeeded ? static_cast<int32_t>(data.size()) : | 280 succeeded ? static_cast<int32_t>(data.size()) : |
283 static_cast<int32_t>(PP_ERROR_FAILED)); | 281 static_cast<int32_t>(PP_ERROR_FAILED)); |
284 } | 282 } |
285 | 283 |
286 void TCPSocketPrivateImpl::OnWriteCompleted(bool succeeded, | 284 void TCPSocketPrivateImpl::OnWriteCompleted(bool succeeded, |
287 int32_t bytes_written) { | 285 int32_t bytes_written) { |
288 if (!TrackedCallback::IsPending(write_callback_) || | 286 if (!TrackedCallback::IsPending(write_callback_) || |
289 (succeeded && bytes_written < 0)) { | 287 (succeeded && bytes_written < 0)) { |
290 NOTREACHED(); | 288 NOTREACHED(); |
291 return; | 289 return; |
292 } | 290 } |
293 | 291 |
294 TrackedCallback::ClearAndRun( | 292 write_callback_->Run( |
295 &write_callback_, | |
296 succeeded ? bytes_written : static_cast<int32_t>(PP_ERROR_FAILED)); | 293 succeeded ? bytes_written : static_cast<int32_t>(PP_ERROR_FAILED)); |
297 } | 294 } |
298 | 295 |
299 void TCPSocketPrivateImpl::Init(uint32 socket_id) { | 296 void TCPSocketPrivateImpl::Init(uint32 socket_id) { |
300 DCHECK(socket_id != 0); | 297 DCHECK(socket_id != 0); |
301 socket_id_ = socket_id; | 298 socket_id_ = socket_id; |
302 connection_state_ = BEFORE_CONNECT; | 299 connection_state_ = BEFORE_CONNECT; |
303 read_buffer_ = NULL; | 300 read_buffer_ = NULL; |
304 bytes_to_read_ = -1; | 301 bytes_to_read_ = -1; |
305 | 302 |
306 local_addr_.size = 0; | 303 local_addr_.size = 0; |
307 memset(local_addr_.data, 0, | 304 memset(local_addr_.data, 0, |
308 arraysize(local_addr_.data) * sizeof(*local_addr_.data)); | 305 arraysize(local_addr_.data) * sizeof(*local_addr_.data)); |
309 remote_addr_.size = 0; | 306 remote_addr_.size = 0; |
310 memset(remote_addr_.data, 0, | 307 memset(remote_addr_.data, 0, |
311 arraysize(remote_addr_.data) * sizeof(*remote_addr_.data)); | 308 arraysize(remote_addr_.data) * sizeof(*remote_addr_.data)); |
312 } | 309 } |
313 | 310 |
314 bool TCPSocketPrivateImpl::IsConnected() const { | 311 bool TCPSocketPrivateImpl::IsConnected() const { |
315 return connection_state_ == CONNECTED || connection_state_ == SSL_CONNECTED; | 312 return connection_state_ == CONNECTED || connection_state_ == SSL_CONNECTED; |
316 } | 313 } |
317 | 314 |
318 void TCPSocketPrivateImpl::PostAbortIfNecessary( | 315 void TCPSocketPrivateImpl::PostAbortIfNecessary( |
319 scoped_refptr<TrackedCallback>* callback) { | 316 scoped_refptr<TrackedCallback>* callback) { |
320 if (callback->get()) | 317 if (TrackedCallback::IsPending(*callback)) |
321 (*callback)->PostAbort(); | 318 (*callback)->PostAbort(); |
322 } | 319 } |
323 | 320 |
324 } // namespace ppapi | 321 } // namespace ppapi |
OLD | NEW |