Sync with latest version of libweave
Pull the latest changes of libweave and update weaved correspondingly
Change-Id: I0a24a948c9296d4f8a12d1f26f808cb7b78fe572
diff --git a/Android.mk b/Android.mk
index af05e09..de005d1 100644
--- a/Android.mk
+++ b/Android.mk
@@ -88,11 +88,8 @@
LOCAL_MODULE := weaved
LOCAL_REQUIRED_MODULES := \
avahi-daemon \
- base_state.defaults.json \
- base_state.schema.json \
weaved.json \
com.android.Weave.conf \
- gcd.json \
webservd \
LOCAL_CPP_EXTENSION := $(buffetCommonCppExtension)
@@ -156,52 +153,9 @@
include $(BUILD_NATIVE_TEST)
-# weaved_client
-# ========================================================
-include $(CLEAR_VARS)
-LOCAL_MODULE := weaved_client
-LOCAL_CPP_EXTENSION := $(buffetCommonCppExtension)
-LOCAL_CFLAGS := $(buffetCommonCFlags)
-LOCAL_CPPFLAGS := $(buffetCommonCppFlags)
-LOCAL_C_INCLUDES := $(buffetCommonCIncludes)
-LOCAL_SHARED_LIBRARIES := $(buffetSharedLibraries)
-LOCAL_STATIC_LIBRARIES :=
-LOCAL_DBUS_PROXY_PREFIX := buffet
-LOCAL_RTTI_FLAG := -frtti
-LOCAL_CLANG := true
-
-LOCAL_SRC_FILES := \
- buffet/buffet_client.cc \
- buffet/dbus_bindings/dbus-service-config.json \
- buffet/dbus_bindings/com.android.Weave.Command.dbus-xml \
- buffet/dbus_bindings/com.android.Weave.Manager.dbus-xml \
-
-include $(BUILD_EXECUTABLE)
-
# Config files for /etc/weaved
# ========================================================
include $(CLEAR_VARS)
-LOCAL_MODULE := base_state.defaults.json
-LOCAL_MODULE_CLASS := ETC
-LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/weaved
-LOCAL_SRC_FILES := buffet/etc/weaved/base_state.defaults.json
-include $(BUILD_PREBUILT)
-
-include $(CLEAR_VARS)
-LOCAL_MODULE := base_state.schema.json
-LOCAL_MODULE_CLASS := ETC
-LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/weaved
-LOCAL_SRC_FILES := buffet/etc/weaved/base_state.schema.json
-include $(BUILD_PREBUILT)
-
-include $(CLEAR_VARS)
-LOCAL_MODULE := gcd.json
-LOCAL_MODULE_CLASS := ETC
-LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/weaved
-LOCAL_SRC_FILES := buffet/etc/weaved/gcd.json
-include $(BUILD_PREBUILT)
-
-include $(CLEAR_VARS)
LOCAL_MODULE := weaved.json
LOCAL_MODULE_CLASS := ETC
LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/weaved/commands
diff --git a/buffet/avahi_mdns_client.cc b/buffet/avahi_mdns_client.cc
index 3a28704..636ba35 100644
--- a/buffet/avahi_mdns_client.cc
+++ b/buffet/avahi_mdns_client.cc
@@ -39,7 +39,7 @@
namespace buffet {
AvahiMdnsClient::AvahiMdnsClient(const scoped_refptr<dbus::Bus> &bus)
- : bus_(bus) {
+ : bus_(bus), service_name_(base::GenerateGUID()) {
}
AvahiMdnsClient::~AvahiMdnsClient() {
@@ -229,7 +229,7 @@
void AvahiMdnsClient::CreateService() {
ErrorPtr error;
- VLOG(1) << "CreateService: name: " << device_id_ << ", type: " <<
+ VLOG(1) << "CreateService: name: " << service_name_ << ", type: " <<
service_type_ << ", port: " << port_;
auto resp = CallMethodAndBlock(
entry_group_,
@@ -239,7 +239,7 @@
int32_t{AVAHI_IF_UNSPEC},
int32_t{AVAHI_PROTO_UNSPEC},
uint32_t{0}, // No flags.
- device_id_,
+ service_name_,
std::string{"_privet._tcp"},
std::string{}, // domain.
std::string{}, // hostname
@@ -269,7 +269,7 @@
CHECK_EQ(READY, service_state_);
- VLOG(1) << "UpdateServiceTxt: name " << device_id_ << ", type: " <<
+ VLOG(1) << "UpdateServiceTxt: name " << service_name_ << ", type: " <<
service_type_ << ", port: " << port_;
auto resp = CallMethodAndBlock(
entry_group_,
@@ -279,7 +279,7 @@
int32_t{AVAHI_IF_UNSPEC},
int32_t{AVAHI_PROTO_UNSPEC},
uint32_t{0}, // No flags.
- device_id_,
+ service_name_,
std::string{"_privet._tcp"},
std::string{}, // domain.
txt_);
diff --git a/buffet/avahi_mdns_client.h b/buffet/avahi_mdns_client.h
index 681bd3b..e689cac 100644
--- a/buffet/avahi_mdns_client.h
+++ b/buffet/avahi_mdns_client.h
@@ -59,6 +59,7 @@
// State of the group/service publish operation.
AsyncState service_state_{UNDEF};
+ std::string service_name_;
std::string service_type_;
uint16_t port_{0};
TxtRecord txt_;
diff --git a/buffet/buffet_client.cc b/buffet/buffet_client.cc
deleted file mode 100644
index cf39c73..0000000
--- a/buffet/buffet_client.cc
+++ /dev/null
@@ -1,400 +0,0 @@
-// Copyright 2014 The Chromium OS 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 <memory>
-#include <string>
-#include <sysexits.h>
-
-#include <base/cancelable_callback.h>
-#include <base/command_line.h>
-#include <base/json/json_reader.h>
-#include <base/logging.h>
-#include <base/memory/ref_counted.h>
-#include <base/memory/weak_ptr.h>
-#include <base/strings/stringprintf.h>
-#include <base/values.h>
-#include <chromeos/any.h>
-#include <chromeos/daemons/dbus_daemon.h>
-#include <chromeos/data_encoding.h>
-#include <chromeos/dbus/data_serialization.h>
-#include <chromeos/dbus/dbus_method_invoker.h>
-#include <chromeos/errors/error.h>
-#include <chromeos/strings/string_utils.h>
-#include <chromeos/variant_dictionary.h>
-#include <dbus/bus.h>
-#include <dbus/message.h>
-#include <dbus/object_proxy.h>
-#include <dbus/object_manager.h>
-#include <dbus/values_util.h>
-
-#include "buffet/dbus-proxies.h"
-
-using chromeos::Error;
-using chromeos::ErrorPtr;
-using com::android::Weave::ManagerProxy;
-
-namespace {
-
-void usage() {
- printf(R"(Possible commands:
- - TestMethod <message>
- - CheckDeviceRegistered
- - GetDeviceInfo
- - RegisterDevice param1=val1¶m2=val2...
- - AddCommand '{"name":"command_name","parameters":{}}'
- - UpdateState prop_name prop_value
- - GetState
- - PendingCommands
- - SetCommandVisibility pkg1.cmd1[,pkg2.cm2,...] [all|cloud|local|none]
-)");
-}
-
-// Helpers for JsonToAny().
-template<typename T>
-chromeos::Any GetJsonValue(const base::Value& json,
- bool(base::Value::*fnc)(T*) const) {
- T val;
- CHECK((json.*fnc)(&val));
- return val;
-}
-
-template<typename T>
-chromeos::Any GetJsonList(const base::ListValue& list); // Prototype.
-
-// Converts a JSON value into an Any so it can be sent over D-Bus using
-// UpdateState D-Bus method from Buffet.
-chromeos::Any JsonToAny(const base::Value& json) {
- chromeos::Any prop_value;
- switch (json.GetType()) {
- case base::Value::TYPE_NULL:
- prop_value = nullptr;
- break;
- case base::Value::TYPE_BOOLEAN:
- prop_value = GetJsonValue<bool>(json, &base::Value::GetAsBoolean);
- break;
- case base::Value::TYPE_INTEGER:
- prop_value = GetJsonValue<int>(json, &base::Value::GetAsInteger);
- break;
- case base::Value::TYPE_DOUBLE:
- prop_value = GetJsonValue<double>(json, &base::Value::GetAsDouble);
- break;
- case base::Value::TYPE_STRING:
- prop_value = GetJsonValue<std::string>(json, &base::Value::GetAsString);
- break;
- case base::Value::TYPE_BINARY:
- LOG(FATAL) << "Binary values should not happen";
- break;
- case base::Value::TYPE_DICTIONARY: {
- const base::DictionaryValue* dict = nullptr; // Still owned by |json|.
- CHECK(json.GetAsDictionary(&dict));
- chromeos::VariantDictionary var_dict;
- base::DictionaryValue::Iterator it(*dict);
- while (!it.IsAtEnd()) {
- var_dict.emplace(it.key(), JsonToAny(it.value()));
- it.Advance();
- }
- prop_value = var_dict;
- break;
- }
- case base::Value::TYPE_LIST: {
- const base::ListValue* list = nullptr; // Still owned by |json|.
- CHECK(json.GetAsList(&list));
- CHECK(!list->empty()) << "Unable to deduce the type of list elements.";
- switch ((*list->begin())->GetType()) {
- case base::Value::TYPE_BOOLEAN:
- prop_value = GetJsonList<bool>(*list);
- break;
- case base::Value::TYPE_INTEGER:
- prop_value = GetJsonList<int>(*list);
- break;
- case base::Value::TYPE_DOUBLE:
- prop_value = GetJsonList<double>(*list);
- break;
- case base::Value::TYPE_STRING:
- prop_value = GetJsonList<std::string>(*list);
- break;
- case base::Value::TYPE_DICTIONARY:
- prop_value = GetJsonList<chromeos::VariantDictionary>(*list);
- break;
- default:
- LOG(FATAL) << "Unsupported JSON value type for list element: "
- << (*list->begin())->GetType();
- }
- break;
- }
- default:
- LOG(FATAL) << "Unexpected JSON value type: " << json.GetType();
- break;
- }
- return prop_value;
-}
-
-template<typename T>
-chromeos::Any GetJsonList(const base::ListValue& list) {
- std::vector<T> val;
- val.reserve(list.GetSize());
- for (const base::Value* v : list)
- val.push_back(JsonToAny(*v).Get<T>());
- return val;
-}
-
-class Daemon final : public chromeos::DBusDaemon {
- public:
- Daemon() = default;
-
- protected:
- int OnInit() override {
- int return_code = chromeos::DBusDaemon::OnInit();
- if (return_code != EX_OK)
- return return_code;
-
- object_manager_.reset(new com::android::Weave::ObjectManagerProxy{bus_});
- return_code = ScheduleActions();
- if (return_code == EX_USAGE) {
- usage();
- }
- return return_code;
- }
-
- void OnShutdown(int* return_code) override {
- if (*return_code == EX_OK)
- *return_code = exit_code_;
- }
-
- private:
- int ScheduleActions() {
- auto args = base::CommandLine::ForCurrentProcess()->GetArgs();
-
- // Pop the command off of the args list.
- std::string command = args.front();
- args.erase(args.begin());
- base::Callback<void(ManagerProxy*)> job;
- if (command.compare("TestMethod") == 0) {
- if (!args.empty() && !CheckArgs(command, args, 1))
- return EX_USAGE;
- std::string message;
- if (!args.empty())
- message = args.back();
- job = base::Bind(&Daemon::CallTestMethod, weak_factory_.GetWeakPtr(),
- message);
- } else if (command.compare("CheckDeviceRegistered") == 0 ||
- command.compare("cr") == 0) {
- if (!CheckArgs(command, args, 0))
- return EX_USAGE;
- job = base::Bind(&Daemon::CallCheckDeviceRegistered,
- weak_factory_.GetWeakPtr());
- } else if (command.compare("GetDeviceInfo") == 0 ||
- command.compare("di") == 0) {
- if (!CheckArgs(command, args, 0))
- return EX_USAGE;
- job = base::Bind(&Daemon::CallGetDeviceInfo,
- weak_factory_.GetWeakPtr());
- } else if (command.compare("RegisterDevice") == 0 ||
- command.compare("rd") == 0) {
- if (!args.empty() && !CheckArgs(command, args, 1))
- return EX_USAGE;
- std::string dict;
- if (!args.empty())
- dict = args.back();
- job = base::Bind(&Daemon::CallRegisterDevice,
- weak_factory_.GetWeakPtr(), dict);
- } else if (command.compare("UpdateState") == 0 ||
- command.compare("us") == 0) {
- if (!CheckArgs(command, args, 2))
- return EX_USAGE;
- job = base::Bind(&Daemon::CallUpdateState, weak_factory_.GetWeakPtr(),
- args.front(), args.back());
- } else if (command.compare("GetState") == 0 ||
- command.compare("gs") == 0) {
- if (!CheckArgs(command, args, 0))
- return EX_USAGE;
- job = base::Bind(&Daemon::CallGetState, weak_factory_.GetWeakPtr());
- } else if (command.compare("AddCommand") == 0 ||
- command.compare("ac") == 0) {
- if (!CheckArgs(command, args, 1))
- return EX_USAGE;
- job = base::Bind(&Daemon::CallAddCommand, weak_factory_.GetWeakPtr(),
- args.back());
- } else if (command.compare("PendingCommands") == 0 ||
- command.compare("pc") == 0) {
- if (!CheckArgs(command, args, 0))
- return EX_USAGE;
- // CallGetPendingCommands relies on ObjectManager but it is being
- // initialized asynchronously without a way to get a callback when
- // it is ready to be used. So, just wait a bit before calling its
- // methods.
- base::MessageLoop::current()->PostDelayedTask(
- FROM_HERE,
- base::Bind(&Daemon::CallGetPendingCommands,
- weak_factory_.GetWeakPtr()),
- base::TimeDelta::FromMilliseconds(100));
- } else {
- fprintf(stderr, "Unknown command: '%s'\n", command.c_str());
- return EX_USAGE;
- }
- if (!job.is_null())
- object_manager_->SetManagerAddedCallback(job);
- timeout_task_.Reset(
- base::Bind(&Daemon::OnJobTimeout, weak_factory_.GetWeakPtr()));
- base::MessageLoop::current()->PostDelayedTask(
- FROM_HERE,
- timeout_task_.callback(),
- base::TimeDelta::FromSeconds(10));
-
- return EX_OK;
- }
-
- void OnJobComplete() {
- timeout_task_.Cancel();
- Quit();
- }
-
- void OnJobTimeout() {
- fprintf(stderr, "Timed out before completing request.");
- Quit();
- }
-
- void ReportError(Error* error) {
- fprintf(stderr, "Failed to receive a response: %s\n",
- error->GetMessage().c_str());
- exit_code_ = EX_UNAVAILABLE;
- OnJobComplete();
- }
-
- bool CheckArgs(const std::string& command,
- const std::vector<std::string>& args,
- size_t expected_arg_count) {
- if (args.size() == expected_arg_count)
- return true;
- fprintf(stderr, "Invalid number of arguments for command '%s'\n",
- command.c_str());
- return false;
- }
-
- void CallTestMethod(const std::string& message, ManagerProxy* manager_proxy) {
- ErrorPtr error;
- std::string response_message;
- if (!manager_proxy->TestMethod(message, &response_message, &error)) {
- return ReportError(error.get());
- }
- printf("Received a response: %s\n", response_message.c_str());
- OnJobComplete();
- }
-
- void CallCheckDeviceRegistered(ManagerProxy* manager_proxy) {
- ErrorPtr error;
- std::string device_id;
- if (!manager_proxy->CheckDeviceRegistered(&device_id, &error)) {
- return ReportError(error.get());
- }
-
- printf("Device ID: %s\n",
- device_id.empty() ? "<unregistered>" : device_id.c_str());
- OnJobComplete();
- }
-
- void CallGetDeviceInfo(ManagerProxy* manager_proxy) {
- ErrorPtr error;
- std::string device_info;
- if (!manager_proxy->GetDeviceInfo(&device_info, &error)) {
- return ReportError(error.get());
- }
-
- printf("%s\n", device_info.c_str());
- OnJobComplete();
- }
-
- void CallRegisterDevice(const std::string& args,
- ManagerProxy* manager_proxy) {
- std::string ticket_id;
- if (!args.empty()) {
- auto key_values = chromeos::data_encoding::WebParamsDecode(args);
- for (const auto& pair : key_values) {
- if (pair.first == "ticket_id")
- ticket_id = pair.second;
- }
- }
-
- ErrorPtr error;
- std::string device_id;
- if (!manager_proxy->RegisterDevice(ticket_id, &device_id, &error)) {
- return ReportError(error.get());
- }
-
- printf("Device registered: %s\n", device_id.c_str());
- OnJobComplete();
- }
-
- void CallUpdateState(const std::string& prop,
- const std::string& value,
- ManagerProxy* manager_proxy) {
- ErrorPtr error;
- std::string error_message;
- std::unique_ptr<base::Value> json(
- base::JSONReader::ReadAndReturnError(value, base::JSON_PARSE_RFC,
- nullptr, &error_message)
- .release());
- if (!json) {
- Error::AddTo(&error, FROM_HERE, chromeos::errors::json::kDomain,
- chromeos::errors::json::kParseError, error_message);
- return ReportError(error.get());
- }
-
- chromeos::VariantDictionary property_set{{prop, JsonToAny(*json)}};
- if (!manager_proxy->UpdateState(property_set, &error)) {
- return ReportError(error.get());
- }
- OnJobComplete();
- }
-
- void CallGetState(ManagerProxy* manager_proxy) {
- std::string json;
- ErrorPtr error;
- if (!manager_proxy->GetState(&json, &error)) {
- return ReportError(error.get());
- }
- printf("%s\n", json.c_str());
- OnJobComplete();
- }
-
- void CallAddCommand(const std::string& command, ManagerProxy* manager_proxy) {
- ErrorPtr error;
- std::string id;
- if (!manager_proxy->AddCommand(command, "owner", &id, &error)) {
- return ReportError(error.get());
- }
- OnJobComplete();
- }
-
- void CallGetPendingCommands() {
- printf("Pending commands:\n");
- for (auto* cmd : object_manager_->GetCommandInstances()) {
- printf("%10s - '%s' (id:%s)\n", cmd->status().c_str(),
- cmd->name().c_str(), cmd->id().c_str());
- }
- OnJobComplete();
- }
-
- std::unique_ptr<com::android::Weave::ObjectManagerProxy> object_manager_;
- int exit_code_{EX_OK};
- base::CancelableCallback<void()> timeout_task_;
-
- base::WeakPtrFactory<Daemon> weak_factory_{this};
- DISALLOW_COPY_AND_ASSIGN(Daemon);
-};
-
-} // anonymous namespace
-
-int main(int argc, char** argv) {
- base::CommandLine::Init(argc, argv);
- base::CommandLine* cl = base::CommandLine::ForCurrentProcess();
- base::CommandLine::StringVector args = cl->GetArgs();
- if (args.empty()) {
- usage();
- return EX_USAGE;
- }
-
- Daemon daemon;
- return daemon.Run();
-}
diff --git a/buffet/buffet_config.cc b/buffet/buffet_config.cc
index ad834f8..a31dde8 100644
--- a/buffet/buffet_config.cc
+++ b/buffet/buffet_config.cc
@@ -24,14 +24,6 @@
const char kErrorDomain[] = "buffet";
const char kFileReadError[] = "file_read_error";
-bool StringToTimeDelta(const std::string& value, base::TimeDelta* delta) {
- uint64_t ms{0};
- if (!base::StringToUint64(value, &ms))
- return false;
- *delta = base::TimeDelta::FromMilliseconds(ms);
- return true;
-}
-
bool LoadFile(const base::FilePath& file_path,
std::string* data,
chromeos::ErrorPtr* error) {
@@ -63,37 +55,34 @@
const char kOemName[] = "oem_name";
const char kModelName[] = "model_name";
const char kModelId[] = "model_id";
-const char kPollingPeriodMs[] = "polling_period_ms";
-const char kBackupPollingPeriodMs[] = "backup_polling_period_ms";
const char kWifiAutoSetupEnabled[] = "wifi_auto_setup_enabled";
-const char kBleSetupEnabled[] = "ble_setup_enabled";
const char kEmbeddedCode[] = "embedded_code";
const char kPairingModes[] = "pairing_modes";
} // namespace config_keys
-BuffetConfig::BuffetConfig(const BuffetConfigPaths& paths) : paths_(paths) {}
-
-void BuffetConfig::AddOnChangedCallback(const OnChangedCallback& callback) {
- on_changed_.push_back(callback);
-}
+BuffetConfig::BuffetConfig(const Options& options) : options_(options) {}
bool BuffetConfig::LoadDefaults(weave::Settings* settings) {
- if (!base::PathExists(paths_.defaults))
+ // Keep this hard coded default for sometime. This previously was set by
+ // libweave. It should be set by overlays buffet.conf.
+ settings->client_id = "58855907228.apps.googleusercontent.com";
+ settings->client_secret = "eHSAREAHrIqPsHBxCE9zPPBi";
+ settings->api_key = "AIzaSyDSq46gG-AxUnC3zoqD9COIPrjolFsMfMA";
+ settings->name = "Developer device";
+ settings->oem_name = "Chromium";
+ settings->model_name = "Brillo";
+ settings->model_id = "AAAAA";
+
+ if (!base::PathExists(options_.defaults))
return true; // Nothing to load.
chromeos::KeyValueStore store;
- if (!store.Load(paths_.defaults))
+ if (!store.Load(options_.defaults))
return false;
- return LoadDefaults(store, settings);
-}
-
-std::string BuffetConfig::LoadBaseCommandDefs() {
- // Load global standard GCD command dictionary.
- base::FilePath path{paths_.definitions.Append("gcd.json")};
- LOG(INFO) << "Loading standard commands from " << path.value();
- std::string result;
- CHECK(LoadFile(path, &result, nullptr));
+ bool result = LoadDefaults(store, settings);
+ settings->disable_security = options_.disable_security;
+ settings->test_privet_ssid = options_.test_privet_ssid;
return result;
}
@@ -112,32 +101,14 @@
CHECK(LoadFile(path, &result[category], nullptr));
}
};
- load_packages(paths_.definitions, FILE_PATH_LITERAL("*.json"));
- load_packages(paths_.test_definitions, FILE_PATH_LITERAL("*test.json"));
- return result;
-}
-
-std::string BuffetConfig::LoadBaseStateDefs() {
- // Load standard device state definition.
- base::FilePath path{paths_.definitions.Append("base_state.schema.json")};
- LOG(INFO) << "Loading standard state definition from " << path.value();
- std::string result;
- CHECK(LoadFile(path, &result, nullptr));
- return result;
-}
-
-std::string BuffetConfig::LoadBaseStateDefaults() {
- // Load standard device state defaults.
- base::FilePath path{paths_.definitions.Append("base_state.defaults.json")};
- LOG(INFO) << "Loading base state defaults from " << path.value();
- std::string result;
- CHECK(LoadFile(path, &result, nullptr));
+ load_packages(options_.definitions, FILE_PATH_LITERAL("*.json"));
+ load_packages(options_.test_definitions, FILE_PATH_LITERAL("*test.json"));
return result;
}
std::map<std::string, std::string> BuffetConfig::LoadStateDefs() {
// Load component-specific device state definitions.
- base::FilePath dir{paths_.definitions.Append("states")};
+ base::FilePath dir{options_.definitions.Append("states")};
base::FileEnumerator enumerator(dir, false, base::FileEnumerator::FILES,
FILE_PATH_LITERAL("*.schema.json"));
std::map<std::string, std::string> result;
@@ -152,7 +123,7 @@
std::vector<std::string> BuffetConfig::LoadStateDefaults() {
// Load component-specific device state defaults.
- base::FilePath dir{paths_.definitions.Append("states")};
+ base::FilePath dir{options_.definitions.Append("states")};
base::FileEnumerator enumerator(dir, false, base::FileEnumerator::FILES,
FILE_PATH_LITERAL("*.defaults.json"));
std::vector<std::string> result;
@@ -187,22 +158,8 @@
<< lsb_release_path.value();
}
- std::string polling_period_str;
- if (store.GetString(config_keys::kPollingPeriodMs, &polling_period_str) &&
- !StringToTimeDelta(polling_period_str, &settings->polling_period)) {
- return false;
- }
-
- if (store.GetString(config_keys::kBackupPollingPeriodMs,
- &polling_period_str) &&
- !StringToTimeDelta(polling_period_str,
- &settings->backup_polling_period)) {
- return false;
- }
-
store.GetBoolean(config_keys::kWifiAutoSetupEnabled,
&settings->wifi_auto_setup_enabled);
- store.GetBoolean(config_keys::kBleSetupEnabled, &settings->ble_setup_enabled);
store.GetString(config_keys::kEmbeddedCode, &settings->embedded_code);
std::string modes_str;
@@ -221,8 +178,12 @@
store.GetString(config_keys::kName, &settings->name);
store.GetString(config_keys::kDescription, &settings->description);
store.GetString(config_keys::kLocation, &settings->location);
- store.GetString(config_keys::kLocalAnonymousAccessRole,
- &settings->local_anonymous_access_role);
+
+ std::string role_str;
+ if (store.GetString(config_keys::kLocalAnonymousAccessRole, &role_str)) {
+ if (!StringToEnum(role_str, &settings->local_anonymous_access_role))
+ return false;
+ }
store.GetBoolean(config_keys::kLocalDiscoveryEnabled,
&settings->local_discovery_enabled);
store.GetBoolean(config_keys::kLocalPairingEnabled,
@@ -232,17 +193,12 @@
std::string BuffetConfig::LoadSettings() {
std::string json_string;
- base::ReadFileToString(paths_.settings, &json_string);
+ base::ReadFileToString(options_.settings, &json_string);
return json_string;
}
void BuffetConfig::SaveSettings(const std::string& settings) {
- base::ImportantFileWriter::WriteFileAtomically(paths_.settings, settings);
-}
-
-void BuffetConfig::OnSettingsChanged(const weave::Settings& settings) {
- for (const auto& cb : on_changed_)
- cb.Run(settings);
+ base::ImportantFileWriter::WriteFileAtomically(options_.settings, settings);
}
} // namespace buffet
diff --git a/buffet/buffet_config.h b/buffet/buffet_config.h
index b83374d..20dea47 100644
--- a/buffet/buffet_config.h
+++ b/buffet/buffet_config.h
@@ -19,43 +19,37 @@
class StorageInterface;
-struct BuffetConfigPaths {
- base::FilePath defaults;
- base::FilePath settings;
-
- base::FilePath definitions;
- base::FilePath test_definitions;
-};
-
// Handles reading buffet config and state files.
class BuffetConfig final : public weave::provider::ConfigStore {
public:
- using OnChangedCallback = base::Callback<void(const weave::Settings&)>;
+ struct Options {
+ base::FilePath defaults;
+ base::FilePath settings;
+
+ base::FilePath definitions;
+ base::FilePath test_definitions;
+
+ bool disable_security{false};
+ std::string test_privet_ssid;
+ };
+
~BuffetConfig() override = default;
- explicit BuffetConfig(const BuffetConfigPaths& paths);
+ explicit BuffetConfig(const Options& options);
// Config overrides.
bool LoadDefaults(weave::Settings* settings) override;
std::string LoadSettings() override;
void SaveSettings(const std::string& settings) override;
- void OnSettingsChanged(const weave::Settings& settings) override;
- std::string LoadBaseCommandDefs() override;
std::map<std::string, std::string> LoadCommandDefs() override;
- std::string LoadBaseStateDefs() override;
- std::string LoadBaseStateDefaults() override;
std::map<std::string, std::string> LoadStateDefs() override;
std::vector<std::string> LoadStateDefaults() override;
- void AddOnChangedCallback(const OnChangedCallback& callback);
-
bool LoadDefaults(const chromeos::KeyValueStore& store,
weave::Settings* settings);
private:
- BuffetConfigPaths paths_;
-
- std::vector<OnChangedCallback> on_changed_;
+ Options options_;
DISALLOW_COPY_AND_ASSIGN(BuffetConfig);
};
diff --git a/buffet/buffet_config_unittest.cc b/buffet/buffet_config_unittest.cc
index 5825030..58c2117 100644
--- a/buffet/buffet_config_unittest.cc
+++ b/buffet/buffet_config_unittest.cc
@@ -25,8 +25,7 @@
config_store.SetString("backup_polling_period_ms", "6589");
config_store.SetBoolean("wifi_auto_setup_enabled", false);
config_store.SetBoolean("ble_setup_enabled", true);
- config_store.SetString("pairing_modes",
- "pinCode,embeddedCode,ultrasound32,audible32");
+ config_store.SetString("pairing_modes", "pinCode,embeddedCode");
config_store.SetString("embedded_code", "567");
config_store.SetString("name", "conf_name");
config_store.SetString("description", "conf_description");
@@ -54,20 +53,15 @@
EXPECT_EQ("conf_oem_name", settings.oem_name);
EXPECT_EQ("conf_model_name", settings.model_name);
EXPECT_EQ("ABCDE", settings.model_id);
- EXPECT_EQ(base::TimeDelta::FromMilliseconds(12345), settings.polling_period);
- EXPECT_EQ(base::TimeDelta::FromMilliseconds(6589),
- settings.backup_polling_period);
EXPECT_FALSE(settings.wifi_auto_setup_enabled);
- EXPECT_TRUE(settings.ble_setup_enabled);
- std::set<weave::PairingType> pairing_types{
- weave::PairingType::kPinCode, weave::PairingType::kEmbeddedCode,
- weave::PairingType::kUltrasound32, weave::PairingType::kAudible32};
+ std::set<weave::PairingType> pairing_types{weave::PairingType::kPinCode,
+ weave::PairingType::kEmbeddedCode};
EXPECT_EQ(pairing_types, settings.pairing_modes);
EXPECT_EQ("567", settings.embedded_code);
EXPECT_EQ("conf_name", settings.name);
EXPECT_EQ("conf_description", settings.description);
EXPECT_EQ("conf_location", settings.location);
- EXPECT_EQ("user", settings.local_anonymous_access_role);
+ EXPECT_EQ(weave::AuthScope::kUser, settings.local_anonymous_access_role);
EXPECT_FALSE(settings.local_pairing_enabled);
EXPECT_FALSE(settings.local_discovery_enabled);
}
diff --git a/buffet/dbus_bindings/com.android.Weave.Manager.dbus-xml b/buffet/dbus_bindings/com.android.Weave.Manager.dbus-xml
index bde226e..c93d893 100644
--- a/buffet/dbus_bindings/com.android.Weave.Manager.dbus-xml
+++ b/buffet/dbus_bindings/com.android.Weave.Manager.dbus-xml
@@ -8,33 +8,11 @@
interfaces which affect the entire device such as device registration and
device state.
</tp:docstring>
- <method name="CheckDeviceRegistered">
- <arg name="device_id" type="s" direction="out"/>
- <annotation name="org.chromium.DBus.Method.Kind" value="async"/>
- </method>
- <method name="GetDeviceInfo">
- <arg name="device_info" type="s" direction="out"/>
- <annotation name="org.chromium.DBus.Method.Kind" value="async"/>
- </method>
<method name="RegisterDevice">
<arg name="ticket_id" type="s" direction="in"/>
<arg name="device_id" type="s" direction="out"/>
<annotation name="org.chromium.DBus.Method.Kind" value="async"/>
</method>
- <method name="UpdateDeviceInfo">
- <arg name="name" type="s" direction="in"/>
- <arg name="description" type="s" direction="in"/>
- <arg name="location" type="s" direction="in"/>
- <annotation name="org.chromium.DBus.Method.Kind" value="normal"/>
- </method>
- <method name="UpdateServiceConfig">
- <arg name="client_id" type="s" direction="in"/>
- <arg name="client_secret" type="s" direction="in"/>
- <arg name="api_key" type="s" direction="in"/>
- <arg name="oauth_url" type="s" direction="in"/>
- <arg name="service_url" type="s" direction="in"/>
- <annotation name="org.chromium.DBus.Method.Kind" value="normal"/>
- </method>
<method name="UpdateState">
<arg name="property_set" type="a{sv}" direction="in"/>
<annotation name="org.chromium.DBus.Method.Kind" value="async"/>
@@ -45,7 +23,6 @@
</method>
<method name="AddCommand">
<arg name="json_command" type="s" direction="in"/>
- <arg name="user_role" type="s" direction="in"/>
<arg name="id" type="s" direction="out"/>
<annotation name="org.chromium.DBus.Method.Kind" value="async"/>
</method>
@@ -59,39 +36,6 @@
<arg name="echoed_message" type="s" direction="out"/>
<annotation name="org.chromium.DBus.Method.Kind" value="simple"/>
</method>
- <method name="EnableWiFiBootstrapping">
- <tp:docstring>
- Enables WiFiBootstrapping if manual bootstrapping is selected via the
- configuration file. This will re-purpose a WiFi interface for use in
- bootstrapping. This breaks any existing WiFi connection on the
- interface.
- </tp:docstring>
- <arg name="listener_path" type="o" direction="in">
- <tp:docstring>
- Path to an object exposed by the caller. This object must support
- the com.android.Weave.WiFiBootstrapListener interface.
- </tp:docstring>
- </arg>
- <arg name="options" type="a{sv}" direction="in"/>
- <annotation name="org.chromium.DBus.Method.Kind" value="normal"/>
- </method>
- <method name="DisableWiFiBootstrapping">
- <tp:docstring>
- If a previous call to EnableWiFiBootstrapping was successful and
- has not been cancelled or completed since, disables that bootstrapping
- process.
- </tp:docstring>
- <annotation name="org.chromium.DBus.Method.Kind" value="normal"/>
- </method>
- <method name="EnableGCDBootstrapping">
- <arg name="listener_path" type="o" direction="in"/>
- <arg name="options" type="a{sv}" direction="in"/>
- <annotation name="org.chromium.DBus.Method.Kind" value="normal"/>
- </method>
- <method name="DisableGCDBootstrapping">
- <annotation name="org.chromium.DBus.Method.Kind" value="normal"/>
- </method>
-
<property name="Status" type="s" access="read">
<tp:docstring>
State of Buffet's cloud registration.
diff --git a/buffet/etc/weaved/base_state.defaults.json b/buffet/etc/weaved/base_state.defaults.json
deleted file mode 100644
index 166f2f1..0000000
--- a/buffet/etc/weaved/base_state.defaults.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "base": {
- "firmwareVersion": "",
- "localDiscoveryEnabled": false,
- "localAnonymousAccessMaxRole": "none",
- "localPairingEnabled": false
- }
-}
diff --git a/buffet/etc/weaved/base_state.schema.json b/buffet/etc/weaved/base_state.schema.json
deleted file mode 100644
index 19cc9b2..0000000
--- a/buffet/etc/weaved/base_state.schema.json
+++ /dev/null
@@ -1,13 +0,0 @@
-{
- "base": {
- "firmwareVersion": "string",
- "localDiscoveryEnabled": "boolean",
- "localAnonymousAccessMaxRole": [ "none", "viewer", "user" ],
- "localPairingEnabled": "boolean",
- "network": {
- "properties": {
- "name": "string"
- }
- }
- }
-}
diff --git a/buffet/etc/weaved/gcd.json b/buffet/etc/weaved/gcd.json
deleted file mode 100644
index 368704e..0000000
--- a/buffet/etc/weaved/gcd.json
+++ /dev/null
@@ -1,35 +0,0 @@
-{
- "base": {
- "updateBaseConfiguration": {
- "minimalRole": "manager",
- "parameters": {
- "localDiscoveryEnabled": "boolean",
- "localAnonymousAccessMaxRole": [ "none", "viewer", "user" ],
- "localPairingEnabled": "boolean"
- },
- "results": {}
- },
-
- "reboot": {
- "minimalRole": "user",
- "parameters": {},
- "results": {}
- },
-
- "identify": {
- "minimalRole": "user",
- "parameters": {},
- "results": {}
- },
-
- "updateDeviceInfo": {
- "minimalRole": "manager",
- "parameters": {
- "description": "string",
- "name": "string",
- "location": "string"
- },
- "results": {}
- }
- }
-}
diff --git a/buffet/main.cc b/buffet/main.cc
index 50b6944..bda526b 100644
--- a/buffet/main.cc
+++ b/buffet/main.cc
@@ -27,25 +27,25 @@
class Daemon final : public DBusServiceDaemon {
public:
- Daemon(const weave::Device::Options& options,
- const BuffetConfigPaths& paths,
+ Daemon(const Manager::Options& options,
+ const BuffetConfig::Options& config_options,
const std::set<std::string>& device_whitelist)
: DBusServiceDaemon(kServiceName, kRootServicePath),
options_{options},
- paths_(paths),
+ config_options_{config_options},
device_whitelist_{device_whitelist} {}
protected:
void RegisterDBusObjectsAsync(AsyncEventSequencer* sequencer) override {
- manager_.reset(new buffet::Manager(object_manager_->AsWeakPtr()));
- manager_->Start(options_, paths_, device_whitelist_, sequencer);
+ manager_.reset(new Manager(object_manager_->AsWeakPtr()));
+ manager_->Start(options_, config_options_, device_whitelist_, sequencer);
}
void OnShutdown(int* return_code) override { manager_->Stop(); }
private:
- weave::Device::Options options_;
- BuffetConfigPaths paths_;
+ Manager::Options options_;
+ BuffetConfig::Options config_options_;
std::set<std::string> device_whitelist_;
std::unique_ptr<buffet::Manager> manager_;
@@ -101,21 +101,21 @@
// Mark it to be ignored.
signal(SIGPIPE, SIG_IGN);
- buffet::BuffetConfigPaths paths;
- paths.defaults = base::FilePath{FLAGS_config_path};
- paths.settings = base::FilePath{FLAGS_state_path};
- paths.definitions = base::FilePath{"/etc/weaved"};
- paths.test_definitions = base::FilePath{FLAGS_test_definitions_path};
+ buffet::BuffetConfig::Options config_options;
+ config_options.defaults = base::FilePath{FLAGS_config_path};
+ config_options.settings = base::FilePath{FLAGS_state_path};
+ config_options.definitions = base::FilePath{"/etc/weaved"};
+ config_options.test_definitions = base::FilePath{FLAGS_test_definitions_path};
+ config_options.disable_security = FLAGS_disable_security;
+ config_options.test_privet_ssid = FLAGS_test_privet_ssid;
- weave::Device::Options options;
+ buffet::Manager::Options options;
options.xmpp_enabled = FLAGS_enable_xmpp;
options.disable_privet = FLAGS_disable_privet;
- options.disable_security = FLAGS_disable_security;
options.enable_ping = FLAGS_enable_ping;
- options.test_privet_ssid = FLAGS_test_privet_ssid;
buffet::Daemon daemon{
- options, paths,
+ options, config_options,
std::set<std::string>{device_whitelist.begin(), device_whitelist.end()}};
return daemon.Run();
}
diff --git a/buffet/manager.cc b/buffet/manager.cc
index a1032ff..f471ded 100644
--- a/buffet/manager.cc
+++ b/buffet/manager.cc
@@ -14,12 +14,15 @@
#include <base/json/json_writer.h>
#include <base/message_loop/message_loop.h>
#include <base/time/time.h>
+#include <chromeos/bind_lambda.h>
#include <chromeos/dbus/async_event_sequencer.h>
#include <chromeos/dbus/exported_object_manager.h>
#include <chromeos/errors/error.h>
#include <chromeos/http/http_transport.h>
+#include <chromeos/http/http_utils.h>
#include <chromeos/key_value_store.h>
#include <chromeos/message_loops/message_loop.h>
+#include <chromeos/mime_utils.h>
#include <dbus/bus.h>
#include <dbus/object_path.h>
#include <dbus/values_util.h>
@@ -47,7 +50,6 @@
const char kPairingCodeKey[] = "code";
const char kErrorDomain[] = "buffet";
-const char kNotImplemented[] = "notImplemented";
} // anonymous namespace
@@ -69,42 +71,55 @@
Manager::~Manager() {
}
-void Manager::Start(const weave::Device::Options& options,
- const BuffetConfigPaths& paths,
+void Manager::Start(const Options& options,
+ const BuffetConfig::Options& paths,
const std::set<std::string>& device_whitelist,
AsyncEventSequencer* sequencer) {
task_runner_.reset(new TaskRunner{});
http_client_.reset(new HttpTransportClient);
- shill_client_.reset(new ShillClient{dbus_object_.GetBus(), device_whitelist});
+ shill_client_.reset(new ShillClient{dbus_object_.GetBus(), device_whitelist,
+ !options.xmpp_enabled});
+ weave::provider::HttpServer* http_server{nullptr};
#ifdef BUFFET_USE_WIFI_BOOTSTRAPPING
if (!options.disable_privet) {
mdns_client_ = MdnsClient::CreateInstance(dbus_object_.GetBus());
web_serv_client_.reset(new WebServClient{dbus_object_.GetBus(), sequencer});
bluetooth_client_ = BluetoothClient::CreateInstance();
+ http_server = web_serv_client_.get();
+
+ if (options.enable_ping) {
+ http_server->AddRequestHandler(
+ "/privet/ping",
+ base::Bind(
+ [](const weave::provider::HttpServer::Request& request,
+ const weave::provider::HttpServer::OnReplyCallback& callback) {
+ callback.Run(chromeos::http::status_code::Ok, "Hello, world!",
+ chromeos::mime::text::kPlain);
+ }));
+ }
}
#endif // BUFFET_USE_WIFI_BOOTSTRAPPING
- device_ = weave::Device::Create();
config_.reset(new BuffetConfig{paths});
- config_->AddOnChangedCallback(
- base::Bind(&Manager::OnConfigChanged, weak_ptr_factory_.GetWeakPtr()));
+ device_ = weave::Device::Create(config_.get(), task_runner_.get(),
+ http_client_.get(), shill_client_.get(),
+ mdns_client_.get(), web_serv_client_.get(),
+ shill_client_.get(), bluetooth_client_.get());
- device_->Start(options, config_.get(), task_runner_.get(), http_client_.get(),
- shill_client_.get(), mdns_client_.get(),
- web_serv_client_.get(), shill_client_.get(),
- bluetooth_client_.get());
+ device_->AddSettingsChangedCallback(
+ base::Bind(&Manager::OnConfigChanged, weak_ptr_factory_.GetWeakPtr()));
command_dispatcher_.reset(new DBusCommandDispacher{
dbus_object_.GetObjectManager(), device_->GetCommands()});
- device_->GetState()->AddOnChangedCallback(
+ device_->AddStateChangedCallback(
base::Bind(&Manager::OnStateChanged, weak_ptr_factory_.GetWeakPtr()));
- device_->GetCloud()->AddOnRegistrationChangedCallback(base::Bind(
- &Manager::OnRegistrationChanged, weak_ptr_factory_.GetWeakPtr()));
+ device_->AddGcdStateChangedCallback(
+ base::Bind(&Manager::OnGcdStateChanged, weak_ptr_factory_.GetWeakPtr()));
- if (device_->GetPrivet()) {
- device_->GetPrivet()->AddOnPairingChangedCallbacks(
+ if (!options.disable_privet) {
+ device_->AddPairingChangedCallbacks(
base::Bind(&Manager::OnPairingStart, weak_ptr_factory_.GetWeakPtr()),
base::Bind(&Manager::OnPairingEnd, weak_ptr_factory_.GetWeakPtr()));
}
@@ -118,50 +133,12 @@
device_.reset();
}
-// TODO(vitalybuka): Remove, it's just duplicate of property.
-void Manager::CheckDeviceRegistered(
- DBusMethodResponsePtr<std::string> response) {
- LOG(INFO) << "Received call to Manager.CheckDeviceRegistered()";
- response->Return(dbus_adaptor_.GetDeviceId());
-}
-
-// TODO(vitalybuka): Remove or rename to leave for testing.
-void Manager::GetDeviceInfo(DBusMethodResponsePtr<std::string> response) {
- LOG(INFO) << "Received call to Manager.GetDeviceInfo()";
- std::shared_ptr<DBusMethodResponse<std::string>> shared_response =
- std::move(response);
-
- device_->GetCloud()->GetDeviceInfo(
- base::Bind(&Manager::OnGetDeviceInfoSuccess,
- weak_ptr_factory_.GetWeakPtr(), shared_response),
- base::Bind(&Manager::OnGetDeviceInfoError, weak_ptr_factory_.GetWeakPtr(),
- shared_response));
-}
-
-void Manager::OnGetDeviceInfoSuccess(
- const std::shared_ptr<DBusMethodResponse<std::string>>& response,
- const base::DictionaryValue& device_info) {
- std::string device_info_str;
- base::JSONWriter::WriteWithOptions(
- device_info, base::JSONWriter::OPTIONS_PRETTY_PRINT, &device_info_str);
- response->Return(device_info_str);
-}
-
-void Manager::OnGetDeviceInfoError(
- const std::shared_ptr<DBusMethodResponse<std::string>>& response,
- const weave::Error* error) {
- chromeos::ErrorPtr chromeos_error;
- ConvertError(*error, &chromeos_error);
- response->ReplyWithError(chromeos_error.get());
-}
-
void Manager::RegisterDevice(DBusMethodResponsePtr<std::string> response,
const std::string& ticket_id) {
LOG(INFO) << "Received call to Manager.RegisterDevice()";
weave::ErrorPtr error;
- std::string device_id =
- device_->GetCloud()->RegisterDevice(ticket_id, &error);
+ std::string device_id = device_->Register(ticket_id, &error);
if (!device_id.empty()) {
response->Return(device_id);
return;
@@ -180,7 +157,7 @@
return response->ReplyWithError(chromeos_error.get());
weave::ErrorPtr error;
- if (!device_->GetState()->SetProperties(*properties, &error)) {
+ if (!device_->SetStateProperties(*properties, &error)) {
ConvertError(*error, &chromeos_error);
return response->ReplyWithError(chromeos_error.get());
}
@@ -188,7 +165,7 @@
}
bool Manager::GetState(chromeos::ErrorPtr* error, std::string* state) {
- auto json = device_->GetState()->GetStateValuesAsJson();
+ auto json = device_->GetState();
CHECK(json);
base::JSONWriter::WriteWithOptions(
*json, base::JSONWriter::OPTIONS_PRETTY_PRINT, state);
@@ -196,8 +173,7 @@
}
void Manager::AddCommand(DBusMethodResponsePtr<std::string> response,
- const std::string& json_command,
- const std::string& in_user_role) {
+ const std::string& json_command) {
std::string error_message;
std::unique_ptr<base::Value> value(
base::JSONReader::ReadAndReturnError(json_command, base::JSON_PARSE_RFC,
@@ -210,18 +186,10 @@
error_message);
}
- chromeos::ErrorPtr chromeos_error;
- weave::UserRole role;
- if (!StringToEnum(in_user_role, &role)) {
- chromeos::Error::AddToPrintf(&chromeos_error, FROM_HERE, kErrorDomain,
- "invalid_user_role", "Invalid role: '%s'",
- in_user_role.c_str());
- return response->ReplyWithError(chromeos_error.get());
- }
-
std::string id;
weave::ErrorPtr error;
- if (!device_->GetCommands()->AddCommand(*command, role, &id, &error)) {
+ if (!device_->GetCommands()->AddCommand(*command, &id, &error)) {
+ chromeos::ErrorPtr chromeos_error;
ConvertError(*error, &chromeos_error);
return response->ReplyWithError(chromeos_error.get());
}
@@ -248,66 +216,8 @@
return message;
}
-bool Manager::EnableWiFiBootstrapping(
- chromeos::ErrorPtr* error,
- const dbus::ObjectPath& in_listener_path,
- const chromeos::VariantDictionary& in_options) {
- chromeos::Error::AddTo(error, FROM_HERE, kErrorDomain, kNotImplemented,
- "Manual WiFi bootstrapping is not implemented");
- return false;
-}
-
-bool Manager::DisableWiFiBootstrapping(chromeos::ErrorPtr* error) {
- chromeos::Error::AddTo(error, FROM_HERE, kErrorDomain, kNotImplemented,
- "Manual WiFi bootstrapping is not implemented");
- return false;
-}
-
-bool Manager::EnableGCDBootstrapping(
- chromeos::ErrorPtr* error,
- const dbus::ObjectPath& in_listener_path,
- const chromeos::VariantDictionary& in_options) {
- chromeos::Error::AddTo(error, FROM_HERE, kErrorDomain, kNotImplemented,
- "Manual GCD bootstrapping is not implemented");
- return false;
-}
-
-bool Manager::DisableGCDBootstrapping(chromeos::ErrorPtr* error) {
- chromeos::Error::AddTo(error, FROM_HERE, kErrorDomain, kNotImplemented,
- "Manual GCD bootstrapping is not implemented");
- return false;
-}
-
-bool Manager::UpdateDeviceInfo(chromeos::ErrorPtr* chromeos_error,
- const std::string& name,
- const std::string& description,
- const std::string& location) {
- weave::ErrorPtr error;
- if (!device_->GetCloud()->UpdateDeviceInfo(name, description, location,
- &error)) {
- ConvertError(*error, chromeos_error);
- return false;
- }
- return true;
-}
-
-bool Manager::UpdateServiceConfig(chromeos::ErrorPtr* chromeos_error,
- const std::string& client_id,
- const std::string& client_secret,
- const std::string& api_key,
- const std::string& oauth_url,
- const std::string& service_url) {
- weave::ErrorPtr error;
- if (!device_->GetCloud()->UpdateServiceConfig(
- client_id, client_secret, api_key, oauth_url, service_url, &error)) {
- ConvertError(*error, chromeos_error);
- return false;
- }
- return true;
-}
-
void Manager::OnStateChanged() {
- auto state = device_->GetState()->GetStateValuesAsJson();
+ auto state = device_->GetState();
CHECK(state);
std::string json;
base::JSONWriter::WriteWithOptions(
@@ -315,8 +225,8 @@
dbus_adaptor_.SetState(json);
}
-void Manager::OnRegistrationChanged(weave::RegistrationStatus status) {
- dbus_adaptor_.SetStatus(weave::EnumToString(status));
+void Manager::OnGcdStateChanged(weave::GcdState state) {
+ dbus_adaptor_.SetStatus(weave::EnumToString(state));
}
void Manager::OnConfigChanged(const weave::Settings& settings) {
diff --git a/buffet/manager.h b/buffet/manager.h
index 5dd42b0..d7e8377 100644
--- a/buffet/manager.h
+++ b/buffet/manager.h
@@ -20,6 +20,7 @@
#include <chromeos/errors/error.h>
#include <weave/device.h>
+#include "buffet/buffet_config.h"
#include "buffet/dbus_bindings/com.android.Weave.Manager.h"
namespace chromeos {
@@ -31,13 +32,11 @@
namespace buffet {
class BluetoothClient;
-class BuffetConfig;
class DBusCommandDispacher;
class HttpTransportClient;
class MdnsClient;
class ShillClient;
class WebServClient;
-struct BuffetConfigPaths;
template<typename... Types>
using DBusMethodResponsePtr =
@@ -52,13 +51,19 @@
// device state.
class Manager final : public com::android::Weave::ManagerInterface {
public:
+ struct Options {
+ bool xmpp_enabled = true;
+ bool disable_privet = false;
+ bool enable_ping = false;
+ };
+
explicit Manager(
const base::WeakPtr<chromeos::dbus_utils::ExportedObjectManager>&
object_manager);
~Manager();
- void Start(const weave::Device::Options& options,
- const BuffetConfigPaths& paths,
+ void Start(const Options& options,
+ const BuffetConfig::Options& config_options,
const std::set<std::string>& device_whitelist,
chromeos::dbus_utils::AsyncEventSequencer* sequencer);
@@ -66,53 +71,22 @@
private:
// DBus methods:
- void CheckDeviceRegistered(
- DBusMethodResponsePtr<std::string> response) override;
- void GetDeviceInfo(DBusMethodResponsePtr<std::string> response) override;
void RegisterDevice(DBusMethodResponsePtr<std::string> response,
const std::string& ticket_id) override;
- bool UpdateDeviceInfo(chromeos::ErrorPtr* error,
- const std::string& name,
- const std::string& description,
- const std::string& location) override;
- bool UpdateServiceConfig(chromeos::ErrorPtr* error,
- const std::string& client_id,
- const std::string& client_secret,
- const std::string& api_key,
- const std::string& oauth_url,
- const std::string& service_url) override;
void UpdateState(DBusMethodResponsePtr<> response,
const chromeos::VariantDictionary& property_set) override;
bool GetState(chromeos::ErrorPtr* error, std::string* state) override;
void AddCommand(DBusMethodResponsePtr<std::string> response,
- const std::string& json_command,
- const std::string& in_user_role) override;
+ const std::string& json_command) override;
void GetCommand(DBusMethodResponsePtr<std::string> response,
const std::string& id) override;
std::string TestMethod(const std::string& message) override;
- bool EnableWiFiBootstrapping(
- chromeos::ErrorPtr* error,
- const dbus::ObjectPath& in_listener_path,
- const chromeos::VariantDictionary& in_options) override;
- bool DisableWiFiBootstrapping(chromeos::ErrorPtr* error) override;
- bool EnableGCDBootstrapping(
- chromeos::ErrorPtr* error,
- const dbus::ObjectPath& in_listener_path,
- const chromeos::VariantDictionary& in_options) override;
- bool DisableGCDBootstrapping(chromeos::ErrorPtr* error) override;
- void OnGetDeviceInfoSuccess(
- const std::shared_ptr<DBusMethodResponse<std::string>>& response,
- const base::DictionaryValue& device_info);
- void OnGetDeviceInfoError(
- const std::shared_ptr<DBusMethodResponse<std::string>>& response,
- const weave::Error* error);
-
- void StartPrivet(const weave::Device::Options& options,
+ void StartPrivet(const Options& options,
chromeos::dbus_utils::AsyncEventSequencer* sequencer);
void OnStateChanged();
- void OnRegistrationChanged(weave::RegistrationStatus status);
+ void OnGcdStateChanged(weave::GcdState state);
void OnConfigChanged(const weave::Settings& settings);
void OnPairingStart(const std::string& session_id,
weave::PairingType pairing_type,
diff --git a/buffet/mdns_client.h b/buffet/mdns_client.h
index ff7a97a..f9bc229 100644
--- a/buffet/mdns_client.h
+++ b/buffet/mdns_client.h
@@ -31,22 +31,18 @@
// Stub MDNS implementation that does nothing on platform without MDNS support.
class MdnsClient : public weave::provider::DnsServiceDiscovery {
public:
- MdnsClient() : device_id_{base::GenerateGUID()} {}
+ MdnsClient() {}
~MdnsClient() override = default;
// weave::provider::DnsServiceDiscovery implementation.
void PublishService(const std::string& service_type, uint16_t port,
const std::vector<std::string>& txt) override {}
void StopPublishing(const std::string& service_type) override {}
- std::string GetId() const override { return device_id_; }
static std::unique_ptr<MdnsClient> CreateInstance(
const scoped_refptr<dbus::Bus>& bus);
protected:
- // Cached value of the device ID that we got from peerd.
- std::string device_id_;
-
DISALLOW_COPY_AND_ASSIGN(MdnsClient);
};
diff --git a/buffet/peerd_client.cc b/buffet/peerd_client.cc
index 73b71e4..9c56b53 100644
--- a/buffet/peerd_client.cc
+++ b/buffet/peerd_client.cc
@@ -22,8 +22,6 @@
// updates relevant for a short amount of time.
const int kCommitTimeoutSeconds = 1;
-const char kSelfPath[] = "/org/chromium/peerd/Self";
-
void OnError(const std::string& operation, chromeos::Error* error) {
LOG(ERROR) << operation << " failed:" << error->GetMessage();
}
@@ -39,18 +37,12 @@
base::Bind(&PeerdClient::OnPeerdOnline, weak_ptr_factory_.GetWeakPtr()));
peerd_object_manager_proxy_.SetManagerRemovedCallback(
base::Bind(&PeerdClient::OnPeerdOffline, weak_ptr_factory_.GetWeakPtr()));
- peerd_object_manager_proxy_.SetPeerAddedCallback(
- base::Bind(&PeerdClient::OnNewPeer, weak_ptr_factory_.GetWeakPtr()));
}
PeerdClient::~PeerdClient() {
RemoveService();
}
-std::string PeerdClient::GetId() const {
- return device_id_;
-}
-
void PeerdClient::PublishService(const std::string& service_type,
uint16_t port,
const std::vector<std::string>& txt) {
@@ -77,26 +69,6 @@
base::TimeDelta::FromSeconds(kCommitTimeoutSeconds));
}
-void PeerdClient::OnNewPeer(PeerProxy* peer) {
- if (!peer || peer->GetObjectPath().value() != kSelfPath)
- return;
- peer->SetPropertyChangedCallback(base::Bind(
- &PeerdClient::OnPeerPropertyChanged, weak_ptr_factory_.GetWeakPtr()));
- OnPeerPropertyChanged(peer, PeerProxy::UUIDName());
-}
-
-void PeerdClient::OnPeerPropertyChanged(PeerProxy* peer,
- const std::string& property_name) {
- if (property_name != PeerProxy::UUIDName() ||
- peer->GetObjectPath().value() != kSelfPath)
- return;
- const std::string new_id{peer->uuid()};
- if (new_id != device_id_) {
- device_id_ = new_id;
- Update();
- }
-}
-
void PeerdClient::OnPeerdOnline(
org::chromium::peerd::ManagerProxy* manager_proxy) {
peerd_manager_proxy_ = manager_proxy;
diff --git a/buffet/peerd_client.h b/buffet/peerd_client.h
index 997dcfd..b2cda27 100644
--- a/buffet/peerd_client.h
+++ b/buffet/peerd_client.h
@@ -32,14 +32,10 @@
uint16_t port,
const std::vector<std::string>& txt) override;
void StopPublishing(const std::string& service_type) override;
- std::string GetId() const override;
private:
void OnPeerdOnline(org::chromium::peerd::ManagerProxy* manager_proxy);
void OnPeerdOffline(const dbus::ObjectPath& object_path);
- void OnNewPeer(org::chromium::peerd::PeerProxy* peer_proxy);
- void OnPeerPropertyChanged(org::chromium::peerd::PeerProxy* peer_proxy,
- const std::string& property_name);
// Updates published information. Removes service if HTTP is not alive.
void Update();
@@ -53,9 +49,6 @@
// |peerd_manager_proxy_| is owned by |peerd_object_manager_proxy_|.
org::chromium::peerd::ManagerProxy* peerd_manager_proxy_{nullptr};
- // Cached value of the device ID that we got from peerd.
- std::string device_id_;
-
bool published_{false};
uint16_t port_{0};
std::vector<std::string> txt_;
diff --git a/buffet/shill_client.cc b/buffet/shill_client.cc
index 64f7de3..ed80af2 100644
--- a/buffet/shill_client.cc
+++ b/buffet/shill_client.cc
@@ -88,10 +88,12 @@
} // namespace
ShillClient::ShillClient(const scoped_refptr<dbus::Bus>& bus,
- const set<string>& device_whitelist)
+ const set<string>& device_whitelist,
+ bool disable_xmpp)
: bus_{bus},
manager_proxy_{bus_},
device_whitelist_{device_whitelist},
+ disable_xmpp_{disable_xmpp},
ap_manager_client_{new ApManagerClient(bus)} {
manager_proxy_.RegisterPropertyChangedSignalHandler(
base::Bind(&ShillClient::OnManagerPropertyChange,
@@ -561,6 +563,8 @@
const base::Callback<void(std::unique_ptr<weave::Stream>)>&
success_callback,
const base::Callback<void(const weave::Error*)>& error_callback) {
+ if (disable_xmpp_)
+ return;
std::unique_ptr<weave::Stream> raw_stream{
SocketStream::ConnectBlocking(host, port)};
if (!raw_stream) {
diff --git a/buffet/shill_client.h b/buffet/shill_client.h
index 2e4dc2c..b4ce53e 100644
--- a/buffet/shill_client.h
+++ b/buffet/shill_client.h
@@ -28,7 +28,8 @@
public weave::provider::Wifi {
public:
ShillClient(const scoped_refptr<dbus::Bus>& bus,
- const std::set<std::string>& device_whitelist);
+ const std::set<std::string>& device_whitelist,
+ bool disable_xmpp);
~ShillClient();
void Init();
@@ -104,6 +105,7 @@
// There is logic that assumes we will never change this device list
// in OnManagerPropertyChange. Do not be tempted to remove this const.
const std::set<std::string> device_whitelist_;
+ bool disable_xmpp_{false};
std::vector<ConnectionChangedCallback> connectivity_listeners_;
// State for tracking where we are in our attempts to connect to a service.
diff --git a/buffet/socket_stream.cc b/buffet/socket_stream.cc
index bec0cd1..4dfdeb6 100644
--- a/buffet/socket_stream.cc
+++ b/buffet/socket_stream.cc
@@ -30,7 +30,7 @@
switch (sa->sa_family) {
case AF_INET:
if (inet_ntop(AF_INET,
- &reinterpret_cast<const sockaddr_in*>(sa)->sin_addr, str,
+ &(reinterpret_cast<const sockaddr_in*>(sa)->sin_addr), str,
sizeof(str))) {
addr = str;
}
@@ -38,8 +38,8 @@
case AF_INET6:
if (inet_ntop(AF_INET6,
- &reinterpret_cast<const sockaddr_in6*>(sa)->sin6_addr, str,
- sizeof(str))) {
+ &(reinterpret_cast<const sockaddr_in6*>(sa)->sin6_addr),
+ str, sizeof(str))) {
addr = str;
}
break;