Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(904)

Side by Side Diff: remoting/host/remoting_me2me_host.cc

Issue 11362267: Add status service for remoting host. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 30 matching lines...) Expand all
41 #include "remoting/host/curtaining_host_observer.h" 41 #include "remoting/host/curtaining_host_observer.h"
42 #include "remoting/host/desktop_environment_factory.h" 42 #include "remoting/host/desktop_environment_factory.h"
43 #include "remoting/host/desktop_resizer.h" 43 #include "remoting/host/desktop_resizer.h"
44 #include "remoting/host/desktop_session_connector.h" 44 #include "remoting/host/desktop_session_connector.h"
45 #include "remoting/host/dns_blackhole_checker.h" 45 #include "remoting/host/dns_blackhole_checker.h"
46 #include "remoting/host/event_executor.h" 46 #include "remoting/host/event_executor.h"
47 #include "remoting/host/heartbeat_sender.h" 47 #include "remoting/host/heartbeat_sender.h"
48 #include "remoting/host/host_config.h" 48 #include "remoting/host/host_config.h"
49 #include "remoting/host/host_event_logger.h" 49 #include "remoting/host/host_event_logger.h"
50 #include "remoting/host/host_exit_codes.h" 50 #include "remoting/host/host_exit_codes.h"
51 #include "remoting/host/host_status_service.h"
51 #include "remoting/host/host_user_interface.h" 52 #include "remoting/host/host_user_interface.h"
52 #include "remoting/host/ipc_consts.h" 53 #include "remoting/host/ipc_consts.h"
53 #include "remoting/host/ipc_desktop_environment_factory.h" 54 #include "remoting/host/ipc_desktop_environment_factory.h"
54 #include "remoting/host/json_host_config.h" 55 #include "remoting/host/json_host_config.h"
55 #include "remoting/host/logging.h" 56 #include "remoting/host/logging.h"
56 #include "remoting/host/log_to_server.h" 57 #include "remoting/host/log_to_server.h"
57 #include "remoting/host/network_settings.h" 58 #include "remoting/host/network_settings.h"
58 #include "remoting/host/policy_hack/policy_watcher.h" 59 #include "remoting/host/policy_hack/policy_watcher.h"
59 #include "remoting/host/resizing_host_observer.h" 60 #include "remoting/host/resizing_host_observer.h"
60 #include "remoting/host/session_manager_factory.h" 61 #include "remoting/host/session_manager_factory.h"
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
97 // This is used for tagging system event logs. 98 // This is used for tagging system event logs.
98 const char kApplicationName[] = "chromoting"; 99 const char kApplicationName[] = "chromoting";
99 100
100 // The command line switch used to get version of the daemon. 101 // The command line switch used to get version of the daemon.
101 const char kVersionSwitchName[] = "version"; 102 const char kVersionSwitchName[] = "version";
102 103
103 // The command line switch used to pass name of the pipe to capture audio on 104 // The command line switch used to pass name of the pipe to capture audio on
104 // linux. 105 // linux.
105 const char kAudioPipeSwitchName[] = "audio-pipe-name"; 106 const char kAudioPipeSwitchName[] = "audio-pipe-name";
106 107
108 // The command line switch used to enable host status service.
109 const char kEnableStatusServiceSwitchName[] = "enable-status-service";
110
107 void QuitMessageLoop(MessageLoop* message_loop) { 111 void QuitMessageLoop(MessageLoop* message_loop) {
108 message_loop->PostTask(FROM_HERE, MessageLoop::QuitClosure()); 112 message_loop->PostTask(FROM_HERE, MessageLoop::QuitClosure());
109 } 113 }
110 114
111 // Returns true if GetUsername() is implemented on this platform. 115 // Returns true if GetUsername() is implemented on this platform.
112 bool CanGetUsername() { 116 bool CanGetUsername() {
113 #if defined(OS_LINUX) 117 #if defined(OS_LINUX)
114 return true; 118 return true;
115 #else // defined(OS_LINUX) 119 #else // defined(OS_LINUX)
116 return false; 120 return false;
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
186 // Applies the host config, returning true if successful. 190 // Applies the host config, returning true if successful.
187 bool ApplyConfig(scoped_ptr<JsonHostConfig> config); 191 bool ApplyConfig(scoped_ptr<JsonHostConfig> config);
188 192
189 void OnPolicyUpdate(scoped_ptr<base::DictionaryValue> policies); 193 void OnPolicyUpdate(scoped_ptr<base::DictionaryValue> policies);
190 bool OnHostDomainPolicyUpdate(const std::string& host_domain); 194 bool OnHostDomainPolicyUpdate(const std::string& host_domain);
191 bool OnUsernamePolicyUpdate(bool username_match_required); 195 bool OnUsernamePolicyUpdate(bool username_match_required);
192 bool OnNatPolicyUpdate(bool nat_traversal_enabled); 196 bool OnNatPolicyUpdate(bool nat_traversal_enabled);
193 bool OnCurtainPolicyUpdate(bool curtain_required); 197 bool OnCurtainPolicyUpdate(bool curtain_required);
194 bool OnHostTalkGadgetPrefixPolicyUpdate(const std::string& talkgadget_prefix); 198 bool OnHostTalkGadgetPrefixPolicyUpdate(const std::string& talkgadget_prefix);
195 199
200 void StartHostStatusService();
201
196 void StartHost(); 202 void StartHost();
197 203
198 void OnAuthFailed(); 204 void OnAuthFailed();
199 205
200 void RejectAuthenticatingClient(); 206 void RejectAuthenticatingClient();
201 207
202 // Invoked when the user uses the Disconnect windows to terminate 208 // Invoked when the user uses the Disconnect windows to terminate
203 // the sessions, or when the local session is activated in curtain mode. 209 // the sessions, or when the local session is activated in curtain mode.
204 void OnDisconnectRequested(); 210 void OnDisconnectRequested();
205 211
(...skipping 15 matching lines...) Expand all
221 const int& line_number); 227 const int& line_number);
222 228
223 scoped_ptr<ChromotingHostContext> context_; 229 scoped_ptr<ChromotingHostContext> context_;
224 scoped_ptr<IPC::ChannelProxy> daemon_channel_; 230 scoped_ptr<IPC::ChannelProxy> daemon_channel_;
225 scoped_ptr<net::NetworkChangeNotifier> network_change_notifier_; 231 scoped_ptr<net::NetworkChangeNotifier> network_change_notifier_;
226 232
227 FilePath host_config_path_; 233 FilePath host_config_path_;
228 scoped_ptr<ConfigFileWatcher> config_watcher_; 234 scoped_ptr<ConfigFileWatcher> config_watcher_;
229 235
230 // Accessed on the network thread. 236 // Accessed on the network thread.
237
238 scoped_ptr<HostStatusService> status_service_;
239
231 std::string host_id_; 240 std::string host_id_;
232 protocol::SharedSecretHash host_secret_hash_; 241 protocol::SharedSecretHash host_secret_hash_;
233 HostKeyPair key_pair_; 242 HostKeyPair key_pair_;
234 std::string oauth_refresh_token_; 243 std::string oauth_refresh_token_;
235 std::string serialized_config_; 244 std::string serialized_config_;
236 std::string xmpp_login_; 245 std::string xmpp_login_;
237 std::string xmpp_auth_token_; 246 std::string xmpp_auth_token_;
238 std::string xmpp_auth_service_; 247 std::string xmpp_auth_service_;
239 248
240 scoped_ptr<policy_hack::PolicyWatcher> policy_watcher_; 249 scoped_ptr<policy_hack::PolicyWatcher> policy_watcher_;
(...skipping 247 matching lines...) Expand 10 before | Expand all | Expand 10 after
488 // If an audio pipe is specific on the command-line then initialize 497 // If an audio pipe is specific on the command-line then initialize
489 // AudioCapturerLinux to capture from it. 498 // AudioCapturerLinux to capture from it.
490 FilePath audio_pipe_name = CommandLine::ForCurrentProcess()-> 499 FilePath audio_pipe_name = CommandLine::ForCurrentProcess()->
491 GetSwitchValuePath(kAudioPipeSwitchName); 500 GetSwitchValuePath(kAudioPipeSwitchName);
492 if (!audio_pipe_name.empty()) { 501 if (!audio_pipe_name.empty()) {
493 remoting::AudioCapturerLinux::InitializePipeReader( 502 remoting::AudioCapturerLinux::InitializePipeReader(
494 context_->audio_task_runner(), audio_pipe_name); 503 context_->audio_task_runner(), audio_pipe_name);
495 } 504 }
496 #endif // defined(OS_LINUX) 505 #endif // defined(OS_LINUX)
497 506
507 if (CommandLine::ForCurrentProcess()->HasSwitch(
508 kEnableStatusServiceSwitchName)) {
509 context_->network_task_runner()->PostTask(
510 FROM_HERE,
511 base::Bind(&HostProcess::StartHostStatusService,
512 base::Unretained(this)));
513 }
514
498 // Create a desktop environment factory appropriate to the build type & 515 // Create a desktop environment factory appropriate to the build type &
499 // platform. 516 // platform.
500 #if defined(OS_WIN) 517 #if defined(OS_WIN)
501 518
502 #if defined(REMOTING_MULTI_PROCESS) 519 #if defined(REMOTING_MULTI_PROCESS)
503 IpcDesktopEnvironmentFactory* desktop_environment_factory = 520 IpcDesktopEnvironmentFactory* desktop_environment_factory =
504 new IpcDesktopEnvironmentFactory( 521 new IpcDesktopEnvironmentFactory(
505 daemon_channel_.get(), 522 daemon_channel_.get(),
506 context_->input_task_runner(), 523 context_->input_task_runner(),
507 context_->network_task_runner(), 524 context_->network_task_runner(),
(...skipping 250 matching lines...) Expand 10 before | Expand all | Expand 10 after
758 DCHECK(context_->network_task_runner()->BelongsToCurrentThread()); 775 DCHECK(context_->network_task_runner()->BelongsToCurrentThread());
759 776
760 if (talkgadget_prefix != talkgadget_prefix_) { 777 if (talkgadget_prefix != talkgadget_prefix_) {
761 LOG(INFO) << "Policy sets talkgadget prefix: " << talkgadget_prefix; 778 LOG(INFO) << "Policy sets talkgadget prefix: " << talkgadget_prefix;
762 talkgadget_prefix_ = talkgadget_prefix; 779 talkgadget_prefix_ = talkgadget_prefix;
763 return true; 780 return true;
764 } 781 }
765 return false; 782 return false;
766 } 783 }
767 784
785 void HostProcess::StartHostStatusService() {
786 DCHECK(context_->network_task_runner()->BelongsToCurrentThread());
787 status_service_.reset(new HostStatusService());
788 }
789
768 void HostProcess::StartHost() { 790 void HostProcess::StartHost() {
769 DCHECK(context_->network_task_runner()->BelongsToCurrentThread()); 791 DCHECK(context_->network_task_runner()->BelongsToCurrentThread());
770 DCHECK(!host_); 792 DCHECK(!host_);
771 DCHECK(!signal_strategy_.get()); 793 DCHECK(!signal_strategy_.get());
772 794
773 if (shutting_down_) 795 if (shutting_down_)
774 return; 796 return;
775 797
776 signal_strategy_.reset( 798 signal_strategy_.reset(
777 new XmppSignalStrategy(context_->url_request_context_getter(), 799 new XmppSignalStrategy(context_->url_request_context_getter(),
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
839 curtaining_host_observer_.reset(new CurtainingHostObserver( 861 curtaining_host_observer_.reset(new CurtainingHostObserver(
840 curtain_.get(), host_)); 862 curtain_.get(), host_));
841 curtaining_host_observer_->SetEnableCurtaining(curtain_required_); 863 curtaining_host_observer_->SetEnableCurtaining(curtain_required_);
842 864
843 if (host_user_interface_.get()) { 865 if (host_user_interface_.get()) {
844 host_user_interface_->Start( 866 host_user_interface_->Start(
845 host_, base::Bind(&HostProcess::OnDisconnectRequested, 867 host_, base::Bind(&HostProcess::OnDisconnectRequested,
846 base::Unretained(this))); 868 base::Unretained(this)));
847 } 869 }
848 870
871 if (status_service_)
872 status_service_->SetHostIsUp(host_id_);
873
849 host_->Start(xmpp_login_); 874 host_->Start(xmpp_login_);
850 875
851 CreateAuthenticatorFactory(); 876 CreateAuthenticatorFactory();
852 } 877 }
853 878
854 void HostProcess::OnAuthFailed() { 879 void HostProcess::OnAuthFailed() {
855 Shutdown(kInvalidOauthCredentialsExitCode); 880 Shutdown(kInvalidOauthCredentialsExitCode);
856 } 881 }
857 882
858 void HostProcess::RejectAuthenticatingClient() { 883 void HostProcess::RejectAuthenticatingClient() {
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
897 922
898 StartHost(); 923 StartHost();
899 } 924 }
900 925
901 void HostProcess::Shutdown(int exit_code) { 926 void HostProcess::Shutdown(int exit_code) {
902 DCHECK(context_->network_task_runner()->BelongsToCurrentThread()); 927 DCHECK(context_->network_task_runner()->BelongsToCurrentThread());
903 928
904 if (shutting_down_) 929 if (shutting_down_)
905 return; 930 return;
906 931
932 if (status_service_)
933 status_service_->SetHostIsDown();
934
907 shutting_down_ = true; 935 shutting_down_ = true;
908 exit_code_ = exit_code; 936 exit_code_ = exit_code;
909 if (host_) { 937 if (host_) {
910 host_->Shutdown(base::Bind( 938 host_->Shutdown(base::Bind(
911 &HostProcess::OnShutdownFinished, base::Unretained(this))); 939 &HostProcess::OnShutdownFinished, base::Unretained(this)));
912 } else { 940 } else {
913 OnShutdownFinished(); 941 OnShutdownFinished();
914 } 942 }
915 } 943 }
916 944
917 void HostProcess::OnShutdownFinished() { 945 void HostProcess::OnShutdownFinished() {
918 DCHECK(context_->network_task_runner()->BelongsToCurrentThread()); 946 DCHECK(context_->network_task_runner()->BelongsToCurrentThread());
919 947
920 // Destroy networking objects while we are on the network thread. 948 // Destroy networking objects while we are on the network thread.
921 host_ = NULL; 949 host_ = NULL;
922 ResetHost(); 950 ResetHost();
923 951
924 if (policy_watcher_.get()) { 952 if (policy_watcher_.get()) {
925 base::WaitableEvent done_event(true, false); 953 base::WaitableEvent done_event(true, false);
926 policy_watcher_->StopWatching(&done_event); 954 policy_watcher_->StopWatching(&done_event);
927 done_event.Wait(); 955 done_event.Wait();
928 policy_watcher_.reset(); 956 policy_watcher_.reset();
929 } 957 }
930 958
959 status_service_.reset();
960
931 // Complete the rest of shutdown on the main thread. 961 // Complete the rest of shutdown on the main thread.
932 context_->ui_task_runner()->PostTask( 962 context_->ui_task_runner()->PostTask(
933 FROM_HERE, 963 FROM_HERE,
934 base::Bind(&HostProcess::ShutdownHostProcess, 964 base::Bind(&HostProcess::ShutdownHostProcess,
935 base::Unretained(this))); 965 base::Unretained(this)));
936 } 966 }
937 967
938 void HostProcess::ResetHost() { 968 void HostProcess::ResetHost() {
939 DCHECK(context_->network_task_runner()->BelongsToCurrentThread()); 969 DCHECK(context_->network_task_runner()->BelongsToCurrentThread());
940 970
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
1038 user32.GetFunctionPointer("SetProcessDPIAware")); 1068 user32.GetFunctionPointer("SetProcessDPIAware"));
1039 set_process_dpi_aware(); 1069 set_process_dpi_aware();
1040 } 1070 }
1041 1071
1042 // CommandLine::Init() ignores the passed |argc| and |argv| on Windows getting 1072 // CommandLine::Init() ignores the passed |argc| and |argv| on Windows getting
1043 // the command line from GetCommandLineW(), so we can safely pass NULL here. 1073 // the command line from GetCommandLineW(), so we can safely pass NULL here.
1044 return main(0, NULL); 1074 return main(0, NULL);
1045 } 1075 }
1046 1076
1047 #endif // defined(OS_WIN) 1077 #endif // defined(OS_WIN)
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698