// // Copyright (C) 2015 The Android Open Source Project // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #ifndef SHILL_DBUS_CHROMEOS_SUPPLICANT_INTERFACE_PROXY_H_ #define SHILL_DBUS_CHROMEOS_SUPPLICANT_INTERFACE_PROXY_H_ #include <string> #include <vector> #include <base/macros.h> #include "shill/refptr_types.h" #include "shill/supplicant/supplicant_interface_proxy_interface.h" #include "supplicant/dbus-proxies.h" namespace shill { class SupplicantEventDelegateInterface; // ChromeosSupplicantInterfaceProxy. provides access to wpa_supplicant's // network-interface APIs via D-Bus. This takes a delegate, which // is an interface that is used to send notifications of supplicant // events. This pointer is not owned by ChromeosSupplicantInterfaceProxy // and must outlive the proxy. class ChromeosSupplicantInterfaceProxy : public SupplicantInterfaceProxyInterface { public: ChromeosSupplicantInterfaceProxy( const scoped_refptr<dbus::Bus>& bus, const std::string& object_path, SupplicantEventDelegateInterface* delegate); ~ChromeosSupplicantInterfaceProxy() override; // Implementation of SupplicantInterfaceProxyInterface. bool AddNetwork(const KeyValueStore& args, std::string* network) override; bool EnableHighBitrates() override; bool EAPLogon() override; bool EAPLogoff() override; bool Disconnect() override; bool FlushBSS(const uint32_t& age) override; bool NetworkReply(const std::string& network, const std::string& field, const std::string& value) override; bool Reassociate() override; bool Reattach() override; bool RemoveAllNetworks() override; bool RemoveNetwork(const std::string& network) override; bool Roam(const std::string& addr) override; bool Scan(const KeyValueStore& args) override; bool SelectNetwork(const std::string& network) override; bool TDLSDiscover(const std::string& peer) override; bool TDLSSetup(const std::string& peer) override; bool TDLSStatus(const std::string& peer, std::string* status) override; bool TDLSTeardown(const std::string& peer) override; bool SetHT40Enable(const std::string& network, bool enable) override; // The below set functions will always return true, since PropertySet::Set // is an async method. Any failures will be logged in the callback. bool SetFastReauth(bool enabled) override; bool SetRoamThreshold(uint16_t threshold) override; bool SetScanInterval(int seconds) override; bool SetDisableHighBitrates(bool disable_high_bitrates) override; bool SetSchedScan(bool enable) override; bool SetScan(bool enable) override; private: class PropertySet : public dbus::PropertySet { public: PropertySet(dbus::ObjectProxy* object_proxy, const std::string& interface_name, const PropertyChangedCallback& callback); brillo::dbus_utils::Property<bool> disable_high_bitrates; brillo::dbus_utils::Property<bool> fast_reauth; brillo::dbus_utils::Property<uint16_t> roam_threshold; brillo::dbus_utils::Property<bool> scan; brillo::dbus_utils::Property<int32_t> scan_interval; brillo::dbus_utils::Property<bool> sched_scan; private: DISALLOW_COPY_AND_ASSIGN(PropertySet); }; static const char kInterfaceName[]; static const char kPropertyDisableHighBitrates[]; static const char kPropertyFastReauth[]; static const char kPropertyRoamThreshold[]; static const char kPropertyScan[]; static const char kPropertyScanInterval[]; static const char kPropertySchedScan[]; // Signal handlers. void BlobAdded(const std::string& blobname); void BlobRemoved(const std::string& blobname); void BSSAdded(const dbus::ObjectPath& BSS, const brillo::VariantDictionary& properties); void BSSRemoved(const dbus::ObjectPath& BSS); void Certification(const brillo::VariantDictionary& properties); void EAP(const std::string& status, const std::string& parameter); void NetworkAdded(const dbus::ObjectPath& network, const brillo::VariantDictionary& properties); void NetworkRemoved(const dbus::ObjectPath& network); void NetworkSelected(const dbus::ObjectPath& network); void PropertiesChanged( const brillo::VariantDictionary& properties); void ScanDone(bool success); void TDLSDiscoverResponse(const std::string& peer_address); // Callback invoked when the value of property |property_name| is changed. void OnPropertyChanged(const std::string& property_name); // Called when signal is connected to the ObjectProxy. void OnSignalConnected(const std::string& interface_name, const std::string& signal_name, bool success); std::unique_ptr<fi::w1::wpa_supplicant1::InterfaceProxy> interface_proxy_; std::unique_ptr<PropertySet> properties_; // This pointer is owned by the object that created |this|. That object // MUST destroy |this| before destroying itself. SupplicantEventDelegateInterface* delegate_; base::WeakPtrFactory<ChromeosSupplicantInterfaceProxy> weak_factory_{this}; DISALLOW_COPY_AND_ASSIGN(ChromeosSupplicantInterfaceProxy); }; } // namespace shill #endif // SHILL_DBUS_CHROMEOS_SUPPLICANT_INTERFACE_PROXY_H_