1/*
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 ANDROID_WIFI_SYSTEM_HOSTAPD_MANAGER_H
18#define ANDROID_WIFI_SYSTEM_HOSTAPD_MANAGER_H
19
20#include <string>
21#include <vector>
22
23#include <android-base/macros.h>
24
25namespace android {
26namespace wifi_system {
27
28class HostapdManager {
29 public:
30  enum class EncryptionType {
31    kOpen,
32    kWpa,
33    kWpa2,  // Strongly prefer this if at all possible.
34  };
35
36  HostapdManager() = default;
37  virtual ~HostapdManager() = default;
38
39  // Request that hostapd be started.
40  // Returns true on success.
41  virtual bool StartHostapd();
42
43  // Request that a running instance of hostapd be stopped.
44  // Returns true on success.
45  virtual bool StopHostapd();
46
47  // Create a string suitable for writing to the hostapd configuration file.
48  // |interface_name| is a network interface name (e.g. "wlan0").
49  // |ssid| is the SSID used by the configurated network.
50  // |is_hidden| is true iff hostapd should not broadcast the SSID.
51  // |channel| is the WiFi channel (e.g. 6) or <0 for a default value.
52  // |encryption_type| defines the encryption of the configured network.
53  // |passphrase| is ignored for kOpen networks.
54  //
55  // Returns an empty string on failure.
56  virtual std::string CreateHostapdConfig(
57      const std::string& interface_name,
58      const std::vector<uint8_t> ssid,
59      bool is_hidden,
60      int channel,
61      EncryptionType encryption,
62      const std::vector<uint8_t> passphrase);
63
64  // Write out a hostapd configuration file created via CreateHostapdConfig().
65  // Future instances of hostapd will use this new configuration.
66  // Returns true if the configuration file is successfully written.
67  virtual bool WriteHostapdConfig(const std::string& config_file);
68
69 private:
70  DISALLOW_COPY_AND_ASSIGN(HostapdManager);
71};  // class HostapdManager
72
73}  // namespace wifi_system
74}  // namespace android
75
76#endif  // ANDROID_WIFI_SYSTEM_HOSTAPD_MANAGER_H
77