| 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 |