blob: 58f65a907ff599d20f5901e720d30a8c913f7a5f [file] [log] [blame]
Peter Qiuf0731732014-11-11 09:46:41 -08001// Copyright 2014 The Chromium OS Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef APMANAGER_CONFIG_H_
6#define APMANAGER_CONFIG_H_
7
8#include <memory>
9#include <string>
10
11#include <base/macros.h>
12#include <chromeos/errors/error.h>
13
14#include "apmanager/dbus_adaptors/org.chromium.apmanager.Config.h"
15
16namespace apmanager {
17
Peter Qiufb39ba42014-11-21 09:09:59 -080018class Device;
19class Manager;
20
Peter Qiuf0731732014-11-11 09:46:41 -080021class Config
22 : public org::chromium::apmanager::ConfigAdaptor,
23 public org::chromium::apmanager::ConfigInterface {
24 public:
Peter Qiufb39ba42014-11-21 09:09:59 -080025 Config(Manager* manager, const std::string& service_path);
Peter Qiuf0731732014-11-11 09:46:41 -080026 virtual ~Config();
27
Peter Qiu376e4042014-11-13 09:40:28 -080028 // Register Config DBus object.
29 void RegisterAsync(
30 chromeos::dbus_utils::ExportedObjectManager* object_manager,
31 chromeos::dbus_utils::AsyncEventSequencer* sequencer);
32
Peter Qiuf0731732014-11-11 09:46:41 -080033 // Generate a config file string for a hostapd instance. Raise appropriate
34 // error when encounter invalid configuration. Return true if success,
35 // false otherwise.
36 virtual bool GenerateConfigFile(chromeos::ErrorPtr* error,
37 std::string* config_str);
38
Peter Qiufb39ba42014-11-21 09:09:59 -080039 // Claim and release the device needed for this configuration.
40 virtual bool ClaimDevice();
41 virtual bool ReleaseDevice();
42
Peter Qiuf0731732014-11-11 09:46:41 -080043 const std::string& control_interface() const { return control_interface_; }
44 void set_control_interface(const std::string& control_interface) {
45 control_interface_ = control_interface;
46 }
47
48 const dbus::ObjectPath& dbus_path() const { return dbus_path_; }
49
50 private:
51 // Keys used in hostapd config file.
52 static const char kHostapdConfigKeyBridgeInterface[];
53 static const char kHostapdConfigKeyChannel[];
54 static const char kHostapdConfigKeyControlInterface[];
55 static const char kHostapdConfigKeyDriver[];
56 static const char kHostapdConfigKeyFragmThreshold[];
57 static const char kHostapdConfigKeyHwMode[];
58 static const char kHostapdConfigKeyIeee80211ac[];
59 static const char kHostapdConfigKeyIeee80211n[];
60 static const char kHostapdConfigKeyIgnoreBroadcastSsid[];
61 static const char kHostapdConfigKeyInterface[];
62 static const char kHostapdConfigKeyRsnPairwise[];
63 static const char kHostapdConfigKeyRtsThreshold[];
64 static const char kHostapdConfigKeySsid[];
65 static const char kHostapdConfigKeyWepDefaultKey[];
66 static const char kHostapdConfigKeyWepKey0[];
67 static const char kHostapdConfigKeyWpa[];
68 static const char kHostapdConfigKeyWpaKeyMgmt[];
69 static const char kHostapdConfigKeyWpaPassphrase[];
70
71 // Hardware mode value for hostapd config file.
72 static const char kHostapdHwMode80211a[];
73 static const char kHostapdHwMode80211b[];
74 static const char kHostapdHwMode80211g[];
75
76 // Default hostapd configuration values. User will not be able to configure
77 // these.
78 static const char kHostapdDefaultDriver[];
79 static const char kHostapdDefaultRsnPairwise[];
80 static const char kHostapdDefaultWpaKeyMgmt[];
81 static const int kHostapdDefaultFragmThreshold;
82 static const int kHostapdDefaultRtsThreshold;
83
84 // Default config property values.
85 static const uint16_t kPropertyDefaultChannel;;
86 static const bool kPropertyDefaultHiddenNetwork;
87 static const uint16_t kPropertyDefaultServerAddressIndex;
88
89 // Append default hostapd configurations to the config file.
90 bool AppendHostapdDefaults(chromeos::ErrorPtr* error,
91 std::string* config_str);
92
93 // Append hardware mode related configurations to the config file.
94 bool AppendHwMode(chromeos::ErrorPtr* error, std::string* config_str);
95
96 // Determine/append interface configuration to the config file.
97 bool AppendInterface(chromeos::ErrorPtr* error, std::string* config_str);
98
99 // Append security related configurations to the config file.
100 bool AppendSecurityMode(chromeos::ErrorPtr* error, std::string* config_str);
101
Peter Qiufb39ba42014-11-21 09:09:59 -0800102 Manager* manager_;
Peter Qiuf0731732014-11-11 09:46:41 -0800103 dbus::ObjectPath dbus_path_;
104 std::string control_interface_;
Peter Qiu376e4042014-11-13 09:40:28 -0800105 std::unique_ptr<chromeos::dbus_utils::DBusObject> dbus_object_;
Peter Qiufb39ba42014-11-21 09:09:59 -0800106 scoped_refptr<Device> device_;
Peter Qiuf0731732014-11-11 09:46:41 -0800107
108 DISALLOW_COPY_AND_ASSIGN(Config);
109};
110
111} // namespace apmanager
112
113#endif // APMANAGER_CONFIG_H_