| 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 18 matching lines...) Expand all Loading... |
| 29 #include "media/base/media.h" | 29 #include "media/base/media.h" |
| 30 #include "net/base/network_change_notifier.h" | 30 #include "net/base/network_change_notifier.h" |
| 31 #include "net/socket/client_socket_factory.h" | 31 #include "net/socket/client_socket_factory.h" |
| 32 #include "net/socket/ssl_server_socket.h" | 32 #include "net/socket/ssl_server_socket.h" |
| 33 #include "net/url_request/url_fetcher.h" | 33 #include "net/url_request/url_fetcher.h" |
| 34 #include "remoting/base/auto_thread_task_runner.h" | 34 #include "remoting/base/auto_thread_task_runner.h" |
| 35 #include "remoting/base/breakpad.h" | 35 #include "remoting/base/breakpad.h" |
| 36 #include "remoting/base/constants.h" | 36 #include "remoting/base/constants.h" |
| 37 #include "remoting/base/logging.h" | 37 #include "remoting/base/logging.h" |
| 38 #include "remoting/base/rsa_key_pair.h" | 38 #include "remoting/base/rsa_key_pair.h" |
| 39 #include "remoting/base/util.h" | |
| 40 #include "remoting/host/branding.h" | 39 #include "remoting/host/branding.h" |
| 41 #include "remoting/host/chromoting_host.h" | 40 #include "remoting/host/chromoting_host.h" |
| 42 #include "remoting/host/chromoting_host_context.h" | 41 #include "remoting/host/chromoting_host_context.h" |
| 43 #include "remoting/host/chromoting_messages.h" | 42 #include "remoting/host/chromoting_messages.h" |
| 44 #include "remoting/host/config_file_watcher.h" | 43 #include "remoting/host/config_file_watcher.h" |
| 45 #include "remoting/host/config_watcher.h" | 44 #include "remoting/host/config_watcher.h" |
| 46 #include "remoting/host/desktop_environment.h" | 45 #include "remoting/host/desktop_environment.h" |
| 47 #include "remoting/host/desktop_session_connector.h" | 46 #include "remoting/host/desktop_session_connector.h" |
| 48 #include "remoting/host/dns_blackhole_checker.h" | 47 #include "remoting/host/dns_blackhole_checker.h" |
| 49 #include "remoting/host/heartbeat_sender.h" | 48 #include "remoting/host/heartbeat_sender.h" |
| (...skipping 171 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 221 void ShutdownOnUiThread(); | 220 void ShutdownOnUiThread(); |
| 222 | 221 |
| 223 // Applies the host config, returning true if successful. | 222 // Applies the host config, returning true if successful. |
| 224 bool ApplyConfig(scoped_ptr<JsonHostConfig> config); | 223 bool ApplyConfig(scoped_ptr<JsonHostConfig> config); |
| 225 | 224 |
| 226 void OnPolicyUpdate(scoped_ptr<base::DictionaryValue> policies); | 225 void OnPolicyUpdate(scoped_ptr<base::DictionaryValue> policies); |
| 227 bool OnHostDomainPolicyUpdate(const std::string& host_domain); | 226 bool OnHostDomainPolicyUpdate(const std::string& host_domain); |
| 228 bool OnUsernamePolicyUpdate(bool curtain_required, | 227 bool OnUsernamePolicyUpdate(bool curtain_required, |
| 229 bool username_match_required); | 228 bool username_match_required); |
| 230 bool OnNatPolicyUpdate(bool nat_traversal_enabled); | 229 bool OnNatPolicyUpdate(bool nat_traversal_enabled); |
| 231 bool OnRelayPolicyUpdate(bool allow_relay); | |
| 232 bool OnUdpPortPolicyUpdate(const std::string& udp_port_range); | |
| 233 void OnCurtainPolicyUpdate(bool curtain_required); | 230 void OnCurtainPolicyUpdate(bool curtain_required); |
| 234 bool OnHostTalkGadgetPrefixPolicyUpdate(const std::string& talkgadget_prefix); | 231 bool OnHostTalkGadgetPrefixPolicyUpdate(const std::string& talkgadget_prefix); |
| 235 bool OnHostTokenUrlPolicyUpdate( | 232 bool OnHostTokenUrlPolicyUpdate( |
| 236 const GURL& token_url, | 233 const GURL& token_url, |
| 237 const GURL& token_validation_url, | 234 const GURL& token_validation_url, |
| 238 const std::string& token_validation_cert_issuer); | 235 const std::string& token_validation_cert_issuer); |
| 239 bool OnPairingPolicyUpdate(bool pairing_enabled); | 236 bool OnPairingPolicyUpdate(bool pairing_enabled); |
| 240 bool OnGnubbyAuthPolicyUpdate(bool enable_gnubby_auth); | 237 bool OnGnubbyAuthPolicyUpdate(bool enable_gnubby_auth); |
| 241 | 238 |
| 242 void StartHost(); | 239 void StartHost(); |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 283 | 280 |
| 284 std::string host_id_; | 281 std::string host_id_; |
| 285 protocol::SharedSecretHash host_secret_hash_; | 282 protocol::SharedSecretHash host_secret_hash_; |
| 286 scoped_refptr<RsaKeyPair> key_pair_; | 283 scoped_refptr<RsaKeyPair> key_pair_; |
| 287 std::string oauth_refresh_token_; | 284 std::string oauth_refresh_token_; |
| 288 std::string serialized_config_; | 285 std::string serialized_config_; |
| 289 std::string host_owner_; | 286 std::string host_owner_; |
| 290 bool use_service_account_; | 287 bool use_service_account_; |
| 291 scoped_ptr<policy_hack::PolicyWatcher> policy_watcher_; | 288 scoped_ptr<policy_hack::PolicyWatcher> policy_watcher_; |
| 292 bool allow_nat_traversal_; | 289 bool allow_nat_traversal_; |
| 293 bool allow_relay_; | |
| 294 int min_udp_port_; | |
| 295 int max_udp_port_; | |
| 296 std::string talkgadget_prefix_; | 290 std::string talkgadget_prefix_; |
| 297 bool allow_pairing_; | 291 bool allow_pairing_; |
| 298 | 292 |
| 299 bool curtain_required_; | 293 bool curtain_required_; |
| 300 ThirdPartyAuthConfig third_party_auth_config_; | 294 ThirdPartyAuthConfig third_party_auth_config_; |
| 301 bool enable_gnubby_auth_; | 295 bool enable_gnubby_auth_; |
| 302 | 296 |
| 303 scoped_ptr<OAuthTokenGetter> oauth_token_getter_; | 297 scoped_ptr<OAuthTokenGetter> oauth_token_getter_; |
| 304 scoped_ptr<XmppSignalStrategy> signal_strategy_; | 298 scoped_ptr<XmppSignalStrategy> signal_strategy_; |
| 305 scoped_ptr<SignalingConnector> signaling_connector_; | 299 scoped_ptr<SignalingConnector> signaling_connector_; |
| (...skipping 17 matching lines...) Expand all Loading... |
| 323 | 317 |
| 324 scoped_ptr<PairingRegistry::Delegate> pairing_registry_delegate_; | 318 scoped_ptr<PairingRegistry::Delegate> pairing_registry_delegate_; |
| 325 }; | 319 }; |
| 326 | 320 |
| 327 HostProcess::HostProcess(scoped_ptr<ChromotingHostContext> context, | 321 HostProcess::HostProcess(scoped_ptr<ChromotingHostContext> context, |
| 328 int* exit_code_out) | 322 int* exit_code_out) |
| 329 : context_(context.Pass()), | 323 : context_(context.Pass()), |
| 330 state_(HOST_INITIALIZING), | 324 state_(HOST_INITIALIZING), |
| 331 use_service_account_(false), | 325 use_service_account_(false), |
| 332 allow_nat_traversal_(true), | 326 allow_nat_traversal_(true), |
| 333 allow_relay_(true), | |
| 334 min_udp_port_(0), | |
| 335 max_udp_port_(0), | |
| 336 allow_pairing_(true), | 327 allow_pairing_(true), |
| 337 curtain_required_(false), | 328 curtain_required_(false), |
| 338 enable_gnubby_auth_(false), | 329 enable_gnubby_auth_(false), |
| 339 #if defined(REMOTING_MULTI_PROCESS) | 330 #if defined(REMOTING_MULTI_PROCESS) |
| 340 desktop_session_connector_(NULL), | 331 desktop_session_connector_(NULL), |
| 341 #endif // defined(REMOTING_MULTI_PROCESS) | 332 #endif // defined(REMOTING_MULTI_PROCESS) |
| 342 self_(this), | 333 self_(this), |
| 343 exit_code_out_(exit_code_out), | 334 exit_code_out_(exit_code_out), |
| 344 signal_parent_(false) { | 335 signal_parent_(false) { |
| 345 StartOnUiThread(); | 336 StartOnUiThread(); |
| (...skipping 492 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 838 } | 829 } |
| 839 if (policies->GetBoolean( | 830 if (policies->GetBoolean( |
| 840 policy_hack::PolicyWatcher::kHostMatchUsernamePolicyName, | 831 policy_hack::PolicyWatcher::kHostMatchUsernamePolicyName, |
| 841 &bool_value)) { | 832 &bool_value)) { |
| 842 restart_required |= OnUsernamePolicyUpdate(curtain_required, bool_value); | 833 restart_required |= OnUsernamePolicyUpdate(curtain_required, bool_value); |
| 843 } | 834 } |
| 844 if (policies->GetBoolean(policy_hack::PolicyWatcher::kNatPolicyName, | 835 if (policies->GetBoolean(policy_hack::PolicyWatcher::kNatPolicyName, |
| 845 &bool_value)) { | 836 &bool_value)) { |
| 846 restart_required |= OnNatPolicyUpdate(bool_value); | 837 restart_required |= OnNatPolicyUpdate(bool_value); |
| 847 } | 838 } |
| 848 if (policies->GetBoolean(policy_hack::PolicyWatcher::kRelayPolicyName, | |
| 849 &bool_value)) { | |
| 850 restart_required |= OnRelayPolicyUpdate(bool_value); | |
| 851 } | |
| 852 std::string udp_port_range; | |
| 853 if (policies->GetString(policy_hack::PolicyWatcher::kUdpPortRangePolicyName, | |
| 854 &udp_port_range)) { | |
| 855 restart_required |= OnUdpPortPolicyUpdate(udp_port_range); | |
| 856 } | |
| 857 | |
| 858 if (policies->GetString( | 839 if (policies->GetString( |
| 859 policy_hack::PolicyWatcher::kHostTalkGadgetPrefixPolicyName, | 840 policy_hack::PolicyWatcher::kHostTalkGadgetPrefixPolicyName, |
| 860 &string_value)) { | 841 &string_value)) { |
| 861 restart_required |= OnHostTalkGadgetPrefixPolicyUpdate(string_value); | 842 restart_required |= OnHostTalkGadgetPrefixPolicyUpdate(string_value); |
| 862 } | 843 } |
| 863 std::string token_url_string, token_validation_url_string; | 844 std::string token_url_string, token_validation_url_string; |
| 864 std::string token_validation_cert_issuer; | 845 std::string token_validation_cert_issuer; |
| 865 if (policies->GetString( | 846 if (policies->GetString( |
| 866 policy_hack::PolicyWatcher::kHostTokenUrlPolicyName, | 847 policy_hack::PolicyWatcher::kHostTokenUrlPolicyName, |
| 867 &token_url_string) && | 848 &token_url_string) && |
| (...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 954 if (nat_traversal_enabled) | 935 if (nat_traversal_enabled) |
| 955 HOST_LOG << "Policy enables NAT traversal."; | 936 HOST_LOG << "Policy enables NAT traversal."; |
| 956 else | 937 else |
| 957 HOST_LOG << "Policy disables NAT traversal."; | 938 HOST_LOG << "Policy disables NAT traversal."; |
| 958 allow_nat_traversal_ = nat_traversal_enabled; | 939 allow_nat_traversal_ = nat_traversal_enabled; |
| 959 return true; | 940 return true; |
| 960 } | 941 } |
| 961 return false; | 942 return false; |
| 962 } | 943 } |
| 963 | 944 |
| 964 bool HostProcess::OnRelayPolicyUpdate(bool allow_relay) { | |
| 965 // Returns true if the host has to be restarted after this policy update. | |
| 966 DCHECK(context_->network_task_runner()->BelongsToCurrentThread()); | |
| 967 | |
| 968 if (allow_relay_ != allow_relay) { | |
| 969 if (allow_relay) | |
| 970 HOST_LOG << "Policy enables use of relay server."; | |
| 971 else | |
| 972 HOST_LOG << "Policy disables use of relay server."; | |
| 973 allow_relay_ = allow_relay; | |
| 974 return true; | |
| 975 } | |
| 976 return false; | |
| 977 } | |
| 978 | |
| 979 bool HostProcess::OnUdpPortPolicyUpdate(const std::string& udp_port_range) { | |
| 980 // Returns true if the host has to be restarted after this policy update. | |
| 981 DCHECK(context_->network_task_runner()->BelongsToCurrentThread()); | |
| 982 | |
| 983 // Use default values if policy setting is empty or invalid. | |
| 984 int min_udp_port = 0; | |
| 985 int max_udp_port = 0; | |
| 986 if (!udp_port_range.empty() && | |
| 987 !NetworkSettings::ParsePortRange(udp_port_range, &min_udp_port, | |
| 988 &max_udp_port)) { | |
| 989 LOG(WARNING) << "Invalid port range policy: \"" << udp_port_range | |
| 990 << "\". Using default values."; | |
| 991 } | |
| 992 | |
| 993 if (min_udp_port_ != min_udp_port || max_udp_port_ != max_udp_port) { | |
| 994 if (min_udp_port != 0 && max_udp_port != 0) { | |
| 995 HOST_LOG << "Policy restricts UDP port range to [" << min_udp_port | |
| 996 << ", " << max_udp_port << "]"; | |
| 997 } else { | |
| 998 HOST_LOG << "Policy does not restrict UDP port range."; | |
| 999 } | |
| 1000 min_udp_port_ = min_udp_port; | |
| 1001 max_udp_port_ = max_udp_port; | |
| 1002 return true; | |
| 1003 } | |
| 1004 return false; | |
| 1005 } | |
| 1006 | |
| 1007 void HostProcess::OnCurtainPolicyUpdate(bool curtain_required) { | 945 void HostProcess::OnCurtainPolicyUpdate(bool curtain_required) { |
| 1008 // Returns true if the host has to be restarted after this policy update. | 946 // Returns true if the host has to be restarted after this policy update. |
| 1009 DCHECK(context_->network_task_runner()->BelongsToCurrentThread()); | 947 DCHECK(context_->network_task_runner()->BelongsToCurrentThread()); |
| 1010 | 948 |
| 1011 #if defined(OS_MACOSX) | 949 #if defined(OS_MACOSX) |
| 1012 if (curtain_required) { | 950 if (curtain_required) { |
| 1013 // When curtain mode is in effect on Mac, the host process runs in the | 951 // When curtain mode is in effect on Mac, the host process runs in the |
| 1014 // user's switched-out session, but launchd will also run an instance at | 952 // user's switched-out session, but launchd will also run an instance at |
| 1015 // the console login screen. Even if no user is currently logged-on, we | 953 // the console login screen. Even if no user is currently logged-on, we |
| 1016 // can't support remote-access to the login screen because the current host | 954 // can't support remote-access to the login screen because the current host |
| (...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1142 new OAuthTokenGetter::OAuthCredentials( | 1080 new OAuthTokenGetter::OAuthCredentials( |
| 1143 xmpp_server_config_.username, oauth_refresh_token_, | 1081 xmpp_server_config_.username, oauth_refresh_token_, |
| 1144 use_service_account_)); | 1082 use_service_account_)); |
| 1145 | 1083 |
| 1146 oauth_token_getter_.reset(new OAuthTokenGetter( | 1084 oauth_token_getter_.reset(new OAuthTokenGetter( |
| 1147 oauth_credentials.Pass(), context_->url_request_context_getter())); | 1085 oauth_credentials.Pass(), context_->url_request_context_getter())); |
| 1148 | 1086 |
| 1149 signaling_connector_->EnableOAuth(oauth_token_getter_.get()); | 1087 signaling_connector_->EnableOAuth(oauth_token_getter_.get()); |
| 1150 } | 1088 } |
| 1151 | 1089 |
| 1152 uint32 network_flags = allow_nat_traversal_ ? | 1090 NetworkSettings network_settings( |
| 1153 NetworkSettings::NAT_TRAVERSAL_STUN : 0; | 1091 allow_nat_traversal_ ? |
| 1154 | 1092 NetworkSettings::NAT_TRAVERSAL_ENABLED : |
| 1155 if (allow_relay_) | 1093 NetworkSettings::NAT_TRAVERSAL_DISABLED); |
| 1156 network_flags |= NetworkSettings::NAT_TRAVERSAL_RELAY; | 1094 if (!allow_nat_traversal_) { |
| 1157 | |
| 1158 if (allow_relay_ || allow_nat_traversal_) | |
| 1159 network_flags |= NetworkSettings::NAT_TRAVERSAL_OUTGOING; | |
| 1160 | |
| 1161 NetworkSettings network_settings(network_flags); | |
| 1162 | |
| 1163 if (min_udp_port_ && max_udp_port_) { | |
| 1164 network_settings.min_port = min_udp_port_; | |
| 1165 network_settings.max_port = max_udp_port_; | |
| 1166 } else if (!allow_nat_traversal_) { | |
| 1167 // For legacy reasons we have to restrict the port range to a set of default | |
| 1168 // values when nat traversal is disabled, even if the port range was not | |
| 1169 // set in policy. | |
| 1170 network_settings.min_port = NetworkSettings::kDefaultMinPort; | 1095 network_settings.min_port = NetworkSettings::kDefaultMinPort; |
| 1171 network_settings.max_port = NetworkSettings::kDefaultMaxPort; | 1096 network_settings.max_port = NetworkSettings::kDefaultMaxPort; |
| 1172 } | 1097 } |
| 1173 | 1098 |
| 1174 host_.reset(new ChromotingHost( | 1099 host_.reset(new ChromotingHost( |
| 1175 signal_strategy_.get(), | 1100 signal_strategy_.get(), |
| 1176 desktop_environment_factory_.get(), | 1101 desktop_environment_factory_.get(), |
| 1177 CreateHostSessionManager(signal_strategy_.get(), network_settings, | 1102 CreateHostSessionManager(signal_strategy_.get(), network_settings, |
| 1178 context_->url_request_context_getter()), | 1103 context_->url_request_context_getter()), |
| 1179 context_->audio_task_runner(), | 1104 context_->audio_task_runner(), |
| (...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1353 return exit_code; | 1278 return exit_code; |
| 1354 } | 1279 } |
| 1355 | 1280 |
| 1356 } // namespace remoting | 1281 } // namespace remoting |
| 1357 | 1282 |
| 1358 #if !defined(OS_WIN) | 1283 #if !defined(OS_WIN) |
| 1359 int main(int argc, char** argv) { | 1284 int main(int argc, char** argv) { |
| 1360 return remoting::HostMain(argc, argv); | 1285 return remoting::HostMain(argc, argv); |
| 1361 } | 1286 } |
| 1362 #endif // !defined(OS_WIN) | 1287 #endif // !defined(OS_WIN) |
| OLD | NEW |