1 /* 2 * WPA Supplicant - Supplicant Aidl interface 3 * Copyright (c) 2021, Google Inc. All rights reserved. 4 * 5 * This software may be distributed under the terms of the BSD license. 6 * See README for more details. 7 */ 8 9 #ifndef WPA_SUPPLICANT_AIDL_SUPPLICANT_H 10 #define WPA_SUPPLICANT_AIDL_SUPPLICANT_H 11 12 #include <aidl/android/hardware/wifi/supplicant/BnSupplicant.h> 13 #include <aidl/android/hardware/wifi/supplicant/DebugLevel.h> 14 #include <aidl/android/hardware/wifi/supplicant/IfaceInfo.h> 15 #include <aidl/android/hardware/wifi/supplicant/ISupplicantCallback.h> 16 #include <aidl/android/hardware/wifi/supplicant/ISupplicantP2pIface.h> 17 #include <aidl/android/hardware/wifi/supplicant/ISupplicantStaIface.h> 18 19 #include <android-base/macros.h> 20 21 extern "C" 22 { 23 #include "utils/common.h" 24 #include "utils/includes.h" 25 #include "utils/wpa_debug.h" 26 #include "wpa_supplicant_i.h" 27 #include "scan.h" 28 } 29 30 namespace aidl { 31 namespace android { 32 namespace hardware { 33 namespace wifi { 34 namespace supplicant { 35 36 /** 37 * Implementation of the supplicant aidl object. This aidl 38 * object is used core for global control operations on 39 * wpa_supplicant. 40 */ 41 class Supplicant : public BnSupplicant 42 { 43 public: 44 Supplicant(struct wpa_global* global); 45 ~Supplicant() override = default; 46 bool isValid(); 47 48 // Aidl methods exposed. 49 ::ndk::ScopedAStatus addP2pInterface( 50 const std::string& in_name, 51 std::shared_ptr<ISupplicantP2pIface>* _aidl_return) override; 52 ::ndk::ScopedAStatus addStaInterface( 53 const std::string& in_name, 54 std::shared_ptr<ISupplicantStaIface>* _aidl_return) override; 55 ::ndk::ScopedAStatus removeInterface( 56 const IfaceInfo& in_ifaceInfo) override; 57 ::ndk::ScopedAStatus getP2pInterface( 58 const std::string& in_name, 59 std::shared_ptr<ISupplicantP2pIface>* _aidl_return) override; 60 ::ndk::ScopedAStatus getStaInterface( 61 const std::string& in_name, 62 std::shared_ptr<ISupplicantStaIface>* _aidl_return) override; 63 ::ndk::ScopedAStatus listInterfaces( 64 std::vector<IfaceInfo>* _aidl_return) override; 65 ::ndk::ScopedAStatus registerCallback( 66 const std::shared_ptr<ISupplicantCallback>& in_callback) override; 67 ::ndk::ScopedAStatus registerNonStandardCertCallback( 68 const std::shared_ptr<INonStandardCertCallback>& in_callback) override; 69 ::ndk::ScopedAStatus setDebugParams( 70 DebugLevel in_level, bool in_showTimestamp, bool in_showKeys) override; 71 ::ndk::ScopedAStatus getDebugLevel(DebugLevel* _aidl_return) override; 72 ::ndk::ScopedAStatus isDebugShowTimestampEnabled(bool* _aidl_return) override; 73 ::ndk::ScopedAStatus isDebugShowKeysEnabled(bool* _aidl_return) override; 74 ::ndk::ScopedAStatus setConcurrencyPriority(IfaceType in_type) override; 75 ::ndk::ScopedAStatus terminate() override; 76 77 private: 78 // Corresponding worker functions for the AIDL methods. 79 std::pair<std::shared_ptr<ISupplicantP2pIface>, ndk::ScopedAStatus> 80 addP2pInterfaceInternal(const std::string& name); 81 std::pair<std::shared_ptr<ISupplicantStaIface>, ndk::ScopedAStatus> 82 addStaInterfaceInternal(const std::string& name); 83 std::pair<std::shared_ptr<ISupplicantP2pIface>, ndk::ScopedAStatus> 84 getP2pInterfaceInternal(const std::string& name); 85 std::pair<std::shared_ptr<ISupplicantStaIface>, ndk::ScopedAStatus> 86 getStaInterfaceInternal(const std::string& name); 87 88 ndk::ScopedAStatus removeInterfaceInternal(const IfaceInfo& iface_info); 89 std::pair<std::vector<IfaceInfo>, ndk::ScopedAStatus> listInterfacesInternal(); 90 ndk::ScopedAStatus registerCallbackInternal( 91 const std::shared_ptr<ISupplicantCallback>& callback); 92 ndk::ScopedAStatus registerNonStandardCertCallbackInternal( 93 const std::shared_ptr<INonStandardCertCallback>& callback); 94 ndk::ScopedAStatus setDebugParamsInternal( 95 DebugLevel level, bool show_timestamp, bool show_keys); 96 ndk::ScopedAStatus setConcurrencyPriorityInternal(IfaceType type); 97 ndk::ScopedAStatus addP2pDevInterface(struct wpa_interface iface_params); 98 99 // Raw pointer to the global structure maintained by the core. 100 struct wpa_global* wpa_global_; 101 // Driver name to be used for creating interfaces. 102 static const char kDriverName[]; 103 // wpa_supplicant.conf file location on the device. 104 static const char kConfigFilePath[]; 105 106 DISALLOW_COPY_AND_ASSIGN(Supplicant); 107 }; 108 109 } // namespace supplicant 110 } // namespace wifi 111 } // namespace hardware 112 } // namespace android 113 } // namespace aidl 114 115 #endif // WPA_SUPPLICANT_AIDL_SUPPLICANT_H 116