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

Side by Side Diff: remoting/protocol/transport.h

Issue 1413813006: Revert of Add TransportSession interface to prepare for WebRTC-based transport. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 1 month 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 unified diff | Download patch
« no previous file with comments | « remoting/protocol/session.h ('k') | remoting/remoting_srcs.gypi » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 //
5 // This file defines the interface for peer-to-peer transport. There
6 // are two types of transport: StreamTransport and DatagramTransport.
7 // They must both be created using TransportFactory instances and they
8 // provide the same interface, except that one should be used for
9 // reliable stream connection and the other one for unreliable
10 // datagram connection. The Transport interface itself doesn't provide
11 // methods to send/receive data. Instead it creates an instance of
12 // P2PDatagramSocket which provides access to the data channel. After a
13 // new transport is Initialize()'ed the Connect() method must be called.
14 // Connect() starts asynchronous creation and initialization of the
15 // connection socket that can be used later to send and receive data.
16 // The socket is passed to the callback specified in the Connect() call.
17 // The Transport object must exist during the whole lifetime of the
18 // connection socket. Later deletion of the connection socket causes
19 // teardown of the corresponding Transport object.
4 20
5 #ifndef REMOTING_PROTOCOL_TRANSPORT_H_ 21 #ifndef REMOTING_PROTOCOL_TRANSPORT_H_
6 #define REMOTING_PROTOCOL_TRANSPORT_H_ 22 #define REMOTING_PROTOCOL_TRANSPORT_H_
7 23
8 #include <string> 24 #include <string>
9 25
10 #include "base/basictypes.h" 26 #include "base/basictypes.h"
11 #include "base/callback_forward.h" 27 #include "base/callback_forward.h"
12 #include "base/memory/scoped_ptr.h" 28 #include "base/memory/scoped_ptr.h"
13 #include "base/threading/non_thread_safe.h" 29 #include "base/threading/non_thread_safe.h"
14 #include "net/base/ip_endpoint.h" 30 #include "net/base/ip_endpoint.h"
15 #include "remoting/protocol/errors.h"
16 31
17 namespace cricket { 32 namespace cricket {
18 class Candidate; 33 class Candidate;
19 } // namespace cricket 34 } // namespace cricket
20 35
21 namespace buzz {
22 class XmlElement;
23 } // namespace buzz
24
25 namespace remoting { 36 namespace remoting {
26 namespace protocol { 37 namespace protocol {
27 38
28 class Authenticator; 39 class ChannelAuthenticator;
29 class DatagramChannelFactory;
30 class P2PDatagramSocket; 40 class P2PDatagramSocket;
31 class StreamChannelFactory;
32 41
33 enum class TransportRole { 42 enum class TransportRole {
34 SERVER, 43 SERVER,
35 CLIENT, 44 CLIENT,
36 }; 45 };
37 46
38 struct TransportRoute { 47 struct TransportRoute {
39 enum RouteType { 48 enum RouteType {
40 DIRECT, 49 DIRECT,
41 STUN, 50 STUN,
42 RELAY, 51 RELAY,
43 }; 52 };
44 53
45 // Helper method to get string representation of the type. 54 // Helper method to get string representation of the type.
46 static std::string GetTypeString(RouteType type); 55 static std::string GetTypeString(RouteType type);
47 56
48 TransportRoute(); 57 TransportRoute();
49 ~TransportRoute(); 58 ~TransportRoute();
50 59
51 RouteType type; 60 RouteType type;
52 net::IPEndPoint remote_address; 61 net::IPEndPoint remote_address;
53 net::IPEndPoint local_address; 62 net::IPEndPoint local_address;
54 }; 63 };
55 64
56 // Transport objects are responsible for establishing P2P connections.
57 //
58 // TODO(sergeyu): Remove this interface and rename TransportSession interface to
59 // Transport.
60 class Transport : public base::NonThreadSafe { 65 class Transport : public base::NonThreadSafe {
61 public: 66 public:
62 class EventHandler { 67 class EventHandler {
63 public: 68 public:
64 EventHandler() {}; 69 EventHandler() {};
65 virtual ~EventHandler() {}; 70 virtual ~EventHandler() {};
66 71
67 // Called to pass ICE credentials to the session. Used only for STANDARD 72 // Called to pass ICE credentials to the session. Used only for STANDARD
68 // version of ICE, see SetIceVersion(). 73 // version of ICE, see SetIceVersion().
69 virtual void OnTransportIceCredentials(Transport* transport, 74 virtual void OnTransportIceCredentials(Transport* transport,
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
110 // parallel connections. 115 // parallel connections.
111 virtual const std::string& name() const = 0; 116 virtual const std::string& name() const = 0;
112 117
113 // Returns true if the channel is already connected. 118 // Returns true if the channel is already connected.
114 virtual bool is_connected() const = 0; 119 virtual bool is_connected() const = 0;
115 120
116 private: 121 private:
117 DISALLOW_COPY_AND_ASSIGN(Transport); 122 DISALLOW_COPY_AND_ASSIGN(Transport);
118 }; 123 };
119 124
120 // TransportSession represents a P2P connection that consists of one or more
121 // channels.
122 class TransportSession {
123 public:
124 class EventHandler {
125 public:
126 // Called to send a transport-info message.
127 virtual void OnOutgoingTransportInfo(
128 scoped_ptr<buzz::XmlElement> message) = 0;
129
130 // Called when transport route changes.
131 virtual void OnTransportRouteChange(const std::string& channel_name,
132 const TransportRoute& route) = 0;
133
134 // Called when there is an error connecting the session.
135 virtual void OnTransportError(ErrorCode error) = 0;
136 };
137
138 TransportSession() {}
139 virtual ~TransportSession() {}
140
141 // Starts transport session. Both parameters must outlive TransportSession.
142 virtual void Start(EventHandler* event_handler,
143 Authenticator* authenticator) = 0;
144
145 // Called to process incoming transport message. Returns false if
146 // |transport_info| is in invalid format.
147 virtual bool ProcessTransportInfo(buzz::XmlElement* transport_info) = 0;
148
149 // Channel factory for the session that creates raw ICE channels.
150 virtual DatagramChannelFactory* GetDatagramChannelFactory() = 0;
151
152 // Channel factory for the session that creates stream channels.
153 virtual StreamChannelFactory* GetStreamChannelFactory() = 0;
154
155 // Returns a factory that creates multiplexed channels over a single stream
156 // channel.
157 virtual StreamChannelFactory* GetMultiplexedChannelFactory() = 0;
158
159 private:
160 DISALLOW_COPY_AND_ASSIGN(TransportSession);
161 };
162
163 class TransportFactory { 125 class TransportFactory {
164 public: 126 public:
165 TransportFactory() { } 127 TransportFactory() { }
166 virtual ~TransportFactory() { } 128 virtual ~TransportFactory() { }
167 129
168 // Called to notify transport factory that a new transport might be created 130 // Called to notify transport factory that a new transport might be created
169 // soon, e.g. when a new session is being created. Implementation may use it 131 // soon, e.g. when a new session is being created. Implementation may use it
170 // to start asynchronous preparation, e.g. fetch a new relay token if 132 // to start asynchronous preparation, e.g. fetch a new relay token if
171 // necessary while the session is being authenticated. 133 // necessary while the session is being authenticated.
172 virtual void PrepareTokens() = 0; 134 virtual void PrepareTokens() = 0;
173 135
174 // Creates a new TransportSession. The factory must outlive the session. 136 virtual scoped_ptr<Transport> CreateTransport() = 0;
175 virtual scoped_ptr<TransportSession> CreateTransportSession() = 0;
176 137
177 private: 138 private:
178 DISALLOW_COPY_AND_ASSIGN(TransportFactory); 139 DISALLOW_COPY_AND_ASSIGN(TransportFactory);
179 }; 140 };
180 141
181 } // namespace protocol 142 } // namespace protocol
182 } // namespace remoting 143 } // namespace remoting
183 144
184 #endif // REMOTING_PROTOCOL_TRANSPORT_H_ 145 #endif // REMOTING_PROTOCOL_TRANSPORT_H_
OLDNEW
« no previous file with comments | « remoting/protocol/session.h ('k') | remoting/remoting_srcs.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698