// Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef SHILL_WPA_SUPPLICANT_H
#define SHILL_WPA_SUPPLICANT_H

#include <base/basictypes.h>

namespace shill {

namespace wpa_supplicant {
extern const char kBSSPropertyBSSID[];
extern const char kBSSPropertyFrequency[];
extern const char kBSSPropertyIEs[];
extern const char kBSSPropertyMode[];
extern const char kBSSPropertyRates[];
extern const char kBSSPropertySSID[];
extern const char kBSSPropertySignal[];
extern const char kCaPath[];
extern const char kCurrentBSSNull[];
extern const char kDBusAddr[];
extern const char kDBusPath[];
extern const char kDriverNL80211[];
extern const char kEnginePKCS11[];
extern const char kErrorInterfaceExists[];
extern const char kInterfacePropertyConfigFile[];
extern const char kInterfacePropertyCurrentBSS[];
extern const char kInterfacePropertyDepth[];
extern const char kInterfacePropertyDriver[];
extern const char kInterfacePropertyName[];
extern const char kInterfacePropertyState[];
extern const char kInterfacePropertySubject[];
extern const char kInterfaceState4WayHandshake[];
extern const char kInterfaceStateAssociated[];
extern const char kInterfaceStateAssociating[];
extern const char kInterfaceStateAuthenticating[];
extern const char kInterfaceStateCompleted[];
extern const char kInterfaceStateDisconnected[];
extern const char kInterfaceStateGroupHandshake[];
extern const char kInterfaceStateInactive[];
extern const char kInterfaceStateScanning[];
extern const char kKeyManagementMethodSuffixEAP[];
extern const char kKeyManagementMethodSuffixPSK[];
extern const char kKeyModeNone[];
extern const char kNetworkBgscanMethodLearn[];
extern const char kNetworkBgscanMethodSimple[];
extern const char kNetworkModeInfrastructure[];
extern const char kNetworkModeAdHoc[];
extern const char kNetworkModeAccessPoint[];
extern const char kNetworkPropertyBgscan[];
extern const char kNetworkPropertyCaPath[];
extern const char kNetworkPropertyEapKeyManagement[];
extern const char kNetworkPropertyEapIdentity[];
extern const char kNetworkPropertyEapEap[];
extern const char kNetworkPropertyEapInnerEap[];
extern const char kNetworkPropertyEapAnonymousIdentity[];
extern const char kNetworkPropertyEapClientCert[];
extern const char kNetworkPropertyEapPrivateKey[];
extern const char kNetworkPropertyEapPrivateKeyPassword[];
extern const char kNetworkPropertyEapCaCert[];
extern const char kNetworkPropertyEapCaPassword[];
extern const char kNetworkPropertyEapCertId[];
extern const char kNetworkPropertyEapKeyId[];
extern const char kNetworkPropertyEapCaCertId[];
extern const char kNetworkPropertyEapPin[];
extern const char kNetworkPropertyEapSubjectMatch[];
extern const char kNetworkPropertyEngine[];
extern const char kNetworkPropertyEngineId[];
extern const char kNetworkPropertyMode[];
extern const char kNetworkPropertySSID[];
extern const char kNetworkPropertyScanSSID[];
// TODO(quiche): Make the naming scheme more consistent, by adding the
// object type to the property names below. (crosbug.com/23656)
extern const char kPropertyAuthAlg[];
extern const char kPropertyBSSID[];
extern const char kPropertyMode[];
extern const char kPropertyPreSharedKey[];
extern const char kPropertyPrivacy[];
extern const char kPropertyRSN[];
extern const char kPropertyScanSSIDs[];
extern const char kPropertyScanType[];
extern const char kPropertySecurityProtocol[];
extern const char kPropertySignal[];
extern const char kPropertyWEPKey[];
extern const char kPropertyWEPTxKeyIndex[];
extern const char kPropertyWPA[];
extern const char kScanTypeActive[];
extern const char kSecurityAuthAlg[];
extern const char kSecurityMethodPropertyKeyManagement[];
extern const char kSecurityModeRSN[];
extern const char kSecurityModeWPA[];

extern const uint32_t kDefaultEngine;
extern const uint32_t kNetworkModeInfrastructureInt;
extern const uint32_t kNetworkModeAdHocInt;
extern const uint32_t kNetworkModeAccessPointInt;
extern const uint32_t kScanMaxSSIDsPerScan;
};

}  // namespace shill

#endif  // SHILL_WPA_SUPPLICANT_H
