/* * hidl interface for wpa_supplicant daemon * Copyright (c) 2004-2016, Jouni Malinen * Copyright (c) 2004-2016, Roshan Pius * * 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 #include #include #include #include #include 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 getName(getName_cb _hidl_cb) override; Return getType(getType_cb _hidl_cb) override; Return addNetwork(addNetwork_cb _hidl_cb) override; Return removeNetwork( SupplicantNetworkId id, removeNetwork_cb _hidl_cb) override; Return getNetwork( SupplicantNetworkId id, getNetwork_cb _hidl_cb) override; Return listNetworks(listNetworks_cb _hidl_cb) override; Return registerCallback( const sp& callback, registerCallback_cb _hidl_cb) override; Return getDeviceAddress(getDeviceAddress_cb _hidl_cb) override; Return setSsidPostfix( const hidl_vec& postfix, setSsidPostfix_cb _hidl_cb) override; Return setGroupIdle( const hidl_string& group_ifname, uint32_t timeout_in_sec, setGroupIdle_cb _hidl_cb) override; Return setPowerSave( const hidl_string& group_ifname, bool enable, setPowerSave_cb _hidl_cb) override; Return find(uint32_t timeout_in_sec, find_cb _hidl_cb) override; Return stopFind(stopFind_cb _hidl_cb) override; Return flush(flush_cb _hidl_cb) override; Return connect( const hidl_array& 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 cancelConnect(cancelConnect_cb _hidl_cb) override; Return provisionDiscovery( const hidl_array& peer_address, ISupplicantP2pIface::WpsProvisionMethod provision_method, provisionDiscovery_cb _hidl_cb) override; Return addGroup( bool persistent, SupplicantNetworkId persistent_network_id, addGroup_cb _hidl_cb) override; Return removeGroup( const hidl_string& group_ifname, removeGroup_cb _hidl_cb) override; Return reject( const hidl_array& peer_address, reject_cb _hidl_cb) override; Return invite( const hidl_string& group_ifname, const hidl_array& go_device_address, const hidl_array& peer_address, invite_cb _hidl_cb) override; Return reinvoke( SupplicantNetworkId persistent_network_id, const hidl_array& peer_address, reinvoke_cb _hidl_cb) override; Return configureExtListen( uint32_t period_in_millis, uint32_t interval_in_millis, configureExtListen_cb _hidl_cb) override; Return setListenChannel( uint32_t channel, uint32_t operating_class, setListenChannel_cb _hidl_cb) override; Return setDisallowedFrequencies( const hidl_vec& ranges, setDisallowedFrequencies_cb _hidl_cb) override; Return getSsid( const hidl_array& peer_address, getSsid_cb _hidl_cb) override; Return getGroupCapability( const hidl_array& peer_address, getGroupCapability_cb _hidl_cb) override; Return addBonjourService( const hidl_vec& query, const hidl_vec& response, addBonjourService_cb _hidl_cb) override; Return removeBonjourService( const hidl_vec& query, removeBonjourService_cb _hidl_cb) override; Return addUpnpService( uint32_t version, const hidl_string& service_name, addUpnpService_cb _hidl_cb) override; Return removeUpnpService( uint32_t version, const hidl_string& service_name, removeUpnpService_cb _hidl_cb) override; Return flushServices(flushServices_cb _hidl_cb) override; Return requestServiceDiscovery( const hidl_array& peer_address, const hidl_vec& query, requestServiceDiscovery_cb _hidl_cb) override; Return cancelServiceDiscovery( uint64_t identifier, cancelServiceDiscovery_cb _hidl_cb) override; Return setMiracastMode( ISupplicantP2pIface::MiracastMode mode, setMiracastMode_cb _hidl_cb) override; Return startWpsPbc( const hidl_string& groupIfName, const hidl_array& bssid, startWpsPbc_cb _hidl_cb) override; Return startWpsPinKeypad( const hidl_string& groupIfName, const hidl_string& pin, startWpsPinKeypad_cb _hidl_cb) override; Return startWpsPinDisplay( const hidl_string& groupIfName, const hidl_array& bssid, startWpsPinDisplay_cb _hidl_cb) override; Return cancelWps( const hidl_string& groupIfName, cancelWps_cb _hidl_cb) override; Return setWpsDeviceName( const hidl_string& name, setWpsDeviceName_cb _hidl_cb) override; Return setWpsDeviceType( const hidl_array& type, setWpsDeviceType_cb _hidl_cb) override; Return setWpsManufacturer( const hidl_string& manufacturer, setWpsManufacturer_cb _hidl_cb) override; Return setWpsModelName( const hidl_string& model_name, setWpsModelName_cb _hidl_cb) override; Return setWpsModelNumber( const hidl_string& model_number, setWpsModelNumber_cb _hidl_cb) override; Return setWpsSerialNumber( const hidl_string& serial_number, setWpsSerialNumber_cb _hidl_cb) override; Return setWpsConfigMethods( uint16_t config_methods, setWpsConfigMethods_cb _hidl_cb) override; Return enableWfd(bool enable, enableWfd_cb _hidl_cb) override; Return setWfdDeviceInfo( const hidl_array& info, setWfdDeviceInfo_cb _hidl_cb) override; Return createNfcHandoverRequestMessage( createNfcHandoverRequestMessage_cb _hidl_cb) override; Return createNfcHandoverSelectMessage( createNfcHandoverSelectMessage_cb _hidl_cb) override; Return reportNfcHandoverResponse( const hidl_vec& request, reportNfcHandoverResponse_cb _hidl_cb) override; Return reportNfcHandoverInitiation( const hidl_vec& select, reportNfcHandoverInitiation_cb _hidl_cb) override; Return saveConfig(saveConfig_cb _hidl_cb) override; Return addGroup_1_2( const hidl_vec& ssid, const hidl_string& passphrase, bool persistent, uint32_t freq, const hidl_array& peer_address, bool joinExistingGroup, addGroup_1_2_cb _hidl_cb) override; Return setMacRandomization( bool enable, setMacRandomization_cb _hidl_cb) override; private: // Corresponding worker functions for the HIDL methods. std::pair getNameInternal(); std::pair getTypeInternal(); std::pair> addNetworkInternal(); SupplicantStatus removeNetworkInternal(SupplicantNetworkId id); std::pair> getNetworkInternal(SupplicantNetworkId id); std::pair> listNetworksInternal(); SupplicantStatus registerCallbackInternal( const sp& callback); std::pair> getDeviceAddressInternal(); SupplicantStatus setSsidPostfixInternal( const std::vector& 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 connectInternal( const std::array& 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& 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& peer_address); SupplicantStatus inviteInternal( const std::string& group_ifname, const std::array& go_device_address, const std::array& peer_address); SupplicantStatus reinvokeInternal( SupplicantNetworkId persistent_network_id, const std::array& 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& ranges); std::pair> getSsidInternal( const std::array& peer_address); std::pair getGroupCapabilityInternal( const std::array& peer_address); SupplicantStatus addBonjourServiceInternal( const std::vector& query, const std::vector& response); SupplicantStatus removeBonjourServiceInternal( const std::vector& 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 requestServiceDiscoveryInternal( const std::array& peer_address, const std::vector& query); SupplicantStatus cancelServiceDiscoveryInternal(uint64_t identifier); SupplicantStatus setMiracastModeInternal( ISupplicantP2pIface::MiracastMode mode); SupplicantStatus startWpsPbcInternal( const std::string& group_ifname, const std::array& bssid); SupplicantStatus startWpsPinKeypadInternal( const std::string& group_ifname, const std::string& pin); std::pair startWpsPinDisplayInternal( const std::string& group_ifname, const std::array& bssid); SupplicantStatus cancelWpsInternal(const std::string& group_ifname); SupplicantStatus setWpsDeviceNameInternal(const std::string& name); SupplicantStatus setWpsDeviceTypeInternal( const std::array& 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& info); std::pair> createNfcHandoverRequestMessageInternal(); std::pair> createNfcHandoverSelectMessageInternal(); SupplicantStatus reportNfcHandoverResponseInternal( const std::vector& request); SupplicantStatus reportNfcHandoverInitiationInternal( const std::vector& select); SupplicantStatus saveConfigInternal(); SupplicantStatus addGroup_1_2Internal( const std::vector& ssid, const std::string& passphrase, bool persistent, uint32_t freq, const std::array& 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