| /* |
| * 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 |