168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)// found in the LICENSE file. 468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#ifndef PPAPI_SHARED_IMPL_PPB_TCP_SOCKET_SHARED_H_ 668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#define PPAPI_SHARED_IMPL_PPB_TCP_SOCKET_SHARED_H_ 768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "ppapi/shared_impl/ppapi_shared_export.h" 968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 1068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)namespace ppapi { 1168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 1268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)class PPAPI_SHARED_EXPORT TCPSocketState { 1368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) public: 1468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) enum StateType { 1568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) // The socket hasn't been bound or connected. 1668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) INITIAL, 1768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) // The socket has been bound. 1868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) BOUND, 1968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) // A connection has been established. 2068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) CONNECTED, 2168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) // An SSL connection has been established. 2268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) SSL_CONNECTED, 2368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) // The socket is listening. 2468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) LISTENING, 2568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) // The socket has been closed. 2668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) CLOSED 2768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) }; 2868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 2968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) // Transitions that will change the socket state. Please note that 3068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) // read/write/accept are not included because they don't change the socket 3168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) // state. 32a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) enum TransitionType { NONE, BIND, CONNECT, SSL_CONNECT, LISTEN, CLOSE }; 3368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 3468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) explicit TCPSocketState(StateType state); 3568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) ~TCPSocketState(); 3668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 3768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) StateType state() const { return state_; } 3868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 3968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) void SetPendingTransition(TransitionType pending_transition); 4068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) void CompletePendingTransition(bool success); 4168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 4268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) void DoTransition(TransitionType transition, bool success); 4368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 4468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) bool IsValidTransition(TransitionType transition) const; 4568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) bool IsPending(TransitionType transition) const; 4668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 4768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) bool IsConnected() const; 4868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) bool IsBound() const; 4968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 5068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) private: 5168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) StateType state_; 5268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) TransitionType pending_transition_; 5368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)}; 5468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 5568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)// TCP socket API versions. 5668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)enum PPAPI_SHARED_EXPORT TCPSocketVersion { 5768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) // PPB_TCPSocket_Private. 5868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) TCP_SOCKET_VERSION_PRIVATE, 5968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) // PPB_TCPSocket v1.0. 6068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) TCP_SOCKET_VERSION_1_0, 6168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) // PPB_TCPSocket v1.1 or above. 6268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) TCP_SOCKET_VERSION_1_1_OR_ABOVE 6368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)}; 6468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 6568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)} // namespace ppapi 6668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 6768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#endif // PPAPI_SHARED_IMPL_PPB_TCP_SOCKET_SHARED_H_ 68