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 // This file implements a standalone host process for Me2Me. | 5 // This file implements a standalone host process for Me2Me. |
6 | 6 |
7 #include <string> | 7 #include <string> |
8 | 8 |
9 #include "base/at_exit.h" | 9 #include "base/at_exit.h" |
10 #include "base/bind.h" | 10 #include "base/bind.h" |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
61 #include "remoting/host/json_host_config.h" | 61 #include "remoting/host/json_host_config.h" |
62 #include "remoting/host/logging.h" | 62 #include "remoting/host/logging.h" |
63 #include "remoting/host/me2me_desktop_environment.h" | 63 #include "remoting/host/me2me_desktop_environment.h" |
64 #include "remoting/host/pairing_registry_delegate.h" | 64 #include "remoting/host/pairing_registry_delegate.h" |
65 #include "remoting/host/policy_hack/policy_watcher.h" | 65 #include "remoting/host/policy_hack/policy_watcher.h" |
66 #include "remoting/host/session_manager_factory.h" | 66 #include "remoting/host/session_manager_factory.h" |
67 #include "remoting/host/signaling_connector.h" | 67 #include "remoting/host/signaling_connector.h" |
68 #include "remoting/host/token_validator_factory_impl.h" | 68 #include "remoting/host/token_validator_factory_impl.h" |
69 #include "remoting/host/usage_stats_consent.h" | 69 #include "remoting/host/usage_stats_consent.h" |
70 #include "remoting/host/username.h" | 70 #include "remoting/host/username.h" |
71 #include "remoting/host/video_frame_recorder_host_extension.h" | |
71 #include "remoting/jingle_glue/network_settings.h" | 72 #include "remoting/jingle_glue/network_settings.h" |
72 #include "remoting/jingle_glue/xmpp_signal_strategy.h" | 73 #include "remoting/jingle_glue/xmpp_signal_strategy.h" |
73 #include "remoting/protocol/me2me_host_authenticator_factory.h" | 74 #include "remoting/protocol/me2me_host_authenticator_factory.h" |
74 #include "remoting/protocol/pairing_registry.h" | 75 #include "remoting/protocol/pairing_registry.h" |
75 #include "remoting/protocol/token_validator.h" | 76 #include "remoting/protocol/token_validator.h" |
76 | 77 |
77 #if defined(OS_POSIX) | 78 #if defined(OS_POSIX) |
78 #include <signal.h> | 79 #include <signal.h> |
79 #include <sys/types.h> | 80 #include <sys/types.h> |
80 #include <unistd.h> | 81 #include <unistd.h> |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
116 const char kAuthSocknameSwitchName[] = "ssh-auth-sockname"; | 117 const char kAuthSocknameSwitchName[] = "ssh-auth-sockname"; |
117 #endif // defined(OS_LINUX) | 118 #endif // defined(OS_LINUX) |
118 | 119 |
119 // The command line switch used by the parent to request the host to signal it | 120 // The command line switch used by the parent to request the host to signal it |
120 // when it is successfully started. | 121 // when it is successfully started. |
121 const char kSignalParentSwitchName[] = "signal-parent"; | 122 const char kSignalParentSwitchName[] = "signal-parent"; |
122 | 123 |
123 // Command line switch used to enable VP9 encoding. | 124 // Command line switch used to enable VP9 encoding. |
124 const char kEnableVp9SwitchName[] = "enable-vp9"; | 125 const char kEnableVp9SwitchName[] = "enable-vp9"; |
125 | 126 |
127 // Command line switch used to enable and configure the frame-recorder. | |
128 const char kFrameRecorderBufferKbName[] = "frame-recorder-buffer-kb"; | |
Sergey Ulanov
2014/07/11 18:38:03
Add this flag in the usage message in host_main.cc
Sergey Ulanov
2014/07/11 18:38:03
Do we really need this flag? Maybe always have rec
Wez
2014/07/31 23:57:46
It's not clear what a "sensible buffer size" would
| |
129 | |
126 // Value used for --host-config option to indicate that the path must be read | 130 // Value used for --host-config option to indicate that the path must be read |
127 // from stdin. | 131 // from stdin. |
128 const char kStdinConfigPath[] = "-"; | 132 const char kStdinConfigPath[] = "-"; |
129 | 133 |
130 } // namespace | 134 } // namespace |
131 | 135 |
132 namespace remoting { | 136 namespace remoting { |
133 | 137 |
134 class HostProcess | 138 class HostProcess |
135 : public ConfigWatcher::Delegate, | 139 : public ConfigWatcher::Delegate, |
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
280 scoped_ptr<ConfigWatcher> config_watcher_; | 284 scoped_ptr<ConfigWatcher> config_watcher_; |
281 | 285 |
282 std::string host_id_; | 286 std::string host_id_; |
283 protocol::SharedSecretHash host_secret_hash_; | 287 protocol::SharedSecretHash host_secret_hash_; |
284 scoped_refptr<RsaKeyPair> key_pair_; | 288 scoped_refptr<RsaKeyPair> key_pair_; |
285 std::string oauth_refresh_token_; | 289 std::string oauth_refresh_token_; |
286 std::string serialized_config_; | 290 std::string serialized_config_; |
287 std::string host_owner_; | 291 std::string host_owner_; |
288 bool use_service_account_; | 292 bool use_service_account_; |
289 bool enable_vp9_; | 293 bool enable_vp9_; |
294 int64_t frame_recorder_buffer_size_; | |
290 | 295 |
291 scoped_ptr<policy_hack::PolicyWatcher> policy_watcher_; | 296 scoped_ptr<policy_hack::PolicyWatcher> policy_watcher_; |
292 std::string host_domain_; | 297 std::string host_domain_; |
293 bool host_username_match_required_; | 298 bool host_username_match_required_; |
294 bool allow_nat_traversal_; | 299 bool allow_nat_traversal_; |
295 bool allow_relay_; | 300 bool allow_relay_; |
296 int min_udp_port_; | 301 int min_udp_port_; |
297 int max_udp_port_; | 302 int max_udp_port_; |
298 std::string talkgadget_prefix_; | 303 std::string talkgadget_prefix_; |
299 bool allow_pairing_; | 304 bool allow_pairing_; |
(...skipping 25 matching lines...) Expand all Loading... | |
325 | 330 |
326 scoped_ptr<PairingRegistry::Delegate> pairing_registry_delegate_; | 331 scoped_ptr<PairingRegistry::Delegate> pairing_registry_delegate_; |
327 }; | 332 }; |
328 | 333 |
329 HostProcess::HostProcess(scoped_ptr<ChromotingHostContext> context, | 334 HostProcess::HostProcess(scoped_ptr<ChromotingHostContext> context, |
330 int* exit_code_out) | 335 int* exit_code_out) |
331 : context_(context.Pass()), | 336 : context_(context.Pass()), |
332 state_(HOST_INITIALIZING), | 337 state_(HOST_INITIALIZING), |
333 use_service_account_(false), | 338 use_service_account_(false), |
334 enable_vp9_(false), | 339 enable_vp9_(false), |
340 frame_recorder_buffer_size_(0), | |
335 host_username_match_required_(false), | 341 host_username_match_required_(false), |
336 allow_nat_traversal_(true), | 342 allow_nat_traversal_(true), |
337 allow_relay_(true), | 343 allow_relay_(true), |
338 min_udp_port_(0), | 344 min_udp_port_(0), |
339 max_udp_port_(0), | 345 max_udp_port_(0), |
340 allow_pairing_(true), | 346 allow_pairing_(true), |
341 curtain_required_(false), | 347 curtain_required_(false), |
342 enable_gnubby_auth_(false), | 348 enable_gnubby_auth_(false), |
343 #if defined(REMOTING_MULTI_PROCESS) | 349 #if defined(REMOTING_MULTI_PROCESS) |
344 desktop_session_connector_(NULL), | 350 desktop_session_connector_(NULL), |
(...skipping 473 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
818 use_service_account_ = false; | 824 use_service_account_ = false; |
819 } | 825 } |
820 | 826 |
821 // Allow offering of VP9 encoding to be overridden by the command-line. | 827 // Allow offering of VP9 encoding to be overridden by the command-line. |
822 if (CommandLine::ForCurrentProcess()->HasSwitch(kEnableVp9SwitchName)) { | 828 if (CommandLine::ForCurrentProcess()->HasSwitch(kEnableVp9SwitchName)) { |
823 enable_vp9_ = true; | 829 enable_vp9_ = true; |
824 } else { | 830 } else { |
825 config->GetBoolean(kEnableVp9ConfigPath, &enable_vp9_); | 831 config->GetBoolean(kEnableVp9ConfigPath, &enable_vp9_); |
826 } | 832 } |
827 | 833 |
834 // Allow the command-line to override the size of the frame recorder buffer. | |
835 std::string frame_recorder_buffer_kb; | |
836 if (CommandLine::ForCurrentProcess()->HasSwitch( | |
837 kFrameRecorderBufferKbName)) { | |
838 frame_recorder_buffer_kb = | |
839 CommandLine::ForCurrentProcess()->GetSwitchValueASCII( | |
840 kFrameRecorderBufferKbName); | |
841 } else { | |
842 config->GetString(kFrameRecorderBufferKbConfigPath, | |
843 &frame_recorder_buffer_kb); | |
844 } | |
845 if (!frame_recorder_buffer_kb.empty()) { | |
846 int buffer_kb = 0; | |
847 if (base::StringToInt(frame_recorder_buffer_kb, &buffer_kb)) { | |
848 frame_recorder_buffer_size_ = 1024LL * buffer_kb; | |
849 } | |
850 } | |
851 | |
828 return true; | 852 return true; |
829 } | 853 } |
830 | 854 |
831 void HostProcess::OnPolicyUpdate(scoped_ptr<base::DictionaryValue> policies) { | 855 void HostProcess::OnPolicyUpdate(scoped_ptr<base::DictionaryValue> policies) { |
832 if (!context_->network_task_runner()->BelongsToCurrentThread()) { | 856 if (!context_->network_task_runner()->BelongsToCurrentThread()) { |
833 context_->network_task_runner()->PostTask(FROM_HERE, base::Bind( | 857 context_->network_task_runner()->PostTask(FROM_HERE, base::Bind( |
834 &HostProcess::OnPolicyUpdate, this, base::Passed(&policies))); | 858 &HostProcess::OnPolicyUpdate, this, base::Passed(&policies))); |
835 return; | 859 return; |
836 } | 860 } |
837 | 861 |
(...skipping 360 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1198 context_->network_task_runner(), | 1222 context_->network_task_runner(), |
1199 context_->ui_task_runner())); | 1223 context_->ui_task_runner())); |
1200 | 1224 |
1201 if (enable_vp9_) { | 1225 if (enable_vp9_) { |
1202 scoped_ptr<protocol::CandidateSessionConfig> config = | 1226 scoped_ptr<protocol::CandidateSessionConfig> config = |
1203 host_->protocol_config()->Clone(); | 1227 host_->protocol_config()->Clone(); |
1204 config->EnableVideoCodec(protocol::ChannelConfig::CODEC_VP9); | 1228 config->EnableVideoCodec(protocol::ChannelConfig::CODEC_VP9); |
1205 host_->set_protocol_config(config.Pass()); | 1229 host_->set_protocol_config(config.Pass()); |
1206 } | 1230 } |
1207 | 1231 |
1232 if (frame_recorder_buffer_size_ > 0) { | |
1233 scoped_ptr<VideoFrameRecorderHostExtension> frame_recorder_extension( | |
1234 new VideoFrameRecorderHostExtension()); | |
1235 frame_recorder_extension->SetMaxContentBytes(frame_recorder_buffer_size_); | |
1236 host_->SetEnableVideoFrameRecording(true); | |
1237 host_->AddExtension(frame_recorder_extension.PassAs<HostExtension>()); | |
1238 } | |
1239 | |
1208 // TODO(simonmorris): Get the maximum session duration from a policy. | 1240 // TODO(simonmorris): Get the maximum session duration from a policy. |
1209 #if defined(OS_LINUX) | 1241 #if defined(OS_LINUX) |
1210 host_->SetMaximumSessionDuration(base::TimeDelta::FromHours(20)); | 1242 host_->SetMaximumSessionDuration(base::TimeDelta::FromHours(20)); |
1211 #endif | 1243 #endif |
1212 | 1244 |
1213 heartbeat_sender_.reset(new HeartbeatSender( | 1245 heartbeat_sender_.reset(new HeartbeatSender( |
1214 this, host_id_, signal_strategy_.get(), key_pair_, | 1246 this, host_id_, signal_strategy_.get(), key_pair_, |
1215 directory_bot_jid_)); | 1247 directory_bot_jid_)); |
1216 | 1248 |
1217 host_status_sender_.reset(new HostStatusSender( | 1249 host_status_sender_.reset(new HostStatusSender( |
1218 host_id_, signal_strategy_.get(), key_pair_, directory_bot_jid_)); | 1250 host_id_, signal_strategy_.get(), key_pair_, directory_bot_jid_)); |
1219 | 1251 |
1220 host_change_notification_listener_.reset(new HostChangeNotificationListener( | 1252 host_change_notification_listener_.reset(new HostChangeNotificationListener( |
1221 this, host_id_, signal_strategy_.get(), directory_bot_jid_)); | 1253 this, host_id_, signal_strategy_.get(), directory_bot_jid_)); |
1222 | 1254 |
1223 host_status_logger_.reset( | 1255 host_status_logger_.reset( |
1224 new HostStatusLogger(host_->AsWeakPtr(), ServerLogEntry::ME2ME, | 1256 new HostStatusLogger(host_->AsWeakPtr(), ServerLogEntry::ME2ME, |
1225 signal_strategy_.get(), directory_bot_jid_)); | 1257 signal_strategy_.get(), directory_bot_jid_)); |
1226 | 1258 |
1227 // Set up repoting the host status notifications. | 1259 // Set up reporting the host status notifications. |
1228 #if defined(REMOTING_MULTI_PROCESS) | 1260 #if defined(REMOTING_MULTI_PROCESS) |
1229 host_event_logger_.reset( | 1261 host_event_logger_.reset( |
1230 new IpcHostEventLogger(host_->AsWeakPtr(), daemon_channel_.get())); | 1262 new IpcHostEventLogger(host_->AsWeakPtr(), daemon_channel_.get())); |
1231 #else // !defined(REMOTING_MULTI_PROCESS) | 1263 #else // !defined(REMOTING_MULTI_PROCESS) |
1232 host_event_logger_ = | 1264 host_event_logger_ = |
1233 HostEventLogger::Create(host_->AsWeakPtr(), kApplicationName); | 1265 HostEventLogger::Create(host_->AsWeakPtr(), kApplicationName); |
1234 #endif // !defined(REMOTING_MULTI_PROCESS) | 1266 #endif // !defined(REMOTING_MULTI_PROCESS) |
1235 | 1267 |
1236 host_->SetEnableCurtaining(curtain_required_); | 1268 host_->SetEnableCurtaining(curtain_required_); |
1237 host_->Start(host_owner_); | 1269 host_->Start(host_owner_); |
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1375 return exit_code; | 1407 return exit_code; |
1376 } | 1408 } |
1377 | 1409 |
1378 } // namespace remoting | 1410 } // namespace remoting |
1379 | 1411 |
1380 #if !defined(OS_WIN) | 1412 #if !defined(OS_WIN) |
1381 int main(int argc, char** argv) { | 1413 int main(int argc, char** argv) { |
1382 return remoting::HostMain(argc, argv); | 1414 return remoting::HostMain(argc, argv); |
1383 } | 1415 } |
1384 #endif // !defined(OS_WIN) | 1416 #endif // !defined(OS_WIN) |
OLD | NEW |