Home | History | Annotate | Download | only in 1.0
      1 /*
      2  * hidl interface for wpa_supplicant daemon
      3  * Copyright (c) 2004-2016, Jouni Malinen <j (at) w1.fi>
      4  * Copyright (c) 2004-2016, Roshan Pius <rpius (at) google.com>
      5  *
      6  * This software may be distributed under the terms of the BSD license.
      7  * See README for more details.
      8  */
      9 
     10 #ifndef WPA_SUPPLICANT_HIDL_P2P_IFACE_H
     11 #define WPA_SUPPLICANT_HIDL_P2P_IFACE_H
     12 
     13 #include <array>
     14 #include <vector>
     15 
     16 #include <android-base/macros.h>
     17 
     18 #include <android/hardware/wifi/supplicant/1.0/ISupplicantP2pIface.h>
     19 #include <android/hardware/wifi/supplicant/1.0/ISupplicantP2pIfaceCallback.h>
     20 #include <android/hardware/wifi/supplicant/1.0/ISupplicantP2pNetwork.h>
     21 
     22 extern "C" {
     23 #include "utils/common.h"
     24 #include "utils/includes.h"
     25 #include "p2p/p2p.h"
     26 #include "p2p/p2p_i.h"
     27 #include "p2p_supplicant.h"
     28 #include "p2p_supplicant.h"
     29 #include "config.h"
     30 }
     31 
     32 namespace android {
     33 namespace hardware {
     34 namespace wifi {
     35 namespace supplicant {
     36 namespace V1_0 {
     37 namespace implementation {
     38 
     39 /**
     40  * Implementation of P2pIface hidl object. Each unique hidl
     41  * object is used for control operations on a specific interface
     42  * controlled by wpa_supplicant.
     43  */
     44 class P2pIface
     45     : public android::hardware::wifi::supplicant::V1_0::ISupplicantP2pIface
     46 {
     47 public:
     48 	P2pIface(struct wpa_global* wpa_global, const char ifname[]);
     49 	~P2pIface() override = default;
     50 	// Refer to |StaIface::invalidate()|.
     51 	void invalidate();
     52 	bool isValid();
     53 
     54 	// Hidl methods exposed.
     55 	Return<void> getName(getName_cb _hidl_cb) override;
     56 	Return<void> getType(getType_cb _hidl_cb) override;
     57 	Return<void> addNetwork(addNetwork_cb _hidl_cb) override;
     58 	Return<void> removeNetwork(
     59 	    SupplicantNetworkId id, removeNetwork_cb _hidl_cb) override;
     60 	Return<void> getNetwork(
     61 	    SupplicantNetworkId id, getNetwork_cb _hidl_cb) override;
     62 	Return<void> listNetworks(listNetworks_cb _hidl_cb) override;
     63 	Return<void> registerCallback(
     64 	    const sp<ISupplicantP2pIfaceCallback>& callback,
     65 	    registerCallback_cb _hidl_cb) override;
     66 	Return<void> getDeviceAddress(getDeviceAddress_cb _hidl_cb) override;
     67 	Return<void> setSsidPostfix(
     68 	    const hidl_vec<uint8_t>& postfix,
     69 	    setSsidPostfix_cb _hidl_cb) override;
     70 	Return<void> setGroupIdle(
     71 	    const hidl_string& group_ifname, uint32_t timeout_in_sec,
     72 	    setGroupIdle_cb _hidl_cb) override;
     73 	Return<void> setPowerSave(
     74 	    const hidl_string& group_ifname, bool enable,
     75 	    setPowerSave_cb _hidl_cb) override;
     76 	Return<void> find(uint32_t timeout_in_sec, find_cb _hidl_cb) override;
     77 	Return<void> stopFind(stopFind_cb _hidl_cb) override;
     78 	Return<void> flush(flush_cb _hidl_cb) override;
     79 	Return<void> connect(
     80 	    const hidl_array<uint8_t, 6>& peer_address,
     81 	    ISupplicantP2pIface::WpsProvisionMethod provision_method,
     82 	    const hidl_string& pre_selected_pin, bool join_existing_group,
     83 	    bool persistent, uint32_t go_intent, connect_cb _hidl_cb) override;
     84 	Return<void> cancelConnect(cancelConnect_cb _hidl_cb) override;
     85 	Return<void> provisionDiscovery(
     86 	    const hidl_array<uint8_t, 6>& peer_address,
     87 	    ISupplicantP2pIface::WpsProvisionMethod provision_method,
     88 	    provisionDiscovery_cb _hidl_cb) override;
     89 	Return<void> addGroup(
     90 	    bool persistent, SupplicantNetworkId persistent_network_id,
     91 	    addGroup_cb _hidl_cb) override;
     92 	Return<void> removeGroup(
     93 	    const hidl_string& group_ifname, removeGroup_cb _hidl_cb) override;
     94 	Return<void> reject(
     95 	    const hidl_array<uint8_t, 6>& peer_address,
     96 	    reject_cb _hidl_cb) override;
     97 	Return<void> invite(
     98 	    const hidl_string& group_ifname,
     99 	    const hidl_array<uint8_t, 6>& go_device_address,
    100 	    const hidl_array<uint8_t, 6>& peer_address,
    101 	    invite_cb _hidl_cb) override;
    102 	Return<void> reinvoke(
    103 	    SupplicantNetworkId persistent_network_id,
    104 	    const hidl_array<uint8_t, 6>& peer_address,
    105 	    reinvoke_cb _hidl_cb) override;
    106 	Return<void> configureExtListen(
    107 	    uint32_t period_in_millis, uint32_t interval_in_millis,
    108 	    configureExtListen_cb _hidl_cb) override;
    109 	Return<void> setListenChannel(
    110 	    uint32_t channel, uint32_t operating_class,
    111 	    setListenChannel_cb _hidl_cb) override;
    112 	Return<void> setDisallowedFrequencies(
    113 	    const hidl_vec<FreqRange>& ranges,
    114 	    setDisallowedFrequencies_cb _hidl_cb) override;
    115 	Return<void> getSsid(
    116 	    const hidl_array<uint8_t, 6>& peer_address,
    117 	    getSsid_cb _hidl_cb) override;
    118 	Return<void> getGroupCapability(
    119 	    const hidl_array<uint8_t, 6>& peer_address,
    120 	    getGroupCapability_cb _hidl_cb) override;
    121 	Return<void> addBonjourService(
    122 	    const hidl_vec<uint8_t>& query, const hidl_vec<uint8_t>& response,
    123 	    addBonjourService_cb _hidl_cb) override;
    124 	Return<void> removeBonjourService(
    125 	    const hidl_vec<uint8_t>& query,
    126 	    removeBonjourService_cb _hidl_cb) override;
    127 	Return<void> addUpnpService(
    128 	    uint32_t version, const hidl_string& service_name,
    129 	    addUpnpService_cb _hidl_cb) override;
    130 	Return<void> removeUpnpService(
    131 	    uint32_t version, const hidl_string& service_name,
    132 	    removeUpnpService_cb _hidl_cb) override;
    133 	Return<void> flushServices(flushServices_cb _hidl_cb) override;
    134 	Return<void> requestServiceDiscovery(
    135 	    const hidl_array<uint8_t, 6>& peer_address,
    136 	    const hidl_vec<uint8_t>& query,
    137 	    requestServiceDiscovery_cb _hidl_cb) override;
    138 	Return<void> cancelServiceDiscovery(
    139 	    uint64_t identifier, cancelServiceDiscovery_cb _hidl_cb) override;
    140 	Return<void> setMiracastMode(
    141 	    ISupplicantP2pIface::MiracastMode mode,
    142 	    setMiracastMode_cb _hidl_cb) override;
    143 	Return<void> startWpsPbc(
    144 	    const hidl_string& groupIfName, const hidl_array<uint8_t, 6>& bssid,
    145 	    startWpsPbc_cb _hidl_cb) override;
    146 	Return<void> startWpsPinKeypad(
    147 	    const hidl_string& groupIfName, const hidl_string& pin,
    148 	    startWpsPinKeypad_cb _hidl_cb) override;
    149 	Return<void> startWpsPinDisplay(
    150 	    const hidl_string& groupIfName, const hidl_array<uint8_t, 6>& bssid,
    151 	    startWpsPinDisplay_cb _hidl_cb) override;
    152 	Return<void> cancelWps(
    153 	    const hidl_string& groupIfName, cancelWps_cb _hidl_cb) override;
    154 	Return<void> setWpsDeviceName(
    155 	    const hidl_string& name, setWpsDeviceName_cb _hidl_cb) override;
    156 	Return<void> setWpsDeviceType(
    157 	    const hidl_array<uint8_t, 8>& type,
    158 	    setWpsDeviceType_cb _hidl_cb) override;
    159 	Return<void> setWpsManufacturer(
    160 	    const hidl_string& manufacturer,
    161 	    setWpsManufacturer_cb _hidl_cb) override;
    162 	Return<void> setWpsModelName(
    163 	    const hidl_string& model_name,
    164 	    setWpsModelName_cb _hidl_cb) override;
    165 	Return<void> setWpsModelNumber(
    166 	    const hidl_string& model_number,
    167 	    setWpsModelNumber_cb _hidl_cb) override;
    168 	Return<void> setWpsSerialNumber(
    169 	    const hidl_string& serial_number,
    170 	    setWpsSerialNumber_cb _hidl_cb) override;
    171 	Return<void> setWpsConfigMethods(
    172 	    uint16_t config_methods, setWpsConfigMethods_cb _hidl_cb) override;
    173 	Return<void> enableWfd(bool enable, enableWfd_cb _hidl_cb) override;
    174 	Return<void> setWfdDeviceInfo(
    175 	    const hidl_array<uint8_t, 6>& info,
    176 	    setWfdDeviceInfo_cb _hidl_cb) override;
    177 	Return<void> createNfcHandoverRequestMessage(
    178 	    createNfcHandoverRequestMessage_cb _hidl_cb) override;
    179 	Return<void> createNfcHandoverSelectMessage(
    180 	    createNfcHandoverSelectMessage_cb _hidl_cb) override;
    181 	Return<void> reportNfcHandoverResponse(
    182 	    const hidl_vec<uint8_t>& request,
    183 	    reportNfcHandoverResponse_cb _hidl_cb) override;
    184 	Return<void> reportNfcHandoverInitiation(
    185 	    const hidl_vec<uint8_t>& select,
    186 	    reportNfcHandoverInitiation_cb _hidl_cb) override;
    187 	Return<void> saveConfig(saveConfig_cb _hidl_cb) override;
    188 
    189 private:
    190 	// Corresponding worker functions for the HIDL methods.
    191 	std::pair<SupplicantStatus, std::string> getNameInternal();
    192 	std::pair<SupplicantStatus, IfaceType> getTypeInternal();
    193 	std::pair<SupplicantStatus, sp<ISupplicantP2pNetwork>>
    194 	addNetworkInternal();
    195 	SupplicantStatus removeNetworkInternal(SupplicantNetworkId id);
    196 	std::pair<SupplicantStatus, sp<ISupplicantP2pNetwork>>
    197 	getNetworkInternal(SupplicantNetworkId id);
    198 	std::pair<SupplicantStatus, std::vector<SupplicantNetworkId>>
    199 	listNetworksInternal();
    200 	SupplicantStatus registerCallbackInternal(
    201 	    const sp<ISupplicantP2pIfaceCallback>& callback);
    202 	std::pair<SupplicantStatus, std::array<uint8_t, 6>>
    203 	getDeviceAddressInternal();
    204 	SupplicantStatus setSsidPostfixInternal(
    205 	    const std::vector<uint8_t>& postfix);
    206 	SupplicantStatus setGroupIdleInternal(
    207 	    const std::string& group_ifname, uint32_t timeout_in_sec);
    208 	SupplicantStatus setPowerSaveInternal(
    209 	    const std::string& group_ifname, bool enable);
    210 	SupplicantStatus findInternal(uint32_t timeout_in_sec);
    211 	SupplicantStatus stopFindInternal();
    212 	SupplicantStatus flushInternal();
    213 	std::pair<SupplicantStatus, std::string> connectInternal(
    214 	    const std::array<uint8_t, 6>& peer_address,
    215 	    ISupplicantP2pIface::WpsProvisionMethod provision_method,
    216 	    const std::string& pre_selected_pin, bool join_existing_group,
    217 	    bool persistent, uint32_t go_intent);
    218 	SupplicantStatus cancelConnectInternal();
    219 	SupplicantStatus provisionDiscoveryInternal(
    220 	    const std::array<uint8_t, 6>& peer_address,
    221 	    ISupplicantP2pIface::WpsProvisionMethod provision_method);
    222 	SupplicantStatus addGroupInternal(
    223 	    bool persistent, SupplicantNetworkId persistent_network_id);
    224 	SupplicantStatus removeGroupInternal(const std::string& group_ifname);
    225 	SupplicantStatus rejectInternal(
    226 	    const std::array<uint8_t, 6>& peer_address);
    227 	SupplicantStatus inviteInternal(
    228 	    const std::string& group_ifname,
    229 	    const std::array<uint8_t, 6>& go_device_address,
    230 	    const std::array<uint8_t, 6>& peer_address);
    231 	SupplicantStatus reinvokeInternal(
    232 	    SupplicantNetworkId persistent_network_id,
    233 	    const std::array<uint8_t, 6>& peer_address);
    234 	SupplicantStatus configureExtListenInternal(
    235 	    uint32_t period_in_millis, uint32_t interval_in_millis);
    236 	SupplicantStatus setListenChannelInternal(
    237 	    uint32_t channel, uint32_t operating_class);
    238 	SupplicantStatus setDisallowedFrequenciesInternal(
    239 	    const std::vector<FreqRange>& ranges);
    240 	std::pair<SupplicantStatus, std::vector<uint8_t>> getSsidInternal(
    241 	    const std::array<uint8_t, 6>& peer_address);
    242 	std::pair<SupplicantStatus, uint32_t> getGroupCapabilityInternal(
    243 	    const std::array<uint8_t, 6>& peer_address);
    244 	SupplicantStatus addBonjourServiceInternal(
    245 	    const std::vector<uint8_t>& query,
    246 	    const std::vector<uint8_t>& response);
    247 	SupplicantStatus removeBonjourServiceInternal(
    248 	    const std::vector<uint8_t>& query);
    249 	SupplicantStatus addUpnpServiceInternal(
    250 	    uint32_t version, const std::string& service_name);
    251 	SupplicantStatus removeUpnpServiceInternal(
    252 	    uint32_t version, const std::string& service_name);
    253 	SupplicantStatus flushServicesInternal();
    254 	std::pair<SupplicantStatus, uint64_t> requestServiceDiscoveryInternal(
    255 	    const std::array<uint8_t, 6>& peer_address,
    256 	    const std::vector<uint8_t>& query);
    257 	SupplicantStatus cancelServiceDiscoveryInternal(uint64_t identifier);
    258 	SupplicantStatus setMiracastModeInternal(
    259 	    ISupplicantP2pIface::MiracastMode mode);
    260 	SupplicantStatus startWpsPbcInternal(
    261 	    const std::string& group_ifname,
    262 	    const std::array<uint8_t, 6>& bssid);
    263 	SupplicantStatus startWpsPinKeypadInternal(
    264 	    const std::string& group_ifname, const std::string& pin);
    265 	std::pair<SupplicantStatus, std::string> startWpsPinDisplayInternal(
    266 	    const std::string& group_ifname,
    267 	    const std::array<uint8_t, 6>& bssid);
    268 	SupplicantStatus cancelWpsInternal(const std::string& group_ifname);
    269 	SupplicantStatus setWpsDeviceNameInternal(const std::string& name);
    270 	SupplicantStatus setWpsDeviceTypeInternal(
    271 	    const std::array<uint8_t, 8>& type);
    272 	SupplicantStatus setWpsManufacturerInternal(
    273 	    const std::string& manufacturer);
    274 	SupplicantStatus setWpsModelNameInternal(const std::string& model_name);
    275 	SupplicantStatus setWpsModelNumberInternal(
    276 	    const std::string& model_number);
    277 	SupplicantStatus setWpsSerialNumberInternal(
    278 	    const std::string& serial_number);
    279 	SupplicantStatus setWpsConfigMethodsInternal(uint16_t config_methods);
    280 	SupplicantStatus enableWfdInternal(bool enable);
    281 	SupplicantStatus setWfdDeviceInfoInternal(
    282 	    const std::array<uint8_t, 6>& info);
    283 	std::pair<SupplicantStatus, std::vector<uint8_t>>
    284 	createNfcHandoverRequestMessageInternal();
    285 	std::pair<SupplicantStatus, std::vector<uint8_t>>
    286 	createNfcHandoverSelectMessageInternal();
    287 	SupplicantStatus reportNfcHandoverResponseInternal(
    288 	    const std::vector<uint8_t>& request);
    289 	SupplicantStatus reportNfcHandoverInitiationInternal(
    290 	    const std::vector<uint8_t>& select);
    291 	SupplicantStatus saveConfigInternal();
    292 
    293 	struct wpa_supplicant* retrieveIfacePtr();
    294 	struct wpa_supplicant* retrieveGroupIfacePtr(
    295 	    const std::string& group_ifname);
    296 
    297 	// Reference to the global wpa_struct. This is assumed to be valid for
    298 	// the lifetime of the process.
    299 	struct wpa_global* wpa_global_;
    300 	// Name of the iface this hidl object controls
    301 	const std::string ifname_;
    302 	bool is_valid_;
    303 
    304 	DISALLOW_COPY_AND_ASSIGN(P2pIface);
    305 };
    306 
    307 }  // namespace implementation
    308 }  // namespace V1_0
    309 }  // namespace wifi
    310 }  // namespace supplicant
    311 }  // namespace hardware
    312 }  // namespace android
    313 
    314 #endif  // WPA_SUPPLICANT_HIDL_P2P_IFACE_H
    315