diff options
author | Vitaly Buka <vitalybuka@google.com> | 2016-03-04 17:32:23 -0800 |
---|---|---|
committer | Vitaly Buka <vitalybuka@google.com> | 2016-03-07 17:34:05 +0000 |
commit | 978e712cf915649cb9c33945f2aeb3b15c675c83 (patch) | |
tree | e78ef5887c1c9340f87fdec938682b4c84579342 /src | |
parent | e4b8ccfd147d54ad8731055e5bdb7526b30cb984 (diff) | |
download | libweave-978e712cf915649cb9c33945f2aeb3b15c675c83.tar.gz |
Implement local_discovery_enabled setting
Implementation will reset entire privet::Manager component if setting was
changed to false, and recreate component if it was changed into true.
Additionally removing of HTTP callback was added.
BUG: 27480269
Change-Id: Ieea91057fc0bdbd5f12c439b791250c9cf6c3741
Reviewed-on: https://weave-review.googlesource.com/2833
Reviewed-by: Alex Vakulenko <avakulenko@google.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/device_manager.cc | 36 | ||||
-rw-r--r-- | src/device_manager.h | 15 | ||||
-rw-r--r-- | src/privet/privet_manager.cc | 14 | ||||
-rw-r--r-- | src/privet/privet_manager.h | 1 | ||||
-rw-r--r-- | src/weave_unittest.cc | 8 |
5 files changed, 57 insertions, 17 deletions
diff --git a/src/device_manager.cc b/src/device_manager.cc index b6b91a9..3f8e4d7 100644 --- a/src/device_manager.cc +++ b/src/device_manager.cc @@ -30,7 +30,12 @@ DeviceManager::DeviceManager(provider::ConfigStore* config_store, provider::HttpServer* http_server, provider::Wifi* wifi, provider::Bluetooth* bluetooth) - : config_{new Config{config_store}}, + : task_runner_{task_runner}, + network_{network}, + dns_sd_{dns_sd}, + http_server_{http_server}, + wifi_{wifi}, + config_{new Config{config_store}}, component_manager_{new ComponentManagerImpl{task_runner}} { if (http_server) { access_revocation_manager_.reset( @@ -50,7 +55,9 @@ DeviceManager::DeviceManager(provider::ConfigStore* config_store, device_info_->Start(); if (http_server) { - StartPrivet(task_runner, network, dns_sd, http_server, wifi, bluetooth); + StartPrivet(); + AddSettingsChangedCallback(base::Bind(&DeviceManager::OnSettingsChanged, + weak_ptr_factory_.GetWeakPtr())); } else { CHECK(!dns_sd); } @@ -71,17 +78,18 @@ Config* DeviceManager::GetConfig() { return device_info_->GetMutableConfig(); } -void DeviceManager::StartPrivet(provider::TaskRunner* task_runner, - provider::Network* network, - provider::DnsServiceDiscovery* dns_sd, - provider::HttpServer* http_server, - provider::Wifi* wifi, - provider::Bluetooth* bluetooth) { - privet_.reset(new privet::Manager{task_runner}); - privet_->Start(network, dns_sd, http_server, wifi, auth_manager_.get(), +void DeviceManager::StartPrivet() { + if (privet_) + return; + privet_.reset(new privet::Manager{task_runner_}); + privet_->Start(network_, dns_sd_, http_server_, wifi_, auth_manager_.get(), device_info_.get(), component_manager_.get()); } +void DeviceManager::StopPrivet() { + privet_.reset(); +} + GcdState DeviceManager::GetGcdState() const { return device_info_->GetGcdState(); } @@ -188,6 +196,14 @@ void DeviceManager::AddPairingChangedCallbacks( privet_->AddOnPairingChangedCallbacks(begin_callback, end_callback); } +void DeviceManager::OnSettingsChanged(const Settings& settings) { + if (settings.local_discovery_enabled && http_server_) { + StartPrivet(); + } else { + StopPrivet(); + } +} + std::unique_ptr<Device> Device::Create(provider::ConfigStore* config_store, provider::TaskRunner* task_runner, provider::HttpClient* http_client, diff --git a/src/device_manager.h b/src/device_manager.h index 545f293..c41a627 100644 --- a/src/device_manager.h +++ b/src/device_manager.h @@ -81,12 +81,15 @@ class DeviceManager final : public Device { Config* GetConfig(); private: - void StartPrivet(provider::TaskRunner* task_runner, - provider::Network* network, - provider::DnsServiceDiscovery* dns_sd, - provider::HttpServer* http_server, - provider::Wifi* wifi, - provider::Bluetooth* bluetooth); + void StartPrivet(); + void StopPrivet(); + void OnSettingsChanged(const Settings& settings); + + provider::TaskRunner* task_runner_{nullptr}; + provider::Network* network_{nullptr}; + provider::DnsServiceDiscovery* dns_sd_{nullptr}; + provider::HttpServer* http_server_{nullptr}; + provider::Wifi* wifi_{nullptr}; std::unique_ptr<Config> config_; std::unique_ptr<privet::AuthManager> auth_manager_; diff --git a/src/privet/privet_manager.cc b/src/privet/privet_manager.cc index 36223ba..1858168 100644 --- a/src/privet/privet_manager.cc +++ b/src/privet/privet_manager.cc @@ -40,7 +40,17 @@ using provider::Wifi; Manager::Manager(TaskRunner* task_runner) : task_runner_{task_runner} {} -Manager::~Manager() {} +Manager::~Manager() { + if (privet_handler_) { + for (const auto& path : privet_handler_->GetHttpsPaths()) { + http_server_->RemoveHttpsRequestHandler(path); + } + + for (const auto& path : privet_handler_->GetHttpPaths()) { + http_server_->RemoveHttpRequestHandler(path); + } + } +} void Manager::Start(Network* network, DnsServiceDiscovery* dns_sd, @@ -49,6 +59,8 @@ void Manager::Start(Network* network, AuthManager* auth_manager, DeviceRegistrationInfo* device, ComponentManager* component_manager) { + http_server_ = http_server; + CHECK(http_server_); CHECK(auth_manager); CHECK(device); diff --git a/src/privet/privet_manager.h b/src/privet/privet_manager.h index c91d72c..0d95f7a 100644 --- a/src/privet/privet_manager.h +++ b/src/privet/privet_manager.h @@ -78,6 +78,7 @@ class Manager { void OnConnectivityChanged(); provider::TaskRunner* task_runner_{nullptr}; + provider::HttpServer* http_server_{nullptr}; std::unique_ptr<CloudDelegate> cloud_; std::unique_ptr<DeviceDelegate> device_; std::unique_ptr<SecurityManager> security_; diff --git a/src/weave_unittest.cc b/src/weave_unittest.cc index 3b28001..d92dace 100644 --- a/src/weave_unittest.cc +++ b/src/weave_unittest.cc @@ -263,6 +263,14 @@ class WeaveTest : public ::testing::Test { const provider::HttpServer::RequestHandlerCallback& cb) { https_handlers_[path_prefix] = cb; })); + EXPECT_CALL(http_server_, RemoveHttpRequestHandler(_)) + .WillRepeatedly(Invoke([this](const std::string& path_prefix) { + http_handlers_.erase(path_prefix); + })); + EXPECT_CALL(http_server_, RemoveHttpsRequestHandler(_)) + .WillRepeatedly(Invoke([this](const std::string& path_prefix) { + https_handlers_.erase(path_prefix); + })); } void InitDefaultExpectations() { |