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 194 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
205 | 205 |
206 connection_state_ = DISCONNECTED; | 206 connection_state_ = DISCONNECTED; |
207 | 207 |
208 SendDisconnect(); | 208 SendDisconnect(); |
209 socket_id_ = 0; | 209 socket_id_ = 0; |
210 | 210 |
211 PostAbortIfNecessary(&connect_callback_); | 211 PostAbortIfNecessary(&connect_callback_); |
212 PostAbortIfNecessary(&ssl_handshake_callback_); | 212 PostAbortIfNecessary(&ssl_handshake_callback_); |
213 PostAbortIfNecessary(&read_callback_); | 213 PostAbortIfNecessary(&read_callback_); |
214 PostAbortIfNecessary(&write_callback_); | 214 PostAbortIfNecessary(&write_callback_); |
| 215 PostAbortIfNecessary(&set_option_callback_); |
215 read_buffer_ = NULL; | 216 read_buffer_ = NULL; |
216 bytes_to_read_ = -1; | 217 bytes_to_read_ = -1; |
217 server_certificate_ = NULL; | 218 server_certificate_ = NULL; |
218 } | 219 } |
219 | 220 |
| 221 int32_t TCPSocketPrivateImpl::SetOption( |
| 222 PP_TCPSocketOption_Private name, |
| 223 const PP_Var& value, |
| 224 scoped_refptr<TrackedCallback> callback) { |
| 225 if (!IsConnected()) |
| 226 return PP_ERROR_FAILED; |
| 227 if (TrackedCallback::IsPending(set_option_callback_)) |
| 228 return PP_ERROR_INPROGRESS; |
| 229 |
| 230 set_option_callback_ = callback; |
| 231 |
| 232 switch (name) { |
| 233 case PP_TCPSOCKETOPTION_NO_DELAY: |
| 234 if (value.type != PP_VARTYPE_BOOL) |
| 235 return PP_ERROR_BADARGUMENT; |
| 236 SendSetBoolOption(name, PP_ToBool(value.value.as_bool)); |
| 237 return PP_OK_COMPLETIONPENDING; |
| 238 default: |
| 239 return PP_ERROR_BADARGUMENT; |
| 240 } |
| 241 } |
| 242 |
220 void TCPSocketPrivateImpl::OnConnectCompleted( | 243 void TCPSocketPrivateImpl::OnConnectCompleted( |
221 bool succeeded, | 244 bool succeeded, |
222 const PP_NetAddress_Private& local_addr, | 245 const PP_NetAddress_Private& local_addr, |
223 const PP_NetAddress_Private& remote_addr) { | 246 const PP_NetAddress_Private& remote_addr) { |
224 if (connection_state_ != BEFORE_CONNECT || | 247 if (connection_state_ != BEFORE_CONNECT || |
225 !TrackedCallback::IsPending(connect_callback_)) { | 248 !TrackedCallback::IsPending(connect_callback_)) { |
226 NOTREACHED(); | 249 NOTREACHED(); |
227 return; | 250 return; |
228 } | 251 } |
229 | 252 |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
286 if (!TrackedCallback::IsPending(write_callback_) || | 309 if (!TrackedCallback::IsPending(write_callback_) || |
287 (succeeded && bytes_written < 0)) { | 310 (succeeded && bytes_written < 0)) { |
288 NOTREACHED(); | 311 NOTREACHED(); |
289 return; | 312 return; |
290 } | 313 } |
291 | 314 |
292 write_callback_->Run( | 315 write_callback_->Run( |
293 succeeded ? bytes_written : static_cast<int32_t>(PP_ERROR_FAILED)); | 316 succeeded ? bytes_written : static_cast<int32_t>(PP_ERROR_FAILED)); |
294 } | 317 } |
295 | 318 |
| 319 void TCPSocketPrivateImpl::OnSetOptionCompleted(bool succeeded) { |
| 320 if (!TrackedCallback::IsPending(set_option_callback_)) { |
| 321 NOTREACHED(); |
| 322 return; |
| 323 } |
| 324 |
| 325 set_option_callback_->Run(succeeded ? PP_OK : PP_ERROR_FAILED); |
| 326 } |
| 327 |
296 void TCPSocketPrivateImpl::Init(uint32 socket_id) { | 328 void TCPSocketPrivateImpl::Init(uint32 socket_id) { |
297 DCHECK(socket_id != 0); | 329 DCHECK(socket_id != 0); |
298 socket_id_ = socket_id; | 330 socket_id_ = socket_id; |
299 connection_state_ = BEFORE_CONNECT; | 331 connection_state_ = BEFORE_CONNECT; |
300 read_buffer_ = NULL; | 332 read_buffer_ = NULL; |
301 bytes_to_read_ = -1; | 333 bytes_to_read_ = -1; |
302 | 334 |
303 local_addr_.size = 0; | 335 local_addr_.size = 0; |
304 memset(local_addr_.data, 0, | 336 memset(local_addr_.data, 0, |
305 arraysize(local_addr_.data) * sizeof(*local_addr_.data)); | 337 arraysize(local_addr_.data) * sizeof(*local_addr_.data)); |
306 remote_addr_.size = 0; | 338 remote_addr_.size = 0; |
307 memset(remote_addr_.data, 0, | 339 memset(remote_addr_.data, 0, |
308 arraysize(remote_addr_.data) * sizeof(*remote_addr_.data)); | 340 arraysize(remote_addr_.data) * sizeof(*remote_addr_.data)); |
309 } | 341 } |
310 | 342 |
311 bool TCPSocketPrivateImpl::IsConnected() const { | 343 bool TCPSocketPrivateImpl::IsConnected() const { |
312 return connection_state_ == CONNECTED || connection_state_ == SSL_CONNECTED; | 344 return connection_state_ == CONNECTED || connection_state_ == SSL_CONNECTED; |
313 } | 345 } |
314 | 346 |
315 void TCPSocketPrivateImpl::PostAbortIfNecessary( | 347 void TCPSocketPrivateImpl::PostAbortIfNecessary( |
316 scoped_refptr<TrackedCallback>* callback) { | 348 scoped_refptr<TrackedCallback>* callback) { |
317 if (TrackedCallback::IsPending(*callback)) | 349 if (TrackedCallback::IsPending(*callback)) |
318 (*callback)->PostAbort(); | 350 (*callback)->PostAbort(); |
319 } | 351 } |
320 | 352 |
321 } // namespace ppapi | 353 } // namespace ppapi |
OLD | NEW |