#include <android-base/macros.h>
#include <utils/StrongPointer.h>
+#include <wifi_system/interface_tool.h>
+#include <wifi_system/supplicant_manager.h>
#include "android/net/wifi/IClientInterface.h"
+#include "wificond/net/mlme_event_handler.h"
+#include "wificond/net/netlink_utils.h"
+#include "wificond/scanning/offload/offload_service_utils.h"
+#include "wificond/scanning/scanner_impl.h"
namespace android {
namespace wificond {
class ClientInterfaceBinder;
+class ClientInterfaceImpl;
+class ScanUtils;
+
+class MlmeEventHandlerImpl : public MlmeEventHandler {
+ public:
+ MlmeEventHandlerImpl(ClientInterfaceImpl* client_interface);
+ ~MlmeEventHandlerImpl() override;
+ void OnConnect(std::unique_ptr<MlmeConnectEvent> event) override;
+ void OnRoam(std::unique_ptr<MlmeRoamEvent> event) override;
+ void OnAssociate(std::unique_ptr<MlmeAssociateEvent> event) override;
+ void OnDisconnect(std::unique_ptr<MlmeDisconnectEvent> event) override;
+ void OnDisassociate(std::unique_ptr<MlmeDisassociateEvent> event) override;
+
+ private:
+ ClientInterfaceImpl* client_interface_;
+};
// Holds the guts of how we control network interfaces capable of connecting to
// access points via wpa_supplicant.
// keep this object separate from the binder representation of itself.
class ClientInterfaceImpl {
public:
- ClientInterfaceImpl(const std::string& interface_name,
- uint32_t interface_index);
- ~ClientInterfaceImpl();
+ ClientInterfaceImpl(
+ uint32_t wiphy_index,
+ const std::string& interface_name,
+ uint32_t interface_index,
+ const std::vector<uint8_t>& interface_mac_addr,
+ android::wifi_system::InterfaceTool* if_tool,
+ android::wifi_system::SupplicantManager* supplicant_manager,
+ NetlinkUtils* netlink_utils,
+ ScanUtils* scan_utils);
+ virtual ~ClientInterfaceImpl();
// Get a pointer to the binder representing this ClientInterfaceImpl.
android::sp<android::net::wifi::IClientInterface> GetBinder() const;
bool EnableSupplicant();
bool DisableSupplicant();
+ bool GetPacketCounters(std::vector<int32_t>* out_packet_counters);
+ bool SignalPoll(std::vector<int32_t>* out_signal_poll_results);
+ const std::vector<uint8_t>& GetMacAddress();
+ const std::string& GetInterfaceName() const { return interface_name_; }
+ const android::sp<ScannerImpl> GetScanner() { return scanner_; };
+ bool requestANQP(
+ const ::std::vector<uint8_t>& bssid,
+ const ::android::sp<::android::net::wifi::IANQPDoneCallback>& callback);
+ virtual bool IsAssociated() const;
+ void Dump(std::stringstream* ss) const;
private:
+ bool RefreshAssociateFreq();
+
+ const uint32_t wiphy_index_;
const std::string interface_name_;
const uint32_t interface_index_;
+ const std::vector<uint8_t> interface_mac_addr_;
+ android::wifi_system::InterfaceTool* const if_tool_;
+ android::wifi_system::SupplicantManager* const supplicant_manager_;
+ NetlinkUtils* const netlink_utils_;
+ ScanUtils* const scan_utils_;
+ const std::shared_ptr<OffloadServiceUtils> offload_service_utils_;
+ const std::unique_ptr<MlmeEventHandlerImpl> mlme_event_handler_;
const android::sp<ClientInterfaceBinder> binder_;
+ android::sp<ScannerImpl> scanner_;
+
+ // Cached information for this connection.
+ bool is_associated_;
+ std::vector<uint8_t> bssid_;
+ uint32_t associate_freq_;
+
+ // Capability information for this wiphy/interface.
+ BandInfo band_info_;
+ ScanCapabilities scan_capabilities_;
+ WiphyFeatures wiphy_features_;
DISALLOW_COPY_AND_ASSIGN(ClientInterfaceImpl);
+ friend class MlmeEventHandlerImpl;
};
} // namespace wificond