joedow | 20fd2b0 | 2015-03-11 22:08:03 | [diff] [blame] | 1 | // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 | // Use of this source code is governed by a BSD-style license that can be |
| 3 | // found in the LICENSE file. |
| 4 | |
sergeyu | d3022d36 | 2015-12-18 05:43:21 | [diff] [blame] | 5 | #ifndef REMOTING_PROTOCOL_ICE_CONNECTION_TO_HOST_H_ |
| 6 | #define REMOTING_PROTOCOL_ICE_CONNECTION_TO_HOST_H_ |
joedow | 20fd2b0 | 2015-03-11 22:08:03 | [diff] [blame] | 7 | |
dcheng | 0765c49 | 2016-04-06 22:41:53 | [diff] [blame] | 8 | #include <memory> |
joedow | 20fd2b0 | 2015-03-11 22:08:03 | [diff] [blame] | 9 | #include <set> |
| 10 | #include <string> |
| 11 | |
| 12 | #include "base/callback_forward.h" |
Keishi Hattori | 0e45c02 | 2021-11-27 09:25:52 | [diff] [blame] | 13 | #include "base/memory/raw_ptr.h" |
joedow | 20fd2b0 | 2015-03-11 22:08:03 | [diff] [blame] | 14 | #include "base/memory/ref_counted.h" |
gab | bf77513a | 2017-06-01 14:35:34 | [diff] [blame] | 15 | #include "base/sequence_checker.h" |
Patrick Monette | 643cdf6 | 2021-10-15 19:13:42 | [diff] [blame] | 16 | #include "base/task/single_thread_task_runner.h" |
joedow | 20fd2b0 | 2015-03-11 22:08:03 | [diff] [blame] | 17 | #include "remoting/proto/internal.pb.h" |
| 18 | #include "remoting/protocol/channel_dispatcher_base.h" |
| 19 | #include "remoting/protocol/clipboard_filter.h" |
| 20 | #include "remoting/protocol/connection_to_host.h" |
| 21 | #include "remoting/protocol/errors.h" |
sergeyu | e576760 | 2015-12-28 19:49:03 | [diff] [blame] | 22 | #include "remoting/protocol/ice_transport.h" |
joedow | 20fd2b0 | 2015-03-11 22:08:03 | [diff] [blame] | 23 | #include "remoting/protocol/input_filter.h" |
joedow | 20fd2b0 | 2015-03-11 22:08:03 | [diff] [blame] | 24 | #include "remoting/protocol/monitored_video_stub.h" |
| 25 | #include "remoting/protocol/session.h" |
| 26 | #include "remoting/protocol/session_config.h" |
joedow | 20fd2b0 | 2015-03-11 22:08:03 | [diff] [blame] | 27 | |
| 28 | namespace remoting { |
joedow | 20fd2b0 | 2015-03-11 22:08:03 | [diff] [blame] | 29 | namespace protocol { |
| 30 | |
sergeyu | 77b42df8 | 2016-10-04 02:08:38 | [diff] [blame] | 31 | class AudioDecodeScheduler; |
joedow | 20fd2b0 | 2015-03-11 22:08:03 | [diff] [blame] | 32 | class AudioReader; |
| 33 | class ClientControlDispatcher; |
| 34 | class ClientEventDispatcher; |
| 35 | class ClientVideoDispatcher; |
| 36 | |
sergeyu | d3022d36 | 2015-12-18 05:43:21 | [diff] [blame] | 37 | class IceConnectionToHost : public ConnectionToHost, |
| 38 | public Session::EventHandler, |
sergeyu | e576760 | 2015-12-28 19:49:03 | [diff] [blame] | 39 | public IceTransport::EventHandler, |
gab | bf77513a | 2017-06-01 14:35:34 | [diff] [blame] | 40 | public ChannelDispatcherBase::EventHandler { |
joedow | 20fd2b0 | 2015-03-11 22:08:03 | [diff] [blame] | 41 | public: |
Yuwei Huang | 5bc831e | 2019-07-12 21:30:27 | [diff] [blame] | 42 | IceConnectionToHost(); |
Peter Boström | e9178e4 | 2021-09-22 18:11:49 | [diff] [blame] | 43 | |
| 44 | IceConnectionToHost(const IceConnectionToHost&) = delete; |
| 45 | IceConnectionToHost& operator=(const IceConnectionToHost&) = delete; |
| 46 | |
sergeyu | d3022d36 | 2015-12-18 05:43:21 | [diff] [blame] | 47 | ~IceConnectionToHost() override; |
joedow | 20fd2b0 | 2015-03-11 22:08:03 | [diff] [blame] | 48 | |
| 49 | // ConnectionToHost interface. |
joedow | 20fd2b0 | 2015-03-11 22:08:03 | [diff] [blame] | 50 | void set_client_stub(ClientStub* client_stub) override; |
| 51 | void set_clipboard_stub(ClipboardStub* clipboard_stub) override; |
sergeyu | 0b57073 | 2016-01-05 23:36:44 | [diff] [blame] | 52 | void set_video_renderer(VideoRenderer* video_renderer) override; |
sergeyu | 77b42df8 | 2016-10-04 02:08:38 | [diff] [blame] | 53 | void InitializeAudio( |
| 54 | scoped_refptr<base::SingleThreadTaskRunner> audio_decode_task_runner, |
| 55 | base::WeakPtr<AudioStub> audio_stub) override; |
dcheng | 0765c49 | 2016-04-06 22:41:53 | [diff] [blame] | 56 | void Connect(std::unique_ptr<Session> session, |
sergeyu | e576760 | 2015-12-28 19:49:03 | [diff] [blame] | 57 | scoped_refptr<TransportContext> transport_context, |
joedow | 20fd2b0 | 2015-03-11 22:08:03 | [diff] [blame] | 58 | HostEventCallback* event_callback) override; |
Yuwei Huang | 632c53d | 2019-06-25 21:59:05 | [diff] [blame] | 59 | void Disconnect(ErrorCode error) override; |
joedow | 20fd2b0 | 2015-03-11 22:08:03 | [diff] [blame] | 60 | const SessionConfig& config() override; |
| 61 | ClipboardStub* clipboard_forwarder() override; |
| 62 | HostStub* host_stub() override; |
| 63 | InputStub* input_stub() override; |
| 64 | State state() const override; |
| 65 | |
| 66 | private: |
joedow | 20fd2b0 | 2015-03-11 22:08:03 | [diff] [blame] | 67 | // Session::EventHandler interface. |
| 68 | void OnSessionStateChange(Session::State state) override; |
sergeyu | e576760 | 2015-12-28 19:49:03 | [diff] [blame] | 69 | |
| 70 | // IceTransport::EventHandler interface. |
| 71 | void OnIceTransportRouteChange(const std::string& channel_name, |
| 72 | const TransportRoute& route) override; |
| 73 | void OnIceTransportError(ErrorCode error) override; |
joedow | 20fd2b0 | 2015-03-11 22:08:03 | [diff] [blame] | 74 | |
| 75 | // ChannelDispatcherBase::EventHandler interface. |
| 76 | void OnChannelInitialized(ChannelDispatcherBase* channel_dispatcher) override; |
sergeyu | d059c46 | 2016-07-20 19:34:10 | [diff] [blame] | 77 | void OnChannelClosed(ChannelDispatcherBase* channel_dispatcher) override; |
joedow | 20fd2b0 | 2015-03-11 22:08:03 | [diff] [blame] | 78 | |
| 79 | // MonitoredVideoStub::EventHandler interface. |
| 80 | virtual void OnVideoChannelStatus(bool active); |
| 81 | |
| 82 | void NotifyIfChannelsReady(); |
| 83 | |
sergeyu | e576760 | 2015-12-28 19:49:03 | [diff] [blame] | 84 | // Closes the P2P connection. |
joedow | 20fd2b0 | 2015-03-11 22:08:03 | [diff] [blame] | 85 | void CloseChannels(); |
| 86 | |
| 87 | void SetState(State state, ErrorCode error); |
| 88 | |
Keishi Hattori | 0e45c02 | 2021-11-27 09:25:52 | [diff] [blame] | 89 | raw_ptr<HostEventCallback> event_callback_ = nullptr; |
joedow | 20fd2b0 | 2015-03-11 22:08:03 | [diff] [blame] | 90 | |
| 91 | // Stub for incoming messages. |
Keishi Hattori | 0e45c02 | 2021-11-27 09:25:52 | [diff] [blame] | 92 | raw_ptr<ClientStub> client_stub_ = nullptr; |
| 93 | raw_ptr<ClipboardStub> clipboard_stub_ = nullptr; |
| 94 | raw_ptr<VideoRenderer> video_renderer_ = nullptr; |
sergeyu | 77b42df8 | 2016-10-04 02:08:38 | [diff] [blame] | 95 | |
| 96 | std::unique_ptr<AudioDecodeScheduler> audio_decode_scheduler_; |
joedow | 20fd2b0 | 2015-03-11 22:08:03 | [diff] [blame] | 97 | |
dcheng | 0765c49 | 2016-04-06 22:41:53 | [diff] [blame] | 98 | std::unique_ptr<Session> session_; |
| 99 | std::unique_ptr<IceTransport> transport_; |
joedow | 20fd2b0 | 2015-03-11 22:08:03 | [diff] [blame] | 100 | |
dcheng | 0765c49 | 2016-04-06 22:41:53 | [diff] [blame] | 101 | std::unique_ptr<MonitoredVideoStub> monitored_video_stub_; |
| 102 | std::unique_ptr<ClientVideoDispatcher> video_dispatcher_; |
| 103 | std::unique_ptr<AudioReader> audio_reader_; |
| 104 | std::unique_ptr<ClientControlDispatcher> control_dispatcher_; |
| 105 | std::unique_ptr<ClientEventDispatcher> event_dispatcher_; |
joedow | 20fd2b0 | 2015-03-11 22:08:03 | [diff] [blame] | 106 | ClipboardFilter clipboard_forwarder_; |
| 107 | InputFilter event_forwarder_; |
| 108 | |
| 109 | // Internal state of the connection. |
sergeyu | 06fa7c5 | 2015-12-17 18:17:03 | [diff] [blame] | 110 | State state_ = INITIALIZING; |
| 111 | ErrorCode error_ = OK; |
joedow | 20fd2b0 | 2015-03-11 22:08:03 | [diff] [blame] | 112 | |
| 113 | private: |
gab | bf77513a | 2017-06-01 14:35:34 | [diff] [blame] | 114 | SEQUENCE_CHECKER(sequence_checker_); |
joedow | 20fd2b0 | 2015-03-11 22:08:03 | [diff] [blame] | 115 | }; |
| 116 | |
| 117 | } // namespace protocol |
| 118 | } // namespace remoting |
| 119 | |
sergeyu | d3022d36 | 2015-12-18 05:43:21 | [diff] [blame] | 120 | #endif // REMOTING_PROTOCOL_ICE_CONNECTION_TO_HOST_H_ |