buffet: Add base.updateBaseConfiguration implementation
Required base command handled by buffet.
BUG=brillo:810
TEST=`FEATURES=test emerge-gizmo buffet`
Change-Id: I97ecd9f5d792cc636e76bbff92899a7ddfa4a605
Reviewed-on: https://chromium-review.googlesource.com/273618
Reviewed-by: Vitaly Buka <vitalybuka@chromium.org>
Commit-Queue: Vitaly Buka <vitalybuka@chromium.org>
Tested-by: Vitaly Buka <vitalybuka@chromium.org>
diff --git a/buffet/base_api_handler.cc b/buffet/base_api_handler.cc
index 69ed67c..16e9ec3 100644
--- a/buffet/base_api_handler.cc
+++ b/buffet/base_api_handler.cc
@@ -7,6 +7,7 @@
#include "buffet/commands/command_instance.h"
#include "buffet/commands/command_manager.h"
#include "buffet/device_registration_info.h"
+#include "buffet/states/state_manager.h"
namespace buffet {
@@ -30,6 +31,17 @@
return true;
}
+ bool GetParameter(const std::string& name, bool* value) const {
+ auto it = parameters_->find(name);
+ if (it == parameters_->end())
+ return false;
+ const BooleanValue* bool_value = it->second->GetBoolean();
+ if (!bool_value)
+ return false;
+ *value = bool_value->GetValue();
+ return true;
+ }
+
private:
const native_types::Object* parameters_;
};
@@ -38,8 +50,9 @@
BaseApiHandler::BaseApiHandler(
const base::WeakPtr<DeviceRegistrationInfo>& device_info,
+ const std::shared_ptr<StateManager>& state_manager,
const std::shared_ptr<CommandManager>& command_manager)
- : device_info_{device_info} {
+ : device_info_{device_info}, state_manager_{state_manager} {
command_manager->AddOnCommandAddedCallback(base::Bind(
&BaseApiHandler::OnCommandAdded, weak_ptr_factory_.GetWeakPtr()));
}
@@ -48,10 +61,44 @@
if (command->GetStatus() != CommandInstance::kStatusQueued)
return;
+ if (command->GetName() == "base.updateBaseConfiguration")
+ return UpdateBaseConfiguration(command);
+
if (command->GetName() == "base.updateDeviceInfo")
return UpdateDeviceInfo(command);
}
+void BaseApiHandler::UpdateBaseConfiguration(CommandInstance* command) {
+ command->SetProgress({});
+
+ const BuffetConfig& config{device_info_->GetConfig()};
+ std::string anonymous_access_role{config.local_anonymous_access_role()};
+ bool discovery_enabled{config.local_discovery_enabled()};
+ bool pairing_enabled{config.local_pairing_enabled()};
+
+ ParametersReader parameters{&command->GetParameters()};
+ parameters.GetParameter("localAnonymousAccessMaxRole",
+ &anonymous_access_role);
+ parameters.GetParameter("localDiscoveryEnabled", &discovery_enabled);
+ parameters.GetParameter("localPairingEnabled", &pairing_enabled);
+
+ chromeos::VariantDictionary state{
+ {"base.localAnonymousAccessMaxRole", anonymous_access_role},
+ {"base.localDiscoveryEnabled", discovery_enabled},
+ {"base.localPairingEnabled", pairing_enabled},
+ };
+ if (!state_manager_->SetProperties(state, nullptr)) {
+ return command->Abort();
+ }
+
+ if (!device_info_->UpdateBaseConfig(anonymous_access_role, discovery_enabled,
+ pairing_enabled, nullptr)) {
+ return command->Abort();
+ }
+
+ command->Done();
+}
+
void BaseApiHandler::UpdateDeviceInfo(CommandInstance* command) {
command->SetProgress({});