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

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

Issue 10831184: Fix Me2Me host to properly reload config when it changes. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 4 months 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 115 matching lines...) Expand 10 before | Expand all | Expand 10 after
126 host_config_path_ = cmd_line->GetSwitchValuePath(kHostConfigSwitchName); 126 host_config_path_ = cmd_line->GetSwitchValuePath(kHostConfigSwitchName);
127 } 127 }
128 if (!config_.AddConfigPath(host_config_path_)) { 128 if (!config_.AddConfigPath(host_config_path_)) {
129 return false; 129 return false;
130 } 130 }
131 131
132 return true; 132 return true;
133 } 133 }
134 134
135 void ConfigUpdated() { 135 void ConfigUpdated() {
136 // The timer should be set and cleaned up on the same thread.
137 DCHECK(message_loop_.message_loop_proxy()->BelongsToCurrentThread()); 136 DCHECK(message_loop_.message_loop_proxy()->BelongsToCurrentThread());
138 137
139 // Call ConfigUpdatedDelayed after a short delay, so that this object won't 138 // Call ConfigUpdatedDelayed after a short delay, so that this object won't
140 // try to read the updated configuration file before it has been 139 // try to read the updated configuration file before it has been
141 // completely written. 140 // completely written.
142 // If the writer moves the new configuration file into place atomically, 141 // If the writer moves the new configuration file into place atomically,
143 // this delay may not be necessary. 142 // this delay may not be necessary.
144 config_updated_timer_->Reset(); 143 config_updated_timer_->Reset();
145 } 144 }
146 145
147 void ConfigUpdatedDelayed() { 146 void ConfigUpdatedDelayed() {
148 if (LoadConfig()) { 147 DCHECK(message_loop_.message_loop_proxy()->BelongsToCurrentThread());
148
149 if (config_.Reload() && LoadConfig()) {
simonmorris 2012/08/07 00:43:35 I think it's more natural to include the call to R
Sergey Ulanov 2012/08/07 00:57:03 Done. Also changed CompositeHostConfig::AddConfigP
150 // PostTask to create new authenticator factory in case PIN has changed.
149 context_->network_task_runner()->PostTask( 151 context_->network_task_runner()->PostTask(
150 FROM_HERE, 152 FROM_HERE,
151 base::Bind(&HostProcess::CreateAuthenticatorFactory, 153 base::Bind(&HostProcess::CreateAuthenticatorFactory,
152 base::Unretained(this))); 154 base::Unretained(this)));
153 } else { 155 } else {
154 LOG(ERROR) << "Invalid configuration."; 156 LOG(ERROR) << "Invalid configuration.";
155 } 157 }
156 } 158 }
157 159
158 #if defined(OS_WIN) 160 #if defined(OS_WIN)
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
190 message_loop_.message_loop_proxy(), 192 message_loop_.message_loop_proxy(),
191 base::Bind(&HostProcess::ConfigUpdated, base::Unretained(this)))); 193 base::Bind(&HostProcess::ConfigUpdated, base::Unretained(this))));
192 config_watcher_.reset(new base::files::FilePathWatcher()); 194 config_watcher_.reset(new base::files::FilePathWatcher());
193 if (!config_watcher_->Watch(host_config_path_, delegate)) { 195 if (!config_watcher_->Watch(host_config_path_, delegate)) {
194 LOG(ERROR) << "Couldn't watch file " << host_config_path_.value(); 196 LOG(ERROR) << "Couldn't watch file " << host_config_path_.value();
195 } 197 }
196 #endif 198 #endif
197 } 199 }
198 200
199 void CreateAuthenticatorFactory() { 201 void CreateAuthenticatorFactory() {
202 DCHECK(context_->network_task_runner()->BelongsToCurrentThread());
200 scoped_ptr<protocol::AuthenticatorFactory> factory( 203 scoped_ptr<protocol::AuthenticatorFactory> factory(
201 new protocol::Me2MeHostAuthenticatorFactory( 204 new protocol::Me2MeHostAuthenticatorFactory(
202 key_pair_.GenerateCertificate(), 205 key_pair_.GenerateCertificate(),
203 *key_pair_.private_key(), host_secret_hash_)); 206 *key_pair_.private_key(), host_secret_hash_));
204 host_->SetAuthenticatorFactory(factory.Pass()); 207 host_->SetAuthenticatorFactory(factory.Pass());
205 } 208 }
206 209
207 int Run() { 210 int Run() {
208 if (!LoadConfig()) { 211 if (!LoadConfig()) {
209 return kInvalidHostConfigurationExitCode; 212 return kInvalidHostConfigurationExitCode;
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
244 private: 247 private:
245 void StartWatchingPolicy() { 248 void StartWatchingPolicy() {
246 policy_watcher_.reset( 249 policy_watcher_.reset(
247 policy_hack::PolicyWatcher::Create(context_->file_task_runner())); 250 policy_hack::PolicyWatcher::Create(context_->file_task_runner()));
248 policy_watcher_->StartWatching( 251 policy_watcher_->StartWatching(
249 base::Bind(&HostProcess::OnPolicyUpdate, base::Unretained(this))); 252 base::Bind(&HostProcess::OnPolicyUpdate, base::Unretained(this)));
250 } 253 }
251 254
252 // Read host config, returning true if successful. 255 // Read host config, returning true if successful.
253 bool LoadConfig() { 256 bool LoadConfig() {
257 DCHECK(message_loop_.message_loop_proxy()->BelongsToCurrentThread());
258
259 // TODO(sergeyu): There is a potential race condition: this function is
260 // called on the main thread while the class members it mutates are used on
261 // the network thread. Fix it. http://crbug.com/140986 .
262
254 if (!config_.GetString(kHostIdConfigPath, &host_id_)) { 263 if (!config_.GetString(kHostIdConfigPath, &host_id_)) {
255 LOG(ERROR) << "host_id is not defined in the config."; 264 LOG(ERROR) << "host_id is not defined in the config.";
256 return false; 265 return false;
257 } 266 }
258 267
259 if (!key_pair_.Load(config_)) { 268 if (!key_pair_.Load(config_)) {
260 return false; 269 return false;
261 } 270 }
262 271
263 std::string host_secret_hash_string; 272 std::string host_secret_hash_string;
(...skipping 373 matching lines...) Expand 10 before | Expand all | Expand 10 after
637 user32.GetFunctionPointer("SetProcessDPIAware")); 646 user32.GetFunctionPointer("SetProcessDPIAware"));
638 set_process_dpi_aware(); 647 set_process_dpi_aware();
639 } 648 }
640 649
641 // CommandLine::Init() ignores the passed |argc| and |argv| on Windows getting 650 // CommandLine::Init() ignores the passed |argc| and |argv| on Windows getting
642 // the command line from GetCommandLineW(), so we can safely pass NULL here. 651 // the command line from GetCommandLineW(), so we can safely pass NULL here.
643 return main(0, NULL); 652 return main(0, NULL);
644 } 653 }
645 654
646 #endif // defined(OS_WIN) 655 #endif // defined(OS_WIN)
OLDNEW
« remoting/host/composite_host_config.h ('K') | « remoting/host/composite_host_config.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698