OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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/it2me/it2me_host.h" | 5 #include "remoting/host/it2me/it2me_host.h" |
6 | 6 |
7 #include <cstdint> | 7 #include <cstdint> |
8 #include <memory> | 8 #include <memory> |
9 #include <string> | 9 #include <string> |
10 #include <utility> | 10 #include <utility> |
(...skipping 10 matching lines...) Expand all Loading... |
21 #include "remoting/base/logging.h" | 21 #include "remoting/base/logging.h" |
22 #include "remoting/base/rsa_key_pair.h" | 22 #include "remoting/base/rsa_key_pair.h" |
23 #include "remoting/base/service_urls.h" | 23 #include "remoting/base/service_urls.h" |
24 #include "remoting/host/chromoting_host.h" | 24 #include "remoting/host/chromoting_host.h" |
25 #include "remoting/host/chromoting_host_context.h" | 25 #include "remoting/host/chromoting_host_context.h" |
26 #include "remoting/host/host_event_logger.h" | 26 #include "remoting/host/host_event_logger.h" |
27 #include "remoting/host/host_secret.h" | 27 #include "remoting/host/host_secret.h" |
28 #include "remoting/host/host_status_logger.h" | 28 #include "remoting/host/host_status_logger.h" |
29 #include "remoting/host/it2me/it2me_confirmation_dialog.h" | 29 #include "remoting/host/it2me/it2me_confirmation_dialog.h" |
30 #include "remoting/host/it2me_desktop_environment.h" | 30 #include "remoting/host/it2me_desktop_environment.h" |
31 #include "remoting/host/policy_watcher.h" | |
32 #include "remoting/host/register_support_host_request.h" | 31 #include "remoting/host/register_support_host_request.h" |
33 #include "remoting/protocol/auth_util.h" | 32 #include "remoting/protocol/auth_util.h" |
34 #include "remoting/protocol/chromium_port_allocator_factory.h" | 33 #include "remoting/protocol/chromium_port_allocator_factory.h" |
35 #include "remoting/protocol/ice_transport.h" | 34 #include "remoting/protocol/ice_transport.h" |
36 #include "remoting/protocol/it2me_host_authenticator_factory.h" | 35 #include "remoting/protocol/it2me_host_authenticator_factory.h" |
37 #include "remoting/protocol/jingle_session_manager.h" | 36 #include "remoting/protocol/jingle_session_manager.h" |
38 #include "remoting/protocol/network_settings.h" | 37 #include "remoting/protocol/network_settings.h" |
39 #include "remoting/protocol/transport_context.h" | 38 #include "remoting/protocol/transport_context.h" |
40 #include "remoting/protocol/validating_authenticator.h" | 39 #include "remoting/protocol/validating_authenticator.h" |
41 #include "remoting/signaling/jid_util.h" | 40 #include "remoting/signaling/jid_util.h" |
42 #include "remoting/signaling/server_log_entry.h" | 41 #include "remoting/signaling/server_log_entry.h" |
43 | 42 |
44 namespace remoting { | 43 namespace remoting { |
45 | 44 |
46 namespace { | 45 namespace { |
47 | 46 |
48 // This is used for tagging system event logs. | 47 // This is used for tagging system event logs. |
49 const char kApplicationName[] = "chromoting"; | 48 const char kApplicationName[] = "chromoting"; |
50 const int kMaxLoginAttempts = 5; | 49 const int kMaxLoginAttempts = 5; |
51 | 50 |
52 using protocol::ValidatingAuthenticator; | 51 using protocol::ValidatingAuthenticator; |
53 typedef ValidatingAuthenticator::Result ValidationResult; | 52 typedef ValidatingAuthenticator::Result ValidationResult; |
54 typedef ValidatingAuthenticator::ValidationCallback ValidationCallback; | 53 typedef ValidatingAuthenticator::ValidationCallback ValidationCallback; |
55 typedef ValidatingAuthenticator::ResultCallback ValidationResultCallback; | 54 typedef ValidatingAuthenticator::ResultCallback ValidationResultCallback; |
56 | 55 |
57 } // namespace | 56 } // namespace |
58 | 57 |
59 It2MeHost::It2MeHost( | 58 It2MeHost::It2MeHost( |
60 std::unique_ptr<ChromotingHostContext> host_context, | 59 std::unique_ptr<ChromotingHostContext> host_context, |
61 std::unique_ptr<PolicyWatcher> policy_watcher, | |
62 std::unique_ptr<It2MeConfirmationDialogFactory> dialog_factory, | 60 std::unique_ptr<It2MeConfirmationDialogFactory> dialog_factory, |
63 base::WeakPtr<It2MeHost::Observer> observer, | 61 base::WeakPtr<It2MeHost::Observer> observer, |
64 std::unique_ptr<SignalStrategy> signal_strategy, | 62 std::unique_ptr<SignalStrategy> signal_strategy, |
65 const std::string& username, | 63 const std::string& username, |
66 const std::string& directory_bot_jid) | 64 const std::string& directory_bot_jid) |
67 : host_context_(std::move(host_context)), | 65 : host_context_(std::move(host_context)), |
68 observer_(observer), | 66 observer_(observer), |
69 signal_strategy_(std::move(signal_strategy)), | 67 signal_strategy_(std::move(signal_strategy)), |
70 username_(username), | 68 username_(username), |
71 directory_bot_jid_(directory_bot_jid), | 69 directory_bot_jid_(directory_bot_jid), |
72 policy_watcher_(std::move(policy_watcher)), | |
73 confirmation_dialog_factory_(std::move(dialog_factory)) { | 70 confirmation_dialog_factory_(std::move(dialog_factory)) { |
74 DCHECK(host_context_->ui_task_runner()->BelongsToCurrentThread()); | 71 DCHECK(host_context_->ui_task_runner()->BelongsToCurrentThread()); |
75 } | 72 } |
76 | 73 |
77 It2MeHost::~It2MeHost() { | 74 It2MeHost::~It2MeHost() { |
78 // Check that resources that need to be torn down on the UI thread are gone. | 75 // Check that resources that need to be torn down on the UI thread are gone. |
79 DCHECK(!desktop_environment_factory_.get()); | 76 DCHECK(!desktop_environment_factory_.get()); |
80 DCHECK(!policy_watcher_.get()); | |
81 } | 77 } |
82 | 78 |
83 void It2MeHost::Connect() { | 79 void It2MeHost::Connect() { |
84 if (!host_context_->ui_task_runner()->BelongsToCurrentThread()) { | 80 if (!host_context_->ui_task_runner()->BelongsToCurrentThread()) { |
85 host_context_->ui_task_runner()->PostTask( | 81 host_context_->ui_task_runner()->PostTask( |
86 FROM_HERE, base::Bind(&It2MeHost::Connect, this)); | 82 FROM_HERE, base::Bind(&It2MeHost::Connect, this)); |
87 return; | 83 return; |
88 } | 84 } |
89 | 85 |
90 desktop_environment_factory_.reset(new It2MeDesktopEnvironmentFactory( | 86 desktop_environment_factory_.reset(new It2MeDesktopEnvironmentFactory( |
91 host_context_->network_task_runner(), | 87 host_context_->network_task_runner(), |
92 host_context_->video_capture_task_runner(), | 88 host_context_->video_capture_task_runner(), |
93 host_context_->input_task_runner(), host_context_->ui_task_runner())); | 89 host_context_->input_task_runner(), host_context_->ui_task_runner())); |
94 | 90 |
95 // Start monitoring configured policies. | |
96 policy_watcher_->StartWatching( | |
97 base::Bind(&It2MeHost::OnPolicyUpdate, this), | |
98 base::Bind(&It2MeHost::OnPolicyError, this)); | |
99 | |
100 // Switch to the network thread to start the actual connection. | 91 // Switch to the network thread to start the actual connection. |
101 host_context_->network_task_runner()->PostTask( | 92 host_context_->network_task_runner()->PostTask( |
102 FROM_HERE, base::Bind(&It2MeHost::ReadPolicyAndConnect, this)); | 93 FROM_HERE, base::Bind(&It2MeHost::ReadPolicyAndConnect, this)); |
103 } | 94 } |
104 | 95 |
105 void It2MeHost::Disconnect() { | 96 void It2MeHost::Disconnect() { |
106 DCHECK(host_context_->ui_task_runner()->BelongsToCurrentThread()); | 97 DCHECK(host_context_->ui_task_runner()->BelongsToCurrentThread()); |
107 host_context_->network_task_runner()->PostTask( | 98 host_context_->network_task_runner()->PostTask( |
108 FROM_HERE, base::Bind(&It2MeHost::DisconnectOnNetworkThread, this)); | 99 FROM_HERE, base::Bind(&It2MeHost::DisconnectOnNetworkThread, this)); |
109 } | 100 } |
(...skipping 15 matching lines...) Expand all Loading... |
125 host_.reset(); | 116 host_.reset(); |
126 } | 117 } |
127 | 118 |
128 register_request_.reset(); | 119 register_request_.reset(); |
129 host_status_logger_.reset(); | 120 host_status_logger_.reset(); |
130 signal_strategy_.reset(); | 121 signal_strategy_.reset(); |
131 | 122 |
132 // Post tasks to delete UI objects on the UI thread. | 123 // Post tasks to delete UI objects on the UI thread. |
133 host_context_->ui_task_runner()->DeleteSoon( | 124 host_context_->ui_task_runner()->DeleteSoon( |
134 FROM_HERE, desktop_environment_factory_.release()); | 125 FROM_HERE, desktop_environment_factory_.release()); |
135 host_context_->ui_task_runner()->DeleteSoon(FROM_HERE, | |
136 policy_watcher_.release()); | |
137 | 126 |
138 SetState(kDisconnected, ""); | 127 SetState(kDisconnected, ""); |
139 } | 128 } |
140 | 129 |
141 void It2MeHost::RequestNatPolicy() { | 130 void It2MeHost::RequestNatPolicy() { |
142 if (!host_context_->network_task_runner()->BelongsToCurrentThread()) { | 131 if (!host_context_->network_task_runner()->BelongsToCurrentThread()) { |
143 DCHECK(host_context_->ui_task_runner()->BelongsToCurrentThread()); | 132 DCHECK(host_context_->ui_task_runner()->BelongsToCurrentThread()); |
144 host_context_->network_task_runner()->PostTask( | 133 host_context_->network_task_runner()->PostTask( |
145 FROM_HERE, base::Bind(&It2MeHost::RequestNatPolicy, this)); | 134 FROM_HERE, base::Bind(&It2MeHost::RequestNatPolicy, this)); |
146 return; | 135 return; |
(...skipping 194 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
341 UpdateClientDomainListPolicy(std::move(client_domain_list_vector)); | 330 UpdateClientDomainListPolicy(std::move(client_domain_list_vector)); |
342 } | 331 } |
343 | 332 |
344 policy_received_ = true; | 333 policy_received_ = true; |
345 | 334 |
346 if (!pending_connect_.is_null()) { | 335 if (!pending_connect_.is_null()) { |
347 base::ResetAndReturn(&pending_connect_).Run(); | 336 base::ResetAndReturn(&pending_connect_).Run(); |
348 } | 337 } |
349 } | 338 } |
350 | 339 |
351 void It2MeHost::OnPolicyError() { | |
352 // TODO(lukasza): Report the policy error to the user. crbug.com/433009 | |
353 NOTIMPLEMENTED(); | |
354 } | |
355 | |
356 void It2MeHost::UpdateNatPolicy(bool nat_traversal_enabled) { | 340 void It2MeHost::UpdateNatPolicy(bool nat_traversal_enabled) { |
357 DCHECK(host_context_->network_task_runner()->BelongsToCurrentThread()); | 341 DCHECK(host_context_->network_task_runner()->BelongsToCurrentThread()); |
358 | 342 |
359 VLOG(2) << "UpdateNatPolicy: " << nat_traversal_enabled; | 343 VLOG(2) << "UpdateNatPolicy: " << nat_traversal_enabled; |
360 | 344 |
361 // When transitioning from enabled to disabled, force disconnect any | 345 // When transitioning from enabled to disabled, force disconnect any |
362 // existing session. | 346 // existing session. |
363 if (nat_traversal_enabled_ && !nat_traversal_enabled && IsRunning()) { | 347 if (nat_traversal_enabled_ && !nat_traversal_enabled && IsRunning()) { |
364 DisconnectOnNetworkThread(); | 348 DisconnectOnNetworkThread(); |
365 } | 349 } |
(...skipping 221 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
587 It2MeHostFactory::~It2MeHostFactory() {} | 571 It2MeHostFactory::~It2MeHostFactory() {} |
588 | 572 |
589 scoped_refptr<It2MeHost> It2MeHostFactory::CreateIt2MeHost( | 573 scoped_refptr<It2MeHost> It2MeHostFactory::CreateIt2MeHost( |
590 std::unique_ptr<ChromotingHostContext> context, | 574 std::unique_ptr<ChromotingHostContext> context, |
591 policy::PolicyService* policy_service, | 575 policy::PolicyService* policy_service, |
592 base::WeakPtr<It2MeHost::Observer> observer, | 576 base::WeakPtr<It2MeHost::Observer> observer, |
593 std::unique_ptr<SignalStrategy> signal_strategy, | 577 std::unique_ptr<SignalStrategy> signal_strategy, |
594 const std::string& username, | 578 const std::string& username, |
595 const std::string& directory_bot_jid) { | 579 const std::string& directory_bot_jid) { |
596 DCHECK(context->ui_task_runner()->BelongsToCurrentThread()); | 580 DCHECK(context->ui_task_runner()->BelongsToCurrentThread()); |
597 | 581 return new It2MeHost( |
598 std::unique_ptr<PolicyWatcher> policy_watcher = | 582 std::move(context), base::MakeUnique<It2MeConfirmationDialogFactory>(), |
599 PolicyWatcher::Create(policy_service, context->file_task_runner()); | 583 observer, std::move(signal_strategy), username, directory_bot_jid); |
600 return new It2MeHost(std::move(context), std::move(policy_watcher), | |
601 base::MakeUnique<It2MeConfirmationDialogFactory>(), | |
602 observer, std::move(signal_strategy), username, | |
603 directory_bot_jid); | |
604 } | 584 } |
605 | 585 |
606 } // namespace remoting | 586 } // namespace remoting |
OLD | NEW |