Chromium Code Reviews| Index: ppapi/shared_impl/ppb_tcp_socket_shared.cc |
| diff --git a/ppapi/shared_impl/ppb_tcp_socket_shared.cc b/ppapi/shared_impl/ppb_tcp_socket_shared.cc |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..dba20db4150c1567f6839275db77fed5cb0ff732 |
| --- /dev/null |
| +++ b/ppapi/shared_impl/ppb_tcp_socket_shared.cc |
| @@ -0,0 +1,90 @@ |
| +// Copyright 2013 The Chromium Authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +#include "ppapi/shared_impl/ppb_tcp_socket_shared.h" |
| + |
| +#include "base/logging.h" |
| + |
| +namespace ppapi { |
| + |
| +TCPSocketState::TCPSocketState(StateType initial_state) |
| + : state_(initial_state), |
| + pending_transition_(NONE) { |
| + DCHECK(initial_state == INITIAL || initial_state == CONNECTED); |
|
bbudge
2013/09/19 19:41:47
Maybe better to replace initial_state with state_?
yzshen1
2013/09/19 21:12:15
Done. Thanks! I just realized that initial_state i
|
| +} |
| + |
| +TCPSocketState::~TCPSocketState() { |
| +} |
| + |
| +void TCPSocketState::SetPendingTransition(TransitionType pending_transition) { |
| + DCHECK(IsValidTransition(pending_transition)); |
| + pending_transition_ = pending_transition; |
| +} |
| + |
| +void TCPSocketState::CompletePendingTransition(bool success) { |
| + switch (pending_transition_) { |
| + case NONE: |
| + NOTREACHED(); |
| + break; |
| + case BIND: |
| + if (success) |
| + state_ = BOUND; |
| + break; |
| + case CONNECT: |
| + state_ = success ? CONNECTED : CLOSED; |
| + break; |
| + case SSL_CONNECT: |
| + state_ = success ? SSL_CONNECTED : CLOSED; |
| + break; |
| + case LISTEN: |
| + if (success) |
| + state_ = LISTENING; |
| + break; |
| + case CLOSE: |
| + state_ = CLOSED; |
| + break; |
| + } |
| + pending_transition_ = NONE; |
| +} |
| + |
| +void TCPSocketState::DoTransition(TransitionType transition, bool success) { |
| + SetPendingTransition(transition); |
| + CompletePendingTransition(success); |
| +} |
| + |
| +bool TCPSocketState::IsValidTransition(TransitionType transition) const { |
| + if (pending_transition_ != NONE && transition != CLOSE) |
| + return false; |
| + |
| + switch (transition) { |
| + case NONE: |
| + return false; |
| + case BIND: |
| + return state_ == INITIAL; |
| + case CONNECT: |
| + return state_ == INITIAL || state_ == BOUND; |
| + case SSL_CONNECT: |
| + return state_ == CONNECTED; |
| + case LISTEN: |
| + return state_ == BOUND; |
| + case CLOSE: |
| + return true; |
| + } |
| + NOTREACHED(); |
| + return false; |
| +} |
| + |
| +bool TCPSocketState::IsPending(TransitionType transition) const { |
| + return pending_transition_ == transition; |
| +} |
| + |
| +bool TCPSocketState::IsConnected() const { |
| + return state_ == CONNECTED || state_ == SSL_CONNECTED; |
| +} |
| + |
| +bool TCPSocketState::IsBound() const { |
| + return state_ != INITIAL && state_ != CLOSED; |
| +} |
| + |
| +} // namespace ppapi |