summaryrefslogtreecommitdiff
authormickeyl <mickeyl>2003-05-10 17:03:50 (UTC)
committer mickeyl <mickeyl>2003-05-10 17:03:50 (UTC)
commite858fffe853c2893775c202c52ba1d4898e723bc (patch) (unidiff)
tree6d5bbe5ff471d12c89fd1e6d04458477fb1292d3
parente9195d3c80eca6ca41893ddcfef46683da6c5627 (diff)
downloadopie-e858fffe853c2893775c202c52ba1d4898e723bc.zip
opie-e858fffe853c2893775c202c52ba1d4898e723bc.tar.gz
opie-e858fffe853c2893775c202c52ba1d4898e723bc.tar.bz2
- use OManufacturerDB instead of ManufacturerDB
- misc fixes
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/net/wellenreiter/gui/configbase.ui143
-rw-r--r--noncore/net/wellenreiter/gui/gui.pro2
-rw-r--r--noncore/net/wellenreiter/gui/mainwindow.cpp12
-rw-r--r--noncore/net/wellenreiter/gui/manufacturers.cpp60
-rw-r--r--noncore/net/wellenreiter/gui/manufacturers.h36
-rw-r--r--noncore/net/wellenreiter/gui/scanlist.cpp59
-rw-r--r--noncore/net/wellenreiter/gui/scanlist.h24
-rw-r--r--noncore/net/wellenreiter/gui/wellenreiter.cpp74
-rw-r--r--noncore/net/wellenreiter/gui/wellenreiter.h4
-rw-r--r--noncore/net/wellenreiter/gui/wellenreitertemplate.ui605
10 files changed, 199 insertions, 820 deletions
diff --git a/noncore/net/wellenreiter/gui/configbase.ui b/noncore/net/wellenreiter/gui/configbase.ui
index 590ca92..554fc29 100644
--- a/noncore/net/wellenreiter/gui/configbase.ui
+++ b/noncore/net/wellenreiter/gui/configbase.ui
@@ -1,898 +1,1037 @@
1<!DOCTYPE UI><UI> 1<!DOCTYPE UI><UI>
2<class>WellenreiterConfigBase</class> 2<class>WellenreiterConfigBase</class>
3<widget> 3<widget>
4 <class>QDialog</class> 4 <class>QDialog</class>
5 <property stdset="1"> 5 <property stdset="1">
6 <name>name</name> 6 <name>name</name>
7 <cstring>WellenreiterConfigBase</cstring> 7 <cstring>WellenreiterConfigBase</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>261</width> 14 <width>230</width>
15 <height>280</height> 15 <height>287</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>Wellenreiter II COnfiguration Dialog</string> 20 <string>Wellenreiter II COnfiguration Dialog</string>
21 </property> 21 </property>
22 <property> 22 <property>
23 <name>layoutMargin</name> 23 <name>layoutMargin</name>
24 </property> 24 </property>
25 <property> 25 <property>
26 <name>layoutSpacing</name> 26 <name>layoutSpacing</name>
27 </property> 27 </property>
28 <grid> 28 <grid>
29 <property stdset="1"> 29 <property stdset="1">
30 <name>margin</name> 30 <name>margin</name>
31 <number>2</number> 31 <number>2</number>
32 </property> 32 </property>
33 <property stdset="1"> 33 <property stdset="1">
34 <name>spacing</name> 34 <name>spacing</name>
35 <number>3</number> 35 <number>3</number>
36 </property> 36 </property>
37 <widget row="0" column="0" > 37 <widget row="0" column="0" >
38 <class>QTabWidget</class> 38 <class>QTabWidget</class>
39 <property stdset="1"> 39 <property stdset="1">
40 <name>name</name> 40 <name>name</name>
41 <cstring>tab</cstring> 41 <cstring>tab</cstring>
42 </property> 42 </property>
43 <property> 43 <property>
44 <name>layoutMargin</name> 44 <name>layoutMargin</name>
45 </property> 45 </property>
46 <property> 46 <property>
47 <name>layoutSpacing</name> 47 <name>layoutSpacing</name>
48 </property> 48 </property>
49 <widget> 49 <widget>
50 <class>QWidget</class> 50 <class>QWidget</class>
51 <property stdset="1"> 51 <property stdset="1">
52 <name>name</name> 52 <name>name</name>
53 <cstring>tab</cstring> 53 <cstring>tab</cstring>
54 </property> 54 </property>
55 <attribute> 55 <attribute>
56 <name>title</name> 56 <name>title</name>
57 <string>Interface</string> 57 <string>Interface</string>
58 </attribute> 58 </attribute>
59 <grid> 59 <grid>
60 <property stdset="1"> 60 <property stdset="1">
61 <name>margin</name> 61 <name>margin</name>
62 <number>5</number> 62 <number>5</number>
63 </property> 63 </property>
64 <property stdset="1"> 64 <property stdset="1">
65 <name>spacing</name> 65 <name>spacing</name>
66 <number>3</number> 66 <number>3</number>
67 </property> 67 </property>
68 <widget row="0" column="0" > 68 <widget row="0" column="0" >
69 <class>QLabel</class> 69 <class>QLabel</class>
70 <property stdset="1"> 70 <property stdset="1">
71 <name>name</name> 71 <name>name</name>
72 <cstring>TextLabel1_2</cstring> 72 <cstring>TextLabel1_2</cstring>
73 </property> 73 </property>
74 <property stdset="1"> 74 <property stdset="1">
75 <name>enabled</name> 75 <name>enabled</name>
76 <bool>true</bool> 76 <bool>true</bool>
77 </property> 77 </property>
78 <property stdset="1"> 78 <property stdset="1">
79 <name>text</name> 79 <name>text</name>
80 <string>Name:</string> 80 <string>Name:</string>
81 </property> 81 </property>
82 </widget> 82 </widget>
83 <widget row="1" column="0" > 83 <widget row="1" column="0" >
84 <class>QLabel</class> 84 <class>QLabel</class>
85 <property stdset="1"> 85 <property stdset="1">
86 <name>name</name> 86 <name>name</name>
87 <cstring>TextLabel2_3</cstring> 87 <cstring>TextLabel2_3</cstring>
88 </property> 88 </property>
89 <property stdset="1"> 89 <property stdset="1">
90 <name>enabled</name> 90 <name>enabled</name>
91 <bool>true</bool> 91 <bool>true</bool>
92 </property> 92 </property>
93 <property stdset="1"> 93 <property stdset="1">
94 <name>text</name> 94 <name>text</name>
95 <string>Driver:</string> 95 <string>Driver:</string>
96 </property> 96 </property>
97 </widget> 97 </widget>
98 <widget row="2" column="0" rowspan="1" colspan="4" > 98 <widget row="2" column="0" rowspan="1" colspan="4" >
99 <class>QCheckBox</class> 99 <class>QCheckBox</class>
100 <property stdset="1"> 100 <property stdset="1">
101 <name>name</name> 101 <name>name</name>
102 <cstring>prismHeader</cstring> 102 <cstring>prismHeader</cstring>
103 </property> 103 </property>
104 <property stdset="1"> 104 <property stdset="1">
105 <name>text</name> 105 <name>text</name>
106 <string>Use additional PRISM header</string> 106 <string>Use additional PRISM header</string>
107 </property> 107 </property>
108 </widget> 108 </widget>
109 <widget row="6" column="0" rowspan="1" colspan="4" > 109 <widget row="6" column="0" rowspan="1" colspan="4" >
110 <class>QGroupBox</class> 110 <class>QGroupBox</class>
111 <property stdset="1"> 111 <property stdset="1">
112 <name>name</name> 112 <name>name</name>
113 <cstring>GroupBox1</cstring> 113 <cstring>GroupBox1</cstring>
114 </property> 114 </property>
115 <property stdset="1"> 115 <property stdset="1">
116 <name>enabled</name> 116 <name>enabled</name>
117 <bool>false</bool> 117 <bool>false</bool>
118 </property> 118 </property>
119 <property stdset="1"> 119 <property stdset="1">
120 <name>title</name> 120 <name>title</name>
121 <string>Scan on channel</string> 121 <string>Scan on channel</string>
122 </property> 122 </property>
123 <property> 123 <property>
124 <name>layoutMargin</name> 124 <name>layoutMargin</name>
125 </property> 125 </property>
126 <property> 126 <property>
127 <name>layoutSpacing</name> 127 <name>layoutSpacing</name>
128 </property> 128 </property>
129 <grid> 129 <grid>
130 <property stdset="1"> 130 <property stdset="1">
131 <name>margin</name> 131 <name>margin</name>
132 <number>4</number> 132 <number>4</number>
133 </property> 133 </property>
134 <property stdset="1"> 134 <property stdset="1">
135 <name>spacing</name> 135 <name>spacing</name>
136 <number>2</number> 136 <number>2</number>
137 </property> 137 </property>
138 <widget row="1" column="1" > 138 <widget row="1" column="1" >
139 <class>QCheckBox</class> 139 <class>QCheckBox</class>
140 <property stdset="1"> 140 <property stdset="1">
141 <name>name</name> 141 <name>name</name>
142 <cstring>channel6</cstring> 142 <cstring>channel6</cstring>
143 </property> 143 </property>
144 <property stdset="1"> 144 <property stdset="1">
145 <name>text</name> 145 <name>text</name>
146 <string>6</string> 146 <string>6</string>
147 </property> 147 </property>
148 </widget> 148 </widget>
149 <widget row="1" column="3" > 149 <widget row="1" column="3" >
150 <class>QCheckBox</class> 150 <class>QCheckBox</class>
151 <property stdset="1"> 151 <property stdset="1">
152 <name>name</name> 152 <name>name</name>
153 <cstring>channel8</cstring> 153 <cstring>channel8</cstring>
154 </property> 154 </property>
155 <property stdset="1"> 155 <property stdset="1">
156 <name>text</name> 156 <name>text</name>
157 <string>8</string> 157 <string>8</string>
158 </property> 158 </property>
159 </widget> 159 </widget>
160 <widget row="0" column="2" > 160 <widget row="0" column="2" >
161 <class>QCheckBox</class> 161 <class>QCheckBox</class>
162 <property stdset="1"> 162 <property stdset="1">
163 <name>name</name> 163 <name>name</name>
164 <cstring>channel2</cstring> 164 <cstring>channel2</cstring>
165 </property> 165 </property>
166 <property stdset="1"> 166 <property stdset="1">
167 <name>text</name> 167 <name>text</name>
168 <string>2</string> 168 <string>2</string>
169 </property> 169 </property>
170 </widget> 170 </widget>
171 <widget row="1" column="4" > 171 <widget row="1" column="4" >
172 <class>QCheckBox</class> 172 <class>QCheckBox</class>
173 <property stdset="1"> 173 <property stdset="1">
174 <name>name</name> 174 <name>name</name>
175 <cstring>channel9</cstring> 175 <cstring>channel9</cstring>
176 </property> 176 </property>
177 <property stdset="1"> 177 <property stdset="1">
178 <name>text</name> 178 <name>text</name>
179 <string>9</string> 179 <string>9</string>
180 </property> 180 </property>
181 </widget> 181 </widget>
182 <widget row="0" column="1" > 182 <widget row="0" column="1" >
183 <class>QCheckBox</class> 183 <class>QCheckBox</class>
184 <property stdset="1"> 184 <property stdset="1">
185 <name>name</name> 185 <name>name</name>
186 <cstring>channel1</cstring> 186 <cstring>channel1</cstring>
187 </property> 187 </property>
188 <property stdset="1"> 188 <property stdset="1">
189 <name>text</name> 189 <name>text</name>
190 <string>1</string> 190 <string>1</string>
191 </property> 191 </property>
192 </widget> 192 </widget>
193 <widget row="0" column="0" > 193 <widget row="0" column="0" >
194 <class>QCheckBox</class> 194 <class>QCheckBox</class>
195 <property stdset="1"> 195 <property stdset="1">
196 <name>name</name> 196 <name>name</name>
197 <cstring>channelAll</cstring> 197 <cstring>channelAll</cstring>
198 </property> 198 </property>
199 <property stdset="1"> 199 <property stdset="1">
200 <name>text</name> 200 <name>text</name>
201 <string>All</string> 201 <string>All</string>
202 </property> 202 </property>
203 </widget> 203 </widget>
204 <widget row="2" column="1" > 204 <widget row="2" column="1" >
205 <class>QCheckBox</class> 205 <class>QCheckBox</class>
206 <property stdset="1"> 206 <property stdset="1">
207 <name>name</name> 207 <name>name</name>
208 <cstring>channel11</cstring> 208 <cstring>channel11</cstring>
209 </property> 209 </property>
210 <property stdset="1"> 210 <property stdset="1">
211 <name>text</name> 211 <name>text</name>
212 <string>11</string> 212 <string>11</string>
213 </property> 213 </property>
214 </widget> 214 </widget>
215 <widget row="2" column="0" > 215 <widget row="2" column="0" >
216 <class>QCheckBox</class> 216 <class>QCheckBox</class>
217 <property stdset="1"> 217 <property stdset="1">
218 <name>name</name> 218 <name>name</name>
219 <cstring>channel10</cstring> 219 <cstring>channel10</cstring>
220 </property> 220 </property>
221 <property stdset="1"> 221 <property stdset="1">
222 <name>text</name> 222 <name>text</name>
223 <string>10</string> 223 <string>10</string>
224 </property> 224 </property>
225 </widget> 225 </widget>
226 <widget row="1" column="2" > 226 <widget row="1" column="2" >
227 <class>QCheckBox</class> 227 <class>QCheckBox</class>
228 <property stdset="1"> 228 <property stdset="1">
229 <name>name</name> 229 <name>name</name>
230 <cstring>channel7</cstring> 230 <cstring>channel7</cstring>
231 </property> 231 </property>
232 <property stdset="1"> 232 <property stdset="1">
233 <name>text</name> 233 <name>text</name>
234 <string>7</string> 234 <string>7</string>
235 </property> 235 </property>
236 </widget> 236 </widget>
237 <widget row="0" column="3" > 237 <widget row="0" column="3" >
238 <class>QCheckBox</class> 238 <class>QCheckBox</class>
239 <property stdset="1"> 239 <property stdset="1">
240 <name>name</name> 240 <name>name</name>
241 <cstring>channel3</cstring> 241 <cstring>channel3</cstring>
242 </property> 242 </property>
243 <property stdset="1"> 243 <property stdset="1">
244 <name>text</name> 244 <name>text</name>
245 <string>3</string> 245 <string>3</string>
246 </property> 246 </property>
247 </widget> 247 </widget>
248 <widget row="1" column="0" > 248 <widget row="1" column="0" >
249 <class>QCheckBox</class> 249 <class>QCheckBox</class>
250 <property stdset="1"> 250 <property stdset="1">
251 <name>name</name> 251 <name>name</name>
252 <cstring>channel5</cstring> 252 <cstring>channel5</cstring>
253 </property> 253 </property>
254 <property stdset="1"> 254 <property stdset="1">
255 <name>text</name> 255 <name>text</name>
256 <string>5</string> 256 <string>5</string>
257 </property> 257 </property>
258 </widget> 258 </widget>
259 <widget row="0" column="4" > 259 <widget row="0" column="4" >
260 <class>QCheckBox</class> 260 <class>QCheckBox</class>
261 <property stdset="1"> 261 <property stdset="1">
262 <name>name</name> 262 <name>name</name>
263 <cstring>channel4</cstring> 263 <cstring>channel4</cstring>
264 </property> 264 </property>
265 <property stdset="1"> 265 <property stdset="1">
266 <name>text</name> 266 <name>text</name>
267 <string>4</string> 267 <string>4</string>
268 </property> 268 </property>
269 </widget> 269 </widget>
270 <widget row="2" column="2" > 270 <widget row="2" column="2" >
271 <class>QCheckBox</class> 271 <class>QCheckBox</class>
272 <property stdset="1"> 272 <property stdset="1">
273 <name>name</name> 273 <name>name</name>
274 <cstring>channel12</cstring> 274 <cstring>channel12</cstring>
275 </property> 275 </property>
276 <property stdset="1"> 276 <property stdset="1">
277 <name>text</name> 277 <name>text</name>
278 <string>12</string> 278 <string>12</string>
279 </property> 279 </property>
280 </widget> 280 </widget>
281 <widget row="2" column="3" > 281 <widget row="2" column="3" >
282 <class>QCheckBox</class> 282 <class>QCheckBox</class>
283 <property stdset="1"> 283 <property stdset="1">
284 <name>name</name> 284 <name>name</name>
285 <cstring>channel13</cstring> 285 <cstring>channel13</cstring>
286 </property> 286 </property>
287 <property stdset="1"> 287 <property stdset="1">
288 <name>text</name> 288 <name>text</name>
289 <string>13</string> 289 <string>13</string>
290 </property> 290 </property>
291 </widget> 291 </widget>
292 <widget row="2" column="4" > 292 <widget row="2" column="4" >
293 <class>QCheckBox</class> 293 <class>QCheckBox</class>
294 <property stdset="1"> 294 <property stdset="1">
295 <name>name</name> 295 <name>name</name>
296 <cstring>channel14</cstring> 296 <cstring>channel14</cstring>
297 </property> 297 </property>
298 <property stdset="1"> 298 <property stdset="1">
299 <name>text</name> 299 <name>text</name>
300 <string>14</string> 300 <string>14</string>
301 </property> 301 </property>
302 </widget> 302 </widget>
303 </grid> 303 </grid>
304 </widget> 304 </widget>
305 <widget row="0" column="1" rowspan="1" colspan="3" > 305 <widget row="0" column="1" rowspan="1" colspan="3" >
306 <class>QComboBox</class> 306 <class>QComboBox</class>
307 <property stdset="1"> 307 <property stdset="1">
308 <name>name</name> 308 <name>name</name>
309 <cstring>interfaceName</cstring> 309 <cstring>interfaceName</cstring>
310 </property> 310 </property>
311 <property stdset="1"> 311 <property stdset="1">
312 <name>enabled</name> 312 <name>enabled</name>
313 <bool>true</bool> 313 <bool>true</bool>
314 </property> 314 </property>
315 <property> 315 <property>
316 <name>whatsThis</name> 316 <name>whatsThis</name>
317 <string>Choose the interface used for sniffing.</string> 317 <string>Choose the interface used for sniffing.</string>
318 </property> 318 </property>
319 </widget> 319 </widget>
320 <widget row="1" column="1" rowspan="1" colspan="3" > 320 <widget row="1" column="1" rowspan="1" colspan="3" >
321 <class>QComboBox</class> 321 <class>QComboBox</class>
322 <item> 322 <item>
323 <property> 323 <property>
324 <name>text</name> 324 <name>text</name>
325 <string>&lt;select&gt;</string> 325 <string>&lt;select&gt;</string>
326 </property> 326 </property>
327 </item> 327 </item>
328 <item> 328 <item>
329 <property> 329 <property>
330 <name>text</name> 330 <name>text</name>
331 <string>cisco</string> 331 <string>cisco</string>
332 </property> 332 </property>
333 </item> 333 </item>
334 <item> 334 <item>
335 <property> 335 <property>
336 <name>text</name> 336 <name>text</name>
337 <string>wlan-ng</string> 337 <string>wlan-ng</string>
338 </property> 338 </property>
339 </item> 339 </item>
340 <item> 340 <item>
341 <property> 341 <property>
342 <name>text</name> 342 <name>text</name>
343 <string>hostap</string> 343 <string>hostap</string>
344 </property> 344 </property>
345 </item> 345 </item>
346 <item> 346 <item>
347 <property> 347 <property>
348 <name>text</name> 348 <name>text</name>
349 <string>orinoco</string> 349 <string>orinoco</string>
350 </property> 350 </property>
351 </item> 351 </item>
352 <item> 352 <item>
353 <property> 353 <property>
354 <name>text</name> 354 <name>text</name>
355 <string>&lt;manual&gt;</string> 355 <string>&lt;manual&gt;</string>
356 </property> 356 </property>
357 </item> 357 </item>
358 <item> 358 <item>
359 <property> 359 <property>
360 <name>text</name> 360 <name>text</name>
361 <string>&lt;file&gt;</string> 361 <string>&lt;file&gt;</string>
362 </property> 362 </property>
363 </item> 363 </item>
364 <property stdset="1"> 364 <property stdset="1">
365 <name>name</name> 365 <name>name</name>
366 <cstring>deviceType</cstring> 366 <cstring>deviceType</cstring>
367 </property> 367 </property>
368 <property stdset="1"> 368 <property stdset="1">
369 <name>enabled</name> 369 <name>enabled</name>
370 <bool>true</bool> 370 <bool>true</bool>
371 </property> 371 </property>
372 <property> 372 <property>
373 <name>whatsThis</name> 373 <name>whatsThis</name>
374 <string>Choose the type of driver used for sniffing.</string> 374 <string>Choose the type of driver used for sniffing.</string>
375 </property> 375 </property>
376 </widget> 376 </widget>
377 <spacer row="3" column="0" > 377 <spacer row="3" column="0" >
378 <property> 378 <property>
379 <name>name</name> 379 <name>name</name>
380 <cstring>Spacer4</cstring> 380 <cstring>Spacer4</cstring>
381 </property> 381 </property>
382 <property stdset="1"> 382 <property stdset="1">
383 <name>orientation</name> 383 <name>orientation</name>
384 <enum>Vertical</enum> 384 <enum>Vertical</enum>
385 </property> 385 </property>
386 <property stdset="1"> 386 <property stdset="1">
387 <name>sizeType</name> 387 <name>sizeType</name>
388 <enum>Expanding</enum> 388 <enum>Expanding</enum>
389 </property> 389 </property>
390 <property> 390 <property>
391 <name>sizeHint</name> 391 <name>sizeHint</name>
392 <size> 392 <size>
393 <width>20</width> 393 <width>20</width>
394 <height>20</height> 394 <height>20</height>
395 </size> 395 </size>
396 </property> 396 </property>
397 </spacer> 397 </spacer>
398 <widget row="4" column="2" > 398 <widget row="4" column="2" >
399 <class>QLabel</class> 399 <class>QLabel</class>
400 <property stdset="1"> 400 <property stdset="1">
401 <name>name</name> 401 <name>name</name>
402 <cstring>TextLabel1</cstring> 402 <cstring>TextLabel1</cstring>
403 </property> 403 </property>
404 <property stdset="1"> 404 <property stdset="1">
405 <name>text</name> 405 <name>text</name>
406 <string>every</string> 406 <string>every</string>
407 </property> 407 </property>
408 </widget> 408 </widget>
409 <widget row="4" column="0" rowspan="1" colspan="2" > 409 <widget row="4" column="0" rowspan="1" colspan="2" >
410 <class>QCheckBox</class> 410 <class>QCheckBox</class>
411 <property stdset="1"> 411 <property stdset="1">
412 <name>name</name> 412 <name>name</name>
413 <cstring>hopChannels</cstring> 413 <cstring>hopChannels</cstring>
414 </property> 414 </property>
415 <property stdset="1"> 415 <property stdset="1">
416 <name>text</name> 416 <name>text</name>
417 <string>Hop Channels</string> 417 <string>Hop Channels</string>
418 </property> 418 </property>
419 <property stdset="1"> 419 <property stdset="1">
420 <name>checked</name> 420 <name>checked</name>
421 <bool>true</bool> 421 <bool>true</bool>
422 </property> 422 </property>
423 </widget> 423 </widget>
424 <widget row="4" column="3" > 424 <widget row="4" column="3" >
425 <class>QSpinBox</class> 425 <class>QSpinBox</class>
426 <property stdset="1"> 426 <property stdset="1">
427 <name>name</name> 427 <name>name</name>
428 <cstring>hopInterval</cstring> 428 <cstring>hopInterval</cstring>
429 </property> 429 </property>
430 <property stdset="1"> 430 <property stdset="1">
431 <name>enabled</name> 431 <name>enabled</name>
432 <bool>true</bool> 432 <bool>true</bool>
433 </property> 433 </property>
434 <property stdset="1"> 434 <property stdset="1">
435 <name>suffix</name> 435 <name>suffix</name>
436 <string> ms</string> 436 <string> ms</string>
437 </property> 437 </property>
438 <property stdset="1"> 438 <property stdset="1">
439 <name>maxValue</name> 439 <name>maxValue</name>
440 <number>2000</number> 440 <number>2000</number>
441 </property> 441 </property>
442 <property stdset="1"> 442 <property stdset="1">
443 <name>minValue</name> 443 <name>minValue</name>
444 <number>100</number> 444 <number>100</number>
445 </property> 445 </property>
446 <property stdset="1"> 446 <property stdset="1">
447 <name>lineStep</name> 447 <name>lineStep</name>
448 <number>100</number> 448 <number>100</number>
449 </property> 449 </property>
450 <property stdset="1"> 450 <property stdset="1">
451 <name>value</name> 451 <name>value</name>
452 <number>1000</number> 452 <number>1000</number>
453 </property> 453 </property>
454 <property> 454 <property>
455 <name>whatsThis</name> 455 <name>whatsThis</name>
456 <string>Choose the channel hop interval.</string> 456 <string>Choose the channel hop interval.</string>
457 </property> 457 </property>
458 </widget> 458 </widget>
459 <widget row="5" column="0" rowspan="1" colspan="4" > 459 <widget row="5" column="0" rowspan="1" colspan="4" >
460 <class>QCheckBox</class> 460 <class>QCheckBox</class>
461 <property stdset="1"> 461 <property stdset="1">
462 <name>name</name> 462 <name>name</name>
463 <cstring>adaptiveHopping</cstring> 463 <cstring>adaptiveHopping</cstring>
464 </property> 464 </property>
465 <property stdset="1"> 465 <property stdset="1">
466 <name>enabled</name> 466 <name>enabled</name>
467 <bool>false</bool> 467 <bool>false</bool>
468 </property> 468 </property>
469 <property stdset="1"> 469 <property stdset="1">
470 <name>text</name> 470 <name>text</name>
471 <string>Use Adaptive(TM) Hop Scheme</string> 471 <string>Use Adaptive(TM) Hop Scheme</string>
472 </property> 472 </property>
473 </widget> 473 </widget>
474 </grid> 474 </grid>
475 </widget> 475 </widget>
476 <widget> 476 <widget>
477 <class>QWidget</class> 477 <class>QWidget</class>
478 <property stdset="1"> 478 <property stdset="1">
479 <name>name</name> 479 <name>name</name>
480 <cstring>tab</cstring> 480 <cstring>tab</cstring>
481 </property> 481 </property>
482 <attribute> 482 <attribute>
483 <name>title</name> 483 <name>title</name>
484 <string>Capture</string> 484 <string>Capture</string>
485 </attribute> 485 </attribute>
486 <grid> 486 <grid>
487 <property stdset="1"> 487 <property stdset="1">
488 <name>margin</name> 488 <name>margin</name>
489 <number>5</number> 489 <number>5</number>
490 </property> 490 </property>
491 <property stdset="1"> 491 <property stdset="1">
492 <name>spacing</name> 492 <name>spacing</name>
493 <number>3</number> 493 <number>3</number>
494 </property> 494 </property>
495 <widget row="2" column="0" rowspan="1" colspan="3" > 495 <widget row="2" column="0" rowspan="1" colspan="3" >
496 <class>ProtocolListView</class> 496 <class>ProtocolListView</class>
497 <property stdset="1"> 497 <property stdset="1">
498 <name>name</name> 498 <name>name</name>
499 <cstring>capturePackets</cstring> 499 <cstring>capturePackets</cstring>
500 </property> 500 </property>
501 <property stdset="1"> 501 <property stdset="1">
502 <name>enabled</name> 502 <name>enabled</name>
503 <bool>false</bool> 503 <bool>false</bool>
504 </property> 504 </property>
505 <property stdset="1"> 505 <property stdset="1">
506 <name>sizePolicy</name> 506 <name>sizePolicy</name>
507 <sizepolicy> 507 <sizepolicy>
508 <hsizetype>7</hsizetype> 508 <hsizetype>7</hsizetype>
509 <vsizetype>7</vsizetype> 509 <vsizetype>7</vsizetype>
510 </sizepolicy> 510 </sizepolicy>
511 </property> 511 </property>
512 </widget> 512 </widget>
513 <widget row="1" column="0" rowspan="1" colspan="3" > 513 <widget row="1" column="0" rowspan="1" colspan="3" >
514 <class>QLineEdit</class> 514 <class>QLineEdit</class>
515 <property stdset="1"> 515 <property stdset="1">
516 <name>name</name> 516 <name>name</name>
517 <cstring>captureFileName</cstring> 517 <cstring>captureFileName</cstring>
518 </property> 518 </property>
519 <property stdset="1"> 519 <property stdset="1">
520 <name>enabled</name> 520 <name>enabled</name>
521 <bool>false</bool> 521 <bool>false</bool>
522 </property> 522 </property>
523 <property stdset="1"> 523 <property stdset="1">
524 <name>text</name> 524 <name>text</name>
525 <string>/tmp/capture</string> 525 <string>/tmp/capture</string>
526 </property> 526 </property>
527 </widget> 527 </widget>
528 <widget row="0" column="2" > 528 <widget row="0" column="2" >
529 <class>QToolButton</class> 529 <class>QToolButton</class>
530 <property stdset="1"> 530 <property stdset="1">
531 <name>name</name> 531 <name>name</name>
532 <cstring>getCaptureFileName</cstring> 532 <cstring>getCaptureFileName</cstring>
533 </property> 533 </property>
534 <property stdset="1"> 534 <property stdset="1">
535 <name>enabled</name> 535 <name>enabled</name>
536 <bool>false</bool> 536 <bool>false</bool>
537 </property> 537 </property>
538 <property stdset="1"> 538 <property stdset="1">
539 <name>text</name> 539 <name>text</name>
540 <string>Browse</string> 540 <string>Browse</string>
541 </property> 541 </property>
542 </widget> 542 </widget>
543 <spacer row="0" column="1" > 543 <spacer row="0" column="1" >
544 <property> 544 <property>
545 <name>name</name> 545 <name>name</name>
546 <cstring>Spacer2</cstring> 546 <cstring>Spacer2</cstring>
547 </property> 547 </property>
548 <property stdset="1"> 548 <property stdset="1">
549 <name>orientation</name> 549 <name>orientation</name>
550 <enum>Horizontal</enum> 550 <enum>Horizontal</enum>
551 </property> 551 </property>
552 <property stdset="1"> 552 <property stdset="1">
553 <name>sizeType</name> 553 <name>sizeType</name>
554 <enum>Expanding</enum> 554 <enum>Expanding</enum>
555 </property> 555 </property>
556 <property> 556 <property>
557 <name>sizeHint</name> 557 <name>sizeHint</name>
558 <size> 558 <size>
559 <width>20</width> 559 <width>20</width>
560 <height>20</height> 560 <height>20</height>
561 </size> 561 </size>
562 </property> 562 </property>
563 </spacer> 563 </spacer>
564 <widget row="0" column="0" > 564 <widget row="0" column="0" >
565 <class>QCheckBox</class> 565 <class>QCheckBox</class>
566 <property stdset="1"> 566 <property stdset="1">
567 <name>name</name> 567 <name>name</name>
568 <cstring>writeCaptureFile</cstring> 568 <cstring>writeCaptureFile</cstring>
569 </property> 569 </property>
570 <property stdset="1"> 570 <property stdset="1">
571 <name>enabled</name> 571 <name>enabled</name>
572 <bool>true</bool> 572 <bool>true</bool>
573 </property> 573 </property>
574 <property stdset="1"> 574 <property stdset="1">
575 <name>text</name> 575 <name>text</name>
576 <string>Write Capture Files To</string> 576 <string>Write Capture Files To</string>
577 </property> 577 </property>
578 </widget> 578 </widget>
579 </grid> 579 </grid>
580 </widget> 580 </widget>
581 <widget> 581 <widget>
582 <class>QWidget</class> 582 <class>QWidget</class>
583 <property stdset="1"> 583 <property stdset="1">
584 <name>name</name> 584 <name>name</name>
585 <cstring>tab</cstring> 585 <cstring>tab</cstring>
586 </property> 586 </property>
587 <attribute> 587 <attribute>
588 <name>title</name> 588 <name>title</name>
589 <string>Parse</string> 589 <string>Parse</string>
590 </attribute> 590 </attribute>
591 <grid> 591 <grid>
592 <property stdset="1"> 592 <property stdset="1">
593 <name>margin</name> 593 <name>margin</name>
594 <number>5</number> 594 <number>5</number>
595 </property> 595 </property>
596 <property stdset="1"> 596 <property stdset="1">
597 <name>spacing</name> 597 <name>spacing</name>
598 <number>3</number> 598 <number>3</number>
599 </property> 599 </property>
600 <widget row="0" column="0" > 600 <widget row="0" column="0" >
601 <class>ProtocolListView</class> 601 <class>ProtocolListView</class>
602 <property stdset="1"> 602 <property stdset="1">
603 <name>name</name> 603 <name>name</name>
604 <cstring>parsePackets</cstring> 604 <cstring>parsePackets</cstring>
605 </property> 605 </property>
606 <property stdset="1"> 606 <property stdset="1">
607 <name>sizePolicy</name> 607 <name>sizePolicy</name>
608 <sizepolicy> 608 <sizepolicy>
609 <hsizetype>7</hsizetype> 609 <hsizetype>7</hsizetype>
610 <vsizetype>7</vsizetype> 610 <vsizetype>7</vsizetype>
611 </sizepolicy> 611 </sizepolicy>
612 </property> 612 </property>
613 </widget> 613 </widget>
614 </grid> 614 </grid>
615 </widget> 615 </widget>
616 <widget> 616 <widget>
617 <class>QWidget</class> 617 <class>QWidget</class>
618 <property stdset="1"> 618 <property stdset="1">
619 <name>name</name> 619 <name>name</name>
620 <cstring>tab</cstring> 620 <cstring>tab</cstring>
621 </property> 621 </property>
622 <attribute> 622 <attribute>
623 <name>title</name> 623 <name>title</name>
624 <string>UI</string>
625 </attribute>
626 <grid>
627 <property stdset="1">
628 <name>margin</name>
629 <number>11</number>
630 </property>
631 <property stdset="1">
632 <name>spacing</name>
633 <number>6</number>
634 </property>
635 <widget row="3" column="0" >
636 <class>QGroupBox</class>
637 <property stdset="1">
638 <name>name</name>
639 <cstring>GroupBox4_2</cstring>
640 </property>
641 <property stdset="1">
642 <name>title</name>
643 <string>Action On Detecting</string>
644 </property>
645 <grid>
646 <property stdset="1">
647 <name>margin</name>
648 <number>11</number>
649 </property>
650 <property stdset="1">
651 <name>spacing</name>
652 <number>6</number>
653 </property>
654 <widget row="1" column="0" >
655 <class>QLabel</class>
656 <property stdset="1">
657 <name>name</name>
658 <cstring>TextLabel2</cstring>
659 </property>
660 <property stdset="1">
661 <name>text</name>
662 <string>New Wireless Station</string>
663 </property>
664 </widget>
665 <widget row="0" column="0" >
666 <class>QLabel</class>
667 <property stdset="1">
668 <name>name</name>
669 <cstring>TextLabel1_3</cstring>
670 </property>
671 <property stdset="1">
672 <name>text</name>
673 <string>New Network</string>
674 </property>
675 </widget>
676 <widget row="0" column="1" >
677 <class>QComboBox</class>
678 <property stdset="1">
679 <name>name</name>
680 <cstring>newNetwork</cstring>
681 </property>
682 </widget>
683 <widget row="1" column="1" >
684 <class>QComboBox</class>
685 <property stdset="1">
686 <name>name</name>
687 <cstring>newWirelessStation</cstring>
688 </property>
689 </widget>
690 <widget row="2" column="1" >
691 <class>QComboBox</class>
692 <property stdset="1">
693 <name>name</name>
694 <cstring>newStation</cstring>
695 </property>
696 </widget>
697 <widget row="2" column="0" >
698 <class>QLabel</class>
699 <property stdset="1">
700 <name>name</name>
701 <cstring>TextLabel3</cstring>
702 </property>
703 <property stdset="1">
704 <name>text</name>
705 <string>New Station</string>
706 </property>
707 </widget>
708 </grid>
709 </widget>
710 <spacer row="2" column="0" >
711 <property>
712 <name>name</name>
713 <cstring>Spacer3</cstring>
714 </property>
715 <property stdset="1">
716 <name>orientation</name>
717 <enum>Vertical</enum>
718 </property>
719 <property stdset="1">
720 <name>sizeType</name>
721 <enum>Expanding</enum>
722 </property>
723 <property>
724 <name>sizeHint</name>
725 <size>
726 <width>20</width>
727 <height>20</height>
728 </size>
729 </property>
730 </spacer>
731 <widget row="0" column="0" >
732 <class>QCheckBox</class>
733 <property stdset="1">
734 <name>name</name>
735 <cstring>lookupVendor</cstring>
736 </property>
737 <property stdset="1">
738 <name>text</name>
739 <string>Lookup MAC vendor names</string>
740 </property>
741 </widget>
742 <widget row="1" column="0" >
743 <class>QCheckBox</class>
744 <property stdset="1">
745 <name>name</name>
746 <cstring>openTree</cstring>
747 </property>
748 <property stdset="1">
749 <name>text</name>
750 <string>Open Tree On New Station</string>
751 </property>
752 </widget>
753 </grid>
754 </widget>
755 <widget>
756 <class>QWidget</class>
757 <property stdset="1">
758 <name>name</name>
759 <cstring>tab</cstring>
760 </property>
761 <attribute>
762 <name>title</name>
624 <string>Intrusion</string> 763 <string>Intrusion</string>
625 </attribute> 764 </attribute>
626 <grid> 765 <grid>
627 <property stdset="1"> 766 <property stdset="1">
628 <name>margin</name> 767 <name>margin</name>
629 <number>11</number> 768 <number>11</number>
630 </property> 769 </property>
631 <property stdset="1"> 770 <property stdset="1">
632 <name>spacing</name> 771 <name>spacing</name>
633 <number>6</number> 772 <number>6</number>
634 </property> 773 </property>
635 <widget row="1" column="0" > 774 <widget row="1" column="0" >
636 <class>QGroupBox</class> 775 <class>QGroupBox</class>
637 <property stdset="1"> 776 <property stdset="1">
638 <name>name</name> 777 <name>name</name>
639 <cstring>GroupBox3</cstring> 778 <cstring>GroupBox3</cstring>
640 </property> 779 </property>
641 <property stdset="1"> 780 <property stdset="1">
642 <name>enabled</name> 781 <name>enabled</name>
643 <bool>false</bool> 782 <bool>false</bool>
644 </property> 783 </property>
645 <property stdset="1"> 784 <property stdset="1">
646 <name>title</name> 785 <name>title</name>
647 <string>Link Level</string> 786 <string>Link Level</string>
648 </property> 787 </property>
649 <grid> 788 <grid>
650 <property stdset="1"> 789 <property stdset="1">
651 <name>margin</name> 790 <name>margin</name>
652 <number>11</number> 791 <number>11</number>
653 </property> 792 </property>
654 <property stdset="1"> 793 <property stdset="1">
655 <name>spacing</name> 794 <name>spacing</name>
656 <number>6</number> 795 <number>6</number>
657 </property> 796 </property>
658 <widget row="0" column="0" > 797 <widget row="0" column="0" >
659 <class>QLabel</class> 798 <class>QLabel</class>
660 <property stdset="1"> 799 <property stdset="1">
661 <name>name</name> 800 <name>name</name>
662 <cstring>TextLabel1_5</cstring> 801 <cstring>TextLabel1_5</cstring>
663 </property> 802 </property>
664 <property stdset="1"> 803 <property stdset="1">
665 <name>text</name> 804 <name>text</name>
666 <string>Fake Mac:</string> 805 <string>Fake Mac:</string>
667 </property> 806 </property>
668 </widget> 807 </widget>
669 <widget row="1" column="0" rowspan="1" colspan="2" > 808 <widget row="1" column="0" rowspan="1" colspan="2" >
670 <class>QCheckBox</class> 809 <class>QCheckBox</class>
671 <property stdset="1"> 810 <property stdset="1">
672 <name>name</name> 811 <name>name</name>
673 <cstring>sendProbeRequests</cstring> 812 <cstring>sendProbeRequests</cstring>
674 </property> 813 </property>
675 <property stdset="1"> 814 <property stdset="1">
676 <name>text</name> 815 <name>text</name>
677 <string>Send proble requests</string> 816 <string>Send proble requests</string>
678 </property> 817 </property>
679 </widget> 818 </widget>
680 <widget row="0" column="1" > 819 <widget row="0" column="1" >
681 <class>QComboBox</class> 820 <class>QComboBox</class>
682 <item> 821 <item>
683 <property> 822 <property>
684 <name>text</name> 823 <name>text</name>
685 <string>&lt;automatic&gt;</string> 824 <string>&lt;automatic&gt;</string>
686 </property> 825 </property>
687 </item> 826 </item>
688 <item> 827 <item>
689 <property> 828 <property>
690 <name>text</name> 829 <name>text</name>
691 <string>44:44:44:44:44:44</string> 830 <string>44:44:44:44:44:44</string>
692 </property> 831 </property>
693 </item> 832 </item>
694 <property stdset="1"> 833 <property stdset="1">
695 <name>name</name> 834 <name>name</name>
696 <cstring>fakeMac</cstring> 835 <cstring>fakeMac</cstring>
697 </property> 836 </property>
698 <property stdset="1"> 837 <property stdset="1">
699 <name>sizePolicy</name> 838 <name>sizePolicy</name>
700 <sizepolicy> 839 <sizepolicy>
701 <hsizetype>7</hsizetype> 840 <hsizetype>7</hsizetype>
702 <vsizetype>0</vsizetype> 841 <vsizetype>0</vsizetype>
703 </sizepolicy> 842 </sizepolicy>
704 </property> 843 </property>
705 <property stdset="1"> 844 <property stdset="1">
706 <name>editable</name> 845 <name>editable</name>
707 <bool>true</bool> 846 <bool>true</bool>
708 </property> 847 </property>
709 <property stdset="1"> 848 <property stdset="1">
710 <name>currentItem</name> 849 <name>currentItem</name>
711 <number>1</number> 850 <number>1</number>
712 </property> 851 </property>
713 <property stdset="1"> 852 <property stdset="1">
714 <name>autoCompletion</name> 853 <name>autoCompletion</name>
715 <bool>true</bool> 854 <bool>true</bool>
716 </property> 855 </property>
717 </widget> 856 </widget>
718 <widget row="2" column="0" rowspan="1" colspan="2" > 857 <widget row="2" column="0" rowspan="1" colspan="2" >
719 <class>QCheckBox</class> 858 <class>QCheckBox</class>
720 <property stdset="1"> 859 <property stdset="1">
721 <name>name</name> 860 <name>name</name>
722 <cstring>tryToAuthenticate</cstring> 861 <cstring>tryToAuthenticate</cstring>
723 </property> 862 </property>
724 <property stdset="1"> 863 <property stdset="1">
725 <name>text</name> 864 <name>text</name>
726 <string>Try to authenticate</string> 865 <string>Try to authenticate</string>
727 </property> 866 </property>
728 </widget> 867 </widget>
729 </grid> 868 </grid>
730 </widget> 869 </widget>
731 <widget row="0" column="0" > 870 <widget row="0" column="0" >
732 <class>QCheckBox</class> 871 <class>QCheckBox</class>
733 <property stdset="1"> 872 <property stdset="1">
734 <name>name</name> 873 <name>name</name>
735 <cstring>enableActiveScanning</cstring> 874 <cstring>enableActiveScanning</cstring>
736 </property> 875 </property>
737 <property stdset="1"> 876 <property stdset="1">
738 <name>enabled</name> 877 <name>enabled</name>
739 <bool>false</bool> 878 <bool>false</bool>
740 </property> 879 </property>
741 <property stdset="1"> 880 <property stdset="1">
742 <name>text</name> 881 <name>text</name>
743 <string>Enable active scanning</string> 882 <string>Enable active scanning</string>
744 </property> 883 </property>
745 </widget> 884 </widget>
746 <widget row="2" column="0" > 885 <widget row="2" column="0" >
747 <class>QGroupBox</class> 886 <class>QGroupBox</class>
748 <property stdset="1"> 887 <property stdset="1">
749 <name>name</name> 888 <name>name</name>
750 <cstring>GroupBox4</cstring> 889 <cstring>GroupBox4</cstring>
751 </property> 890 </property>
752 <property stdset="1"> 891 <property stdset="1">
753 <name>enabled</name> 892 <name>enabled</name>
754 <bool>false</bool> 893 <bool>false</bool>
755 </property> 894 </property>
756 <property stdset="1"> 895 <property stdset="1">
757 <name>title</name> 896 <name>title</name>
758 <string>IP Level</string> 897 <string>IP Level</string>
759 </property> 898 </property>
760 <grid> 899 <grid>
761 <property stdset="1"> 900 <property stdset="1">
762 <name>margin</name> 901 <name>margin</name>
763 <number>11</number> 902 <number>11</number>
764 </property> 903 </property>
765 <property stdset="1"> 904 <property stdset="1">
766 <name>spacing</name> 905 <name>spacing</name>
767 <number>6</number> 906 <number>6</number>
768 </property> 907 </property>
769 <widget row="1" column="0" rowspan="1" colspan="2" > 908 <widget row="1" column="0" rowspan="1" colspan="2" >
770 <class>QCheckBox</class> 909 <class>QCheckBox</class>
771 <property stdset="1"> 910 <property stdset="1">
772 <name>name</name> 911 <name>name</name>
773 <cstring>CheckBox24</cstring> 912 <cstring>CheckBox24</cstring>
774 </property> 913 </property>
775 <property stdset="1"> 914 <property stdset="1">
776 <name>text</name> 915 <name>text</name>
777 <string>Request DHCP Address</string> 916 <string>Request DHCP Address</string>
778 </property> 917 </property>
779 </widget> 918 </widget>
780 <widget row="0" column="0" > 919 <widget row="0" column="0" >
781 <class>QLabel</class> 920 <class>QLabel</class>
782 <property stdset="1"> 921 <property stdset="1">
783 <name>name</name> 922 <name>name</name>
784 <cstring>TextLabel1_5_2</cstring> 923 <cstring>TextLabel1_5_2</cstring>
785 </property> 924 </property>
786 <property stdset="1"> 925 <property stdset="1">
787 <name>text</name> 926 <name>text</name>
788 <string>Fake IP:</string> 927 <string>Fake IP:</string>
789 </property> 928 </property>
790 </widget> 929 </widget>
791 <widget row="0" column="1" > 930 <widget row="0" column="1" >
792 <class>QComboBox</class> 931 <class>QComboBox</class>
793 <item> 932 <item>
794 <property> 933 <property>
795 <name>text</name> 934 <name>text</name>
796 <string>192.168.125.1</string> 935 <string>192.168.125.1</string>
797 </property> 936 </property>
798 </item> 937 </item>
799 <item> 938 <item>
800 <property> 939 <property>
801 <name>text</name> 940 <name>text</name>
802 <string>&lt;automatic&gt;</string> 941 <string>&lt;automatic&gt;</string>
803 </property> 942 </property>
804 </item> 943 </item>
805 <property stdset="1"> 944 <property stdset="1">
806 <name>name</name> 945 <name>name</name>
807 <cstring>fakeIP</cstring> 946 <cstring>fakeIP</cstring>
808 </property> 947 </property>
809 <property stdset="1"> 948 <property stdset="1">
810 <name>sizePolicy</name> 949 <name>sizePolicy</name>
811 <sizepolicy> 950 <sizepolicy>
812 <hsizetype>7</hsizetype> 951 <hsizetype>7</hsizetype>
813 <vsizetype>0</vsizetype> 952 <vsizetype>0</vsizetype>
814 </sizepolicy> 953 </sizepolicy>
815 </property> 954 </property>
816 <property stdset="1"> 955 <property stdset="1">
817 <name>editable</name> 956 <name>editable</name>
818 <bool>true</bool> 957 <bool>true</bool>
819 </property> 958 </property>
820 <property stdset="1"> 959 <property stdset="1">
821 <name>currentItem</name> 960 <name>currentItem</name>
822 <number>0</number> 961 <number>0</number>
823 </property> 962 </property>
824 </widget> 963 </widget>
825 </grid> 964 </grid>
826 </widget> 965 </widget>
827 </grid> 966 </grid>
828 </widget> 967 </widget>
829 </widget> 968 </widget>
830 </grid> 969 </grid>
831</widget> 970</widget>
832<customwidgets> 971<customwidgets>
833 <customwidget> 972 <customwidget>
834 <class>ProtocolListView</class> 973 <class>ProtocolListView</class>
835 <header location="local">protolistview.h</header> 974 <header location="local">protolistview.h</header>
836 <sizehint> 975 <sizehint>
837 <width>100</width> 976 <width>100</width>
838 <height>100</height> 977 <height>100</height>
839 </sizehint> 978 </sizehint>
840 <container>0</container> 979 <container>0</container>
841 <sizepolicy> 980 <sizepolicy>
842 <hordata>3</hordata> 981 <hordata>3</hordata>
843 <verdata>3</verdata> 982 <verdata>3</verdata>
844 </sizepolicy> 983 </sizepolicy>
845 <pixmap>image0</pixmap> 984 <pixmap>image0</pixmap>
846 </customwidget> 985 </customwidget>
847</customwidgets> 986</customwidgets>
848<images> 987<images>
849 <image> 988 <image>
850 <name>image0</name> 989 <name>image0</name>
851 <data format="XPM.GZ" length="646">789c6dd2c10ac2300c00d07bbf2234b7229d1be245fc04c5a3201e4615f430059d0711ff5ddb2e6bb236ec90eed134cb5a19d8ef36602af5ecdbfeeac05dda0798d3abebde87e3faa374d3807fa0d633a52d38d8de6f679fe33fc776e196f53cd010188256a3600a292882096246517815ca99884606e18044a3a40d91824820924265a7923a2e8bcd05f33db1173e002913175f2a6be6d3294871a2d95fa00e8a94ee017b69d339d90df1e77c57ea072ede6758</data> 990 <data format="XPM.GZ" length="646">789c6dd2c10ac2300c00d07bbf2234b7229d1be245fc04c5a3201e4615f430059d0711ff5ddb2e6bb236ec90eed134cb5a19d8ef36602af5ecdbfeeac05dda0798d3abebde87e3faa374d3807fa0d633a52d38d8de6f679fe33fc776e196f53cd010188256a3600a292882096246517815ca99884606e18044a3a40d91824820924265a7923a2e8bcd05f33db1173e002913175f2a6be6d3294871a2d95fa00e8a94ee017b69d339d90df1e77c57ea072ede6758</data>
852 </image> 991 </image>
853</images> 992</images>
854<connections> 993<connections>
855 <connection> 994 <connection>
856 <sender>hopChannels</sender> 995 <sender>hopChannels</sender>
857 <signal>toggled(bool)</signal> 996 <signal>toggled(bool)</signal>
858 <receiver>hopInterval</receiver> 997 <receiver>hopInterval</receiver>
859 <slot>setEnabled(bool)</slot> 998 <slot>setEnabled(bool)</slot>
860 </connection> 999 </connection>
861 <connection> 1000 <connection>
862 <sender>hopChannels</sender> 1001 <sender>hopChannels</sender>
863 <signal>toggled(bool)</signal> 1002 <signal>toggled(bool)</signal>
864 <receiver>TextLabel1</receiver> 1003 <receiver>TextLabel1</receiver>
865 <slot>setEnabled(bool)</slot> 1004 <slot>setEnabled(bool)</slot>
866 </connection> 1005 </connection>
867 <connection> 1006 <connection>
868 <sender>enableActiveScanning</sender> 1007 <sender>enableActiveScanning</sender>
869 <signal>toggled(bool)</signal> 1008 <signal>toggled(bool)</signal>
870 <receiver>GroupBox3</receiver> 1009 <receiver>GroupBox3</receiver>
871 <slot>setEnabled(bool)</slot> 1010 <slot>setEnabled(bool)</slot>
872 </connection> 1011 </connection>
873 <connection> 1012 <connection>
874 <sender>enableActiveScanning</sender> 1013 <sender>enableActiveScanning</sender>
875 <signal>toggled(bool)</signal> 1014 <signal>toggled(bool)</signal>
876 <receiver>GroupBox4</receiver> 1015 <receiver>GroupBox4</receiver>
877 <slot>setEnabled(bool)</slot> 1016 <slot>setEnabled(bool)</slot>
878 </connection> 1017 </connection>
879 <connection> 1018 <connection>
880 <sender>writeCaptureFile</sender> 1019 <sender>writeCaptureFile</sender>
881 <signal>toggled(bool)</signal> 1020 <signal>toggled(bool)</signal>
882 <receiver>getCaptureFileName</receiver> 1021 <receiver>getCaptureFileName</receiver>
883 <slot>setEnabled(bool)</slot> 1022 <slot>setEnabled(bool)</slot>
884 </connection> 1023 </connection>
885 <connection> 1024 <connection>
886 <sender>writeCaptureFile</sender> 1025 <sender>writeCaptureFile</sender>
887 <signal>toggled(bool)</signal> 1026 <signal>toggled(bool)</signal>
888 <receiver>captureFileName</receiver> 1027 <receiver>captureFileName</receiver>
889 <slot>setEnabled(bool)</slot> 1028 <slot>setEnabled(bool)</slot>
890 </connection> 1029 </connection>
891 <connection> 1030 <connection>
892 <sender>writeCaptureFile</sender> 1031 <sender>writeCaptureFile</sender>
893 <signal>toggled(bool)</signal> 1032 <signal>toggled(bool)</signal>
894 <receiver>capturePackets</receiver> 1033 <receiver>capturePackets</receiver>
895 <slot>setEnabled(bool)</slot> 1034 <slot>setEnabled(bool)</slot>
896 </connection> 1035 </connection>
897</connections> 1036</connections>
898</UI> 1037</UI>
diff --git a/noncore/net/wellenreiter/gui/gui.pro b/noncore/net/wellenreiter/gui/gui.pro
index 2c4c6c3..ee239a3 100644
--- a/noncore/net/wellenreiter/gui/gui.pro
+++ b/noncore/net/wellenreiter/gui/gui.pro
@@ -1,67 +1,65 @@
1MOC_DIR = ./tmp 1MOC_DIR = ./tmp
2OBJECTS_DIR = ./tmp 2OBJECTS_DIR = ./tmp
3DESTDIR = $(OPIEDIR)/bin 3DESTDIR = $(OPIEDIR)/bin
4TEMPLATE = app 4TEMPLATE = app
5CONFIG = qt warn_on debug 5CONFIG = qt warn_on debug
6 6
7HEADERS = wellenreiterbase.h \ 7HEADERS = wellenreiterbase.h \
8 mainwindow.h \ 8 mainwindow.h \
9 wellenreiter.h \ 9 wellenreiter.h \
10 scanlist.h \ 10 scanlist.h \
11 logwindow.h \ 11 logwindow.h \
12 hexwindow.h \ 12 hexwindow.h \
13 statwindow.h \ 13 statwindow.h \
14 configwindow.h \ 14 configwindow.h \
15 manufacturers.h \
16 graphwindow.h \ 15 graphwindow.h \
17 protolistview.h 16 protolistview.h
18 17
19SOURCES = main.cpp \ 18SOURCES = main.cpp \
20 mainwindow.cpp \ 19 mainwindow.cpp \
21 wellenreiterbase.cpp \ 20 wellenreiterbase.cpp \
22 wellenreiter.cpp \ 21 wellenreiter.cpp \
23 scanlist.cpp \ 22 scanlist.cpp \
24 logwindow.cpp \ 23 logwindow.cpp \
25 hexwindow.cpp \ 24 hexwindow.cpp \
26 statwindow.cpp \ 25 statwindow.cpp \
27 configwindow.cpp \ 26 configwindow.cpp \
28 manufacturers.cpp \
29 graphwindow.cpp \ 27 graphwindow.cpp \
30 protolistview.cpp 28 protolistview.cpp
31 29
32INCLUDEPATH += $(OPIEDIR)/include 30INCLUDEPATH += $(OPIEDIR)/include
33DEPENDPATH += $(OPIEDIR)/include 31DEPENDPATH += $(OPIEDIR)/include
34INTERFACES = configbase.ui 32INTERFACES = configbase.ui
35TARGET = wellenreiter 33TARGET = wellenreiter
36 34
37!contains( platform, x11 ) { 35!contains( platform, x11 ) {
38 message( qws ) 36 message( qws )
39 include ( $(OPIEDIR)/include.pro ) 37 include ( $(OPIEDIR)/include.pro )
40 LIBS += -lqpe -lopie -lopiecore2 -lopieui2 -lopienet2 -lstdc++ 38 LIBS += -lqpe -lopie -lopiecore2 -lopieui2 -lopienet2 -lstdc++
41} 39}
42 40
43contains( platform, x11 ) { 41contains( platform, x11 ) {
44 LIBS += -L$(OPIEDIR)/output/lib -Wl,-rpath,$(OPIEDIR)/output/lib -Wl,-rpath,/usr/local/lib -lwellenreiter 42 LIBS += -L$(OPIEDIR)/output/lib -Wl,-rpath,$(OPIEDIR)/output/lib -Wl,-rpath,/usr/local/lib -lwellenreiter
45 SOURCES += resource.cpp 43 SOURCES += resource.cpp
46 HEADERS += resource.h 44 HEADERS += resource.h
47 DESTDIR = $(OPIEDIR)/output/bin 45 DESTDIR = $(OPIEDIR)/output/bin
48} 46}
49 47
50TRANSLATIONS = ../../../../i18n/de/wellenreiter.ts \ 48TRANSLATIONS = ../../../../i18n/de/wellenreiter.ts \
51 ../../../../i18n/nl/wellenreiter.ts \ 49 ../../../../i18n/nl/wellenreiter.ts \
52 ../../../../i18n/da/wellenreiter.ts \ 50 ../../../../i18n/da/wellenreiter.ts \
53 ../../../../i18n/xx/wellenreiter.ts \ 51 ../../../../i18n/xx/wellenreiter.ts \
54 ../../../../i18n/en/wellenreiter.ts \ 52 ../../../../i18n/en/wellenreiter.ts \
55 ../../../../i18n/es/wellenreiter.ts \ 53 ../../../../i18n/es/wellenreiter.ts \
56 ../../../../i18n/fr/wellenreiter.ts \ 54 ../../../../i18n/fr/wellenreiter.ts \
57 ../../../../i18n/hu/wellenreiter.ts \ 55 ../../../../i18n/hu/wellenreiter.ts \
58 ../../../../i18n/ja/wellenreiter.ts \ 56 ../../../../i18n/ja/wellenreiter.ts \
59 ../../../../i18n/ko/wellenreiter.ts \ 57 ../../../../i18n/ko/wellenreiter.ts \
60 ../../../../i18n/no/wellenreiter.ts \ 58 ../../../../i18n/no/wellenreiter.ts \
61 ../../../../i18n/pl/wellenreiter.ts \ 59 ../../../../i18n/pl/wellenreiter.ts \
62 ../../../../i18n/pt/wellenreiter.ts \ 60 ../../../../i18n/pt/wellenreiter.ts \
63 ../../../../i18n/pt_BR/wellenreiter.ts \ 61 ../../../../i18n/pt_BR/wellenreiter.ts \
64 ../../../../i18n/sl/wellenreiter.ts \ 62 ../../../../i18n/sl/wellenreiter.ts \
65 ../../../../i18n/zh_CN/wellenreiter.ts \ 63 ../../../../i18n/zh_CN/wellenreiter.ts \
66 ../../../../i18n/zh_TW/wellenreiter.ts 64 ../../../../i18n/zh_TW/wellenreiter.ts
67 65
diff --git a/noncore/net/wellenreiter/gui/mainwindow.cpp b/noncore/net/wellenreiter/gui/mainwindow.cpp
index 3e36f5b..27ecae3 100644
--- a/noncore/net/wellenreiter/gui/mainwindow.cpp
+++ b/noncore/net/wellenreiter/gui/mainwindow.cpp
@@ -1,366 +1,366 @@
1/********************************************************************** 1/**********************************************************************
2** Copyright (C) 2002 Michael 'Mickey' Lauer. All rights reserved. 2** Copyright (C) 2002 Michael 'Mickey' Lauer. All rights reserved.
3** 3**
4** This file is part of Opie Environment. 4** This file is part of Opie Environment.
5** 5**
6** This file may be distributed and/or modified under the terms of the 6** This file may be distributed and/or modified under the terms of the
7** GNU General Public License version 2 as published by the Free Software 7** GNU General Public License version 2 as published by the Free Software
8** Foundation and appearing in the file LICENSE.GPL included in the 8** Foundation and appearing in the file LICENSE.GPL included in the
9** packaging of this file. 9** packaging of this file.
10** 10**
11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
13** 13**
14**********************************************************************/ 14**********************************************************************/
15 15
16#include "configwindow.h" 16#include "configwindow.h"
17#include "logwindow.h" 17#include "logwindow.h"
18#include "hexwindow.h" 18#include "hexwindow.h"
19#include "mainwindow.h" 19#include "mainwindow.h"
20#include "wellenreiter.h" 20#include "wellenreiter.h"
21#include "scanlist.h" 21#include "scanlist.h"
22 22
23#include <qcombobox.h> 23#include <qcombobox.h>
24#include <qdatastream.h> 24#include <qdatastream.h>
25#include <qfile.h> 25#include <qfile.h>
26#include <qfileinfo.h> 26#include <qfileinfo.h>
27#include <qiconset.h> 27#include <qiconset.h>
28#include <qmenubar.h> 28#include <qmenubar.h>
29#include <qmessagebox.h> 29#include <qmessagebox.h>
30#include <qpopupmenu.h> 30#include <qpopupmenu.h>
31#include <qstatusbar.h> 31#include <qstatusbar.h>
32#include <qtextstream.h> 32#include <qtextstream.h>
33#include <qtoolbutton.h> 33#include <qtoolbutton.h>
34 34
35#ifdef QWS 35#ifdef QWS
36#include <qpe/resource.h> 36#include <qpe/resource.h>
37#include <opie/ofiledialog.h> 37#include <opie/ofiledialog.h>
38#else 38#else
39#include "resource.h" 39#include "resource.h"
40#include <qapplication.h> 40#include <qapplication.h>
41#include <qfiledialog.h> 41#include <qfiledialog.h>
42#endif 42#endif
43 43
44WellenreiterMainWindow::WellenreiterMainWindow( QWidget * parent, const char * name, WFlags f ) 44WellenreiterMainWindow::WellenreiterMainWindow( QWidget * parent, const char * name, WFlags f )
45 :QMainWindow( parent, name, f ) 45 :QMainWindow( parent, name, f )
46{ 46{
47 cw = new WellenreiterConfigWindow( this ); 47 cw = new WellenreiterConfigWindow( this );
48 mw = new Wellenreiter( this ); 48 mw = new Wellenreiter( this );
49 mw->setConfigWindow( cw ); 49 mw->setConfigWindow( cw );
50 setCentralWidget( mw ); 50 setCentralWidget( mw );
51 51
52 // setup application icon 52 // setup application icon
53 53
54 #ifndef QWS 54 #ifndef QWS
55 setIcon( Resource::loadPixmap( "wellenreiter/appicon-trans" ) ); 55 setIcon( Resource::loadPixmap( "wellenreiter/appicon-trans" ) );
56 setIconText( "Wellenreiter/X11" ); 56 setIconText( "Wellenreiter/X11" );
57 #endif 57 #endif
58 58
59 // setup icon sets 59 // setup icon sets
60 60
61 infoIconSet = new QIconSet( Resource::loadPixmap( "wellenreiter/InfoIcon" ) ); 61 infoIconSet = new QIconSet( Resource::loadPixmap( "wellenreiter/InfoIcon" ) );
62 settingsIconSet = new QIconSet( Resource::loadPixmap( "wellenreiter/SettingsIcon" ) ); 62 settingsIconSet = new QIconSet( Resource::loadPixmap( "wellenreiter/SettingsIcon" ) );
63 startIconSet = new QIconSet( Resource::loadPixmap( "wellenreiter/SearchIcon" ) ); 63 startIconSet = new QIconSet( Resource::loadPixmap( "wellenreiter/SearchIcon" ) );
64 stopIconSet = new QIconSet( Resource::loadPixmap( "wellenreiter/CancelIcon" ) ); 64 stopIconSet = new QIconSet( Resource::loadPixmap( "wellenreiter/CancelIcon" ) );
65 65
66 // setup tool buttons 66 // setup tool buttons
67 67
68 startButton = new QToolButton( 0 ); 68 startButton = new QToolButton( 0 );
69 #ifdef QWS 69 #ifdef QWS
70 startButton->setAutoRaise( true ); 70 startButton->setAutoRaise( true );
71 #endif 71 #endif
72 startButton->setIconSet( *startIconSet ); 72 startButton->setIconSet( *startIconSet );
73 startButton->setEnabled( false ); 73 startButton->setEnabled( false );
74 connect( startButton, SIGNAL( clicked() ), mw, SLOT( startClicked() ) ); 74 connect( startButton, SIGNAL( clicked() ), mw, SLOT( startClicked() ) );
75 75
76 stopButton = new QToolButton( 0 ); 76 stopButton = new QToolButton( 0 );
77 #ifdef QWS 77 #ifdef QWS
78 stopButton->setAutoRaise( true ); 78 stopButton->setAutoRaise( true );
79 #endif 79 #endif
80 stopButton->setIconSet( *stopIconSet ); 80 stopButton->setIconSet( *stopIconSet );
81 stopButton->setEnabled( false ); 81 stopButton->setEnabled( false );
82 connect( stopButton, SIGNAL( clicked() ), mw, SLOT( stopClicked() ) ); 82 connect( stopButton, SIGNAL( clicked() ), mw, SLOT( stopClicked() ) );
83 83
84 QToolButton* c = new QToolButton( 0 ); 84 QToolButton* c = new QToolButton( 0 );
85 #ifdef QWS 85 #ifdef QWS
86 c->setAutoRaise( true ); 86 c->setAutoRaise( true );
87 #endif 87 #endif
88 c->setIconSet( *infoIconSet ); 88 c->setIconSet( *infoIconSet );
89 c->setEnabled( false ); 89 c->setEnabled( false );
90 90
91 QToolButton* d = new QToolButton( 0 ); 91 QToolButton* d = new QToolButton( 0 );
92 #ifdef QWS 92 #ifdef QWS
93 d->setAutoRaise( true ); 93 d->setAutoRaise( true );
94 #endif 94 #endif
95 d->setIconSet( *settingsIconSet ); 95 d->setIconSet( *settingsIconSet );
96 connect( d, SIGNAL( clicked() ), this, SLOT( showConfigure() ) ); 96 connect( d, SIGNAL( clicked() ), this, SLOT( showConfigure() ) );
97 97
98 // setup menu bar 98 // setup menu bar
99 99
100 int id; 100 int id;
101 101
102 QMenuBar* mb = menuBar(); 102 QMenuBar* mb = menuBar();
103 103
104 QPopupMenu* fileSave = new QPopupMenu( mb ); 104 QPopupMenu* fileSave = new QPopupMenu( mb );
105 fileSave->insertItem( tr( "&Session..." ), this, SLOT( fileSaveSession() ) ); 105 fileSave->insertItem( tr( "&Session..." ), this, SLOT( fileSaveSession() ) );
106 fileSave->insertItem( tr( "&Text Log..." ), this, SLOT( fileSaveLog() ) ); 106 fileSave->insertItem( tr( "&Text Log..." ), this, SLOT( fileSaveLog() ) );
107 fileSave->insertItem( tr( "&Hex Log..." ), this, SLOT( fileSaveHex() ) ); 107 fileSave->insertItem( tr( "&Hex Log..." ), this, SLOT( fileSaveHex() ) );
108 108
109 QPopupMenu* fileLoad = new QPopupMenu( mb ); 109 QPopupMenu* fileLoad = new QPopupMenu( mb );
110 fileLoad->insertItem( tr( "&Session..." ), this, SLOT( fileLoadSession() ) ); 110 fileLoad->insertItem( tr( "&Session..." ), this, SLOT( fileLoadSession() ) );
111 //fileLoad->insertItem( "&Log", this, SLOT( fileLoadLog() ) ); 111 //fileLoad->insertItem( "&Log", this, SLOT( fileLoadLog() ) );
112 112
113 QPopupMenu* file = new QPopupMenu( mb ); 113 QPopupMenu* file = new QPopupMenu( mb );
114 file->insertItem( tr( "&New" ), this, SLOT( fileNew() ) ); 114 file->insertItem( tr( "&New" ), this, SLOT( fileNew() ) );
115 id = file->insertItem( tr( "&Load" ), fileLoad ); 115 id = file->insertItem( tr( "&Load" ), fileLoad );
116 file->insertItem( tr( "&Save" ), fileSave ); 116 file->insertItem( tr( "&Save" ), fileSave );
117 file->insertSeparator(); 117 file->insertSeparator();
118 file->insertItem( tr( "&Exit" ), qApp, SLOT( quit() ) ); 118 file->insertItem( tr( "&Exit" ), qApp, SLOT( quit() ) );
119 119
120 QPopupMenu* view = new QPopupMenu( mb ); 120 QPopupMenu* view = new QPopupMenu( mb );
121 view->insertItem( tr( "&Configure..." ) ); 121 view->insertItem( tr( "&Configure..." ) );
122 122
123 QPopupMenu* sniffer = new QPopupMenu( mb ); 123 QPopupMenu* sniffer = new QPopupMenu( mb );
124 sniffer->insertItem( tr( "&Configure..." ), this, SLOT( showConfigure() ) ); 124 sniffer->insertItem( tr( "&Configure..." ), this, SLOT( showConfigure() ) );
125 sniffer->insertSeparator(); 125 sniffer->insertSeparator();
126 startID = sniffer->insertItem( tr( "&Start" ), mw, SLOT( startClicked() ) ); 126 startID = sniffer->insertItem( tr( "&Start" ), mw, SLOT( startClicked() ) );
127 sniffer->setItemEnabled( startID, false ); 127 sniffer->setItemEnabled( startID, false );
128 stopID = sniffer->insertItem( tr( "Sto&p" ), mw, SLOT( stopClicked() ) ); 128 stopID = sniffer->insertItem( tr( "Sto&p" ), mw, SLOT( stopClicked() ) );
129 sniffer->setItemEnabled( stopID, false ); 129 sniffer->setItemEnabled( stopID, false );
130 130
131 QPopupMenu* demo = new QPopupMenu( mb ); 131 QPopupMenu* demo = new QPopupMenu( mb );
132 demo->insertItem( tr( "&Add something" ), this, SLOT( demoAddStations() ) ); 132 demo->insertItem( tr( "&Add something" ), this, SLOT( demoAddStations() ) );
133 133
134 id = mb->insertItem( tr( "&File" ), file ); 134 id = mb->insertItem( tr( "&File" ), file );
135 //id = mb->insertItem( tr( "&View" ), view ); 135 //id = mb->insertItem( tr( "&View" ), view );
136 //mb->setItemEnabled( id, false ); 136 //mb->setItemEnabled( id, false );
137 id = mb->insertItem( tr( "&Sniffer" ), sniffer ); 137 id = mb->insertItem( tr( "&Sniffer" ), sniffer );
138 138
139 id = mb->insertItem( tr( "&Demo" ), demo ); 139 id = mb->insertItem( tr( "&Demo" ), demo );
140 mb->setItemEnabled( id, true ); 140 mb->setItemEnabled( id, true );
141 141
142 #ifdef QWS 142 #ifdef QWS
143 mb->insertItem( startButton ); 143 mb->insertItem( startButton );
144 mb->insertItem( stopButton ); 144 mb->insertItem( stopButton );
145 mb->insertItem( c ); 145 mb->insertItem( c );
146 mb->insertItem( d ); 146 mb->insertItem( d );
147 #else // Qt3 changed the insertion order. It's now totally random :( 147 #else // Qt3 changed the insertion order. It's now totally random :(
148 mb->insertItem( d ); 148 mb->insertItem( d );
149 mb->insertItem( c ); 149 mb->insertItem( c );
150 mb->insertItem( stopButton ); 150 mb->insertItem( stopButton );
151 mb->insertItem( startButton ); 151 mb->insertItem( startButton );
152 #endif 152 #endif
153 153
154 updateToolButtonState(); 154 updateToolButtonState();
155 155
156 // setup status bar (for now only on X11) 156 // setup status bar (for now only on X11)
157 157
158 #ifndef QWS 158 #ifndef QWS
159 statusBar()->message( tr( "Ready." ) ); 159 statusBar()->message( tr( "Ready." ) );
160 #endif 160 #endif
161 161
162 connect( mw, SIGNAL( startedSniffing() ), this, SLOT( changedSniffingState() ) ); 162 connect( mw, SIGNAL( startedSniffing() ), this, SLOT( changedSniffingState() ) );
163 connect( mw, SIGNAL( stoppedSniffing() ), this, SLOT( changedSniffingState() ) ); 163 connect( mw, SIGNAL( stoppedSniffing() ), this, SLOT( changedSniffingState() ) );
164}; 164};
165 165
166 166
167 167
168void WellenreiterMainWindow::showConfigure() 168void WellenreiterMainWindow::showConfigure()
169{ 169{
170 qDebug( "show configure..." ); 170 qDebug( "show configure..." );
171 cw->setCaption( tr( "Configure" ) ); 171 cw->setCaption( tr( "Configure" ) );
172 #ifdef QWS 172 #ifdef QWS
173 cw->showMaximized(); 173 cw->showMaximized();
174 #endif 174 #endif
175 int result = cw->exec(); 175 int result = cw->exec();
176 176
177 if ( result ) updateToolButtonState(); 177 if ( result ) updateToolButtonState();
178} 178}
179 179
180 180
181 181
182void WellenreiterMainWindow::updateToolButtonState() 182void WellenreiterMainWindow::updateToolButtonState()
183{ 183{
184 const QString& interface = cw->interfaceName->currentText(); 184 const QString& interface = cw->interfaceName->currentText();
185 const int cardtype = cw->driverType(); 185 const int cardtype = cw->driverType();
186 186
187 if ( ( interface != "<select>" ) && ( cardtype != 0 ) ) 187 if ( ( interface != "<select>" ) && ( cardtype != 0 ) )
188 { 188 {
189 startButton->setEnabled( true ); 189 startButton->setEnabled( true );
190 menuBar()->setItemEnabled( startID, true ); 190 menuBar()->setItemEnabled( startID, true );
191 } 191 }
192 else 192 else
193 { 193 {
194 startButton->setEnabled( false ); 194 startButton->setEnabled( false );
195 menuBar()->setItemEnabled( startID, false ); 195 menuBar()->setItemEnabled( startID, false );
196 } 196 }
197} 197}
198 198
199 199
200void WellenreiterMainWindow::changedSniffingState() 200void WellenreiterMainWindow::changedSniffingState()
201{ 201{
202 startButton->setEnabled( !mw->sniffing ); 202 startButton->setEnabled( !mw->sniffing );
203 menuBar()->setItemEnabled( startID, !mw->sniffing ); 203 menuBar()->setItemEnabled( startID, !mw->sniffing );
204 stopButton->setEnabled( mw->sniffing ); 204 stopButton->setEnabled( mw->sniffing );
205 menuBar()->setItemEnabled( stopID, mw->sniffing ); 205 menuBar()->setItemEnabled( stopID, mw->sniffing );
206} 206}
207 207
208 208
209WellenreiterMainWindow::~WellenreiterMainWindow() 209WellenreiterMainWindow::~WellenreiterMainWindow()
210{ 210{
211 delete infoIconSet; 211 delete infoIconSet;
212 delete settingsIconSet; 212 delete settingsIconSet;
213 delete startIconSet; 213 delete startIconSet;
214 delete stopIconSet; 214 delete stopIconSet;
215}; 215};
216 216
217void WellenreiterMainWindow::demoAddStations() 217void WellenreiterMainWindow::demoAddStations()
218{ 218{
219 mw = 0; 219 //mw = 0; // test SIGSGV handling
220 220
221 mw->netView()->addNewItem( "managed", "Vanille", "00:00:20:EF:A6:43", true, 6, 80 ); 221 mw->netView()->addNewItem( "managed", "Vanille", OMacAddress::fromString("00:00:20:EF:A6:43"), true, 6, 80 );
222 mw->netView()->addNewItem( "managed", "Vanille", "00:30:6D:EF:A6:23", true, 11, 10 ); 222 mw->netView()->addNewItem( "managed", "Vanille", OMacAddress::fromString("00:30:6D:EF:A6:23"), true, 11, 10 );
223 mw->netView()->addNewItem( "adhoc", "ELAN", "00:A0:F8:E7:16:22", false, 3, 10 ); 223 mw->netView()->addNewItem( "adhoc", "ELAN", OMacAddress::fromString("00:A0:F8:E7:16:22"), false, 3, 10 );
224 mw->netView()->addNewItem( "adhoc", "ELAN", "00:AA:01:E7:56:62", false, 3, 15 ); 224 mw->netView()->addNewItem( "adhoc", "ELAN", OMacAddress::fromString("00:AA:01:E7:56:62"), false, 3, 15 );
225 mw->netView()->addNewItem( "adhoc", "ELAN", "00:B0:8E:E7:56:E2", false, 3, 20 ); 225 mw->netView()->addNewItem( "adhoc", "ELAN", OMacAddress::fromString("00:B0:8E:E7:56:E2"), false, 3, 20 );
226} 226}
227 227
228 228
229QString WellenreiterMainWindow::getFileName( bool save ) 229QString WellenreiterMainWindow::getFileName( bool save )
230{ 230{
231 QMap<QString, QStringList> map; 231 QMap<QString, QStringList> map;
232 map.insert( tr("All"), QStringList() ); 232 map.insert( tr("All"), QStringList() );
233 QStringList text; 233 QStringList text;
234 text << "text/*"; 234 text << "text/*";
235 map.insert( tr("Text"), text ); 235 map.insert( tr("Text"), text );
236 text << "*"; 236 text << "*";
237 map.insert( tr("All"), text ); 237 map.insert( tr("All"), text );
238 238
239 QString str; 239 QString str;
240 if ( save ) 240 if ( save )
241 { 241 {
242 #ifdef QWS 242 #ifdef QWS
243 str = OFileDialog::getSaveFileName( 2, "/", QString::null, map ); 243 str = OFileDialog::getSaveFileName( 2, "/", QString::null, map );
244 #else 244 #else
245 str = QFileDialog::getSaveFileName(); 245 str = QFileDialog::getSaveFileName();
246 #endif 246 #endif
247 if ( str.isEmpty() /*|| QFileInfo(str).isDir()*/ ) 247 if ( str.isEmpty() /*|| QFileInfo(str).isDir()*/ )
248 return ""; 248 return "";
249 } 249 }
250 else 250 else
251 { 251 {
252 #ifdef QWS 252 #ifdef QWS
253 str = OFileDialog::getOpenFileName( 2, "/", QString::null, map ); 253 str = OFileDialog::getOpenFileName( 2, "/", QString::null, map );
254 #else 254 #else
255 str = QFileDialog::getOpenFileName(); 255 str = QFileDialog::getOpenFileName();
256 #endif 256 #endif
257 if ( str.isEmpty() || !QFile(str).exists() || QFileInfo(str).isDir() ) 257 if ( str.isEmpty() || !QFile(str).exists() || QFileInfo(str).isDir() )
258 return ""; 258 return "";
259 } 259 }
260 return str; 260 return str;
261} 261}
262 262
263 263
264void WellenreiterMainWindow::fileSaveLog() 264void WellenreiterMainWindow::fileSaveLog()
265{ 265{
266 QString fname = getFileName( true ); 266 QString fname = getFileName( true );
267 if ( !fname.isEmpty() ) 267 if ( !fname.isEmpty() )
268 { 268 {
269 QFile f( fname ); 269 QFile f( fname );
270 if ( f.open(IO_WriteOnly) ) 270 if ( f.open(IO_WriteOnly) )
271 { 271 {
272 QTextStream t( &f ); 272 QTextStream t( &f );
273 t << mw->logWindow()->getLog(); 273 t << mw->logWindow()->getLog();
274 f.close(); 274 f.close();
275 qDebug( "Saved log to file '%s'", (const char*) fname ); 275 qDebug( "Saved log to file '%s'", (const char*) fname );
276 } 276 }
277 else 277 else
278 { 278 {
279 qDebug( "Problem saving log to file '%s'", (const char*) fname ); 279 qDebug( "Problem saving log to file '%s'", (const char*) fname );
280 } 280 }
281 } 281 }
282} 282}
283 283
284void WellenreiterMainWindow::fileSaveSession() 284void WellenreiterMainWindow::fileSaveSession()
285{ 285{
286 QString fname = getFileName( true ); 286 QString fname = getFileName( true );
287 if ( !fname.isEmpty() ) 287 if ( !fname.isEmpty() )
288 { 288 {
289 289
290 QFile f( fname ); 290 QFile f( fname );
291 if ( f.open(IO_WriteOnly) ) 291 if ( f.open(IO_WriteOnly) )
292 { 292 {
293 QDataStream t( &f ); 293 QDataStream t( &f );
294 t << *mw->netView(); 294 t << *mw->netView();
295 f.close(); 295 f.close();
296 qDebug( "Saved session to file '%s'", (const char*) fname ); 296 qDebug( "Saved session to file '%s'", (const char*) fname );
297 } 297 }
298 else 298 else
299 { 299 {
300 qDebug( "Problem saving session to file '%s'", (const char*) fname ); 300 qDebug( "Problem saving session to file '%s'", (const char*) fname );
301 } 301 }
302 } 302 }
303} 303}
304 304
305void WellenreiterMainWindow::fileSaveHex() 305void WellenreiterMainWindow::fileSaveHex()
306{ 306{
307 QString fname = getFileName( true ); 307 QString fname = getFileName( true );
308 if ( !fname.isEmpty() ) 308 if ( !fname.isEmpty() )
309 { 309 {
310 QFile f( fname ); 310 QFile f( fname );
311 if ( f.open(IO_WriteOnly) ) 311 if ( f.open(IO_WriteOnly) )
312 { 312 {
313 QTextStream t( &f ); 313 QTextStream t( &f );
314 t << mw->hexWindow()->getLog(); 314 t << mw->hexWindow()->getLog();
315 f.close(); 315 f.close();
316 qDebug( "Saved hex log to file '%s'", (const char*) fname ); 316 qDebug( "Saved hex log to file '%s'", (const char*) fname );
317 } 317 }
318 else 318 else
319 { 319 {
320 qDebug( "Problem saving hex log to file '%s'", (const char*) fname ); 320 qDebug( "Problem saving hex log to file '%s'", (const char*) fname );
321 } 321 }
322 } 322 }
323} 323}
324 324
325void WellenreiterMainWindow::fileLoadSession() 325void WellenreiterMainWindow::fileLoadSession()
326{ 326{
327 QString fname = getFileName( false ); 327 QString fname = getFileName( false );
328 if ( !fname.isEmpty() ) 328 if ( !fname.isEmpty() )
329 { 329 {
330 QFile f( fname ); 330 QFile f( fname );
331 if ( f.open(IO_ReadOnly) ) 331 if ( f.open(IO_ReadOnly) )
332 { 332 {
333 QDataStream t( &f ); 333 QDataStream t( &f );
334 t >> *mw->netView(); 334 t >> *mw->netView();
335 f.close(); 335 f.close();
336 qDebug( "Loaded session from file '%s'", (const char*) fname ); 336 qDebug( "Loaded session from file '%s'", (const char*) fname );
337 } 337 }
338 else 338 else
339 { 339 {
340 qDebug( "Problem loading session from file '%s'", (const char*) fname ); 340 qDebug( "Problem loading session from file '%s'", (const char*) fname );
341 } 341 }
342 } 342 }
343} 343}
344 344
345void WellenreiterMainWindow::fileNew() 345void WellenreiterMainWindow::fileNew()
346{ 346{
347 mw->netView()->clear(); 347 mw->netView()->clear();
348 mw->logWindow()->clear(); 348 mw->logWindow()->clear();
349 mw->hexWindow()->clear(); 349 mw->hexWindow()->clear();
350} 350}
351 351
352void WellenreiterMainWindow::closeEvent( QCloseEvent* e ) 352void WellenreiterMainWindow::closeEvent( QCloseEvent* e )
353{ 353{
354 if ( mw->isDaemonRunning() ) 354 if ( mw->isDaemonRunning() )
355 { 355 {
356 QMessageBox::warning( this, "Wellenreiter/Opie", 356 QMessageBox::warning( this, "Wellenreiter/Opie",
357 tr( "Sniffing in progress!\nPlease stop sniffing before closing." ) ); 357 tr( "Sniffing in progress!\nPlease stop sniffing before closing." ) );
358 e->ignore(); 358 e->ignore();
359 } 359 }
360 else 360 else
361 { 361 {
362 QMainWindow::closeEvent( e ); 362 QMainWindow::closeEvent( e );
363 } 363 }
364} 364}
365 365
366 366
diff --git a/noncore/net/wellenreiter/gui/manufacturers.cpp b/noncore/net/wellenreiter/gui/manufacturers.cpp
deleted file mode 100644
index f9f8967..0000000
--- a/noncore/net/wellenreiter/gui/manufacturers.cpp
+++ b/dev/null
@@ -1,60 +0,0 @@
1/**********************************************************************
2** Copyright (C) 2002 Michael 'Mickey' Lauer. All rights reserved.
3**
4** This file is part of Opie Environment.
5**
6** This file may be distributed and/or modified under the terms of the
7** GNU General Public License version 2 as published by the Free Software
8** Foundation and appearing in the file LICENSE.GPL included in the
9** packaging of this file.
10**
11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
13**
14**********************************************************************/
15
16#include "manufacturers.h"
17
18// Qt
19#include <qstring.h>
20#include <qfile.h>
21#include <qtextstream.h>
22
23ManufacturerDB::ManufacturerDB( const QString& filename )
24{
25 QFile file( filename );
26 bool hasFile = file.open( IO_ReadOnly );
27 if (!hasFile)
28 {
29 qDebug( "ManufacturerDB: D'oh! Manufacturer list '%s' not found!", (const char*) filename );
30 }
31 else
32 {
33 qDebug( "ManufacturerDB: reading manufacturer list from '%s'...", (const char*) filename );
34 QTextStream s( &file );
35 QString addr;
36 QString manu;
37
38 while (!s.atEnd())
39 {
40 s >> addr;
41 s.skipWhiteSpace();
42 manu = s.readLine();
43 #ifdef DEBUG
44 //qDebug( "ManufacturerDB: read pair %s, %s", (const char*) addr, (const char*) manu );
45 #endif
46 manufacturers.insert( addr, manu );
47
48 }
49 }
50
51}
52
53ManufacturerDB::~ManufacturerDB()
54{
55}
56
57const QString& ManufacturerDB::lookup( const QString& macaddr ) const
58{
59 return manufacturers[macaddr.upper().left(8)];
60}
diff --git a/noncore/net/wellenreiter/gui/manufacturers.h b/noncore/net/wellenreiter/gui/manufacturers.h
deleted file mode 100644
index 75728b1..0000000
--- a/noncore/net/wellenreiter/gui/manufacturers.h
+++ b/dev/null
@@ -1,36 +0,0 @@
1/**********************************************************************
2** Copyright (C) 2002 Michael 'Mickey' Lauer. All rights reserved.
3**
4** This file is part of Opie Environment.
5**
6** This file may be distributed and/or modified under the terms of the
7** GNU General Public License version 2 as published by the Free Software
8** Foundation and appearing in the file LICENSE.GPL included in the
9** packaging of this file.
10**
11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
13**
14**********************************************************************/
15
16#ifndef MANUFACTURERS_H
17#define MANUFACTURERS_H
18
19#include <qmap.h>
20
21class ManufacturerDB
22{
23 public:
24
25 ManufacturerDB( const QString& filename );
26 virtual ~ManufacturerDB();
27 const QString& lookup( const QString& macaddr ) const;
28
29 private:
30
31 QMap<QString, QString> manufacturers;
32
33};
34
35#endif
36
diff --git a/noncore/net/wellenreiter/gui/scanlist.cpp b/noncore/net/wellenreiter/gui/scanlist.cpp
index d5665b4..809d0bd 100644
--- a/noncore/net/wellenreiter/gui/scanlist.cpp
+++ b/noncore/net/wellenreiter/gui/scanlist.cpp
@@ -1,456 +1,455 @@
1/********************************************************************** 1/**********************************************************************
2** Copyright (C) 2002 Michael 'Mickey' Lauer. All rights reserved. 2** Copyright (C) 2002 Michael 'Mickey' Lauer. All rights reserved.
3** 3**
4** This file is part of Opie Environment. 4** This file is part of Opie Environment.
5** 5**
6** This file may be distributed and/or modified under the terms of the 6** This file may be distributed and/or modified under the terms of the
7** GNU General Public License version 2 as published by the Free Software 7** GNU General Public License version 2 as published by the Free Software
8** Foundation and appearing in the file LICENSE.GPL included in the 8** Foundation and appearing in the file LICENSE.GPL included in the
9** packaging of this file. 9** packaging of this file.
10** 10**
11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
13** 13**
14**********************************************************************/ 14**********************************************************************/
15 15
16#include "scanlist.h" 16#include "scanlist.h"
17#include "configwindow.h" 17#include "configwindow.h"
18#include "logwindow.h" 18#include "logwindow.h"
19 19
20#include <assert.h> 20#include <assert.h>
21#include "manufacturers.h"
22#include <qdatetime.h> 21#include <qdatetime.h>
23#include <qtextstream.h> 22#include <qtextstream.h>
24 23
25#ifdef QWS 24#ifdef QWS
26#include <opie/odevice.h> 25#include <opie/odevice.h>
27using namespace Opie; 26using namespace Opie;
28#endif 27#endif
29 28
30 29
31#ifdef QWS 30#ifdef QWS
32#include <qpe/resource.h> 31#include <qpe/resource.h>
33#else 32#else
34#include "resource.h" 33#include "resource.h"
35#endif 34#endif
36 35
37const int col_type = 0; 36const int col_type = 0;
38const int col_essid = 0; 37const int col_essid = 0;
39const int col_sig = 1; 38const int col_sig = 1;
40const int col_ap = 2; 39const int col_ap = 2;
41const int col_channel = 3; 40const int col_channel = 3;
42const int col_wep = 4; 41const int col_wep = 4;
43const int col_traffic = 5; 42const int col_traffic = 5;
44const int col_ip = 6; 43const int col_ip = 6;
45const int col_manuf = 7; 44const int col_manuf = 7;
46const int col_firstseen = 8; 45const int col_firstseen = 8;
47const int col_lastseen = 9; 46const int col_lastseen = 9;
48 47
49MScanListView::MScanListView( QWidget* parent, const char* name ) 48MScanListView::MScanListView( QWidget* parent, const char* name )
50 :OListView( parent, name ), _manufacturerdb( 0 ) 49 :OListView( parent, name )
51{ 50{
52 51
53 setFrameShape( QListView::StyledPanel ); 52 setFrameShape( QListView::StyledPanel );
54 setFrameShadow( QListView::Sunken ); 53 setFrameShadow( QListView::Sunken );
55 54
56 addColumn( tr( "Net/Station" ) ); 55 addColumn( tr( "Net/Station" ) );
57 setColumnAlignment( col_essid, AlignLeft || AlignVCenter ); 56 setColumnAlignment( col_essid, AlignLeft || AlignVCenter );
58 addColumn( tr( "#" ) ); 57 addColumn( tr( "#" ) );
59 setColumnAlignment( col_sig, AlignCenter ); 58 setColumnAlignment( col_sig, AlignCenter );
60 addColumn( tr( "MAC" ) ); 59 addColumn( tr( "MAC" ) );
61 setColumnAlignment( col_ap, AlignCenter ); 60 setColumnAlignment( col_ap, AlignCenter );
62 addColumn( tr( "Chn" ) ); 61 addColumn( tr( "Chn" ) );
63 setColumnAlignment( col_channel, AlignCenter ); 62 setColumnAlignment( col_channel, AlignCenter );
64 addColumn( tr( "W" ) ); 63 addColumn( tr( "W" ) );
65 setColumnAlignment( col_wep, AlignCenter ); 64 setColumnAlignment( col_wep, AlignCenter );
66 addColumn( tr( "T" ) ); 65 addColumn( tr( "T" ) );
67 setColumnAlignment( col_traffic, AlignCenter ); 66 setColumnAlignment( col_traffic, AlignCenter );
68 addColumn( tr( "IP" ) ); 67 addColumn( tr( "IP" ) );
69 setColumnAlignment( col_ip, AlignCenter ); 68 setColumnAlignment( col_ip, AlignCenter );
70 addColumn( tr( "Manufacturer" ) ); 69 addColumn( tr( "Manufacturer" ) );
71 setColumnAlignment( col_manuf, AlignCenter ); 70 setColumnAlignment( col_manuf, AlignCenter );
72 addColumn( tr( "First Seen" ) ); 71 addColumn( tr( "First Seen" ) );
73 setColumnAlignment( col_firstseen, AlignCenter ); 72 setColumnAlignment( col_firstseen, AlignCenter );
74 addColumn( tr( "Last Seen" ) ); 73 addColumn( tr( "Last Seen" ) );
75 setColumnAlignment( col_lastseen, AlignCenter ); 74 setColumnAlignment( col_lastseen, AlignCenter );
76 setRootIsDecorated( true ); 75 setRootIsDecorated( true );
77 setAllColumnsShowFocus( true ); 76 setAllColumnsShowFocus( true );
78}; 77};
79 78
79
80MScanListView::~MScanListView() 80MScanListView::~MScanListView()
81{ 81{
82}; 82};
83 83
84
84OListViewItem* MScanListView::childFactory() 85OListViewItem* MScanListView::childFactory()
85{ 86{
86 return new MScanListItem( this ); 87 return new MScanListItem( this );
87} 88}
88 89
90
89void MScanListView::serializeTo( QDataStream& s) const 91void MScanListView::serializeTo( QDataStream& s) const
90{ 92{
91 qDebug( "serializing MScanListView" ); 93 qDebug( "serializing MScanListView" );
92 OListView::serializeTo( s ); 94 OListView::serializeTo( s );
93} 95}
94 96
97
95void MScanListView::serializeFrom( QDataStream& s) 98void MScanListView::serializeFrom( QDataStream& s)
96{ 99{
97 qDebug( "serializing MScanListView" ); 100 qDebug( "serializing MScanListView" );
98 OListView::serializeFrom( s ); 101 OListView::serializeFrom( s );
99} 102}
100 103
101void MScanListView::setManufacturerDB( ManufacturerDB* manufacturerdb )
102{
103 _manufacturerdb = manufacturerdb;
104}
105 104
106void MScanListView::addNewItem( QString type, QString essid, QString macaddr, bool wep, int channel, int signal ) 105void MScanListView::addNewItem( const QString& type, const QString& essid, const OMacAddress& mac, bool wep, int channel, int signal )
107{ 106{
108 // FIXME: scanlistitem needs a proper encapsulation and not such a damn dealing with text(...) 107 QString macaddr = mac.toString(true);
109 108
110 #ifdef DEBUG 109 #ifdef DEBUG
111 qDebug( "MScanList::addNewItem( %s / %s / %s [%d]", (const char*) type, 110 qDebug( "MScanList::addNewItem( %s / %s / %s [%d]", (const char*) type,
112 (const char*) essid, (const char*) macaddr, channel ); 111 (const char*) essid, (const char*) macaddr, channel );
113 #endif 112 #endif
114 113
115 // search, if we already have seen this net 114 // search, if we already have seen this net
116 115
117 QString s; 116 QString s;
118 MScanListItem* network; 117 MScanListItem* network;
119 MScanListItem* item = static_cast<MScanListItem*> ( firstChild() ); 118 MScanListItem* item = static_cast<MScanListItem*> ( firstChild() );
120 119
121 while ( item && ( item->text( col_essid ) != essid ) ) 120 while ( item && ( item->text( col_essid ) != essid ) )
122 { 121 {
123 #ifdef DEBUG 122 #ifdef DEBUG
124 qDebug( "itemtext: %s", (const char*) item->text( col_essid ) ); 123 qDebug( "itemtext: %s", (const char*) item->text( col_essid ) );
125 #endif 124 #endif
126 item = static_cast<MScanListItem*> ( item->nextSibling() ); 125 item = static_cast<MScanListItem*> ( item->nextSibling() );
127 } 126 }
128 if ( item ) 127 if ( item )
129 { 128 {
130 // we have already seen this net, check all childs if MAC exists 129 // we have already seen this net, check all childs if MAC exists
131 130
132 network = item; 131 network = item;
133 132
134 item = static_cast<MScanListItem*> ( item->firstChild() ); 133 item = static_cast<MScanListItem*> ( item->firstChild() );
135 assert( item ); // this shouldn't fail 134 assert( item ); // this shouldn't fail
136 135
137 while ( item && ( item->text( col_ap ) != macaddr ) ) 136 while ( item && ( item->text( col_ap ) != macaddr ) )
138 { 137 {
139 #ifdef DEBUG 138 #ifdef DEBUG
140 qDebug( "subitemtext: %s", (const char*) item->text( col_ap ) ); 139 qDebug( "subitemtext: %s", (const char*) item->text( col_ap ) );
141 #endif 140 #endif
142 item = static_cast<MScanListItem*> ( item->nextSibling() ); 141 item = static_cast<MScanListItem*> ( item->nextSibling() );
143 } 142 }
144 143
145 if ( item ) 144 if ( item )
146 { 145 {
147 // we have already seen this item, it's a dupe 146 // we have already seen this item, it's a dupe
148 #ifdef DEBUG 147 #ifdef DEBUG
149 qDebug( "%s is a dupe - ignoring...", (const char*) macaddr ); 148 qDebug( "%s is a dupe - ignoring...", (const char*) macaddr );
150 #endif 149 #endif
151 item->receivedBeacon(); 150 item->receivedBeacon();
152 return; 151 return;
153 } 152 }
154 } 153 }
155 else 154 else
156 { 155 {
157 s.sprintf( "(i) New network: ESSID '%s'", (const char*) essid ); 156 s.sprintf( "(i) New network: ESSID '%s'", (const char*) essid );
158 MLogWindow::logwindow()->log( s ); 157 MLogWindow::logwindow()->log( s );
159 network = new MScanListItem( this, "network", essid, QString::null, 0, 0, 0 ); 158 network = new MScanListItem( this, "network", essid, QString::null, 0, 0, 0 );
160 } 159 }
161 160
162 161
163 // insert new station as child from network 162 // insert new station as child from network
164 // no essid to reduce clutter, maybe later we have a nick or stationname to display!? 163 // no essid to reduce clutter, maybe later we have a nick or stationname to display!?
165 164
166 #ifdef DEBUG 165 #ifdef DEBUG
167 qDebug( "inserting new station %s", (const char*) macaddr ); 166 qDebug( "inserting new station %s", (const char*) macaddr );
168 #endif 167 #endif
169 168
170 MScanListItem* station = new MScanListItem( network, type, "", macaddr, wep, channel, signal ); 169 MScanListItem* station = new MScanListItem( network, type, "", macaddr, wep, channel, signal );
171 if ( _manufacturerdb ) 170 station->setManufacturer( mac.manufacturer() );
172 station->setManufacturer( _manufacturerdb->lookup( macaddr ) );
173 171
174 if ( type == "managed" ) 172 if ( type == "managed" )
175 { 173 {
176 s.sprintf( "(i) New Access Point in '%s' [%d]", (const char*) essid, channel ); 174 s.sprintf( "(i) New Access Point in '%s' [%d]", (const char*) essid, channel );
177 } 175 }
178 else 176 else
179 { 177 {
180 s.sprintf( "(i) New AdHoc station in '%s' [%d]", (const char*) essid, channel ); 178 s.sprintf( "(i) New AdHoc station in '%s' [%d]", (const char*) essid, channel );
181 } 179 }
182 MLogWindow::logwindow()->log( s ); 180 MLogWindow::logwindow()->log( s );
183 181
184} 182}
185 183
186 184
187void MScanListView::addIfNotExisting( MScanListItem* network, QString addr, const QString& type ) 185void MScanListView::addIfNotExisting( MScanListItem* network, const OMacAddress& addr, const QString& type )
188{ 186{
189 MScanListItem* subitem = static_cast<MScanListItem*>( network->firstChild() ); 187 MScanListItem* subitem = static_cast<MScanListItem*>( network->firstChild() );
190 188
191 while ( subitem && ( subitem->text( col_ap ) != addr ) ) 189 while ( subitem && ( subitem->text( col_ap ) != addr.toString(true) ) )
192 { 190 {
193 #ifdef DEBUG 191 #ifdef DEBUG
194 qDebug( "subitemtext: %s", (const char*) subitem->text( col_ap ) ); 192 qDebug( "subitemtext: %s", (const char*) subitem->text( col_ap ) );
195 #endif 193 #endif
196 subitem = static_cast<MScanListItem*> ( subitem->nextSibling() ); 194 subitem = static_cast<MScanListItem*> ( subitem->nextSibling() );
197 } 195 }
198 196
199 if ( subitem ) 197 if ( subitem )
200 { 198 {
201 // we have already seen this item, it's a dupe 199 // we have already seen this item, it's a dupe
202 #ifdef DEBUG 200 #ifdef DEBUG
203 qDebug( "%s is a dupe - ignoring...", (const char*) addr ); 201 qDebug( "%s is a dupe - ignoring...", (const char*) addr.toString(true) );
204 #endif 202 #endif
205 subitem->receivedBeacon(); //FIXME: sent data bit 203 subitem->receivedBeacon(); //FIXME: sent data bit
206 return; 204 return;
207 } 205 }
208 206
209 // Hey, it seems to be a new item :-D 207 // Hey, it seems to be a new item :-D
210 MScanListItem* station = new MScanListItem( network, type, /* network->text( col_essid ) */ "", addr, false, -1, -1 ); 208 MScanListItem* station = new MScanListItem( network, type, /* network->text( col_essid ) */ "", addr.toString(true), false, -1, -1 );
211 if ( _manufacturerdb ) 209 station->setManufacturer( addr.manufacturer() );
212 station->setManufacturer( _manufacturerdb->lookup( addr ) );
213 210
214 QString s; 211 QString s;
215 if ( type == "station" ) 212 if ( type == "station" )
216 { 213 {
217 s.sprintf( "(i) New Station in '%s' [xx]", (const char*) network->text( col_essid ) ); 214 s.sprintf( "(i) New Station in '%s' [xx]", (const char*) network->text( col_essid ) );
218 } 215 }
219 else 216 else
220 { 217 {
221 s.sprintf( "(i) New Wireless Station in '%s' [xx]", (const char*) network->text( col_essid ) ); 218 s.sprintf( "(i) New Wireless Station in '%s' [xx]", (const char*) network->text( col_essid ) );
222 } 219 }
223 MLogWindow::logwindow()->log( s ); 220 MLogWindow::logwindow()->log( s );
224} 221}
225 222
226 223
227void MScanListView::WDStraffic( QString from, QString to, QString viaFrom, QString viaTo ) 224void MScanListView::WDStraffic( const OMacAddress& from, const OMacAddress& to, const OMacAddress& viaFrom, const OMacAddress& viaTo )
228{ 225{
229 QString s; 226 QString s;
230 MScanListItem* network; 227 MScanListItem* network;
231 228
232 QListViewItemIterator it( this ); 229 QListViewItemIterator it( this );
233 while ( it.current() && 230 while ( it.current() &&
234 it.current()->text( col_ap ) != viaFrom && 231 it.current()->text( col_ap ) != viaFrom.toString(true) &&
235 it.current()->text( col_ap ) != viaTo ) ++it; 232 it.current()->text( col_ap ) != viaTo.toString(true) ) ++it;
236 233
237 MScanListItem* item = static_cast<MScanListItem*>( it.current() ); 234 MScanListItem* item = static_cast<MScanListItem*>( it.current() );
238 235
239 if ( item ) // Either viaFrom or viaTo AP has shown up yet, so just add our two new stations 236 if ( item ) // Either viaFrom or viaTo AP has shown up yet, so just add our two new stations
240 { 237 {
241 addIfNotExisting( static_cast<MScanListItem*>(item->parent()), from ); 238 addIfNotExisting( static_cast<MScanListItem*>(item->parent()), from );
242 addIfNotExisting( static_cast<MScanListItem*>(item->parent()), to ); 239 addIfNotExisting( static_cast<MScanListItem*>(item->parent()), to );
243 } 240 }
244 else 241 else
245 { 242 {
246 qDebug( "D'Oh! Stations without AP... ignoring for now... will handle this in 1.1 version :-D" ); 243 qDebug( "D'Oh! Stations without AP... ignoring for now... will handle this in 1.1 version :-D" );
247 MLogWindow::logwindow()->log( "WARNING: Unhandled WSD traffic!" ); 244 MLogWindow::logwindow()->log( "WARNING: Unhandled WSD traffic!" );
248 } 245 }
249} 246}
250 247
251 248
252void MScanListView::toDStraffic( QString from, QString to, QString via ) 249void MScanListView::toDStraffic( const OMacAddress& from, const OMacAddress& to, const OMacAddress& via )
253{ 250{
254 QString s; 251 QString s;
255 MScanListItem* network; 252 MScanListItem* network;
256 253
257 QListViewItemIterator it( this ); 254 QListViewItemIterator it( this );
258 while ( it.current() && it.current()->text( col_ap ) != via ) ++it; 255 while ( it.current() && it.current()->text( col_ap ) != via.toString(true) ) ++it;
259 256
260 MScanListItem* item = static_cast<MScanListItem*>( it.current() ); 257 MScanListItem* item = static_cast<MScanListItem*>( it.current() );
261 258
262 if ( item ) // AP has shown up yet, so just add our new "from" - station 259 if ( item ) // AP has shown up yet, so just add our new "from" - station
263 { 260 {
264 addIfNotExisting( static_cast<MScanListItem*>(item->parent()), from, "adhoc" ); 261 addIfNotExisting( static_cast<MScanListItem*>(item->parent()), from, "adhoc" );
265 } 262 }
266 else 263 else
267 { 264 {
268 qDebug( "D'Oh! Station without AP... ignoring for now... will handle this in 1.1 :-D" ); 265 qDebug( "D'Oh! Station without AP... ignoring for now... will handle this in 1.1 :-D" );
269 MLogWindow::logwindow()->log( "WARNING: Unhandled toDS traffic!" ); 266 MLogWindow::logwindow()->log( "WARNING: Unhandled toDS traffic!" );
270 267
271 } 268 }
272} 269}
273 270
274 271
275void MScanListView::fromDStraffic( QString from, QString to, QString via ) 272void MScanListView::fromDStraffic( const OMacAddress& from, const OMacAddress& to, const OMacAddress& via )
276{ 273{
277 QString s; 274 QString s;
278 MScanListItem* network; 275 MScanListItem* network;
279 276
280 QListViewItemIterator it( this ); 277 QListViewItemIterator it( this );
281 while ( it.current() && it.current()->text( col_ap ) != via ) ++it; 278 while ( it.current() && it.current()->text( col_ap ) != via.toString(true) ) ++it;
282 279
283 MScanListItem* item = static_cast<MScanListItem*>( it.current() ); 280 MScanListItem* item = static_cast<MScanListItem*>( it.current() );
284 281
285 if ( item ) // AP has shown up yet, so just add our new "from" - station 282 if ( item ) // AP has shown up yet, so just add our new "from" - station
286 { 283 {
287 addIfNotExisting( static_cast<MScanListItem*>(item->parent()), from, "station" ); 284 addIfNotExisting( static_cast<MScanListItem*>(item->parent()), from, "station" );
288 } 285 }
289 else 286 else
290 { 287 {
291 qDebug( "D'Oh! Station without AP... ignoring for now... will handle this in 1.1 :-D" ); 288 qDebug( "D'Oh! Station without AP... ignoring for now... will handle this in 1.1 :-D" );
292 MLogWindow::logwindow()->log( "WARNING: Unhandled fromDS traffic!" ); 289 MLogWindow::logwindow()->log( "WARNING: Unhandled fromDS traffic!" );
293 } 290 }
294} 291}
295 292
296 293
297void MScanListView::IBSStraffic( QString from, QString to, QString via ) 294void MScanListView::IBSStraffic( const OMacAddress& from, const OMacAddress& to, const OMacAddress& via )
298{ 295{
299 qWarning( "D'oh! Not yet implemented..." ); 296 qWarning( "D'oh! Not yet implemented..." );
300 MLogWindow::logwindow()->log( "WARNING: Unhandled IBSS traffic!" ); 297 MLogWindow::logwindow()->log( "WARNING: Unhandled IBSS traffic!" );
301} 298}
302 299
303 300
304void MScanListView::identify( const QString& macaddr, const QString& ip ) 301void MScanListView::identify( const OMacAddress& macaddr, const QString& ip )
305{ 302{
306 qDebug( "identify %s = %s", (const char*) macaddr, (const char*) ip ); 303 qDebug( "identify %s = %s", (const char*) macaddr.toString(), (const char*) ip );
307 304
308 QListViewItemIterator it( this ); 305 QListViewItemIterator it( this );
309 for ( ; it.current(); ++it ) 306 for ( ; it.current(); ++it )
310 { 307 {
311 if ( it.current()->text( col_ap ) == macaddr ) 308 if ( it.current()->text( col_ap ) == macaddr.toString(true) )
312 { 309 {
313 it.current()->setText( col_ip, ip ); 310 it.current()->setText( col_ip, ip );
314 return; 311 return;
315 } 312 }
316 } 313 }
317 qDebug( "D'oh! Received identification, but item not yet in list... ==> Handle this!" ); 314 qDebug( "D'oh! Received identification, but item not yet in list... ==> Handle this!" );
318 MLogWindow::logwindow()->log( QString().sprintf( "WARNING: Unhandled identification %s = %s!", 315 MLogWindow::logwindow()->log( QString().sprintf( "WARNING: Unhandled identification %s = %s!",
319 (const char*) macaddr, (const char*) ip ) ); 316 (const char*) macaddr.toString(), (const char*) ip ) );
320} 317}
321 318
322 319
323//============================================================ 320//============================================================
324// MScanListItem 321// MScanListItem
325//============================================================ 322//============================================================
326 323
327MScanListItem::MScanListItem( QListView* parent, QString type, QString essid, QString macaddr, 324MScanListItem::MScanListItem( QListView* parent, QString type, QString essid, QString macaddr,
328 bool wep, int channel, int signal ) 325 bool wep, int channel, int signal )
329 :OListViewItem( parent, essid, QString::null, macaddr, QString::null, QString::null ), 326 :OListViewItem( parent, essid, QString::null, macaddr, QString::null, QString::null ),
330 _type( type ), _essid( essid ), _macaddr( macaddr ), _wep( wep ), 327 _type( type ), _essid( essid ), _macaddr( macaddr ), _wep( wep ),
331 _channel( channel ), _signal( signal ), _beacons( 1 ) 328 _channel( channel ), _signal( signal ), _beacons( 1 )
332{ 329{
333 #ifdef DEBUG 330 #ifdef DEBUG
334 qDebug( "creating scanlist item" ); 331 qDebug( "creating scanlist item" );
335 #endif 332 #endif
336 if ( WellenreiterConfigWindow::instance() && type == "network" ) 333 if ( WellenreiterConfigWindow::instance() && type == "network" )
337 playSound( WellenreiterConfigWindow::instance()->soundOnNetwork() ); 334 playSound( WellenreiterConfigWindow::instance()->soundOnNetwork() );
338 decorateItem( type, essid, macaddr, wep, channel, signal ); 335 decorateItem( type, essid, macaddr, wep, channel, signal );
339} 336}
340 337
341MScanListItem::MScanListItem( QListViewItem* parent, QString type, QString essid, QString macaddr, 338MScanListItem::MScanListItem( QListViewItem* parent, QString type, QString essid, QString macaddr,
342 bool wep, int channel, int signal ) 339 bool wep, int channel, int signal )
343 :OListViewItem( parent, essid, QString::null, macaddr, QString::null, QString::null ) 340 :OListViewItem( parent, essid, QString::null, macaddr, QString::null, QString::null )
344{ 341{
345 #ifdef DEBUG 342 #ifdef DEBUG
346 qDebug( "creating scanlist item" ); 343 qDebug( "creating scanlist item" );
347 #endif 344 #endif
348 decorateItem( type, essid, macaddr, wep, channel, signal ); 345 decorateItem( type, essid, macaddr, wep, channel, signal );
349} 346}
350 347
351OListViewItem* MScanListItem::childFactory() 348OListViewItem* MScanListItem::childFactory()
352{ 349{
353 return new MScanListItem( this ); 350 return new MScanListItem( this );
354} 351}
355 352
356void MScanListItem::serializeTo( QDataStream& s ) const 353void MScanListItem::serializeTo( QDataStream& s ) const
357{ 354{
358 #ifdef DEBUG 355 #ifdef DEBUG
359 qDebug( "serializing MScanListItem" ); 356 qDebug( "serializing MScanListItem" );
360 #endif 357 #endif
361 OListViewItem::serializeTo( s ); 358 OListViewItem::serializeTo( s );
362 359
363 s << _type; 360 s << _type;
364 s << (Q_UINT8) ( _wep ? 'y' : 'n' ); 361 s << (Q_UINT8) ( _wep ? 'y' : 'n' );
365} 362}
366 363
367void MScanListItem::serializeFrom( QDataStream& s ) 364void MScanListItem::serializeFrom( QDataStream& s )
368{ 365{
369 #ifdef DEBUG 366 #ifdef DEBUG
370 qDebug( "serializing MScanListItem" ); 367 qDebug( "serializing MScanListItem" );
371 #endif 368 #endif
372 OListViewItem::serializeFrom( s ); 369 OListViewItem::serializeFrom( s );
373 370
374 char wep; 371 char wep;
375 s >> _type; 372 s >> _type;
376 s >> (Q_UINT8) wep; 373 s >> (Q_UINT8) wep;
377 _wep = (wep == 'y'); 374 _wep = (wep == 'y');
378 375
379 QString name; 376 QString name;
380 name.sprintf( "wellenreiter/%s", (const char*) _type ); 377 name.sprintf( "wellenreiter/%s", (const char*) _type );
381 setPixmap( col_type, Resource::loadPixmap( name ) ); 378 setPixmap( col_type, Resource::loadPixmap( name ) );
382 if ( _wep ) 379 if ( _wep )
383 setPixmap( col_wep, Resource::loadPixmap( "wellenreiter/cracked" ) ); //FIXME: rename the pixmap! 380 setPixmap( col_wep, Resource::loadPixmap( "wellenreiter/cracked" ) ); //FIXME: rename the pixmap!
384 listView()->triggerUpdate(); 381 listView()->triggerUpdate();
385} 382}
386 383
387void MScanListItem::decorateItem( QString type, QString essid, QString macaddr, bool wep, int channel, int signal ) 384void MScanListItem::decorateItem( QString type, QString essid, QString macaddr, bool wep, int channel, int signal )
388{ 385{
389 #ifdef DEBUG 386 #ifdef DEBUG
390 qDebug( "decorating scanlist item %s / %s / %s [%d]", 387 qDebug( "decorating scanlist item %s / %s / %s [%d]",
391 (const char*) type, 388 (const char*) type,
392 (const char*) essid, 389 (const char*) essid,
393 (const char*) macaddr, 390 (const char*) macaddr,
394 channel ); 391 channel );
395 #endif 392 #endif
396 393
397 // set icon for managed or adhoc mode 394 // set icon for managed or adhoc mode
398 QString name; 395 QString name;
399 name.sprintf( "wellenreiter/%s", (const char*) type ); 396 name.sprintf( "wellenreiter/%s", (const char*) type );
400 setPixmap( col_type, Resource::loadPixmap( name ) ); 397 setPixmap( col_type, Resource::loadPixmap( name ) );
401 398
402 // set icon for wep (wireless encryption protocol) 399 // set icon for wep (wireless encryption protocol)
403 if ( wep ) 400 if ( wep )
404 setPixmap( col_wep, Resource::loadPixmap( "wellenreiter/cracked" ) ); //FIXME: rename the pixmap! 401 setPixmap( col_wep, Resource::loadPixmap( "wellenreiter/cracked" ) ); //FIXME: rename the pixmap!
405 402
406 // set channel and signal text 403 // set channel and signal text
407 404
408 if ( signal != -1 ) 405 if ( signal != -1 )
409 setText( col_sig, QString::number( signal ) ); 406 setText( col_sig, QString::number( signal ) );
410 if ( channel != -1 ) 407 if ( channel != -1 )
411 setText( col_channel, QString::number( channel ) ); 408 setText( col_channel, QString::number( channel ) );
412 409
413 setText( col_firstseen, QTime::currentTime().toString() ); 410 setText( col_firstseen, QTime::currentTime().toString() );
414 //setText( col_lastseen, QTime::currentTime().toString() ); 411 //setText( col_lastseen, QTime::currentTime().toString() );
415 412
416 listView()->triggerUpdate(); 413 listView()->triggerUpdate();
417 414
418 this->type = type; 415 this->type = type;
419 _type = type; 416 _type = type;
420 _essid = essid; 417 _essid = essid;
421 _macaddr = macaddr; 418 _macaddr = macaddr;
422 _channel = channel; 419 _channel = channel;
423 _beacons = 1; 420 _beacons = 1;
424 _signal = 0; 421 _signal = 0;
425} 422}
426 423
427 424
428void MScanListItem::setManufacturer( const QString& manufacturer ) 425void MScanListItem::setManufacturer( const QString& manufacturer )
429{ 426{
430 setText( col_manuf, manufacturer ); 427 setText( col_manuf, manufacturer );
431} 428}
432 429
433 430
434void MScanListItem::playSound( const QString& sound ) const 431void MScanListItem::playSound( const QString& sound ) const
435{ 432{
436 #ifdef QWS 433 #ifdef QWS
437 if ( sound == "Ignore" ) return; 434 if ( sound == "Ignore" ) return;
438 else if ( sound == "Touch" ) ODevice::inst()->touchSound(); 435 else if ( sound == "Touch" ) ODevice::inst()->touchSound();
439 else if ( sound == "Key" ) ODevice::inst()->keySound(); 436 else if ( sound == "Key" ) ODevice::inst()->keySound();
440 else if ( sound == "Alarm" ) ODevice::inst()->alarmSound(); 437 else if ( sound == "Alarm" ) ODevice::inst()->alarmSound();
441 #endif 438 #endif
442} 439}
443 440
444 441
445void MScanListItem::receivedBeacon() 442void MScanListItem::receivedBeacon()
446{ 443{
447 _beacons++; 444 _beacons++;
448 #ifdef DEBUG 445 #ifdef DEBUG
449 qDebug( "MScanListItem %s: received beacon #%d", (const char*) _macaddr, _beacons ); 446 qDebug( "MScanListItem %s: received beacon #%d", (const char*) _macaddr, _beacons );
450 #endif 447 #endif
451 setText( col_sig, QString::number( _beacons ) ); 448 setText( col_sig, QString::number( _beacons ) );
452 setText( col_lastseen, QTime::currentTime().toString() ); 449 setText( col_lastseen, QTime::currentTime().toString() );
453 if ( WellenreiterConfigWindow::instance() ) 450
454 playSound( WellenreiterConfigWindow::instance()->soundOnBeacon() ); 451 MScanListItem* p = (MScanListItem*) parent();
452 if ( p ) p->receivedBeacon();
453
455} 454}
456 455
diff --git a/noncore/net/wellenreiter/gui/scanlist.h b/noncore/net/wellenreiter/gui/scanlist.h
index 4cb9216..253c166 100644
--- a/noncore/net/wellenreiter/gui/scanlist.h
+++ b/noncore/net/wellenreiter/gui/scanlist.h
@@ -1,135 +1,131 @@
1/********************************************************************** 1/**********************************************************************
2** Copyright (C) 2002 Michael 'Mickey' Lauer. All rights reserved. 2** Copyright (C) 2002 Michael 'Mickey' Lauer. All rights reserved.
3** 3**
4** This file is part of Opie Environment. 4** This file is part of Opie Environment.
5** 5**
6** This file may be distributed and/or modified under the terms of the 6** This file may be distributed and/or modified under the terms of the
7** GNU General Public License version 2 as published by the Free Software 7** GNU General Public License version 2 as published by the Free Software
8** Foundation and appearing in the file LICENSE.GPL included in the 8** Foundation and appearing in the file LICENSE.GPL included in the
9** packaging of this file. 9** packaging of this file.
10** 10**
11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
13** 13**
14**********************************************************************/ 14**********************************************************************/
15 15
16#ifndef SCANLIST_H 16#ifndef SCANLIST_H
17#define SCANLIST_H 17#define SCANLIST_H
18 18
19/* OPIE */
19#include <opie2/olistview.h> 20#include <opie2/olistview.h>
21#include <opie2/onetutils.h>
20 22
23/* QT */
21#include <qtextstream.h> 24#include <qtextstream.h>
22 25
23class QString; 26class QString;
24class ManufacturerDB;
25
26class MScanListItem; 27class MScanListItem;
27 28
28class MScanListView: public OListView 29class MScanListView: public OListView
29{ 30{
30 Q_OBJECT 31 Q_OBJECT
31 32
32 public: 33 public:
33 MScanListView( QWidget* parent = 0, const char* name = 0 ); 34 MScanListView( QWidget* parent = 0, const char* name = 0 );
34 virtual ~MScanListView(); 35 virtual ~MScanListView();
35 36
36 void setManufacturerDB( ManufacturerDB* manufacturerdb );
37
38 virtual OListViewItem* childFactory(); 37 virtual OListViewItem* childFactory();
39 virtual void serializeTo( QDataStream& s ) const; 38 virtual void serializeTo( QDataStream& s ) const;
40 virtual void serializeFrom( QDataStream& s ); 39 virtual void serializeFrom( QDataStream& s );
41 40
42 public slots: 41 public slots:
43 void addNewItem( QString type, QString essid, QString macaddr, bool wep, int channel, int signal ); 42 void addNewItem( const QString& type, const QString& essid, const OMacAddress& macaddr, bool wep, int channel, int signal );
44 void fromDStraffic( QString from, QString to, QString via ); // NYI 43 void fromDStraffic( const OMacAddress& from, const OMacAddress& to, const OMacAddress& via );
45 void toDStraffic( QString from, QString to, QString via ); 44 void toDStraffic( const OMacAddress& from, const OMacAddress& to, const OMacAddress& via );
46 void WDStraffic( QString from, QString to, QString viaFrom, QString viaTo ); 45 void WDStraffic( const OMacAddress& from, const OMacAddress& to, const OMacAddress& viaFrom, const OMacAddress& viaTo );
47 void IBSStraffic( QString from, QString to, QString via ); // NYI 46 void IBSStraffic( const OMacAddress& from, const OMacAddress& to, const OMacAddress& via );
48 47
49 void identify( const QString& macaddr, const QString& ipaddr ); 48 void identify( const OMacAddress&, const QString& ipaddr );
50 49
51 protected: 50 protected:
52 void addIfNotExisting( MScanListItem* parent, QString addr, const QString& type = "station" ); 51 void addIfNotExisting( MScanListItem* parent, const OMacAddress& addr, const QString& type = "station" );
53
54 private:
55 ManufacturerDB* _manufacturerdb;
56 52
57}; 53};
58 54
59//****************************** MScanListItem **************************************************************** 55//****************************** MScanListItem ****************************************************************
60 56
61class MScanListItem: public OListViewItem 57class MScanListItem: public OListViewItem
62{ 58{
63 public: 59 public:
64 MScanListItem::MScanListItem( QListView* parent, 60 MScanListItem::MScanListItem( QListView* parent,
65 QString type = "unknown", 61 QString type = "unknown",
66 QString essid = "unknown", 62 QString essid = "unknown",
67 QString macaddr = "unknown", 63 QString macaddr = "unknown",
68 bool wep = false, 64 bool wep = false,
69 int channel = 0, 65 int channel = 0,
70 int signal = 0 ); 66 int signal = 0 );
71 67
72 MScanListItem::MScanListItem( QListViewItem* parent, 68 MScanListItem::MScanListItem( QListViewItem* parent,
73 QString type = "unknown", 69 QString type = "unknown",
74 QString essid = "unknown", 70 QString essid = "unknown",
75 QString macaddr = "unknown", 71 QString macaddr = "unknown",
76 bool wep = false, 72 bool wep = false,
77 int channel = 0, 73 int channel = 0,
78 int signal = 0 ); 74 int signal = 0 );
79 75
80 76
81 protected: 77 protected:
82 virtual void decorateItem( QString type, QString essid, QString macaddr, bool wep, int channel, int signal ); 78 virtual void decorateItem( QString type, QString essid, QString macaddr, bool wep, int channel, int signal );
83 79
84 public: 80 public:
85 QString type; 81 QString type;
86 82
87 public: 83 public:
88 //const QString& type() { return _type; }; 84 //const QString& type() { return _type; };
89 const QString& essid() { return _essid; }; 85 const QString& essid() { return _essid; };
90 const QString& macaddr() { return _macaddr; }; 86 const QString& macaddr() { return _macaddr; };
91 bool wep() { return _wep; }; 87 bool wep() { return _wep; };
92 int channel() { return _channel; }; 88 int channel() { return _channel; };
93 int signal() { return _signal; }; 89 int signal() { return _signal; };
94 int beacons() { return _beacons; }; 90 int beacons() { return _beacons; };
95 91
96 void setSignal( int signal ) { /* TODO */ }; 92 void setSignal( int signal ) { /* TODO */ };
97 void receivedBeacon(); 93 void receivedBeacon();
98 94
99 void setManufacturer( const QString& manufacturer ); 95 void setManufacturer( const QString& manufacturer );
100 96
101 virtual OListViewItem* childFactory(); 97 virtual OListViewItem* childFactory();
102 virtual void serializeTo( QDataStream& s ) const; 98 virtual void serializeTo( QDataStream& s ) const;
103 virtual void serializeFrom( QDataStream& s ); 99 virtual void serializeFrom( QDataStream& s );
104 100
105 protected: 101 protected:
106 void playSound( const QString& ) const; 102 void playSound( const QString& ) const;
107 103
108 private: 104 private:
109 QString _type; 105 QString _type;
110 QString _essid; 106 QString _essid;
111 QString _macaddr; 107 QString _macaddr;
112 bool _wep; 108 bool _wep;
113 int _channel; 109 int _channel;
114 int _signal; 110 int _signal;
115 int _beacons; 111 int _beacons;
116 112
117}; 113};
118 114
119//****************************** MScanListViewFactory **************************************************************** 115//****************************** MScanListViewFactory ****************************************************************
120 116
121/* 117/*
122 118
123class MScanListViewFactory : public OListViewFactory 119class MScanListViewFactory : public OListViewFactory
124{ 120{
125public: 121public:
126 virtual QListView* listViewFactory(); 122 virtual QListView* listViewFactory();
127 virtual QListViewItem* listViewItemFactory( QListView* lv ); 123 virtual QListViewItem* listViewItemFactory( QListView* lv );
128 virtual QListViewItem* listViewItemFactory( QListViewItem* lvi ); 124 virtual QListViewItem* listViewItemFactory( QListViewItem* lvi );
129 virtual void setColumnText( int depth, QListViewItem* lvi, int column, const QString& text ); 125 virtual void setColumnText( int depth, QListViewItem* lvi, int column, const QString& text );
130 virtual void setCustomData( int depth, QListViewItem* lvi, const QString& text ); 126 virtual void setCustomData( int depth, QListViewItem* lvi, const QString& text );
131} 127}
132*/ 128*/
133 129
134#endif 130#endif
135 131
diff --git a/noncore/net/wellenreiter/gui/wellenreiter.cpp b/noncore/net/wellenreiter/gui/wellenreiter.cpp
index 4257be1..2f26702 100644
--- a/noncore/net/wellenreiter/gui/wellenreiter.cpp
+++ b/noncore/net/wellenreiter/gui/wellenreiter.cpp
@@ -1,540 +1,490 @@
1/********************************************************************** 1/**********************************************************************
2** Copyright (C) 2002 Michael 'Mickey' Lauer. All rights reserved. 2** Copyright (C) 2002 Michael 'Mickey' Lauer. All rights reserved.
3** 3**
4** This file is part of Opie Environment. 4** This file is part of Opie Environment.
5** 5**
6** This file may be distributed and/or modified under the terms of the 6** This file may be distributed and/or modified under the terms of the
7** GNU General Public License version 2 as published by the Free Software 7** GNU General Public License version 2 as published by the Free Software
8** Foundation and appearing in the file LICENSE.GPL included in the 8** Foundation and appearing in the file LICENSE.GPL included in the
9** packaging of this file. 9** packaging of this file.
10** 10**
11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
13** 13**
14***********************************************************************/ 14***********************************************************************/
15 15
16// Local 16// Local
17 17
18#include "wellenreiter.h" 18#include "wellenreiter.h"
19#include "scanlist.h" 19#include "scanlist.h"
20#include "logwindow.h" 20#include "logwindow.h"
21#include "hexwindow.h" 21#include "hexwindow.h"
22#include "configwindow.h" 22#include "configwindow.h"
23#include "statwindow.h" 23#include "statwindow.h"
24#include "graphwindow.h" 24#include "graphwindow.h"
25#include "manufacturers.h"
26#include "protolistview.h" 25#include "protolistview.h"
27 26
28// Opie 27// Opie
29 28
30#ifdef QWS 29#ifdef QWS
31#include <opie/odevice.h> 30#include <opie/odevice.h>
32using namespace Opie; 31using namespace Opie;
33#endif 32#endif
34 33
35#ifdef QWS 34#ifdef QWS
36#include <opie2/oapplication.h> 35#include <opie2/oapplication.h>
37#else 36#else
38#include <qapplication.h> 37#include <qapplication.h>
39#endif 38#endif
40#include <opie2/onetwork.h> 39#include <opie2/onetwork.h>
41#include <opie2/opcap.h> 40#include <opie2/opcap.h>
42 41
43// Qt 42// Qt
44 43
45#include <qcheckbox.h> 44#include <qcheckbox.h>
46#include <qcombobox.h> 45#include <qcombobox.h>
47#include <qdatetime.h> 46#include <qdatetime.h>
48#include <qpushbutton.h> 47#include <qpushbutton.h>
49#include <qlineedit.h> 48#include <qlineedit.h>
50#include <qmessagebox.h> 49#include <qmessagebox.h>
51#include <qobjectlist.h> 50#include <qobjectlist.h>
52#include <qregexp.h> 51#include <qregexp.h>
53#include <qspinbox.h> 52#include <qspinbox.h>
54#include <qtoolbutton.h> 53#include <qtoolbutton.h>
55#include <qmainwindow.h> 54#include <qmainwindow.h>
56 55
57// Standard 56// Standard
58 57
59#include <assert.h> 58#include <assert.h>
60#include <errno.h> 59#include <errno.h>
61#include <unistd.h> 60#include <unistd.h>
62#include <string.h> 61#include <string.h>
63#include <sys/types.h> 62#include <sys/types.h>
64#include <stdlib.h> 63#include <stdlib.h>
65 64
66Wellenreiter::Wellenreiter( QWidget* parent ) 65Wellenreiter::Wellenreiter( QWidget* parent )
67 : WellenreiterBase( parent, 0, 0 ), 66 : WellenreiterBase( parent, 0, 0 ),
68 sniffing( false ), iface( 0 ), manufacturerdb( 0 ), configwindow( 0 ) 67 sniffing( false ), iface( 0 ), configwindow( 0 )
69{ 68{
70 69
71 //
72 // construct manufacturer database
73 //
74
75 QString manufile;
76 #ifdef QWS
77 manufile.sprintf( "%s/share/wellenreiter/manufacturers.dat", (const char*) QPEApplication::qpeDir() );
78 #else
79 manufile.sprintf( "/usr/local/share/wellenreiter/manufacturers.dat" );
80 #endif
81 manufacturerdb = new ManufacturerDB( manufile );
82
83 logwindow->log( "(i) Wellenreiter has been started." ); 70 logwindow->log( "(i) Wellenreiter has been started." );
84 71
85 // 72 //
86 // detect operating system 73 // detect operating system
87 // 74 //
88 75
89 #ifdef QWS 76 #ifdef QWS
90 QString sys; 77 QString sys;
91 sys.sprintf( "(i) Running on '%s'.", (const char*) ODevice::inst()->systemString() ); 78 sys.sprintf( "(i) Running on '%s'.", (const char*) ODevice::inst()->systemString() );
92 _system = ODevice::inst()->system(); 79 _system = ODevice::inst()->system();
93 logwindow->log( sys ); 80 logwindow->log( sys );
94 #endif 81 #endif
95 82
96 // setup GUI
97 netview->setColumnWidthMode( 1, QListView::Manual ); 83 netview->setColumnWidthMode( 1, QListView::Manual );
98
99 if ( manufacturerdb )
100 netview->setManufacturerDB( manufacturerdb );
101
102 pcap = new OPacketCapturer(); 84 pcap = new OPacketCapturer();
103
104} 85}
105 86
106 87
107Wellenreiter::~Wellenreiter() 88Wellenreiter::~Wellenreiter()
108{ 89{
109 // no need to delete child widgets, Qt does it all for us
110
111 delete manufacturerdb;
112 delete pcap; 90 delete pcap;
113} 91}
114 92
115 93
116void Wellenreiter::setConfigWindow( WellenreiterConfigWindow* cw ) 94void Wellenreiter::setConfigWindow( WellenreiterConfigWindow* cw )
117{ 95{
118 configwindow = cw; 96 configwindow = cw;
119} 97}
120 98
121 99
122void Wellenreiter::channelHopped(int c) 100void Wellenreiter::channelHopped(int c)
123{ 101{
124 QString title = "Wellenreiter II -scan- ["; 102 QString title = "Wellenreiter II -scan- [";
125 QString left; 103 QString left;
126 if ( c > 1 ) left.fill( '.', c-1 ); 104 if ( c > 1 ) left.fill( '.', c-1 );
127 title.append( left ); 105 title.append( left );
128 title.append( '|' ); 106 title.append( '|' );
129 if ( c < iface->channels() ) 107 if ( c < iface->channels() )
130 { 108 {
131 QString right; 109 QString right;
132 right.fill( '.', iface->channels()-c ); 110 right.fill( '.', iface->channels()-c );
133 title.append( right ); 111 title.append( right );
134 } 112 }
135 title.append( "]" ); 113 title.append( "]" );
136 //title.append( QString().sprintf( " %02d", c ) ); 114 //title.append( QString().sprintf( " %02d", c ) );
137 assert( parent() ); 115 assert( parent() );
138 ( (QMainWindow*) parent() )->setCaption( title ); 116 ( (QMainWindow*) parent() )->setCaption( title );
139} 117}
140 118
141 119
142void Wellenreiter::handleNotification( OPacket* p ) 120void Wellenreiter::handleNotification( OPacket* p )
143{ 121{
144 QObjectList* l = p->queryList(); 122 QObjectList* l = p->queryList();
145 QObjectListIt it( *l ); 123 QObjectListIt it( *l );
146 QObject* o; 124 QObject* o;
147 125
148 while ( (o = it.current()) != 0 ) 126 while ( (o = it.current()) != 0 )
149 { 127 {
150 QString name = it.current()->name(); 128 QString name = it.current()->name();
151 if ( configwindow->parsePackets->isProtocolChecked( name ) ) 129 if ( configwindow->parsePackets->isProtocolChecked( name ) )
152 { 130 {
153 QString action = configwindow->parsePackets->protocolAction( name ); 131 QString action = configwindow->parsePackets->protocolAction( name );
154 qDebug( "parsePacket-action for '%s' seems to be '%s'", (const char*) name, (const char*) action ); 132 qDebug( "parsePacket-action for '%s' seems to be '%s'", (const char*) name, (const char*) action );
155 doAction( action, name, p ); 133 doAction( action, name, p );
156 } 134 }
157 else 135 else
158 { 136 {
159 qDebug( "protocol '%s' not checked in parsePackets.", (const char*) name ); 137 qDebug( "protocol '%s' not checked in parsePackets.", (const char*) name );
160 } 138 }
161 ++it; 139 ++it;
162 } 140 }
163} 141}
164 142
165 143
166void Wellenreiter::handleBeacon( OPacket* p, OWaveLanManagementPacket* beacon ) 144void Wellenreiter::handleBeacon( OPacket* p, OWaveLanManagementPacket* beacon )
167{ 145{
168 QString type; 146 QString type;
169 if ( beacon->canIBSS() ) 147 if ( beacon->canIBSS() )
170 { 148 {
171 type = "adhoc"; 149 type = "adhoc";
172 } 150 }
173 else if ( beacon->canESS() ) 151 else if ( beacon->canESS() )
174 { 152 {
175 type = "managed"; 153 type = "managed";
176 } 154 }
177 else 155 else
178 { 156 {
179 qWarning( "Wellenreiter::invalid frame [possibly noise] detected!" ); 157 qWarning( "Wellenreiter::invalid frame [possibly noise] detected!" );
180 return; 158 return;
181 } 159 }
182 160
183 OWaveLanManagementSSID* ssid = static_cast<OWaveLanManagementSSID*>( p->child( "802.11 SSID" ) ); 161 OWaveLanManagementSSID* ssid = static_cast<OWaveLanManagementSSID*>( p->child( "802.11 SSID" ) );
184 QString essid = ssid ? ssid->ID() : QString("<unknown>"); 162 QString essid = ssid ? ssid->ID() : QString("<unknown>");
185 OWaveLanManagementDS* ds = static_cast<OWaveLanManagementDS*>( p->child( "802.11 DS" ) ); 163 OWaveLanManagementDS* ds = static_cast<OWaveLanManagementDS*>( p->child( "802.11 DS" ) );
186 int channel = ds ? ds->channel() : -1; 164 int channel = ds ? ds->channel() : -1;
187 165
188 OWaveLanPacket* header = static_cast<OWaveLanPacket*>( p->child( "802.11" ) ); 166 OWaveLanPacket* header = static_cast<OWaveLanPacket*>( p->child( "802.11" ) );
189 netView()->addNewItem( type, essid, header->macAddress2().toString(), beacon->canPrivacy(), channel, 0 ); 167 netView()->addNewItem( type, essid, header->macAddress2(), beacon->canPrivacy(), channel, 0 );
190 168
191 // update graph window 169 // update graph window
192 if ( ds ) 170 if ( ds )
193 { 171 {
194 OPrismHeaderPacket* prism = static_cast<OPrismHeaderPacket*>( p->child( "Prism" ) ); 172 OPrismHeaderPacket* prism = static_cast<OPrismHeaderPacket*>( p->child( "Prism" ) );
195 if ( prism ) 173 if ( prism )
196 graphwindow->traffic( ds->channel(), prism->signalStrength() ); 174 graphwindow->traffic( ds->channel(), prism->signalStrength() );
197 else 175 else
198 graphwindow->traffic( ds->channel(), 95 ); 176 graphwindow->traffic( ds->channel(), 95 );
199 } 177 }
200} 178}
201 179
202 180
203void Wellenreiter::handleData( OPacket* p, OWaveLanDataPacket* data ) 181void Wellenreiter::handleData( OPacket* p, OWaveLanDataPacket* data )
204{ 182{
205 OWaveLanPacket* wlan = (OWaveLanPacket*) p->child( "802.11" ); 183 OWaveLanPacket* wlan = (OWaveLanPacket*) p->child( "802.11" );
206 if ( wlan->fromDS() && !wlan->toDS() ) 184 if ( wlan->fromDS() && !wlan->toDS() )
207 { 185 {
208 qDebug( "FromDS traffic: '%s' -> '%s' via '%s'", 186 netView()->fromDStraffic( wlan->macAddress3(), wlan->macAddress1(), wlan->macAddress2() );
209 (const char*) wlan->macAddress3().toString(true),
210 (const char*) wlan->macAddress1().toString(true),
211 (const char*) wlan->macAddress2().toString(true) );
212 netView()->fromDStraffic( wlan->macAddress3().toString(),
213 wlan->macAddress1().toString(),
214 wlan->macAddress2().toString() );
215 } 187 }
216 else 188 else if ( !wlan->fromDS() && wlan->toDS() )
217 if ( !wlan->fromDS() && wlan->toDS() )
218 { 189 {
219 qDebug( "ToDS traffic: '%s' -> '%s' via '%s'", 190 netView()->toDStraffic( wlan->macAddress2(), wlan->macAddress3(), wlan->macAddress1() );
220 (const char*) wlan->macAddress2().toString(true),
221 (const char*) wlan->macAddress3().toString(true),
222 (const char*) wlan->macAddress1().toString(true) );
223 netView()->toDStraffic( wlan->macAddress2().toString(),
224 wlan->macAddress3().toString(),
225 wlan->macAddress1().toString() );
226 } 191 }
227 else 192 else if ( wlan->fromDS() && wlan->toDS() )
228 if ( wlan->fromDS() && wlan->toDS() )
229 { 193 {
230 qDebug( "WDS(bridge) traffic: '%s' -> '%s' via '%s' and '%s'", 194 netView()->WDStraffic( wlan->macAddress4(), wlan->macAddress3(), wlan->macAddress1(), wlan->macAddress2() );
231 (const char*) wlan->macAddress4().toString(true),
232 (const char*) wlan->macAddress3().toString(true),
233 (const char*) wlan->macAddress1().toString(true),
234 (const char*) wlan->macAddress2().toString(true) );
235 netView()->WDStraffic( wlan->macAddress4().toString(),
236 wlan->macAddress3().toString(),
237 wlan->macAddress1().toString(),
238 wlan->macAddress2().toString() );
239 } 195 }
240 else 196 else
241 { 197 {
242 qDebug( "IBSS(AdHoc) traffic: '%s' -> '%s' (Cell: '%s')'", 198 netView()->IBSStraffic( wlan->macAddress2(), wlan->macAddress1(), wlan->macAddress3() );
243 (const char*) wlan->macAddress2().toString(true),
244 (const char*) wlan->macAddress1().toString(true),
245 (const char*) wlan->macAddress3().toString(true) );
246 netView()->IBSStraffic( wlan->macAddress2().toString(),
247 wlan->macAddress1().toString(),
248 wlan->macAddress3().toString() );
249 } 199 }
250 200
251 OARPPacket* arp = (OARPPacket*) p->child( "ARP" ); 201 OARPPacket* arp = (OARPPacket*) p->child( "ARP" );
252 if ( arp ) 202 if ( arp )
253 { 203 {
254 qDebug( "Received ARP traffic (type '%s'): ", (const char*) arp->type() ); 204 qDebug( "Received ARP traffic (type '%s'): ", (const char*) arp->type() );
255 if ( arp->type() == "REQUEST" ) 205 if ( arp->type() == "REQUEST" )
256 { 206 {
257 netView()->identify( arp->senderMacAddress().toString(), arp->senderIPV4Address().toString() ); 207 netView()->identify( arp->senderMacAddress(), arp->senderIPV4Address().toString() );
258 } 208 }
259 else if ( arp->type() == "REPLY" ) 209 else if ( arp->type() == "REPLY" )
260 { 210 {
261 netView()->identify( arp->senderMacAddress().toString(), arp->senderIPV4Address().toString() ); 211 netView()->identify( arp->senderMacAddress(), arp->senderIPV4Address().toString() );
262 netView()->identify( arp->targetMacAddress().toString(), arp->targetIPV4Address().toString() ); 212 netView()->identify( arp->targetMacAddress(), arp->targetIPV4Address().toString() );
263 } 213 }
264 } 214 }
265 215
266 OIPPacket* ip = (OIPPacket*) p->child( "IP" ); 216 OIPPacket* ip = (OIPPacket*) p->child( "IP" );
267 if ( ip ) 217 if ( ip )
268 { 218 {
269 qDebug( "Received IP packet." ); 219 qDebug( "Received IP packet." );
270 } 220 }
271} 221}
272 222
273 223
274QObject* Wellenreiter::childIfToParse( OPacket* p, const QString& protocol ) 224QObject* Wellenreiter::childIfToParse( OPacket* p, const QString& protocol )
275{ 225{
276 if ( configwindow->parsePackets->isProtocolChecked( protocol ) ) 226 if ( configwindow->parsePackets->isProtocolChecked( protocol ) )
277 if ( configwindow->parsePackets->protocolAction( protocol ) == "Discard!" ) 227 if ( configwindow->parsePackets->protocolAction( protocol ) == "Discard!" )
278 return 0; 228 return 0;
279 229
280 return p->child( protocol ); 230 return p->child( protocol );
281} 231}
282 232
283 233
284bool Wellenreiter::checkDumpPacket( OPacket* p ) 234bool Wellenreiter::checkDumpPacket( OPacket* p )
285{ 235{
286 // go through all child packets and see if one is inside the child hierarchy for p 236 // go through all child packets and see if one is inside the child hierarchy for p
287 // if so, do what the user requested (protocolAction), e.g. pass or discard 237 // if so, do what the user requested (protocolAction), e.g. pass or discard
288 if ( !configwindow->writeCaptureFile->isOn() ) 238 if ( !configwindow->writeCaptureFile->isOn() )
289 return false; 239 return false;
290 240
291 QObjectList* l = p->queryList(); 241 QObjectList* l = p->queryList();
292 QObjectListIt it( *l ); 242 QObjectListIt it( *l );
293 QObject* o; 243 QObject* o;
294 244
295 while ( (o = it.current()) != 0 ) 245 while ( (o = it.current()) != 0 )
296 { 246 {
297 QString name = it.current()->name(); 247 QString name = it.current()->name();
298 if ( configwindow->capturePackets->isProtocolChecked( name ) ) 248 if ( configwindow->capturePackets->isProtocolChecked( name ) )
299 { 249 {
300 QString action = configwindow->capturePackets->protocolAction( name ); 250 QString action = configwindow->capturePackets->protocolAction( name );
301 qDebug( "capturePackets-action for '%s' seems to be '%s'", (const char*) name, (const char*) action ); 251 qDebug( "capturePackets-action for '%s' seems to be '%s'", (const char*) name, (const char*) action );
302 if ( action == "Discard" ) 252 if ( action == "Discard" )
303 { 253 {
304 logwindow->log( QString().sprintf( "(i) dump-discarding of '%s' packet requested.", (const char*) name ) ); 254 logwindow->log( QString().sprintf( "(i) dump-discarding of '%s' packet requested.", (const char*) name ) );
305 return false; 255 return false;
306 } 256 }
307 } 257 }
308 else 258 else
309 { 259 {
310 qDebug( "protocol '%s' not checked in capturePackets.", (const char*) name ); 260 qDebug( "protocol '%s' not checked in capturePackets.", (const char*) name );
311 } 261 }
312 ++it; 262 ++it;
313 } 263 }
314 return true; 264 return true;
315} 265}
316 266
317 267
318void Wellenreiter::receivePacket( OPacket* p ) 268void Wellenreiter::receivePacket( OPacket* p )
319{ 269{
320 hexWindow()->log( p->dump( 8 ) ); 270 hexWindow()->log( p->dump( 8 ) );
321 271
322 if ( checkDumpPacket( p ) ) 272 if ( checkDumpPacket( p ) )
323 { 273 {
324 pcap->dump( p ); 274 pcap->dump( p );
325 } 275 }
326 276
327 // check if we received a beacon frame 277 // check if we received a beacon frame
328 OWaveLanManagementPacket* beacon = static_cast<OWaveLanManagementPacket*>( childIfToParse( p, "802.11 Management" ) ); 278 OWaveLanManagementPacket* beacon = static_cast<OWaveLanManagementPacket*>( childIfToParse( p, "802.11 Management" ) );
329 if ( beacon && beacon->managementType() == "Beacon" ) 279 if ( beacon && beacon->managementType() == "Beacon" )
330 { 280 {
331 handleBeacon( p, beacon ); 281 handleBeacon( p, beacon );
332 return; 282 return;
333 } 283 }
334 284
335 //TODO: WEP check here 285 //TODO: WEP check here
336 286
337 // check for a data frame 287 // check for a data frame
338 OWaveLanDataPacket* data = static_cast<OWaveLanDataPacket*>( childIfToParse( p, "802.11 Data" ) ); 288 OWaveLanDataPacket* data = static_cast<OWaveLanDataPacket*>( childIfToParse( p, "802.11 Data" ) );
339 if ( data ) 289 if ( data )
340 { 290 {
341 handleData( p, data ); 291 handleData( p, data );
342 } 292 }
343 293
344 handleNotification( p ); 294 handleNotification( p );
345 295
346} 296}
347 297
348 298
349void Wellenreiter::stopClicked() 299void Wellenreiter::stopClicked()
350{ 300{
351 if ( iface ) 301 if ( iface )
352 { 302 {
353 disconnect( SIGNAL( receivedPacket(OPacket*) ), this, SLOT( receivePacket(OPacket*) ) ); 303 disconnect( SIGNAL( receivedPacket(OPacket*) ), this, SLOT( receivePacket(OPacket*) ) );
354 disconnect( SIGNAL( hopped(int) ), this, SLOT( channelHopped(int) ) ); 304 disconnect( SIGNAL( hopped(int) ), this, SLOT( channelHopped(int) ) );
355 iface->setChannelHopping(); // stop hopping channels 305 iface->setChannelHopping(); // stop hopping channels
356 } 306 }
357 else 307 else
358 killTimers(); 308 killTimers();
359 309
360 pcap->close(); 310 pcap->close();
361 sniffing = false; 311 sniffing = false;
362 312
363 if ( iface ) 313 if ( iface )
364 { 314 {
365 // switch off monitor mode 315 // switch off monitor mode
366 iface->setMonitorMode( false ); 316 iface->setMonitorMode( false );
367 // switch off promisc flag 317 // switch off promisc flag
368 iface->setPromiscuousMode( false ); 318 iface->setPromiscuousMode( false );
369 319
370 system( "cardctl reset; sleep 1" ); //FIXME: Use OProcess 320 system( "cardctl reset; sleep 1" ); //FIXME: Use OProcess
371 } 321 }
372 322
373 logwindow->log( "(i) Stopped Scanning." ); 323 logwindow->log( "(i) Stopped Scanning." );
374 assert( parent() ); 324 assert( parent() );
375 ( (QMainWindow*) parent() )->setCaption( "Wellenreiter II" ); 325 ( (QMainWindow*) parent() )->setCaption( "Wellenreiter II" );
376 326
377 // message the user 327 // message the user
378 QMessageBox::information( this, "Wellenreiter II", 328 QMessageBox::information( this, "Wellenreiter II",
379 tr( "Your wireless card\nshould now be usable again." ) ); 329 tr( "Your wireless card\nshould now be usable again." ) );
380 330
381 sniffing = false; 331 sniffing = false;
382 emit( stoppedSniffing() ); 332 emit( stoppedSniffing() );
383 333
384 // print out statistics 334 // print out statistics
385 for( QMap<QString,int>::ConstIterator it = pcap->statistics().begin(); it != pcap->statistics().end(); ++it ) 335 for( QMap<QString,int>::ConstIterator it = pcap->statistics().begin(); it != pcap->statistics().end(); ++it )
386 statwindow->updateCounter( it.key(), it.data() ); 336 statwindow->updateCounter( it.key(), it.data() );
387} 337}
388 338
389 339
390void Wellenreiter::startClicked() 340void Wellenreiter::startClicked()
391{ 341{
392 // get configuration from config window 342 // get configuration from config window
393 343
394 const QString& interface = configwindow->interfaceName->currentText(); 344 const QString& interface = configwindow->interfaceName->currentText();
395 const int cardtype = configwindow->driverType(); 345 const int cardtype = configwindow->driverType();
396 const int interval = configwindow->hoppingInterval(); 346 const int interval = configwindow->hoppingInterval();
397 347
398 if ( ( interface == "" ) || ( cardtype == 0 ) ) 348 if ( ( interface == "" ) || ( cardtype == 0 ) )
399 { 349 {
400 QMessageBox::information( this, "Wellenreiter II", 350 QMessageBox::information( this, "Wellenreiter II",
401 tr( "Your device is not\nproperly configured. Please reconfigure!" ) ); 351 tr( "Your device is not\nproperly configured. Please reconfigure!" ) );
402 return; 352 return;
403 } 353 }
404 354
405 // configure device 355 // configure device
406 ONetwork* net = ONetwork::instance(); 356 ONetwork* net = ONetwork::instance();
407 iface = static_cast<OWirelessNetworkInterface*>(net->interface( interface )); 357 iface = static_cast<OWirelessNetworkInterface*>(net->interface( interface ));
408 358
409 // bring device UP 359 // bring device UP
410 iface->setUp( true ); 360 iface->setUp( true );
411 if ( !iface->isUp() ) 361 if ( !iface->isUp() )
412 { 362 {
413 QMessageBox::warning( this, "Wellenreiter II", 363 QMessageBox::warning( this, "Wellenreiter II",
414 tr( "Can't bring interface '%1' up:\n" ).arg( iface->name() ) + strerror( errno ) ); 364 tr( "Can't bring interface '%1' up:\n" ).arg( iface->name() ) + strerror( errno ) );
415 return; 365 return;
416 } 366 }
417 367
418 // set monitor mode 368 // set monitor mode
419 bool usePrism = configwindow->usePrismHeader(); 369 bool usePrism = configwindow->usePrismHeader();
420 370
421 switch ( cardtype ) 371 switch ( cardtype )
422 { 372 {
423 case DEVTYPE_CISCO: iface->setMonitoring( new OCiscoMonitoringInterface( iface, usePrism ) ); break; 373 case DEVTYPE_CISCO: iface->setMonitoring( new OCiscoMonitoringInterface( iface, usePrism ) ); break;
424 case DEVTYPE_WLAN_NG: iface->setMonitoring( new OWlanNGMonitoringInterface( iface, usePrism ) ); break; 374 case DEVTYPE_WLAN_NG: iface->setMonitoring( new OWlanNGMonitoringInterface( iface, usePrism ) ); break;
425 case DEVTYPE_HOSTAP: iface->setMonitoring( new OHostAPMonitoringInterface( iface, usePrism ) ); break; 375 case DEVTYPE_HOSTAP: iface->setMonitoring( new OHostAPMonitoringInterface( iface, usePrism ) ); break;
426 case DEVTYPE_ORINOCO: iface->setMonitoring( new OOrinocoMonitoringInterface( iface, usePrism ) ); break; 376 case DEVTYPE_ORINOCO: iface->setMonitoring( new OOrinocoMonitoringInterface( iface, usePrism ) ); break;
427 case DEVTYPE_MANUAL: QMessageBox::information( this, "Wellenreiter II", tr( "Bring your device into\nmonitor mode now." ) ); break; 377 case DEVTYPE_MANUAL: QMessageBox::information( this, "Wellenreiter II", tr( "Bring your device into\nmonitor mode now." ) ); break;
428 case DEVTYPE_FILE: qDebug( "Wellenreiter: Capturing from file '%s'", (const char*) interface ); break; 378 case DEVTYPE_FILE: qDebug( "Wellenreiter: Capturing from file '%s'", (const char*) interface ); break;
429 default: assert( 0 ); // shouldn't reach this 379 default: assert( 0 ); // shouldn't reach this
430 } 380 }
431 381
432 // switch device into monitor mode 382 // switch device into monitor mode
433 if ( cardtype < DEVTYPE_FILE ) 383 if ( cardtype < DEVTYPE_FILE )
434 { 384 {
435 if ( cardtype != DEVTYPE_MANUAL ) 385 if ( cardtype != DEVTYPE_MANUAL )
436 iface->setMonitorMode( true ); 386 iface->setMonitorMode( true );
437 if ( !iface->monitorMode() ) 387 if ( !iface->monitorMode() )
438 { 388 {
439 QMessageBox::warning( this, "Wellenreiter II", 389 QMessageBox::warning( this, "Wellenreiter II",
440 tr( "Can't set interface '%1' into monitor mode:\n" ).arg( iface->name() ) + strerror( errno ) ); 390 tr( "Can't set interface '%1'\ninto monitor mode:\n" ).arg( iface->name() ) + strerror( errno ) );
441 return; 391 return;
442 } 392 }
443 } 393 }
444 394
445 // open pcap and start sniffing 395 // open pcap and start sniffing
446 if ( cardtype != DEVTYPE_FILE ) 396 if ( cardtype != DEVTYPE_FILE )
447 { 397 {
448 pcap->open( interface ); 398 pcap->open( interface );
449 399
450 if ( configwindow->writeCaptureFile->isOn() ) 400 if ( configwindow->writeCaptureFile->isOn() )
451 { 401 {
452 QString dumpname( configwindow->captureFileName->text() ); 402 QString dumpname( configwindow->captureFileName->text() );
453 dumpname.append( '-' ); 403 dumpname.append( '-' );
454 dumpname.append( QTime::currentTime().toString().replace( QRegExp( ":" ), "-" ) ); 404 dumpname.append( QTime::currentTime().toString().replace( QRegExp( ":" ), "-" ) );
455 dumpname.append( ".wellenreiter" ); 405 dumpname.append( ".wellenreiter" );
456 pcap->openDumpFile( dumpname ); 406 pcap->openDumpFile( dumpname );
457 } 407 }
458 else 408 else
459 { 409 {
460 pcap->open( interface ); 410 pcap->open( interface );
461 } 411 }
462 } 412 }
463 else 413 else
464 { 414 {
465 pcap->open( QFile( interface ) ); 415 pcap->open( QFile( interface ) );
466 } 416 }
467 417
468 if ( !pcap->isOpen() ) 418 if ( !pcap->isOpen() )
469 { 419 {
470 QMessageBox::warning( this, "Wellenreiter II", 420 QMessageBox::warning( this, "Wellenreiter II",
471 tr( "Can't open packet capturer for '%1':\n" ).arg( iface->name() ) + QString(strerror( errno ) )); 421 tr( "Can't open packet capturer for '%1':\n" ).arg( iface->name() ) + QString(strerror( errno ) ));
472 return; 422 return;
473 } 423 }
474 424
475 // set capturer to non-blocking mode 425 // set capturer to non-blocking mode
476 pcap->setBlocking( false ); 426 pcap->setBlocking( false );
477 427
478 // start channel hopper 428 // start channel hopper
479 if ( cardtype != DEVTYPE_FILE ) 429 if ( cardtype != DEVTYPE_FILE )
480 iface->setChannelHopping( 1000 ); //use interval from config window 430 iface->setChannelHopping( 1000 ); //use interval from config window
481 431
482 if ( cardtype != DEVTYPE_FILE ) 432 if ( cardtype != DEVTYPE_FILE )
483 { 433 {
484 // connect socket notifier and start channel hopper 434 // connect socket notifier and start channel hopper
485 connect( pcap, SIGNAL( receivedPacket(OPacket*) ), this, SLOT( receivePacket(OPacket*) ) ); 435 connect( pcap, SIGNAL( receivedPacket(OPacket*) ), this, SLOT( receivePacket(OPacket*) ) );
486 connect( iface->channelHopper(), SIGNAL( hopped(int) ), this, SLOT( channelHopped(int) ) ); 436 connect( iface->channelHopper(), SIGNAL( hopped(int) ), this, SLOT( channelHopped(int) ) );
487 } 437 }
488 else 438 else
489 { 439 {
490 // start timer for reading packets 440 // start timer for reading packets
491 startTimer( 100 ); 441 startTimer( 100 );
492 } 442 }
493 443
494 logwindow->log( "(i) Started Scanning." ); 444 logwindow->log( "(i) Started Scanning." );
495 sniffing = true; 445 sniffing = true;
496 emit( startedSniffing() ); 446 emit( startedSniffing() );
497 if ( cardtype != DEVTYPE_FILE ) channelHopped( 6 ); // set title 447 if ( cardtype != DEVTYPE_FILE ) channelHopped( 6 ); // set title
498 else 448 else
499 { 449 {
500 assert( parent() ); 450 assert( parent() );
501 ( (QMainWindow*) parent() )->setCaption( tr( "Wellenreiter II - replaying capture file..." ) ); 451 ( (QMainWindow*) parent() )->setCaption( tr( "Wellenreiter II - replaying capture file..." ) );
502 } 452 }
503} 453}
504 454
505 455
506void Wellenreiter::timerEvent( QTimerEvent* ) 456void Wellenreiter::timerEvent( QTimerEvent* )
507{ 457{
508 qDebug( "Wellenreiter::timerEvent()" ); 458 qDebug( "Wellenreiter::timerEvent()" );
509 OPacket* p = pcap->next(); 459 OPacket* p = pcap->next();
510 if ( !p ) // no more packets available 460 if ( !p ) // no more packets available
511 { 461 {
512 stopClicked(); 462 stopClicked();
513 } 463 }
514 else 464 else
515 { 465 {
516 receivePacket( p ); 466 receivePacket( p );
517 delete p; 467 delete p;
518 } 468 }
519} 469}
520 470
521 471
522void Wellenreiter::doAction( const QString& action, const QString& protocol, OPacket* p ) 472void Wellenreiter::doAction( const QString& action, const QString& protocol, OPacket* p )
523{ 473{
524 if ( action == "TouchSound" ) 474 if ( action == "TouchSound" )
525 ODevice::inst()->touchSound(); 475 ODevice::inst()->touchSound();
526 else if ( action == "AlarmSound" ) 476 else if ( action == "AlarmSound" )
527 ODevice::inst()->alarmSound(); 477 ODevice::inst()->alarmSound();
528 else if ( action == "KeySound" ) 478 else if ( action == "KeySound" )
529 ODevice::inst()->keySound(); 479 ODevice::inst()->keySound();
530 else if ( action == "LedOn" ) 480 else if ( action == "LedOn" )
531 ODevice::inst()->setLedState( Led_Mail, Led_On ); 481 ODevice::inst()->setLedState( Led_Mail, Led_On );
532 else if ( action == "LedOff" ) 482 else if ( action == "LedOff" )
533 ODevice::inst()->setLedState( Led_Mail, Led_Off ); 483 ODevice::inst()->setLedState( Led_Mail, Led_Off );
534 else if ( action == "LogMessage" ) 484 else if ( action == "LogMessage" )
535 logwindow->log( QString().sprintf( "Got packet with protocol '%s'", (const char*) protocol ) ); 485 logwindow->log( QString().sprintf( "Got packet with protocol '%s'", (const char*) protocol ) );
536 else if ( action == "MessageBox" ) 486 else if ( action == "MessageBox" )
537 QMessageBox::information ( this, "Notification!", 487 QMessageBox::information ( this, "Notification!",
538 QString().sprintf( "Got packet with protocol '%s'", (const char*) protocol ) ); 488 QString().sprintf( "Got packet with protocol '%s'", (const char*) protocol ) );
539} 489}
540 490
diff --git a/noncore/net/wellenreiter/gui/wellenreiter.h b/noncore/net/wellenreiter/gui/wellenreiter.h
index d776492..f23ca4d 100644
--- a/noncore/net/wellenreiter/gui/wellenreiter.h
+++ b/noncore/net/wellenreiter/gui/wellenreiter.h
@@ -1,91 +1,89 @@
1/********************************************************************** 1/**********************************************************************
2** Copyright (C) 2002 Michael 'Mickey' Lauer. All rights reserved. 2** Copyright (C) 2002 Michael 'Mickey' Lauer. All rights reserved.
3** 3**
4** This file is part of Opie Environment. 4** This file is part of Opie Environment.
5** 5**
6** This file may be distributed and/or modified under the terms of the 6** This file may be distributed and/or modified under the terms of the
7** GNU General Public License version 2 as published by the Free Software 7** GNU General Public License version 2 as published by the Free Software
8** Foundation and appearing in the file LICENSE.GPL included in the 8** Foundation and appearing in the file LICENSE.GPL included in the
9** packaging of this file. 9** packaging of this file.
10** 10**
11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
13** 13**
14**********************************************************************/ 14**********************************************************************/
15 15
16#ifndef WELLENREITER_H 16#ifndef WELLENREITER_H
17#define WELLENREITER_H 17#define WELLENREITER_H
18 18
19#include "wellenreiterbase.h" 19#include "wellenreiterbase.h"
20 20
21#ifdef QWS 21#ifdef QWS
22#include <opie/odevice.h> 22#include <opie/odevice.h>
23using namespace Opie; 23using namespace Opie;
24#endif 24#endif
25 25
26class QTimerEvent; 26class QTimerEvent;
27class QPixmap; 27class QPixmap;
28class OPacket; 28class OPacket;
29class OWaveLanManagementPacket; 29class OWaveLanManagementPacket;
30class OWaveLanDataPacket; 30class OWaveLanDataPacket;
31class OPacketCapturer; 31class OPacketCapturer;
32class OWirelessNetworkInterface; 32class OWirelessNetworkInterface;
33class ManufacturerDB;
34class WellenreiterConfigWindow; 33class WellenreiterConfigWindow;
35class MLogWindow; 34class MLogWindow;
36class MHexWindow; 35class MHexWindow;
37 36
38class Wellenreiter : public WellenreiterBase { 37class Wellenreiter : public WellenreiterBase {
39 Q_OBJECT 38 Q_OBJECT
40 39
41 public: 40 public:
42 Wellenreiter( QWidget* parent = 0 ); 41 Wellenreiter( QWidget* parent = 0 );
43 ~Wellenreiter(); 42 ~Wellenreiter();
44 43
45 void setConfigWindow( WellenreiterConfigWindow* cw ); 44 void setConfigWindow( WellenreiterConfigWindow* cw );
46 MScanListView* netView() const { return netview; }; 45 MScanListView* netView() const { return netview; };
47 MLogWindow* logWindow() const { return logwindow; }; 46 MLogWindow* logWindow() const { return logwindow; };
48 MHexWindow* hexWindow() const { return hexwindow; }; 47 MHexWindow* hexWindow() const { return hexwindow; };
49 bool isDaemonRunning() const { return sniffing; }; 48 bool isDaemonRunning() const { return sniffing; };
50 49
51 public: 50 public:
52 bool sniffing; 51 bool sniffing;
53 52
54 protected: 53 protected:
55 virtual void timerEvent( QTimerEvent* ); 54 virtual void timerEvent( QTimerEvent* );
56 55
57 public slots: 56 public slots:
58 void channelHopped(int); 57 void channelHopped(int);
59 void receivePacket(OPacket*); 58 void receivePacket(OPacket*);
60 void startClicked(); 59 void startClicked();
61 void stopClicked(); 60 void stopClicked();
62 61
63 signals: 62 signals:
64 void startedSniffing(); 63 void startedSniffing();
65 void stoppedSniffing(); 64 void stoppedSniffing();
66 65
67 private: 66 private:
68 void handleBeacon( OPacket* p, OWaveLanManagementPacket* beacon ); 67 void handleBeacon( OPacket* p, OWaveLanManagementPacket* beacon );
69 void handleData( OPacket* p, OWaveLanDataPacket* data ); 68 void handleData( OPacket* p, OWaveLanDataPacket* data );
70 void handleNotification( OPacket* p ); 69 void handleNotification( OPacket* p );
71 void doAction( const QString& action, const QString& protocol, OPacket* p ); 70 void doAction( const QString& action, const QString& protocol, OPacket* p );
72 QObject* childIfToParse( OPacket* p, const QString& protocol ); 71 QObject* childIfToParse( OPacket* p, const QString& protocol );
73 bool checkDumpPacket( OPacket* p ); 72 bool checkDumpPacket( OPacket* p );
74 73
75 private: 74 private:
76 #ifdef QWS 75 #ifdef QWS
77 OSystem _system; // Opie Operating System identifier 76 OSystem _system; // Opie Operating System identifier
78 #endif 77 #endif
79 78
80 OWirelessNetworkInterface* iface; 79 OWirelessNetworkInterface* iface;
81 OPacketCapturer* pcap; 80 OPacketCapturer* pcap;
82 ManufacturerDB* manufacturerdb;
83 WellenreiterConfigWindow* configwindow; 81 WellenreiterConfigWindow* configwindow;
84 82
85 //void readConfig(); 83 //void readConfig();
86 //void writeConfig(); 84 //void writeConfig();
87}; 85};
88 86
89 87
90 88
91#endif 89#endif
diff --git a/noncore/net/wellenreiter/gui/wellenreitertemplate.ui b/noncore/net/wellenreiter/gui/wellenreitertemplate.ui
deleted file mode 100644
index 63c14d1..0000000
--- a/noncore/net/wellenreiter/gui/wellenreitertemplate.ui
+++ b/dev/null
@@ -1,605 +0,0 @@
1<!DOCTYPE UI><UI>
2<class>WellenreiterTemplate</class>
3<widget>
4 <class>QWidget</class>
5 <property stdset="1">
6 <name>name</name>
7 <cstring>WellenreiterTemplate</cstring>
8 </property>
9 <property stdset="1">
10 <name>geometry</name>
11 <rect>
12 <x>0</x>
13 <y>0</y>
14 <width>188</width>
15 <height>294</height>
16 </rect>
17 </property>
18 <property stdset="1">
19 <name>caption</name>
20 <string>Wellenreiter</string>
21 </property>
22 <property>
23 <name>layoutMargin</name>
24 </property>
25 <property>
26 <name>layoutSpacing</name>
27 </property>
28 <vbox>
29 <property stdset="1">
30 <name>margin</name>
31 <number>0</number>
32 </property>
33 <property stdset="1">
34 <name>spacing</name>
35 <number>2</number>
36 </property>
37 <widget>
38 <class>QTabWidget</class>
39 <property stdset="1">
40 <name>name</name>
41 <cstring>TabWidget</cstring>
42 </property>
43 <property>
44 <name>layoutMargin</name>
45 </property>
46 <property>
47 <name>layoutSpacing</name>
48 </property>
49 <widget>
50 <class>QWidget</class>
51 <property stdset="1">
52 <name>name</name>
53 <cstring>ap</cstring>
54 </property>
55 <attribute>
56 <name>title</name>
57 <string>Networks</string>
58 </attribute>
59 <vbox>
60 <property stdset="1">
61 <name>margin</name>
62 <number>2</number>
63 </property>
64 <property stdset="1">
65 <name>spacing</name>
66 <number>2</number>
67 </property>
68 <widget>
69 <class>QListView</class>
70 <column>
71 <property>
72 <name>text</name>
73 <string>SSID</string>
74 </property>
75 <property>
76 <name>clickable</name>
77 <bool>true</bool>
78 </property>
79 <property>
80 <name>resizeable</name>
81 <bool>true</bool>
82 </property>
83 </column>
84 <column>
85 <property>
86 <name>text</name>
87 <string>Sig</string>
88 </property>
89 <property>
90 <name>clickable</name>
91 <bool>true</bool>
92 </property>
93 <property>
94 <name>resizeable</name>
95 <bool>true</bool>
96 </property>
97 </column>
98 <column>
99 <property>
100 <name>text</name>
101 <string>AP</string>
102 </property>
103 <property>
104 <name>clickable</name>
105 <bool>true</bool>
106 </property>
107 <property>
108 <name>resizeable</name>
109 <bool>true</bool>
110 </property>
111 </column>
112 <column>
113 <property>
114 <name>text</name>
115 <string>Chn</string>
116 </property>
117 <property>
118 <name>clickable</name>
119 <bool>true</bool>
120 </property>
121 <property>
122 <name>resizeable</name>
123 <bool>true</bool>
124 </property>
125 </column>
126 <column>
127 <property>
128 <name>text</name>
129 <string>W</string>
130 </property>
131 <property>
132 <name>clickable</name>
133 <bool>true</bool>
134 </property>
135 <property>
136 <name>resizeable</name>
137 <bool>true</bool>
138 </property>
139 </column>
140 <column>
141 <property>
142 <name>text</name>
143 <string>T</string>
144 </property>
145 <property>
146 <name>clickable</name>
147 <bool>true</bool>
148 </property>
149 <property>
150 <name>resizeable</name>
151 <bool>true</bool>
152 </property>
153 </column>
154 <property stdset="1">
155 <name>name</name>
156 <cstring>netview</cstring>
157 </property>
158 <property stdset="1">
159 <name>frameShape</name>
160 <enum>StyledPanel</enum>
161 </property>
162 <property stdset="1">
163 <name>frameShadow</name>
164 <enum>Sunken</enum>
165 </property>
166 <property stdset="1">
167 <name>rootIsDecorated</name>
168 <bool>true</bool>
169 </property>
170 </widget>
171 </vbox>
172 </widget>
173 <widget>
174 <class>QWidget</class>
175 <property stdset="1">
176 <name>name</name>
177 <cstring>Log</cstring>
178 </property>
179 <attribute>
180 <name>title</name>
181 <string>Log</string>
182 </attribute>
183 <vbox>
184 <property stdset="1">
185 <name>margin</name>
186 <number>2</number>
187 </property>
188 <property stdset="1">
189 <name>spacing</name>
190 <number>2</number>
191 </property>
192 <widget>
193 <class>QMultiLineEdit</class>
194 <property stdset="1">
195 <name>name</name>
196 <cstring>Log</cstring>
197 </property>
198 <property stdset="1">
199 <name>text</name>
200 <string>11/18 18:15 - log started
20111/19 20:13 - new net : "ELAN"
20211/19 20:15 - new station : "pegasus"</string>
203 </property>
204 </widget>
205 </vbox>
206 </widget>
207 <widget>
208 <class>QWidget</class>
209 <property stdset="1">
210 <name>name</name>
211 <cstring>tab</cstring>
212 </property>
213 <attribute>
214 <name>title</name>
215 <string>Hex</string>
216 </attribute>
217 <grid>
218 <property stdset="1">
219 <name>margin</name>
220 <number>2</number>
221 </property>
222 <property stdset="1">
223 <name>spacing</name>
224 <number>2</number>
225 </property>
226 <widget row="0" column="0" >
227 <class>QMultiLineEdit</class>
228 <property stdset="1">
229 <name>name</name>
230 <cstring>Log_2</cstring>
231 </property>
232 <property stdset="1">
233 <name>palette</name>
234 <palette>
235 <active>
236 <color>
237 <red>255</red>
238 <green>255</green>
239 <blue>255</blue>
240 </color>
241 <color>
242 <red>192</red>
243 <green>192</green>
244 <blue>192</blue>
245 </color>
246 <color>
247 <red>255</red>
248 <green>255</green>
249 <blue>255</blue>
250 </color>
251 <color>
252 <red>223</red>
253 <green>223</green>
254 <blue>223</blue>
255 </color>
256 <color>
257 <red>96</red>
258 <green>96</green>
259 <blue>96</blue>
260 </color>
261 <color>
262 <red>128</red>
263 <green>128</green>
264 <blue>128</blue>
265 </color>
266 <color>
267 <red>255</red>
268 <green>255</green>
269 <blue>255</blue>
270 </color>
271 <color>
272 <red>255</red>
273 <green>255</green>
274 <blue>255</blue>
275 </color>
276 <color>
277 <red>255</red>
278 <green>255</green>
279 <blue>255</blue>
280 </color>
281 <color>
282 <red>0</red>
283 <green>0</green>
284 <blue>0</blue>
285 </color>
286 <color>
287 <red>0</red>
288 <green>0</green>
289 <blue>0</blue>
290 </color>
291 <color>
292 <red>0</red>
293 <green>0</green>
294 <blue>0</blue>
295 </color>
296 <color>
297 <red>0</red>
298 <green>0</green>
299 <blue>128</blue>
300 </color>
301 <color>
302 <red>255</red>
303 <green>255</green>
304 <blue>255</blue>
305 </color>
306 </active>
307 <disabled>
308 <color>
309 <red>128</red>
310 <green>128</green>
311 <blue>128</blue>
312 </color>
313 <color>
314 <red>192</red>
315 <green>192</green>
316 <blue>192</blue>
317 </color>
318 <color>
319 <red>255</red>
320 <green>255</green>
321 <blue>255</blue>
322 </color>
323 <color>
324 <red>220</red>
325 <green>220</green>
326 <blue>220</blue>
327 </color>
328 <color>
329 <red>96</red>
330 <green>96</green>
331 <blue>96</blue>
332 </color>
333 <color>
334 <red>128</red>
335 <green>128</green>
336 <blue>128</blue>
337 </color>
338 <color>
339 <red>128</red>
340 <green>128</green>
341 <blue>128</blue>
342 </color>
343 <color>
344 <red>255</red>
345 <green>255</green>
346 <blue>255</blue>
347 </color>
348 <color>
349 <red>128</red>
350 <green>128</green>
351 <blue>128</blue>
352 </color>
353 <color>
354 <red>0</red>
355 <green>0</green>
356 <blue>0</blue>
357 </color>
358 <color>
359 <red>0</red>
360 <green>0</green>
361 <blue>0</blue>
362 </color>
363 <color>
364 <red>0</red>
365 <green>0</green>
366 <blue>0</blue>
367 </color>
368 <color>
369 <red>0</red>
370 <green>0</green>
371 <blue>128</blue>
372 </color>
373 <color>
374 <red>255</red>
375 <green>255</green>
376 <blue>255</blue>
377 </color>
378 </disabled>
379 <inactive>
380 <color>
381 <red>255</red>
382 <green>255</green>
383 <blue>255</blue>
384 </color>
385 <color>
386 <red>192</red>
387 <green>192</green>
388 <blue>192</blue>
389 </color>
390 <color>
391 <red>255</red>
392 <green>255</green>
393 <blue>255</blue>
394 </color>
395 <color>
396 <red>220</red>
397 <green>220</green>
398 <blue>220</blue>
399 </color>
400 <color>
401 <red>96</red>
402 <green>96</green>
403 <blue>96</blue>
404 </color>
405 <color>
406 <red>128</red>
407 <green>128</green>
408 <blue>128</blue>
409 </color>
410 <color>
411 <red>255</red>
412 <green>255</green>
413 <blue>255</blue>
414 </color>
415 <color>
416 <red>255</red>
417 <green>255</green>
418 <blue>255</blue>
419 </color>
420 <color>
421 <red>255</red>
422 <green>255</green>
423 <blue>255</blue>
424 </color>
425 <color>
426 <red>0</red>
427 <green>0</green>
428 <blue>0</blue>
429 </color>
430 <color>
431 <red>0</red>
432 <green>0</green>
433 <blue>0</blue>
434 </color>
435 <color>
436 <red>0</red>
437 <green>0</green>
438 <blue>0</blue>
439 </color>
440 <color>
441 <red>0</red>
442 <green>0</green>
443 <blue>128</blue>
444 </color>
445 <color>
446 <red>255</red>
447 <green>255</green>
448 <blue>255</blue>
449 </color>
450 </inactive>
451 </palette>
452 </property>
453 <property stdset="1">
454 <name>font</name>
455 <font>
456 <family>adobe-courier</family>
457 <pointsize>8</pointsize>
458 </font>
459 </property>
460 <property stdset="1">
461 <name>text</name>
462 <string>00 0a 20 00 a8 00 e2 00 ...ESD..
46300 0a 20 00 a8 00 e2 00 .*&amp;23...
46400 0a 20 00 a8 00 e2 00 ........
46500 0a 20 00 a8 00 e2 00 ........
46600 0a 20 00 a8 00 e2 00 ........
46700 0a 20 00 a8 00 e2 00 ...BRA22</string>
468 </property>
469 </widget>
470 </grid>
471 </widget>
472 <widget>
473 <class>QWidget</class>
474 <property stdset="1">
475 <name>name</name>
476 <cstring>about</cstring>
477 </property>
478 <attribute>
479 <name>title</name>
480 <string>About</string>
481 </attribute>
482 <grid>
483 <property stdset="1">
484 <name>margin</name>
485 <number>11</number>
486 </property>
487 <property stdset="1">
488 <name>spacing</name>
489 <number>6</number>
490 </property>
491 <widget row="0" column="0" >
492 <class>QLabel</class>
493 <property stdset="1">
494 <name>name</name>
495 <cstring>PixmapLabel1_3_2</cstring>
496 </property>
497 <property stdset="1">
498 <name>sizePolicy</name>
499 <sizepolicy>
500 <hsizetype>0</hsizetype>
501 <vsizetype>0</vsizetype>
502 </sizepolicy>
503 </property>
504 <property stdset="1">
505 <name>frameShape</name>
506 <enum>Panel</enum>
507 </property>
508 <property stdset="1">
509 <name>frameShadow</name>
510 <enum>Sunken</enum>
511 </property>
512 <property stdset="1">
513 <name>lineWidth</name>
514 <number>2</number>
515 </property>
516 <property stdset="1">
517 <name>margin</name>
518 <number>0</number>
519 </property>
520 <property stdset="1">
521 <name>midLineWidth</name>
522 <number>0</number>
523 </property>
524 <property stdset="1">
525 <name>pixmap</name>
526 <pixmap>image0</pixmap>
527 </property>
528 <property stdset="1">
529 <name>scaledContents</name>
530 <bool>true</bool>
531 </property>
532 <property stdset="1">
533 <name>alignment</name>
534 <set>AlignCenter</set>
535 </property>
536 <property>
537 <name>hAlign</name>
538 </property>
539 </widget>
540 <widget row="1" column="0" >
541 <class>QLabel</class>
542 <property stdset="1">
543 <name>name</name>
544 <cstring>TextLabel1_4_2</cstring>
545 </property>
546 <property stdset="1">
547 <name>font</name>
548 <font>
549 <family>adobe-helvetica</family>
550 <pointsize>10</pointsize>
551 </font>
552 </property>
553 <property stdset="1">
554 <name>text</name>
555 <string>&lt;p align=center&gt;
556&lt;hr&gt;
557Max Moser&lt;br&gt;
558Martin J. Muench&lt;br&gt;
559Michael Lauer&lt;br&gt;&lt;hr&gt;
560&lt;b&gt;www.remote-exploit.org&lt;/b&gt;
561&lt;/p&gt;</string>
562 </property>
563 <property stdset="1">
564 <name>alignment</name>
565 <set>AlignCenter</set>
566 </property>
567 <property>
568 <name>hAlign</name>
569 </property>
570 </widget>
571 </grid>
572 </widget>
573 </widget>
574 <widget>
575 <class>QPushButton</class>
576 <property stdset="1">
577 <name>name</name>
578 <cstring>button</cstring>
579 </property>
580 <property stdset="1">
581 <name>sizePolicy</name>
582 <sizepolicy>
583 <hsizetype>1</hsizetype>
584 <vsizetype>0</vsizetype>
585 </sizepolicy>
586 </property>
587 <property stdset="1">
588 <name>text</name>
589 <string>Start Scanning</string>
590 </property>
591 </widget>
592 </vbox>
593</widget>
594<images>
595 <image>
596 <name>image0</name>
597 <data format="XPM.GZ" length="46755">789ced9dd95323bbd2e0dfef5f71e2eaed8b097dd8d8c68e8979c080590d665f26e6414b95548b3198d54cccff3e2965a6306eba4ff7e985be117d2ab8cdcf52a9a454662a952a73fffbbffeba180dfffaaffffed7ddbdba2fcc5fc6abe95fff651fc6e3d9fffe3fffebfffeebdf8df6d25f8da5f65fbd66ebafe6bfffc7bffeedf6fe327f89a5f85fe483c4ddc843e2169617bb89b17c3f7297eff7e3c4b1dc57c474bf1b25c6fbb97e97b82636c8e5327303db6f056ea4fe56cfc4d49e2f89a9bebb460e57e0da11b7a8bdabc8a9ff4549ccfd9d2043fdd87e7542dca5f6abc4587e4f6c90cb6de4e612729d056ea6fe978698fa5f2ae47047ecdf26b1412e1c72b862b9206e21d70f917bdc7efd98189f7f8e0cf57bb1ff257117b928880db28ff3b1dc48bcc2bcdc88f77790979790c7f7c42de4ea2972ea4f6590a11c9fdf26ee527d9d3896570fc406d9477d6835b8bdb1435e362dec4f81dc5a42f603e21672759158458ef3d75249ff0f91b9bc98127791c70fc406b98cfd6d3793be4b642ef78ab91dedcdf791db4bc8b54a8cf56f88db585e5c4656c0d89f3be21eb2f3c496ca6f03779a69fe5bc86ddbc1e7af21771ac8f52e719bca1b91933c0a66b287f20e19eae3f37bc43de4fa82d822fb38bf2bcbcdd6ca72e45be22e72758edcb1c86e0779a5815c9f11b7896d649dfab79918ed4f2237cd8a8ef59790979790ab1e72c7a2fd9654bed2c3f2b2496ca9fe69e0ee72d2df7562f6877bc8cbad2e8eef9ab88b5c17c89d1ed6573d628b9caf2546fb94ccd83f7385bcd2c0faa64a1cebe737cce4dfcac4587ec64cfee33931da534edcc6faf68819eb973631daab6426fbbf481ccbf38cb847f66c13c7f2ba4b6c513e053dbfdb4079bb1b662cafc6c46daa8fe34ff33f36c8cba68bf7ef22833b8dacf0799ae55dfbc471bc6a849ce4bb9a18e55730a37cc580b84df36912637b8fcc547f2b31cab762267fbd9a38ca276b1393be889bc4b83e3c3063fb5a258ee57a9919dbcf5f12e37c0f99713e8a0366f48f65496c697d394e1cebeb0e33ce6f5627c6feaf33637bd96962f44f1ab9cbfab7ca4ced0d12a3ff5f6126ff3e4b1cdbb3a93efacb92fadb657fc9e56dd4077f49dc237d69115b627e9eedb5e2fcc4f5ab07cb01f2b820ee124f880d72364466fdc87613a37eac3253fc714a4cf39d9d27c6f9e4fb79beaf13c77273c94cf6cdf7937e0bc94cf79f25c6fe3498e9fe63e42ee9bb5a4b1cebcb4b66ac2fae12a37edc30e37c8a7662f40f4fcca46f67cc387ff93231d987de4e1cef37a7ccd8be7d65d43fc58cede7adc4511f7497199f677788c91eac67c6fbf53471bc3fbf67c6fb2b9718cb67ccb89ebab3c4b13ceb105bbcdfec24c672961fad9f35cf07eb23e95baf41eb6bc64cebab4b8cfa3e65a6fbe9f9bd36b28feb5fcff07a36467d31a0cf2696637dd35e421ea37ccc4a0fb93c2426fdca4e90595fec0b33ce67b69c18e5dd2066ffa899b1bedc4f1ceb8b0933e9d76162d4af2933ce57362226fb308f89b1bd3b666c4f6e24c6fe3d33a33e88f3c418ff79669acf7b62f28ff622313eef9819db535562d49f2d66b2870766d42741fdef91ff335d66aa3f66c6fa663931facb544ef1d63631c757e3c4517fec0a33aebfe53533ce7f4df3d3eb51f99499f483fb4bfeb56e33637911fd876aa5f5fc0979a5a7505f1bc416b99a21771bc8fe22716ccfec12d3fcea3e33ad2f1531ad672a63a678c626c6f5e708b947fecc6d26467fb3cd8cf3291f134779cb1e33f91b9918f71f87c4a4bfa2c34ceb679638d65757ccd89ef089b1bd1633ceb716c4a49f6a3f31f66f8519f5256f33e3fceb9298fc937960c6f6f38a19f547dd27c6fb7366d40fbb9c389617fc7cf26f19cd9722ff95f598e9fee3c418af6f30937f1b25467f75cb8cfa625789391eb867267d5e66267d2b13c7f20ae599fc65759638faaff13532eb63f5424cf7176bc8497f26c434dfa64e8cfe65444cfe466c30e37cca49629c8f548ef3633262f22fee8419efcff612a3be3c30a33e640789f1f9383f46917f912789519fbacca80f994c8cf395eec7f9b2f43c45faaa3433de6f979829fedf4f1cdbcb537d6c2f3f4c8cf3af9851fee52ab122fdbb60c6fb4d2731eac38019f5a1bc4f8cf39b1367e4af9e13e37cc7f55c27ffe60be46e4f63fd2b628b9cdd212bf217663f31c6b38619e5af4f12a3fc2b6692df5e621cef2331f90b3b64a6f9be4f8ced9d32937ddf24c6f9ac8915ad37cdc4d87ec68cf7cba3c4f17eb9cd8cf36b0e13a3ffe0fe64585f94cc64ff3933cddf2b47f9e73c3e9e9f3a31ea47aa8ff2b7f43cdd247f344d1cebdb2d666ccf6d248ee52e67c6f6f4317107cb6bbebf83e57e8758691b19e56753be652731eeff1ac81d8bf56b94a7ed3590c796b88d6c5ac83c3f4e25467b5f27ce900b2ecf70be4c2a47f9ab9a19e72b3f4a8cfba71764dd247dd9498cf3ed98f17eb9ca4cfee08099ec8dfaaf3b34ff3d667c9ebc60a6f93f4f8cf3bfc48cede951629caf8c99e6a39b38caaf5a26267fa03c33b6a74e13e3f3f699b13dd74f1cdbcb3689339a9f21b369c7fb49fea649fa40e3311d2cafa3fd4338cef92845cceb4f8dbcd2c6fa4593b8873c16c83de2fa94d852b946560de46a880cf247ffdb4e8cf1e10633e5bb66c464df769319cb85498cf3b9c48cf3a764e2284fb14e4cf66cee9849de5c9fec57b6900dd9abb4cc385f4624467bbe614679e723661c7ff6484cfae0ae98b1dc8c12a3beac122be402c76753beff2631daf32d31d97b8dfdb39c9f32286fcbf9a8aacb8cfba571496cf179ce21771bc87e9db86d511fb07fe02f287f799218f38ff7c494bf288f88297e2e511faca2f6c7341ed5a6f1ef206bf207b96326ff89f303fa4df6ba9518edeb9819e72bdb498cebed1531d9bb1f2546fdb866c6fbc57e62d4873133f9e7d41eceaf3c23e6f5bdc94cebf34b62b4df27661c7f7dc88cf2360362b26f3d4b8cfe608399e627f6cf26fb2eb689793dd84b8cfa3145e6fca63e45e67ca63a498ce7139699f2df1d66da8fb78939bf39498cfa77cd4cf9249318cfef3431e5abca7366d41f4fe3e17c619d23777b387e5d21b37eea2131f547ef27c6f1ef31d379db1a33e58f489e3dcaafb9d3c498df9d30d379de5a6294578f99f2b52fcce80f75414cf69a1d3153bee120318ef78e19e551f7136339cd27ef77ea3566d47747ed2bd2af728b98f4a7a2f67513593591d93e0a1a8f21ff9a0f98697f74963896eb4d665a1f7789299e521789d17e5339d9c70933ad47cb89d17f3c3293bd1c235b8a9f549918fddb1d33b6a79e13c7726d99b1bd7a337116eb93be5bf2d7629719eb7b9338d62fbbcc791ee7778958617981f69025ff3e21267bcdb13f593a5fb820267dce4f12a33e1f31933e3e1093feeacbc4981f3e67a6f38646626c6f8999ce73f8f97cfe71c74cf6fc9818db97cc749e2098517ff31d64ceefa9c3c4b8bfed3293fd6f25c6f3a46566ca0717c4940fd11bcc585e578931dfd161c6fd925b4d8cfbdf6762da2f173231ee9773668c8fcb3133eac378466c71be1d8da7d74036dbc4349fd624c6f5b4c94cfa3720e6f3c0a5c4e83f0a663affdb488cf3714b4cfe5ecc12e37c3a669acfa3c4d83e8d57d17a201c333def25313e2f9553beff9499f29b2366f487658f19d77f4bfaa2c83f0b6e9ffcb35589515fb69871fed53233fac3ec8299e245ae4ff1a42d99293e7864467f9593bdf27ea59a3263fd729018f76bb7cc787f719a18e3838c19fd5549fac5fb97bac78cf3efc93f68f22fc53db2a57824bf4c8cf18866a6f82131ea677e9038b6a749dfacc2faf23931fabb544eebc351e2787ff6c09c7562799b98fcb53c64267f3d4b8ce3a3fe644dbcbf8efdcd3a1cef163bc4fc7e4d0399fd8fb9414efe649818e3933b62d21f354e8cfa72cb8cfa692689d1df3c13933fd42b89f1fe3d663a5fd861a6f7493433fa0b7540cce7a1dc1ee5f7c56662ccbf3599d11fe9b5c4b8ff9e31533e762f31e653e87eceef972bcc647fa7c494af293c33ce475513f790f33e31bf7fc0ed592c2fa85cf179a54f8ce7811d663a2f7e2056f4fec133339de71c2746ff3e61a67c954d8cf6ec9829ffb79118cb7789339aaf2c716c5f6e31537e89db237bcf7c62dc9f507f7493ce0f6f99c9fe5f12a37fb861a6fdc13531d973bd9e18f7075c4efb879ccbc95e8b2133cdd72371863ca6e71bb22f43f3c5f6ae487fd85ec52533ad675366bc5f0f1247fbcd0d7246f1947c60c6fbe53031fa9b2766d2a7edc4b1dc92fc32f2576aca8cf55d2ac7fa15f527a3f1dbcbc4d8bf0be61ccbd17eb274de933153fcd026e6f3b82b668a1770bc19e7e3ed2333d9ef38319e273698299f764f4cfea5bc64a6f39be7c4983fbf65a6f7155e98b1bdaa9d18cf7f87cc946fe0fb397ed965a6fa7bcc644febcc747e326346fd2b3266da4f38627e1f8be541e735639687c5f9a871bed37aefa6cca81ff50133cea7df481ccbc715719be6ff9838a3f880dba77c6485fe08d653f2b78299ce4f0c33e59b0e12633e6285b843e779c7cc54ff2931e6175f98c95fd8c4b8dfc999e93cf28899f20b3d628e3fee9829dfbc4f4cf144a699299ee0f1913d576bccb4fea3ffcd0cd96bbdc14cf69e31d37c9d1093bd8da93f86ecab247d4df6bfc68cf369bbc464cf559118e3db6b666aef8919ed55d07c66146f889a19f5432c2746fff2c28cf76764bf19f92f2912c7fab2c18cf5fd73e2b87fcbe9febc49edcd12c7f222f6377f5dcf9bc8ec0fec9498ecdb9e27c67cfa3333bdcfb947ccef57cd12a33f7962a6f35cc14ceb7b454cf143e599e97dd2a7c4787e9698cee7ae1263ff5699299fbec28cfe405c20a7f3a42566ca773412e3f9e90b33bdaf3761c6f929e9f91cbf3bc18cfa93ad2546ff7ece4cfe623f31eaef2533ce5f7184ac15bdffd160a6f72b1433e51bd712e379e03a31ef0746ccb4bf48e5944fbe63267bee22733e337f64a6fce53e33f9db7566cacf9e3193ff3d498cf220fde37ca61933e3fda660267f40fac1f9c7ea3631da6f8798ecc75d2646f9ee30a37c15cd47b2b76662b4df6b66acef9e12477bb27de49ce203dd4a8cf6bacb4cfe619a18ed91e493933f91b7cc54bf9b38d61734dfb9422eb1fd3c9d976c24c6fdc88498dfe7ad1363f916317d3fa140f9e56caf8520a678bf6c23f3f9ad5b4a8cf6beca4ceff3b488f9bc758f99cecf53399d976866dadf1d24c6f58199cefbf29298cff364623c5ff5cca4ffa8afb96ed27ea366c6fbc53333ada7341e3e0f329699d6d36162f41787ccb47fbe61a6f8f99819e7af2279f0f951d14d8cebf30e33da9fbc67a6f3be83c4b8be96ccf8bc318f87f4a5ba242679881366f21f9a99ecfb9699d66b961feb3f8d97fd83ae13e3f956c14cf1c35d62cccfa6fad4bf6d628a47dc7962ccd7ee3153ff4c62f45fdc1ec9db0d98c91f5f32d3f31ac4e42fdd3a33e57f8bc478fea298297ffb9218fd559f99ce3b7bcce44f569969bd267d3019eab37d4a8cf63466a6e7737b341f629418e39936333e5f5489d13f5b66caff6e32933fdc481cfb67d03fe596ec430e98697f7acd4cfd2b99293e5c4a8cfd2b98c9be478931bfbdc34cfe7d3331e66f0e9969fd9c25c6f5e49419c723537f48dedc1ed9739931537f0f13c7fe28cb4cfb4f9118c773ce4ce73b5b89315e4ccfa3f5e12e31e6571bccd4df5962b42f9a6f4bfe415f24c6f75d587efc7ec50933c9374f8cfd5d66a6fdea656294af63a6fd37f79fe253719418d7af0762ca3fd893c428df0366925f2b71ec8fe5fe51bc2fb3c4b81e3e3153beee2c31e6ab59dea4bf22b547e719549fe3fd6a9799c6ff9018e76b8599e2f5fbc468bf6bccf43c9b18e541fac3fb055b30537cb19e18c777c34cf36f12a3fdd1fa95f60f6789b1bf7d66baff95d1bf91fd717c231e12e3fddbcc74ff66621c0fcd17c733d51633d55789313e21ffccf18b9c268ee592fc45cefdf58963f921c93bfc87fce7fadaeb8fbcbeedfa23af6fbbfec8ebdbae3ff2fab6eb8fbcbeedfa23af6fbb7e777949f1d13d787bfdeef20289a98feec1fcf5bbcb4bea8feec1dbebb7979792e6a3fb307ffdf6f2b21fdd83b7d76f2faf4ce61fdd87f9ebb7979793fea3fb307ffdf6f22a64f9d17d98bf7e7b79557fe289afbfa497b51c7f742fe6afdf495ef2fa9dcf26f2e693cf6e3fae8fbf93bc4012d305f6f24e2ed6f950ffff3bc94b3ebcf3d9a37cfae4b3e78febe3ef242f90c46c81a7f245ae2e7cd6ff480dfb48792d8e5baec9f54fea6cc8c1c227d38fdc537eac7ec9cd05760bace496dc5ef86ce7e3fafbf1fa35bf26ca5db927870b75f6e5c1db7be4481e7e548f3f5cbf16fdd5d1db15526eca6379b250e77481fbbfb2c71fedefe5d91b3a97170be597f26adecfc907b9241b73dc5c8c417eeef5c1fad597cb6fa4d192ed85f28e5c79f38992dd37ec1775f4e75ebf5a5e9fac896f3c3cac7dbdb7e5420a21d47c7da1e7db10bf389bf8ebf5eb6dbe54aecf5ba0b02213f97c5de1c41b098b42cce52b645f548b6beccfbd3ec21e453d37622dc6626e8d1493b7e31737e256cc79287127e64b1f16a38d9f7d7d807ef51724f2f8eab1e5543c89b9dd8ec8c54c3ccedd6bc48b988bf7455facbd69fba7e77e3e44bfde44f1e08f8ee668438837fe6920365fd74390e7d66ba9d8163b6277aeeedefb398eff7479c1a8e7a252b12f0e5e354e8cc45c342a8e40bf8ee7f8449c8a740222cec4f99b76fdcfcfc5fe2a79cde7acc4b5b81097737cf56a476249344473ae6c003ab49ca825e6e20dd1112b622eba100b6beb7faebc823ce6ad4c4995cef9e55429a55f6b2af3ba822a0bfa35a76f2a5339cb5658e5d47c9b857c9a8f5d7f4e16e357e9975ab01455cdfd5eabb122bf230fd544a58c2a58ee40dd2a9282a8d59d7abdeb41cdaf14d7ea49cdad14ea2745b1bfce7fbd8d4cd58b4a5185f46a55a55da05a53eb2c07b5a106e26aee2ea35e3d5d476dcd69e2f6fc3e401cfdac1cd92f94d754cd6562d4aeda4b7ab3ac866a9f6aedaa835709c94d3552878ad64f75ac4e14edb6c525c86eae7571a7d24e549dcbf3579ff79f22af4f763e53d0a9f958fe5c259faff6619f48baa2ae9493b4ee897db5a45234a104f836f25e608da3d79d806aaae5396aa99f9681fd99faa5da0bdc81583d59a1ba7cd523b5a2ba7c0e245aaac7b213676aa425c7585a68a56965101d6d344516f256677a7e17f513d7c99f6b8fa258909816a35466b5d3a407e248179a5604e974c51e5fd77aacaf5153a5d2137d93eebdd5c9d78b0788625f23923b7db7d88f1fb7c7fcd9fe4b2ff28d4a3b3efda0c6ec67c4b17ed4f12448aeab9e7ec6b82a581d7c4e6b5d88f5f54bfc7c05eaacb2c5ebbe5ec3cfe1f775bda11732fefa07eec87fb6bca47a9b0fd55b7afbb50cfc119d96e91db648598a19d711460df42eea8eded343ce558035ee6bca53c3e7fb9ab4561fea237dfcb6078b33f69bcbcbeb1d7df2ca6219e2758a1dc4548c25ad8b7a539f6a8a61f5993e579df8db05e8d7a58e7e4e2f814e35824ee9267c467946ddd26ddda16735f58aeebe7d3eac243f345ffde3e5b5f83ea0eceb9e91af6c847286bc8dd17accbb6f7d263b616f28378d5123d43563f51874308ed8647a68a2578775b26b1c7deae1f70265674a5389376f8b99da8c7f6ccee267e89759c81188a699cce74165cfdc70eca51ae8c32054b885582bc6505a9829e62c4032a05fe62ec6657b1041c415d1dceb534367e1e6516c19f47b1eeaaea9b9679bcc3c9bb9385fb77e4f79c5739e371190be322f7a2f954ecdaaa4b8c2f45517338062a88732e6bac40874662dc4f8661de22f83392ebd6b36cc0073166a64a20f375b66db50146c76cd9e99cb7b987d736046737dda94ebdfbf4efe2cffa5f6d5c3bccccca13932e48945572e81c5453b31276a2237508a62a0cf436e42f4401e71953067aa0bfa05d1ab39361726c6b7ca9a2bb314d64c79ab0e40b2319e354dd0b9b998deb4c2df479ee31571a17ec07b173fcfdf9baee9cde70bacb442d0ce4684ef0253e4291fad09719adcb4162c1264a2fa62605e82c7b719f8b741d833da5c75ad0bf6a83235b071266ca146b60c1ecbf4e0b3b94cbeadf5d0cebd3766afedc47ef25ed447cacbbef34e969edae97cae5eb4ed1d9f5fdb7b186bf44112bcbb7d0c397cfda04f4376506a7d09b156a8f5043e6b104e38cc3ed47ac6b5117e9b05ddb52ffad4aec2bf7dbba67a769df3fc76033e9f8bc1eca69676eb478cf247ead7ab7f7abdcca9dd1629db0cbbe747f1c4ebbbdd01ddd90feba7dd05bdeac74875a45ca82fa41e5b68cf0e41f7067a27e6c8ba765f4e21aa18a9257b1072ad7a0851c534445d5036e2bcbe3d14337bf4ba4a83aeeddbe34ffb26fed19bea3fd21ee5913d91cd379f787b2a1af68c496d821e9c631db106231f8775521ec1782fc23a0a71d7486fd94bf87c64af6403f6922373619760d40d75124e6aad36175a81dc5a7a05ea34834e81060e2cf92edbb26d53d90e7b02f0fa53bbf2b69fb66b7bfff42dcf1febbf329909b39019cc941e1bde19ab4cab5e66e29b269b99553d8cc4f4ae1e8711c80dd039582333f05b212f61870a64016be84696ab51e64c4fccc420f3b20f71d7282b32785656a94156e3da928dc3da995db3766513bd9f2df82dd5942fd93f7ea3f347fbfb6caa0eb337fb5de9455b9f665cfe2076544fc608337b84f570203745377b52ddec399b890af4eb5c5f05bdd297d94bb61af40b66c181555eaa538834c09f65fd1077c16fedb05f042d1d656be10c5c5da83bf87d3ddb20c964a05b83b7918dc9b241f61d51c58f5f1fc56ab625244413afb9620f3a36cc684fa836b4836822da8fecc23a063be56c472d65b04f3483a01fb22db7416776f556b607ff0eb3fdec00f691d766331b05fd1256acab8132d9a13c8bfab6157c9e9c9917f8fd288bbe4a4e33f06fd9e96b740fbd38cbceb38becf2dbc6f3e3e4a5202ecaae3efd3c5bca1a6075cdd7f700831f3353de4567d3e0713003adaf51f7c012e3fe315bb66db991b5b2b6b9902b02a209d0af4eb60292e8663dd0b9a196b9d46d31c845ae741bb46b92c37372037b869132e8c7c443769edb3c9bcb57cfecb9eae539ebdefcf52def5b7f9f7e4923d773f74e2eb59ffbbc10b33cf932d431d0bb28b3bcd263bd1bd7b61db0ab99ac33d039e1f25adec57fa31fcaafed733ec96ff2db7c9a4f7437bf53460ff3fb0c620b35c81ff247b0d2dbfc29f4237f861958cae3eec7e6f0fb207f1139f72b5fcdfbf95abe2edef92e92ba90d3af7f27ea7bed518215e51bd96abe90738218dee88e3e556bb6107b2831fb0cf1d520df0ca3c8b7402e52fa7cdb4c60f47bea340f92bbb54bead11ee5bbf938dfcb877233df075940f4908fc00f36459e1f021fe98dac069f75056be1aa69c80788bf825f5b873dc25e7e0c923e81364e318706bbaf477d9a9fe5e7f9c2bb65f9a57d12b076e4efd8c8cf92173d79496dc9b0037a930b90d3fc5e0fa1f70dd5c24f3205fbc151de940a628b06e800584f761b7c90ee59a9f7f316ac9aa5eccfe73842d41ece7bc2d935e62f300712b4226fe71d59e61059e85bb105dabe9977c3efea318f7b0bf0883db0e0b193e2cd9b8b20d707ddcf8e4216fbdb4e927e94bfcf1e9cd0cbe6c62d644ff2b6d3e60ad6adb82b0e7ecc82cf710674c52a88ec9d05bd81b50eee6db8ecf53e973be7bc2b5ce92a57bb315dd76e029f145072238e1cf91db0ee4e5eb8a9bb73b06b700f66d53d3ab0d27ce09e21466bbb9934f352712ff079cfadba7f9019fb71eb23ccb707e9ac29234edcdc1b256e0362ef81d9b63af8aee0c7606d1be5cf46b8e0f5076ed36db96df03571fe65dfedb85d90cb1e5cc3f8bf7b6e1f7e0ee067449f1cd0cfc41dbaa3b0f386bb37417ec7b03bbf058b8f790877a296c4c09dbab35759d96b770e7b87ca5db8cb5f13df87f75fbe94477257b6692af05b997ae0bd633ed21b71451cb925097146a6cc058ca461975cd35cb9653ee7712dd726097deeeab815d7753d0f4a09d2c3cfc65ec952ee82346eccb37af4da1be385847575e8ad279dcdae6ce136cd85eafadcbb10f3fd33adf876fd929be041afd5f6e7de1b85726376f43ef4cceb75f40f2287b8de805f19796fac34e25ccc20ae2af2b669c4fcc2932f7c1946ef2b5f83deecf9f13bd2029df2d7bc1f95a59ff81bb0d658e66f7df457f0f499bf433d33079efaa4d7fd43d0f1fcc63f66efec25dff4ff8bf9d87f628f2196ce5e2016bff24f76037ce73beff8e963f36caab06ad9f3b076fa673fd3cb2ef4fac2dcfb17bfaa0dee5464dff7c9ce2abf968ffcfadfe858e5e6d633b1ec37fcc047a9f94dd70d7a66ee3cacbe7edb83cff4bb7e2f6836fc4cfcd0effb83f7c7146cc68fd48a8235fb4bf1d83ff75f611efca13ff2c7e6c56dfa93c57da3347e96d5ee14acf0147c574b805e05dfe54f436ceecffc79d03b7f41fab1e963dc2d72901dfbad037fe5977cc337fdb26f91cf025fe6db8bbe47acfa0eb5b3e2bba1157d97ef2b6b1b217f16d65fdf032b9c7e1227fa90f5f727a263c3ff19471162ff2faf97dfebeff50b58675e487b047e5e16a250626f3ee7a5f342873d20fcdc14a6b01ad67b7b546421675fe4c1f2dc5ee10acfe79045c17a54944555d4c5187eae8b497153dc92c4c2f5ce9864bf98e22a51d0fe15221488f7dc437ef3762d0c1229ee8b87e2b178cacecd6af15ccc20d6f3f3eff5ff2c79510f36a3d45ef2b30276c845bf58d34b8ede8190b3623d7f09fbc0a05bc5865d86da5e1c816486d106e7f673c580d7c5621364b415a535819fedf8ef8edb2f76b1c6fba764ae5fa09fab8a98972cf6b3a3e2203fe578ae18158776581c15c7b07fe8162720a9538880a75f9fd7ff1a7915675f77b6622f215ed4058415107175735b9cdba97b914a75446e960d44aab62a20c6f607ae1765352c2ed5d1ebfd72d7951c41145720a12590d152fa77027ad6483af6997724a4289a10af05fd9c86bd62b12ca76a56b48a76d1811df825443221eb3dcacfdc6ab102d1cbdfec1dc54216f4ebf44b1ca96db12eb3a25b1c163dd08e10177f66cf05d1b92a2e4a09de1d7c17ec1907deab4cdee5b3522818819f962acaca2dea08f41e63aefd52934ed524b10959e6a4341c597cdecfc8a91fc4b5b47418252badc23e43df6643775a5aff0892329ffbbb29c12f9759d1325baaaf8ac5f5f26bed31c42baa23fb655ebad2974559c27e2f2babb22e1e6c4bece926e62b7814fe192cb4037ee105fc1aac89f95a61bd29c71037f13a77ed163279e53597959320adf206a555decee9d82dd5a9bfdcdf725ab8b83ad4e55d09fba8fcbe7cb0955b2d1f610c73dfd80d6b61f90cbbb366f1605ae54cdca9c34c952fe5aa8cefff8885e8e21fc45fd0829e89bcec67d7d97ab9a67a61eea26fea9bc772dd8475a90551461ef77da6dc2807f953091eaedc022bd99d8bcff7caedf98c813ba235ae55ee80947659a7a2e450c726254b7b94ff8dc4e079437ade751879b92ffb71ff0976511e80fe58d32b4776bb3c0c7121ec5dd7caa3f2b83c81fdebf4f37fb3e77bfc7dd8d7671b307787e56979569ee72103d53553d50dd17c7921a47b76b6bcb4cfe555888bcaa577a2a951d9e0bff1553693f78afaf5896e859f8aeffcfbfd0cec1762d45b2ea33f2f5b65db6dea95e23c9c3fc11e249c735665273b2d57f24301fa8f76f4a5eb07ad8f61cebad2e4c3bc037eaa079a7f1a742eec0f43fc033117ecabc1afdc78f6e807afff56127525e81fcaab12694d4489d1bfe56ea558cefa8b6ff4cacd4ae36ea9320eb45cec99476b429f4097c6e6caf72a5b6576591c85b709befe1d8b1f9d8f0ef3e38dec57b95daf9c5bb6957a0c3902d5ab7c05deb32afde01d2d1b97e0ffcafbe4bf6ec183cdaf8df8efb89854ac5f5ffc1e475597cbb1565985539487708e19aeeada1eb95976534d7c57fabf5b1b7f85bc5e2fdc374a55dd54b76ebb9ae62fba17564469aabbea3eee0f31e74032aa1eaa478c04dcb07a7aab5bb456d6c54df54cf5773ffb5c53cd48b35eaad5b0d655fdfca6ec55ae5a73218ff1cd39af9f2daf785ac63fd7e1bd2c5821603764b7c09336e3f75638169fb74c1861da09ed55ebe0db6fc90a6f836e551bc5d82fa7f2cf9c1fba3eec22e39ec175abf0764a5d6dfab03f0a6bdd0ff826eea7f28af9cc3c9c1acb6936aeb6f28178a8b68bc36aa7daadf6ca836a588caafd32d3eba6ac0eb2b11daac2eceb3d77a2eb72548db249b95e1d164755c847c1dc82dfd8ce46d5b1d5f933c4d5ced01b72d5b83a71af39aef92bec115bd529ad91c98f5567a946f5fe68aaf3e8e187d505ec567d8c1b0b732f9eb2893d2c477a2fbb73b07ec3a80e4ca9d7f5615e2a5bb4615c9730beab6aa96a142dbf2bf6ecb5f4c588f2b89b5f9257fc8ed783f45553de54cb6ad32ee946d5aada66a7ea542b7ebbb4a5cdcfaa6ed5ab65be560b5863e08235b1a7ba1059c4354775f529fa8b90e70a79a89097c09facad46721f63dd6cb356ef482b5dd553ad6b83eb646deb0c2519aefa9d730bbf819a55bb7229c455d5563609f13c3c7388fd004f8ffd8afdad7d5dc47ef7c0d0058ca5cc618df7c31a5c64d5ce2b58d357e58dda7dfb7dcdcfdb63b4a629ae1d9c338fb63f93533d839d4f0debe1be38aa6b3fcb0fab5b7b9c77ea717d5d4fea9b7c56dfda417691add7d33cabef6ce57b3e776b79914f94a9ef4166456cbb5f3dfa9577758c2e7f553fd48f313b81f92fd09feae5132bcc3dc5baf553fd7c785fcfec36ee2ddca959756b3eaf5fead5ba9fd5f59a1dc09e7156afdb71bd618f6da71ec8198cc3c27854b4da30c63e8dfb130bfe11fe8bbd67581bc37b3621d7906f877348e9eb4df0f8abb29f819fadb74ca31ef8fd72a3de2e73be17d6a91d572dc8e9e0f3122ceede7cd76db7de49be7058ef8677f5d571bd6796eb61bd5f1fd4a3fc541f0b6b60875e1f86f328ec1bbf4ffdad9efffbe4e578d45339d3df900f5fec6576591f55f79f97d19c9fabeae3fa04f6a05bd5b9ef80577fcdc38eeb9487785f37621e65c679e1f0dbb7bf0bfc3df27239f41277b4e039fc77fd1d20790bf37f569f7f51665f92e4b81afffddf0296106978fa06737d01d6fbcdef067c8fbcc2d3eb981bce218af2837fdaceeba56d31f4fdb853febb6b84bebd5eaa43edaa187e4d0e4bcfea8627bd733d888bbf39c2589497eb1777f928f805e74b6035f56bafadd63b357ceefb757c83ab86d8b18e7163ccc41c4a8a21ebe5f2aeb82b2e5d2b96410b75abb8ab5b61dd9abfea7631a83b9f6689cd53bde27a7ef0c6dadeae02a52b8bbb72095a0dd22a65197c9abcadbbced7ad7af775bf5c3f2ff4455571b5abc6615660afe4712f2477eba6f330b61b3c4f71797107b4e61724ba28afb087ab7ba83b611d92b0e28f258e682ca29770eebac6a79749bfea57fd0af306e3aca05623f890b18ada30893b47fe66811f6b8ae5e11a9bf7de9991069e9d43cc7f33b6e55df5e27cf552de8d2d7056420c37ce5dccb58edd9c74823dd7f0b46b94427d169f5df912faa268c71523e9b18f25b5ab82564805e20bb330812b8ead3e8da318b9e1db595e945735c6d839e84ec8839ba790a98cfd0fd14d592f832e5da1c77eab5fc534e897bb82e78afad25dc93ee64ee177280336d503d48fef288f69d70dfba29b72299c637fe99dacd06ef04df187d6c67229ca7f04ab65da2babeb020400ebe51d3ca713ac2f6425c755e80b7ec7addec15145bb813e8f6b7c77df75631f731c5bfc046ad667e3a0df859cdb7b7d628f4760d55ba85fe36bd2af49d0932049589d9ea0dda2182ce857f25f7e12a4e0606b0c3f37689d8ece274037f6c6f1fc1475abd2f5164a3e1f8dc5d7ae5572b3eee15a8a91e9fce5370bd036e87b599f408f1f438fe7fb12f48b4f43e6fd97bf81d6cea1de21c66f684be30c7464b778f3f6dfe7f42bae7d7e5ebf8a909d9a78e105f4a11764fe897ec1dcbbf06407dec5c1987cd2af3b9eb3d0c31af7cce372eeb9f5276764ef5f94370d57395ec82f88e5f054d4c11003c619beaecfe18e8afab2f32aaf12b4107d19ec7da6f1440fc606bdeeb225071d1d4fdf463f8bf20afa519f7ee2bfc228db6e549918c178f418eff9aff15d38830efe4824ef1fac86f5ab7ac4b643ff16f4e66ff44b6e16c3d7d336dfc9479fd609faf59ab10dd2a94ca8c731d7bc7e0579a1af229febf16f3d613f827e558f9f3e61515ef908fcc2182c2ef46ce20ec7f7ac5f305fe07f8a62fce00adcbf85a7937e9920afa0736a1af3749d60b5759c29f01fd4c718f184397b8cbee7fa5b225c580b5fa38cca39f34eb6505dfbcdea0dbbe0c5578aa91f94cd45fdf297718445dcfbf441af86950ebdc6bff911f46b716d7c4f5e50f3b83285f36dd8d795f15f31b6fc0d577fe36f8376b39440aad1a76b5b2ff1095776397e0a77baaa7a09be78fcec4af4331eac197b031e7e84ebf0df5fd09e9ddb2f8d6044b3cfe5437d1f82d6b959183f8ec91eb12fd96625d9e7095bbd8005b6d15f81ce17a12658257a9f617dfede5f4b792f5e0ddf73d52023fe5173725647e133da8ddf067dc2cfc37cb39d073d13bb50ef89ef79fd9c63f0a0bfb5fbb2cf12bbe31968ebdc6e1c7ce717bed5124ff717ffc2df425fe6cbb16cfe79d233cff7f5efe4f52b2e918735ae76e397f774a5dc774760fd63379f1f9bf8e2fbde6dfe11d7c7fd3d3e59a29581cef4fc86cb455e3f17215751d49fec877c09bbd3d9cffa9b12ff19f28a3aa6bf629f58d58dfa3790d4c7cb2b5c65f30b3989ba7aa8cf84fd1df48aaf8f96578c888ffc00a4761ddf4f1d81d79a407cfee476ea9d5ffbb72fbfe6fa7879e1a567e2a85ef61be3db7ac777a5523fe02ce7675cbf8bbcfe53ae3ff2fab6eb8fbcbeedfa23af6fbbfec8ebdbae3ff2fab6eb8fbcbeedfaf7fffb9ffffaff245f9a02</data>
598 </image>
599</images>
600<tabstops>
601 <tabstop>button</tabstop>
602 <tabstop>netview</tabstop>
603 <tabstop>TabWidget</tabstop>
604</tabstops>
605</UI>