OLD | NEW |
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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/host/chromoting_host.h" | 5 #include "remoting/host/chromoting_host.h" |
6 | 6 |
7 #include "base/stl_util-inl.h" | 7 #include "base/stl_util-inl.h" |
8 #include "base/task.h" | 8 #include "base/task.h" |
9 #include "build/build_config.h" | 9 #include "build/build_config.h" |
10 #include "remoting/base/constants.h" | 10 #include "remoting/base/constants.h" |
11 #include "remoting/base/encoder.h" | 11 #include "remoting/base/encoder.h" |
12 #include "remoting/base/encoder_verbatim.h" | 12 #include "remoting/base/encoder_verbatim.h" |
13 #include "remoting/base/encoder_vp8.h" | 13 #include "remoting/base/encoder_vp8.h" |
14 #include "remoting/base/encoder_zlib.h" | 14 #include "remoting/base/encoder_zlib.h" |
15 #include "remoting/host/chromoting_host_context.h" | 15 #include "remoting/host/chromoting_host_context.h" |
16 #include "remoting/host/capturer.h" | 16 #include "remoting/host/capturer.h" |
17 #include "remoting/host/event_executor.h" | |
18 #include "remoting/host/host_config.h" | 17 #include "remoting/host/host_config.h" |
19 #include "remoting/host/session_manager.h" | 18 #include "remoting/host/session_manager.h" |
20 #include "remoting/protocol/session_config.h" | 19 #include "remoting/protocol/session_config.h" |
21 #include "remoting/protocol/jingle_session_manager.h" | 20 #include "remoting/protocol/jingle_session_manager.h" |
22 #include "remoting/protocol/connection_to_client.h" | 21 #include "remoting/protocol/connection_to_client.h" |
23 | 22 |
24 using remoting::protocol::ConnectionToClient; | 23 using remoting::protocol::ConnectionToClient; |
25 | 24 |
26 namespace remoting { | 25 namespace remoting { |
27 | 26 |
28 ChromotingHost::ChromotingHost(ChromotingHostContext* context, | 27 ChromotingHost::ChromotingHost(ChromotingHostContext* context, |
29 MutableHostConfig* config, | 28 MutableHostConfig* config, |
30 Capturer* capturer, | 29 Capturer* capturer, |
31 EventExecutor* executor) | 30 protocol::InputStub* input_stub) |
32 : context_(context), | 31 : context_(context), |
33 config_(config), | 32 config_(config), |
34 capturer_(capturer), | 33 capturer_(capturer), |
35 executor_(executor), | 34 input_stub_(input_stub), |
36 state_(kInitial) { | 35 state_(kInitial) { |
37 } | 36 } |
38 | 37 |
39 ChromotingHost::~ChromotingHost() { | 38 ChromotingHost::~ChromotingHost() { |
40 } | 39 } |
41 | 40 |
42 void ChromotingHost::Start(Task* shutdown_task) { | 41 void ChromotingHost::Start(Task* shutdown_task) { |
43 if (MessageLoop::current() != context_->main_message_loop()) { | 42 if (MessageLoop::current() != context_->main_message_loop()) { |
44 context_->main_message_loop()->PostTask( | 43 context_->main_message_loop()->PostTask( |
45 FROM_HERE, | 44 FROM_HERE, |
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
173 | 172 |
174 // Close the connection to connection just to be safe. | 173 // Close the connection to connection just to be safe. |
175 connection->Disconnect(); | 174 connection->Disconnect(); |
176 | 175 |
177 // Also remove reference to ConnectionToClient from this object. | 176 // Also remove reference to ConnectionToClient from this object. |
178 connection_ = NULL; | 177 connection_ = NULL; |
179 } | 178 } |
180 | 179 |
181 //////////////////////////////////////////////////////////////////////////// | 180 //////////////////////////////////////////////////////////////////////////// |
182 // protocol::ConnectionToClient::EventHandler implementations | 181 // protocol::ConnectionToClient::EventHandler implementations |
183 void ChromotingHost::HandleMessage(ConnectionToClient* connection, | |
184 ChromotingClientMessage* message) { | |
185 DCHECK_EQ(context_->main_message_loop(), MessageLoop::current()); | |
186 | |
187 // Delegate the messages to EventExecutor and delete the unhandled | |
188 // messages. | |
189 DCHECK(executor_.get()); | |
190 executor_->HandleInputEvent(message); | |
191 } | |
192 | |
193 void ChromotingHost::OnConnectionOpened(ConnectionToClient* connection) { | 182 void ChromotingHost::OnConnectionOpened(ConnectionToClient* connection) { |
194 DCHECK_EQ(context_->main_message_loop(), MessageLoop::current()); | 183 DCHECK_EQ(context_->main_message_loop(), MessageLoop::current()); |
195 | 184 |
196 // Completes the connection to the client. | 185 // Completes the connection to the client. |
197 VLOG(1) << "Connection to client established."; | 186 VLOG(1) << "Connection to client established."; |
198 OnClientConnected(connection_.get()); | 187 OnClientConnected(connection_.get()); |
199 } | 188 } |
200 | 189 |
201 void ChromotingHost::OnConnectionClosed(ConnectionToClient* connection) { | 190 void ChromotingHost::OnConnectionClosed(ConnectionToClient* connection) { |
202 DCHECK_EQ(context_->main_message_loop(), MessageLoop::current()); | 191 DCHECK_EQ(context_->main_message_loop(), MessageLoop::current()); |
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
276 } | 265 } |
277 | 266 |
278 session->set_config(config); | 267 session->set_config(config); |
279 | 268 |
280 *response = protocol::SessionManager::ACCEPT; | 269 *response = protocol::SessionManager::ACCEPT; |
281 | 270 |
282 VLOG(1) << "Client connected: " << session->jid(); | 271 VLOG(1) << "Client connected: " << session->jid(); |
283 | 272 |
284 // If we accept the connected then create a client object and set the | 273 // If we accept the connected then create a client object and set the |
285 // callback. | 274 // callback. |
286 connection_ = new ConnectionToClient(context_->main_message_loop(), this); | 275 connection_ = new ConnectionToClient(context_->main_message_loop(), |
| 276 this, NULL, input_stub_.get()); |
287 connection_->Init(session); | 277 connection_->Init(session); |
288 } | 278 } |
289 | 279 |
290 void ChromotingHost::OnServerClosed() { | 280 void ChromotingHost::OnServerClosed() { |
291 // Don't need to do anything here. | 281 // Don't need to do anything here. |
292 } | 282 } |
293 | 283 |
294 // TODO(sergeyu): Move this to SessionManager? | 284 // TODO(sergeyu): Move this to SessionManager? |
295 Encoder* ChromotingHost::CreateEncoder(const protocol::SessionConfig* config) { | 285 Encoder* ChromotingHost::CreateEncoder(const protocol::SessionConfig* config) { |
296 const protocol::ChannelConfig& video_config = config->video_config(); | 286 const protocol::ChannelConfig& video_config = config->video_config(); |
297 | 287 |
298 if (video_config.codec == protocol::ChannelConfig::CODEC_VERBATIM) { | 288 if (video_config.codec == protocol::ChannelConfig::CODEC_VERBATIM) { |
299 return new remoting::EncoderVerbatim(); | 289 return new remoting::EncoderVerbatim(); |
300 } else if (video_config.codec == protocol::ChannelConfig::CODEC_ZIP) { | 290 } else if (video_config.codec == protocol::ChannelConfig::CODEC_ZIP) { |
301 return new remoting::EncoderZlib(); | 291 return new remoting::EncoderZlib(); |
302 } | 292 } |
303 // TODO(sergeyu): Enable VP8 on ARM builds. | 293 // TODO(sergeyu): Enable VP8 on ARM builds. |
304 #if !defined(ARCH_CPU_ARM_FAMILY) | 294 #if !defined(ARCH_CPU_ARM_FAMILY) |
305 else if (video_config.codec == protocol::ChannelConfig::CODEC_VP8) { | 295 else if (video_config.codec == protocol::ChannelConfig::CODEC_VP8) { |
306 return new remoting::EncoderVp8(); | 296 return new remoting::EncoderVp8(); |
307 } | 297 } |
308 #endif | 298 #endif |
309 | 299 |
310 return NULL; | 300 return NULL; |
311 } | 301 } |
312 | 302 |
313 } // namespace remoting | 303 } // namespace remoting |
OLD | NEW |