buffet: Start privet logic
Initialize privetd::Manager from buffet::Manager.
Added flag disable_privet to disable local APIs.
CloudDelegate still uses D-Bus to communicate with buffet.
BUG=brillo:1161
TEST=`FEATURES=test emerge-gizmo buffet`
Change-Id: Ic5d687f0e45d9be3c487a2f2b2de354f4b437441
Reviewed-on: https://chromium-review.googlesource.com/276602
Reviewed-by: Alex Vakulenko <avakulenko@chromium.org>
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/manager.cc b/buffet/manager.cc
index 5b6a6e5..d9ddfaf 100644
--- a/buffet/manager.cc
+++ b/buffet/manager.cc
@@ -59,27 +59,23 @@
Manager::~Manager() {
}
-void Manager::Start(const base::FilePath& config_path,
- const base::FilePath& state_path,
- const base::FilePath& test_definitions_path,
- bool xmpp_enabled,
- const AsyncEventSequencer::CompletionAction& cb) {
+void Manager::Start(const Options& options, AsyncEventSequencer* sequencer) {
command_manager_ =
std::make_shared<CommandManager>(dbus_object_.GetObjectManager());
command_manager_->AddOnCommandDefChanged(base::Bind(
&Manager::OnCommandDefsChanged, weak_ptr_factory_.GetWeakPtr()));
command_manager_->Startup(base::FilePath{"/etc/buffet"},
- test_definitions_path);
+ options.test_definitions_path);
state_change_queue_.reset(new StateChangeQueue(kMaxStateChangeQueueSize));
state_manager_ = std::make_shared<StateManager>(state_change_queue_.get());
state_manager_->AddOnChangedCallback(
base::Bind(&Manager::OnStateChanged, weak_ptr_factory_.GetWeakPtr()));
state_manager_->Startup();
- std::unique_ptr<BuffetConfig> config{new BuffetConfig{state_path}};
+ std::unique_ptr<BuffetConfig> config{new BuffetConfig{options.state_path}};
config->AddOnChangedCallback(
base::Bind(&Manager::OnConfigChanged, weak_ptr_factory_.GetWeakPtr()));
- config->Load(config_path);
+ config->Load(options.config_path);
auto transport = chromeos::http::Transport::CreateDefault();
transport->SetDefaultTimeout(base::TimeDelta::FromSeconds(
@@ -89,7 +85,7 @@
// device info state data unencrypted.
device_info_.reset(new DeviceRegistrationInfo(
command_manager_, state_manager_, std::move(config), transport,
- xmpp_enabled));
+ options.xmpp_enabled));
device_info_->AddOnRegistrationChangedCallback(base::Bind(
&Manager::OnRegistrationChanged, weak_ptr_factory_.GetWeakPtr()));
@@ -97,8 +93,36 @@
device_info_->AsWeakPtr(), state_manager_, command_manager_});
device_info_->Start();
+
dbus_adaptor_.RegisterWithDBusObject(&dbus_object_);
- dbus_object_.RegisterAsync(cb);
+ dbus_object_.RegisterAsync(
+ sequencer->GetHandler("Manager.RegisterAsync() failed.", true));
+
+ if (!options.privet.disable_privet)
+ StartPrivet(options.privet, sequencer);
+}
+
+void Manager::StartPrivet(const privetd::Manager::Options& options,
+ AsyncEventSequencer* sequencer) {
+ privet_.reset(new privetd::Manager{});
+ privet_->Start(options, dbus_object_.GetBus(), sequencer);
+
+ if (privet_->GetWifiBootstrapManager()) {
+ privet_->GetWifiBootstrapManager()->RegisterStateListener(base::Bind(
+ &Manager::UpdateWiFiBootstrapState, weak_ptr_factory_.GetWeakPtr()));
+ } else {
+ UpdateWiFiBootstrapState(privetd::WifiBootstrapManager::kDisabled);
+ }
+
+ privet_->GetSecurityManager()->RegisterPairingListeners(
+ base::Bind(&Manager::OnPairingStart, weak_ptr_factory_.GetWeakPtr()),
+ base::Bind(&Manager::OnPairingEnd, weak_ptr_factory_.GetWeakPtr()));
+ // TODO(wiley) Watch for appropriate state variables from |cloud_delegate|.
+}
+
+void Manager::Stop() {
+ if (privet_)
+ privet_->OnShutdown();
}
void Manager::CheckDeviceRegistered(DBusMethodResponse<std::string> response) {