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};