OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "remoting/client/chromoting_client.h" | 5 #include "remoting/client/chromoting_client.h" |
6 | 6 |
7 #include <utility> | 7 #include <utility> |
8 | 8 |
9 #include "base/memory/ptr_util.h" | 9 #include "base/memory/ptr_util.h" |
10 #include "remoting/base/capabilities.h" | 10 #include "remoting/base/capabilities.h" |
11 #include "remoting/base/constants.h" | 11 #include "remoting/base/constants.h" |
12 #include "remoting/client/audio_consumer.h" | |
13 #include "remoting/client/audio_decode_scheduler.h" | |
14 #include "remoting/client/client_context.h" | 12 #include "remoting/client/client_context.h" |
15 #include "remoting/client/client_user_interface.h" | 13 #include "remoting/client/client_user_interface.h" |
16 #include "remoting/protocol/authenticator.h" | 14 #include "remoting/protocol/authenticator.h" |
17 #include "remoting/protocol/connection_to_host.h" | 15 #include "remoting/protocol/connection_to_host.h" |
18 #include "remoting/protocol/host_stub.h" | 16 #include "remoting/protocol/host_stub.h" |
19 #include "remoting/protocol/ice_connection_to_host.h" | 17 #include "remoting/protocol/ice_connection_to_host.h" |
20 #include "remoting/protocol/jingle_session_manager.h" | 18 #include "remoting/protocol/jingle_session_manager.h" |
21 #include "remoting/protocol/negotiating_client_authenticator.h" | 19 #include "remoting/protocol/negotiating_client_authenticator.h" |
22 #include "remoting/protocol/session_config.h" | 20 #include "remoting/protocol/session_config.h" |
23 #include "remoting/protocol/transport_context.h" | 21 #include "remoting/protocol/transport_context.h" |
24 #include "remoting/protocol/video_renderer.h" | 22 #include "remoting/protocol/video_renderer.h" |
25 #include "remoting/protocol/webrtc_connection_to_host.h" | 23 #include "remoting/protocol/webrtc_connection_to_host.h" |
26 #include "remoting/signaling/jid_util.h" | 24 #include "remoting/signaling/jid_util.h" |
27 #include "third_party/webrtc/modules/desktop_capture/desktop_geometry.h" | 25 #include "third_party/webrtc/modules/desktop_capture/desktop_geometry.h" |
28 | 26 |
29 namespace remoting { | 27 namespace remoting { |
30 | 28 |
31 ChromotingClient::ChromotingClient(ClientContext* client_context, | 29 ChromotingClient::ChromotingClient( |
32 ClientUserInterface* user_interface, | 30 ClientContext* client_context, |
33 protocol::VideoRenderer* video_renderer, | 31 ClientUserInterface* user_interface, |
34 base::WeakPtr<AudioConsumer> audio_consumer) | 32 protocol::VideoRenderer* video_renderer, |
| 33 base::WeakPtr<protocol::AudioStub> audio_consumer) |
35 : user_interface_(user_interface), video_renderer_(video_renderer) { | 34 : user_interface_(user_interface), video_renderer_(video_renderer) { |
36 DCHECK(client_context->main_task_runner()->BelongsToCurrentThread()); | 35 DCHECK(client_context->main_task_runner()->BelongsToCurrentThread()); |
37 if (audio_consumer) { | 36 |
38 audio_decode_scheduler_.reset(new AudioDecodeScheduler( | 37 audio_decode_task_runner_ = client_context->audio_decode_task_runner(); |
39 client_context->main_task_runner(), | 38 audio_consumer_ = audio_consumer; |
40 client_context->audio_decode_task_runner(), audio_consumer)); | |
41 } | |
42 } | 39 } |
43 | 40 |
44 ChromotingClient::~ChromotingClient() { | 41 ChromotingClient::~ChromotingClient() { |
45 if (signal_strategy_) | 42 if (signal_strategy_) |
46 signal_strategy_->RemoveListener(this); | 43 signal_strategy_->RemoveListener(this); |
47 } | 44 } |
48 | 45 |
49 void ChromotingClient::set_protocol_config( | 46 void ChromotingClient::set_protocol_config( |
50 std::unique_ptr<protocol::CandidateSessionConfig> config) { | 47 std::unique_ptr<protocol::CandidateSessionConfig> config) { |
51 protocol_config_ = std::move(config); | 48 protocol_config_ = std::move(config); |
(...skipping 11 matching lines...) Expand all Loading... |
63 const std::string& host_jid, | 60 const std::string& host_jid, |
64 const std::string& capabilities) { | 61 const std::string& capabilities) { |
65 DCHECK(thread_checker_.CalledOnValidThread()); | 62 DCHECK(thread_checker_.CalledOnValidThread()); |
66 DCHECK(!session_manager_); // Start must be called more than once. | 63 DCHECK(!session_manager_); // Start must be called more than once. |
67 | 64 |
68 host_jid_ = NormalizeJid(host_jid); | 65 host_jid_ = NormalizeJid(host_jid); |
69 local_capabilities_ = capabilities; | 66 local_capabilities_ = capabilities; |
70 | 67 |
71 if (!protocol_config_) | 68 if (!protocol_config_) |
72 protocol_config_ = protocol::CandidateSessionConfig::CreateDefault(); | 69 protocol_config_ = protocol::CandidateSessionConfig::CreateDefault(); |
73 if (!audio_decode_scheduler_) | 70 if (!audio_consumer_) |
74 protocol_config_->DisableAudioChannel(); | 71 protocol_config_->DisableAudioChannel(); |
75 | 72 |
76 if (!connection_) { | 73 if (!connection_) { |
77 if (protocol_config_->webrtc_supported()) { | 74 if (protocol_config_->webrtc_supported()) { |
78 DCHECK(!protocol_config_->ice_supported()); | 75 DCHECK(!protocol_config_->ice_supported()); |
79 #if !defined(ENABLE_WEBRTC_REMOTING_CLIENT) | 76 #if !defined(ENABLE_WEBRTC_REMOTING_CLIENT) |
80 LOG(FATAL) << "WebRTC is not supported."; | 77 LOG(FATAL) << "WebRTC is not supported."; |
81 #else | 78 #else |
82 connection_.reset(new protocol::WebrtcConnectionToHost()); | 79 connection_.reset(new protocol::WebrtcConnectionToHost()); |
83 #endif | 80 #endif |
84 } else { | 81 } else { |
85 DCHECK(protocol_config_->ice_supported()); | 82 DCHECK(protocol_config_->ice_supported()); |
86 connection_.reset(new protocol::IceConnectionToHost()); | 83 connection_.reset(new protocol::IceConnectionToHost()); |
87 } | 84 } |
88 } | 85 } |
89 connection_->set_client_stub(this); | 86 connection_->set_client_stub(this); |
90 connection_->set_clipboard_stub(this); | 87 connection_->set_clipboard_stub(this); |
91 connection_->set_video_renderer(video_renderer_); | 88 connection_->set_video_renderer(video_renderer_); |
92 connection_->set_audio_stub(audio_decode_scheduler_.get()); | 89 |
| 90 connection_->InitializeAudio(audio_decode_task_runner_, audio_consumer_); |
93 | 91 |
94 session_manager_.reset(new protocol::JingleSessionManager(signal_strategy)); | 92 session_manager_.reset(new protocol::JingleSessionManager(signal_strategy)); |
95 session_manager_->set_protocol_config(std::move(protocol_config_)); | 93 session_manager_->set_protocol_config(std::move(protocol_config_)); |
96 | 94 |
97 client_auth_config_ = client_auth_config; | 95 client_auth_config_ = client_auth_config; |
98 transport_context_ = transport_context; | 96 transport_context_ = transport_context; |
99 | 97 |
100 signal_strategy_ = signal_strategy; | 98 signal_strategy_ = signal_strategy; |
101 signal_strategy_->AddListener(this); | 99 signal_strategy_->AddListener(this); |
102 | 100 |
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
192 | 190 |
193 user_interface_->GetCursorShapeStub()->SetCursorShape(cursor_shape); | 191 user_interface_->GetCursorShapeStub()->SetCursorShape(cursor_shape); |
194 } | 192 } |
195 | 193 |
196 void ChromotingClient::OnConnectionState( | 194 void ChromotingClient::OnConnectionState( |
197 protocol::ConnectionToHost::State state, | 195 protocol::ConnectionToHost::State state, |
198 protocol::ErrorCode error) { | 196 protocol::ErrorCode error) { |
199 DCHECK(thread_checker_.CalledOnValidThread()); | 197 DCHECK(thread_checker_.CalledOnValidThread()); |
200 VLOG(1) << "ChromotingClient::OnConnectionState(" << state << ")"; | 198 VLOG(1) << "ChromotingClient::OnConnectionState(" << state << ")"; |
201 | 199 |
202 if (state == protocol::ConnectionToHost::AUTHENTICATED) { | 200 if (state == protocol::ConnectionToHost::CONNECTED) { |
203 OnAuthenticated(); | |
204 } else if (state == protocol::ConnectionToHost::CONNECTED) { | |
205 OnChannelsConnected(); | 201 OnChannelsConnected(); |
206 } | 202 } |
207 user_interface_->OnConnectionState(state, error); | 203 user_interface_->OnConnectionState(state, error); |
208 } | 204 } |
209 | 205 |
210 void ChromotingClient::OnConnectionReady(bool ready) { | 206 void ChromotingClient::OnConnectionReady(bool ready) { |
211 VLOG(1) << "ChromotingClient::OnConnectionReady(" << ready << ")"; | 207 VLOG(1) << "ChromotingClient::OnConnectionReady(" << ready << ")"; |
212 user_interface_->OnConnectionReady(ready); | 208 user_interface_->OnConnectionReady(ready); |
213 } | 209 } |
214 | 210 |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
246 void ChromotingClient::StartConnection() { | 242 void ChromotingClient::StartConnection() { |
247 DCHECK(thread_checker_.CalledOnValidThread()); | 243 DCHECK(thread_checker_.CalledOnValidThread()); |
248 connection_->Connect( | 244 connection_->Connect( |
249 session_manager_->Connect( | 245 session_manager_->Connect( |
250 host_jid_, base::MakeUnique<protocol::NegotiatingClientAuthenticator>( | 246 host_jid_, base::MakeUnique<protocol::NegotiatingClientAuthenticator>( |
251 NormalizeJid(signal_strategy_->GetLocalJid()), | 247 NormalizeJid(signal_strategy_->GetLocalJid()), |
252 host_jid_, client_auth_config_)), | 248 host_jid_, client_auth_config_)), |
253 transport_context_, this); | 249 transport_context_, this); |
254 } | 250 } |
255 | 251 |
256 void ChromotingClient::OnAuthenticated() { | |
257 DCHECK(thread_checker_.CalledOnValidThread()); | |
258 | |
259 // Initialize the decoder. | |
260 if (connection_->config().is_audio_enabled()) | |
261 audio_decode_scheduler_->Initialize(connection_->config()); | |
262 } | |
263 | |
264 void ChromotingClient::OnChannelsConnected() { | 252 void ChromotingClient::OnChannelsConnected() { |
265 DCHECK(thread_checker_.CalledOnValidThread()); | 253 DCHECK(thread_checker_.CalledOnValidThread()); |
266 | 254 |
267 // Negotiate capabilities with the host. | 255 // Negotiate capabilities with the host. |
268 VLOG(1) << "Client capabilities: " << local_capabilities_; | 256 VLOG(1) << "Client capabilities: " << local_capabilities_; |
269 | 257 |
270 protocol::Capabilities capabilities; | 258 protocol::Capabilities capabilities; |
271 capabilities.set_capabilities(local_capabilities_); | 259 capabilities.set_capabilities(local_capabilities_); |
272 connection_->host_stub()->SetCapabilities(capabilities); | 260 connection_->host_stub()->SetCapabilities(capabilities); |
273 | 261 |
274 mouse_input_scaler_.set_input_stub(connection_->input_stub()); | 262 mouse_input_scaler_.set_input_stub(connection_->input_stub()); |
275 } | 263 } |
276 | 264 |
277 } // namespace remoting | 265 } // namespace remoting |
OLD | NEW |