/* * hidl interface for wpa_supplicant daemon * Copyright (c) 2004-2016, Jouni Malinen <j@w1.fi> * Copyright (c) 2004-2016, Roshan Pius <rpius@google.com> * * This software may be distributed under the terms of the BSD license. * See README for more details. */ #ifndef WPA_SUPPLICANT_HIDL_P2P_IFACE_H #define WPA_SUPPLICANT_HIDL_P2P_IFACE_H #include <array> #include <vector> #include <android-base/macros.h> #include <android/hardware/wifi/supplicant/1.2/ISupplicantP2pIface.h> #include <android/hardware/wifi/supplicant/1.0/ISupplicantP2pIfaceCallback.h> #include <android/hardware/wifi/supplicant/1.0/ISupplicantP2pNetwork.h> extern "C" { #include "utils/common.h" #include "utils/includes.h" #include "p2p/p2p.h" #include "p2p/p2p_i.h" #include "p2p_supplicant.h" #include "p2p_supplicant.h" #include "config.h" } namespace android { namespace hardware { namespace wifi { namespace supplicant { namespace V1_2 { namespace implementation { using namespace android::hardware::wifi::supplicant::V1_0; using namespace android::hardware::wifi::supplicant::V1_1; /** * Implementation of P2pIface hidl object. Each unique hidl * object is used for control operations on a specific interface * controlled by wpa_supplicant. */ class P2pIface : public V1_2::ISupplicantP2pIface { public: P2pIface(struct wpa_global* wpa_global, const char ifname[]); ~P2pIface() override = default; // Refer to |StaIface::invalidate()|. void invalidate(); bool isValid(); // Hidl methods exposed. Return<void> getName(getName_cb _hidl_cb) override; Return<void> getType(getType_cb _hidl_cb) override; Return<void> addNetwork(addNetwork_cb _hidl_cb) override; Return<void> removeNetwork( SupplicantNetworkId id, removeNetwork_cb _hidl_cb) override; Return<void> getNetwork( SupplicantNetworkId id, getNetwork_cb _hidl_cb) override; Return<void> listNetworks(listNetworks_cb _hidl_cb) override; Return<void> registerCallback( const sp<ISupplicantP2pIfaceCallback>& callback, registerCallback_cb _hidl_cb) override; Return<void> getDeviceAddress(getDeviceAddress_cb _hidl_cb) override; Return<void> setSsidPostfix( const hidl_vec<uint8_t>& postfix, setSsidPostfix_cb _hidl_cb) override; Return<void> setGroupIdle( const hidl_string& group_ifname, uint32_t timeout_in_sec, setGroupIdle_cb _hidl_cb) override; Return<void> setPowerSave( const hidl_string& group_ifname, bool enable, setPowerSave_cb _hidl_cb) override; Return<void> find(uint32_t timeout_in_sec, find_cb _hidl_cb) override; Return<void> stopFind(stopFind_cb _hidl_cb) override; Return<void> flush(flush_cb _hidl_cb) override; Return<void> connect( const hidl_array<uint8_t, 6>& peer_address, ISupplicantP2pIface::WpsProvisionMethod provision_method, const hidl_string& pre_selected_pin, bool join_existing_group, bool persistent, uint32_t go_intent, connect_cb _hidl_cb) override; Return<void> cancelConnect(cancelConnect_cb _hidl_cb) override; Return<void> provisionDiscovery( const hidl_array<uint8_t, 6>& peer_address, ISupplicantP2pIface::WpsProvisionMethod provision_method, provisionDiscovery_cb _hidl_cb) override; Return<void> addGroup( bool persistent, SupplicantNetworkId persistent_network_id, addGroup_cb _hidl_cb) override; Return<void> removeGroup( const hidl_string& group_ifname, removeGroup_cb _hidl_cb) override; Return<void> reject( const hidl_array<uint8_t, 6>& peer_address, reject_cb _hidl_cb) override; Return<void> invite( const hidl_string& group_ifname, const hidl_array<uint8_t, 6>& go_device_address, const hidl_array<uint8_t, 6>& peer_address, invite_cb _hidl_cb) override; Return<void> reinvoke( SupplicantNetworkId persistent_network_id, const hidl_array<uint8_t, 6>& peer_address, reinvoke_cb _hidl_cb) override; Return<void> configureExtListen( uint32_t period_in_millis, uint32_t interval_in_millis, configureExtListen_cb _hidl_cb) override; Return<void> setListenChannel( uint32_t channel, uint32_t operating_class, setListenChannel_cb _hidl_cb) override; Return<void> setDisallowedFrequencies( const hidl_vec<FreqRange>& ranges, setDisallowedFrequencies_cb _hidl_cb) override; Return<void> getSsid( const hidl_array<uint8_t, 6>& peer_address, getSsid_cb _hidl_cb) override; Return<void> getGroupCapability( const hidl_array<uint8_t, 6>& peer_address, getGroupCapability_cb _hidl_cb) override; Return<void> addBonjourService( const hidl_vec<uint8_t>& query, const hidl_vec<uint8_t>& response, addBonjourService_cb _hidl_cb) override; Return<void> removeBonjourService( const hidl_vec<uint8_t>& query, removeBonjourService_cb _hidl_cb) override; Return<void> addUpnpService( uint32_t version, const hidl_string& service_name, addUpnpService_cb _hidl_cb) override; Return<void> removeUpnpService( uint32_t version, const hidl_string& service_name, removeUpnpService_cb _hidl_cb) override; Return<void> flushServices(flushServices_cb _hidl_cb) override; Return<void> requestServiceDiscovery( const hidl_array<uint8_t, 6>& peer_address, const hidl_vec<uint8_t>& query, requestServiceDiscovery_cb _hidl_cb) override; Return<void> cancelServiceDiscovery( uint64_t identifier, cancelServiceDiscovery_cb _hidl_cb) override; Return<void> setMiracastMode( ISupplicantP2pIface::MiracastMode mode, setMiracastMode_cb _hidl_cb) override; Return<void> startWpsPbc( const hidl_string& groupIfName, const hidl_array<uint8_t, 6>& bssid, startWpsPbc_cb _hidl_cb) override; Return<void> startWpsPinKeypad( const hidl_string& groupIfName, const hidl_string& pin, startWpsPinKeypad_cb _hidl_cb) override; Return<void> startWpsPinDisplay( const hidl_string& groupIfName, const hidl_array<uint8_t, 6>& bssid, startWpsPinDisplay_cb _hidl_cb) override; Return<void> cancelWps( const hidl_string& groupIfName, cancelWps_cb _hidl_cb) override; Return<void> setWpsDeviceName( const hidl_string& name, setWpsDeviceName_cb _hidl_cb) override; Return<void> setWpsDeviceType( const hidl_array<uint8_t, 8>& type, setWpsDeviceType_cb _hidl_cb) override; Return<void> setWpsManufacturer( const hidl_string& manufacturer, setWpsManufacturer_cb _hidl_cb) override; Return<void> setWpsModelName( const hidl_string& model_name, setWpsModelName_cb _hidl_cb) override; Return<void> setWpsModelNumber( const hidl_string& model_number, setWpsModelNumber_cb _hidl_cb) override; Return<void> setWpsSerialNumber( const hidl_string& serial_number, setWpsSerialNumber_cb _hidl_cb) override; Return<void> setWpsConfigMethods( uint16_t config_methods, setWpsConfigMethods_cb _hidl_cb) override; Return<void> enableWfd(bool enable, enableWfd_cb _hidl_cb) override; Return<void> setWfdDeviceInfo( const hidl_array<uint8_t, 6>& info, setWfdDeviceInfo_cb _hidl_cb) override; Return<void> createNfcHandoverRequestMessage( createNfcHandoverRequestMessage_cb _hidl_cb) override; Return<void> createNfcHandoverSelectMessage( createNfcHandoverSelectMessage_cb _hidl_cb) override; Return<void> reportNfcHandoverResponse( const hidl_vec<uint8_t>& request, reportNfcHandoverResponse_cb _hidl_cb) override; Return<void> reportNfcHandoverInitiation( const hidl_vec<uint8_t>& select, reportNfcHandoverInitiation_cb _hidl_cb) override; Return<void> saveConfig(saveConfig_cb _hidl_cb) override; Return<void> addGroup_1_2( const hidl_vec<uint8_t>& ssid, const hidl_string& passphrase, bool persistent, uint32_t freq, const hidl_array<uint8_t, 6>& peer_address, bool joinExistingGroup, addGroup_1_2_cb _hidl_cb) override; Return<void> setMacRandomization( bool enable, setMacRandomization_cb _hidl_cb) override; private: // Corresponding worker functions for the HIDL methods. std::pair<SupplicantStatus, std::string> getNameInternal(); std::pair<SupplicantStatus, IfaceType> getTypeInternal(); std::pair<SupplicantStatus, sp<ISupplicantP2pNetwork>> addNetworkInternal(); SupplicantStatus removeNetworkInternal(SupplicantNetworkId id); std::pair<SupplicantStatus, sp<ISupplicantP2pNetwork>> getNetworkInternal(SupplicantNetworkId id); std::pair<SupplicantStatus, std::vector<SupplicantNetworkId>> listNetworksInternal(); SupplicantStatus registerCallbackInternal( const sp<ISupplicantP2pIfaceCallback>& callback); std::pair<SupplicantStatus, std::array<uint8_t, 6>> getDeviceAddressInternal(); SupplicantStatus setSsidPostfixInternal( const std::vector<uint8_t>& postfix); SupplicantStatus setGroupIdleInternal( const std::string& group_ifname, uint32_t timeout_in_sec); SupplicantStatus setPowerSaveInternal( const std::string& group_ifname, bool enable); SupplicantStatus findInternal(uint32_t timeout_in_sec); SupplicantStatus stopFindInternal(); SupplicantStatus flushInternal(); std::pair<SupplicantStatus, std::string> connectInternal( const std::array<uint8_t, 6>& peer_address, ISupplicantP2pIface::WpsProvisionMethod provision_method, const std::string& pre_selected_pin, bool join_existing_group, bool persistent, uint32_t go_intent); SupplicantStatus cancelConnectInternal(); SupplicantStatus provisionDiscoveryInternal( const std::array<uint8_t, 6>& peer_address, ISupplicantP2pIface::WpsProvisionMethod provision_method); SupplicantStatus addGroupInternal( bool persistent, SupplicantNetworkId persistent_network_id); SupplicantStatus removeGroupInternal(const std::string& group_ifname); SupplicantStatus rejectInternal( const std::array<uint8_t, 6>& peer_address); SupplicantStatus inviteInternal( const std::string& group_ifname, const std::array<uint8_t, 6>& go_device_address, const std::array<uint8_t, 6>& peer_address); SupplicantStatus reinvokeInternal( SupplicantNetworkId persistent_network_id, const std::array<uint8_t, 6>& peer_address); SupplicantStatus configureExtListenInternal( uint32_t period_in_millis, uint32_t interval_in_millis); SupplicantStatus setListenChannelInternal( uint32_t channel, uint32_t operating_class); SupplicantStatus setDisallowedFrequenciesInternal( const std::vector<FreqRange>& ranges); std::pair<SupplicantStatus, std::vector<uint8_t>> getSsidInternal( const std::array<uint8_t, 6>& peer_address); std::pair<SupplicantStatus, uint32_t> getGroupCapabilityInternal( const std::array<uint8_t, 6>& peer_address); SupplicantStatus addBonjourServiceInternal( const std::vector<uint8_t>& query, const std::vector<uint8_t>& response); SupplicantStatus removeBonjourServiceInternal( const std::vector<uint8_t>& query); SupplicantStatus addUpnpServiceInternal( uint32_t version, const std::string& service_name); SupplicantStatus removeUpnpServiceInternal( uint32_t version, const std::string& service_name); SupplicantStatus flushServicesInternal(); std::pair<SupplicantStatus, uint64_t> requestServiceDiscoveryInternal( const std::array<uint8_t, 6>& peer_address, const std::vector<uint8_t>& query); SupplicantStatus cancelServiceDiscoveryInternal(uint64_t identifier); SupplicantStatus setMiracastModeInternal( ISupplicantP2pIface::MiracastMode mode); SupplicantStatus startWpsPbcInternal( const std::string& group_ifname, const std::array<uint8_t, 6>& bssid); SupplicantStatus startWpsPinKeypadInternal( const std::string& group_ifname, const std::string& pin); std::pair<SupplicantStatus, std::string> startWpsPinDisplayInternal( const std::string& group_ifname, const std::array<uint8_t, 6>& bssid); SupplicantStatus cancelWpsInternal(const std::string& group_ifname); SupplicantStatus setWpsDeviceNameInternal(const std::string& name); SupplicantStatus setWpsDeviceTypeInternal( const std::array<uint8_t, 8>& type); SupplicantStatus setWpsManufacturerInternal( const std::string& manufacturer); SupplicantStatus setWpsModelNameInternal(const std::string& model_name); SupplicantStatus setWpsModelNumberInternal( const std::string& model_number); SupplicantStatus setWpsSerialNumberInternal( const std::string& serial_number); SupplicantStatus setWpsConfigMethodsInternal(uint16_t config_methods); SupplicantStatus enableWfdInternal(bool enable); SupplicantStatus setWfdDeviceInfoInternal( const std::array<uint8_t, 6>& info); std::pair<SupplicantStatus, std::vector<uint8_t>> createNfcHandoverRequestMessageInternal(); std::pair<SupplicantStatus, std::vector<uint8_t>> createNfcHandoverSelectMessageInternal(); SupplicantStatus reportNfcHandoverResponseInternal( const std::vector<uint8_t>& request); SupplicantStatus reportNfcHandoverInitiationInternal( const std::vector<uint8_t>& select); SupplicantStatus saveConfigInternal(); SupplicantStatus addGroup_1_2Internal( const std::vector<uint8_t>& ssid, const std::string& passphrase, bool persistent, uint32_t freq, const std::array<uint8_t, 6>& peer_address, bool joinExistingGroup); SupplicantStatus setMacRandomizationInternal(bool enable); struct wpa_supplicant* retrieveIfacePtr(); struct wpa_supplicant* retrieveGroupIfacePtr( const std::string& group_ifname); // Reference to the global wpa_struct. This is assumed to be valid for // the lifetime of the process. struct wpa_global* wpa_global_; // Name of the iface this hidl object controls const std::string ifname_; bool is_valid_; DISALLOW_COPY_AND_ASSIGN(P2pIface); }; } // namespace implementation } // namespace V1_2 } // namespace supplicant } // namespace wifi } // namespace hardware } // namespace android #endif // WPA_SUPPLICANT_HIDL_P2P_IFACE_H