| 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 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 79 const int kMaxPortNumber = 12409; | 79 const int kMaxPortNumber = 12409; |
| 80 | 80 |
| 81 const char kUnofficialOAuth2ClientId[] = | 81 const char kUnofficialOAuth2ClientId[] = |
| 82 "440925447803-2pi3v45bff6tp1rde2f7q6lgbor3o5uj.apps.googleusercontent.com"; | 82 "440925447803-2pi3v45bff6tp1rde2f7q6lgbor3o5uj.apps.googleusercontent.com"; |
| 83 const char kUnofficialOAuth2ClientSecret[] = "W2ieEsG-R1gIA4MMurGrgMc_"; | 83 const char kUnofficialOAuth2ClientSecret[] = "W2ieEsG-R1gIA4MMurGrgMc_"; |
| 84 | 84 |
| 85 const char kOfficialOAuth2ClientId[] = | 85 const char kOfficialOAuth2ClientId[] = |
| 86 "440925447803-avn2sj1kc099s0r7v62je5s339mu0am1.apps.googleusercontent.com"; | 86 "440925447803-avn2sj1kc099s0r7v62je5s339mu0am1.apps.googleusercontent.com"; |
| 87 const char kOfficialOAuth2ClientSecret[] = "Bgur6DFiOMM1h8x-AQpuTQlK"; | 87 const char kOfficialOAuth2ClientSecret[] = "Bgur6DFiOMM1h8x-AQpuTQlK"; |
| 88 | 88 |
| 89 // Whether a given string ends with a given suffix. |
| 90 bool EndsWith(std::string s, std::string suffix) { |
| 91 if (s.length() < suffix.length()) { |
| 92 return false; |
| 93 } |
| 94 return s.compare(s.length() - suffix.length(), suffix.length(), suffix) == 0; |
| 95 } |
| 96 |
| 89 } // namespace | 97 } // namespace |
| 90 | 98 |
| 91 namespace remoting { | 99 namespace remoting { |
| 92 | 100 |
| 93 class HostProcess | 101 class HostProcess |
| 94 : public HeartbeatSender::Listener { | 102 : public HeartbeatSender::Listener { |
| 95 public: | 103 public: |
| 96 HostProcess() | 104 HostProcess() |
| 97 : message_loop_(MessageLoop::TYPE_UI), | 105 : message_loop_(MessageLoop::TYPE_UI), |
| 98 #ifdef OFFICIAL_BUILD | 106 #ifdef OFFICIAL_BUILD |
| (...skipping 217 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 316 | 324 |
| 317 void OnPolicyUpdate(scoped_ptr<base::DictionaryValue> policies) { | 325 void OnPolicyUpdate(scoped_ptr<base::DictionaryValue> policies) { |
| 318 if (!context_->network_task_runner()->BelongsToCurrentThread()) { | 326 if (!context_->network_task_runner()->BelongsToCurrentThread()) { |
| 319 context_->network_task_runner()->PostTask(FROM_HERE, base::Bind( | 327 context_->network_task_runner()->PostTask(FROM_HERE, base::Bind( |
| 320 &HostProcess::OnPolicyUpdate, base::Unretained(this), | 328 &HostProcess::OnPolicyUpdate, base::Unretained(this), |
| 321 base::Passed(&policies))); | 329 base::Passed(&policies))); |
| 322 return; | 330 return; |
| 323 } | 331 } |
| 324 | 332 |
| 325 bool bool_value; | 333 bool bool_value; |
| 334 std::string string_value; |
| 335 if (policies->GetString(policy_hack::PolicyWatcher::kHostDomainPolicyName, |
| 336 &string_value)) { |
| 337 OnHostDomainPolicyUpdate(string_value); |
| 338 } |
| 326 if (policies->GetBoolean(policy_hack::PolicyWatcher::kNatPolicyName, | 339 if (policies->GetBoolean(policy_hack::PolicyWatcher::kNatPolicyName, |
| 327 &bool_value)) { | 340 &bool_value)) { |
| 328 OnNatPolicyUpdate(bool_value); | 341 OnNatPolicyUpdate(bool_value); |
| 329 } | 342 } |
| 330 } | 343 } |
| 331 | 344 |
| 345 void OnHostDomainPolicyUpdate(const std::string& host_domain) { |
| 346 if (!context_->network_task_runner()->BelongsToCurrentThread()) { |
| 347 context_->network_task_runner()->PostTask(FROM_HERE, base::Bind( |
| 348 &HostProcess::OnHostDomainPolicyUpdate, base::Unretained(this), |
| 349 host_domain)); |
| 350 return; |
| 351 } |
| 352 |
| 353 if (!host_domain.empty() && |
| 354 !EndsWith(xmpp_login_, std::string("@") + host_domain)) { |
| 355 Shutdown(kInvalidHostDomainExitCode); |
| 356 } |
| 357 } |
| 358 |
| 332 void OnNatPolicyUpdate(bool nat_traversal_enabled) { | 359 void OnNatPolicyUpdate(bool nat_traversal_enabled) { |
| 333 if (!context_->network_task_runner()->BelongsToCurrentThread()) { | 360 if (!context_->network_task_runner()->BelongsToCurrentThread()) { |
| 334 context_->network_task_runner()->PostTask(FROM_HERE, base::Bind( | 361 context_->network_task_runner()->PostTask(FROM_HERE, base::Bind( |
| 335 &HostProcess::OnNatPolicyUpdate, base::Unretained(this), | 362 &HostProcess::OnNatPolicyUpdate, base::Unretained(this), |
| 336 nat_traversal_enabled)); | 363 nat_traversal_enabled)); |
| 337 return; | 364 return; |
| 338 } | 365 } |
| 339 | 366 |
| 340 bool policy_changed = allow_nat_traversal_ != nat_traversal_enabled; | 367 bool policy_changed = allow_nat_traversal_ != nat_traversal_enabled; |
| 341 allow_nat_traversal_ = nat_traversal_enabled; | 368 allow_nat_traversal_ = nat_traversal_enabled; |
| 342 | 369 |
| 343 if (host_) { | 370 if (host_) { |
| 344 // Restart the host if the policy has changed while the host was | 371 // Restart the host if the policy has changed while the host was |
| 345 // online. | 372 // online. |
| 346 if (policy_changed) | 373 if (policy_changed) |
| 347 RestartHost(); | 374 RestartHost(); |
| 348 } else { | 375 } else { |
| 349 // Just start the host otherwise. | 376 // Just start the host otherwise. |
| 350 StartHost(); | 377 StartHost(); |
| 351 } | 378 } |
| 352 } | 379 } |
| 353 | 380 |
| 354 void StartHost() { | 381 void StartHost() { |
| 355 DCHECK(context_->network_task_runner()->BelongsToCurrentThread()); | 382 DCHECK(context_->network_task_runner()->BelongsToCurrentThread()); |
| 356 DCHECK(!host_); | 383 DCHECK(!host_); |
| 357 | 384 |
| 385 if (shutting_down_) |
| 386 return; |
| 387 |
| 358 if (!signal_strategy_.get()) { | 388 if (!signal_strategy_.get()) { |
| 359 signal_strategy_.reset( | 389 signal_strategy_.reset( |
| 360 new XmppSignalStrategy(context_->url_request_context_getter(), | 390 new XmppSignalStrategy(context_->url_request_context_getter(), |
| 361 xmpp_login_, xmpp_auth_token_, | 391 xmpp_login_, xmpp_auth_token_, |
| 362 xmpp_auth_service_)); | 392 xmpp_auth_service_)); |
| 363 | 393 |
| 364 signaling_connector_.reset(new SignalingConnector( | 394 signaling_connector_.reset(new SignalingConnector( |
| 365 signal_strategy_.get(), | 395 signal_strategy_.get(), |
| 366 base::Bind(&HostProcess::OnAuthFailed, base::Unretained(this)))); | 396 base::Bind(&HostProcess::OnAuthFailed, base::Unretained(this)))); |
| 367 | 397 |
| (...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 472 } | 502 } |
| 473 | 503 |
| 474 void Shutdown(int exit_code) { | 504 void Shutdown(int exit_code) { |
| 475 DCHECK(context_->network_task_runner()->BelongsToCurrentThread()); | 505 DCHECK(context_->network_task_runner()->BelongsToCurrentThread()); |
| 476 | 506 |
| 477 if (shutting_down_) | 507 if (shutting_down_) |
| 478 return; | 508 return; |
| 479 | 509 |
| 480 shutting_down_ = true; | 510 shutting_down_ = true; |
| 481 exit_code_ = exit_code; | 511 exit_code_ = exit_code; |
| 482 host_->Shutdown(base::Bind( | 512 if (host_) { |
| 483 &HostProcess::OnShutdownFinished, base::Unretained(this))); | 513 host_->Shutdown(base::Bind( |
| 514 &HostProcess::OnShutdownFinished, base::Unretained(this))); |
| 515 } else { |
| 516 OnShutdownFinished(); |
| 517 } |
| 484 } | 518 } |
| 485 | 519 |
| 486 void OnShutdownFinished() { | 520 void OnShutdownFinished() { |
| 487 DCHECK(context_->network_task_runner()->BelongsToCurrentThread()); | 521 DCHECK(context_->network_task_runner()->BelongsToCurrentThread()); |
| 488 | 522 |
| 489 // Destroy networking objects while we are on the network thread. | 523 // Destroy networking objects while we are on the network thread. |
| 490 host_ = NULL; | 524 host_ = NULL; |
| 491 host_event_logger_.reset(); | 525 host_event_logger_.reset(); |
| 492 log_to_server_.reset(); | 526 log_to_server_.reset(); |
| 493 heartbeat_sender_.reset(); | 527 heartbeat_sender_.reset(); |
| (...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 619 user32.GetFunctionPointer("SetProcessDPIAware")); | 653 user32.GetFunctionPointer("SetProcessDPIAware")); |
| 620 set_process_dpi_aware(); | 654 set_process_dpi_aware(); |
| 621 } | 655 } |
| 622 | 656 |
| 623 // CommandLine::Init() ignores the passed |argc| and |argv| on Windows getting | 657 // CommandLine::Init() ignores the passed |argc| and |argv| on Windows getting |
| 624 // the command line from GetCommandLineW(), so we can safely pass NULL here. | 658 // the command line from GetCommandLineW(), so we can safely pass NULL here. |
| 625 return main(0, NULL); | 659 return main(0, NULL); |
| 626 } | 660 } |
| 627 | 661 |
| 628 #endif // defined(OS_WIN) | 662 #endif // defined(OS_WIN) |
| OLD | NEW |