buffet: Move ApManagerClient out of libweave
libweave will rely on implementation provided by interface
weave::Network.
BUG=brillo:1247
TEST='FEATURES=test emerge-gizmo buffet'
Change-Id: I36b8d8af21d461d53815c214f18586cd3afcce5c
Reviewed-on: https://chromium-review.googlesource.com/290101
Reviewed-by: Vitaly Buka <vitalybuka@chromium.org>
Commit-Queue: Vitaly Buka <vitalybuka@chromium.org>
Trybot-Ready: Vitaly Buka <vitalybuka@chromium.org>
Tested-by: Vitaly Buka <vitalybuka@chromium.org>
diff --git a/libweave/src/privet/ap_manager_client.cc b/buffet/ap_manager_client.cc
similarity index 95%
rename from libweave/src/privet/ap_manager_client.cc
rename to buffet/ap_manager_client.cc
index 2395da8..6449c0f 100644
--- a/libweave/src/privet/ap_manager_client.cc
+++ b/buffet/ap_manager_client.cc
@@ -2,18 +2,16 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "libweave/src/privet/ap_manager_client.h"
+#include "buffet/ap_manager_client.h"
-namespace weave {
-namespace privet {
+namespace buffet {
using org::chromium::apmanager::ConfigProxy;
using org::chromium::apmanager::ManagerProxy;
using org::chromium::apmanager::ServiceProxy;
ApManagerClient::ApManagerClient(const scoped_refptr<dbus::Bus>& bus)
- : bus_(bus) {
-}
+ : bus_(bus) {}
ApManagerClient::~ApManagerClient() {
Stop();
@@ -113,5 +111,4 @@
Stop();
}
-} // namespace privet
-} // namespace weave
+} // namespace buffet
diff --git a/libweave/src/privet/ap_manager_client.h b/buffet/ap_manager_client.h
similarity index 85%
rename from libweave/src/privet/ap_manager_client.h
rename to buffet/ap_manager_client.h
index 073ea08..8397587 100644
--- a/libweave/src/privet/ap_manager_client.h
+++ b/buffet/ap_manager_client.h
@@ -2,8 +2,8 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#ifndef LIBWEAVE_SRC_PRIVET_AP_MANAGER_CLIENT_H_
-#define LIBWEAVE_SRC_PRIVET_AP_MANAGER_CLIENT_H_
+#ifndef BUFFET_AP_MANAGER_CLIENT_H_
+#define BUFFET_AP_MANAGER_CLIENT_H_
#include <memory>
#include <string>
@@ -13,8 +13,7 @@
#include "apmanager/dbus-proxies.h"
-namespace weave {
-namespace privet {
+namespace buffet {
// Manages soft AP for wifi bootstrapping.
// Once created can handle multiple Start/Stop requests.
@@ -53,7 +52,6 @@
base::WeakPtrFactory<ApManagerClient> weak_ptr_factory_{this};
};
-} // namespace privet
-} // namespace weave
+} // namespace buffet
-#endif // LIBWEAVE_SRC_PRIVET_AP_MANAGER_CLIENT_H_
+#endif // BUFFET_AP_MANAGER_CLIENT_H_
diff --git a/buffet/buffet.gyp b/buffet/buffet.gyp
index fde6d30..1c619fa 100644
--- a/buffet/buffet.gyp
+++ b/buffet/buffet.gyp
@@ -25,6 +25,7 @@
'dbus_service_config': 'dbus_bindings/dbus-service-config.json',
},
'sources': [
+ 'ap_manager_client.cc',
'dbus_bindings/org.chromium.Buffet.Command.xml',
'dbus_bindings/org.chromium.Buffet.Manager.xml',
'dbus_command_dispatcher.cc',
@@ -57,7 +58,6 @@
'../libweave/src/notification/xmpp_channel.cc',
'../libweave/src/notification/xmpp_iq_stanza_handler.cc',
'../libweave/src/notification/xmpp_stream_parser.cc',
- '../libweave/src/privet/ap_manager_client.cc',
'../libweave/src/privet/cloud_delegate.cc',
'../libweave/src/privet/constants.cc',
'../libweave/src/privet/device_delegate.cc',
diff --git a/buffet/shill_client.cc b/buffet/shill_client.cc
index 1efc52d..9db5e85 100644
--- a/buffet/shill_client.cc
+++ b/buffet/shill_client.cc
@@ -13,6 +13,7 @@
#include <chromeos/errors/error.h>
#include <chromeos/errors/error_codes.h>
+#include "buffet/ap_manager_client.h"
#include "weave/enum_to_string.h"
using chromeos::Any;
@@ -85,7 +86,8 @@
const set<string>& device_whitelist)
: bus_{bus},
manager_proxy_{bus_, ObjectPath{"/"}},
- device_whitelist_{device_whitelist} {
+ device_whitelist_{device_whitelist},
+ ap_manager_client_{new ApManagerClient(bus)} {
manager_proxy_.RegisterPropertyChangedSignalHandler(
base::Bind(&ShillClient::OnManagerPropertyChange,
weak_factory_.GetWeakPtr()),
@@ -97,6 +99,8 @@
->SetNameOwnerChangedCallback(owner_changed_cb);
}
+ShillClient::~ShillClient() {}
+
void ShillClient::Init() {
VLOG(2) << "ShillClient::Init();";
CleanupConnectingService(false);
@@ -148,6 +152,14 @@
return connectivity_state_;
}
+void ShillClient::EnableAccessPoint(const std::string& ssid) {
+ ap_manager_client_->Start(ssid);
+}
+
+void ShillClient::DisableAccessPoint() {
+ ap_manager_client_->Stop();
+}
+
void ShillClient::AddOnConnectionChangedCallback(
const OnConnectionChangedCallback& listener) {
connectivity_listeners_.push_back(listener);
diff --git a/buffet/shill_client.h b/buffet/shill_client.h
index 06c1be5..2538674 100644
--- a/buffet/shill_client.h
+++ b/buffet/shill_client.h
@@ -22,11 +22,13 @@
namespace buffet {
+class ApManagerClient;
+
class ShillClient final : public weave::Network {
public:
ShillClient(const scoped_refptr<dbus::Bus>& bus,
const std::set<std::string>& device_whitelist);
- ~ShillClient() = default;
+ ~ShillClient();
void Init();
@@ -38,6 +40,8 @@
const base::Closure& on_success,
chromeos::ErrorPtr* error) override;
weave::NetworkState GetConnectionState() const override;
+ void EnableAccessPoint(const std::string& ssid) override;
+ void DisableAccessPoint() override;
private:
struct DeviceState {
@@ -105,6 +109,8 @@
std::map<dbus::ObjectPath, DeviceState> devices_;
weave::NetworkState connectivity_state_{weave::NetworkState::kOffline};
+ std::unique_ptr<ApManagerClient> ap_manager_client_;
+
base::WeakPtrFactory<ShillClient> weak_factory_{this};
DISALLOW_COPY_AND_ASSIGN(ShillClient);
diff --git a/libweave/include/weave/network.h b/libweave/include/weave/network.h
index cd27e2c..0e5cc26 100644
--- a/libweave/include/weave/network.h
+++ b/libweave/include/weave/network.h
@@ -39,6 +39,12 @@
virtual NetworkState GetConnectionState() const = 0;
+ // Starts WiFi access point for wifi setup.
+ virtual void EnableAccessPoint(const std::string& ssid) = 0;
+
+ // Stops WiFi access point.
+ virtual void DisableAccessPoint() = 0;
+
protected:
virtual ~Network() = default;
};
diff --git a/libweave/src/privet/privet_manager.cc b/libweave/src/privet/privet_manager.cc
index 4523337..32142f7 100644
--- a/libweave/src/privet/privet_manager.cc
+++ b/libweave/src/privet/privet_manager.cc
@@ -29,7 +29,6 @@
#include "buffet/dbus_constants.h"
#include "libweave/src/device_registration_info.h"
-#include "libweave/src/privet/ap_manager_client.h"
#include "libweave/src/privet/cloud_delegate.h"
#include "libweave/src/privet/constants.h"
#include "libweave/src/privet/device_delegate.h"
@@ -78,14 +77,12 @@
disable_security_));
network->AddOnConnectionChangedCallback(
base::Bind(&Manager::OnConnectivityChanged, base::Unretained(this)));
- ap_manager_client_.reset(new ApManagerClient(bus));
if (device->GetConfig().wifi_auto_setup_enabled()) {
VLOG(1) << "Enabling WiFi bootstrapping.";
wifi_bootstrap_manager_.reset(new WifiBootstrapManager(
device->GetConfig().last_configured_ssid(), options.test_privet_ssid,
- device->GetConfig().ble_setup_enabled(),
- network, ap_manager_client_.get(), cloud_.get()));
+ device->GetConfig().ble_setup_enabled(), network, cloud_.get()));
wifi_bootstrap_manager_->Init();
}
diff --git a/libweave/src/privet/privet_manager.h b/libweave/src/privet/privet_manager.h
index 06d3bae..bdcb298 100644
--- a/libweave/src/privet/privet_manager.h
+++ b/libweave/src/privet/privet_manager.h
@@ -41,7 +41,6 @@
namespace privet {
-class ApManagerClient;
class CloudDelegate;
class DaemonState;
class DeviceDelegate;
@@ -101,7 +100,6 @@
std::unique_ptr<CloudDelegate> cloud_;
std::unique_ptr<DeviceDelegate> device_;
std::unique_ptr<SecurityManager> security_;
- std::unique_ptr<ApManagerClient> ap_manager_client_;
std::unique_ptr<WifiBootstrapManager> wifi_bootstrap_manager_;
std::unique_ptr<Publisher> publisher_;
std::unique_ptr<PrivetHandler> privet_handler_;
diff --git a/libweave/src/privet/privet_types.cc b/libweave/src/privet/privet_types.cc
index cbe33da..e3f3307 100644
--- a/libweave/src/privet/privet_types.cc
+++ b/libweave/src/privet/privet_types.cc
@@ -7,8 +7,8 @@
#include <string>
#include "weave/enum_to_string.h"
-#include "weave/privet.h"
#include "weave/network.h"
+#include "weave/privet.h"
namespace weave {
diff --git a/libweave/src/privet/wifi_bootstrap_manager.cc b/libweave/src/privet/wifi_bootstrap_manager.cc
index 841e903..4407e6d 100644
--- a/libweave/src/privet/wifi_bootstrap_manager.cc
+++ b/libweave/src/privet/wifi_bootstrap_manager.cc
@@ -10,7 +10,6 @@
#include <chromeos/bind_lambda.h>
#include <chromeos/key_value_store.h>
-#include "libweave/src/privet/ap_manager_client.h"
#include "libweave/src/privet/constants.h"
#include "weave/enum_to_string.h"
#include "weave/network.h"
@@ -29,10 +28,8 @@
const std::string& test_privet_ssid,
bool ble_setup_enabled,
Network* network,
- ApManagerClient* ap_manager_client,
CloudDelegate* gcd)
: network_{network},
- ap_manager_client_{ap_manager_client},
ssid_generator_{gcd, this},
last_configured_ssid_{last_configured_ssid},
test_privet_ssid_{test_privet_ssid},
@@ -86,15 +83,16 @@
base::TimeDelta::FromSeconds(kBootstrapTimeoutSeconds));
}
// TODO(vitalybuka): Add SSID probing.
- std::string ssid = GenerateSsid();
- CHECK(!ssid.empty());
- ap_manager_client_->Start(ssid);
+ privet_ssid_ = GenerateSsid();
+ CHECK(!privet_ssid_.empty());
+ network_->EnableAccessPoint(privet_ssid_);
LOG_IF(INFO, ble_setup_enabled_) << "BLE Bootstrap start: not implemented.";
}
void WifiBootstrapManager::EndBootstrapping() {
LOG_IF(INFO, ble_setup_enabled_) << "BLE Bootstrap stop: not implemented.";
- ap_manager_client_->Stop();
+ network_->DisableAccessPoint();
+ privet_ssid_.clear();
}
void WifiBootstrapManager::StartConnecting(const std::string& ssid,
@@ -194,7 +192,7 @@
}
std::string WifiBootstrapManager::GetHostedSsid() const {
- return ap_manager_client_->GetSsid();
+ return privet_ssid_;
}
std::set<WifiType> WifiBootstrapManager::GetTypes() const {
diff --git a/libweave/src/privet/wifi_bootstrap_manager.h b/libweave/src/privet/wifi_bootstrap_manager.h
index ad87df1..dad13a0 100644
--- a/libweave/src/privet/wifi_bootstrap_manager.h
+++ b/libweave/src/privet/wifi_bootstrap_manager.h
@@ -26,7 +26,6 @@
namespace privet {
-class ApManagerClient;
class CloudDelegate;
class DeviceDelegate;
@@ -41,7 +40,6 @@
const std::string& test_privet_ssid,
bool wifi_setup_enabled,
Network* shill_client,
- ApManagerClient* ap_manager_client,
CloudDelegate* gcd);
~WifiBootstrapManager() override = default;
virtual void Init();
@@ -101,13 +99,13 @@
SetupState setup_state_{SetupState::kNone};
ConnectionState connection_state_{ConnectionState::kDisabled};
Network* network_;
- ApManagerClient* ap_manager_client_;
WifiSsidGenerator ssid_generator_;
std::vector<StateListener> state_listeners_;
bool currently_online_{false};
std::string last_configured_ssid_;
std::string test_privet_ssid_;
+ std::string privet_ssid_;
bool ble_setup_enabled_{false};
ScopedObserver<CloudDelegate, CloudDelegate::Observer> cloud_observer_{this};