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

Unified Diff: remoting/protocol/transport.h

Issue 9325036: Add abstract interfaces for the transport layer. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 11 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
Index: remoting/protocol/transport.h
diff --git a/remoting/protocol/transport.h b/remoting/protocol/transport.h
new file mode 100644
index 0000000000000000000000000000000000000000..23318c0de15af216c32d6275a6e4fe05270ac73f
--- /dev/null
+++ b/remoting/protocol/transport.h
@@ -0,0 +1,119 @@
+// 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 defins interface for peer-to-peer transport. There are
Wez 2012/02/07 01:17:37 nit: ... defins ... -> ... defines the ...
Sergey Ulanov 2012/02/07 04:41:12 Done.
+// two type of transport: StreamTransport and DatagramTransport. They
Wez 2012/02/07 01:17:37 nit: two type ... -> two types ...
Sergey Ulanov 2012/02/07 04:41:12 Done.
+// both must be created using TransportFactory instances and they
Wez 2012/02/07 01:17:37 nit: both must ... -> must both ...
Sergey Ulanov 2012/02/07 04:41:12 Done.
+// provide the same interface, except that one creates reliable stream
+// connection and the other one - unreliable datagram
+// connection. After a new transport is Initialize()'ed the Connect()
+// method must be called - which starts asynchronous creation and
+// initializtions of connection socket that can be used later to send
+// and receive data. The socket is passed to the callback specified in
+// the Connect() call. Later deletion of the transport socket causes
+// teardown of the corresponding Transport object.
Wez 2012/02/07 01:17:37 I think this comment needs rewording to make it cl
Sergey Ulanov 2012/02/07 04:41:12 It would not be correct to call them connectors be
+
+#ifndef REMOTING_PROTOCOL_TRANSPORT_H_
+#define REMOTING_PROTOCOL_TRANSPORT_H_
+
+#include <string>
+
+#include "base/basictypes.h"
+#include "base/callback_forward.h"
+#include "base/memory/scoped_ptr.h"
+#include "base/threading/non_thread_safe.h"
+
+namespace cricket {
+class Candidate;
+} // namespace cricket
+
+namespace net {
+class Socket;
+class StreamSocket;
+} // namespace net
+
+namespace remoting {
+namespace protocol {
+
+class ChannelAuthenticator;
+struct TransportConfig;
+
+class Transport : public base::NonThreadSafe {
+ public:
+ class EventHandler {
+ public:
+ EventHandler() {};
+ virtual ~EventHandler() {};
+
+ // Called when the channel generates new candidate.
Wez 2012/02/07 01:17:37 It's not immediately obvious to a casual reader wh
Sergey Ulanov 2012/02/07 04:41:12 Done.
+ virtual void OnChannelCandidate(Transport* transport,
Wez 2012/02/07 01:17:37 Name OnChannelCandidate consistently with the clas
Sergey Ulanov 2012/02/07 04:41:12 Done.
+ const cricket::Candidate& candidate) = 0;
+
+ // Called when the channel is being deleted.
Wez 2012/02/07 01:17:37 nit: ... is being .. -> ... is about to be ...
Sergey Ulanov 2012/02/07 04:41:12 Done.
+ virtual void OnChannelDeleted(Transport* transport) = 0;
+ };
+
+ Transport() {}
+ virtual ~Transport() {}
+
+ virtual void Initialize(const std::string& name,
+ const TransportConfig& config,
+ Transport::EventHandler* event_handler,
+ scoped_ptr<ChannelAuthenticator> authenticator) = 0;
Wez 2012/02/07 01:17:37 Document the parameters. Specifically, callers sh
Sergey Ulanov 2012/02/07 04:41:12 Done.
+
+ // Adds |candidate| received from the peer.
+ virtual void AddRemoteCandidate(const cricket::Candidate& candidate) = 0;
+
+ // Name of the channel.
Wez 2012/02/07 01:17:37 What does the "name" of the channel actually mean?
Sergey Ulanov 2012/02/07 04:41:12 Done.
+ virtual const std::string& name() const = 0;
+
+ // Returns true if the channel is already connected.
+ virtual bool is_connected() const = 0;
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(Transport);
+};
+
+class StreamTransport : public Transport {
+ public:
+ typedef base::Callback<void(scoped_ptr<net::StreamSocket>)> ConnectedCallback;
+
+ StreamTransport() { }
+ ~StreamTransport() { }
+
+ virtual void Connect(const ConnectedCallback& callback) = 0;
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(StreamTransport);
+};
+
+class DatagramTransport : public Transport {
+ public:
+ typedef base::Callback<void(scoped_ptr<net::Socket>)> ConnectedCallback;
+
+ DatagramTransport() { }
+ ~DatagramTransport() { }
+
+ virtual void Connect(const ConnectedCallback& callback) = 0;
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(DatagramTransport);
+};
+
+class TransportFactory {
+ public:
+ TransportFactory() { }
+ virtual ~TransportFactory() { }
+
+ virtual scoped_ptr<StreamTransport> CreateStreamTransport() = 0;
+ virtual scoped_ptr<DatagramTransport> CreateDatagramTransport() = 0;
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(TransportFactory);
+};
+
+} // namespace protocol
+} // namespace remoting
+
+#endif // REMOTING_PROTOCOL_TRANSPORT_H_
Wez 2012/02/07 01:17:37 nit: Should this file be transport_factory.h rathe
Sergey Ulanov 2012/02/07 04:41:12 IMHO it's better to keep it called transport as th

Powered by Google App Engine
This is Rietveld 408576698