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 3 // found in the LICENSE file. 4 5 #ifndef REMOTING_PROTOCOL_SESSION_H_ 6 #define REMOTING_PROTOCOL_SESSION_H_ 7 8 #include <string> 9 10 #include "remoting/protocol/errors.h" 11 #include "remoting/protocol/session_config.h" 12 13 namespace net { 14 class IPEndPoint; 15 } // namespace net 16 17 namespace remoting { 18 namespace protocol { 19 20 class StreamChannelFactory; 21 struct TransportRoute; 22 23 // Generic interface for Chromotocol connection used by both client and host. 24 // Provides access to the connection channels, but doesn't depend on the 25 // protocol used for each channel. 26 class Session { 27 public: 28 enum State { 29 // Created, but not connecting yet. 30 INITIALIZING, 31 32 // Sent session-initiate, but haven't received session-accept. 33 CONNECTING, 34 35 // Received session-initiate, but haven't sent session-accept. 36 ACCEPTING, 37 38 // Session has been accepted and is pending authentication. 39 CONNECTED, 40 41 // Session has started authenticating. 42 AUTHENTICATING, 43 44 // Session has been connected and authenticated. 45 AUTHENTICATED, 46 47 // Session has been closed. 48 CLOSED, 49 50 // Connection has failed. 51 FAILED, 52 }; 53 54 class EventHandler { 55 public: 56 EventHandler() {} 57 virtual ~EventHandler() {} 58 59 // Called after session state has changed. It is safe to destroy 60 // the session from within the handler if |state| is AUTHENTICATING 61 // or CLOSED or FAILED. 62 virtual void OnSessionStateChange(State state) = 0; 63 64 // Called whenever route for the channel specified with 65 // |channel_name| changes. Session must not be destroyed by the 66 // handler of this event. 67 virtual void OnSessionRouteChange(const std::string& channel_name, 68 const TransportRoute& route) = 0; 69 }; 70 71 72 Session() {} 73 virtual ~Session() {} 74 75 // Set event handler for this session. |event_handler| must outlive 76 // this object. 77 virtual void SetEventHandler(EventHandler* event_handler) = 0; 78 79 // Returns error code for a failed session. 80 virtual ErrorCode error() = 0; 81 82 // JID of the other side. 83 virtual const std::string& jid() = 0; 84 85 // Configuration of the protocol that was sent or received in the 86 // session-initiate jingle message. Returned pointer is valid until 87 // connection is closed. 88 virtual const CandidateSessionConfig* candidate_config() = 0; 89 90 // Protocol configuration. Can be called only after session has been accepted. 91 // Returned pointer is valid until connection is closed. 92 virtual const SessionConfig& config() = 0; 93 94 // Set protocol configuration for an incoming session. Must be 95 // called on the host before the connection is accepted, from 96 // ChromotocolServer::IncomingConnectionCallback. 97 virtual void set_config(const SessionConfig& config) = 0; 98 99 // GetTransportChannelFactory() returns a factory that creates a new transport 100 // channel for each logical channel. GetMultiplexedChannelFactory() channels 101 // share a single underlying transport channel 102 virtual StreamChannelFactory* GetTransportChannelFactory() = 0; 103 virtual StreamChannelFactory* GetMultiplexedChannelFactory() = 0; 104 105 // Closes connection. Callbacks are guaranteed not to be called 106 // after this method returns. Must be called before the object is 107 // destroyed, unless the state is set to FAILED or CLOSED. 108 virtual void Close() = 0; 109 110 private: 111 DISALLOW_COPY_AND_ASSIGN(Session); 112 }; 113 114 } // namespace protocol 115 } // namespace remoting 116 117 #endif // REMOTING_PROTOCOL_SESSION_H_ 118