summaryrefslogtreecommitdiffstats
path: root/remoting/protocol/session.h
diff options
context:
space:
mode:
authorgarykac@chromium.org <garykac@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-11-03 21:56:42 +0000
committergarykac@chromium.org <garykac@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-11-03 21:56:42 +0000
commit230d2fd2e1cafaab5cd5e4d2a9f64b4ae272550a (patch)
tree8aa02e4a85f0d314a4419a434037e163a41981c8 /remoting/protocol/session.h
parent3296839602c5c54cae0b0fb0a9d6623a5ba65895 (diff)
downloadchromium_src-230d2fd2e1cafaab5cd5e4d2a9f64b4ae272550a.zip
chromium_src-230d2fd2e1cafaab5cd5e4d2a9f64b4ae272550a.tar.gz
chromium_src-230d2fd2e1cafaab5cd5e4d2a9f64b4ae272550a.tar.bz2
Rename classes for Chromoting:
ChromotocolServer -> protocol::SessionManager ChromotocolConnection -> protocol::Session BUG=none TEST=compiles + make chromoting connection Review URL: http://codereview.chromium.org/4313001 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@64971 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'remoting/protocol/session.h')
-rw-r--r--remoting/protocol/session.h98
1 files changed, 98 insertions, 0 deletions
diff --git a/remoting/protocol/session.h b/remoting/protocol/session.h
new file mode 100644
index 0000000..9319fef
--- /dev/null
+++ b/remoting/protocol/session.h
@@ -0,0 +1,98 @@
+// Copyright (c) 2010 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.
+
+#ifndef REMOTING_PROTOCOL_SESSION_H_
+#define REMOTING_PROTOCOL_SESSION_H_
+
+#include <string>
+
+#include "base/callback.h"
+#include "remoting/protocol/chromotocol_config.h"
+
+class MessageLoop;
+class Task;
+
+namespace net {
+class Socket;
+} // namespace net
+
+namespace remoting {
+
+namespace protocol {
+
+// Generic interface for Chromotocol connection used by both client and host.
+// Provides access to the connection channels, but doesn't depend on the
+// protocol used for each channel.
+// TODO(sergeyu): Remove refcounting?
+class Session
+ : public base::RefCountedThreadSafe<Session> {
+ public:
+ enum State {
+ INITIALIZING,
+ CONNECTING,
+ CONNECTED,
+ CLOSED,
+ FAILED,
+ };
+
+ typedef Callback1<State>::Type StateChangeCallback;
+
+ // Set callback that is called when state of the connection is changed.
+ // Must be called on the jingle thread only.
+ virtual void SetStateChangeCallback(StateChangeCallback* callback) = 0;
+
+ // Reliable PseudoTCP channels for this connection.
+ virtual net::Socket* control_channel() = 0;
+ virtual net::Socket* event_channel() = 0;
+
+ // TODO(sergeyu): Remove VideoChannel, and use RTP channels instead.
+ virtual net::Socket* video_channel() = 0;
+
+ // Unreliable channels for this connection.
+ virtual net::Socket* video_rtp_channel() = 0;
+ virtual net::Socket* video_rtcp_channel() = 0;
+
+ // TODO(sergeyu): Make it possible to create/destroy additional channels
+ // on-fly?
+
+ // JID of the other side.
+ virtual const std::string& jid() = 0;
+
+ // Message loop that must be used to access the channels of this connection.
+ virtual MessageLoop* message_loop() = 0;
+
+ // Configuration of the protocol that was sent or received in the
+ // session-initiate jingle message. Returned pointer is valid until
+ // connection is closed.
+ virtual const CandidateChromotocolConfig* candidate_config() = 0;
+
+ // Protocol configuration. Can be called only after session has been accepted.
+ // Returned pointer is valid until connection is closed.
+ virtual const ChromotocolConfig* config() = 0;
+
+ // Set protocol configuration for an incoming session. Must be called
+ // on the host before the connection is accepted, from
+ // ChromotocolServer::IncomingConnectionCallback. Ownership of |config| is
+ // given to the connection.
+ virtual void set_config(const ChromotocolConfig* config) = 0;
+
+ // Closes connection. Callbacks are guaranteed not to be called after
+ // |closed_task| is executed.
+ virtual void Close(Task* closed_task) = 0;
+
+ protected:
+ friend class base::RefCountedThreadSafe<Session>;
+
+ Session() { }
+ virtual ~Session() { }
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(Session);
+};
+
+} // namespace protocol
+
+} // namespace remoting
+
+#endif // REMOTING_PROTOCOL_SESSION_H_