// Copyright 2015 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef CHROMEOS_DBUS_AP_MANAGER_CLIENT_H_ #define CHROMEOS_DBUS_AP_MANAGER_CLIENT_H_ #include #include #include #include "base/callback.h" #include "base/macros.h" #include "base/values.h" #include "chromeos/chromeos_export.h" #include "chromeos/dbus/dbus_client.h" #include "chromeos/dbus/dbus_method_call_status.h" #include "dbus/object_path.h" #include "dbus/property.h" namespace chromeos { // ApManagerClient is used to communicate with the // WiFi AP Manager service. All methods should be called from // the origin thread which initializes the DBusThreadManager instance. class CHROMEOS_EXPORT ApManagerClient : public DBusClient { public: // Structure of properties associated with a WiFi service AP configuration. // These properties must be set before Start is called. class ConfigProperties : public dbus::PropertySet { public: ConfigProperties(dbus::ObjectProxy* object_proxy, const std::string& interface_name, const PropertyChangedCallback& callback); ~ConfigProperties() override; // Name of network [required]. const std::string& ssid() const { return ssid_.value(); } void set_ssid(const std::string& ssid, SetCallback callback) { ssid_.Set(ssid, callback); } // Interface name [optional]. const std::string& interface_name() const { return interface_name_.value(); } void set_interface_name(const std::string& name, SetCallback callback) { interface_name_.Set(name, callback); } // Security Mode; "RSN", "None" [optional]. const std::string& security_mode() const { return security_mode_.value(); } void set_security_mode(const std::string& mode, SetCallback callback) { security_mode_.Set(mode, callback); } // Passphrase; [required] when security is not "None". const std::string& passphrase() const { return passphrase_.value(); } void set_passphrase(const std::string& passphrase, SetCallback callback) { passphrase_.Set(passphrase, callback); } // HwMode, "802.11a", "802.11b". Default: "802.11g" [optional]. const std::string& hw_mode() const { return hw_mode_.value(); } void set_hw_mode(const std::string& mode, SetCallback callback) { hw_mode_.Set(mode, callback); } // Operation mode, "Bridge" or "Server". Default "Server". [optional]. const std::string& operation_mode() const { return operation_mode_.value(); } void set_operation_mode(const std::string& mode, SetCallback callback) { operation_mode_.Set(mode, callback); } // Operating channel. Default '6' [optional]. uint16_t channel() const { return channel_.value(); } void set_channel(uint16_t channel, SetCallback callback) { channel_.Set(channel, callback); } // Hidden network. Default "false". [optional]. bool hidden_network() const { return hidden_network_.value(); } void set_hidden_network(bool hidden, SetCallback callback) { hidden_network_.Set(hidden, callback); } // Bridge interface. [required] if Bridge operation mode set. const std::string& bridge_interface() const { return bridge_interface_.value(); } void set_bridge_interface(const std::string& interface, SetCallback callback) { bridge_interface_.Set(interface, callback); } // The value of x in the following equation; "192.168.x.254". // This will be the server's IP address. [required] only if // operation mode set to "Server". uint16_t server_address_index() const { return server_address_index_.value(); } void set_server_address_index(uint16_t index, SetCallback callback) { server_address_index_.Set(index, callback); } private: dbus::Property ssid_; dbus::Property interface_name_; dbus::Property security_mode_; dbus::Property passphrase_; dbus::Property hw_mode_; dbus::Property operation_mode_; dbus::Property channel_; dbus::Property hidden_network_; dbus::Property bridge_interface_; dbus::Property server_address_index_; DISALLOW_COPY_AND_ASSIGN(ConfigProperties); }; // Structure of properties associated with a WiFi service AP device. class DeviceProperties : public dbus::PropertySet { public: DeviceProperties(dbus::ObjectProxy* object_proxy, const std::string& interface_name, const PropertyChangedCallback& callback); ~DeviceProperties() override; // Name of the WiFi device. const std::string& device_name() const { return device_name_.value(); } // Flag indicating if this device is currently in-use by apmanager. bool in_use() const { return in_used_.value(); } // Name of the WiFi interface on the device that’s preferred for starting an // AP serivce. const std::string& preferred_ap_interface() const { return preferred_ap_interface_.value(); } private: dbus::Property device_name_; dbus::Property in_used_; dbus::Property preferred_ap_interface_; DISALLOW_COPY_AND_ASSIGN(DeviceProperties); }; // Structure of properties associated with a WiFi service AP service. class ServiceProperties : public dbus::PropertySet { public: ServiceProperties(dbus::ObjectProxy* object_proxy, const std::string& interface_name, const PropertyChangedCallback& callback); ~ServiceProperties() override; // DBus path of the config for this service. const dbus::ObjectPath& config_path() const { return config_.value(); } // Current state of service. ["Idle", "Starting", "Started", "Failed"]. const std::string& state() const { return state_.value(); } private: dbus::Property config_; dbus::Property state_; DISALLOW_COPY_AND_ASSIGN(ServiceProperties); }; // Interface for observing changes from a apmanager daemon. class Observer { public: virtual ~Observer(); // Called when the manager has been added. virtual void ManagerAdded(); // Called when the manager has been removed. virtual void ManagerRemoved(); // Called when the config with object path |object_path| is added to the // system. virtual void ConfigAdded(const dbus::ObjectPath& object_path); // Called when the config with object path |object_path| is removed from // the system. virtual void ConfigRemoved(const dbus::ObjectPath& object_path); // Called when the device with object path |object_path| is added to the // system. virtual void DeviceAdded(const dbus::ObjectPath& object_path); // Called when the device with object path |object_path| is removed from // the system. virtual void DeviceRemoved(const dbus::ObjectPath& object_path); // Called when the device with object path |object_path| is added to the // system. virtual void ServiceAdded(const dbus::ObjectPath& object_path); // Called when the device with object path |object_path| is removed from // the system. virtual void ServiceRemoved(const dbus::ObjectPath& object_path); // Called when the adapter with object path |object_path| has a // change in value of the property named |property_name|. virtual void ConfigPropertyChanged(const dbus::ObjectPath& object_path, const std::string& property_name); // Called when the adapter with object path |object_path| has a // change in value of the property named |property_name|. virtual void DevicePropertyChanged(const dbus::ObjectPath& object_path, const std::string& property_name); // Called when the adapter with object path |object_path| has a // change in value of the property named |property_name|. virtual void ServicePropertyChanged(const dbus::ObjectPath& object_path, const std::string& property_name); }; ~ApManagerClient() override; // Factory function, creates a new instance which is owned by the caller. // For normal usage, access the singleton via DBusThreadManager::Get(). static ApManagerClient* Create(); // Adds and removes observers for events on all apmanager // events. Check the |object_path| parameter of observer methods to // determine which group is issuing the event. virtual void AddObserver(Observer* observer) = 0; virtual void RemoveObserver(Observer* observer) = 0; // Calls CreateService method. // |callback| is called with its |call_status| argument set to // DBUS_METHOD_CALL_SUCCESS if the method call succeeds. Otherwise, // |callback| is called with |call_status| set to DBUS_METHOD_CALL_FAILURE. virtual void CreateService(const ObjectPathDBusMethodCallback& callback) = 0; // Calls RemoveService method. // |callback| is called with its |call_status| argument set to // DBUS_METHOD_CALL_SUCCESS if the method call succeeds. Otherwise, // |callback| is called with |call_status| set to DBUS_METHOD_CALL_FAILURE. virtual void RemoveService(const dbus::ObjectPath& object_path, const VoidDBusMethodCallback& callback) = 0; // Calls Service::Start method. // |callback| is called with its |call_status| argument set to // DBUS_METHOD_CALL_SUCCESS if the method call succeeds. Otherwise, // |callback| is called with |call_status| set to DBUS_METHOD_CALL_FAILURE. virtual void StartService(const dbus::ObjectPath& object_path, const VoidDBusMethodCallback& callback) = 0; // Calls Service::Stop method. // |callback| is called with its |call_status| argument set to // DBUS_METHOD_CALL_SUCCESS if the method call succeeds. Otherwise, // |callback| is called with |call_status| set to DBUS_METHOD_CALL_FAILURE. virtual void StopService(const dbus::ObjectPath& object_path, const VoidDBusMethodCallback& callback) = 0; // Obtains the properties for the config with object path |object_path|, // any values should be copied if needed. virtual ConfigProperties* GetConfigProperties( const dbus::ObjectPath& object_path) = 0; // Obtains the properties for the device with object path |object_path|, // any values should be copied if needed. virtual const DeviceProperties* GetDeviceProperties( const dbus::ObjectPath& object_path) = 0; // Obtains the properties for the device with object path |object_path|, // any values should be copied if needed. virtual const ServiceProperties* GetServiceProperties( const dbus::ObjectPath& object_path) = 0; protected: // Create() should be used instead. ApManagerClient(); private: DISALLOW_COPY_AND_ASSIGN(ApManagerClient); }; } // namespace chromeos #endif // CHROMEOS_DBUS_AP_MANAGER_CLIENT_H_