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

Unified Diff: remoting/protocol/transport.h

Issue 1420273002: 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, 2 months 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « remoting/protocol/session.h ('k') | remoting/remoting_srcs.gypi » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: remoting/protocol/transport.h
diff --git a/remoting/protocol/transport.h b/remoting/protocol/transport.h
index 14c3ec3c4d05611e37232cb640a9e4508c2f0f42..c63bb4e23b7c44ecc1e03354df5be03b41982183 100644
--- a/remoting/protocol/transport.h
+++ b/remoting/protocol/transport.h
@@ -1,22 +1,6 @@
// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-//
-// This file defines the interface for peer-to-peer transport. There
-// are two types of transport: StreamTransport and DatagramTransport.
-// They must both be created using TransportFactory instances and they
-// provide the same interface, except that one should be used for
-// reliable stream connection and the other one for unreliable
-// datagram connection. The Transport interface itself doesn't provide
-// methods to send/receive data. Instead it creates an instance of
-// P2PDatagramSocket which provides access to the data channel. After a
-// new transport is Initialize()'ed the Connect() method must be called.
-// Connect() starts asynchronous creation and initialization of the
-// connection socket that can be used later to send and receive data.
-// The socket is passed to the callback specified in the Connect() call.
-// The Transport object must exist during the whole lifetime of the
-// connection socket. Later deletion of the connection socket causes
-// teardown of the corresponding Transport object.
#ifndef REMOTING_PROTOCOL_TRANSPORT_H_
#define REMOTING_PROTOCOL_TRANSPORT_H_
@@ -28,16 +12,23 @@
#include "base/memory/scoped_ptr.h"
#include "base/threading/non_thread_safe.h"
#include "net/base/ip_endpoint.h"
+#include "remoting/protocol/errors.h"
namespace cricket {
class Candidate;
} // namespace cricket
+namespace buzz {
+class XmlElement;
+} // namespace buzz
+
namespace remoting {
namespace protocol {
-class ChannelAuthenticator;
+class Authenticator;
+class DatagramChannelFactory;
class P2PDatagramSocket;
+class StreamChannelFactory;
enum class TransportRole {
SERVER,
@@ -62,6 +53,10 @@ struct TransportRoute {
net::IPEndPoint local_address;
};
+// Transport objects are responsible for establishing P2P connections.
+//
+// TODO(sergeyu): Remove this interface and rename TransportSession interface to
+// Transport.
class Transport : public base::NonThreadSafe {
public:
class EventHandler {
@@ -122,6 +117,49 @@ class Transport : public base::NonThreadSafe {
DISALLOW_COPY_AND_ASSIGN(Transport);
};
+// TransportSession represents a P2P connection that consists of one or more
+// channels.
+class TransportSession {
+ public:
+ class EventHandler {
+ public:
+ // Called to send a transport-info message.
+ virtual void OnOutgoingTransportInfo(
+ scoped_ptr<buzz::XmlElement> message) = 0;
+
+ // Called when transport route changes.
+ virtual void OnTransportRouteChange(const std::string& channel_name,
+ const TransportRoute& route) = 0;
+
+ // Called when there is an error connecting the session.
+ virtual void OnTransportError(ErrorCode error) = 0;
+ };
+
+ TransportSession() {}
+ virtual ~TransportSession() {}
+
+ // Starts transport session. Both parameters must outlive TransportSession.
+ virtual void Start(EventHandler* event_handler,
+ Authenticator* authenticator) = 0;
+
+ // Called to process incoming transport message. Returns false if
+ // |transport_info| is in invalid format.
+ virtual bool ProcessTransportInfo(buzz::XmlElement* transport_info) = 0;
+
+ // Channel factory for the session that creates raw ICE channels.
+ virtual DatagramChannelFactory* GetDatagramChannelFactory() = 0;
+
+ // Channel factory for the session that creates stream channels.
+ virtual StreamChannelFactory* GetStreamChannelFactory() = 0;
+
+ // Returns a factory that creates multiplexed channels over a single stream
+ // channel.
+ virtual StreamChannelFactory* GetMultiplexedChannelFactory() = 0;
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(TransportSession);
+};
+
class TransportFactory {
public:
TransportFactory() { }
@@ -133,7 +171,8 @@ class TransportFactory {
// necessary while the session is being authenticated.
virtual void PrepareTokens() = 0;
- virtual scoped_ptr<Transport> CreateTransport() = 0;
+ // Creates a new TransportSession. The factory must outlive the session.
+ virtual scoped_ptr<TransportSession> CreateTransportSession() = 0;
private:
DISALLOW_COPY_AND_ASSIGN(TransportFactory);
« 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