blob: b6334cb0f5283e375ad75e7a793e5304cca02de8 [file] [log] [blame]
Christopher Wileyc139fbf2016-07-27 13:48:22 -07001/*
2 * Copyright (C) 2016 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17#ifndef WIFICOND_CLIENT_INTERFACE_IMPL_H_
18#define WIFICOND_CLIENT_INTERFACE_IMPL_H_
19
20#include <string>
21
22#include <android-base/macros.h>
23#include <utils/StrongPointer.h>
Christopher Wiley537c1ba2016-08-23 10:56:06 -070024#include <wifi_system/supplicant_manager.h>
Christopher Wileyc139fbf2016-07-27 13:48:22 -070025
26#include "android/net/wifi/IClientInterface.h"
27
28namespace android {
29namespace wificond {
30
31class ClientInterfaceBinder;
Ningyuan Wang14de8b22016-08-18 15:26:15 -070032class ScanUtils;
Christopher Wileyc139fbf2016-07-27 13:48:22 -070033
34// Holds the guts of how we control network interfaces capable of connecting to
35// access points via wpa_supplicant.
36//
37// Because remote processes may hold on to the corresponding
38// binder object past the lifetime of the local object, we are forced to
39// keep this object separate from the binder representation of itself.
40class ClientInterfaceImpl {
41 public:
Christopher Wiley537c1ba2016-08-23 10:56:06 -070042 ClientInterfaceImpl(
43 const std::string& interface_name,
44 uint32_t interface_index,
45 const std::vector<uint8_t>& interface_mac_addr,
46 android::wifi_system::SupplicantManager* supplicant_manager,
47 ScanUtils* scan_utils);
Christopher Wileyc139fbf2016-07-27 13:48:22 -070048 ~ClientInterfaceImpl();
49
50 // Get a pointer to the binder representing this ClientInterfaceImpl.
51 android::sp<android::net::wifi::IClientInterface> GetBinder() const;
52
Christopher Wiley66527842016-08-10 09:33:45 -070053 bool EnableSupplicant();
54 bool DisableSupplicant();
55
Christopher Wileyc139fbf2016-07-27 13:48:22 -070056 private:
Ningyuan Wang14de8b22016-08-18 15:26:15 -070057 void OnScanResultsReady(uint32_t interface_index,
58 std::vector<std::vector<uint8_t>>& ssids,
59 std::vector<uint32_t>& frequencies);
60
Christopher Wileyc139fbf2016-07-27 13:48:22 -070061 const std::string interface_name_;
Ningyuan Wang9bc59a02016-08-11 09:59:22 -070062 const uint32_t interface_index_;
Roshan Piusc62360e2016-08-23 11:26:51 -070063 const std::vector<uint8_t> interface_mac_addr_;
Christopher Wiley537c1ba2016-08-23 10:56:06 -070064 android::wifi_system::SupplicantManager* const supplicant_manager_;
Ningyuan Wang14de8b22016-08-18 15:26:15 -070065 ScanUtils* const scan_utils_;
Christopher Wileyc139fbf2016-07-27 13:48:22 -070066 const android::sp<ClientInterfaceBinder> binder_;
67
68 DISALLOW_COPY_AND_ASSIGN(ClientInterfaceImpl);
69};
70
71} // namespace wificond
72} // namespace android
73
74#endif // WIFICOND_CLIENT_INTERFACE_IMPL_H_