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