1/* 2 * hidl interface for wpa_supplicant daemon 3 * Copyright (c) 2004-2016, Jouni Malinen <j@w1.fi> 4 * Copyright (c) 2004-2016, Roshan Pius <rpius@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_NETWORK_H 11#define WPA_SUPPLICANT_HIDL_P2P_NETWORK_H 12 13#include <android-base/macros.h> 14 15#include <android/hardware/wifi/supplicant/1.0/ISupplicantP2pNetwork.h> 16#include <android/hardware/wifi/supplicant/1.0/ISupplicantP2pNetworkCallback.h> 17 18extern "C" { 19#include "utils/common.h" 20#include "utils/includes.h" 21#include "wpa_supplicant_i.h" 22} 23 24namespace android { 25namespace hardware { 26namespace wifi { 27namespace supplicant { 28namespace V1_0 { 29namespace implementation { 30 31/** 32 * Implementation of P2pNetwork hidl object. Each unique hidl 33 * object is used for control operations on a specific network 34 * controlled by wpa_supplicant. 35 */ 36class P2pNetwork : public ISupplicantP2pNetwork 37{ 38public: 39 P2pNetwork( 40 struct wpa_global* wpa_global, const char ifname[], int network_id); 41 ~P2pNetwork() override = default; 42 // Refer to |StaIface::invalidate()|. 43 void invalidate(); 44 bool isValid(); 45 46 // Hidl methods exposed. 47 Return<void> getId(getId_cb _hidl_cb) override; 48 Return<void> getInterfaceName(getInterfaceName_cb _hidl_cb) override; 49 Return<void> getType(getType_cb _hidl_cb) override; 50 Return<void> registerCallback( 51 const sp<ISupplicantP2pNetworkCallback>& callback, 52 registerCallback_cb _hidl_cb) override; 53 Return<void> getSsid(getSsid_cb _hidl_cb) override; 54 Return<void> getBssid(getBssid_cb _hidl_cb) override; 55 Return<void> isCurrent(isCurrent_cb _hidl_cb) override; 56 Return<void> isPersistent(isPersistent_cb _hidl_cb) override; 57 Return<void> isGo(isGo_cb _hidl_cb) override; 58 Return<void> setClientList( 59 const hidl_vec<hidl_array<uint8_t, 6>>& clients, 60 setClientList_cb _hidl_cb) override; 61 Return<void> getClientList(getClientList_cb _hidl_cb) override; 62 63private: 64 // Corresponding worker functions for the HIDL methods. 65 std::pair<SupplicantStatus, uint32_t> getIdInternal(); 66 std::pair<SupplicantStatus, std::string> getInterfaceNameInternal(); 67 std::pair<SupplicantStatus, IfaceType> getTypeInternal(); 68 SupplicantStatus registerCallbackInternal( 69 const sp<ISupplicantP2pNetworkCallback>& callback); 70 std::pair<SupplicantStatus, std::vector<uint8_t>> getSsidInternal(); 71 std::pair<SupplicantStatus, std::array<uint8_t, 6>> getBssidInternal(); 72 std::pair<SupplicantStatus, bool> isCurrentInternal(); 73 std::pair<SupplicantStatus, bool> isPersistentInternal(); 74 std::pair<SupplicantStatus, bool> isGoInternal(); 75 SupplicantStatus setClientListInternal( 76 const std::vector<hidl_array<uint8_t, 6>>& clients); 77 std::pair<SupplicantStatus, std::vector<hidl_array<uint8_t, 6>>> 78 getClientListInternal(); 79 80 struct wpa_ssid* retrieveNetworkPtr(); 81 struct wpa_supplicant* retrieveIfacePtr(); 82 83 // Reference to the global wpa_struct. This is assumed to be valid 84 // for the lifetime of the process. 85 const struct wpa_global* wpa_global_; 86 // Name of the iface this network belongs to. 87 const std::string ifname_; 88 // Id of the network this hidl object controls. 89 const int network_id_; 90 bool is_valid_; 91 92 DISALLOW_COPY_AND_ASSIGN(P2pNetwork); 93}; 94 95} // namespace implementation 96} // namespace V1_0 97} // namespace wifi 98} // namespace supplicant 99} // namespace hardware 100} // namespace android 101 102#endif // WPA_SUPPLICANT_HIDL_P2P_NETWORK_H 103