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

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
« no previous file with comments | « ppapi/shared_impl/ppb_tcp_socket_shared.h ('k') | ppapi/tests/test_tcp_socket.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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..934c573d16d09f26f43eb5b63cd40bdd7e63677f
--- /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 state)
+ : state_(state),
+ pending_transition_(NONE) {
+ DCHECK(state_ == INITIAL || state_ == CONNECTED);
+}
+
+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
« no previous file with comments | « ppapi/shared_impl/ppb_tcp_socket_shared.h ('k') | ppapi/tests/test_tcp_socket.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698