Home | History | Annotate | Download | only in protocol
      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