357 lines
11 KiB
C++
357 lines
11 KiB
C++
/*
|
|
* Copyright (C) 2008 The Android Open Source Project
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
#ifndef _WIFI_NETWORK_H
|
|
#define _WIFI_NETWORK_H
|
|
|
|
#include <sys/types.h>
|
|
|
|
#include <utils/List.h>
|
|
|
|
#include "Property.h"
|
|
|
|
class PropertyManager;
|
|
|
|
class KeyManagementMask {
|
|
public:
|
|
static const uint32_t UNKNOWN = 0;
|
|
static const uint32_t NONE = 0x01;
|
|
static const uint32_t WPA_PSK = 0x02;
|
|
static const uint32_t WPA_EAP = 0x04;
|
|
static const uint32_t IEEE8021X = 0x08;
|
|
static const uint32_t ALL = WPA_PSK | WPA_EAP | IEEE8021X;
|
|
};
|
|
|
|
class SecurityProtocolMask {
|
|
public:
|
|
static const uint32_t WPA = 0x01;
|
|
static const uint32_t RSN = 0x02;
|
|
};
|
|
|
|
class AuthenticationAlgorithmMask {
|
|
public:
|
|
static const uint32_t OPEN = 0x01;
|
|
static const uint32_t SHARED = 0x02;
|
|
static const uint32_t LEAP = 0x04;
|
|
};
|
|
|
|
class PairwiseCiphersMask {
|
|
public:
|
|
static const uint32_t NONE = 0x00;
|
|
static const uint32_t TKIP = 0x01;
|
|
static const uint32_t CCMP = 0x02;
|
|
};
|
|
|
|
class GroupCiphersMask {
|
|
public:
|
|
static const uint32_t WEP40 = 0x01;
|
|
static const uint32_t WEP104 = 0x02;
|
|
static const uint32_t TKIP = 0x04;
|
|
static const uint32_t CCMP = 0x08;
|
|
};
|
|
|
|
class Supplicant;
|
|
class Controller;
|
|
class WifiController;
|
|
|
|
class WifiNetwork {
|
|
class WifiNetworkIntegerProperty : public IntegerProperty {
|
|
protected:
|
|
WifiNetwork *mWn;
|
|
public:
|
|
WifiNetworkIntegerProperty(WifiNetwork *wn, const char *name, bool ro,
|
|
int elements);
|
|
virtual ~WifiNetworkIntegerProperty() {}
|
|
virtual int set(int idx, int value) = 0;
|
|
virtual int get(int idx, int *buffer) = 0;
|
|
};
|
|
friend class WifiNetwork::WifiNetworkIntegerProperty;
|
|
|
|
class WifiNetworkStringProperty : public StringProperty {
|
|
protected:
|
|
WifiNetwork *mWn;
|
|
public:
|
|
WifiNetworkStringProperty(WifiNetwork *wn, const char *name, bool ro,
|
|
int elements);
|
|
virtual ~WifiNetworkStringProperty() {}
|
|
virtual int set(int idx, const char *value) = 0;
|
|
virtual int get(int idx, char *buffer, size_t max) = 0;
|
|
};
|
|
friend class WifiNetwork::WifiNetworkStringProperty;
|
|
|
|
class WifiNetworkEnabledProperty : public WifiNetworkIntegerProperty {
|
|
public:
|
|
WifiNetworkEnabledProperty(WifiNetwork *wn);
|
|
virtual ~WifiNetworkEnabledProperty() {};
|
|
int set(int idx, int value);
|
|
int get(int idx, int *buffer);
|
|
};
|
|
|
|
class WifiNetworkPriorityProperty : public WifiNetworkIntegerProperty {
|
|
public:
|
|
WifiNetworkPriorityProperty(WifiNetwork *wn);
|
|
virtual ~WifiNetworkPriorityProperty() {};
|
|
int set(int idx, int value);
|
|
int get(int idx, int *buffer);
|
|
};
|
|
|
|
class WifiNetworkDefaultKeyIndexProperty : public WifiNetworkIntegerProperty {
|
|
public:
|
|
WifiNetworkDefaultKeyIndexProperty(WifiNetwork *wn);
|
|
virtual ~WifiNetworkDefaultKeyIndexProperty() {};
|
|
int set(int idx, int value);
|
|
int get(int idx, int *buffer);
|
|
};
|
|
|
|
class WifiNetworkSsidProperty : public WifiNetworkStringProperty {
|
|
public:
|
|
WifiNetworkSsidProperty(WifiNetwork *wn);
|
|
virtual ~WifiNetworkSsidProperty() {};
|
|
int set(int idx, const char *value);
|
|
int get(int idx, char *buffer, size_t max);
|
|
};
|
|
|
|
class WifiNetworkBssidProperty : public WifiNetworkStringProperty {
|
|
public:
|
|
WifiNetworkBssidProperty(WifiNetwork *wn);
|
|
virtual ~WifiNetworkBssidProperty() {};
|
|
int set(int idx, const char *value);
|
|
int get(int idx, char *buffer, size_t max);
|
|
};
|
|
|
|
class WifiNetworkPskProperty : public WifiNetworkStringProperty {
|
|
public:
|
|
WifiNetworkPskProperty(WifiNetwork *wn);
|
|
virtual ~WifiNetworkPskProperty() {};
|
|
int set(int idx, const char *value);
|
|
int get(int idx, char *buffer, size_t max);
|
|
};
|
|
|
|
class WifiNetworkKeyManagementProperty : public WifiNetworkStringProperty {
|
|
public:
|
|
WifiNetworkKeyManagementProperty(WifiNetwork *wn);
|
|
virtual ~WifiNetworkKeyManagementProperty() {};
|
|
int set(int idx, const char *value);
|
|
int get(int idx, char *buffer, size_t max);
|
|
};
|
|
|
|
class WifiNetworkAuthAlgorithmsProperty : public WifiNetworkStringProperty {
|
|
public:
|
|
WifiNetworkAuthAlgorithmsProperty(WifiNetwork *wn);
|
|
virtual ~WifiNetworkAuthAlgorithmsProperty() {};
|
|
int set(int idx, const char *value);
|
|
int get(int idx, char *buffer, size_t max);
|
|
};
|
|
|
|
class WifiNetworkProtocolsProperty : public WifiNetworkStringProperty {
|
|
public:
|
|
WifiNetworkProtocolsProperty(WifiNetwork *wn);
|
|
virtual ~WifiNetworkProtocolsProperty() {};
|
|
int set(int idx, const char *value);
|
|
int get(int idx, char *buffer, size_t max);
|
|
};
|
|
|
|
class WifiNetworkWepKeyProperty : public WifiNetworkStringProperty {
|
|
public:
|
|
WifiNetworkWepKeyProperty(WifiNetwork *wn);
|
|
virtual ~WifiNetworkWepKeyProperty() {};
|
|
int set(int idx, const char *value);
|
|
int get(int idx, char *buffer, size_t max);
|
|
};
|
|
|
|
class WifiNetworkPairwiseCiphersProperty : public WifiNetworkStringProperty {
|
|
public:
|
|
WifiNetworkPairwiseCiphersProperty(WifiNetwork *wn);
|
|
virtual ~WifiNetworkPairwiseCiphersProperty() {};
|
|
int set(int idx, const char *value);
|
|
int get(int idx, char *buffer, size_t max);
|
|
};
|
|
|
|
class WifiNetworkGroupCiphersProperty : public WifiNetworkStringProperty {
|
|
public:
|
|
WifiNetworkGroupCiphersProperty(WifiNetwork *wn);
|
|
virtual ~WifiNetworkGroupCiphersProperty() {};
|
|
int set(int idx, const char *value);
|
|
int get(int idx, char *buffer, size_t max);
|
|
};
|
|
|
|
class WifiNetworkHiddenSsidProperty : public WifiNetworkStringProperty {
|
|
public:
|
|
WifiNetworkHiddenSsidProperty(WifiNetwork *wn);
|
|
virtual ~WifiNetworkHiddenSsidProperty() {};
|
|
int set(int idx, const char *value);
|
|
int get(int idx, char *buffer, size_t max);
|
|
};
|
|
|
|
private:
|
|
Supplicant *mSuppl;
|
|
WifiController *mController;
|
|
|
|
/*
|
|
* Unique network id - normally provided by supplicant
|
|
*/
|
|
int mNetid;
|
|
|
|
/*
|
|
* The networks' SSID. Can either be an ASCII string,
|
|
* which must be enclosed in double quotation marks
|
|
* (ie: "MyNetwork"), or a string of hex digits which
|
|
* are not enclosed in quotes (ie: 01ab7893)
|
|
*/
|
|
char *mSsid;
|
|
|
|
/*
|
|
* When set, this entry should only be used
|
|
* when associating with the AP having the specified
|
|
* BSSID. The value is a string in the format of an
|
|
* Ethernet MAC address
|
|
*/
|
|
char *mBssid;
|
|
|
|
/*
|
|
* Pre-shared key for use with WPA-PSK
|
|
*/
|
|
char *mPsk;
|
|
|
|
/*
|
|
* Up to four WEP keys. Either in ASCII string enclosed in
|
|
* double quotes, or a string of hex digits
|
|
*/
|
|
char *mWepKeys[4];
|
|
|
|
/*
|
|
* Default WEP key index, ranging from 0 -> NUM_WEP_KEYS -1
|
|
*/
|
|
int mDefaultKeyIndex;
|
|
|
|
/*
|
|
* Priority determines the preference given to a network by
|
|
* supplicant when choosing an access point with which
|
|
* to associate
|
|
*/
|
|
int mPriority;
|
|
|
|
/*
|
|
* This is a network that does not broadcast it's SSID, so an
|
|
* SSID-specific probe request must be used for scans.
|
|
*/
|
|
char *mHiddenSsid;
|
|
|
|
/*
|
|
* The set of key management protocols supported by this configuration.
|
|
*/
|
|
uint32_t mKeyManagement;
|
|
|
|
/*
|
|
* The set of security protocols supported by this configuration.
|
|
*/
|
|
uint32_t mProtocols;
|
|
|
|
/*
|
|
* The set of authentication protocols supported by this configuration.
|
|
*/
|
|
uint32_t mAuthAlgorithms;
|
|
|
|
/*
|
|
* The set of pairwise ciphers for WPA supported by this configuration.
|
|
*/
|
|
uint32_t mPairwiseCiphers;
|
|
|
|
/*
|
|
* The set of group ciphers for WPA supported by this configuration.
|
|
*/
|
|
uint32_t mGroupCiphers;
|
|
|
|
/*
|
|
* Set if this Network is enabled
|
|
*/
|
|
bool mEnabled;
|
|
|
|
char *mPropNamespace;
|
|
struct {
|
|
WifiNetworkEnabledProperty *propEnabled;
|
|
WifiNetworkSsidProperty *propSsid;
|
|
WifiNetworkBssidProperty *propBssid;
|
|
WifiNetworkPskProperty *propPsk;
|
|
WifiNetworkWepKeyProperty *propWepKey;
|
|
WifiNetworkDefaultKeyIndexProperty *propDefKeyIdx;
|
|
WifiNetworkPriorityProperty *propPriority;
|
|
WifiNetworkKeyManagementProperty *propKeyManagement;
|
|
WifiNetworkProtocolsProperty *propProtocols;
|
|
WifiNetworkAuthAlgorithmsProperty *propAuthAlgorithms;
|
|
WifiNetworkPairwiseCiphersProperty *propPairwiseCiphers;
|
|
WifiNetworkGroupCiphersProperty *propGroupCiphers;
|
|
WifiNetworkHiddenSsidProperty *propHiddenSsid;
|
|
} mStaticProperties;
|
|
private:
|
|
WifiNetwork();
|
|
|
|
public:
|
|
WifiNetwork(WifiController *c, Supplicant *suppl, int networkId);
|
|
WifiNetwork(WifiController *c, Supplicant *suppl, const char *data);
|
|
|
|
virtual ~WifiNetwork();
|
|
|
|
WifiNetwork *clone();
|
|
int attachProperties(PropertyManager *pm, const char *nsName);
|
|
int detachProperties(PropertyManager *pm, const char *nsName);
|
|
|
|
int getNetworkId() { return mNetid; }
|
|
const char *getSsid() { return mSsid; }
|
|
const char *getBssid() { return mBssid; }
|
|
const char *getPsk() { return mPsk; }
|
|
const char *getWepKey(int idx) { return mWepKeys[idx]; }
|
|
int getDefaultKeyIndex() { return mDefaultKeyIndex; }
|
|
int getPriority() { return mPriority; }
|
|
const char *getHiddenSsid() { return mHiddenSsid; }
|
|
uint32_t getKeyManagement() { return mKeyManagement; }
|
|
uint32_t getProtocols() { return mProtocols; }
|
|
uint32_t getAuthAlgorithms() { return mAuthAlgorithms; }
|
|
uint32_t getPairwiseCiphers() { return mPairwiseCiphers; }
|
|
uint32_t getGroupCiphers() { return mGroupCiphers; }
|
|
bool getEnabled() { return mEnabled; }
|
|
Controller *getController() { return (Controller *) mController; }
|
|
|
|
int setEnabled(bool enabled);
|
|
int setSsid(const char *ssid);
|
|
int setBssid(const char *bssid);
|
|
int setPsk(const char *psk);
|
|
int setWepKey(int idx, const char *key);
|
|
int setDefaultKeyIndex(int idx);
|
|
int setPriority(int pri);
|
|
int setHiddenSsid(const char *ssid);
|
|
int setKeyManagement(uint32_t mask);
|
|
int setProtocols(uint32_t mask);
|
|
int setAuthAlgorithms(uint32_t mask);
|
|
int setPairwiseCiphers(uint32_t mask);
|
|
int setGroupCiphers(uint32_t mask);
|
|
|
|
// XXX:Should this really be exposed?.. meh
|
|
int refresh();
|
|
|
|
private:
|
|
int parseKeyManagementMask(const char *buffer, uint32_t *mask);
|
|
int parseProtocolsMask(const char *buffer, uint32_t *mask);
|
|
int parseAuthAlgorithmsMask(const char *buffer, uint32_t *mask);
|
|
int parsePairwiseCiphersMask(const char *buffer, uint32_t *mask);
|
|
int parseGroupCiphersMask(const char *buffer, uint32_t *mask);
|
|
void createProperties();
|
|
};
|
|
|
|
typedef android::List<WifiNetwork *> WifiNetworkCollection;
|
|
|
|
#endif
|