session.h revision 2a99a7e74a7f215066514fe81d2bfa6639d9eddd
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
13namespace net {
14class IPEndPoint;
15}  // namespace net
16
17namespace remoting {
18namespace protocol {
19
20class ChannelFactory;
21struct 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.
26class 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 been connected and authenticated.
42    AUTHENTICATED,
43
44    // Session has been closed.
45    CLOSED,
46
47    // Connection has failed.
48    FAILED,
49  };
50
51  class EventHandler {
52   public:
53    EventHandler() {}
54    virtual ~EventHandler() {}
55
56    // Called after session state has changed. It is safe to destroy
57    // the session from within the handler if |state| is CLOSED or
58    // FAILED.
59    virtual void OnSessionStateChange(State state) = 0;
60
61    // Called whenever route for the channel specified with
62    // |channel_name| changes. Session must not be destroyed by the
63    // handler of this event.
64    virtual void OnSessionRouteChange(const std::string& channel_name,
65                                      const TransportRoute& route) = 0;
66
67    // Called when ready state on one of the channels changes. See
68    // comments in transport.h for explanation on what this state
69    // means and how it can used.
70    virtual void OnSessionChannelReady(const std::string& channel_name,
71                                       bool ready) {}
72  };
73
74
75  Session() {}
76  virtual ~Session() {}
77
78  // Set event handler for this session. |event_handler| must outlive
79  // this object.
80  virtual void SetEventHandler(EventHandler* event_handler) = 0;
81
82  // Returns error code for a failed session.
83  virtual ErrorCode error() = 0;
84
85  // JID of the other side.
86  virtual const std::string& jid() = 0;
87
88  // Configuration of the protocol that was sent or received in the
89  // session-initiate jingle message. Returned pointer is valid until
90  // connection is closed.
91  virtual const CandidateSessionConfig* candidate_config() = 0;
92
93  // Protocol configuration. Can be called only after session has been accepted.
94  // Returned pointer is valid until connection is closed.
95  virtual const SessionConfig& config() = 0;
96
97  // Set protocol configuration for an incoming session. Must be
98  // called on the host before the connection is accepted, from
99  // ChromotocolServer::IncomingConnectionCallback.
100  virtual void set_config(const SessionConfig& config) = 0;
101
102  // GetTransportChannelFactory() returns a factory that creates a new transport
103  // channel for each logical channel. GetMultiplexedChannelFactory() channels
104  // share a single underlying transport channel
105  virtual ChannelFactory* GetTransportChannelFactory() = 0;
106  virtual ChannelFactory* GetMultiplexedChannelFactory() = 0;
107
108  // Closes connection. Callbacks are guaranteed not to be called
109  // after this method returns. Must be called before the object is
110  // destroyed, unless the state is set to FAILED or CLOSED.
111  virtual void Close() = 0;
112
113 private:
114  DISALLOW_COPY_AND_ASSIGN(Session);
115};
116
117}  // namespace protocol
118}  // namespace remoting
119
120#endif  // REMOTING_PROTOCOL_SESSION_H_
121