182a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat/*
282a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat * Copyright (C) 2008 The Android Open Source Project
382a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat *
482a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat * Licensed under the Apache License, Version 2.0 (the "License");
582a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat * you may not use this file except in compliance with the License.
682a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat * You may obtain a copy of the License at
782a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat *
882a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat *      http://www.apache.org/licenses/LICENSE-2.0
982a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat *
1082a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat * Unless required by applicable law or agreed to in writing, software
1182a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat * distributed under the License is distributed on an "AS IS" BASIS,
1282a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1382a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat * See the License for the specific language governing permissions and
1482a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat * limitations under the License.
1582a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat */
1682a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat
1782a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat#ifndef _WIFI_NETWORK_H
1882a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat#define _WIFI_NETWORK_H
1982a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat
2082a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat#include <sys/types.h>
2182a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat
223c5a6f0bc8aefc4dacab8e95ba9017a7ac7d91f5San Mehat#include <utils/List.h>
2382a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat
24c4a895b7094461c98101924cf096680bfb7856f1San Mehat#include "Property.h"
25c4a895b7094461c98101924cf096680bfb7856f1San Mehat
26c4a895b7094461c98101924cf096680bfb7856f1San Mehatclass PropertyManager;
27c4a895b7094461c98101924cf096680bfb7856f1San Mehat
2882a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehatclass KeyManagementMask {
2982a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehatpublic:
3021e90f0e10b5a75e583b10799c0084ddab3433d6San Mehat    static const uint32_t UNKNOWN   = 0;
3121e90f0e10b5a75e583b10799c0084ddab3433d6San Mehat    static const uint32_t NONE      = 0x01;
3221e90f0e10b5a75e583b10799c0084ddab3433d6San Mehat    static const uint32_t WPA_PSK   = 0x02;
3321e90f0e10b5a75e583b10799c0084ddab3433d6San Mehat    static const uint32_t WPA_EAP   = 0x04;
3421e90f0e10b5a75e583b10799c0084ddab3433d6San Mehat    static const uint32_t IEEE8021X = 0x08;
3582a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat    static const uint32_t ALL       = WPA_PSK | WPA_EAP | IEEE8021X;
3682a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat};
3782a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat
3882a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehatclass SecurityProtocolMask {
3982a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehatpublic:
4082a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat    static const uint32_t WPA = 0x01;
4182a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat    static const uint32_t RSN = 0x02;
4282a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat};
4382a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat
4482a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehatclass AuthenticationAlgorithmMask {
4582a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehatpublic:
4682a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat    static const uint32_t OPEN   = 0x01;
4782a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat    static const uint32_t SHARED = 0x02;
4882a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat    static const uint32_t LEAP   = 0x04;
4982a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat};
5082a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat
513c5a6f0bc8aefc4dacab8e95ba9017a7ac7d91f5San Mehatclass PairwiseCiphersMask {
5282a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehatpublic:
5382a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat    static const uint32_t NONE = 0x00;
5482a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat    static const uint32_t TKIP = 0x01;
5582a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat    static const uint32_t CCMP = 0x02;
5682a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat};
5782a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat
583c5a6f0bc8aefc4dacab8e95ba9017a7ac7d91f5San Mehatclass GroupCiphersMask {
5982a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehatpublic:
6082a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat    static const uint32_t WEP40  = 0x01;
6182a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat    static const uint32_t WEP104 = 0x02;
6282a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat    static const uint32_t TKIP   = 0x04;
6382a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat    static const uint32_t CCMP   = 0x08;
6482a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat};
6582a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat
6682a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehatclass Supplicant;
673c5a6f0bc8aefc4dacab8e95ba9017a7ac7d91f5San Mehatclass Controller;
683c5a6f0bc8aefc4dacab8e95ba9017a7ac7d91f5San Mehatclass WifiController;
6982a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat
70c4a895b7094461c98101924cf096680bfb7856f1San Mehatclass WifiNetwork {
71c4a895b7094461c98101924cf096680bfb7856f1San Mehat    class WifiNetworkIntegerProperty : public IntegerProperty {
72c4a895b7094461c98101924cf096680bfb7856f1San Mehat    protected:
73c4a895b7094461c98101924cf096680bfb7856f1San Mehat        WifiNetwork *mWn;
74c4a895b7094461c98101924cf096680bfb7856f1San Mehat    public:
75c4a895b7094461c98101924cf096680bfb7856f1San Mehat        WifiNetworkIntegerProperty(WifiNetwork *wn, const char *name, bool ro,
76c4a895b7094461c98101924cf096680bfb7856f1San Mehat                                   int elements);
77c4a895b7094461c98101924cf096680bfb7856f1San Mehat        virtual ~WifiNetworkIntegerProperty() {}
78c4a895b7094461c98101924cf096680bfb7856f1San Mehat        virtual int set(int idx, int value) = 0;
79c4a895b7094461c98101924cf096680bfb7856f1San Mehat        virtual int get(int idx, int *buffer) = 0;
80c4a895b7094461c98101924cf096680bfb7856f1San Mehat    };
81c4a895b7094461c98101924cf096680bfb7856f1San Mehat    friend class WifiNetwork::WifiNetworkIntegerProperty;
82c4a895b7094461c98101924cf096680bfb7856f1San Mehat
83c4a895b7094461c98101924cf096680bfb7856f1San Mehat    class WifiNetworkStringProperty : public StringProperty {
84c4a895b7094461c98101924cf096680bfb7856f1San Mehat    protected:
85c4a895b7094461c98101924cf096680bfb7856f1San Mehat        WifiNetwork *mWn;
86c4a895b7094461c98101924cf096680bfb7856f1San Mehat    public:
87c4a895b7094461c98101924cf096680bfb7856f1San Mehat        WifiNetworkStringProperty(WifiNetwork *wn, const char *name, bool ro,
88c4a895b7094461c98101924cf096680bfb7856f1San Mehat                                 int elements);
89c4a895b7094461c98101924cf096680bfb7856f1San Mehat        virtual ~WifiNetworkStringProperty() {}
90c4a895b7094461c98101924cf096680bfb7856f1San Mehat        virtual int set(int idx, const char *value) = 0;
91c4a895b7094461c98101924cf096680bfb7856f1San Mehat        virtual int get(int idx, char *buffer, size_t max) = 0;
92c4a895b7094461c98101924cf096680bfb7856f1San Mehat    };
93c4a895b7094461c98101924cf096680bfb7856f1San Mehat    friend class WifiNetwork::WifiNetworkStringProperty;
94c4a895b7094461c98101924cf096680bfb7856f1San Mehat
95c4a895b7094461c98101924cf096680bfb7856f1San Mehat    class WifiNetworkEnabledProperty : public WifiNetworkIntegerProperty {
96c4a895b7094461c98101924cf096680bfb7856f1San Mehat    public:
97c4a895b7094461c98101924cf096680bfb7856f1San Mehat        WifiNetworkEnabledProperty(WifiNetwork *wn);
98c4a895b7094461c98101924cf096680bfb7856f1San Mehat        virtual ~WifiNetworkEnabledProperty() {};
99c4a895b7094461c98101924cf096680bfb7856f1San Mehat        int set(int idx, int value);
100c4a895b7094461c98101924cf096680bfb7856f1San Mehat        int get(int idx, int *buffer);
101c4a895b7094461c98101924cf096680bfb7856f1San Mehat    };
102c4a895b7094461c98101924cf096680bfb7856f1San Mehat
103c4a895b7094461c98101924cf096680bfb7856f1San Mehat    class WifiNetworkPriorityProperty : public WifiNetworkIntegerProperty {
104c4a895b7094461c98101924cf096680bfb7856f1San Mehat    public:
105c4a895b7094461c98101924cf096680bfb7856f1San Mehat        WifiNetworkPriorityProperty(WifiNetwork *wn);
106c4a895b7094461c98101924cf096680bfb7856f1San Mehat        virtual ~WifiNetworkPriorityProperty() {};
107c4a895b7094461c98101924cf096680bfb7856f1San Mehat        int set(int idx, int value);
108c4a895b7094461c98101924cf096680bfb7856f1San Mehat        int get(int idx, int *buffer);
109c4a895b7094461c98101924cf096680bfb7856f1San Mehat    };
110c4a895b7094461c98101924cf096680bfb7856f1San Mehat
111c4a895b7094461c98101924cf096680bfb7856f1San Mehat    class WifiNetworkDefaultKeyIndexProperty : public WifiNetworkIntegerProperty {
112c4a895b7094461c98101924cf096680bfb7856f1San Mehat    public:
113c4a895b7094461c98101924cf096680bfb7856f1San Mehat        WifiNetworkDefaultKeyIndexProperty(WifiNetwork *wn);
114c4a895b7094461c98101924cf096680bfb7856f1San Mehat        virtual ~WifiNetworkDefaultKeyIndexProperty() {};
115c4a895b7094461c98101924cf096680bfb7856f1San Mehat        int set(int idx, int value);
116c4a895b7094461c98101924cf096680bfb7856f1San Mehat        int get(int idx, int *buffer);
117c4a895b7094461c98101924cf096680bfb7856f1San Mehat    };
118c4a895b7094461c98101924cf096680bfb7856f1San Mehat
119c4a895b7094461c98101924cf096680bfb7856f1San Mehat    class WifiNetworkSsidProperty : public WifiNetworkStringProperty {
120c4a895b7094461c98101924cf096680bfb7856f1San Mehat    public:
121c4a895b7094461c98101924cf096680bfb7856f1San Mehat        WifiNetworkSsidProperty(WifiNetwork *wn);
122c4a895b7094461c98101924cf096680bfb7856f1San Mehat        virtual ~WifiNetworkSsidProperty() {};
123c4a895b7094461c98101924cf096680bfb7856f1San Mehat        int set(int idx, const char *value);
124c4a895b7094461c98101924cf096680bfb7856f1San Mehat        int get(int idx, char *buffer, size_t max);
125c4a895b7094461c98101924cf096680bfb7856f1San Mehat    };
126c4a895b7094461c98101924cf096680bfb7856f1San Mehat
127c4a895b7094461c98101924cf096680bfb7856f1San Mehat    class WifiNetworkBssidProperty : public WifiNetworkStringProperty {
128c4a895b7094461c98101924cf096680bfb7856f1San Mehat    public:
129c4a895b7094461c98101924cf096680bfb7856f1San Mehat        WifiNetworkBssidProperty(WifiNetwork *wn);
130c4a895b7094461c98101924cf096680bfb7856f1San Mehat        virtual ~WifiNetworkBssidProperty() {};
131c4a895b7094461c98101924cf096680bfb7856f1San Mehat        int set(int idx, const char *value);
132c4a895b7094461c98101924cf096680bfb7856f1San Mehat        int get(int idx, char *buffer, size_t max);
133c4a895b7094461c98101924cf096680bfb7856f1San Mehat    };
134c4a895b7094461c98101924cf096680bfb7856f1San Mehat
135c4a895b7094461c98101924cf096680bfb7856f1San Mehat    class WifiNetworkPskProperty : public WifiNetworkStringProperty {
136c4a895b7094461c98101924cf096680bfb7856f1San Mehat    public:
137c4a895b7094461c98101924cf096680bfb7856f1San Mehat        WifiNetworkPskProperty(WifiNetwork *wn);
138c4a895b7094461c98101924cf096680bfb7856f1San Mehat        virtual ~WifiNetworkPskProperty() {};
139c4a895b7094461c98101924cf096680bfb7856f1San Mehat        int set(int idx, const char *value);
140c4a895b7094461c98101924cf096680bfb7856f1San Mehat        int get(int idx, char *buffer, size_t max);
141c4a895b7094461c98101924cf096680bfb7856f1San Mehat    };
142c4a895b7094461c98101924cf096680bfb7856f1San Mehat
143c4a895b7094461c98101924cf096680bfb7856f1San Mehat    class WifiNetworkKeyManagementProperty : public WifiNetworkStringProperty {
144c4a895b7094461c98101924cf096680bfb7856f1San Mehat    public:
145c4a895b7094461c98101924cf096680bfb7856f1San Mehat        WifiNetworkKeyManagementProperty(WifiNetwork *wn);
146c4a895b7094461c98101924cf096680bfb7856f1San Mehat        virtual ~WifiNetworkKeyManagementProperty() {};
147c4a895b7094461c98101924cf096680bfb7856f1San Mehat        int set(int idx, const char *value);
148c4a895b7094461c98101924cf096680bfb7856f1San Mehat        int get(int idx, char *buffer, size_t max);
149c4a895b7094461c98101924cf096680bfb7856f1San Mehat    };
150c4a895b7094461c98101924cf096680bfb7856f1San Mehat
151c4a895b7094461c98101924cf096680bfb7856f1San Mehat    class WifiNetworkAuthAlgorithmsProperty : public WifiNetworkStringProperty {
152c4a895b7094461c98101924cf096680bfb7856f1San Mehat    public:
153c4a895b7094461c98101924cf096680bfb7856f1San Mehat        WifiNetworkAuthAlgorithmsProperty(WifiNetwork *wn);
154c4a895b7094461c98101924cf096680bfb7856f1San Mehat        virtual ~WifiNetworkAuthAlgorithmsProperty() {};
155c4a895b7094461c98101924cf096680bfb7856f1San Mehat        int set(int idx, const char *value);
156c4a895b7094461c98101924cf096680bfb7856f1San Mehat        int get(int idx, char *buffer, size_t max);
157c4a895b7094461c98101924cf096680bfb7856f1San Mehat    };
158c4a895b7094461c98101924cf096680bfb7856f1San Mehat
159c4a895b7094461c98101924cf096680bfb7856f1San Mehat    class WifiNetworkProtocolsProperty : public WifiNetworkStringProperty {
160c4a895b7094461c98101924cf096680bfb7856f1San Mehat    public:
161c4a895b7094461c98101924cf096680bfb7856f1San Mehat        WifiNetworkProtocolsProperty(WifiNetwork *wn);
162c4a895b7094461c98101924cf096680bfb7856f1San Mehat        virtual ~WifiNetworkProtocolsProperty() {};
163c4a895b7094461c98101924cf096680bfb7856f1San Mehat        int set(int idx, const char *value);
164c4a895b7094461c98101924cf096680bfb7856f1San Mehat        int get(int idx, char *buffer, size_t max);
165c4a895b7094461c98101924cf096680bfb7856f1San Mehat    };
166c4a895b7094461c98101924cf096680bfb7856f1San Mehat
167c4a895b7094461c98101924cf096680bfb7856f1San Mehat    class WifiNetworkWepKeyProperty : public WifiNetworkStringProperty {
168c4a895b7094461c98101924cf096680bfb7856f1San Mehat    public:
169c4a895b7094461c98101924cf096680bfb7856f1San Mehat        WifiNetworkWepKeyProperty(WifiNetwork *wn);
170c4a895b7094461c98101924cf096680bfb7856f1San Mehat        virtual ~WifiNetworkWepKeyProperty() {};
171c4a895b7094461c98101924cf096680bfb7856f1San Mehat        int set(int idx, const char *value);
172c4a895b7094461c98101924cf096680bfb7856f1San Mehat        int get(int idx, char *buffer, size_t max);
173c4a895b7094461c98101924cf096680bfb7856f1San Mehat    };
174c4a895b7094461c98101924cf096680bfb7856f1San Mehat
175c4a895b7094461c98101924cf096680bfb7856f1San Mehat    class WifiNetworkPairwiseCiphersProperty : public WifiNetworkStringProperty {
176c4a895b7094461c98101924cf096680bfb7856f1San Mehat    public:
177c4a895b7094461c98101924cf096680bfb7856f1San Mehat        WifiNetworkPairwiseCiphersProperty(WifiNetwork *wn);
178c4a895b7094461c98101924cf096680bfb7856f1San Mehat        virtual ~WifiNetworkPairwiseCiphersProperty() {};
179c4a895b7094461c98101924cf096680bfb7856f1San Mehat        int set(int idx, const char *value);
180c4a895b7094461c98101924cf096680bfb7856f1San Mehat        int get(int idx, char *buffer, size_t max);
181c4a895b7094461c98101924cf096680bfb7856f1San Mehat    };
182c4a895b7094461c98101924cf096680bfb7856f1San Mehat
183c4a895b7094461c98101924cf096680bfb7856f1San Mehat    class WifiNetworkGroupCiphersProperty : public WifiNetworkStringProperty {
184c4a895b7094461c98101924cf096680bfb7856f1San Mehat    public:
185c4a895b7094461c98101924cf096680bfb7856f1San Mehat        WifiNetworkGroupCiphersProperty(WifiNetwork *wn);
186c4a895b7094461c98101924cf096680bfb7856f1San Mehat        virtual ~WifiNetworkGroupCiphersProperty() {};
187c4a895b7094461c98101924cf096680bfb7856f1San Mehat        int set(int idx, const char *value);
188c4a895b7094461c98101924cf096680bfb7856f1San Mehat        int get(int idx, char *buffer, size_t max);
189c4a895b7094461c98101924cf096680bfb7856f1San Mehat    };
190c4a895b7094461c98101924cf096680bfb7856f1San Mehat
191c4a895b7094461c98101924cf096680bfb7856f1San Mehat    class WifiNetworkHiddenSsidProperty : public WifiNetworkStringProperty {
192c4a895b7094461c98101924cf096680bfb7856f1San Mehat    public:
193c4a895b7094461c98101924cf096680bfb7856f1San Mehat        WifiNetworkHiddenSsidProperty(WifiNetwork *wn);
194c4a895b7094461c98101924cf096680bfb7856f1San Mehat        virtual ~WifiNetworkHiddenSsidProperty() {};
195c4a895b7094461c98101924cf096680bfb7856f1San Mehat        int set(int idx, const char *value);
196c4a895b7094461c98101924cf096680bfb7856f1San Mehat        int get(int idx, char *buffer, size_t max);
197c4a895b7094461c98101924cf096680bfb7856f1San Mehat    };
1983c5a6f0bc8aefc4dacab8e95ba9017a7ac7d91f5San Mehat
1993c5a6f0bc8aefc4dacab8e95ba9017a7ac7d91f5San Mehatprivate:
20082a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat    Supplicant *mSuppl;
2013c5a6f0bc8aefc4dacab8e95ba9017a7ac7d91f5San Mehat    WifiController *mController;
20282a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat
20382a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat    /*
20482a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat     * Unique network id - normally provided by supplicant
20582a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat     */
20682a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat    int mNetid;
20782a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat
20882a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat    /*
20982a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat     * The networks' SSID. Can either be an ASCII string,
21082a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat     * which must be enclosed in double quotation marks
21182a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat     * (ie: "MyNetwork"), or a string of hex digits which
21282a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat     * are not enclosed in quotes (ie: 01ab7893)
21382a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat     */
21482a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat    char *mSsid;
21582a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat
21682a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat    /*
21782a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat     * When set, this entry should only be used
21882a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat     * when associating with the AP having the specified
21982a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat     * BSSID. The value is a string in the format of an
22082a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat     * Ethernet MAC address
22182a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat     */
22282a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat    char *mBssid;
22382a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat
22482a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat    /*
22582a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat     *  Pre-shared key for use with WPA-PSK
22682a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat     */
22782a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat    char *mPsk;
22882a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat
22982a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat    /*
23082a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat     * Up to four WEP keys. Either in ASCII string enclosed in
23182a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat     * double quotes, or a string of hex digits
23282a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat     */
23382a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat    char *mWepKeys[4];
23482a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat
23582a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat    /*
23682a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat     * Default WEP key index, ranging from 0 -> NUM_WEP_KEYS -1
23782a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat     */
23882a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat    int mDefaultKeyIndex;
23982a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat
24082a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat    /*
24182a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat     * Priority determines the preference given to a network by
24282a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat     * supplicant when choosing an access point with which
24382a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat     * to associate
24482a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat     */
24582a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat    int mPriority;
24682a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat
24782a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat    /*
24882a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat     * This is a network that does not broadcast it's SSID, so an
24982a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat     * SSID-specific probe request must be used for scans.
25082a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat     */
25182a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat    char *mHiddenSsid;
25282a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat
25382a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat    /*
25482a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat     * The set of key management protocols supported by this configuration.
25582a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat     */
256c4a895b7094461c98101924cf096680bfb7856f1San Mehat    uint32_t mKeyManagement;
25782a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat
25882a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat    /*
25982a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat     * The set of security protocols supported by this configuration.
26082a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat     */
261c4a895b7094461c98101924cf096680bfb7856f1San Mehat    uint32_t mProtocols;
26282a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat
26382a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat    /*
26482a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat     * The set of authentication protocols supported by this configuration.
26582a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat     */
266c4a895b7094461c98101924cf096680bfb7856f1San Mehat    uint32_t mAuthAlgorithms;
26782a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat
26882a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat    /*
26982a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat     * The set of pairwise ciphers for WPA supported by this configuration.
27082a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat     */
271c4a895b7094461c98101924cf096680bfb7856f1San Mehat    uint32_t mPairwiseCiphers;
27282a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat
27382a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat    /*
27482a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat     * The set of group ciphers for WPA supported by this configuration.
27582a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat     */
276c4a895b7094461c98101924cf096680bfb7856f1San Mehat    uint32_t mGroupCiphers;
27782a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat
2783c5a6f0bc8aefc4dacab8e95ba9017a7ac7d91f5San Mehat    /*
2793c5a6f0bc8aefc4dacab8e95ba9017a7ac7d91f5San Mehat     * Set if this Network is enabled
2803c5a6f0bc8aefc4dacab8e95ba9017a7ac7d91f5San Mehat     */
2813c5a6f0bc8aefc4dacab8e95ba9017a7ac7d91f5San Mehat    bool mEnabled;
2823c5a6f0bc8aefc4dacab8e95ba9017a7ac7d91f5San Mehat
283c4a895b7094461c98101924cf096680bfb7856f1San Mehat    char *mPropNamespace;
284c4a895b7094461c98101924cf096680bfb7856f1San Mehat    struct {
285c4a895b7094461c98101924cf096680bfb7856f1San Mehat        WifiNetworkEnabledProperty               *propEnabled;
286c4a895b7094461c98101924cf096680bfb7856f1San Mehat        WifiNetworkSsidProperty                  *propSsid;
287c4a895b7094461c98101924cf096680bfb7856f1San Mehat        WifiNetworkBssidProperty                 *propBssid;
288c4a895b7094461c98101924cf096680bfb7856f1San Mehat        WifiNetworkPskProperty                   *propPsk;
289c4a895b7094461c98101924cf096680bfb7856f1San Mehat        WifiNetworkWepKeyProperty                *propWepKey;
290c4a895b7094461c98101924cf096680bfb7856f1San Mehat        WifiNetworkDefaultKeyIndexProperty       *propDefKeyIdx;
291c4a895b7094461c98101924cf096680bfb7856f1San Mehat        WifiNetworkPriorityProperty              *propPriority;
292c4a895b7094461c98101924cf096680bfb7856f1San Mehat        WifiNetworkKeyManagementProperty  *propKeyManagement;
293c4a895b7094461c98101924cf096680bfb7856f1San Mehat        WifiNetworkProtocolsProperty      *propProtocols;
294c4a895b7094461c98101924cf096680bfb7856f1San Mehat        WifiNetworkAuthAlgorithmsProperty *propAuthAlgorithms;
295c4a895b7094461c98101924cf096680bfb7856f1San Mehat        WifiNetworkPairwiseCiphersProperty       *propPairwiseCiphers;
296c4a895b7094461c98101924cf096680bfb7856f1San Mehat        WifiNetworkGroupCiphersProperty          *propGroupCiphers;
297c4a895b7094461c98101924cf096680bfb7856f1San Mehat        WifiNetworkHiddenSsidProperty            *propHiddenSsid;
298c4a895b7094461c98101924cf096680bfb7856f1San Mehat    } mStaticProperties;
2993c5a6f0bc8aefc4dacab8e95ba9017a7ac7d91f5San Mehatprivate:
3003c5a6f0bc8aefc4dacab8e95ba9017a7ac7d91f5San Mehat    WifiNetwork();
3013c5a6f0bc8aefc4dacab8e95ba9017a7ac7d91f5San Mehat
30282a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehatpublic:
3033c5a6f0bc8aefc4dacab8e95ba9017a7ac7d91f5San Mehat    WifiNetwork(WifiController *c, Supplicant *suppl, int networkId);
3043c5a6f0bc8aefc4dacab8e95ba9017a7ac7d91f5San Mehat    WifiNetwork(WifiController *c, Supplicant *suppl, const char *data);
3053c5a6f0bc8aefc4dacab8e95ba9017a7ac7d91f5San Mehat
30682a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat    virtual ~WifiNetwork();
30782a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat
3083c5a6f0bc8aefc4dacab8e95ba9017a7ac7d91f5San Mehat    WifiNetwork *clone();
309c4a895b7094461c98101924cf096680bfb7856f1San Mehat    int attachProperties(PropertyManager *pm, const char *nsName);
310c4a895b7094461c98101924cf096680bfb7856f1San Mehat    int detachProperties(PropertyManager *pm, const char *nsName);
3113c5a6f0bc8aefc4dacab8e95ba9017a7ac7d91f5San Mehat
31282a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat    int getNetworkId() { return mNetid; }
31382a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat    const char *getSsid() { return mSsid; }
31482a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat    const char *getBssid() { return mBssid; }
31582a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat    const char *getPsk() { return mPsk; }
31682a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat    const char *getWepKey(int idx) { return mWepKeys[idx]; }
31782a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat    int getDefaultKeyIndex() { return mDefaultKeyIndex; }
31882a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat    int getPriority() { return mPriority; }
31982a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat    const char *getHiddenSsid() { return mHiddenSsid; }
320c4a895b7094461c98101924cf096680bfb7856f1San Mehat    uint32_t getKeyManagement() { return mKeyManagement; }
321c4a895b7094461c98101924cf096680bfb7856f1San Mehat    uint32_t getProtocols() { return mProtocols; }
322c4a895b7094461c98101924cf096680bfb7856f1San Mehat    uint32_t getAuthAlgorithms() { return mAuthAlgorithms; }
323c4a895b7094461c98101924cf096680bfb7856f1San Mehat    uint32_t getPairwiseCiphers() { return mPairwiseCiphers; }
324c4a895b7094461c98101924cf096680bfb7856f1San Mehat    uint32_t getGroupCiphers() { return mGroupCiphers; }
3253c5a6f0bc8aefc4dacab8e95ba9017a7ac7d91f5San Mehat    bool getEnabled() { return mEnabled; }
3263c5a6f0bc8aefc4dacab8e95ba9017a7ac7d91f5San Mehat    Controller *getController() { return (Controller *) mController; }
32782a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat
3283c5a6f0bc8aefc4dacab8e95ba9017a7ac7d91f5San Mehat    int setEnabled(bool enabled);
3293c5a6f0bc8aefc4dacab8e95ba9017a7ac7d91f5San Mehat    int setSsid(const char *ssid);
3303c5a6f0bc8aefc4dacab8e95ba9017a7ac7d91f5San Mehat    int setBssid(const char *bssid);
3313c5a6f0bc8aefc4dacab8e95ba9017a7ac7d91f5San Mehat    int setPsk(const char *psk);
3323c5a6f0bc8aefc4dacab8e95ba9017a7ac7d91f5San Mehat    int setWepKey(int idx, const char *key);
33382a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat    int setDefaultKeyIndex(int idx);
33482a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat    int setPriority(int pri);
3353c5a6f0bc8aefc4dacab8e95ba9017a7ac7d91f5San Mehat    int setHiddenSsid(const char *ssid);
336c4a895b7094461c98101924cf096680bfb7856f1San Mehat    int setKeyManagement(uint32_t mask);
337c4a895b7094461c98101924cf096680bfb7856f1San Mehat    int setProtocols(uint32_t mask);
338c4a895b7094461c98101924cf096680bfb7856f1San Mehat    int setAuthAlgorithms(uint32_t mask);
339c4a895b7094461c98101924cf096680bfb7856f1San Mehat    int setPairwiseCiphers(uint32_t mask);
340c4a895b7094461c98101924cf096680bfb7856f1San Mehat    int setGroupCiphers(uint32_t mask);
3413c5a6f0bc8aefc4dacab8e95ba9017a7ac7d91f5San Mehat
3423c5a6f0bc8aefc4dacab8e95ba9017a7ac7d91f5San Mehat    // XXX:Should this really be exposed?.. meh
3433c5a6f0bc8aefc4dacab8e95ba9017a7ac7d91f5San Mehat    int refresh();
344c4a895b7094461c98101924cf096680bfb7856f1San Mehat
345c4a895b7094461c98101924cf096680bfb7856f1San Mehatprivate:
346c4a895b7094461c98101924cf096680bfb7856f1San Mehat    int parseKeyManagementMask(const char *buffer, uint32_t *mask);
347c4a895b7094461c98101924cf096680bfb7856f1San Mehat    int parseProtocolsMask(const char *buffer, uint32_t *mask);
348c4a895b7094461c98101924cf096680bfb7856f1San Mehat    int parseAuthAlgorithmsMask(const char *buffer, uint32_t *mask);
349c4a895b7094461c98101924cf096680bfb7856f1San Mehat    int parsePairwiseCiphersMask(const char *buffer, uint32_t *mask);
350c4a895b7094461c98101924cf096680bfb7856f1San Mehat    int parseGroupCiphersMask(const char *buffer, uint32_t *mask);
351c4a895b7094461c98101924cf096680bfb7856f1San Mehat    void createProperties();
35282a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat};
35382a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat
35482a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehattypedef android::List<WifiNetwork *> WifiNetworkCollection;
35582a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat
35682a2116e6b67db910bba22c4874e6ca5efd3eec0San Mehat#endif
357