-rw-r--r-- | noncore/net/wellenreiter/gui/configbase.ui | 149 | ||||
-rw-r--r-- | noncore/net/wellenreiter/gui/graphwindow.cpp | 50 | ||||
-rw-r--r-- | noncore/net/wellenreiter/gui/graphwindow.h | 3 | ||||
-rw-r--r-- | noncore/net/wellenreiter/gui/protolistview.cpp | 19 | ||||
-rw-r--r-- | noncore/net/wellenreiter/gui/protolistview.h | 4 | ||||
-rw-r--r-- | noncore/net/wellenreiter/gui/wellenreiter.cpp | 64 | ||||
-rw-r--r-- | noncore/net/wellenreiter/gui/wellenreiter.h | 3 |
7 files changed, 198 insertions, 94 deletions
diff --git a/noncore/net/wellenreiter/gui/configbase.ui b/noncore/net/wellenreiter/gui/configbase.ui index 7504ebc..422826a 100644 --- a/noncore/net/wellenreiter/gui/configbase.ui +++ b/noncore/net/wellenreiter/gui/configbase.ui | |||
@@ -1,39 +1,39 @@ | |||
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>209</width> | 14 | <width>261</width> |
15 | <height>287</height> | 15 | <height>280</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"> |
@@ -74,110 +74,60 @@ | |||
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="4" column="0" rowspan="1" colspan="2" > | ||
99 | <class>QCheckBox</class> | ||
100 | <property stdset="1"> | ||
101 | <name>name</name> | ||
102 | <cstring>hopChannels</cstring> | ||
103 | </property> | ||
104 | <property stdset="1"> | ||
105 | <name>text</name> | ||
106 | <string>Hop Channels</string> | ||
107 | </property> | ||
108 | <property stdset="1"> | ||
109 | <name>checked</name> | ||
110 | <bool>true</bool> | ||
111 | </property> | ||
112 | </widget> | ||
113 | <widget row="2" column="0" rowspan="1" colspan="4" > | 98 | <widget row="2" column="0" rowspan="1" colspan="4" > |
114 | <class>QCheckBox</class> | 99 | <class>QCheckBox</class> |
115 | <property stdset="1"> | 100 | <property stdset="1"> |
116 | <name>name</name> | 101 | <name>name</name> |
117 | <cstring>prismHeader</cstring> | 102 | <cstring>prismHeader</cstring> |
118 | </property> | 103 | </property> |
119 | <property stdset="1"> | 104 | <property stdset="1"> |
120 | <name>text</name> | 105 | <name>text</name> |
121 | <string>Use additional PRISM header</string> | 106 | <string>Use additional PRISM header</string> |
122 | </property> | 107 | </property> |
123 | </widget> | 108 | </widget> |
124 | <widget row="4" column="3" > | 109 | <widget row="6" column="0" rowspan="1" colspan="4" > |
125 | <class>QSpinBox</class> | ||
126 | <property stdset="1"> | ||
127 | <name>name</name> | ||
128 | <cstring>hopInterval</cstring> | ||
129 | </property> | ||
130 | <property stdset="1"> | ||
131 | <name>enabled</name> | ||
132 | <bool>true</bool> | ||
133 | </property> | ||
134 | <property stdset="1"> | ||
135 | <name>suffix</name> | ||
136 | <string> ms</string> | ||
137 | </property> | ||
138 | <property stdset="1"> | ||
139 | <name>maxValue</name> | ||
140 | <number>2000</number> | ||
141 | </property> | ||
142 | <property stdset="1"> | ||
143 | <name>minValue</name> | ||
144 | <number>100</number> | ||
145 | </property> | ||
146 | <property stdset="1"> | ||
147 | <name>lineStep</name> | ||
148 | <number>100</number> | ||
149 | </property> | ||
150 | <property stdset="1"> | ||
151 | <name>value</name> | ||
152 | <number>1000</number> | ||
153 | </property> | ||
154 | <property> | ||
155 | <name>whatsThis</name> | ||
156 | <string>Choose the channel hop interval.</string> | ||
157 | </property> | ||
158 | </widget> | ||
159 | <widget row="5" column="0" rowspan="1" colspan="4" > | ||
160 | <class>QGroupBox</class> | 110 | <class>QGroupBox</class> |
161 | <property stdset="1"> | 111 | <property stdset="1"> |
162 | <name>name</name> | 112 | <name>name</name> |
163 | <cstring>GroupBox1</cstring> | 113 | <cstring>GroupBox1</cstring> |
164 | </property> | 114 | </property> |
165 | <property stdset="1"> | 115 | <property stdset="1"> |
166 | <name>title</name> | 116 | <name>title</name> |
167 | <string>Scan on channel</string> | 117 | <string>Scan on channel</string> |
168 | </property> | 118 | </property> |
169 | <property> | 119 | <property> |
170 | <name>layoutMargin</name> | 120 | <name>layoutMargin</name> |
171 | </property> | 121 | </property> |
172 | <property> | 122 | <property> |
173 | <name>layoutSpacing</name> | 123 | <name>layoutSpacing</name> |
174 | </property> | 124 | </property> |
175 | <grid> | 125 | <grid> |
176 | <property stdset="1"> | 126 | <property stdset="1"> |
177 | <name>margin</name> | 127 | <name>margin</name> |
178 | <number>4</number> | 128 | <number>4</number> |
179 | </property> | 129 | </property> |
180 | <property stdset="1"> | 130 | <property stdset="1"> |
181 | <name>spacing</name> | 131 | <name>spacing</name> |
182 | <number>2</number> | 132 | <number>2</number> |
183 | </property> | 133 | </property> |
@@ -399,108 +349,173 @@ | |||
399 | <property> | 349 | <property> |
400 | <name>text</name> | 350 | <name>text</name> |
401 | <string><manual></string> | 351 | <string><manual></string> |
402 | </property> | 352 | </property> |
403 | </item> | 353 | </item> |
404 | <item> | 354 | <item> |
405 | <property> | 355 | <property> |
406 | <name>text</name> | 356 | <name>text</name> |
407 | <string><file></string> | 357 | <string><file></string> |
408 | </property> | 358 | </property> |
409 | </item> | 359 | </item> |
410 | <property stdset="1"> | 360 | <property stdset="1"> |
411 | <name>name</name> | 361 | <name>name</name> |
412 | <cstring>deviceType</cstring> | 362 | <cstring>deviceType</cstring> |
413 | </property> | 363 | </property> |
414 | <property stdset="1"> | 364 | <property stdset="1"> |
415 | <name>enabled</name> | 365 | <name>enabled</name> |
416 | <bool>true</bool> | 366 | <bool>true</bool> |
417 | </property> | 367 | </property> |
418 | <property> | 368 | <property> |
419 | <name>whatsThis</name> | 369 | <name>whatsThis</name> |
420 | <string>Choose the type of driver used for sniffing.</string> | 370 | <string>Choose the type of driver used for sniffing.</string> |
421 | </property> | 371 | </property> |
422 | </widget> | 372 | </widget> |
423 | <widget row="4" column="2" > | ||
424 | <class>QLabel</class> | ||
425 | <property stdset="1"> | ||
426 | <name>name</name> | ||
427 | <cstring>TextLabel1</cstring> | ||
428 | </property> | ||
429 | <property stdset="1"> | ||
430 | <name>text</name> | ||
431 | <string>every</string> | ||
432 | </property> | ||
433 | </widget> | ||
434 | <spacer row="3" column="0" > | 373 | <spacer row="3" column="0" > |
435 | <property> | 374 | <property> |
436 | <name>name</name> | 375 | <name>name</name> |
437 | <cstring>Spacer4</cstring> | 376 | <cstring>Spacer4</cstring> |
438 | </property> | 377 | </property> |
439 | <property stdset="1"> | 378 | <property stdset="1"> |
440 | <name>orientation</name> | 379 | <name>orientation</name> |
441 | <enum>Vertical</enum> | 380 | <enum>Vertical</enum> |
442 | </property> | 381 | </property> |
443 | <property stdset="1"> | 382 | <property stdset="1"> |
444 | <name>sizeType</name> | 383 | <name>sizeType</name> |
445 | <enum>Expanding</enum> | 384 | <enum>Expanding</enum> |
446 | </property> | 385 | </property> |
447 | <property> | 386 | <property> |
448 | <name>sizeHint</name> | 387 | <name>sizeHint</name> |
449 | <size> | 388 | <size> |
450 | <width>20</width> | 389 | <width>20</width> |
451 | <height>20</height> | 390 | <height>20</height> |
452 | </size> | 391 | </size> |
453 | </property> | 392 | </property> |
454 | </spacer> | 393 | </spacer> |
394 | <widget row="4" column="2" > | ||
395 | <class>QLabel</class> | ||
396 | <property stdset="1"> | ||
397 | <name>name</name> | ||
398 | <cstring>TextLabel1</cstring> | ||
399 | </property> | ||
400 | <property stdset="1"> | ||
401 | <name>text</name> | ||
402 | <string>every</string> | ||
403 | </property> | ||
404 | </widget> | ||
405 | <widget row="4" column="0" rowspan="1" colspan="2" > | ||
406 | <class>QCheckBox</class> | ||
407 | <property stdset="1"> | ||
408 | <name>name</name> | ||
409 | <cstring>hopChannels</cstring> | ||
410 | </property> | ||
411 | <property stdset="1"> | ||
412 | <name>text</name> | ||
413 | <string>Hop Channels</string> | ||
414 | </property> | ||
415 | <property stdset="1"> | ||
416 | <name>checked</name> | ||
417 | <bool>true</bool> | ||
418 | </property> | ||
419 | </widget> | ||
420 | <widget row="4" column="3" > | ||
421 | <class>QSpinBox</class> | ||
422 | <property stdset="1"> | ||
423 | <name>name</name> | ||
424 | <cstring>hopInterval</cstring> | ||
425 | </property> | ||
426 | <property stdset="1"> | ||
427 | <name>enabled</name> | ||
428 | <bool>true</bool> | ||
429 | </property> | ||
430 | <property stdset="1"> | ||
431 | <name>suffix</name> | ||
432 | <string> ms</string> | ||
433 | </property> | ||
434 | <property stdset="1"> | ||
435 | <name>maxValue</name> | ||
436 | <number>2000</number> | ||
437 | </property> | ||
438 | <property stdset="1"> | ||
439 | <name>minValue</name> | ||
440 | <number>100</number> | ||
441 | </property> | ||
442 | <property stdset="1"> | ||
443 | <name>lineStep</name> | ||
444 | <number>100</number> | ||
445 | </property> | ||
446 | <property stdset="1"> | ||
447 | <name>value</name> | ||
448 | <number>1000</number> | ||
449 | </property> | ||
450 | <property> | ||
451 | <name>whatsThis</name> | ||
452 | <string>Choose the channel hop interval.</string> | ||
453 | </property> | ||
454 | </widget> | ||
455 | <widget row="5" column="0" rowspan="1" colspan="4" > | ||
456 | <class>QCheckBox</class> | ||
457 | <property stdset="1"> | ||
458 | <name>name</name> | ||
459 | <cstring>adaptiveHopping</cstring> | ||
460 | </property> | ||
461 | <property stdset="1"> | ||
462 | <name>text</name> | ||
463 | <string>Use Adaptive(TM) Hop Scheme</string> | ||
464 | </property> | ||
465 | </widget> | ||
455 | </grid> | 466 | </grid> |
456 | </widget> | 467 | </widget> |
457 | <widget> | 468 | <widget> |
458 | <class>QWidget</class> | 469 | <class>QWidget</class> |
459 | <property stdset="1"> | 470 | <property stdset="1"> |
460 | <name>name</name> | 471 | <name>name</name> |
461 | <cstring>tab</cstring> | 472 | <cstring>tab</cstring> |
462 | </property> | 473 | </property> |
463 | <attribute> | 474 | <attribute> |
464 | <name>title</name> | 475 | <name>title</name> |
465 | <string>Capture</string> | 476 | <string>Capture</string> |
466 | </attribute> | 477 | </attribute> |
467 | <grid> | 478 | <grid> |
468 | <property stdset="1"> | 479 | <property stdset="1"> |
469 | <name>margin</name> | 480 | <name>margin</name> |
470 | <number>5</number> | 481 | <number>5</number> |
471 | </property> | 482 | </property> |
472 | <property stdset="1"> | 483 | <property stdset="1"> |
473 | <name>spacing</name> | 484 | <name>spacing</name> |
474 | <number>3</number> | 485 | <number>3</number> |
475 | </property> | 486 | </property> |
476 | <widget row="2" column="0" rowspan="1" colspan="3" > | 487 | <widget row="2" column="0" rowspan="1" colspan="3" > |
477 | <class>ProtocolListView</class> | 488 | <class>ProtocolListView</class> |
478 | <property stdset="1"> | 489 | <property stdset="1"> |
479 | <name>name</name> | 490 | <name>name</name> |
480 | <cstring>capturePackets</cstring> | 491 | <cstring>capturePackets</cstring> |
481 | </property> | 492 | </property> |
482 | <property stdset="1"> | 493 | <property stdset="1"> |
494 | <name>enabled</name> | ||
495 | <bool>false</bool> | ||
496 | </property> | ||
497 | <property stdset="1"> | ||
483 | <name>sizePolicy</name> | 498 | <name>sizePolicy</name> |
484 | <sizepolicy> | 499 | <sizepolicy> |
485 | <hsizetype>7</hsizetype> | 500 | <hsizetype>7</hsizetype> |
486 | <vsizetype>7</vsizetype> | 501 | <vsizetype>7</vsizetype> |
487 | </sizepolicy> | 502 | </sizepolicy> |
488 | </property> | 503 | </property> |
489 | </widget> | 504 | </widget> |
490 | <widget row="1" column="0" rowspan="1" colspan="3" > | 505 | <widget row="1" column="0" rowspan="1" colspan="3" > |
491 | <class>QLineEdit</class> | 506 | <class>QLineEdit</class> |
492 | <property stdset="1"> | 507 | <property stdset="1"> |
493 | <name>name</name> | 508 | <name>name</name> |
494 | <cstring>captureFileName</cstring> | 509 | <cstring>captureFileName</cstring> |
495 | </property> | 510 | </property> |
496 | <property stdset="1"> | 511 | <property stdset="1"> |
497 | <name>enabled</name> | 512 | <name>enabled</name> |
498 | <bool>false</bool> | 513 | <bool>false</bool> |
499 | </property> | 514 | </property> |
500 | <property stdset="1"> | 515 | <property stdset="1"> |
501 | <name>text</name> | 516 | <name>text</name> |
502 | <string>/tmp/capture</string> | 517 | <string>/tmp/capture</string> |
503 | </property> | 518 | </property> |
504 | </widget> | 519 | </widget> |
505 | <widget row="0" column="2" > | 520 | <widget row="0" column="2" > |
506 | <class>QToolButton</class> | 521 | <class>QToolButton</class> |
@@ -844,26 +859,32 @@ | |||
844 | <connection> | 859 | <connection> |
845 | <sender>enableActiveScanning</sender> | 860 | <sender>enableActiveScanning</sender> |
846 | <signal>toggled(bool)</signal> | 861 | <signal>toggled(bool)</signal> |
847 | <receiver>GroupBox3</receiver> | 862 | <receiver>GroupBox3</receiver> |
848 | <slot>setEnabled(bool)</slot> | 863 | <slot>setEnabled(bool)</slot> |
849 | </connection> | 864 | </connection> |
850 | <connection> | 865 | <connection> |
851 | <sender>enableActiveScanning</sender> | 866 | <sender>enableActiveScanning</sender> |
852 | <signal>toggled(bool)</signal> | 867 | <signal>toggled(bool)</signal> |
853 | <receiver>GroupBox4</receiver> | 868 | <receiver>GroupBox4</receiver> |
854 | <slot>setEnabled(bool)</slot> | 869 | <slot>setEnabled(bool)</slot> |
855 | </connection> | 870 | </connection> |
856 | <connection> | 871 | <connection> |
857 | <sender>writeCaptureFile</sender> | 872 | <sender>writeCaptureFile</sender> |
858 | <signal>toggled(bool)</signal> | 873 | <signal>toggled(bool)</signal> |
859 | <receiver>getCaptureFileName</receiver> | 874 | <receiver>getCaptureFileName</receiver> |
860 | <slot>setEnabled(bool)</slot> | 875 | <slot>setEnabled(bool)</slot> |
861 | </connection> | 876 | </connection> |
862 | <connection> | 877 | <connection> |
863 | <sender>writeCaptureFile</sender> | 878 | <sender>writeCaptureFile</sender> |
864 | <signal>toggled(bool)</signal> | 879 | <signal>toggled(bool)</signal> |
865 | <receiver>captureFileName</receiver> | 880 | <receiver>captureFileName</receiver> |
866 | <slot>setEnabled(bool)</slot> | 881 | <slot>setEnabled(bool)</slot> |
867 | </connection> | 882 | </connection> |
883 | <connection> | ||
884 | <sender>writeCaptureFile</sender> | ||
885 | <signal>toggled(bool)</signal> | ||
886 | <receiver>capturePackets</receiver> | ||
887 | <slot>setEnabled(bool)</slot> | ||
888 | </connection> | ||
868 | </connections> | 889 | </connections> |
869 | </UI> | 890 | </UI> |
diff --git a/noncore/net/wellenreiter/gui/graphwindow.cpp b/noncore/net/wellenreiter/gui/graphwindow.cpp index 7e1f378..b116b91 100644 --- a/noncore/net/wellenreiter/gui/graphwindow.cpp +++ b/noncore/net/wellenreiter/gui/graphwindow.cpp | |||
@@ -8,152 +8,180 @@ | |||
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 "graphwindow.h" | 16 | #include "graphwindow.h" |
17 | 17 | ||
18 | #include <qpainter.h> | 18 | #include <qpainter.h> |
19 | #include <qpixmap.h> | 19 | #include <qpixmap.h> |
20 | #include <qtimer.h> | 20 | #include <qtimer.h> |
21 | 21 | ||
22 | MFrequencySpectrum::MFrequencySpectrum( int channels, QWidget* parent, const char* name, WFlags f) | 22 | MFrequencySpectrum::MFrequencySpectrum( int channels, QWidget* parent, const char* name, WFlags f) |
23 | :QWidget( parent, name,f ), _channels( channels ) | 23 | :QWidget( parent, name,f ), _channels( channels ) |
24 | { | 24 | { |
25 | _values = new int[_channels]; | 25 | _values = new int[_channels]; |
26 | _dirty = new bool[_channels]; | 26 | _dirty = new bool[_channels]; |
27 | for ( int i = 0; i < channels; ++i ) | 27 | for ( int i = 0; i < channels; ++i ) |
28 | { _values[i] = 0; | 28 | { _values[i] = 0; |
29 | _dirty[i] = true; | 29 | _dirty[i] = true; |
30 | } | 30 | } |
31 | 31 | ||
32 | // we draw everything alone | 32 | // we draw everything on our own |
33 | setBackgroundMode( QWidget::NoBackground ); | 33 | setBackgroundMode( QWidget::NoBackground ); |
34 | } | 34 | } |
35 | 35 | ||
36 | 36 | ||
37 | void MFrequencySpectrum::drawTopLine( QPainter* p, int x, int y, int width, const QColor& c ) | ||
38 | { | ||
39 | p->setPen( c.light() ); | ||
40 | p->drawLine( x, y, x+width-1, y ); | ||
41 | } | ||
42 | |||
43 | |||
44 | void MFrequencySpectrum::drawBottomLine( QPainter* p, int x, int y, int width, const QColor& c ) | ||
45 | { | ||
46 | p->setPen( c.dark() ); | ||
47 | p->drawLine( x, y, x+width-1, y ); | ||
48 | } | ||
49 | |||
50 | |||
37 | void MFrequencySpectrum::drawLine( QPainter* p, int x, int y, int width, const QColor& c ) | 51 | void MFrequencySpectrum::drawLine( QPainter* p, int x, int y, int width, const QColor& c ) |
38 | { | 52 | { |
39 | p->setPen( c.light() ); | 53 | p->setPen( c.light() ); |
40 | p->drawPoint( x++, y ); | 54 | p->drawPoint( x++, y ); |
41 | p->setPen( c ); | 55 | p->setPen( c ); |
42 | p->drawLine( x, y, x+width-2, y ); | 56 | p->drawLine( x, y, x+width-2, y ); |
43 | p->setPen( c.dark() ); | 57 | p->setPen( c.dark() ); |
44 | p->drawPoint( x+width-1, y ); | 58 | p->drawPoint( x+width-1, y ); |
45 | } | 59 | } |
46 | 60 | ||
47 | 61 | ||
48 | void MFrequencySpectrum::drawBar( QPainter* p, int x, int y, int width, int height, int maxheight ) | 62 | void MFrequencySpectrum::drawBar( QPainter* p, int x, int y, int width, int height, int maxheight ) |
49 | { | 63 | { |
50 | int h1 = 133; int h2 = 0; | 64 | int h1 = 133; int h2 = 0; |
51 | int s1 = 200; int s2 = 255; | 65 | int s1 = 200; int s2 = 255; |
52 | int v1 = 140; int v2 = 255; | 66 | int v1 = 140; int v2 = 255; |
53 | 67 | ||
54 | /*int h1 = 196; int h2 = 194; | 68 | /*int h1 = 196; int h2 = 194; |
55 | int s1 = 85; int s2 = 15; | 69 | int s1 = 85; int s2 = 15; |
56 | int v1 = 95; int v2 = 237;*/ | 70 | int v1 = 95; int v2 = 237;*/ |
57 | 71 | ||
58 | QColor c( 120, 60, 200 ); | 72 | QColor c( 120, 60, 200 ); |
59 | for ( int i = 0; i < height; ++i ) | 73 | for ( int i = 0; i < height; ++i ) |
60 | { | 74 | { |
61 | int h = (h2-h1)*i/maxheight + h1; | 75 | int h = (h2-h1)*i/maxheight + h1; |
62 | int s = (s2-s1)*i/maxheight + s1; | 76 | int s = (s2-s1)*i/maxheight + s1; |
63 | int v = (v2-v1)*i/maxheight + v1; | 77 | int v = (v2-v1)*i/maxheight + v1; |
64 | drawLine( p, x, y-i, width, QColor( h,s,v, QColor::Hsv ) ); | 78 | if ( i == 0 ) |
79 | drawBottomLine( p, x, y-i, width, QColor( h,s,v, QColor::Hsv ) ); | ||
80 | else if ( i == height-1 ) | ||
81 | drawTopLine( p, x, y-i, width, QColor( h,s,v, QColor::Hsv ) ); | ||
82 | else | ||
83 | drawLine( p, x, y-i, width, QColor( h,s,v, QColor::Hsv ) ); | ||
65 | } | 84 | } |
66 | |||
67 | /*for ( int i = height; i < maxheight; ++i ) | ||
68 | drawLine( p, x, y-i, width, QColor( 47, 68, 76 ) );*/ | ||
69 | |||
70 | } | 85 | } |
71 | 86 | ||
72 | 87 | ||
73 | void MFrequencySpectrum::paintEvent( QPaintEvent* e ) | 88 | void MFrequencySpectrum::paintEvent( QPaintEvent* e ) |
74 | { | 89 | { |
75 | QPixmap pm( size() ); | 90 | QPixmap pm( size() ); |
76 | QPainter p; | 91 | QPainter p; |
77 | p.begin( &pm ); | 92 | p.begin( &pm ); |
78 | p.drawTiledPixmap( 0, 0, size().width(), size().height(), QPixmap( (const char**) &background ) ); | 93 | p.drawTiledPixmap( 0, 0, size().width(), size().height(), QPixmap( (const char**) &background ) ); |
79 | 94 | ||
80 | int xmargin = 5; | 95 | int xmargin = 5; |
81 | int ymargin = 2; | 96 | int ymargin = 2; |
82 | int y = size().height() - 2 * ymargin; | 97 | int y = size().height() - 2 * ymargin; |
83 | int x = 0; | 98 | int x = 0; |
84 | int width = ( size().width() - 2 * xmargin ) / _channels; | 99 | int width = ( size().width() - 2 * xmargin ) / _channels; |
85 | 100 | ||
86 | for ( int i = 0; i < _channels; ++i ) | 101 | for ( int i = 0; i < _channels; ++i ) |
87 | { | 102 | { |
88 | if ( _dirty[i] ) | 103 | if ( _dirty[i] ) |
89 | { | 104 | { |
90 | drawBar( &p, xmargin + x, y - ymargin, width-3, _values[i]*y/100, y ); | 105 | drawBar( &p, xmargin + x, y - ymargin, width-3, _values[i]*y/100, y ); |
91 | _dirty[i] = false; | 106 | _dirty[i] = false; |
92 | } | 107 | } |
93 | x+= width; | 108 | x+= width; |
94 | } | 109 | } |
95 | 110 | ||
96 | p.end(); | 111 | p.end(); |
97 | bitBlt( this, 0, 0, &pm ); | 112 | bitBlt( this, 0, 0, &pm ); |
98 | } | 113 | } |
99 | 114 | ||
100 | 115 | ||
116 | void MFrequencySpectrum::mousePressEvent( QMouseEvent* e ) | ||
117 | { | ||
118 | int xmargin = 5; | ||
119 | int ymargin = 2; | ||
120 | int y = size().height() - 2 * ymargin; | ||
121 | int x = 0; | ||
122 | int width = ( size().width() - 2 * xmargin ) / _channels; | ||
123 | |||
124 | QPoint pos = e->pos(); | ||
125 | int channel = ( pos.x()-xmargin ) / width; | ||
126 | int height = 100 - ( pos.y()-ymargin )*100/y; | ||
127 | if ( channel < 15 ) _values[channel] = height; | ||
128 | |||
129 | } | ||
130 | |||
131 | |||
101 | Legende::Legende( int channels, QWidget* parent, const char* name, WFlags f ) | 132 | Legende::Legende( int channels, QWidget* parent, const char* name, WFlags f ) |
102 | :QFrame( parent, name, f ), _channels( channels ) | 133 | :QFrame( parent, name, f ), _channels( channels ) |
103 | { | 134 | { |
104 | setLineWidth( 2 ); | 135 | setLineWidth( 2 ); |
105 | setFrameStyle( Panel + Sunken ); | 136 | setFrameStyle( Panel + Sunken ); |
106 | setFixedHeight( 16 ); | 137 | setFixedHeight( 16 ); |
107 | 138 | ||
108 | } | 139 | } |
109 | 140 | ||
110 | 141 | ||
111 | void Legende::drawContents( QPainter* p ) | 142 | void Legende::drawContents( QPainter* p ) |
112 | { | 143 | { |
113 | int xmargin = 5; | 144 | int xmargin = 5; |
114 | int ymargin = 2; | 145 | int ymargin = 2; |
115 | int x = 0; | 146 | int x = 0; |
116 | int width = ( contentsRect().width() - 2 * xmargin ) / _channels; | 147 | int width = ( contentsRect().width() - 2 * xmargin ) / _channels; |
117 | 148 | ||
118 | for ( int i = 0; i < _channels; ++i ) | 149 | for ( int i = 0; i < _channels; ++i ) |
119 | p->drawText( xmargin + (width*i), 12, QString().sprintf( "%02d", i+1 ) ); | 150 | p->drawText( xmargin + (width*i), 12, QString().sprintf( "%02d", i+1 ) ); |
120 | } | 151 | } |
121 | 152 | ||
122 | 153 | ||
123 | MGraphWindow::MGraphWindow( QWidget* parent, const char* name, WFlags f ) | 154 | MGraphWindow::MGraphWindow( QWidget* parent, const char* name, WFlags f ) |
124 | :QVBox( parent, name, f ) | 155 | :QVBox( parent, name, f ) |
125 | { | 156 | { |
126 | spectrum = new MFrequencySpectrum( 14, this ); | 157 | spectrum = new MFrequencySpectrum( 14, this ); |
127 | legende = new Legende( 14, this ); | 158 | legende = new Legende( 14, this ); |
128 | startTimer( 50 ); //FIXME: tweak | 159 | startTimer( 50 ); |
129 | |||
130 | //testGraph(); | ||
131 | |||
132 | }; | 160 | }; |
133 | 161 | ||
134 | 162 | ||
135 | void MGraphWindow::testGraph() | 163 | void MGraphWindow::testGraph() |
136 | { | 164 | { |
137 | static int i = 0; | 165 | static int i = 0; |
138 | spectrum->setValue( i++, 100 ); | 166 | spectrum->setValue( i++, 100 ); |
139 | if ( i == 14 ) i = 0; | 167 | if ( i == 14 ) i = 0; |
140 | QTimer::singleShot( 2000, this, SLOT( testGraph() ) ); | 168 | QTimer::singleShot( 2000, this, SLOT( testGraph() ) ); |
141 | 169 | ||
142 | } | 170 | } |
143 | 171 | ||
144 | 172 | ||
145 | void MGraphWindow::timerEvent( QTimerEvent* e ) | 173 | void MGraphWindow::timerEvent( QTimerEvent* e ) |
146 | { | 174 | { |
147 | for ( int i = 0; i < 14; i++ ) | 175 | for ( int i = 0; i < 14; i++ ) |
148 | { | 176 | { |
149 | spectrum->decrease( i, 1 ); //TODO: make this customizable? | 177 | spectrum->decrease( i, 1 ); |
150 | } | 178 | } |
151 | spectrum->repaint(); | 179 | spectrum->repaint(); |
152 | } | 180 | } |
153 | 181 | ||
154 | 182 | ||
155 | void MGraphWindow::traffic( int channel, int signal ) | 183 | void MGraphWindow::traffic( int channel, int signal ) |
156 | { | 184 | { |
157 | spectrum->setValue( channel-1, signal ); | 185 | spectrum->setValue( channel-1, signal ); |
158 | } | 186 | } |
159 | 187 | ||
diff --git a/noncore/net/wellenreiter/gui/graphwindow.h b/noncore/net/wellenreiter/gui/graphwindow.h index 4050065..1e00ae7 100644 --- a/noncore/net/wellenreiter/gui/graphwindow.h +++ b/noncore/net/wellenreiter/gui/graphwindow.h | |||
@@ -22,50 +22,53 @@ | |||
22 | class MFrequencySpectrum : public QWidget | 22 | class MFrequencySpectrum : public QWidget |
23 | { | 23 | { |
24 | public: | 24 | public: |
25 | MFrequencySpectrum( int channels, QWidget* parent = 0, const char* name = "MFrequencySpectrum", WFlags f = 0 ); | 25 | MFrequencySpectrum( int channels, QWidget* parent = 0, const char* name = "MFrequencySpectrum", WFlags f = 0 ); |
26 | int value( int channel ) const { return _values[channel]; }; | 26 | int value( int channel ) const { return _values[channel]; }; |
27 | void setValue( int channel, int value ) | 27 | void setValue( int channel, int value ) |
28 | { | 28 | { |
29 | if ( value > _values[channel] ) | 29 | if ( value > _values[channel] ) |
30 | { | 30 | { |
31 | _values[channel] = value; | 31 | _values[channel] = value; |
32 | _dirty[channel] = true; | 32 | _dirty[channel] = true; |
33 | } | 33 | } |
34 | }; | 34 | }; |
35 | void decrease( int channel, int amount ) | 35 | void decrease( int channel, int amount ) |
36 | { | 36 | { |
37 | if ( _values[channel] >= amount ) | 37 | if ( _values[channel] >= amount ) |
38 | { | 38 | { |
39 | _values[channel] -= amount; | 39 | _values[channel] -= amount; |
40 | _dirty[channel] = true; | 40 | _dirty[channel] = true; |
41 | } | 41 | } |
42 | }; | 42 | }; |
43 | 43 | ||
44 | protected: | 44 | protected: |
45 | virtual void paintEvent( QPaintEvent* ); | 45 | virtual void paintEvent( QPaintEvent* ); |
46 | virtual void mousePressEvent( QMouseEvent* ); | ||
46 | 47 | ||
47 | void drawLine( QPainter* p, int x, int y, int width, const QColor& c ); | 48 | void drawLine( QPainter* p, int x, int y, int width, const QColor& c ); |
49 | void drawTopLine( QPainter* p, int x, int y, int width, const QColor& c ); | ||
50 | void drawBottomLine( QPainter* p, int x, int y, int width, const QColor& c ); | ||
48 | void MFrequencySpectrum::drawBar( QPainter* p, int x, int y, int width, int height, int maxheight ); | 51 | void MFrequencySpectrum::drawBar( QPainter* p, int x, int y, int width, int height, int maxheight ); |
49 | 52 | ||
50 | private: | 53 | private: |
51 | int _channels; | 54 | int _channels; |
52 | int* _values; | 55 | int* _values; |
53 | bool* _dirty; | 56 | bool* _dirty; |
54 | }; | 57 | }; |
55 | 58 | ||
56 | 59 | ||
57 | class Legende : public QFrame | 60 | class Legende : public QFrame |
58 | { | 61 | { |
59 | public: | 62 | public: |
60 | Legende( int channels, QWidget* parent = 0, const char* name = "Legende", WFlags f = 0 ); | 63 | Legende( int channels, QWidget* parent = 0, const char* name = "Legende", WFlags f = 0 ); |
61 | 64 | ||
62 | protected: | 65 | protected: |
63 | virtual void drawContents( QPainter* ); | 66 | virtual void drawContents( QPainter* ); |
64 | 67 | ||
65 | private: | 68 | private: |
66 | int _channels; | 69 | int _channels; |
67 | }; | 70 | }; |
68 | 71 | ||
69 | 72 | ||
70 | class MGraphWindow : public QVBox | 73 | class MGraphWindow : public QVBox |
71 | { | 74 | { |
diff --git a/noncore/net/wellenreiter/gui/protolistview.cpp b/noncore/net/wellenreiter/gui/protolistview.cpp index d4b0dfe..f4b45d0 100644 --- a/noncore/net/wellenreiter/gui/protolistview.cpp +++ b/noncore/net/wellenreiter/gui/protolistview.cpp | |||
@@ -7,111 +7,118 @@ | |||
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 | #include "protolistview.h" | 17 | #include "protolistview.h" |
18 | 18 | ||
19 | #include <qcheckbox.h> | 19 | #include <qcheckbox.h> |
20 | #include <qcombobox.h> | 20 | #include <qcombobox.h> |
21 | #include <qhbox.h> | 21 | #include <qhbox.h> |
22 | #include <qvbox.h> | 22 | #include <qvbox.h> |
23 | #include <qpalette.h> | 23 | #include <qpalette.h> |
24 | #include <qcolor.h> | 24 | #include <qcolor.h> |
25 | #include <qlabel.h> | 25 | #include <qlabel.h> |
26 | #include <qframe.h> | 26 | #include <qframe.h> |
27 | 27 | ||
28 | ProtocolListView::ProtocolListView( QWidget* parent, const char* name, WFlags f ) | 28 | ProtocolListView::ProtocolListView( QWidget* parent, const char* name, WFlags f ) |
29 | :QScrollView( parent, name, f ) | 29 | :QScrollView( parent, name, f ) |
30 | { | 30 | { |
31 | actions = ( QString( "parsePackets" ) == QString( name ) ); | 31 | parse = ( QString( "parsePackets" ) == QString( name ) ); |
32 | 32 | ||
33 | setMargins( 3, 3, 0, 0 ); | 33 | setMargins( 3, 3, 0, 0 ); |
34 | viewport()->setBackgroundColor( QCheckBox(0).palette().color( QPalette::Active, QColorGroup::Background ) ); | 34 | viewport()->setBackgroundColor( QCheckBox(0).palette().color( QPalette::Active, QColorGroup::Background ) ); |
35 | 35 | ||
36 | vbox = new QVBox( viewport() ); | 36 | vbox = new QVBox( viewport() ); |
37 | vbox->setSpacing( 1 ); | 37 | vbox->setSpacing( 1 ); |
38 | addChild( vbox ); | 38 | addChild( vbox ); |
39 | 39 | ||
40 | QHBox* hbox = new QHBox( vbox ); | 40 | QHBox* hbox = new QHBox( vbox ); |
41 | hbox->setSpacing( 40 ); | 41 | hbox->setSpacing( 40 ); |
42 | new QLabel( tr( "Protocol Family" ), hbox ); | 42 | new QLabel( tr( "Protocol Family" ), hbox ); |
43 | if ( actions ) new QLabel( tr( "Perform Action" ), hbox ); | 43 | new QLabel( tr( "Perform Action" ), hbox ); |
44 | QFrame* frame = new QFrame( vbox ); | 44 | QFrame* frame = new QFrame( vbox ); |
45 | frame->setFrameStyle( QFrame::HLine + QFrame::Sunken ); | 45 | frame->setFrameStyle( QFrame::HLine + QFrame::Sunken ); |
46 | 46 | ||
47 | //TODO: hardcoded for now...a protocol database would be nice!? | 47 | //TODO: hardcoded for now...a protocol database would be nice!? |
48 | 48 | ||
49 | //addProtocol( "Ethernet" ); | 49 | //addProtocol( "Ethernet" ); |
50 | addProtocol( "Prism" ); | 50 | addProtocol( "Prism" ); |
51 | //addProtocol( "802.11" ); | 51 | //addProtocol( "802.11" ); |
52 | addProtocol( "802.11 Management" ); | 52 | addProtocol( "802.11 Management" ); |
53 | addProtocol( "802.11 SSID" ); | 53 | addProtocol( "802.11 SSID" ); |
54 | addProtocol( "802.11 Rates" ); | 54 | addProtocol( "802.11 Rates" ); |
55 | addProtocol( "802.11 CF" ); | 55 | addProtocol( "802.11 CF" ); |
56 | addProtocol( "802.11 FH" ); | 56 | addProtocol( "802.11 FH" ); |
57 | addProtocol( "802.11 DS" ); | 57 | addProtocol( "802.11 DS" ); |
58 | addProtocol( "802.11 Tim" ); | 58 | addProtocol( "802.11 Tim" ); |
59 | addProtocol( "802.11 IBSS" ); | 59 | addProtocol( "802.11 IBSS" ); |
60 | addProtocol( "802.11 Challenge" ); | 60 | addProtocol( "802.11 Challenge" ); |
61 | addProtocol( "802.11 Data" ); | 61 | addProtocol( "802.11 Data" ); |
62 | addProtocol( "802.11 LLC" ); | 62 | addProtocol( "802.11 LLC" ); |
63 | addProtocol( "802.11 Data" ); | 63 | addProtocol( "802.11 Data" ); |
64 | addProtocol( "IP" ); | 64 | addProtocol( "IP" ); |
65 | addProtocol( "ARP" ); | 65 | addProtocol( "ARP" ); |
66 | addProtocol( "UDP" ); | 66 | addProtocol( "UDP" ); |
67 | addProtocol( "TCP" ); | 67 | addProtocol( "TCP" ); |
68 | } | 68 | } |
69 | 69 | ||
70 | 70 | ||
71 | ProtocolListView::~ProtocolListView() | 71 | ProtocolListView::~ProtocolListView() |
72 | { | 72 | { |
73 | } | 73 | } |
74 | 74 | ||
75 | 75 | ||
76 | void ProtocolListView::addProtocol( const QString& name ) | 76 | void ProtocolListView::addProtocol( const QString& name ) |
77 | { | 77 | { |
78 | QHBox* hbox = new QHBox( vbox ); | 78 | QHBox* hbox = new QHBox( vbox ); |
79 | new QCheckBox( name, hbox, (const char*) name ); | 79 | new QCheckBox( name, hbox, (const char*) name ); |
80 | 80 | ||
81 | if ( actions ) | 81 | if ( parse ) |
82 | { | 82 | { |
83 | QComboBox* combo = new QComboBox( hbox, (const char*) name ); | 83 | QComboBox* combo = new QComboBox( hbox, (const char*) name ); |
84 | #ifdef QWS | 84 | #ifdef QWS |
85 | combo->setFixedWidth( 75 ); | 85 | combo->setFixedWidth( 75 ); |
86 | #endif | 86 | #endif |
87 | combo->insertItem( "Ignore" ); | 87 | combo->insertItem( "Ignore" ); |
88 | combo->insertItem( "Discard!" ); | ||
88 | combo->insertItem( "TouchSound" ); | 89 | combo->insertItem( "TouchSound" ); |
89 | combo->insertItem( "AlarmSound" ); | 90 | combo->insertItem( "AlarmSound" ); |
90 | combo->insertItem( "KeySound" ); | 91 | combo->insertItem( "KeySound" ); |
91 | combo->insertItem( "LedOn" ); | 92 | combo->insertItem( "LedOn" ); |
92 | combo->insertItem( "LedOff" ); | 93 | combo->insertItem( "LedOff" ); |
93 | combo->insertItem( "LogMessage" ); | 94 | combo->insertItem( "LogMessage" ); |
94 | combo->insertItem( "MessageBox" ); | 95 | combo->insertItem( "MessageBox" ); |
95 | } | 96 | } |
97 | else | ||
98 | { | ||
99 | QComboBox* combo = new QComboBox( hbox, (const char*) name ); | ||
100 | #ifdef QWS | ||
101 | combo->setFixedWidth( 75 ); | ||
102 | #endif | ||
103 | combo->insertItem( "Pass" ); | ||
104 | combo->insertItem( "Discard!" ); | ||
105 | } | ||
96 | } | 106 | } |
97 | 107 | ||
98 | 108 | ||
99 | bool ProtocolListView::isProtocolChecked( const QString& name ) | 109 | bool ProtocolListView::isProtocolChecked( const QString& name ) |
100 | { | 110 | { |
101 | QCheckBox* box = (QCheckBox*) child( (const char*) name ); | 111 | QCheckBox* box = (QCheckBox*) child( (const char*) name ); |
102 | return ( box && box->isOn() ); | 112 | return ( box && box->isOn() ); |
103 | } | 113 | } |
104 | 114 | ||
105 | 115 | ||
106 | QString ProtocolListView::protocolAction( const QString& name ) | 116 | QString ProtocolListView::protocolAction( const QString& name ) |
107 | { | 117 | { |
108 | //QObject * child ( const char * objName, const char * inheritsClass = 0, | ||
109 | // bool recursiveSearch = TRUE ) | ||
110 | |||
111 | QComboBox* combo = (QComboBox*) child( (const char*) name, "QComboBox" ); | 118 | QComboBox* combo = (QComboBox*) child( (const char*) name, "QComboBox" ); |
112 | if ( combo ) | 119 | if ( combo ) |
113 | return combo->currentText(); | 120 | return combo->currentText(); |
114 | else | 121 | else |
115 | return "<unknown>"; | 122 | return "<unknown>"; |
116 | } | 123 | } |
117 | 124 | ||
diff --git a/noncore/net/wellenreiter/gui/protolistview.h b/noncore/net/wellenreiter/gui/protolistview.h index 166b648..8b460cb 100644 --- a/noncore/net/wellenreiter/gui/protolistview.h +++ b/noncore/net/wellenreiter/gui/protolistview.h | |||
@@ -1,47 +1,45 @@ | |||
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 PROTOLISTVIEW_H | 16 | #ifndef PROTOLISTVIEW_H |
17 | #define PROTOLISTVIEW_H | 17 | #define PROTOLISTVIEW_H |
18 | 18 | ||
19 | #include <qscrollview.h> | 19 | #include <qscrollview.h> |
20 | #include <qdict.h> | 20 | #include <qdict.h> |
21 | //#include <qcheckbox.h> | ||
22 | //#include <qcombobox.h> | ||
23 | class QCheckBox; | 21 | class QCheckBox; |
24 | class QComboBox; | 22 | class QComboBox; |
25 | 23 | ||
26 | class QVBox; | 24 | class QVBox; |
27 | 25 | ||
28 | class ProtocolListView : public QScrollView | 26 | class ProtocolListView : public QScrollView |
29 | { | 27 | { |
30 | public: | 28 | public: |
31 | ProtocolListView( QWidget* parent = 0, const char* name = 0, WFlags f = 0 ); | 29 | ProtocolListView( QWidget* parent = 0, const char* name = 0, WFlags f = 0 ); |
32 | virtual ~ProtocolListView(); | 30 | virtual ~ProtocolListView(); |
33 | 31 | ||
34 | bool isProtocolChecked( const QString& name ); | 32 | bool isProtocolChecked( const QString& name ); |
35 | QString protocolAction( const QString& name ); | 33 | QString protocolAction( const QString& name ); |
36 | 34 | ||
37 | protected: | 35 | protected: |
38 | virtual void addProtocol( const QString& name ); | 36 | virtual void addProtocol( const QString& name ); |
39 | 37 | ||
40 | private: | 38 | private: |
41 | QVBox* vbox; | 39 | QVBox* vbox; |
42 | bool actions; | 40 | bool parse; |
43 | }; | 41 | }; |
44 | 42 | ||
45 | 43 | ||
46 | 44 | ||
47 | #endif // PROTOLISTVIEW_H | 45 | #endif // PROTOLISTVIEW_H |
diff --git a/noncore/net/wellenreiter/gui/wellenreiter.cpp b/noncore/net/wellenreiter/gui/wellenreiter.cpp index edf7dcf..965f6b0 100644 --- a/noncore/net/wellenreiter/gui/wellenreiter.cpp +++ b/noncore/net/wellenreiter/gui/wellenreiter.cpp | |||
@@ -130,54 +130,54 @@ void Wellenreiter::channelHopped(int c) | |||
130 | { | 130 | { |
131 | QString right; | 131 | QString right; |
132 | right.fill( '.', iface->channels()-c ); | 132 | right.fill( '.', iface->channels()-c ); |
133 | title.append( right ); | 133 | title.append( right ); |
134 | } | 134 | } |
135 | title.append( "]" ); | 135 | title.append( "]" ); |
136 | //title.append( QString().sprintf( " %02d", c ) ); | 136 | //title.append( QString().sprintf( " %02d", c ) ); |
137 | assert( parent() ); | 137 | assert( parent() ); |
138 | ( (QMainWindow*) parent() )->setCaption( title ); | 138 | ( (QMainWindow*) parent() )->setCaption( title ); |
139 | } | 139 | } |
140 | 140 | ||
141 | 141 | ||
142 | void Wellenreiter::handleNotification( OPacket* p ) | 142 | void Wellenreiter::handleNotification( OPacket* p ) |
143 | { | 143 | { |
144 | QObjectList* l = p->queryList(); | 144 | QObjectList* l = p->queryList(); |
145 | QObjectListIt it( *l ); | 145 | QObjectListIt it( *l ); |
146 | QObject* o; | 146 | QObject* o; |
147 | 147 | ||
148 | while ( (o = it.current()) != 0 ) | 148 | while ( (o = it.current()) != 0 ) |
149 | { | 149 | { |
150 | QString name = it.current()->name(); | 150 | QString name = it.current()->name(); |
151 | if ( configwindow->parsePackets->isProtocolChecked( name ) ) | 151 | if ( configwindow->parsePackets->isProtocolChecked( name ) ) |
152 | { | 152 | { |
153 | QString action = configwindow->parsePackets->protocolAction( name ); | 153 | QString action = configwindow->parsePackets->protocolAction( name ); |
154 | qDebug( "action for '%s' seems to be '%s'", (const char*) name, (const char*) action ); | 154 | qDebug( "parsePacket-action for '%s' seems to be '%s'", (const char*) name, (const char*) action ); |
155 | doAction( action, name, p ); | 155 | doAction( action, name, p ); |
156 | } | 156 | } |
157 | else | 157 | else |
158 | { | 158 | { |
159 | qDebug( "protocol '%s' not checked.", (const char*) name ); | 159 | qDebug( "protocol '%s' not checked in parsePackets.", (const char*) name ); |
160 | } | 160 | } |
161 | ++it; | 161 | ++it; |
162 | } | 162 | } |
163 | } | 163 | } |
164 | 164 | ||
165 | 165 | ||
166 | void Wellenreiter::handleBeacon( OPacket* p, OWaveLanManagementPacket* beacon ) | 166 | void Wellenreiter::handleBeacon( OPacket* p, OWaveLanManagementPacket* beacon ) |
167 | { | 167 | { |
168 | QString type; | 168 | QString type; |
169 | if ( beacon->canIBSS() ) | 169 | if ( beacon->canIBSS() ) |
170 | { | 170 | { |
171 | type = "adhoc"; | 171 | type = "adhoc"; |
172 | } | 172 | } |
173 | else if ( beacon->canESS() ) | 173 | else if ( beacon->canESS() ) |
174 | { | 174 | { |
175 | type = "managed"; | 175 | type = "managed"; |
176 | } | 176 | } |
177 | else | 177 | else |
178 | { | 178 | { |
179 | qWarning( "Wellenreiter::invalid frame [possibly noise] detected!" ); | 179 | qWarning( "Wellenreiter::invalid frame [possibly noise] detected!" ); |
180 | return; | 180 | return; |
181 | } | 181 | } |
182 | 182 | ||
183 | OWaveLanManagementSSID* ssid = static_cast<OWaveLanManagementSSID*>( p->child( "802.11 SSID" ) ); | 183 | OWaveLanManagementSSID* ssid = static_cast<OWaveLanManagementSSID*>( p->child( "802.11 SSID" ) ); |
@@ -250,76 +250,120 @@ void Wellenreiter::handleData( OPacket* p, OWaveLanDataPacket* data ) | |||
250 | 250 | ||
251 | OARPPacket* arp = (OARPPacket*) p->child( "ARP" ); | 251 | OARPPacket* arp = (OARPPacket*) p->child( "ARP" ); |
252 | if ( arp ) | 252 | if ( arp ) |
253 | { | 253 | { |
254 | qDebug( "Received ARP traffic (type '%s'): ", (const char*) arp->type() ); | 254 | qDebug( "Received ARP traffic (type '%s'): ", (const char*) arp->type() ); |
255 | if ( arp->type() == "REQUEST" ) | 255 | if ( arp->type() == "REQUEST" ) |
256 | { | 256 | { |
257 | netView()->identify( arp->senderMacAddress().toString(), arp->senderIPV4Address().toString() ); | 257 | netView()->identify( arp->senderMacAddress().toString(), arp->senderIPV4Address().toString() ); |
258 | } | 258 | } |
259 | else if ( arp->type() == "REPLY" ) | 259 | else if ( arp->type() == "REPLY" ) |
260 | { | 260 | { |
261 | netView()->identify( arp->senderMacAddress().toString(), arp->senderIPV4Address().toString() ); | 261 | netView()->identify( arp->senderMacAddress().toString(), arp->senderIPV4Address().toString() ); |
262 | netView()->identify( arp->targetMacAddress().toString(), arp->targetIPV4Address().toString() ); | 262 | netView()->identify( arp->targetMacAddress().toString(), arp->targetIPV4Address().toString() ); |
263 | } | 263 | } |
264 | } | 264 | } |
265 | 265 | ||
266 | OIPPacket* ip = (OIPPacket*) p->child( "IP" ); | 266 | OIPPacket* ip = (OIPPacket*) p->child( "IP" ); |
267 | if ( ip ) | 267 | if ( ip ) |
268 | { | 268 | { |
269 | qDebug( "Received IP packet." ); | 269 | qDebug( "Received IP packet." ); |
270 | } | 270 | } |
271 | } | 271 | } |
272 | 272 | ||
273 | 273 | ||
274 | QObject* childIfToParse( OPacket* p, const QString& protocol ) | 274 | QObject* Wellenreiter::childIfToParse( OPacket* p, const QString& protocol ) |
275 | { | 275 | { |
276 | //FIXME: Implement | 276 | if ( configwindow->parsePackets->isProtocolChecked( protocol ) ) |
277 | if ( configwindow->parsePackets->protocolAction( protocol ) == "Discard!" ) | ||
278 | return 0; | ||
279 | |||
280 | return p->child( protocol ); | ||
281 | } | ||
282 | |||
283 | |||
284 | bool Wellenreiter::checkDumpPacket( OPacket* p ) | ||
285 | { | ||
286 | // 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 | ||
288 | if ( !configwindow->writeCaptureFile->isOn() ) | ||
289 | return false; | ||
290 | |||
291 | QObjectList* l = p->queryList(); | ||
292 | QObjectListIt it( *l ); | ||
293 | QObject* o; | ||
294 | |||
295 | while ( (o = it.current()) != 0 ) | ||
296 | { | ||
297 | QString name = it.current()->name(); | ||
298 | if ( configwindow->capturePackets->isProtocolChecked( name ) ) | ||
299 | { | ||
300 | QString action = configwindow->capturePackets->protocolAction( name ); | ||
301 | qDebug( "capturePackets-action for '%s' seems to be '%s'", (const char*) name, (const char*) action ); | ||
302 | if ( action == "Discard" ) | ||
303 | { | ||
304 | logwindow->log( QString().sprintf( "(i) dump-discarding of '%s' packet requested.", (const char*) name ) ); | ||
305 | return false; | ||
306 | } | ||
307 | } | ||
308 | else | ||
309 | { | ||
310 | qDebug( "protocol '%s' not checked in capturePackets.", (const char*) name ); | ||
311 | } | ||
312 | ++it; | ||
313 | } | ||
314 | return true; | ||
277 | } | 315 | } |
278 | 316 | ||
279 | 317 | ||
280 | void Wellenreiter::receivePacket( OPacket* p ) | 318 | void Wellenreiter::receivePacket( OPacket* p ) |
281 | { | 319 | { |
282 | hexWindow()->log( p->dump( 8 ) ); | 320 | hexWindow()->log( p->dump( 8 ) ); |
283 | 321 | ||
284 | handleNotification( p ); | 322 | if ( checkDumpPacket( p ) ) |
323 | { | ||
324 | pcap->dump( p ); | ||
325 | } | ||
285 | 326 | ||
286 | // check if we received a beacon frame | 327 | // check if we received a beacon frame |
287 | OWaveLanManagementPacket* beacon = static_cast<OWaveLanManagementPacket*>( p->child( "802.11 Management" ) ); | 328 | OWaveLanManagementPacket* beacon = static_cast<OWaveLanManagementPacket*>( childIfToParse( p, "802.11 Management" ) ); |
288 | if ( beacon && beacon->managementType() == "Beacon" ) | 329 | if ( beacon && beacon->managementType() == "Beacon" ) |
289 | { | 330 | { |
290 | handleBeacon( p, beacon ); | 331 | handleBeacon( p, beacon ); |
291 | return; | 332 | return; |
292 | } | 333 | } |
293 | 334 | ||
294 | //TODO: WEP check here | 335 | //TODO: WEP check here |
295 | 336 | ||
296 | // check for a data frame | 337 | // check for a data frame |
297 | OWaveLanDataPacket* data = static_cast<OWaveLanDataPacket*>( p->child( "802.11 Data" ) ); | 338 | OWaveLanDataPacket* data = static_cast<OWaveLanDataPacket*>( childIfToParse( p, "802.11 Data" ) ); |
298 | if ( data ) | 339 | if ( data ) |
299 | { | 340 | { |
300 | handleData( p, data ); | 341 | handleData( p, data ); |
301 | } | 342 | } |
343 | |||
344 | handleNotification( p ); | ||
345 | |||
302 | } | 346 | } |
303 | 347 | ||
304 | 348 | ||
305 | void Wellenreiter::stopClicked() | 349 | void Wellenreiter::stopClicked() |
306 | { | 350 | { |
307 | if ( iface ) | 351 | if ( iface ) |
308 | { | 352 | { |
309 | disconnect( SIGNAL( receivedPacket(OPacket*) ), this, SLOT( receivePacket(OPacket*) ) ); | 353 | disconnect( SIGNAL( receivedPacket(OPacket*) ), this, SLOT( receivePacket(OPacket*) ) ); |
310 | disconnect( SIGNAL( hopped(int) ), this, SLOT( channelHopped(int) ) ); | 354 | disconnect( SIGNAL( hopped(int) ), this, SLOT( channelHopped(int) ) ); |
311 | iface->setChannelHopping(); // stop hopping channels | 355 | iface->setChannelHopping(); // stop hopping channels |
312 | } | 356 | } |
313 | else | 357 | else |
314 | killTimers(); | 358 | killTimers(); |
315 | 359 | ||
316 | pcap->close(); | 360 | pcap->close(); |
317 | sniffing = false; | 361 | sniffing = false; |
318 | 362 | ||
319 | if ( iface ) | 363 | if ( iface ) |
320 | { | 364 | { |
321 | // switch off monitor mode | 365 | // switch off monitor mode |
322 | iface->setMonitorMode( false ); | 366 | iface->setMonitorMode( false ); |
323 | // switch off promisc flag | 367 | // switch off promisc flag |
324 | iface->setPromiscuousMode( false ); | 368 | iface->setPromiscuousMode( false ); |
325 | 369 | ||
@@ -373,55 +417,57 @@ void Wellenreiter::startClicked() | |||
373 | case DEVTYPE_WLAN_NG: iface->setMonitoring( new OWlanNGMonitoringInterface( iface, usePrism ) ); break; | 417 | case DEVTYPE_WLAN_NG: iface->setMonitoring( new OWlanNGMonitoringInterface( iface, usePrism ) ); break; |
374 | case DEVTYPE_HOSTAP: iface->setMonitoring( new OHostAPMonitoringInterface( iface, usePrism ) ); break; | 418 | case DEVTYPE_HOSTAP: iface->setMonitoring( new OHostAPMonitoringInterface( iface, usePrism ) ); break; |
375 | case DEVTYPE_ORINOCO: iface->setMonitoring( new OOrinocoMonitoringInterface( iface, usePrism ) ); break; | 419 | case DEVTYPE_ORINOCO: iface->setMonitoring( new OOrinocoMonitoringInterface( iface, usePrism ) ); break; |
376 | case DEVTYPE_MANUAL: QMessageBox::information( this, "Wellenreiter II", tr( "Bring your device into\nmonitor mode now." ) ); break; | 420 | case DEVTYPE_MANUAL: QMessageBox::information( this, "Wellenreiter II", tr( "Bring your device into\nmonitor mode now." ) ); break; |
377 | case DEVTYPE_FILE: qDebug( "Wellenreiter: Capturing from file '%s'", (const char*) interface ); break; | 421 | case DEVTYPE_FILE: qDebug( "Wellenreiter: Capturing from file '%s'", (const char*) interface ); break; |
378 | default: assert( 0 ); // shouldn't reach this | 422 | default: assert( 0 ); // shouldn't reach this |
379 | } | 423 | } |
380 | 424 | ||
381 | // switch device into monitor mode | 425 | // switch device into monitor mode |
382 | if ( cardtype < DEVTYPE_FILE ) | 426 | if ( cardtype < DEVTYPE_FILE ) |
383 | { | 427 | { |
384 | if ( cardtype != DEVTYPE_MANUAL ) | 428 | if ( cardtype != DEVTYPE_MANUAL ) |
385 | iface->setMonitorMode( true ); | 429 | iface->setMonitorMode( true ); |
386 | if ( !iface->monitorMode() ) | 430 | if ( !iface->monitorMode() ) |
387 | { | 431 | { |
388 | QMessageBox::warning( this, "Wellenreiter II", | 432 | QMessageBox::warning( this, "Wellenreiter II", |
389 | tr( "Can't set device into monitor mode." ) ); | 433 | tr( "Can't set device into monitor mode." ) ); |
390 | return; | 434 | return; |
391 | } | 435 | } |
392 | } | 436 | } |
393 | 437 | ||
394 | // open pcap and start sniffing | 438 | // open pcap and start sniffing |
395 | if ( cardtype != DEVTYPE_FILE ) | 439 | if ( cardtype != DEVTYPE_FILE ) |
396 | { | 440 | { |
397 | if ( configwindow->writeCaptureFile->isEnabled() ) //FIXME: bug!? | 441 | pcap->open( interface ); |
442 | |||
443 | if ( configwindow->writeCaptureFile->isOn() ) | ||
398 | { | 444 | { |
399 | QString dumpname( configwindow->captureFileName->text() ); | 445 | QString dumpname( configwindow->captureFileName->text() ); |
400 | dumpname.append( '-' ); | 446 | dumpname.append( '-' ); |
401 | dumpname.append( QTime::currentTime().toString().replace( QRegExp( ":" ), "-" ) ); | 447 | dumpname.append( QTime::currentTime().toString().replace( QRegExp( ":" ), "-" ) ); |
402 | dumpname.append( ".wellenreiter" ); | 448 | dumpname.append( ".wellenreiter" ); |
403 | pcap->open( interface, dumpname ); | 449 | pcap->openDumpFile( dumpname ); |
404 | } | 450 | } |
405 | else | 451 | else |
406 | { | 452 | { |
407 | pcap->open( interface ); | 453 | pcap->open( interface ); |
408 | } | 454 | } |
409 | } | 455 | } |
410 | else | 456 | else |
411 | { | 457 | { |
412 | pcap->open( QFile( interface ) ); | 458 | pcap->open( QFile( interface ) ); |
413 | } | 459 | } |
414 | 460 | ||
415 | if ( !pcap->isOpen() ) | 461 | if ( !pcap->isOpen() ) |
416 | { | 462 | { |
417 | QMessageBox::warning( this, "Wellenreiter II", | 463 | QMessageBox::warning( this, "Wellenreiter II", |
418 | tr( "Can't open packet capturer:\n" ) + QString(strerror( errno ) )); | 464 | tr( "Can't open packet capturer:\n" ) + QString(strerror( errno ) )); |
419 | return; | 465 | return; |
420 | } | 466 | } |
421 | 467 | ||
422 | // set capturer to non-blocking mode | 468 | // set capturer to non-blocking mode |
423 | pcap->setBlocking( false ); | 469 | pcap->setBlocking( false ); |
424 | 470 | ||
425 | // start channel hopper | 471 | // start channel hopper |
426 | if ( cardtype != DEVTYPE_FILE ) | 472 | if ( cardtype != DEVTYPE_FILE ) |
427 | iface->setChannelHopping( 1000 ); //use interval from config window | 473 | iface->setChannelHopping( 1000 ); //use interval from config window |
diff --git a/noncore/net/wellenreiter/gui/wellenreiter.h b/noncore/net/wellenreiter/gui/wellenreiter.h index e227a24..37e692c 100644 --- a/noncore/net/wellenreiter/gui/wellenreiter.h +++ b/noncore/net/wellenreiter/gui/wellenreiter.h | |||
@@ -48,42 +48,43 @@ class Wellenreiter : public WellenreiterBase { | |||
48 | MHexWindow* hexWindow() const { return hexwindow; }; | 48 | MHexWindow* hexWindow() const { return hexwindow; }; |
49 | bool isDaemonRunning() const { return sniffing; }; | 49 | bool isDaemonRunning() const { return sniffing; }; |
50 | 50 | ||
51 | bool sniffing; | 51 | bool sniffing; |
52 | 52 | ||
53 | protected: | 53 | protected: |
54 | virtual void timerEvent( QTimerEvent* ); | 54 | virtual void timerEvent( QTimerEvent* ); |
55 | 55 | ||
56 | public slots: | 56 | public slots: |
57 | void channelHopped(int); | 57 | void channelHopped(int); |
58 | void receivePacket(OPacket*); | 58 | void receivePacket(OPacket*); |
59 | void startClicked(); | 59 | void startClicked(); |
60 | void stopClicked(); | 60 | void stopClicked(); |
61 | 61 | ||
62 | signals: | 62 | signals: |
63 | void startedSniffing(); | 63 | void startedSniffing(); |
64 | void stoppedSniffing(); | 64 | void stoppedSniffing(); |
65 | 65 | ||
66 | private: | 66 | private: |
67 | void handleBeacon( OPacket* p, OWaveLanManagementPacket* beacon ); | 67 | void handleBeacon( OPacket* p, OWaveLanManagementPacket* beacon ); |
68 | void handleData( OPacket* p, OWaveLanDataPacket* data ); | 68 | void handleData( OPacket* p, OWaveLanDataPacket* data ); |
69 | void handleNotification( OPacket* p ); | 69 | void handleNotification( OPacket* p ); |
70 | void doAction( const QString& action, const QString& protocol, OPacket* p ); | 70 | void doAction( const QString& action, const QString& protocol, OPacket* p ); |
71 | QObject* childIfToParse( OPacket* p, const QString& protocol ); | 71 | QObject* childIfToParse( OPacket* p, const QString& protocol ); |
72 | 72 | bool checkDumpPacket( OPacket* p ); | |
73 | |||
73 | private: | 74 | private: |
74 | #ifdef QWS | 75 | #ifdef QWS |
75 | OSystem _system; // Opie Operating System identifier | 76 | OSystem _system; // Opie Operating System identifier |
76 | #endif | 77 | #endif |
77 | 78 | ||
78 | OWirelessNetworkInterface* iface; | 79 | OWirelessNetworkInterface* iface; |
79 | OPacketCapturer* pcap; | 80 | OPacketCapturer* pcap; |
80 | ManufacturerDB* manufacturerdb; | 81 | ManufacturerDB* manufacturerdb; |
81 | WellenreiterConfigWindow* configwindow; | 82 | WellenreiterConfigWindow* configwindow; |
82 | 83 | ||
83 | //void readConfig(); | 84 | //void readConfig(); |
84 | //void writeConfig(); | 85 | //void writeConfig(); |
85 | }; | 86 | }; |
86 | 87 | ||
87 | 88 | ||
88 | 89 | ||
89 | #endif | 90 | #endif |