Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(483)

Unified Diff: ppapi/shared_impl/ppb_tcp_socket_shared.cc

Issue 24195004: PPB_TCPSocket: add support for TCP server socket operations. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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

Powered by Google App Engine
This is Rietveld 408576698