-rw-r--r-- | noncore/net/networksetup/wlan/info.ui | 98 | ||||
-rw-r--r-- | noncore/net/networksetup/wlan/wextensions.cpp | 158 | ||||
-rw-r--r-- | noncore/net/networksetup/wlan/wextensions.h | 32 | ||||
-rw-r--r-- | noncore/net/networksetup/wlan/wlan.pro | 4 | ||||
-rw-r--r-- | noncore/net/networksetup/wlan/wlanmodule.cpp | 164 | ||||
-rw-r--r-- | noncore/net/networksetup/wlan/wlanmodule.h | 5 | ||||
-rw-r--r-- | noncore/settings/networksettings/wlan/info.ui | 98 | ||||
-rw-r--r-- | noncore/settings/networksettings/wlan/wextensions.cpp | 158 | ||||
-rw-r--r-- | noncore/settings/networksettings/wlan/wextensions.h | 32 | ||||
-rw-r--r-- | noncore/settings/networksettings/wlan/wlan.pro | 4 | ||||
-rw-r--r-- | noncore/settings/networksettings/wlan/wlanmodule.cpp | 164 | ||||
-rw-r--r-- | noncore/settings/networksettings/wlan/wlanmodule.h | 5 |
12 files changed, 654 insertions, 268 deletions
diff --git a/noncore/net/networksetup/wlan/info.ui b/noncore/net/networksetup/wlan/info.ui index 018ace3..4e85b1b 100644 --- a/noncore/net/networksetup/wlan/info.ui +++ b/noncore/net/networksetup/wlan/info.ui | |||
@@ -1,110 +1,110 @@ | |||
1 | <!DOCTYPE UI><UI> | 1 | <!DOCTYPE UI><UI> |
2 | <class>WlanInfo</class> | 2 | <class>WlanInfo</class> |
3 | <widget> | 3 | <widget> |
4 | <class>QWidget</class> | 4 | <class>QWidget</class> |
5 | <property stdset="1"> | 5 | <property stdset="1"> |
6 | <name>name</name> | 6 | <name>name</name> |
7 | <cstring>WlanInfo</cstring> | 7 | <cstring>WlanInfo</cstring> |
8 | </property> | 8 | </property> |
9 | <property stdset="1"> | 9 | <property stdset="1"> |
10 | <name>geometry</name> | 10 | <name>geometry</name> |
11 | <rect> | 11 | <rect> |
12 | <x>0</x> | 12 | <x>0</x> |
13 | <y>0</y> | 13 | <y>0</y> |
14 | <width>283</width> | 14 | <width>279</width> |
15 | <height>292</height> | 15 | <height>292</height> |
16 | </rect> | 16 | </rect> |
17 | </property> | 17 | </property> |
18 | <property stdset="1"> | 18 | <property stdset="1"> |
19 | <name>caption</name> | 19 | <name>caption</name> |
20 | <string>WLAN Information</string> | 20 | <string>WLAN Information</string> |
21 | </property> | 21 | </property> |
22 | <vbox> | 22 | <vbox> |
23 | <property stdset="1"> | 23 | <property stdset="1"> |
24 | <name>margin</name> | 24 | <name>margin</name> |
25 | <number>0</number> | 25 | <number>0</number> |
26 | </property> | 26 | </property> |
27 | <property stdset="1"> | 27 | <property stdset="1"> |
28 | <name>spacing</name> | 28 | <name>spacing</name> |
29 | <number>0</number> | 29 | <number>0</number> |
30 | </property> | 30 | </property> |
31 | <widget> | 31 | <widget> |
32 | <class>QTabWidget</class> | 32 | <class>QTabWidget</class> |
33 | <property stdset="1"> | 33 | <property stdset="1"> |
34 | <name>name</name> | 34 | <name>name</name> |
35 | <cstring>tabWidget</cstring> | 35 | <cstring>tabWidget</cstring> |
36 | </property> | 36 | </property> |
37 | <widget> | 37 | <widget> |
38 | <class>QWidget</class> | 38 | <class>QWidget</class> |
39 | <property stdset="1"> | 39 | <property stdset="1"> |
40 | <name>name</name> | 40 | <name>name</name> |
41 | <cstring>Widget2</cstring> | 41 | <cstring>Widget2</cstring> |
42 | </property> | 42 | </property> |
43 | <attribute> | 43 | <attribute> |
44 | <name>title</name> | 44 | <name>title</name> |
45 | <string>802.11b</string> | 45 | <string>802.11b</string> |
46 | </attribute> | 46 | </attribute> |
47 | <grid> | 47 | <grid> |
48 | <property stdset="1"> | 48 | <property stdset="1"> |
49 | <name>margin</name> | 49 | <name>margin</name> |
50 | <number>11</number> | 50 | <number>11</number> |
51 | </property> | 51 | </property> |
52 | <property stdset="1"> | 52 | <property stdset="1"> |
53 | <name>spacing</name> | 53 | <name>spacing</name> |
54 | <number>6</number> | 54 | <number>6</number> |
55 | </property> | 55 | </property> |
56 | <widget row="3" column="0" > | 56 | <widget row="3" column="0" > |
57 | <class>QLabel</class> | 57 | <class>QLabel</class> |
58 | <property stdset="1"> | 58 | <property stdset="1"> |
59 | <name>name</name> | 59 | <name>name</name> |
60 | <cstring>TextLabel4</cstring> | 60 | <cstring>TextLabel4</cstring> |
61 | </property> | 61 | </property> |
62 | <property stdset="1"> | 62 | <property stdset="1"> |
63 | <name>text</name> | 63 | <name>text</name> |
64 | <string>Frequency</string> | 64 | <string>Frequency</string> |
65 | </property> | 65 | </property> |
66 | </widget> | 66 | </widget> |
67 | <widget row="2" column="0" > | 67 | <widget row="2" column="0" > |
68 | <class>QLabel</class> | 68 | <class>QLabel</class> |
69 | <property stdset="1"> | 69 | <property stdset="1"> |
70 | <name>name</name> | 70 | <name>name</name> |
71 | <cstring>TextLabel3</cstring> | 71 | <cstring>TextLabel3</cstring> |
72 | </property> | 72 | </property> |
73 | <property stdset="1"> | 73 | <property stdset="1"> |
74 | <name>text</name> | 74 | <name>text</name> |
75 | <string>Mode</string> | 75 | <string>Mode</string> |
76 | </property> | 76 | </property> |
77 | </widget> | 77 | </widget> |
78 | <widget row="1" column="0" > | 78 | <widget row="1" column="0" > |
79 | <class>QLabel</class> | 79 | <class>QLabel</class> |
80 | <property stdset="1"> | 80 | <property stdset="1"> |
81 | <name>name</name> | 81 | <name>name</name> |
82 | <cstring>TextLabel2</cstring> | 82 | <cstring>TextLabel2</cstring> |
83 | </property> | 83 | </property> |
84 | <property stdset="1"> | 84 | <property stdset="1"> |
85 | <name>text</name> | 85 | <name>text</name> |
86 | <string>ESSID</string> | 86 | <string>ESSID</string> |
87 | </property> | 87 | </property> |
88 | </widget> | 88 | </widget> |
89 | <widget row="0" column="0" > | 89 | <widget row="0" column="0" > |
90 | <class>QLabel</class> | 90 | <class>QLabel</class> |
91 | <property stdset="1"> | 91 | <property stdset="1"> |
92 | <name>name</name> | 92 | <name>name</name> |
93 | <cstring>TextLabel1</cstring> | 93 | <cstring>TextLabel1</cstring> |
94 | </property> | 94 | </property> |
95 | <property stdset="1"> | 95 | <property stdset="1"> |
96 | <name>text</name> | 96 | <name>text</name> |
97 | <string>Station</string> | 97 | <string>Station</string> |
98 | </property> | 98 | </property> |
99 | </widget> | 99 | </widget> |
100 | <widget row="4" column="0" > | 100 | <widget row="4" column="0" > |
101 | <class>QLabel</class> | 101 | <class>QLabel</class> |
102 | <property stdset="1"> | 102 | <property stdset="1"> |
103 | <name>name</name> | 103 | <name>name</name> |
104 | <cstring>TextLabel9</cstring> | 104 | <cstring>TextLabel9</cstring> |
105 | </property> | 105 | </property> |
106 | <property stdset="1"> | 106 | <property stdset="1"> |
107 | <name>text</name> | 107 | <name>text</name> |
108 | <string>AP</string> | 108 | <string>AP</string> |
109 | </property> | 109 | </property> |
110 | </widget> | 110 | </widget> |
@@ -113,122 +113,218 @@ | |||
113 | <property stdset="1"> | 113 | <property stdset="1"> |
114 | <name>name</name> | 114 | <name>name</name> |
115 | <cstring>apLabel</cstring> | 115 | <cstring>apLabel</cstring> |
116 | </property> | 116 | </property> |
117 | <property stdset="1"> | 117 | <property stdset="1"> |
118 | <name>frameShape</name> | 118 | <name>frameShape</name> |
119 | <enum>Panel</enum> | 119 | <enum>Panel</enum> |
120 | </property> | 120 | </property> |
121 | <property stdset="1"> | 121 | <property stdset="1"> |
122 | <name>frameShadow</name> | 122 | <name>frameShadow</name> |
123 | <enum>Sunken</enum> | 123 | <enum>Sunken</enum> |
124 | </property> | 124 | </property> |
125 | </widget> | 125 | </widget> |
126 | <widget row="2" column="1" > | 126 | <widget row="2" column="1" > |
127 | <class>QLabel</class> | 127 | <class>QLabel</class> |
128 | <property stdset="1"> | 128 | <property stdset="1"> |
129 | <name>name</name> | 129 | <name>name</name> |
130 | <cstring>modeLabel</cstring> | 130 | <cstring>modeLabel</cstring> |
131 | </property> | 131 | </property> |
132 | <property stdset="1"> | 132 | <property stdset="1"> |
133 | <name>frameShape</name> | 133 | <name>frameShape</name> |
134 | <enum>Panel</enum> | 134 | <enum>Panel</enum> |
135 | </property> | 135 | </property> |
136 | <property stdset="1"> | 136 | <property stdset="1"> |
137 | <name>frameShadow</name> | 137 | <name>frameShadow</name> |
138 | <enum>Sunken</enum> | 138 | <enum>Sunken</enum> |
139 | </property> | 139 | </property> |
140 | </widget> | 140 | </widget> |
141 | <widget row="1" column="1" > | 141 | <widget row="1" column="1" > |
142 | <class>QLabel</class> | 142 | <class>QLabel</class> |
143 | <property stdset="1"> | 143 | <property stdset="1"> |
144 | <name>name</name> | 144 | <name>name</name> |
145 | <cstring>essidLabel</cstring> | 145 | <cstring>essidLabel</cstring> |
146 | </property> | 146 | </property> |
147 | <property stdset="1"> | 147 | <property stdset="1"> |
148 | <name>frameShape</name> | 148 | <name>frameShape</name> |
149 | <enum>Panel</enum> | 149 | <enum>Panel</enum> |
150 | </property> | 150 | </property> |
151 | <property stdset="1"> | 151 | <property stdset="1"> |
152 | <name>frameShadow</name> | 152 | <name>frameShadow</name> |
153 | <enum>Sunken</enum> | 153 | <enum>Sunken</enum> |
154 | </property> | 154 | </property> |
155 | </widget> | 155 | </widget> |
156 | <widget row="0" column="1" > | 156 | <widget row="0" column="1" > |
157 | <class>QLabel</class> | 157 | <class>QLabel</class> |
158 | <property stdset="1"> | 158 | <property stdset="1"> |
159 | <name>name</name> | 159 | <name>name</name> |
160 | <cstring>stationLabel</cstring> | 160 | <cstring>stationLabel</cstring> |
161 | </property> | 161 | </property> |
162 | <property stdset="1"> | 162 | <property stdset="1"> |
163 | <name>frameShape</name> | 163 | <name>frameShape</name> |
164 | <enum>Panel</enum> | 164 | <enum>Panel</enum> |
165 | </property> | 165 | </property> |
166 | <property stdset="1"> | 166 | <property stdset="1"> |
167 | <name>frameShadow</name> | 167 | <name>frameShadow</name> |
168 | <enum>Sunken</enum> | 168 | <enum>Sunken</enum> |
169 | </property> | 169 | </property> |
170 | </widget> | 170 | </widget> |
171 | <widget row="3" column="1" > | 171 | <widget row="3" column="1" > |
172 | <class>QLabel</class> | 172 | <class>QLabel</class> |
173 | <property stdset="1"> | 173 | <property stdset="1"> |
174 | <name>name</name> | 174 | <name>name</name> |
175 | <cstring>freqLabel</cstring> | 175 | <cstring>freqLabel</cstring> |
176 | </property> | 176 | </property> |
177 | <property stdset="1"> | 177 | <property stdset="1"> |
178 | <name>frameShape</name> | 178 | <name>frameShape</name> |
179 | <enum>Panel</enum> | 179 | <enum>Panel</enum> |
180 | </property> | 180 | </property> |
181 | <property stdset="1"> | 181 | <property stdset="1"> |
182 | <name>frameShadow</name> | 182 | <name>frameShadow</name> |
183 | <enum>Sunken</enum> | 183 | <enum>Sunken</enum> |
184 | </property> | 184 | </property> |
185 | </widget> | 185 | </widget> |
186 | <spacer row="5" column="1" > | 186 | <spacer row="5" column="1" > |
187 | <property> | 187 | <property> |
188 | <name>name</name> | 188 | <name>name</name> |
189 | <cstring>Spacer7</cstring> | 189 | <cstring>Spacer7</cstring> |
190 | </property> | 190 | </property> |
191 | <property stdset="1"> | 191 | <property stdset="1"> |
192 | <name>orientation</name> | 192 | <name>orientation</name> |
193 | <enum>Vertical</enum> | 193 | <enum>Vertical</enum> |
194 | </property> | 194 | </property> |
195 | <property stdset="1"> | 195 | <property stdset="1"> |
196 | <name>sizeType</name> | 196 | <name>sizeType</name> |
197 | <enum>Expanding</enum> | 197 | <enum>Expanding</enum> |
198 | </property> | 198 | </property> |
199 | <property> | 199 | <property> |
200 | <name>sizeHint</name> | 200 | <name>sizeHint</name> |
201 | <size> | 201 | <size> |
202 | <width>20</width> | 202 | <width>20</width> |
203 | <height>20</height> | 203 | <height>20</height> |
204 | </size> | 204 | </size> |
205 | </property> | 205 | </property> |
206 | </spacer> | 206 | </spacer> |
207 | </grid> | 207 | </grid> |
208 | </widget> | 208 | </widget> |
209 | <widget> | ||
210 | <class>QWidget</class> | ||
211 | <property stdset="1"> | ||
212 | <name>name</name> | ||
213 | <cstring>tab</cstring> | ||
214 | </property> | ||
215 | <attribute> | ||
216 | <name>title</name> | ||
217 | <string>Statistics</string> | ||
218 | </attribute> | ||
219 | <grid> | ||
220 | <property stdset="1"> | ||
221 | <name>margin</name> | ||
222 | <number>11</number> | ||
223 | </property> | ||
224 | <property stdset="1"> | ||
225 | <name>spacing</name> | ||
226 | <number>6</number> | ||
227 | </property> | ||
228 | <spacer row="3" column="1" > | ||
229 | <property> | ||
230 | <name>name</name> | ||
231 | <cstring>Spacer2</cstring> | ||
232 | </property> | ||
233 | <property stdset="1"> | ||
234 | <name>orientation</name> | ||
235 | <enum>Vertical</enum> | ||
236 | </property> | ||
237 | <property stdset="1"> | ||
238 | <name>sizeType</name> | ||
239 | <enum>Expanding</enum> | ||
240 | </property> | ||
241 | <property> | ||
242 | <name>sizeHint</name> | ||
243 | <size> | ||
244 | <width>20</width> | ||
245 | <height>20</height> | ||
246 | </size> | ||
247 | </property> | ||
248 | </spacer> | ||
249 | <widget row="0" column="1" > | ||
250 | <class>QProgressBar</class> | ||
251 | <property stdset="1"> | ||
252 | <name>name</name> | ||
253 | <cstring>signalProgressBar</cstring> | ||
254 | </property> | ||
255 | </widget> | ||
256 | <widget row="1" column="1" > | ||
257 | <class>QProgressBar</class> | ||
258 | <property stdset="1"> | ||
259 | <name>name</name> | ||
260 | <cstring>noiseProgressBar</cstring> | ||
261 | </property> | ||
262 | </widget> | ||
263 | <widget row="2" column="1" > | ||
264 | <class>QProgressBar</class> | ||
265 | <property stdset="1"> | ||
266 | <name>name</name> | ||
267 | <cstring>qualityProgressBar</cstring> | ||
268 | </property> | ||
269 | </widget> | ||
270 | <widget row="0" column="0" > | ||
271 | <class>QLabel</class> | ||
272 | <property stdset="1"> | ||
273 | <name>name</name> | ||
274 | <cstring>TextLabel1_2</cstring> | ||
275 | </property> | ||
276 | <property stdset="1"> | ||
277 | <name>text</name> | ||
278 | <string>Signal</string> | ||
279 | </property> | ||
280 | </widget> | ||
281 | <widget row="1" column="0" > | ||
282 | <class>QLabel</class> | ||
283 | <property stdset="1"> | ||
284 | <name>name</name> | ||
285 | <cstring>TextLabel2_2</cstring> | ||
286 | </property> | ||
287 | <property stdset="1"> | ||
288 | <name>text</name> | ||
289 | <string>Noise</string> | ||
290 | </property> | ||
291 | </widget> | ||
292 | <widget row="2" column="0" > | ||
293 | <class>QLabel</class> | ||
294 | <property stdset="1"> | ||
295 | <name>name</name> | ||
296 | <cstring>TextLabel3_2</cstring> | ||
297 | </property> | ||
298 | <property stdset="1"> | ||
299 | <name>text</name> | ||
300 | <string>Quality</string> | ||
301 | </property> | ||
302 | </widget> | ||
303 | </grid> | ||
304 | </widget> | ||
209 | </widget> | 305 | </widget> |
210 | </vbox> | 306 | </vbox> |
211 | </widget> | 307 | </widget> |
212 | <customwidgets> | 308 | <customwidgets> |
213 | <customwidget> | 309 | <customwidget> |
214 | <class>QWidget</class> | 310 | <class>QWidget</class> |
215 | <header location="local">qwidget.h</header> | 311 | <header location="local">qwidget.h</header> |
216 | <sizehint> | 312 | <sizehint> |
217 | <width>100</width> | 313 | <width>100</width> |
218 | <height>100</height> | 314 | <height>100</height> |
219 | </sizehint> | 315 | </sizehint> |
220 | <container>0</container> | 316 | <container>0</container> |
221 | <sizepolicy> | 317 | <sizepolicy> |
222 | <hordata>7</hordata> | 318 | <hordata>7</hordata> |
223 | <verdata>7</verdata> | 319 | <verdata>7</verdata> |
224 | </sizepolicy> | 320 | </sizepolicy> |
225 | <pixmap>image0</pixmap> | 321 | <pixmap>image0</pixmap> |
226 | </customwidget> | 322 | </customwidget> |
227 | </customwidgets> | 323 | </customwidgets> |
228 | <images> | 324 | <images> |
229 | <image> | 325 | <image> |
230 | <name>image0</name> | 326 | <name>image0</name> |
231 | <data format="XPM.GZ" length="646">789c6dd2c10ac2300c00d07bbf2234b7229d1be245fc04c5a3201e4615f430059d0711ff5ddb2e6bb236ec90eed134cb5a19d8ef36602af5ecdbfeeac05dda0798d3abebde87e3faa374d3807fa0d633a52d38d8de6f679fe33fc776e196f53cd010188256a3600a292882096246517815ca99884606e18044a3a40d91824820924265a7923a2e8bcd05f33db1173e002913175f2a6be6d3294871a2d95fa00e8a94ee017b69d339d90df1e77c57ea072ede6758</data> | 327 | <data format="XPM.GZ" length="646">789c6dd2c10ac2300c00d07bbf2234b7229d1be245fc04c5a3201e4615f430059d0711ff5ddb2e6bb236ec90eed134cb5a19d8ef36602af5ecdbfeeac05dda0798d3abebde87e3faa374d3807fa0d633a52d38d8de6f679fe33fc776e196f53cd010188256a3600a292882096246517815ca99884606e18044a3a40d91824820924265a7923a2e8bcd05f33db1173e002913175f2a6be6d3294871a2d95fa00e8a94ee017b69d339d90df1e77c57ea072ede6758</data> |
232 | </image> | 328 | </image> |
233 | </images> | 329 | </images> |
234 | </UI> | 330 | </UI> |
diff --git a/noncore/net/networksetup/wlan/wextensions.cpp b/noncore/net/networksetup/wlan/wextensions.cpp new file mode 100644 index 0000000..f45ebf2 --- a/dev/null +++ b/noncore/net/networksetup/wlan/wextensions.cpp | |||
@@ -0,0 +1,158 @@ | |||
1 | #include "wextensions.h" | ||
2 | |||
3 | #include <qfile.h> | ||
4 | #include <qtextstream.h> | ||
5 | |||
6 | #include <arpa/inet.h> | ||
7 | #include <sys/socket.h> | ||
8 | #include <sys/ioctl.h> | ||
9 | |||
10 | #include <math.h> | ||
11 | |||
12 | #define PROCNETWIRELESS "/proc/net/wireless" | ||
13 | #define IW_LOWER 140 | ||
14 | #define IW_UPPER 200 | ||
15 | |||
16 | /** | ||
17 | * Constructor. Sets hasWirelessExtensions | ||
18 | */ | ||
19 | WExtensions::WExtensions(QString interfaceName){ | ||
20 | interface = interfaceName; | ||
21 | fd = socket( AF_INET, SOCK_DGRAM, 0 ); | ||
22 | |||
23 | const char* buffer[200]; | ||
24 | memset( &iwr, 0, sizeof( iwr ) ); | ||
25 | iwr.u.essid.pointer = (caddr_t) buffer; | ||
26 | iwr.u.essid.length = IW_ESSID_MAX_SIZE; | ||
27 | iwr.u.essid.flags = 0; | ||
28 | |||
29 | // check if it is an IEEE 802.11 standard conform | ||
30 | // wireless device by sending SIOCGIWESSID | ||
31 | // which also gives back the Extended Service Set ID | ||
32 | // (see IEEE 802.11 for more information) | ||
33 | |||
34 | const char* iname = interface.latin1(); | ||
35 | strcpy( iwr.ifr_ifrn.ifrn_name, (const char *)iname ); | ||
36 | if ( 0 == ioctl( fd, SIOCGIWESSID, &iwr ) ) | ||
37 | hasWirelessExtensions = true; | ||
38 | else | ||
39 | hasWirelessExtensions = false; | ||
40 | } | ||
41 | |||
42 | /** | ||
43 | * @return QString the station name of the access point. | ||
44 | */ | ||
45 | QString WExtensions::station(){ | ||
46 | if(!hasWirelessExtensions) | ||
47 | return QString(); | ||
48 | const char* buffer[200]; | ||
49 | iwr.u.data.pointer = (caddr_t) buffer; | ||
50 | iwr.u.data.length = IW_ESSID_MAX_SIZE; | ||
51 | iwr.u.data.flags = 0; | ||
52 | if ( 0 == ioctl( fd, SIOCGIWNICKN, &iwr )){ | ||
53 | iwr.u.data.pointer[(unsigned int) iwr.u.data.length-1] = '\0'; | ||
54 | return QString(iwr.u.data.pointer); | ||
55 | } | ||
56 | return QString(); | ||
57 | } | ||
58 | |||
59 | /** | ||
60 | * @return QString the essid of the host 802.11 access point. | ||
61 | */ | ||
62 | QString WExtensions::essid(){ | ||
63 | if(!hasWirelessExtensions) | ||
64 | return QString(); | ||
65 | if ( 0 == ioctl( fd, SIOCGIWESSID, &iwr )){ | ||
66 | iwr.u.essid.pointer[(unsigned int) iwr.u.essid.length-1] = '\0'; | ||
67 | return QString(iwr.u.essid.pointer); | ||
68 | } | ||
69 | return QString(); | ||
70 | } | ||
71 | |||
72 | /** | ||
73 | * @return QString the mode of interface | ||
74 | */ | ||
75 | QString WExtensions::mode(){ | ||
76 | if(!hasWirelessExtensions) | ||
77 | return QString(); | ||
78 | if ( 0 == ioctl( fd, SIOCGIWMODE, &iwr ) ) | ||
79 | return QString("%1").arg(iwr.u.mode == IW_MODE_ADHOC ? "Ad-Hoc" : "Managed"); | ||
80 | return QString(); | ||
81 | } | ||
82 | |||
83 | /** | ||
84 | * Get the frequency that the interface is running at. | ||
85 | * @return int the frequency that the interfacae is running at. | ||
86 | */ | ||
87 | double WExtensions::frequency(){ | ||
88 | if(!hasWirelessExtensions) | ||
89 | return 0; | ||
90 | if ( 0 == ioctl( fd, SIOCGIWFREQ, &iwr )) | ||
91 | return (double( iwr.u.freq.m ) * pow( 10, iwr.u.freq.e ) / 1000000000); | ||
92 | return 0;; | ||
93 | } | ||
94 | |||
95 | /** | ||
96 | * @return QString the AccessPoint that the interface is connected to. | ||
97 | */ | ||
98 | QString WExtensions::ap(){ | ||
99 | if(!hasWirelessExtensions) | ||
100 | return QString(); | ||
101 | if ( 0 == ioctl( fd, SIOCGIWAP, &iwr )){ | ||
102 | QString ap; | ||
103 | ap = ap.sprintf( "%.2X:%.2X:%.2X:%.2X:%.2X:%.2X", | ||
104 | iwr.u.ap_addr.sa_data[0]&0xff, | ||
105 | iwr.u.ap_addr.sa_data[1]&0xff, | ||
106 | iwr.u.ap_addr.sa_data[2]&0xff, | ||
107 | iwr.u.ap_addr.sa_data[3]&0xff, | ||
108 | iwr.u.ap_addr.sa_data[4]&0xff, | ||
109 | iwr.u.ap_addr.sa_data[5]&0xff ); | ||
110 | return ap; | ||
111 | } | ||
112 | else return QString(); | ||
113 | |||
114 | } | ||
115 | |||
116 | bool WExtensions::stats(int &signal, int &noise, int &quality){ | ||
117 | // gather link quality from /proc/net/wireless | ||
118 | if(!QFile::exists(PROCNETWIRELESS)) | ||
119 | return false; | ||
120 | |||
121 | char c; | ||
122 | QString status; | ||
123 | QString name; | ||
124 | |||
125 | QFile wfile( PROCNETWIRELESS ); | ||
126 | if(!wfile.open( IO_ReadOnly )) | ||
127 | return false; | ||
128 | |||
129 | QTextStream wstream( &wfile ); | ||
130 | wstream.readLine(); // skip the first two lines | ||
131 | wstream.readLine(); // because they only contain headers | ||
132 | while(!wstream.atEnd()){ | ||
133 | wstream >> name >> status >> quality >> c >> signal >> c >> noise; | ||
134 | if(name == interface){ | ||
135 | if ( quality > 92 ) | ||
136 | #ifdef MDEBUG | ||
137 | qDebug( "WIFIAPPLET: D'oh! Quality %d > estimated max!\n", quality ); | ||
138 | #endif | ||
139 | if ( ( signal > IW_UPPER ) || ( signal < IW_LOWER ) ) | ||
140 | #ifdef MDEBUG | ||
141 | qDebug( "WIFIAPPLET: Doh! Strength %d > estimated max!\n", signal ); | ||
142 | #endif | ||
143 | if ( ( noise > IW_UPPER ) || ( noise < IW_LOWER ) ) | ||
144 | #ifdef MDEBUG | ||
145 | qDebug( "WIFIAPPLET: Doh! Noise %d > estimated max!\n", noise ); | ||
146 | #endif | ||
147 | return true; | ||
148 | } | ||
149 | } | ||
150 | |||
151 | qDebug("Card no longer present"); | ||
152 | quality = -1; | ||
153 | signal = IW_LOWER; | ||
154 | noise = IW_LOWER; | ||
155 | return false; | ||
156 | } | ||
157 | |||
158 | // wextensions.cpp | ||
diff --git a/noncore/net/networksetup/wlan/wextensions.h b/noncore/net/networksetup/wlan/wextensions.h new file mode 100644 index 0000000..29997f5 --- a/dev/null +++ b/noncore/net/networksetup/wlan/wextensions.h | |||
@@ -0,0 +1,32 @@ | |||
1 | #ifndef WEXTENSIONS_H | ||
2 | #define WEXTENSIONS_H | ||
3 | |||
4 | #include <qstring.h> | ||
5 | |||
6 | #include <netinet/ip.h> | ||
7 | #include <linux/wireless.h> | ||
8 | |||
9 | class WExtensions { | ||
10 | |||
11 | public: | ||
12 | WExtensions(QString interfaceName); | ||
13 | QString getInterfaceName(){return interface;}; | ||
14 | bool doesHaveWirelessExtensions(){return hasWirelessExtensions;}; | ||
15 | QString station(); | ||
16 | QString essid(); | ||
17 | QString mode(); | ||
18 | double frequency(); | ||
19 | QString ap(); | ||
20 | bool stats( int &signal, int &noise, int &quality); | ||
21 | |||
22 | private: | ||
23 | bool hasWirelessExtensions; | ||
24 | QString interface; | ||
25 | |||
26 | // Used in we calls | ||
27 | struct iwreq iwr; | ||
28 | int fd; | ||
29 | |||
30 | }; | ||
31 | |||
32 | #endif | ||
diff --git a/noncore/net/networksetup/wlan/wlan.pro b/noncore/net/networksetup/wlan/wlan.pro index 5b94a95..432a096 100644 --- a/noncore/net/networksetup/wlan/wlan.pro +++ b/noncore/net/networksetup/wlan/wlan.pro | |||
@@ -1,12 +1,12 @@ | |||
1 | TEMPLATE = lib | 1 | TEMPLATE = lib |
2 | CONFIG += qt warn_on release | 2 | CONFIG += qt warn_on release |
3 | #CONFIG += qt warn_on debug | 3 | #CONFIG += qt warn_on debug |
4 | DESTDIR = $(OPIEDIR)/plugins/networksetup | 4 | DESTDIR = $(OPIEDIR)/plugins/networksetup |
5 | HEADERS = wlanimp.h wlanmodule.h | 5 | HEADERS = wlanimp.h wlanmodule.h wextensions.h |
6 | SOURCES = wlanimp.cpp wlanmodule.cpp | 6 | SOURCES = wlanimp.cpp wlanmodule.cpp wextensions.cpp |
7 | INCLUDEPATH+= $(OPIEDIR)/include ../ | 7 | INCLUDEPATH+= $(OPIEDIR)/include ../ |
8 | DEPENDPATH+= $(OPIEDIR)/include | 8 | DEPENDPATH+= $(OPIEDIR)/include |
9 | LIBS += -lqpe | 9 | LIBS += -lqpe |
10 | INTERFACES= wlan.ui info.ui | 10 | INTERFACES= wlan.ui info.ui |
11 | TARGET = wlanplugin | 11 | TARGET = wlanplugin |
12 | VERSION = 1.0.0 | 12 | VERSION = 1.0.0 |
diff --git a/noncore/net/networksetup/wlan/wlanmodule.cpp b/noncore/net/networksetup/wlan/wlanmodule.cpp index 24cb1cd..ab0b9a5 100644 --- a/noncore/net/networksetup/wlan/wlanmodule.cpp +++ b/noncore/net/networksetup/wlan/wlanmodule.cpp | |||
@@ -1,222 +1,128 @@ | |||
1 | #include "wlanmodule.h" | 1 | #include "wlanmodule.h" |
2 | #include "wlanimp.h" | 2 | #include "wlanimp.h" |
3 | #include "info.h" | 3 | #include "info.h" |
4 | 4 | #include "wextensions.h" | |
5 | #include <arpa/inet.h> | ||
6 | #include <sys/socket.h> | ||
7 | #include <linux/if_ether.h> | ||
8 | #include <netinet/ip.h> | ||
9 | #include <sys/ioctl.h> | ||
10 | #include <linux/wireless.h> | ||
11 | |||
12 | #include <unistd.h> | ||
13 | #include <math.h> | ||
14 | #include <errno.h> | ||
15 | #include <string.h> | ||
16 | #include <stdio.h> | ||
17 | |||
18 | #include <stdlib.h> | ||
19 | 5 | ||
20 | #include <qlabel.h> | 6 | #include <qlabel.h> |
7 | #include <qprogressbar.h> | ||
21 | 8 | ||
22 | /** | 9 | /** |
23 | * Constructor, find all of the possible interfaces | 10 | * Constructor, find all of the possible interfaces |
24 | */ | 11 | */ |
25 | WLANModule::WLANModule() : Module() { | 12 | WLANModule::WLANModule() : Module() { |
26 | // get output from iwconfig | 13 | // get output from iwconfig |
27 | } | 14 | } |
28 | 15 | ||
29 | /** | 16 | /** |
17 | */ | ||
18 | WLANModule::~WLANModule(){ | ||
19 | Interface *i; | ||
20 | for ( i=list.first(); i != 0; i=list.next() ) | ||
21 | delete i; | ||
22 | } | ||
23 | |||
24 | /** | ||
30 | * Change the current profile | 25 | * Change the current profile |
31 | */ | 26 | */ |
32 | void WLANModule::setProfile(QString newProfile){ | 27 | void WLANModule::setProfile(QString newProfile){ |
33 | profile = newProfile; | 28 | profile = newProfile; |
34 | } | 29 | } |
35 | 30 | ||
36 | /** | 31 | /** |
37 | * get the icon name for this device. | 32 | * get the icon name for this device. |
38 | * @param Interface* can be used in determining the icon. | 33 | * @param Interface* can be used in determining the icon. |
39 | * @return QString the icon name (minus .png, .gif etc) | 34 | * @return QString the icon name (minus .png, .gif etc) |
40 | */ | 35 | */ |
41 | QString WLANModule::getPixmapName(Interface* ){ | 36 | QString WLANModule::getPixmapName(Interface* ){ |
42 | return "wlan"; | 37 | return "wlan"; |
43 | } | 38 | } |
44 | 39 | ||
45 | /** | 40 | /** |
46 | * Check to see if the interface i is owned by this module. | 41 | * Check to see if the interface i is owned by this module. |
47 | * @param Interface* interface to check against | 42 | * @param Interface* interface to check against |
48 | * @return bool true if i is owned by this module, false otherwise. | 43 | * @return bool true if i is owned by this module, false otherwise. |
49 | */ | 44 | */ |
50 | bool WLANModule::isOwner(Interface *i){ | 45 | bool WLANModule::isOwner(Interface *i){ |
51 | if(i->getInterfaceName() == "eth0" || i->getInterfaceName() == "wlan0"){ | 46 | WExtensions we(i->getInterfaceName()); |
47 | if(!we.doesHaveWirelessExtensions()) | ||
48 | return false; | ||
49 | |||
50 | //if(i->getInterfaceName() == "eth0" || i->getInterfaceName() == "wlan0"){ | ||
52 | i->setHardwareName("802.11b"); | 51 | i->setHardwareName("802.11b"); |
52 | list.append(i); | ||
53 | return true; | 53 | return true; |
54 | } | 54 | //} |
55 | return false; | 55 | //return false; |
56 | } | 56 | } |
57 | 57 | ||
58 | /** | 58 | /** |
59 | * Create, set tabWiget and return the WLANConfigure Module | 59 | * Create, set tabWiget and return the WLANConfigure Module |
60 | * @param tabWidget a pointer to the tab widget that this configure has. | 60 | * @param tabWidget a pointer to the tab widget that this configure has. |
61 | * @return QWidget* pointer to the tab widget in this modules configure. | 61 | * @return QWidget* pointer to the tab widget in this modules configure. |
62 | */ | 62 | */ |
63 | QWidget *WLANModule::configure(Interface *i, QTabWidget **tabWidget){ | 63 | QWidget *WLANModule::configure(Interface *, QTabWidget **tabWidget){ |
64 | WLANImp *wlanconfig = new WLANImp(0, "WlanConfig"); | 64 | WLANImp *wlanconfig = new WLANImp(0, "WlanConfig"); |
65 | (*tabWidget) = wlanconfig->tabWidget; | 65 | (*tabWidget) = wlanconfig->tabWidget; |
66 | return wlanconfig; | 66 | return wlanconfig; |
67 | } | 67 | } |
68 | 68 | ||
69 | /** | 69 | /** |
70 | * Create, set tabWiget and return the Information Module | 70 | * Create, set tabWiget and return the Information Module |
71 | * @param tabWidget a pointer to the tab widget that this information has. | 71 | * @param tabWidget a pointer to the tab widget that this information has. |
72 | * @return QWidget* pointer to the tab widget in this modules info. | 72 | * @return QWidget* pointer to the tab widget in this modules info. |
73 | */ | 73 | */ |
74 | QWidget *WLANModule::information(Interface *i, QTabWidget **tabWidget){ | 74 | QWidget *WLANModule::information(Interface *i, QTabWidget **tabWidget){ |
75 | return NULL; | 75 | WExtensions we(i->getInterfaceName()); |
76 | if(!we.doesHaveWirelessExtensions()) | ||
77 | return NULL; | ||
78 | |||
76 | WlanInfo *info = new WlanInfo(0, "wireless info"); | 79 | WlanInfo *info = new WlanInfo(0, "wireless info"); |
77 | (*tabWidget) = info->tabWidget; | 80 | (*tabWidget) = info->tabWidget; |
78 | |||
79 | struct ifreq ifr; | ||
80 | struct sockaddr_in *sin = (struct sockaddr_in *) &ifr.ifr_addr; | ||
81 | int fd = socket( AF_INET, SOCK_DGRAM, 0 ); | ||
82 | 81 | ||
83 | const char* buffer[200]; | 82 | info->essidLabel->setText(we.essid()); |
84 | struct iwreq iwr; | 83 | info->apLabel->setText(we.ap()); |
85 | memset( &iwr, 0, sizeof( iwr ) ); | 84 | info->stationLabel->setText(we.station()); |
86 | iwr.u.essid.pointer = (caddr_t) buffer; | 85 | info->modeLabel->setText(we.mode()); |
87 | iwr.u.essid.length = IW_ESSID_MAX_SIZE; | 86 | info->freqLabel->setText(QString("%1").arg(we.frequency())); |
88 | iwr.u.essid.flags = 0; | 87 | int signal = 0; |
89 | 88 | int noise = 0; | |
90 | // check if it is an IEEE 802.11 standard conform | 89 | int quality = 0; |
91 | // wireless device by sending SIOCGIWESSID | 90 | we.stats(signal, noise, quality); |
92 | // which also gives back the Extended Service Set ID | 91 | info->signalProgressBar->setProgress(signal); |
93 | // (see IEEE 802.11 for more information) | 92 | info->noiseProgressBar->setProgress(noise); |
94 | 93 | info->qualityProgressBar->setProgress(quality); | |
95 | QString n = (i->getInterfaceName()); | ||
96 | const char* iname = n.latin1(); | ||
97 | strcpy( iwr.ifr_ifrn.ifrn_name, (const char *)iname ); | ||
98 | int result = ioctl( fd, SIOCGIWESSID, &iwr ); | ||
99 | if ( result == 0 ){ | ||
100 | //hasWirelessExtensions = true; | ||
101 | iwr.u.essid.pointer[(unsigned int) iwr.u.essid.length-1] = '\0'; | ||
102 | info->essidLabel->setText(QString(iwr.u.essid.pointer)); | ||
103 | } | ||
104 | else | ||
105 | return info; | ||
106 | //info->essidLabel->setText("*** Unknown ***"); | ||
107 | |||
108 | // Address of associated access-point | ||
109 | result = ioctl( fd, SIOCGIWAP, &iwr ); | ||
110 | if ( result == 0 ){ | ||
111 | QString foo = foo.sprintf( "%.2X:%.2X:%.2X:%.2X:%.2X:%.2X", | ||
112 | iwr.u.ap_addr.sa_data[0]&0xff, | ||
113 | iwr.u.ap_addr.sa_data[1]&0xff, | ||
114 | iwr.u.ap_addr.sa_data[2]&0xff, | ||
115 | iwr.u.ap_addr.sa_data[3]&0xff, | ||
116 | iwr.u.ap_addr.sa_data[4]&0xff, | ||
117 | iwr.u.ap_addr.sa_data[5]&0xff ); | ||
118 | info->apLabel->setText(foo); | ||
119 | } | ||
120 | else info->apLabel->setText("*** Unknown ***"); | ||
121 | |||
122 | iwr.u.data.pointer = (caddr_t) buffer; | ||
123 | iwr.u.data.length = IW_ESSID_MAX_SIZE; | ||
124 | iwr.u.data.flags = 0; | ||
125 | result = ioctl( fd, SIOCGIWNICKN, &iwr ); | ||
126 | if ( result == 0 ){ | ||
127 | iwr.u.data.pointer[(unsigned int) iwr.u.data.length-1] = '\0'; | ||
128 | info->stationLabel->setText(iwr.u.data.pointer); | ||
129 | } | ||
130 | else info->stationLabel->setText("*** Unknown ***"); | ||
131 | |||
132 | result = ioctl( fd, SIOCGIWMODE, &iwr ); | ||
133 | if ( result == 0 ) | ||
134 | info->modeLabel->setText( QString("%1").arg(iwr.u.mode == IW_MODE_ADHOC ? "Ad-Hoc" : "Managed")); | ||
135 | else | ||
136 | info->modeLabel->setText("*** Unknown ***"); | ||
137 | |||
138 | result = ioctl( fd, SIOCGIWFREQ, &iwr ); | ||
139 | if ( result == 0 ) | ||
140 | info->freqLabel->setText(QString("%1").arg((double( iwr.u.freq.m ) * pow( 10, iwr.u.freq.e ) / 1000000000))); | ||
141 | else | ||
142 | info->freqLabel->setText("*** Unknown ***"); | ||
143 | |||
144 | /* | ||
145 | // gather link quality from /proc/net/wireless | ||
146 | |||
147 | char c; | ||
148 | QString status; | ||
149 | QString name; | ||
150 | QFile wfile( PROCNETWIRELESS ); | ||
151 | bool hasFile = wfile.open( IO_ReadOnly ); | ||
152 | QTextStream wstream( &wfile ); | ||
153 | if ( hasFile ) | ||
154 | { | ||
155 | wstream.readLine(); // skip the first two lines | ||
156 | wstream.readLine(); // because they only contain headers | ||
157 | } | ||
158 | if ( ( !hasFile ) || ( wstream.atEnd() ) ) | ||
159 | { | ||
160 | #ifdef MDEBUG | ||
161 | qDebug( "WIFIAPPLET: D'oh! Someone removed the card..." ); | ||
162 | #endif | ||
163 | quality = -1; | ||
164 | signal = IW_LOWER; | ||
165 | noise = IW_LOWER; | ||
166 | return false; | ||
167 | } | ||
168 | |||
169 | wstream >> name >> status >> quality >> c >> signal >> c >> noise; | ||
170 | |||
171 | if ( quality > 92 ) | ||
172 | #ifdef MDEBUG | ||
173 | qDebug( "WIFIAPPLET: D'oh! Quality %d > estimated max!\n", quality ); | ||
174 | #endif | ||
175 | if ( ( signal > IW_UPPER ) || ( signal < IW_LOWER ) ) | ||
176 | #ifdef MDEBUG | ||
177 | qDebug( "WIFIAPPLET: Doh! Strength %d > estimated max!\n", signal ); | ||
178 | #endif | ||
179 | if ( ( noise > IW_UPPER ) || ( noise < IW_LOWER ) ) | ||
180 | #ifdef MDEBUG | ||
181 | qDebug( "WIFIAPPLET: Doh! Noise %d > estimated max!\n", noise ); | ||
182 | #endif | ||
183 | |||
184 | return true; | ||
185 | |||
186 | } | ||
187 | */ | ||
188 | return info; | 94 | return info; |
189 | } | 95 | } |
190 | 96 | ||
191 | /** | 97 | /** |
192 | * Get all active (up or down) interfaces | 98 | * Get all active (up or down) interfaces |
193 | * @return QList<Interface> A list of interfaces that exsist that havn't | 99 | * @return QList<Interface> A list of interfaces that exsist that havn't |
194 | * been called by isOwner() | 100 | * been called by isOwner() |
195 | */ | 101 | */ |
196 | QList<Interface> WLANModule::getInterfaces(){ | 102 | QList<Interface> WLANModule::getInterfaces(){ |
197 | return list; | 103 | return list; |
198 | } | 104 | } |
199 | 105 | ||
200 | /** | 106 | /** |
201 | * Attempt to add a new interface as defined by name | 107 | * Attempt to add a new interface as defined by name |
202 | * @param name the name of the type of interface that should be created given | 108 | * @param name the name of the type of interface that should be created given |
203 | * by possibleNewInterfaces(); | 109 | * by possibleNewInterfaces(); |
204 | * @return Interface* NULL if it was unable to be created. | 110 | * @return Interface* NULL if it was unable to be created. |
205 | */ | 111 | */ |
206 | Interface *WLANModule::addNewInterface(QString ){ | 112 | Interface *WLANModule::addNewInterface(QString ){ |
207 | // We can't add a 802.11 interface, either the hardware will be there | 113 | // We can't add a 802.11 interface, either the hardware will be there |
208 | // or it wont. | 114 | // or it wont. |
209 | return NULL; | 115 | return NULL; |
210 | } | 116 | } |
211 | 117 | ||
212 | /** | 118 | /** |
213 | * Attempts to remove the interface, doesn't delete i | 119 | * Attempts to remove the interface, doesn't delete i |
214 | * @return bool true if successfull, false otherwise. | 120 | * @return bool true if successfull, false otherwise. |
215 | */ | 121 | */ |
216 | bool WLANModule::remove(Interface*){ | 122 | bool WLANModule::remove(Interface*){ |
217 | // Can't remove a hardware device, you can stop it though. | 123 | // Can't remove a hardware device, you can stop it though. |
218 | return false; | 124 | return false; |
219 | } | 125 | } |
220 | 126 | ||
221 | // wlanmodule.cpp | 127 | // wlanmodule.cpp |
222 | 128 | ||
diff --git a/noncore/net/networksetup/wlan/wlanmodule.h b/noncore/net/networksetup/wlan/wlanmodule.h index 63f0949..1418ce8 100644 --- a/noncore/net/networksetup/wlan/wlanmodule.h +++ b/noncore/net/networksetup/wlan/wlanmodule.h | |||
@@ -1,40 +1,41 @@ | |||
1 | #ifndef WLAN_MODULE_H | 1 | #ifndef WLAN_MODULE_H |
2 | #define WLAN_MODULE_H | 2 | #define WLAN_MODULE_H |
3 | 3 | ||
4 | #include "module.h" | 4 | #include "module.h" |
5 | 5 | ||
6 | class WLANModule : Module{ | 6 | class WLANModule : Module{ |
7 | 7 | ||
8 | signals: | 8 | signals: |
9 | void updateInterface(Interface *i); | 9 | void updateInterface(Interface *i); |
10 | 10 | ||
11 | public: | 11 | public: |
12 | WLANModule(); | 12 | WLANModule(); |
13 | 13 | ~WLANModule(); | |
14 | |||
14 | virtual void setProfile(QString newProfile); | 15 | virtual void setProfile(QString newProfile); |
15 | virtual bool isOwner(Interface *); | 16 | virtual bool isOwner(Interface *); |
16 | virtual QWidget *configure(Interface *i, QTabWidget **tabWidget); | 17 | virtual QWidget *configure(Interface *i, QTabWidget **tabWidget); |
17 | virtual QWidget *information(Interface *i, QTabWidget **tabWidget); | 18 | virtual QWidget *information(Interface *i, QTabWidget **tabWidget); |
18 | virtual QList<Interface> getInterfaces(); | 19 | virtual QList<Interface> getInterfaces(); |
19 | virtual void possibleNewInterfaces(QMap<QString, QString> &list){}; | 20 | virtual void possibleNewInterfaces(QMap<QString, QString> &){}; |
20 | virtual Interface *addNewInterface(QString name); | 21 | virtual Interface *addNewInterface(QString name); |
21 | virtual bool remove(Interface* i); | 22 | virtual bool remove(Interface* i); |
22 | virtual QString getPixmapName(Interface* i); | 23 | virtual QString getPixmapName(Interface* i); |
23 | 24 | ||
24 | private: | 25 | private: |
25 | QList<Interface> list; | 26 | QList<Interface> list; |
26 | QString profile; | 27 | QString profile; |
27 | 28 | ||
28 | }; | 29 | }; |
29 | 30 | ||
30 | extern "C" | 31 | extern "C" |
31 | { | 32 | { |
32 | void* create_plugin() { | 33 | void* create_plugin() { |
33 | return new WLANModule(); | 34 | return new WLANModule(); |
34 | } | 35 | } |
35 | }; | 36 | }; |
36 | 37 | ||
37 | #endif | 38 | #endif |
38 | 39 | ||
39 | // wlanmodule.h | 40 | // wlanmodule.h |
40 | 41 | ||
diff --git a/noncore/settings/networksettings/wlan/info.ui b/noncore/settings/networksettings/wlan/info.ui index 018ace3..4e85b1b 100644 --- a/noncore/settings/networksettings/wlan/info.ui +++ b/noncore/settings/networksettings/wlan/info.ui | |||
@@ -1,110 +1,110 @@ | |||
1 | <!DOCTYPE UI><UI> | 1 | <!DOCTYPE UI><UI> |
2 | <class>WlanInfo</class> | 2 | <class>WlanInfo</class> |
3 | <widget> | 3 | <widget> |
4 | <class>QWidget</class> | 4 | <class>QWidget</class> |
5 | <property stdset="1"> | 5 | <property stdset="1"> |
6 | <name>name</name> | 6 | <name>name</name> |
7 | <cstring>WlanInfo</cstring> | 7 | <cstring>WlanInfo</cstring> |
8 | </property> | 8 | </property> |
9 | <property stdset="1"> | 9 | <property stdset="1"> |
10 | <name>geometry</name> | 10 | <name>geometry</name> |
11 | <rect> | 11 | <rect> |
12 | <x>0</x> | 12 | <x>0</x> |
13 | <y>0</y> | 13 | <y>0</y> |
14 | <width>283</width> | 14 | <width>279</width> |
15 | <height>292</height> | 15 | <height>292</height> |
16 | </rect> | 16 | </rect> |
17 | </property> | 17 | </property> |
18 | <property stdset="1"> | 18 | <property stdset="1"> |
19 | <name>caption</name> | 19 | <name>caption</name> |
20 | <string>WLAN Information</string> | 20 | <string>WLAN Information</string> |
21 | </property> | 21 | </property> |
22 | <vbox> | 22 | <vbox> |
23 | <property stdset="1"> | 23 | <property stdset="1"> |
24 | <name>margin</name> | 24 | <name>margin</name> |
25 | <number>0</number> | 25 | <number>0</number> |
26 | </property> | 26 | </property> |
27 | <property stdset="1"> | 27 | <property stdset="1"> |
28 | <name>spacing</name> | 28 | <name>spacing</name> |
29 | <number>0</number> | 29 | <number>0</number> |
30 | </property> | 30 | </property> |
31 | <widget> | 31 | <widget> |
32 | <class>QTabWidget</class> | 32 | <class>QTabWidget</class> |
33 | <property stdset="1"> | 33 | <property stdset="1"> |
34 | <name>name</name> | 34 | <name>name</name> |
35 | <cstring>tabWidget</cstring> | 35 | <cstring>tabWidget</cstring> |
36 | </property> | 36 | </property> |
37 | <widget> | 37 | <widget> |
38 | <class>QWidget</class> | 38 | <class>QWidget</class> |
39 | <property stdset="1"> | 39 | <property stdset="1"> |
40 | <name>name</name> | 40 | <name>name</name> |
41 | <cstring>Widget2</cstring> | 41 | <cstring>Widget2</cstring> |
42 | </property> | 42 | </property> |
43 | <attribute> | 43 | <attribute> |
44 | <name>title</name> | 44 | <name>title</name> |
45 | <string>802.11b</string> | 45 | <string>802.11b</string> |
46 | </attribute> | 46 | </attribute> |
47 | <grid> | 47 | <grid> |
48 | <property stdset="1"> | 48 | <property stdset="1"> |
49 | <name>margin</name> | 49 | <name>margin</name> |
50 | <number>11</number> | 50 | <number>11</number> |
51 | </property> | 51 | </property> |
52 | <property stdset="1"> | 52 | <property stdset="1"> |
53 | <name>spacing</name> | 53 | <name>spacing</name> |
54 | <number>6</number> | 54 | <number>6</number> |
55 | </property> | 55 | </property> |
56 | <widget row="3" column="0" > | 56 | <widget row="3" column="0" > |
57 | <class>QLabel</class> | 57 | <class>QLabel</class> |
58 | <property stdset="1"> | 58 | <property stdset="1"> |
59 | <name>name</name> | 59 | <name>name</name> |
60 | <cstring>TextLabel4</cstring> | 60 | <cstring>TextLabel4</cstring> |
61 | </property> | 61 | </property> |
62 | <property stdset="1"> | 62 | <property stdset="1"> |
63 | <name>text</name> | 63 | <name>text</name> |
64 | <string>Frequency</string> | 64 | <string>Frequency</string> |
65 | </property> | 65 | </property> |
66 | </widget> | 66 | </widget> |
67 | <widget row="2" column="0" > | 67 | <widget row="2" column="0" > |
68 | <class>QLabel</class> | 68 | <class>QLabel</class> |
69 | <property stdset="1"> | 69 | <property stdset="1"> |
70 | <name>name</name> | 70 | <name>name</name> |
71 | <cstring>TextLabel3</cstring> | 71 | <cstring>TextLabel3</cstring> |
72 | </property> | 72 | </property> |
73 | <property stdset="1"> | 73 | <property stdset="1"> |
74 | <name>text</name> | 74 | <name>text</name> |
75 | <string>Mode</string> | 75 | <string>Mode</string> |
76 | </property> | 76 | </property> |
77 | </widget> | 77 | </widget> |
78 | <widget row="1" column="0" > | 78 | <widget row="1" column="0" > |
79 | <class>QLabel</class> | 79 | <class>QLabel</class> |
80 | <property stdset="1"> | 80 | <property stdset="1"> |
81 | <name>name</name> | 81 | <name>name</name> |
82 | <cstring>TextLabel2</cstring> | 82 | <cstring>TextLabel2</cstring> |
83 | </property> | 83 | </property> |
84 | <property stdset="1"> | 84 | <property stdset="1"> |
85 | <name>text</name> | 85 | <name>text</name> |
86 | <string>ESSID</string> | 86 | <string>ESSID</string> |
87 | </property> | 87 | </property> |
88 | </widget> | 88 | </widget> |
89 | <widget row="0" column="0" > | 89 | <widget row="0" column="0" > |
90 | <class>QLabel</class> | 90 | <class>QLabel</class> |
91 | <property stdset="1"> | 91 | <property stdset="1"> |
92 | <name>name</name> | 92 | <name>name</name> |
93 | <cstring>TextLabel1</cstring> | 93 | <cstring>TextLabel1</cstring> |
94 | </property> | 94 | </property> |
95 | <property stdset="1"> | 95 | <property stdset="1"> |
96 | <name>text</name> | 96 | <name>text</name> |
97 | <string>Station</string> | 97 | <string>Station</string> |
98 | </property> | 98 | </property> |
99 | </widget> | 99 | </widget> |
100 | <widget row="4" column="0" > | 100 | <widget row="4" column="0" > |
101 | <class>QLabel</class> | 101 | <class>QLabel</class> |
102 | <property stdset="1"> | 102 | <property stdset="1"> |
103 | <name>name</name> | 103 | <name>name</name> |
104 | <cstring>TextLabel9</cstring> | 104 | <cstring>TextLabel9</cstring> |
105 | </property> | 105 | </property> |
106 | <property stdset="1"> | 106 | <property stdset="1"> |
107 | <name>text</name> | 107 | <name>text</name> |
108 | <string>AP</string> | 108 | <string>AP</string> |
109 | </property> | 109 | </property> |
110 | </widget> | 110 | </widget> |
@@ -113,122 +113,218 @@ | |||
113 | <property stdset="1"> | 113 | <property stdset="1"> |
114 | <name>name</name> | 114 | <name>name</name> |
115 | <cstring>apLabel</cstring> | 115 | <cstring>apLabel</cstring> |
116 | </property> | 116 | </property> |
117 | <property stdset="1"> | 117 | <property stdset="1"> |
118 | <name>frameShape</name> | 118 | <name>frameShape</name> |
119 | <enum>Panel</enum> | 119 | <enum>Panel</enum> |
120 | </property> | 120 | </property> |
121 | <property stdset="1"> | 121 | <property stdset="1"> |
122 | <name>frameShadow</name> | 122 | <name>frameShadow</name> |
123 | <enum>Sunken</enum> | 123 | <enum>Sunken</enum> |
124 | </property> | 124 | </property> |
125 | </widget> | 125 | </widget> |
126 | <widget row="2" column="1" > | 126 | <widget row="2" column="1" > |
127 | <class>QLabel</class> | 127 | <class>QLabel</class> |
128 | <property stdset="1"> | 128 | <property stdset="1"> |
129 | <name>name</name> | 129 | <name>name</name> |
130 | <cstring>modeLabel</cstring> | 130 | <cstring>modeLabel</cstring> |
131 | </property> | 131 | </property> |
132 | <property stdset="1"> | 132 | <property stdset="1"> |
133 | <name>frameShape</name> | 133 | <name>frameShape</name> |
134 | <enum>Panel</enum> | 134 | <enum>Panel</enum> |
135 | </property> | 135 | </property> |
136 | <property stdset="1"> | 136 | <property stdset="1"> |
137 | <name>frameShadow</name> | 137 | <name>frameShadow</name> |
138 | <enum>Sunken</enum> | 138 | <enum>Sunken</enum> |
139 | </property> | 139 | </property> |
140 | </widget> | 140 | </widget> |
141 | <widget row="1" column="1" > | 141 | <widget row="1" column="1" > |
142 | <class>QLabel</class> | 142 | <class>QLabel</class> |
143 | <property stdset="1"> | 143 | <property stdset="1"> |
144 | <name>name</name> | 144 | <name>name</name> |
145 | <cstring>essidLabel</cstring> | 145 | <cstring>essidLabel</cstring> |
146 | </property> | 146 | </property> |
147 | <property stdset="1"> | 147 | <property stdset="1"> |
148 | <name>frameShape</name> | 148 | <name>frameShape</name> |
149 | <enum>Panel</enum> | 149 | <enum>Panel</enum> |
150 | </property> | 150 | </property> |
151 | <property stdset="1"> | 151 | <property stdset="1"> |
152 | <name>frameShadow</name> | 152 | <name>frameShadow</name> |
153 | <enum>Sunken</enum> | 153 | <enum>Sunken</enum> |
154 | </property> | 154 | </property> |
155 | </widget> | 155 | </widget> |
156 | <widget row="0" column="1" > | 156 | <widget row="0" column="1" > |
157 | <class>QLabel</class> | 157 | <class>QLabel</class> |
158 | <property stdset="1"> | 158 | <property stdset="1"> |
159 | <name>name</name> | 159 | <name>name</name> |
160 | <cstring>stationLabel</cstring> | 160 | <cstring>stationLabel</cstring> |
161 | </property> | 161 | </property> |
162 | <property stdset="1"> | 162 | <property stdset="1"> |
163 | <name>frameShape</name> | 163 | <name>frameShape</name> |
164 | <enum>Panel</enum> | 164 | <enum>Panel</enum> |
165 | </property> | 165 | </property> |
166 | <property stdset="1"> | 166 | <property stdset="1"> |
167 | <name>frameShadow</name> | 167 | <name>frameShadow</name> |
168 | <enum>Sunken</enum> | 168 | <enum>Sunken</enum> |
169 | </property> | 169 | </property> |
170 | </widget> | 170 | </widget> |
171 | <widget row="3" column="1" > | 171 | <widget row="3" column="1" > |
172 | <class>QLabel</class> | 172 | <class>QLabel</class> |
173 | <property stdset="1"> | 173 | <property stdset="1"> |
174 | <name>name</name> | 174 | <name>name</name> |
175 | <cstring>freqLabel</cstring> | 175 | <cstring>freqLabel</cstring> |
176 | </property> | 176 | </property> |
177 | <property stdset="1"> | 177 | <property stdset="1"> |
178 | <name>frameShape</name> | 178 | <name>frameShape</name> |
179 | <enum>Panel</enum> | 179 | <enum>Panel</enum> |
180 | </property> | 180 | </property> |
181 | <property stdset="1"> | 181 | <property stdset="1"> |
182 | <name>frameShadow</name> | 182 | <name>frameShadow</name> |
183 | <enum>Sunken</enum> | 183 | <enum>Sunken</enum> |
184 | </property> | 184 | </property> |
185 | </widget> | 185 | </widget> |
186 | <spacer row="5" column="1" > | 186 | <spacer row="5" column="1" > |
187 | <property> | 187 | <property> |
188 | <name>name</name> | 188 | <name>name</name> |
189 | <cstring>Spacer7</cstring> | 189 | <cstring>Spacer7</cstring> |
190 | </property> | 190 | </property> |
191 | <property stdset="1"> | 191 | <property stdset="1"> |
192 | <name>orientation</name> | 192 | <name>orientation</name> |
193 | <enum>Vertical</enum> | 193 | <enum>Vertical</enum> |
194 | </property> | 194 | </property> |
195 | <property stdset="1"> | 195 | <property stdset="1"> |
196 | <name>sizeType</name> | 196 | <name>sizeType</name> |
197 | <enum>Expanding</enum> | 197 | <enum>Expanding</enum> |
198 | </property> | 198 | </property> |
199 | <property> | 199 | <property> |
200 | <name>sizeHint</name> | 200 | <name>sizeHint</name> |
201 | <size> | 201 | <size> |
202 | <width>20</width> | 202 | <width>20</width> |
203 | <height>20</height> | 203 | <height>20</height> |
204 | </size> | 204 | </size> |
205 | </property> | 205 | </property> |
206 | </spacer> | 206 | </spacer> |
207 | </grid> | 207 | </grid> |
208 | </widget> | 208 | </widget> |
209 | <widget> | ||
210 | <class>QWidget</class> | ||
211 | <property stdset="1"> | ||
212 | <name>name</name> | ||
213 | <cstring>tab</cstring> | ||
214 | </property> | ||
215 | <attribute> | ||
216 | <name>title</name> | ||
217 | <string>Statistics</string> | ||
218 | </attribute> | ||
219 | <grid> | ||
220 | <property stdset="1"> | ||
221 | <name>margin</name> | ||
222 | <number>11</number> | ||
223 | </property> | ||
224 | <property stdset="1"> | ||
225 | <name>spacing</name> | ||
226 | <number>6</number> | ||
227 | </property> | ||
228 | <spacer row="3" column="1" > | ||
229 | <property> | ||
230 | <name>name</name> | ||
231 | <cstring>Spacer2</cstring> | ||
232 | </property> | ||
233 | <property stdset="1"> | ||
234 | <name>orientation</name> | ||
235 | <enum>Vertical</enum> | ||
236 | </property> | ||
237 | <property stdset="1"> | ||
238 | <name>sizeType</name> | ||
239 | <enum>Expanding</enum> | ||
240 | </property> | ||
241 | <property> | ||
242 | <name>sizeHint</name> | ||
243 | <size> | ||
244 | <width>20</width> | ||
245 | <height>20</height> | ||
246 | </size> | ||
247 | </property> | ||
248 | </spacer> | ||
249 | <widget row="0" column="1" > | ||
250 | <class>QProgressBar</class> | ||
251 | <property stdset="1"> | ||
252 | <name>name</name> | ||
253 | <cstring>signalProgressBar</cstring> | ||
254 | </property> | ||
255 | </widget> | ||
256 | <widget row="1" column="1" > | ||
257 | <class>QProgressBar</class> | ||
258 | <property stdset="1"> | ||
259 | <name>name</name> | ||
260 | <cstring>noiseProgressBar</cstring> | ||
261 | </property> | ||
262 | </widget> | ||
263 | <widget row="2" column="1" > | ||
264 | <class>QProgressBar</class> | ||
265 | <property stdset="1"> | ||
266 | <name>name</name> | ||
267 | <cstring>qualityProgressBar</cstring> | ||
268 | </property> | ||
269 | </widget> | ||
270 | <widget row="0" column="0" > | ||
271 | <class>QLabel</class> | ||
272 | <property stdset="1"> | ||
273 | <name>name</name> | ||
274 | <cstring>TextLabel1_2</cstring> | ||
275 | </property> | ||
276 | <property stdset="1"> | ||
277 | <name>text</name> | ||
278 | <string>Signal</string> | ||
279 | </property> | ||
280 | </widget> | ||
281 | <widget row="1" column="0" > | ||
282 | <class>QLabel</class> | ||
283 | <property stdset="1"> | ||
284 | <name>name</name> | ||
285 | <cstring>TextLabel2_2</cstring> | ||
286 | </property> | ||
287 | <property stdset="1"> | ||
288 | <name>text</name> | ||
289 | <string>Noise</string> | ||
290 | </property> | ||
291 | </widget> | ||
292 | <widget row="2" column="0" > | ||
293 | <class>QLabel</class> | ||
294 | <property stdset="1"> | ||
295 | <name>name</name> | ||
296 | <cstring>TextLabel3_2</cstring> | ||
297 | </property> | ||
298 | <property stdset="1"> | ||
299 | <name>text</name> | ||
300 | <string>Quality</string> | ||
301 | </property> | ||
302 | </widget> | ||
303 | </grid> | ||
304 | </widget> | ||
209 | </widget> | 305 | </widget> |
210 | </vbox> | 306 | </vbox> |
211 | </widget> | 307 | </widget> |
212 | <customwidgets> | 308 | <customwidgets> |
213 | <customwidget> | 309 | <customwidget> |
214 | <class>QWidget</class> | 310 | <class>QWidget</class> |
215 | <header location="local">qwidget.h</header> | 311 | <header location="local">qwidget.h</header> |
216 | <sizehint> | 312 | <sizehint> |
217 | <width>100</width> | 313 | <width>100</width> |
218 | <height>100</height> | 314 | <height>100</height> |
219 | </sizehint> | 315 | </sizehint> |
220 | <container>0</container> | 316 | <container>0</container> |
221 | <sizepolicy> | 317 | <sizepolicy> |
222 | <hordata>7</hordata> | 318 | <hordata>7</hordata> |
223 | <verdata>7</verdata> | 319 | <verdata>7</verdata> |
224 | </sizepolicy> | 320 | </sizepolicy> |
225 | <pixmap>image0</pixmap> | 321 | <pixmap>image0</pixmap> |
226 | </customwidget> | 322 | </customwidget> |
227 | </customwidgets> | 323 | </customwidgets> |
228 | <images> | 324 | <images> |
229 | <image> | 325 | <image> |
230 | <name>image0</name> | 326 | <name>image0</name> |
231 | <data format="XPM.GZ" length="646">789c6dd2c10ac2300c00d07bbf2234b7229d1be245fc04c5a3201e4615f430059d0711ff5ddb2e6bb236ec90eed134cb5a19d8ef36602af5ecdbfeeac05dda0798d3abebde87e3faa374d3807fa0d633a52d38d8de6f679fe33fc776e196f53cd010188256a3600a292882096246517815ca99884606e18044a3a40d91824820924265a7923a2e8bcd05f33db1173e002913175f2a6be6d3294871a2d95fa00e8a94ee017b69d339d90df1e77c57ea072ede6758</data> | 327 | <data format="XPM.GZ" length="646">789c6dd2c10ac2300c00d07bbf2234b7229d1be245fc04c5a3201e4615f430059d0711ff5ddb2e6bb236ec90eed134cb5a19d8ef36602af5ecdbfeeac05dda0798d3abebde87e3faa374d3807fa0d633a52d38d8de6f679fe33fc776e196f53cd010188256a3600a292882096246517815ca99884606e18044a3a40d91824820924265a7923a2e8bcd05f33db1173e002913175f2a6be6d3294871a2d95fa00e8a94ee017b69d339d90df1e77c57ea072ede6758</data> |
232 | </image> | 328 | </image> |
233 | </images> | 329 | </images> |
234 | </UI> | 330 | </UI> |
diff --git a/noncore/settings/networksettings/wlan/wextensions.cpp b/noncore/settings/networksettings/wlan/wextensions.cpp new file mode 100644 index 0000000..f45ebf2 --- a/dev/null +++ b/noncore/settings/networksettings/wlan/wextensions.cpp | |||
@@ -0,0 +1,158 @@ | |||
1 | #include "wextensions.h" | ||
2 | |||
3 | #include <qfile.h> | ||
4 | #include <qtextstream.h> | ||
5 | |||
6 | #include <arpa/inet.h> | ||
7 | #include <sys/socket.h> | ||
8 | #include <sys/ioctl.h> | ||
9 | |||
10 | #include <math.h> | ||
11 | |||
12 | #define PROCNETWIRELESS "/proc/net/wireless" | ||
13 | #define IW_LOWER 140 | ||
14 | #define IW_UPPER 200 | ||
15 | |||
16 | /** | ||
17 | * Constructor. Sets hasWirelessExtensions | ||
18 | */ | ||
19 | WExtensions::WExtensions(QString interfaceName){ | ||
20 | interface = interfaceName; | ||
21 | fd = socket( AF_INET, SOCK_DGRAM, 0 ); | ||
22 | |||
23 | const char* buffer[200]; | ||
24 | memset( &iwr, 0, sizeof( iwr ) ); | ||
25 | iwr.u.essid.pointer = (caddr_t) buffer; | ||
26 | iwr.u.essid.length = IW_ESSID_MAX_SIZE; | ||
27 | iwr.u.essid.flags = 0; | ||
28 | |||
29 | // check if it is an IEEE 802.11 standard conform | ||
30 | // wireless device by sending SIOCGIWESSID | ||
31 | // which also gives back the Extended Service Set ID | ||
32 | // (see IEEE 802.11 for more information) | ||
33 | |||
34 | const char* iname = interface.latin1(); | ||
35 | strcpy( iwr.ifr_ifrn.ifrn_name, (const char *)iname ); | ||
36 | if ( 0 == ioctl( fd, SIOCGIWESSID, &iwr ) ) | ||
37 | hasWirelessExtensions = true; | ||
38 | else | ||
39 | hasWirelessExtensions = false; | ||
40 | } | ||
41 | |||
42 | /** | ||
43 | * @return QString the station name of the access point. | ||
44 | */ | ||
45 | QString WExtensions::station(){ | ||
46 | if(!hasWirelessExtensions) | ||
47 | return QString(); | ||
48 | const char* buffer[200]; | ||
49 | iwr.u.data.pointer = (caddr_t) buffer; | ||
50 | iwr.u.data.length = IW_ESSID_MAX_SIZE; | ||
51 | iwr.u.data.flags = 0; | ||
52 | if ( 0 == ioctl( fd, SIOCGIWNICKN, &iwr )){ | ||
53 | iwr.u.data.pointer[(unsigned int) iwr.u.data.length-1] = '\0'; | ||
54 | return QString(iwr.u.data.pointer); | ||
55 | } | ||
56 | return QString(); | ||
57 | } | ||
58 | |||
59 | /** | ||
60 | * @return QString the essid of the host 802.11 access point. | ||
61 | */ | ||
62 | QString WExtensions::essid(){ | ||
63 | if(!hasWirelessExtensions) | ||
64 | return QString(); | ||
65 | if ( 0 == ioctl( fd, SIOCGIWESSID, &iwr )){ | ||
66 | iwr.u.essid.pointer[(unsigned int) iwr.u.essid.length-1] = '\0'; | ||
67 | return QString(iwr.u.essid.pointer); | ||
68 | } | ||
69 | return QString(); | ||
70 | } | ||
71 | |||
72 | /** | ||
73 | * @return QString the mode of interface | ||
74 | */ | ||
75 | QString WExtensions::mode(){ | ||
76 | if(!hasWirelessExtensions) | ||
77 | return QString(); | ||
78 | if ( 0 == ioctl( fd, SIOCGIWMODE, &iwr ) ) | ||
79 | return QString("%1").arg(iwr.u.mode == IW_MODE_ADHOC ? "Ad-Hoc" : "Managed"); | ||
80 | return QString(); | ||
81 | } | ||
82 | |||
83 | /** | ||
84 | * Get the frequency that the interface is running at. | ||
85 | * @return int the frequency that the interfacae is running at. | ||
86 | */ | ||
87 | double WExtensions::frequency(){ | ||
88 | if(!hasWirelessExtensions) | ||
89 | return 0; | ||
90 | if ( 0 == ioctl( fd, SIOCGIWFREQ, &iwr )) | ||
91 | return (double( iwr.u.freq.m ) * pow( 10, iwr.u.freq.e ) / 1000000000); | ||
92 | return 0;; | ||
93 | } | ||
94 | |||
95 | /** | ||
96 | * @return QString the AccessPoint that the interface is connected to. | ||
97 | */ | ||
98 | QString WExtensions::ap(){ | ||
99 | if(!hasWirelessExtensions) | ||
100 | return QString(); | ||
101 | if ( 0 == ioctl( fd, SIOCGIWAP, &iwr )){ | ||
102 | QString ap; | ||
103 | ap = ap.sprintf( "%.2X:%.2X:%.2X:%.2X:%.2X:%.2X", | ||
104 | iwr.u.ap_addr.sa_data[0]&0xff, | ||
105 | iwr.u.ap_addr.sa_data[1]&0xff, | ||
106 | iwr.u.ap_addr.sa_data[2]&0xff, | ||
107 | iwr.u.ap_addr.sa_data[3]&0xff, | ||
108 | iwr.u.ap_addr.sa_data[4]&0xff, | ||
109 | iwr.u.ap_addr.sa_data[5]&0xff ); | ||
110 | return ap; | ||
111 | } | ||
112 | else return QString(); | ||
113 | |||
114 | } | ||
115 | |||
116 | bool WExtensions::stats(int &signal, int &noise, int &quality){ | ||
117 | // gather link quality from /proc/net/wireless | ||
118 | if(!QFile::exists(PROCNETWIRELESS)) | ||
119 | return false; | ||
120 | |||
121 | char c; | ||
122 | QString status; | ||
123 | QString name; | ||
124 | |||
125 | QFile wfile( PROCNETWIRELESS ); | ||
126 | if(!wfile.open( IO_ReadOnly )) | ||
127 | return false; | ||
128 | |||
129 | QTextStream wstream( &wfile ); | ||
130 | wstream.readLine(); // skip the first two lines | ||
131 | wstream.readLine(); // because they only contain headers | ||
132 | while(!wstream.atEnd()){ | ||
133 | wstream >> name >> status >> quality >> c >> signal >> c >> noise; | ||
134 | if(name == interface){ | ||
135 | if ( quality > 92 ) | ||
136 | #ifdef MDEBUG | ||
137 | qDebug( "WIFIAPPLET: D'oh! Quality %d > estimated max!\n", quality ); | ||
138 | #endif | ||
139 | if ( ( signal > IW_UPPER ) || ( signal < IW_LOWER ) ) | ||
140 | #ifdef MDEBUG | ||
141 | qDebug( "WIFIAPPLET: Doh! Strength %d > estimated max!\n", signal ); | ||
142 | #endif | ||
143 | if ( ( noise > IW_UPPER ) || ( noise < IW_LOWER ) ) | ||
144 | #ifdef MDEBUG | ||
145 | qDebug( "WIFIAPPLET: Doh! Noise %d > estimated max!\n", noise ); | ||
146 | #endif | ||
147 | return true; | ||
148 | } | ||
149 | } | ||
150 | |||
151 | qDebug("Card no longer present"); | ||
152 | quality = -1; | ||
153 | signal = IW_LOWER; | ||
154 | noise = IW_LOWER; | ||
155 | return false; | ||
156 | } | ||
157 | |||
158 | // wextensions.cpp | ||
diff --git a/noncore/settings/networksettings/wlan/wextensions.h b/noncore/settings/networksettings/wlan/wextensions.h new file mode 100644 index 0000000..29997f5 --- a/dev/null +++ b/noncore/settings/networksettings/wlan/wextensions.h | |||
@@ -0,0 +1,32 @@ | |||
1 | #ifndef WEXTENSIONS_H | ||
2 | #define WEXTENSIONS_H | ||
3 | |||
4 | #include <qstring.h> | ||
5 | |||
6 | #include <netinet/ip.h> | ||
7 | #include <linux/wireless.h> | ||
8 | |||
9 | class WExtensions { | ||
10 | |||
11 | public: | ||
12 | WExtensions(QString interfaceName); | ||
13 | QString getInterfaceName(){return interface;}; | ||
14 | bool doesHaveWirelessExtensions(){return hasWirelessExtensions;}; | ||
15 | QString station(); | ||
16 | QString essid(); | ||
17 | QString mode(); | ||
18 | double frequency(); | ||
19 | QString ap(); | ||
20 | bool stats( int &signal, int &noise, int &quality); | ||
21 | |||
22 | private: | ||
23 | bool hasWirelessExtensions; | ||
24 | QString interface; | ||
25 | |||
26 | // Used in we calls | ||
27 | struct iwreq iwr; | ||
28 | int fd; | ||
29 | |||
30 | }; | ||
31 | |||
32 | #endif | ||
diff --git a/noncore/settings/networksettings/wlan/wlan.pro b/noncore/settings/networksettings/wlan/wlan.pro index 5b94a95..432a096 100644 --- a/noncore/settings/networksettings/wlan/wlan.pro +++ b/noncore/settings/networksettings/wlan/wlan.pro | |||
@@ -1,12 +1,12 @@ | |||
1 | TEMPLATE = lib | 1 | TEMPLATE = lib |
2 | CONFIG += qt warn_on release | 2 | CONFIG += qt warn_on release |
3 | #CONFIG += qt warn_on debug | 3 | #CONFIG += qt warn_on debug |
4 | DESTDIR = $(OPIEDIR)/plugins/networksetup | 4 | DESTDIR = $(OPIEDIR)/plugins/networksetup |
5 | HEADERS = wlanimp.h wlanmodule.h | 5 | HEADERS = wlanimp.h wlanmodule.h wextensions.h |
6 | SOURCES = wlanimp.cpp wlanmodule.cpp | 6 | SOURCES = wlanimp.cpp wlanmodule.cpp wextensions.cpp |
7 | INCLUDEPATH+= $(OPIEDIR)/include ../ | 7 | INCLUDEPATH+= $(OPIEDIR)/include ../ |
8 | DEPENDPATH+= $(OPIEDIR)/include | 8 | DEPENDPATH+= $(OPIEDIR)/include |
9 | LIBS += -lqpe | 9 | LIBS += -lqpe |
10 | INTERFACES= wlan.ui info.ui | 10 | INTERFACES= wlan.ui info.ui |
11 | TARGET = wlanplugin | 11 | TARGET = wlanplugin |
12 | VERSION = 1.0.0 | 12 | VERSION = 1.0.0 |
diff --git a/noncore/settings/networksettings/wlan/wlanmodule.cpp b/noncore/settings/networksettings/wlan/wlanmodule.cpp index 24cb1cd..ab0b9a5 100644 --- a/noncore/settings/networksettings/wlan/wlanmodule.cpp +++ b/noncore/settings/networksettings/wlan/wlanmodule.cpp | |||
@@ -1,222 +1,128 @@ | |||
1 | #include "wlanmodule.h" | 1 | #include "wlanmodule.h" |
2 | #include "wlanimp.h" | 2 | #include "wlanimp.h" |
3 | #include "info.h" | 3 | #include "info.h" |
4 | 4 | #include "wextensions.h" | |
5 | #include <arpa/inet.h> | ||
6 | #include <sys/socket.h> | ||
7 | #include <linux/if_ether.h> | ||
8 | #include <netinet/ip.h> | ||
9 | #include <sys/ioctl.h> | ||
10 | #include <linux/wireless.h> | ||
11 | |||
12 | #include <unistd.h> | ||
13 | #include <math.h> | ||
14 | #include <errno.h> | ||
15 | #include <string.h> | ||
16 | #include <stdio.h> | ||
17 | |||
18 | #include <stdlib.h> | ||
19 | 5 | ||
20 | #include <qlabel.h> | 6 | #include <qlabel.h> |
7 | #include <qprogressbar.h> | ||
21 | 8 | ||
22 | /** | 9 | /** |
23 | * Constructor, find all of the possible interfaces | 10 | * Constructor, find all of the possible interfaces |
24 | */ | 11 | */ |
25 | WLANModule::WLANModule() : Module() { | 12 | WLANModule::WLANModule() : Module() { |
26 | // get output from iwconfig | 13 | // get output from iwconfig |
27 | } | 14 | } |
28 | 15 | ||
29 | /** | 16 | /** |
17 | */ | ||
18 | WLANModule::~WLANModule(){ | ||
19 | Interface *i; | ||
20 | for ( i=list.first(); i != 0; i=list.next() ) | ||
21 | delete i; | ||
22 | } | ||
23 | |||
24 | /** | ||
30 | * Change the current profile | 25 | * Change the current profile |
31 | */ | 26 | */ |
32 | void WLANModule::setProfile(QString newProfile){ | 27 | void WLANModule::setProfile(QString newProfile){ |
33 | profile = newProfile; | 28 | profile = newProfile; |
34 | } | 29 | } |
35 | 30 | ||
36 | /** | 31 | /** |
37 | * get the icon name for this device. | 32 | * get the icon name for this device. |
38 | * @param Interface* can be used in determining the icon. | 33 | * @param Interface* can be used in determining the icon. |
39 | * @return QString the icon name (minus .png, .gif etc) | 34 | * @return QString the icon name (minus .png, .gif etc) |
40 | */ | 35 | */ |
41 | QString WLANModule::getPixmapName(Interface* ){ | 36 | QString WLANModule::getPixmapName(Interface* ){ |
42 | return "wlan"; | 37 | return "wlan"; |
43 | } | 38 | } |
44 | 39 | ||
45 | /** | 40 | /** |
46 | * Check to see if the interface i is owned by this module. | 41 | * Check to see if the interface i is owned by this module. |
47 | * @param Interface* interface to check against | 42 | * @param Interface* interface to check against |
48 | * @return bool true if i is owned by this module, false otherwise. | 43 | * @return bool true if i is owned by this module, false otherwise. |
49 | */ | 44 | */ |
50 | bool WLANModule::isOwner(Interface *i){ | 45 | bool WLANModule::isOwner(Interface *i){ |
51 | if(i->getInterfaceName() == "eth0" || i->getInterfaceName() == "wlan0"){ | 46 | WExtensions we(i->getInterfaceName()); |
47 | if(!we.doesHaveWirelessExtensions()) | ||
48 | return false; | ||
49 | |||
50 | //if(i->getInterfaceName() == "eth0" || i->getInterfaceName() == "wlan0"){ | ||
52 | i->setHardwareName("802.11b"); | 51 | i->setHardwareName("802.11b"); |
52 | list.append(i); | ||
53 | return true; | 53 | return true; |
54 | } | 54 | //} |
55 | return false; | 55 | //return false; |
56 | } | 56 | } |
57 | 57 | ||
58 | /** | 58 | /** |
59 | * Create, set tabWiget and return the WLANConfigure Module | 59 | * Create, set tabWiget and return the WLANConfigure Module |
60 | * @param tabWidget a pointer to the tab widget that this configure has. | 60 | * @param tabWidget a pointer to the tab widget that this configure has. |
61 | * @return QWidget* pointer to the tab widget in this modules configure. | 61 | * @return QWidget* pointer to the tab widget in this modules configure. |
62 | */ | 62 | */ |
63 | QWidget *WLANModule::configure(Interface *i, QTabWidget **tabWidget){ | 63 | QWidget *WLANModule::configure(Interface *, QTabWidget **tabWidget){ |
64 | WLANImp *wlanconfig = new WLANImp(0, "WlanConfig"); | 64 | WLANImp *wlanconfig = new WLANImp(0, "WlanConfig"); |
65 | (*tabWidget) = wlanconfig->tabWidget; | 65 | (*tabWidget) = wlanconfig->tabWidget; |
66 | return wlanconfig; | 66 | return wlanconfig; |
67 | } | 67 | } |
68 | 68 | ||
69 | /** | 69 | /** |
70 | * Create, set tabWiget and return the Information Module | 70 | * Create, set tabWiget and return the Information Module |
71 | * @param tabWidget a pointer to the tab widget that this information has. | 71 | * @param tabWidget a pointer to the tab widget that this information has. |
72 | * @return QWidget* pointer to the tab widget in this modules info. | 72 | * @return QWidget* pointer to the tab widget in this modules info. |
73 | */ | 73 | */ |
74 | QWidget *WLANModule::information(Interface *i, QTabWidget **tabWidget){ | 74 | QWidget *WLANModule::information(Interface *i, QTabWidget **tabWidget){ |
75 | return NULL; | 75 | WExtensions we(i->getInterfaceName()); |
76 | if(!we.doesHaveWirelessExtensions()) | ||
77 | return NULL; | ||
78 | |||
76 | WlanInfo *info = new WlanInfo(0, "wireless info"); | 79 | WlanInfo *info = new WlanInfo(0, "wireless info"); |
77 | (*tabWidget) = info->tabWidget; | 80 | (*tabWidget) = info->tabWidget; |
78 | |||
79 | struct ifreq ifr; | ||
80 | struct sockaddr_in *sin = (struct sockaddr_in *) &ifr.ifr_addr; | ||
81 | int fd = socket( AF_INET, SOCK_DGRAM, 0 ); | ||
82 | 81 | ||
83 | const char* buffer[200]; | 82 | info->essidLabel->setText(we.essid()); |
84 | struct iwreq iwr; | 83 | info->apLabel->setText(we.ap()); |
85 | memset( &iwr, 0, sizeof( iwr ) ); | 84 | info->stationLabel->setText(we.station()); |
86 | iwr.u.essid.pointer = (caddr_t) buffer; | 85 | info->modeLabel->setText(we.mode()); |
87 | iwr.u.essid.length = IW_ESSID_MAX_SIZE; | 86 | info->freqLabel->setText(QString("%1").arg(we.frequency())); |
88 | iwr.u.essid.flags = 0; | 87 | int signal = 0; |
89 | 88 | int noise = 0; | |
90 | // check if it is an IEEE 802.11 standard conform | 89 | int quality = 0; |
91 | // wireless device by sending SIOCGIWESSID | 90 | we.stats(signal, noise, quality); |
92 | // which also gives back the Extended Service Set ID | 91 | info->signalProgressBar->setProgress(signal); |
93 | // (see IEEE 802.11 for more information) | 92 | info->noiseProgressBar->setProgress(noise); |
94 | 93 | info->qualityProgressBar->setProgress(quality); | |
95 | QString n = (i->getInterfaceName()); | ||
96 | const char* iname = n.latin1(); | ||
97 | strcpy( iwr.ifr_ifrn.ifrn_name, (const char *)iname ); | ||
98 | int result = ioctl( fd, SIOCGIWESSID, &iwr ); | ||
99 | if ( result == 0 ){ | ||
100 | //hasWirelessExtensions = true; | ||
101 | iwr.u.essid.pointer[(unsigned int) iwr.u.essid.length-1] = '\0'; | ||
102 | info->essidLabel->setText(QString(iwr.u.essid.pointer)); | ||
103 | } | ||
104 | else | ||
105 | return info; | ||
106 | //info->essidLabel->setText("*** Unknown ***"); | ||
107 | |||
108 | // Address of associated access-point | ||
109 | result = ioctl( fd, SIOCGIWAP, &iwr ); | ||
110 | if ( result == 0 ){ | ||
111 | QString foo = foo.sprintf( "%.2X:%.2X:%.2X:%.2X:%.2X:%.2X", | ||
112 | iwr.u.ap_addr.sa_data[0]&0xff, | ||
113 | iwr.u.ap_addr.sa_data[1]&0xff, | ||
114 | iwr.u.ap_addr.sa_data[2]&0xff, | ||
115 | iwr.u.ap_addr.sa_data[3]&0xff, | ||
116 | iwr.u.ap_addr.sa_data[4]&0xff, | ||
117 | iwr.u.ap_addr.sa_data[5]&0xff ); | ||
118 | info->apLabel->setText(foo); | ||
119 | } | ||
120 | else info->apLabel->setText("*** Unknown ***"); | ||
121 | |||
122 | iwr.u.data.pointer = (caddr_t) buffer; | ||
123 | iwr.u.data.length = IW_ESSID_MAX_SIZE; | ||
124 | iwr.u.data.flags = 0; | ||
125 | result = ioctl( fd, SIOCGIWNICKN, &iwr ); | ||
126 | if ( result == 0 ){ | ||
127 | iwr.u.data.pointer[(unsigned int) iwr.u.data.length-1] = '\0'; | ||
128 | info->stationLabel->setText(iwr.u.data.pointer); | ||
129 | } | ||
130 | else info->stationLabel->setText("*** Unknown ***"); | ||
131 | |||
132 | result = ioctl( fd, SIOCGIWMODE, &iwr ); | ||
133 | if ( result == 0 ) | ||
134 | info->modeLabel->setText( QString("%1").arg(iwr.u.mode == IW_MODE_ADHOC ? "Ad-Hoc" : "Managed")); | ||
135 | else | ||
136 | info->modeLabel->setText("*** Unknown ***"); | ||
137 | |||
138 | result = ioctl( fd, SIOCGIWFREQ, &iwr ); | ||
139 | if ( result == 0 ) | ||
140 | info->freqLabel->setText(QString("%1").arg((double( iwr.u.freq.m ) * pow( 10, iwr.u.freq.e ) / 1000000000))); | ||
141 | else | ||
142 | info->freqLabel->setText("*** Unknown ***"); | ||
143 | |||
144 | /* | ||
145 | // gather link quality from /proc/net/wireless | ||
146 | |||
147 | char c; | ||
148 | QString status; | ||
149 | QString name; | ||
150 | QFile wfile( PROCNETWIRELESS ); | ||
151 | bool hasFile = wfile.open( IO_ReadOnly ); | ||
152 | QTextStream wstream( &wfile ); | ||
153 | if ( hasFile ) | ||
154 | { | ||
155 | wstream.readLine(); // skip the first two lines | ||
156 | wstream.readLine(); // because they only contain headers | ||
157 | } | ||
158 | if ( ( !hasFile ) || ( wstream.atEnd() ) ) | ||
159 | { | ||
160 | #ifdef MDEBUG | ||
161 | qDebug( "WIFIAPPLET: D'oh! Someone removed the card..." ); | ||
162 | #endif | ||
163 | quality = -1; | ||
164 | signal = IW_LOWER; | ||
165 | noise = IW_LOWER; | ||
166 | return false; | ||
167 | } | ||
168 | |||
169 | wstream >> name >> status >> quality >> c >> signal >> c >> noise; | ||
170 | |||
171 | if ( quality > 92 ) | ||
172 | #ifdef MDEBUG | ||
173 | qDebug( "WIFIAPPLET: D'oh! Quality %d > estimated max!\n", quality ); | ||
174 | #endif | ||
175 | if ( ( signal > IW_UPPER ) || ( signal < IW_LOWER ) ) | ||
176 | #ifdef MDEBUG | ||
177 | qDebug( "WIFIAPPLET: Doh! Strength %d > estimated max!\n", signal ); | ||
178 | #endif | ||
179 | if ( ( noise > IW_UPPER ) || ( noise < IW_LOWER ) ) | ||
180 | #ifdef MDEBUG | ||
181 | qDebug( "WIFIAPPLET: Doh! Noise %d > estimated max!\n", noise ); | ||
182 | #endif | ||
183 | |||
184 | return true; | ||
185 | |||
186 | } | ||
187 | */ | ||
188 | return info; | 94 | return info; |
189 | } | 95 | } |
190 | 96 | ||
191 | /** | 97 | /** |
192 | * Get all active (up or down) interfaces | 98 | * Get all active (up or down) interfaces |
193 | * @return QList<Interface> A list of interfaces that exsist that havn't | 99 | * @return QList<Interface> A list of interfaces that exsist that havn't |
194 | * been called by isOwner() | 100 | * been called by isOwner() |
195 | */ | 101 | */ |
196 | QList<Interface> WLANModule::getInterfaces(){ | 102 | QList<Interface> WLANModule::getInterfaces(){ |
197 | return list; | 103 | return list; |
198 | } | 104 | } |
199 | 105 | ||
200 | /** | 106 | /** |
201 | * Attempt to add a new interface as defined by name | 107 | * Attempt to add a new interface as defined by name |
202 | * @param name the name of the type of interface that should be created given | 108 | * @param name the name of the type of interface that should be created given |
203 | * by possibleNewInterfaces(); | 109 | * by possibleNewInterfaces(); |
204 | * @return Interface* NULL if it was unable to be created. | 110 | * @return Interface* NULL if it was unable to be created. |
205 | */ | 111 | */ |
206 | Interface *WLANModule::addNewInterface(QString ){ | 112 | Interface *WLANModule::addNewInterface(QString ){ |
207 | // We can't add a 802.11 interface, either the hardware will be there | 113 | // We can't add a 802.11 interface, either the hardware will be there |
208 | // or it wont. | 114 | // or it wont. |
209 | return NULL; | 115 | return NULL; |
210 | } | 116 | } |
211 | 117 | ||
212 | /** | 118 | /** |
213 | * Attempts to remove the interface, doesn't delete i | 119 | * Attempts to remove the interface, doesn't delete i |
214 | * @return bool true if successfull, false otherwise. | 120 | * @return bool true if successfull, false otherwise. |
215 | */ | 121 | */ |
216 | bool WLANModule::remove(Interface*){ | 122 | bool WLANModule::remove(Interface*){ |
217 | // Can't remove a hardware device, you can stop it though. | 123 | // Can't remove a hardware device, you can stop it though. |
218 | return false; | 124 | return false; |
219 | } | 125 | } |
220 | 126 | ||
221 | // wlanmodule.cpp | 127 | // wlanmodule.cpp |
222 | 128 | ||
diff --git a/noncore/settings/networksettings/wlan/wlanmodule.h b/noncore/settings/networksettings/wlan/wlanmodule.h index 63f0949..1418ce8 100644 --- a/noncore/settings/networksettings/wlan/wlanmodule.h +++ b/noncore/settings/networksettings/wlan/wlanmodule.h | |||
@@ -1,40 +1,41 @@ | |||
1 | #ifndef WLAN_MODULE_H | 1 | #ifndef WLAN_MODULE_H |
2 | #define WLAN_MODULE_H | 2 | #define WLAN_MODULE_H |
3 | 3 | ||
4 | #include "module.h" | 4 | #include "module.h" |
5 | 5 | ||
6 | class WLANModule : Module{ | 6 | class WLANModule : Module{ |
7 | 7 | ||
8 | signals: | 8 | signals: |
9 | void updateInterface(Interface *i); | 9 | void updateInterface(Interface *i); |
10 | 10 | ||
11 | public: | 11 | public: |
12 | WLANModule(); | 12 | WLANModule(); |
13 | 13 | ~WLANModule(); | |
14 | |||
14 | virtual void setProfile(QString newProfile); | 15 | virtual void setProfile(QString newProfile); |
15 | virtual bool isOwner(Interface *); | 16 | virtual bool isOwner(Interface *); |
16 | virtual QWidget *configure(Interface *i, QTabWidget **tabWidget); | 17 | virtual QWidget *configure(Interface *i, QTabWidget **tabWidget); |
17 | virtual QWidget *information(Interface *i, QTabWidget **tabWidget); | 18 | virtual QWidget *information(Interface *i, QTabWidget **tabWidget); |
18 | virtual QList<Interface> getInterfaces(); | 19 | virtual QList<Interface> getInterfaces(); |
19 | virtual void possibleNewInterfaces(QMap<QString, QString> &list){}; | 20 | virtual void possibleNewInterfaces(QMap<QString, QString> &){}; |
20 | virtual Interface *addNewInterface(QString name); | 21 | virtual Interface *addNewInterface(QString name); |
21 | virtual bool remove(Interface* i); | 22 | virtual bool remove(Interface* i); |
22 | virtual QString getPixmapName(Interface* i); | 23 | virtual QString getPixmapName(Interface* i); |
23 | 24 | ||
24 | private: | 25 | private: |
25 | QList<Interface> list; | 26 | QList<Interface> list; |
26 | QString profile; | 27 | QString profile; |
27 | 28 | ||
28 | }; | 29 | }; |
29 | 30 | ||
30 | extern "C" | 31 | extern "C" |
31 | { | 32 | { |
32 | void* create_plugin() { | 33 | void* create_plugin() { |
33 | return new WLANModule(); | 34 | return new WLANModule(); |
34 | } | 35 | } |
35 | }; | 36 | }; |
36 | 37 | ||
37 | #endif | 38 | #endif |
38 | 39 | ||
39 | // wlanmodule.h | 40 | // wlanmodule.h |
40 | 41 | ||