aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorVitaly Buka <vitalybuka@google.com>2016-03-04 17:32:23 -0800
committerVitaly Buka <vitalybuka@google.com>2016-03-07 17:34:05 +0000
commit978e712cf915649cb9c33945f2aeb3b15c675c83 (patch)
treee78ef5887c1c9340f87fdec938682b4c84579342 /src
parente4b8ccfd147d54ad8731055e5bdb7526b30cb984 (diff)
downloadlibweave-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.cc36
-rw-r--r--src/device_manager.h15
-rw-r--r--src/privet/privet_manager.cc14
-rw-r--r--src/privet/privet_manager.h1
-rw-r--r--src/weave_unittest.cc8
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() {