| 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 |