Revert "Merge remote-tracking branch 'weave/master' into aosp-master2"
This reverts commit ca54c12635b4af2786807c980723c5964b06903d.
Change-Id: I5819d299e565a9ecb3cb7eaa21c3731b266d5c63
Reviewed-on: https://weave-review.googlesource.com/1486
Reviewed-by: Vitaly Buka <vitalybuka@google.com>
diff --git a/README b/README
index bf9b70b..b62b547 100644
--- a/README
+++ b/README
@@ -56,7 +56,7 @@
examples/build.sh
-Execute example (check examples/daemon/README for details):
+Execute example:
sudo out/Debug/weave_daemon
diff --git a/examples/build.sh b/examples/build.sh
index e4c412d..2bd398ef 100755
--- a/examples/build.sh
+++ b/examples/build.sh
@@ -8,7 +8,7 @@
cd $ROOT_DIR
-gyp -Ilibweave_common.gypi --toplevel-dir=. --depth=. -f ninja $DIR/daemon/examples.gyp
+gyp -Ilibweave_common.gypi --toplevel-dir=. --depth=. -f ninja $DIR/daemon/daemon.gyp
if [ -z "$BUILD_CONFIG" ]; then
export BUILD_CONFIG=Debug
@@ -16,7 +16,7 @@
export BUILD_TARGET=$*
if [ -z "$BUILD_TARGET" ]; then
- export BUILD_TARGET="weave_daemon_examples libweave_testrunner libweave_exports_testrunner"
+ export BUILD_TARGET="weave_daemon libweave_testrunner libweave_exports_testrunner"
fi
export CORES=`cat /proc/cpuinfo | grep processor | wc -l`
diff --git a/examples/daemon/README b/examples/daemon/README
index 287459f..4743883 100644
--- a/examples/daemon/README
+++ b/examples/daemon/README
@@ -84,16 +84,16 @@
Enter request body:
{
"deviceId": "0f8a5ff5-1ef0-ec39-f9d8-66d1caeb9e3d",
- "name": "_sample._hello",
+ "name": "_greeter._greet",
"parameters": { "_name": "cloud user" }
}
"Send the request", you command will be "queued" as its "state"
- verify the command execution with weave daemon
in terminal running the daemon, observe something similar to
- New command '_sample._hello' arrived, ...
- received command: _sample._hello
- _sample._hello command: finished
+ New command '_greeter._greet' arrived, ...
+ received command: _greeter._greet
+ _greeter._greet command: finished
- verify the command history with oauthplayground
Similar to "Acquire Registration Ticket" section in this document,
except in "step 3", do:
@@ -104,9 +104,9 @@
"Send the request", you get all of the commands executed on your
device, find something like
"kind": "clouddevices#command",
- "name": "_sample._hello",
+ "name": "_greeter._greet",
"results": {
- "_reply": "Hello cloud user"
+ "_greeting": "Hello cloud user"
},
...
diff --git a/examples/daemon/common/daemon.h b/examples/daemon/common/daemon.h
deleted file mode 100644
index 0e05b88..0000000
--- a/examples/daemon/common/daemon.h
+++ /dev/null
@@ -1,124 +0,0 @@
-// Copyright 2015 The Weave Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include <weave/device.h>
-#include <weave/error.h>
-
-#include <base/bind.h>
-
-#include "examples/provider/avahi_client.h"
-#include "examples/provider/bluez_client.h"
-#include "examples/provider/curl_http_client.h"
-#include "examples/provider/event_http_server.h"
-#include "examples/provider/event_network.h"
-#include "examples/provider/event_task_runner.h"
-#include "examples/provider/file_config_store.h"
-#include "examples/provider/wifi_manager.h"
-
-class Daemon {
- public:
- struct Options {
- bool force_bootstrapping_ = false;
- bool disable_security_ = false;
- bool disable_privet_ = false;
- std::string registration_ticket_;
-
- static void ShowUsage(const std::string& name) {
- LOG(ERROR) << "\nUsage: " << name << " <option(s)>"
- << "\nOptions:\n"
- << "\t-h,--help Show this help message\n"
- << "\t--v=LEVEL Logging level\n"
- << "\t-b,--bootstrapping Force WiFi bootstrapping\n"
- << "\t-d,--disable_security Disable privet security\n"
- << "\t--registration_ticket=TICKET Register device with the "
- "given ticket\n"
- << "\t--disable_privet Disable local privet\n";
- }
-
- bool Parse(int argc, char** argv) {
- for (int i = 1; i < argc; ++i) {
- std::string arg = argv[i];
- if (arg == "-h" || arg == "--help") {
- return false;
- } else if (arg == "-b" || arg == "--bootstrapping") {
- force_bootstrapping_ = true;
- } else if (arg == "-d" || arg == "--disable_security") {
- disable_security_ = true;
- } else if (arg == "--disable_privet") {
- disable_privet_ = true;
- } else if (arg.find("--registration_ticket") != std::string::npos) {
- auto pos = arg.find("=");
- if (pos == std::string::npos) {
- return false;
- }
- registration_ticket_ = arg.substr(pos + 1);
- } else if (arg.find("--v") != std::string::npos) {
- auto pos = arg.find("=");
- if (pos == std::string::npos) {
- return false;
- }
- logging::SetMinLogLevel(-std::stoi(arg.substr(pos + 1)));
- } else {
- return false;
- }
- }
- return true;
- }
- };
-
- Daemon(const Options& opts)
- : config_store_{new weave::examples::FileConfigStore(
- opts.disable_security_)},
- task_runner_{new weave::examples::EventTaskRunner},
- http_client_{new weave::examples::CurlHttpClient(task_runner_.get())},
- network_{new weave::examples::EventNetworkImpl(task_runner_.get())},
- bluetooth_{new weave::examples::BluetoothImpl} {
- if (!opts.disable_privet_) {
- network_->SetSimulateOffline(opts.force_bootstrapping_);
-
- dns_sd_.reset(new weave::examples::AvahiClient);
- http_server_.reset(
- new weave::examples::HttpServerImpl{task_runner_.get()});
- if (weave::examples::WifiImpl::HasWifiCapability())
- wifi_.reset(
- new weave::examples::WifiImpl{task_runner_.get(), network_.get()});
- }
- device_ = weave::Device::Create(config_store_.get(), task_runner_.get(),
- http_client_.get(), network_.get(),
- dns_sd_.get(), http_server_.get(),
- wifi_.get(), bluetooth_.get());
-
- if (!opts.registration_ticket_.empty()) {
- device_->Register(opts.registration_ticket_,
- base::Bind(&OnRegisterDeviceDone, device_.get()));
- }
- }
-
- void Run() { task_runner_->Run(); }
-
- weave::Device* GetDevice() const { return device_.get(); }
-
- weave::examples::EventTaskRunner* GetTaskRunner() const {
- return task_runner_.get();
- }
-
- private:
- static void OnRegisterDeviceDone(weave::Device* device,
- weave::ErrorPtr error) {
- if (error)
- LOG(ERROR) << "Fail to register device: " << error->GetMessage();
- else
- LOG(INFO) << "Device registered: " << device->GetSettings().cloud_id;
- }
-
- std::unique_ptr<weave::examples::FileConfigStore> config_store_;
- std::unique_ptr<weave::examples::EventTaskRunner> task_runner_;
- std::unique_ptr<weave::examples::CurlHttpClient> http_client_;
- std::unique_ptr<weave::examples::EventNetworkImpl> network_;
- std::unique_ptr<weave::examples::BluetoothImpl> bluetooth_;
- std::unique_ptr<weave::examples::AvahiClient> dns_sd_;
- std::unique_ptr<weave::examples::HttpServerImpl> http_server_;
- std::unique_ptr<weave::examples::WifiImpl> wifi_;
- std::unique_ptr<weave::Device> device_;
-};
diff --git a/examples/daemon/lock/daemon.gyp b/examples/daemon/daemon.gyp
similarity index 86%
rename from examples/daemon/lock/daemon.gyp
rename to examples/daemon/daemon.gyp
index 0402a29..c6f8837 100644
--- a/examples/daemon/lock/daemon.gyp
+++ b/examples/daemon/daemon.gyp
@@ -4,10 +4,10 @@
{
'targets': [
{
- 'target_name': 'weave_daemon_lock',
+ 'target_name': 'weave_daemon',
'type': 'executable',
'sources': [
- 'lock.cc',
+ 'main.cc',
],
'dependencies': [
'<@(DEPTH)/libweave_standalone.gyp:libweave',
diff --git a/examples/daemon/examples.gyp b/examples/daemon/examples.gyp
deleted file mode 100644
index 8fee90d..0000000
--- a/examples/daemon/examples.gyp
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- 'targets': [
- {
- 'target_name': 'weave_daemon_examples',
- 'type': 'none',
- 'dependencies': [
- 'sample/daemon.gyp:weave_daemon_sample',
- 'light/daemon.gyp:weave_daemon_light',
- 'lock/daemon.gyp:weave_daemon_lock',
- 'ledflasher/daemon.gyp:weave_daemon_ledflasher'
- ]
- }
- ]
-}
diff --git a/examples/daemon/ledflasher/daemon.gyp b/examples/daemon/ledflasher/daemon.gyp
deleted file mode 100644
index 5abfcd6..0000000
--- a/examples/daemon/ledflasher/daemon.gyp
+++ /dev/null
@@ -1,18 +0,0 @@
-# Copyright 2015 The Weave Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-{
- 'targets': [
- {
- 'target_name': 'weave_daemon_ledflasher',
- 'type': 'executable',
- 'sources': [
- 'ledflasher.cc',
- ],
- 'dependencies': [
- '<@(DEPTH)/libweave_standalone.gyp:libweave',
- '<@(DEPTH)/examples/provider/provider.gyp:libweave_provider',
- ]
- }
- ]
-}
diff --git a/examples/daemon/ledflasher/ledflasher.cc b/examples/daemon/ledflasher_handler.h
similarity index 78%
rename from examples/daemon/ledflasher/ledflasher.cc
rename to examples/daemon/ledflasher_handler.h
index 38314f5..812a3d4 100644
--- a/examples/daemon/ledflasher/ledflasher.cc
+++ b/examples/daemon/ledflasher_handler.h
@@ -2,8 +2,6 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "examples/daemon/common/daemon.h"
-
#include <weave/device.h>
#include <base/bind.h>
@@ -11,6 +9,10 @@
#include <bitset>
+namespace weave {
+namespace examples {
+namespace daemon {
+
namespace {
// Supported LED count on this device
const size_t kLedCount = 3;
@@ -21,7 +23,7 @@
class LedFlasherHandler {
public:
LedFlasherHandler() {}
- void Register(weave::Device* device) {
+ void Register(Device* device) {
device_ = device;
device->AddStateDefinitionsFromJson(R"({
@@ -58,7 +60,7 @@
}
private:
- void OnFlasherSetCommand(const std::weak_ptr<weave::Command>& command) {
+ void OnFlasherSetCommand(const std::weak_ptr<Command>& command) {
auto cmd = command.lock();
if (!cmd)
return;
@@ -82,13 +84,13 @@
cmd->Complete({}, nullptr);
return;
}
- weave::ErrorPtr error;
- weave::Error::AddTo(&error, FROM_HERE, "example", "invalid_parameter_value",
- "Invalid parameters");
+ ErrorPtr error;
+ Error::AddTo(&error, FROM_HERE, "example", "invalid_parameter_value",
+ "Invalid parameters");
cmd->Abort(error.get(), nullptr);
}
- void OnFlasherToggleCommand(const std::weak_ptr<weave::Command>& command) {
+ void OnFlasherToggleCommand(const std::weak_ptr<Command>& command) {
auto cmd = command.lock();
if (!cmd)
return;
@@ -103,13 +105,13 @@
cmd->Complete({}, nullptr);
return;
}
- weave::ErrorPtr error;
- weave::Error::AddTo(&error, FROM_HERE, "example", "invalid_parameter_value",
- "Invalid parameters");
+ ErrorPtr error;
+ Error::AddTo(&error, FROM_HERE, "example", "invalid_parameter_value",
+ "Invalid parameters");
cmd->Abort(error.get(), nullptr);
}
- void UpdateLedState() {
+ void UpdateLedState(void) {
base::ListValue list;
for (uint32_t i = 0; i < led_status_.size(); i++)
list.AppendBoolean(led_status_[i] ? true : false);
@@ -117,7 +119,7 @@
device_->SetStateProperty("_ledflasher._leds", list, nullptr);
}
- weave::Device* device_{nullptr};
+ Device* device_{nullptr};
// Simulate LED status on this device so client app could explore
// Each bit represents one device, indexing from LSB
@@ -125,15 +127,6 @@
base::WeakPtrFactory<LedFlasherHandler> weak_ptr_factory_{this};
};
-int main(int argc, char** argv) {
- Daemon::Options opts;
- if (!opts.Parse(argc, argv)) {
- Daemon::Options::ShowUsage(argv[0]);
- return 1;
- }
- Daemon daemon{opts};
- LedFlasherHandler handler;
- handler.Register(daemon.GetDevice());
- daemon.Run();
- return 0;
-}
+} // namespace daemon
+} // namespace examples
+} // namespace weave
diff --git a/examples/daemon/light/daemon.gyp b/examples/daemon/light/daemon.gyp
deleted file mode 100644
index e8bb646..0000000
--- a/examples/daemon/light/daemon.gyp
+++ /dev/null
@@ -1,18 +0,0 @@
-# Copyright 2015 The Weave Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-{
- 'targets': [
- {
- 'target_name': 'weave_daemon_light',
- 'type': 'executable',
- 'sources': [
- 'light.cc',
- ],
- 'dependencies': [
- '<@(DEPTH)/libweave_standalone.gyp:libweave',
- '<@(DEPTH)/examples/provider/provider.gyp:libweave_provider',
- ]
- }
- ]
-}
diff --git a/examples/daemon/light/light.cc b/examples/daemon/light_handler.h
similarity index 68%
rename from examples/daemon/light/light.cc
rename to examples/daemon/light_handler.h
index 484b9e1..33b440a 100644
--- a/examples/daemon/light/light.cc
+++ b/examples/daemon/light_handler.h
@@ -2,19 +2,21 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "examples/daemon/common/daemon.h"
-
#include <weave/device.h>
#include <base/bind.h>
#include <base/memory/weak_ptr.h>
+namespace weave {
+namespace examples {
+namespace daemon {
+
// LightHandler is a command handler example that shows
// how to handle commands for a Weave light.
class LightHandler {
public:
LightHandler() = default;
- void Register(weave::Device* device) {
+ void Register(Device* device) {
device_ = device;
device->AddStateDefinitionsFromJson(R"({
@@ -48,16 +50,18 @@
}
}
})");
- device->AddCommandHandler("onOff.setConfig",
- base::Bind(&LightHandler::OnOnOffSetConfig,
- weak_ptr_factory_.GetWeakPtr()));
- device->AddCommandHandler("brightness.setConfig",
- base::Bind(&LightHandler::OnBrightnessSetConfig,
- weak_ptr_factory_.GetWeakPtr()));
+ device->AddCommandHandler(
+ "onOff.setConfig",
+ base::Bind(&LightHandler::OnOnOffSetConfig,
+ weak_ptr_factory_.GetWeakPtr()));
+ device->AddCommandHandler(
+ "brightness.setConfig",
+ base::Bind(&LightHandler::OnBrightnessSetConfig,
+ weak_ptr_factory_.GetWeakPtr()));
}
private:
- void OnBrightnessSetConfig(const std::weak_ptr<weave::Command>& command) {
+ void OnBrightnessSetConfig(const std::weak_ptr<Command>& command) {
auto cmd = command.lock();
if (!cmd)
return;
@@ -74,13 +78,13 @@
cmd->Complete({}, nullptr);
return;
}
- weave::ErrorPtr error;
- weave::Error::AddTo(&error, FROM_HERE, "example", "invalid_parameter_value",
- "Invalid parameters");
+ ErrorPtr error;
+ Error::AddTo(&error, FROM_HERE, "example", "invalid_parameter_value",
+ "Invalid parameters");
cmd->Abort(error.get(), nullptr);
}
- void OnOnOffSetConfig(const std::weak_ptr<weave::Command>& command) {
+ void OnOnOffSetConfig(const std::weak_ptr<Command>& command) {
auto cmd = command.lock();
if (!cmd)
return;
@@ -99,20 +103,20 @@
cmd->Complete({}, nullptr);
return;
}
- weave::ErrorPtr error;
- weave::Error::AddTo(&error, FROM_HERE, "example", "invalid_parameter_value",
- "Invalid parameters");
+ ErrorPtr error;
+ Error::AddTo(&error, FROM_HERE, "example", "invalid_parameter_value",
+ "Invalid parameters");
cmd->Abort(error.get(), nullptr);
}
- void UpdateLightState() {
+ void UpdateLightState(void) {
base::DictionaryValue state;
state.SetString("onOff.state", light_status_ ? "on" : "standby");
state.SetInteger("brightness.brightness", brightness_state_);
device_->SetStateProperties(state, nullptr);
}
- weave::Device* device_{nullptr};
+ Device* device_{nullptr};
// Simulate the state of the light.
bool light_status_;
@@ -120,15 +124,6 @@
base::WeakPtrFactory<LightHandler> weak_ptr_factory_{this};
};
-int main(int argc, char** argv) {
- Daemon::Options opts;
- if (!opts.Parse(argc, argv)) {
- Daemon::Options::ShowUsage(argv[0]);
- return 1;
- }
- Daemon daemon{opts};
- LightHandler handler;
- handler.Register(daemon.GetDevice());
- daemon.Run();
- return 0;
-}
+} // namespace daemon
+} // namespace examples
+} // namespace weave
diff --git a/examples/daemon/lock/lock.cc b/examples/daemon/lock_handler.h
similarity index 63%
rename from examples/daemon/lock/lock.cc
rename to examples/daemon/lock_handler.h
index e1ca2d9..b2fd9b5 100644
--- a/examples/daemon/lock/lock.cc
+++ b/examples/daemon/lock_handler.h
@@ -2,8 +2,6 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "examples/daemon/common/daemon.h"
-
#include <weave/device.h>
#include <weave/enum_to_string.h>
@@ -11,26 +9,29 @@
#include <base/memory/weak_ptr.h>
namespace weave {
+
namespace lockstate {
enum class LockState { kUnlocked, kLocked, kPartiallyLocked };
const weave::EnumToStringMap<LockState>::Map kLockMapMethod[] = {
- {LockState::kLocked, "locked"},
- {LockState::kUnlocked, "unlocked"},
- {LockState::kPartiallyLocked, "partiallyLocked"}};
+ {LockState::kLocked, "locked"},
+ {LockState::kUnlocked, "unlocked"},
+ {LockState::kPartiallyLocked, "partiallyLocked"}};
} // namespace lockstate
template <>
EnumToStringMap<lockstate::LockState>::EnumToStringMap()
- : EnumToStringMap(lockstate::kLockMapMethod) {}
-} // namespace weave
+ : EnumToStringMap(lockstate::kLockMapMethod) {}
+
+namespace examples {
+namespace daemon {
// LockHandler is a command handler example that shows
// how to handle commands for a Weave lock.
class LockHandler {
public:
LockHandler() = default;
- void Register(weave::Device* device) {
+ void Register(Device* device) {
device_ = device;
device->AddStateDefinitionsFromJson(R"({
@@ -51,13 +52,14 @@
}
}
})");
- device->AddCommandHandler("lock.setConfig",
- base::Bind(&LockHandler::OnLockSetConfig,
- weak_ptr_factory_.GetWeakPtr()));
+ device->AddCommandHandler(
+ "lock.setConfig",
+ base::Bind(&LockHandler::OnLockSetConfig,
+ weak_ptr_factory_.GetWeakPtr()));
}
private:
- void OnLockSetConfig(const std::weak_ptr<weave::Command>& command) {
+ void OnLockSetConfig(const std::weak_ptr<Command>& command) {
auto cmd = command.lock();
if (!cmd)
return;
@@ -66,13 +68,13 @@
if (cmd->GetParameters()->GetString("lockedState", &requested_state)) {
LOG(INFO) << cmd->GetName() << " state: " << requested_state;
- weave::lockstate::LockState new_lock_status;
+ lockstate::LockState new_lock_status;
if (!weave::StringToEnum(requested_state, &new_lock_status)) {
// Invalid lock state was specified.
- weave::ErrorPtr error;
- weave::Error::AddTo(&error, FROM_HERE, "example",
- "invalid_parameter_value", "Invalid parameters");
+ ErrorPtr error;
+ Error::AddTo(&error, FROM_HERE, "example", "invalid_parameter_value",
+ "Invalid parameters");
cmd->Abort(error.get(), nullptr);
return;
}
@@ -86,35 +88,26 @@
cmd->Complete({}, nullptr);
return;
}
- weave::ErrorPtr error;
- weave::Error::AddTo(&error, FROM_HERE, "example", "invalid_parameter_value",
- "Invalid parameters");
+ ErrorPtr error;
+ Error::AddTo(&error, FROM_HERE, "example", "invalid_parameter_value",
+ "Invalid parameters");
cmd->Abort(error.get(), nullptr);
}
- void UpdateLockState() {
+ void UpdateLockState(void) {
base::DictionaryValue state;
std::string updated_state = weave::EnumToString(lock_state_);
state.SetString("lock.lockedState", updated_state);
device_->SetStateProperties(state, nullptr);
}
- weave::Device* device_{nullptr};
+ Device* device_{nullptr};
// Simulate the state of the light.
- weave::lockstate::LockState lock_state_{weave::lockstate::LockState::kLocked};
+ lockstate::LockState lock_state_{lockstate::LockState::kLocked};
base::WeakPtrFactory<LockHandler> weak_ptr_factory_{this};
};
-int main(int argc, char** argv) {
- Daemon::Options opts;
- if (!opts.Parse(argc, argv)) {
- Daemon::Options::ShowUsage(argv[0]);
- return 1;
- }
- Daemon daemon{opts};
- LockHandler handler;
- handler.Register(daemon.GetDevice());
- daemon.Run();
- return 0;
-}
+} // namespace daemon
+} // namespace examples
+} // namespace weave
diff --git a/examples/daemon/main.cc b/examples/daemon/main.cc
new file mode 100644
index 0000000..a4ec366
--- /dev/null
+++ b/examples/daemon/main.cc
@@ -0,0 +1,145 @@
+// Copyright 2015 The Weave Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include <weave/device.h>
+#include <weave/error.h>
+
+#include <base/bind.h>
+
+#include "examples/daemon/ledflasher_handler.h"
+#include "examples/daemon/light_handler.h"
+#include "examples/daemon/lock_handler.h"
+#include "examples/daemon/sample_handler.h"
+
+#include "examples/provider/avahi_client.h"
+#include "examples/provider/bluez_client.h"
+#include "examples/provider/curl_http_client.h"
+#include "examples/provider/event_http_server.h"
+#include "examples/provider/event_network.h"
+#include "examples/provider/event_task_runner.h"
+#include "examples/provider/file_config_store.h"
+#include "examples/provider/wifi_manager.h"
+
+namespace {
+
+// Supported LED count on this device
+const size_t kLedCount = 3;
+
+void ShowUsage(const std::string& name) {
+ LOG(ERROR) << "\nUsage: " << name << " <option(s)>"
+ << "\nOptions:\n"
+ << "\t-h,--help Show this help message\n"
+ << "\t--v=LEVEL Logging level\n"
+ << "\t-b,--bootstrapping Force WiFi bootstrapping\n"
+ << "\t-d,--disable_security Disable privet security\n"
+ << "\t--registration_ticket=TICKET Register device with the "
+ "given ticket\n"
+ << "\t--disable_privet Disable local privet\n"
+ << "\t--type=UIDEVICEKIND Create a device with the "
+ "specified ui device kind\n";
+}
+
+void OnRegisterDeviceDone(weave::Device* device, weave::ErrorPtr error) {
+ if (error)
+ LOG(ERROR) << "Fail to register device: " << error->GetMessage();
+ else
+ LOG(INFO) << "Device registered: " << device->GetSettings().cloud_id;
+}
+
+} // namespace
+
+int main(int argc, char** argv) {
+ bool force_bootstrapping = false;
+ bool disable_security = false;
+ bool disable_privet = false;
+ std::string registration_ticket;
+ std::string ui_device_kind;
+ for (int i = 1; i < argc; ++i) {
+ std::string arg = argv[i];
+ if (arg == "-h" || arg == "--help") {
+ ShowUsage(argv[0]);
+ return 0;
+ } else if (arg == "-b" || arg == "--bootstrapping") {
+ force_bootstrapping = true;
+ } else if (arg == "-d" || arg == "--disable_security") {
+ disable_security = true;
+ } else if (arg == "--disable_privet") {
+ disable_privet = true;
+ } else if (arg.find("--registration_ticket") != std::string::npos) {
+ auto pos = arg.find("=");
+ if (pos == std::string::npos) {
+ ShowUsage(argv[0]);
+ return 1;
+ }
+ registration_ticket = arg.substr(pos + 1);
+ } else if (arg.find("--v") != std::string::npos) {
+ auto pos = arg.find("=");
+ if (pos == std::string::npos) {
+ ShowUsage(argv[0]);
+ return 1;
+ }
+ logging::SetMinLogLevel(-std::stoi(arg.substr(pos + 1)));
+ } else if (arg.find("--type") != std::string::npos) {
+ auto pos = arg.find("=");
+ if (pos == std::string::npos) {
+ ShowUsage(argv[0]);
+ return 1;
+ }
+ ui_device_kind = arg.substr(pos + 1);
+ } else {
+ ShowUsage(argv[0]);
+ return 1;
+ }
+ }
+
+ weave::examples::FileConfigStore config_store{disable_security};
+ weave::examples::EventTaskRunner task_runner;
+ weave::examples::CurlHttpClient http_client{&task_runner};
+ weave::examples::EventNetworkImpl network{&task_runner};
+ weave::examples::BluetoothImpl bluetooth;
+ std::unique_ptr<weave::examples::AvahiClient> dns_sd;
+ std::unique_ptr<weave::examples::HttpServerImpl> http_server;
+ std::unique_ptr<weave::examples::WifiImpl> wifi;
+
+ if (!disable_privet) {
+ network.SetSimulateOffline(force_bootstrapping);
+
+ dns_sd.reset(new weave::examples::AvahiClient);
+ http_server.reset(new weave::examples::HttpServerImpl{&task_runner});
+ if (weave::examples::WifiImpl::HasWifiCapability())
+ wifi.reset(new weave::examples::WifiImpl{&task_runner, &network});
+ }
+ std::unique_ptr<weave::Device> device{weave::Device::Create(
+ &config_store, &task_runner, &http_client, &network, dns_sd.get(),
+ http_server.get(), wifi.get(), &bluetooth)};
+
+ if (!registration_ticket.empty()) {
+ device->Register(registration_ticket,
+ base::Bind(&OnRegisterDeviceDone, device.get()));
+ }
+
+ weave::examples::daemon::SampleHandler sample{&task_runner};
+ weave::examples::daemon::LedFlasherHandler ledFlasher;
+ sample.Register(device.get());
+ ledFlasher.Register(device.get());
+
+ // If the caller specified a particular ui device kind, register the
+ // correspoinding device handlers
+ // TODO: move this to before device registration, as this should also
+ // cause a particular model manifest to be used.
+ weave::examples::daemon::LightHandler lightHandler;
+ weave::examples::daemon::LockHandler lockHandler;
+ if (!ui_device_kind.empty()) {
+ if (ui_device_kind == "light") {
+ lightHandler.Register(device.get());
+ } else if (ui_device_kind == "lock") {
+ lockHandler.Register(device.get());
+ }
+ }
+
+ task_runner.Run();
+
+ LOG(INFO) << "exit";
+ return 0;
+}
diff --git a/examples/daemon/sample/daemon.gyp b/examples/daemon/sample/daemon.gyp
deleted file mode 100644
index 29d8235..0000000
--- a/examples/daemon/sample/daemon.gyp
+++ /dev/null
@@ -1,18 +0,0 @@
-# Copyright 2015 The Weave Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-{
- 'targets': [
- {
- 'target_name': 'weave_daemon_sample',
- 'type': 'executable',
- 'sources': [
- 'sample.cc',
- ],
- 'dependencies': [
- '<@(DEPTH)/libweave_standalone.gyp:libweave',
- '<@(DEPTH)/examples/provider/provider.gyp:libweave_provider',
- ]
- }
- ]
-}
diff --git a/examples/daemon/sample/sample.cc b/examples/daemon/sample_handler.h
similarity index 80%
rename from examples/daemon/sample/sample.cc
rename to examples/daemon/sample_handler.h
index 905a977..eca3452 100644
--- a/examples/daemon/sample/sample.cc
+++ b/examples/daemon/sample_handler.h
@@ -2,14 +2,16 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "examples/daemon/common/daemon.h"
-
#include <weave/device.h>
#include <weave/provider/task_runner.h>
#include <base/bind.h>
#include <base/memory/weak_ptr.h>
+namespace weave {
+namespace examples {
+namespace daemon {
+
// SampleHandler is a command handler example.
// It implements the following commands:
// - _hello: handle a command with an argument and set its results.
@@ -17,9 +19,9 @@
// - _countdown: handle long running command and report progress.
class SampleHandler {
public:
- SampleHandler(weave::provider::TaskRunner* task_runner)
+ SampleHandler(provider::TaskRunner* task_runner)
: task_runner_{task_runner} {}
- void Register(weave::Device* device) {
+ void Register(Device* device) {
device_ = device;
device->AddCommandDefinitionsFromJson(R"({
@@ -67,7 +69,7 @@
}
private:
- void OnHelloCommand(const std::weak_ptr<weave::Command>& command) {
+ void OnHelloCommand(const std::weak_ptr<Command>& command) {
auto cmd = command.lock();
if (!cmd)
return;
@@ -75,9 +77,9 @@
std::string name;
if (!cmd->GetParameters()->GetString("_name", &name)) {
- weave::ErrorPtr error;
- weave::Error::AddTo(&error, FROM_HERE, "example",
- "invalid_parameter_value", "Name is missing");
+ ErrorPtr error;
+ Error::AddTo(&error, FROM_HERE, "example", "invalid_parameter_value",
+ "Name is missing");
cmd->Abort(error.get(), nullptr);
return;
}
@@ -88,7 +90,7 @@
LOG(INFO) << cmd->GetName() << " command finished: " << result;
}
- void OnPingCommand(const std::weak_ptr<weave::Command>& command) {
+ void OnPingCommand(const std::weak_ptr<Command>& command) {
auto cmd = command.lock();
if (!cmd)
return;
@@ -105,7 +107,7 @@
LOG(INFO) << cmd->GetName() << " command finished: " << result;
}
- void OnCountdownCommand(const std::weak_ptr<weave::Command>& command) {
+ void OnCountdownCommand(const std::weak_ptr<Command>& command) {
auto cmd = command.lock();
if (!cmd)
return;
@@ -119,7 +121,7 @@
DoTick(cmd, seconds);
}
- void DoTick(const std::weak_ptr<weave::Command>& command, int seconds) {
+ void DoTick(const std::weak_ptr<Command>& command, int seconds) {
auto cmd = command.lock();
if (!cmd)
return;
@@ -146,22 +148,13 @@
LOG(INFO) << cmd->GetName() << " command finished: " << result;
}
- weave::Device* device_{nullptr};
- weave::provider::TaskRunner* task_runner_{nullptr};
+ Device* device_{nullptr};
+ provider::TaskRunner* task_runner_{nullptr};
int ping_count_{0};
base::WeakPtrFactory<SampleHandler> weak_ptr_factory_{this};
};
-int main(int argc, char** argv) {
- Daemon::Options opts;
- if (!opts.Parse(argc, argv)) {
- Daemon::Options::ShowUsage(argv[0]);
- return 1;
- }
- Daemon daemon{opts};
- SampleHandler handler{daemon.GetTaskRunner()};
- handler.Register(daemon.GetDevice());
- daemon.Run();
- return 0;
-}
+} // namespace daemon
+} // namespace examples
+} // namespace weave
diff --git a/src/commands/schema_utils.h b/src/commands/schema_utils.h
index 0c1d1b3..826bab8 100644
--- a/src/commands/schema_utils.h
+++ b/src/commands/schema_utils.h
@@ -5,7 +5,6 @@
#ifndef LIBWEAVE_SRC_COMMANDS_SCHEMA_UTILS_H_
#define LIBWEAVE_SRC_COMMANDS_SCHEMA_UTILS_H_
-#include <cmath>
#include <limits>
#include <map>
#include <memory>
diff --git a/src/privet/wifi_bootstrap_manager.cc b/src/privet/wifi_bootstrap_manager.cc
index 292622d..4f46ea4 100644
--- a/src/privet/wifi_bootstrap_manager.cc
+++ b/src/privet/wifi_bootstrap_manager.cc
@@ -20,10 +20,7 @@
namespace {
-const int kMonitoringWithSsidTimeoutSeconds = 15;
const int kMonitoringTimeoutSeconds = 120;
-const int kBootstrapTimeoutSeconds = 600;
-const int kConnectingTimeoutSeconds = 180;
const EnumToStringMap<WifiBootstrapManager::State>::Map kWifiSetupStateMap[] = {
{WifiBootstrapManager::State::kDisabled, "disabled"},
@@ -58,8 +55,7 @@
lifetime_weak_factory_.GetWeakPtr()));
if (config_->GetSettings().last_configured_ssid.empty()) {
// Give implementation some time to figure out state.
- StartMonitoring(
- base::TimeDelta::FromSeconds(kMonitoringWithSsidTimeoutSeconds));
+ StartMonitoring(base::TimeDelta::FromSeconds(15));
} else {
StartMonitoring(base::TimeDelta::FromSeconds(kMonitoringTimeoutSeconds));
}
@@ -84,30 +80,28 @@
task_runner_->PostDelayedTask(
FROM_HERE, base::Bind(&WifiBootstrapManager::OnBootstrapTimeout,
tasks_weak_factory_.GetWeakPtr()),
- base::TimeDelta::FromSeconds(kBootstrapTimeoutSeconds));
+ base::TimeDelta::FromMinutes(10));
}
// TODO(vitalybuka): Add SSID probing.
privet_ssid_ = GenerateSsid();
CHECK(!privet_ssid_.empty());
-
- VLOG(1) << "Starting AP with SSID: " << privet_ssid_;
wifi_->StartAccessPoint(privet_ssid_);
}
void WifiBootstrapManager::EndBootstrapping() {
- VLOG(1) << "Stopping AP";
wifi_->StopAccessPoint();
privet_ssid_.clear();
}
void WifiBootstrapManager::StartConnecting(const std::string& ssid,
const std::string& passphrase) {
- VLOG(1) << "Attempting connect to SSID:" << ssid;
+ VLOG(1) << "WiFi is attempting to connect. (ssid=" << ssid
+ << ", pass=" << passphrase << ").";
UpdateState(State::kConnecting);
task_runner_->PostDelayedTask(
FROM_HERE, base::Bind(&WifiBootstrapManager::OnConnectTimeout,
tasks_weak_factory_.GetWeakPtr()),
- base::TimeDelta::FromSeconds(kConnectingTimeoutSeconds));
+ base::TimeDelta::FromMinutes(3));
wifi_->Connect(ssid, passphrase,
base::Bind(&WifiBootstrapManager::OnConnectDone,
tasks_weak_factory_.GetWeakPtr(), ssid));
@@ -116,11 +110,6 @@
void WifiBootstrapManager::EndConnecting() {}
void WifiBootstrapManager::StartMonitoring(const base::TimeDelta& timeout) {
- monitor_until_ = {};
- ContinueMonitoring(timeout);
-}
-
-void WifiBootstrapManager::ContinueMonitoring(const base::TimeDelta& timeout) {
VLOG(1) << "Monitoring connectivity.";
// We already have a callback in place with |network_| to update our
// connectivity state. See OnConnectivityChange().
@@ -145,8 +134,8 @@
void WifiBootstrapManager::EndMonitoring() {}
void WifiBootstrapManager::UpdateState(State new_state) {
- VLOG(3) << "Switching state from " << EnumToString(state_) << " to "
- << EnumToString(new_state);
+ VLOG(3) << "Switching state from " << static_cast<int>(state_) << " to "
+ << static_cast<int>(new_state);
// Abort irrelevant tasks.
tasks_weak_factory_.InvalidateWeakPtrs();
@@ -238,26 +227,29 @@
}
void WifiBootstrapManager::OnConnectivityChange() {
+ VLOG(3) << "ConnectivityChanged: "
+ << EnumToString(network_->GetConnectionState());
UpdateConnectionState();
- if (state_ == State::kMonitoring ||
+ if (state_ == State::kMonitoring || // Reset monitoring timeout.
(state_ != State::kDisabled &&
network_->GetConnectionState() == Network::State::kOnline)) {
- ContinueMonitoring(base::TimeDelta::FromSeconds(kMonitoringTimeoutSeconds));
+ StartMonitoring(base::TimeDelta::FromSeconds(kMonitoringTimeoutSeconds));
}
}
void WifiBootstrapManager::OnMonitorTimeout() {
- VLOG(1) << "Spent too long offline. Entering bootstrap mode.";
+ VLOG(1) << "Spent too long offline. Entering bootstrap mode.";
// TODO(wiley) Retrieve relevant errors from shill.
StartBootstrapping();
}
void WifiBootstrapManager::UpdateConnectionState() {
connection_state_ = ConnectionState{ConnectionState::kUnconfigured};
+ if (config_->GetSettings().last_configured_ssid.empty())
+ return;
Network::State service_state{network_->GetConnectionState()};
- VLOG(3) << "New network state: " << EnumToString(service_state);
switch (service_state) {
case Network::State::kOffline:
connection_state_ = ConnectionState{ConnectionState::kOffline};
diff --git a/src/privet/wifi_bootstrap_manager.h b/src/privet/wifi_bootstrap_manager.h
index 62a77c2..71dbb49 100644
--- a/src/privet/wifi_bootstrap_manager.h
+++ b/src/privet/wifi_bootstrap_manager.h
@@ -74,7 +74,6 @@
void EndConnecting();
void StartMonitoring(const base::TimeDelta& timeout);
- void ContinueMonitoring(const base::TimeDelta& timeout);
void EndMonitoring();
// Update the current state, post tasks to notify listeners accordingly to
diff --git a/src/weave_unittest.cc b/src/weave_unittest.cc
index fb00cc9..6ff3f6d 100644
--- a/src/weave_unittest.cc
+++ b/src/weave_unittest.cc
@@ -21,14 +21,13 @@
#include "src/bind_lambda.h"
using testing::_;
-using testing::AtLeast;
using testing::AtMost;
using testing::HasSubstr;
-using testing::InSequence;
using testing::Invoke;
using testing::InvokeWithoutArgs;
using testing::MatchesRegex;
using testing::Mock;
+using testing::AtLeast;
using testing::Return;
using testing::ReturnRefOfCopy;
using testing::StartsWith;
@@ -267,13 +266,10 @@
void NotifyNetworkChanged(provider::Network::State state,
base::TimeDelta delay) {
- auto task = [this, state] {
- EXPECT_CALL(network_, GetConnectionState()).WillRepeatedly(Return(state));
- for (const auto& cb : network_callbacks_)
- cb.Run();
- };
-
- task_runner_.PostDelayedTask(FROM_HERE, base::Bind(task), delay);
+ EXPECT_CALL(network_, GetConnectionState()).WillRepeatedly(Return(state));
+ for (const auto& cb : network_callbacks_) {
+ task_runner_.PostDelayedTask(FROM_HERE, cb, delay);
+ }
}
std::map<std::string, provider::HttpServer::RequestHandlerCallback>
@@ -464,67 +460,4 @@
StartDevice();
}
-TEST_F(WeaveWiFiSetupTest, OfflineLongTimeWithNoSsid) {
- EXPECT_CALL(network_, GetConnectionState())
- .WillRepeatedly(Return(Network::State::kOffline));
- NotifyNetworkChanged(provider::Network::State::kOnline,
- base::TimeDelta::FromHours(15));
-
- {
- InSequence s;
- auto time_stamp = task_runner_.GetClock()->Now();
-
- EXPECT_CALL(wifi_, StartAccessPoint(MatchesRegex("TEST_NAME.*prv")))
- .WillOnce(InvokeWithoutArgs([this, &time_stamp]() {
- EXPECT_LE(task_runner_.GetClock()->Now() - time_stamp,
- base::TimeDelta::FromMinutes(1));
- time_stamp = task_runner_.GetClock()->Now();
- }));
-
- EXPECT_CALL(wifi_, StopAccessPoint())
- .WillOnce(InvokeWithoutArgs([this, &time_stamp]() {
- EXPECT_GT(task_runner_.GetClock()->Now() - time_stamp,
- base::TimeDelta::FromMinutes(5));
- time_stamp = task_runner_.GetClock()->Now();
- task_runner_.Break();
- }));
- }
-
- StartDevice();
-}
-
-TEST_F(WeaveWiFiSetupTest, OfflineLongTimeWithSsid) {
- EXPECT_CALL(config_store_, LoadSettings())
- .WillRepeatedly(Return(R"({"last_configured_ssid": "TEST_ssid"})"));
- EXPECT_CALL(network_, GetConnectionState())
- .WillRepeatedly(Return(Network::State::kOffline));
- NotifyNetworkChanged(provider::Network::State::kOnline,
- base::TimeDelta::FromHours(15));
-
- {
- InSequence s;
- auto time_stamp = task_runner_.GetClock()->Now();
- for (size_t i = 0; i < 10; ++i) {
- EXPECT_CALL(wifi_, StartAccessPoint(MatchesRegex("TEST_NAME.*prv")))
- .WillOnce(InvokeWithoutArgs([this, &time_stamp]() {
- EXPECT_GT(task_runner_.GetClock()->Now() - time_stamp,
- base::TimeDelta::FromMinutes(1));
- time_stamp = task_runner_.GetClock()->Now();
- }));
-
- EXPECT_CALL(wifi_, StopAccessPoint())
- .WillOnce(InvokeWithoutArgs([this, &time_stamp]() {
- EXPECT_GT(task_runner_.GetClock()->Now() - time_stamp,
- base::TimeDelta::FromMinutes(5));
- time_stamp = task_runner_.GetClock()->Now();
- }));
- }
-
- EXPECT_CALL(wifi_, StartAccessPoint(MatchesRegex("TEST_NAME.*prv")))
- .WillOnce(InvokeWithoutArgs([this]() { task_runner_.Break(); }));
- }
-
- StartDevice();
-}
-
} // namespace weave