summaryrefslogtreecommitdiff
path: root/noncore/net/wellenreiter/gui
authormickeyl <mickeyl>2003-05-08 09:12:24 (UTC)
committer mickeyl <mickeyl>2003-05-08 09:12:24 (UTC)
commit215b9cbd3d1316887674b92268610c8f63a5caaf (patch) (unidiff)
tree92f77edcb0f997cf180d545dd78a40fe23a44169 /noncore/net/wellenreiter/gui
parenteb1dba5550e63ab7b915d55048175e2992ab5447 (diff)
downloadopie-215b9cbd3d1316887674b92268610c8f63a5caaf.zip
opie-215b9cbd3d1316887674b92268610c8f63a5caaf.tar.gz
opie-215b9cbd3d1316887674b92268610c8f63a5caaf.tar.bz2
add fine tuning of parsing process - the semantics is not yet set in stone however...
Diffstat (limited to 'noncore/net/wellenreiter/gui') (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/net/wellenreiter/gui/configbase.ui149
-rw-r--r--noncore/net/wellenreiter/gui/graphwindow.cpp50
-rw-r--r--noncore/net/wellenreiter/gui/graphwindow.h3
-rw-r--r--noncore/net/wellenreiter/gui/protolistview.cpp19
-rw-r--r--noncore/net/wellenreiter/gui/protolistview.h4
-rw-r--r--noncore/net/wellenreiter/gui/wellenreiter.cpp64
-rw-r--r--noncore/net/wellenreiter/gui/wellenreiter.h3
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
@@ -2,26 +2,26 @@
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>
@@ -86,86 +86,36 @@
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>
@@ -411,56 +361,117 @@
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>
@@ -471,24 +482,28 @@
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>
@@ -856,14 +871,20 @@
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
@@ -20,29 +20,43 @@
20#include <qtimer.h> 20#include <qtimer.h>
21 21
22MFrequencySpectrum::MFrequencySpectrum( int channels, QWidget* parent, const char* name, WFlags f) 22MFrequencySpectrum::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
37void 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
44void 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
37void MFrequencySpectrum::drawLine( QPainter* p, int x, int y, int width, const QColor& c ) 51void 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
48void MFrequencySpectrum::drawBar( QPainter* p, int x, int y, int width, int height, int maxheight ) 62void MFrequencySpectrum::drawBar( QPainter* p, int x, int y, int width, int height, int maxheight )
@@ -52,30 +66,31 @@ void MFrequencySpectrum::drawBar( QPainter* p, int x, int y, int width, int heig
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
73void MFrequencySpectrum::paintEvent( QPaintEvent* e ) 88void 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;
@@ -89,24 +104,40 @@ void MFrequencySpectrum::paintEvent( QPaintEvent* e )
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
116void 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
101Legende::Legende( int channels, QWidget* parent, const char* name, WFlags f ) 132Legende::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
111void Legende::drawContents( QPainter* p ) 142void Legende::drawContents( QPainter* p )
112{ 143{
@@ -116,44 +147,41 @@ void Legende::drawContents( QPainter* p )
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
123MGraphWindow::MGraphWindow( QWidget* parent, const char* name, WFlags f ) 154MGraphWindow::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
135void MGraphWindow::testGraph() 163void 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
145void MGraphWindow::timerEvent( QTimerEvent* e ) 173void 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
155void MGraphWindow::traffic( int channel, int signal ) 183void 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
@@ -34,26 +34,29 @@ class MFrequencySpectrum : public QWidget
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
57class Legende : public QFrame 60class Legende : public QFrame
58{ 61{
59 public: 62 public:
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
@@ -19,37 +19,37 @@
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
28ProtocolListView::ProtocolListView( QWidget* parent, const char* name, WFlags f ) 28ProtocolListView::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" );
@@ -69,49 +69,56 @@ ProtocolListView::ProtocolListView( QWidget* parent, const char* name, WFlags f
69 69
70 70
71ProtocolListView::~ProtocolListView() 71ProtocolListView::~ProtocolListView()
72{ 72{
73} 73}
74 74
75 75
76void ProtocolListView::addProtocol( const QString& name ) 76void 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
99bool ProtocolListView::isProtocolChecked( const QString& name ) 109bool 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
106QString ProtocolListView::protocolAction( const QString& name ) 116QString 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
@@ -9,39 +9,37 @@
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>
23class QCheckBox; 21class QCheckBox;
24class QComboBox; 22class QComboBox;
25 23
26class QVBox; 24class QVBox;
27 25
28class ProtocolListView : public QScrollView 26class 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
@@ -142,30 +142,30 @@ void Wellenreiter::channelHopped(int c)
142void Wellenreiter::handleNotification( OPacket* p ) 142void 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
166void Wellenreiter::handleBeacon( OPacket* p, OWaveLanManagementPacket* beacon ) 166void 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";
@@ -262,52 +262,96 @@ void Wellenreiter::handleData( OPacket* p, OWaveLanDataPacket* data )
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
274QObject* childIfToParse( OPacket* p, const QString& protocol ) 274QObject* 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
284bool 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
280void Wellenreiter::receivePacket( OPacket* p ) 318void 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
305void Wellenreiter::stopClicked() 349void 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
@@ -385,31 +429,33 @@ void Wellenreiter::startClicked()
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() )
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
@@ -60,25 +60,26 @@ class Wellenreiter : public WellenreiterBase {
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();