Index: remoting/protocol/ice_connection_to_client.h |
diff --git a/remoting/protocol/ice_connection_to_client.h b/remoting/protocol/ice_connection_to_client.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..fa07627c05f9bd3d70823b91795646bb7f402b75 |
--- /dev/null |
+++ b/remoting/protocol/ice_connection_to_client.h |
@@ -0,0 +1,87 @@ |
+// Copyright 2015 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_ICE_CONNECTION_TO_CLIENT_H_ |
+#define REMOTING_PROTOCOL_ICE_CONNECTION_TO_CLIENT_H_ |
+ |
+#include <string> |
+ |
+#include "base/macros.h" |
+#include "base/memory/scoped_ptr.h" |
+#include "base/threading/thread_checker.h" |
+#include "remoting/protocol/channel_dispatcher_base.h" |
+#include "remoting/protocol/connection_to_client.h" |
+#include "remoting/protocol/session.h" |
+ |
+namespace remoting { |
+namespace protocol { |
+ |
+class AudioWriter; |
+class HostControlDispatcher; |
+class HostEventDispatcher; |
+class HostVideoDispatcher; |
+class VideoFeedbackStub; |
+ |
+// This class represents a remote viewer connection to the chromoting |
+// host. It sets up all protocol channels and connects them to the |
+// stubs. |
+class IceConnectionToClient : public ConnectionToClient, |
+ public Session::EventHandler, |
+ public ChannelDispatcherBase::EventHandler { |
+ public: |
+ explicit IceConnectionToClient(scoped_ptr<Session> session); |
+ ~IceConnectionToClient() override; |
+ |
+ // ConnectionToClient interface. |
+ void SetEventHandler( |
+ ConnectionToClient::EventHandler* event_handler) override; |
+ Session* session() override; |
+ void Disconnect(ErrorCode error) override; |
+ void OnInputEventReceived(int64_t timestamp) override; |
+ VideoStub* video_stub() override; |
+ AudioStub* audio_stub() override; |
+ ClientStub* client_stub() override; |
+ void set_clipboard_stub(ClipboardStub* clipboard_stub) override; |
+ void set_host_stub(HostStub* host_stub) override; |
+ void set_input_stub(InputStub* input_stub) override; |
+ void set_video_feedback_stub(VideoFeedbackStub* video_feedback_stub) override; |
+ |
+ // Session::EventHandler interface. |
+ void OnSessionStateChange(Session::State state) override; |
+ void OnSessionRouteChange(const std::string& channel_name, |
+ const TransportRoute& route) override; |
+ |
+ // ChannelDispatcherBase::EventHandler interface. |
+ void OnChannelInitialized(ChannelDispatcherBase* channel_dispatcher) override; |
+ void OnChannelError(ChannelDispatcherBase* channel_dispatcher, |
+ ErrorCode error) override; |
+ |
+ private: |
+ void NotifyIfChannelsReady(); |
+ |
+ void Close(ErrorCode error); |
+ |
+ // Stops writing in the channels. |
+ void CloseChannels(); |
+ |
+ base::ThreadChecker thread_checker_; |
+ |
+ // Event handler for handling events sent from this object. |
+ ConnectionToClient::EventHandler* handler_; |
+ |
+ // The libjingle channel used to send and receive data from the remote client. |
+ scoped_ptr<Session> session_; |
+ |
+ scoped_ptr<HostControlDispatcher> control_dispatcher_; |
+ scoped_ptr<HostEventDispatcher> event_dispatcher_; |
+ scoped_ptr<HostVideoDispatcher> video_dispatcher_; |
+ scoped_ptr<AudioWriter> audio_writer_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(IceConnectionToClient); |
+}; |
+ |
+} // namespace protocol |
+} // namespace remoting |
+ |
+#endif // REMOTING_PROTOCOL_ICE_CONNECTION_TO_CLIENT_H_ |