author | mickeyl <mickeyl> | 2004-05-02 20:08:30 (UTC) |
---|---|---|
committer | mickeyl <mickeyl> | 2004-05-02 20:08:30 (UTC) |
commit | 109ed5f2a1cdfeb3680c9ec057a1083fcf8fab95 (patch) (unidiff) | |
tree | f7484ada7bff7e4f7a91184f6a8e078af6053dca | |
parent | 8602449caa5a055bd5f033e3792d0a59a0b41bfa (diff) | |
download | opie-109ed5f2a1cdfeb3680c9ec057a1083fcf8fab95.zip opie-109ed5f2a1cdfeb3680c9ec057a1083fcf8fab95.tar.gz opie-109ed5f2a1cdfeb3680c9ec057a1083fcf8fab95.tar.bz2 |
PacketViewer improvements:
- expose buffer size through API
- improve packet viewer logic
- display time/date of capture + capture length
-rw-r--r-- | noncore/net/wellenreiter/gui/configwindow.cpp | 27 | ||||
-rw-r--r-- | noncore/net/wellenreiter/gui/configwindow.h | 2 | ||||
-rw-r--r-- | noncore/net/wellenreiter/gui/packetview.cpp | 68 | ||||
-rw-r--r-- | noncore/net/wellenreiter/gui/packetview.h | 12 | ||||
-rw-r--r-- | noncore/net/wellenreiter/gui/wellenreiter.cpp | 2 |
5 files changed, 76 insertions, 35 deletions
diff --git a/noncore/net/wellenreiter/gui/configwindow.cpp b/noncore/net/wellenreiter/gui/configwindow.cpp index 279b39c..89ed24c 100644 --- a/noncore/net/wellenreiter/gui/configwindow.cpp +++ b/noncore/net/wellenreiter/gui/configwindow.cpp | |||
@@ -37,9 +37,10 @@ using namespace Opie::Net; | |||
37 | #include <qlayout.h> | 37 | #include <qlayout.h> |
38 | #include <qmap.h> | 38 | #include <qmap.h> |
39 | #include <qpushbutton.h> | 39 | #include <qpushbutton.h> |
40 | #include <qradiobutton.h> | ||
41 | #include <qspinbox.h> | ||
40 | #include <qtabwidget.h> | 42 | #include <qtabwidget.h> |
41 | #include <qtoolbutton.h> | 43 | #include <qtoolbutton.h> |
42 | #include <qspinbox.h> | ||
43 | #include <qtextstream.h> | 44 | #include <qtextstream.h> |
44 | 45 | ||
45 | /* STD */ | 46 | /* STD */ |
@@ -112,7 +113,7 @@ void WellenreiterConfigWindow::performAutodetection() | |||
112 | // and sleep a second, so that it looks | 113 | // and sleep a second, so that it looks |
113 | // like we're actually doing something fancy... ;-) | 114 | // like we're actually doing something fancy... ;-) |
114 | 115 | ||
115 | odebug << "WellenreiterConfigWindow::performAutodetection()" << oendl; | 116 | odebug << "WellenreiterConfigWindow::performAutodetection()" << oendl; |
116 | 117 | ||
117 | // try to guess device type | 118 | // try to guess device type |
118 | QFile m( "/proc/modules" ); | 119 | QFile m( "/proc/modules" ); |
@@ -133,7 +134,7 @@ void WellenreiterConfigWindow::performAutodetection() | |||
133 | { | 134 | { |
134 | deviceType->setCurrentItem( devicetype ); | 135 | deviceType->setCurrentItem( devicetype ); |
135 | _guess = devicetype; | 136 | _guess = devicetype; |
136 | odebug << "Wellenreiter: guessed device type to be #" << devicetype << "" << oendl; | 137 | odebug << "Wellenreiter: guessed device type to be #" << devicetype << "" << oendl; |
137 | } | 138 | } |
138 | } | 139 | } |
139 | } | 140 | } |
@@ -237,7 +238,7 @@ void WellenreiterConfigWindow::changedStationAction(int t) | |||
237 | void WellenreiterConfigWindow::getCaptureFileNameClicked() | 238 | void WellenreiterConfigWindow::getCaptureFileNameClicked() |
238 | { | 239 | { |
239 | QString name = ( (WellenreiterMainWindow*) qApp->mainWidget() )->getFileName(true); | 240 | QString name = ( (WellenreiterMainWindow*) qApp->mainWidget() )->getFileName(true); |
240 | odebug << "name = " << name << "" << oendl; | 241 | odebug << "name = " << name << "" << oendl; |
241 | if ( !name.isEmpty() ) | 242 | if ( !name.isEmpty() ) |
242 | { | 243 | { |
243 | captureFileName->setText( name ); | 244 | captureFileName->setText( name ); |
@@ -312,11 +313,11 @@ void WellenreiterConfigWindow::performAction( const QString& type, | |||
312 | } | 313 | } |
313 | else | 314 | else |
314 | { | 315 | { |
315 | owarn << "WellenreiterConfigWindow::performAction(): unknown type '" << type << "'" << oendl; | 316 | owarn << "WellenreiterConfigWindow::performAction(): unknown type '" << type << "'" << oendl; |
316 | return; | 317 | return; |
317 | } | 318 | } |
318 | 319 | ||
319 | odebug << "for event '" << (const char*) type << "' I'm going to perform action " << action << " (script='" << script << "')" << oendl; | 320 | odebug << "for event '" << (const char*) type << "' I'm going to perform action " << action << " (script='" << script << "')" << oendl; |
320 | 321 | ||
321 | switch( action ) | 322 | switch( action ) |
322 | { | 323 | { |
@@ -341,9 +342,9 @@ void WellenreiterConfigWindow::performAction( const QString& type, | |||
341 | script = script.replace( QRegExp( "$WEP" ), wep ? QString( "true" ) : QString( "false" ) ); | 342 | script = script.replace( QRegExp( "$WEP" ), wep ? QString( "true" ) : QString( "false" ) ); |
342 | script = script.replace( QRegExp( "$CHAN" ), QString::number( channel ) ); | 343 | script = script.replace( QRegExp( "$CHAN" ), QString::number( channel ) ); |
343 | 344 | ||
344 | odebug << "going to call script '" << script << "'" << oendl; | 345 | odebug << "going to call script '" << script << "'" << oendl; |
345 | ::system( script ); | 346 | ::system( script ); |
346 | odebug << "script returned." << oendl; | 347 | odebug << "script returned." << oendl; |
347 | return; | 348 | return; |
348 | } | 349 | } |
349 | default: assert( false ); | 350 | default: assert( false ); |
@@ -357,7 +358,7 @@ void WellenreiterConfigWindow::load() | |||
357 | #warning Persistent Configuration not yet implemented for standalone X11 build | 358 | #warning Persistent Configuration not yet implemented for standalone X11 build |
358 | performAutodetection(); | 359 | performAutodetection(); |
359 | #else | 360 | #else |
360 | odebug << "loading configuration settings..." << oendl; | 361 | odebug << "loading configuration settings..." << oendl; |
361 | 362 | ||
362 | /* This is dumb monkey typing stuff... We _need_ to do this automatically! */ | 363 | /* This is dumb monkey typing stuff... We _need_ to do this automatically! */ |
363 | 364 | ||
@@ -435,7 +436,7 @@ void WellenreiterConfigWindow::save() | |||
435 | #ifdef Q_WS_X11 | 436 | #ifdef Q_WS_X11 |
436 | #warning Persistent Configuration not yet implemented for standalone X11 build | 437 | #warning Persistent Configuration not yet implemented for standalone X11 build |
437 | #else | 438 | #else |
438 | odebug << "saving configuration settings..." << oendl; | 439 | odebug << "saving configuration settings..." << oendl; |
439 | 440 | ||
440 | /* This is dumb monkey typing stuff... We _need_ to do this automatically! */ | 441 | /* This is dumb monkey typing stuff... We _need_ to do this automatically! */ |
441 | 442 | ||
@@ -474,3 +475,9 @@ void WellenreiterConfigWindow::save() | |||
474 | 475 | ||
475 | #endif | 476 | #endif |
476 | } | 477 | } |
478 | |||
479 | |||
480 | int WellenreiterConfigWindow::hexViewBuffer() const | ||
481 | { | ||
482 | return hexViewBufferUnlimited->isChecked() ? -1 : hexViewBufferSize->value(); | ||
483 | } | ||
diff --git a/noncore/net/wellenreiter/gui/configwindow.h b/noncore/net/wellenreiter/gui/configwindow.h index 0a5b3bd..2d478e7 100644 --- a/noncore/net/wellenreiter/gui/configwindow.h +++ b/noncore/net/wellenreiter/gui/configwindow.h | |||
@@ -58,6 +58,8 @@ class WellenreiterConfigWindow : public WellenreiterConfigBase | |||
58 | void save(); | 58 | void save(); |
59 | void load(); | 59 | void load(); |
60 | 60 | ||
61 | int hexViewBuffer() const; | ||
62 | |||
61 | public slots: | 63 | public slots: |
62 | void changedDeviceType(int); | 64 | void changedDeviceType(int); |
63 | void changedNetworkAction(int t); | 65 | void changedNetworkAction(int t); |
diff --git a/noncore/net/wellenreiter/gui/packetview.cpp b/noncore/net/wellenreiter/gui/packetview.cpp index 4df01da..f0f16ff 100644 --- a/noncore/net/wellenreiter/gui/packetview.cpp +++ b/noncore/net/wellenreiter/gui/packetview.cpp | |||
@@ -19,6 +19,7 @@ | |||
19 | #include <opie2/opcap.h> | 19 | #include <opie2/opcap.h> |
20 | #include <opie2/odebug.h> | 20 | #include <opie2/odebug.h> |
21 | #include <opie2/olistview.h> | 21 | #include <opie2/olistview.h> |
22 | #include <opie2/oapplication.h> | ||
22 | 23 | ||
23 | /* QT */ | 24 | /* QT */ |
24 | #include <qfont.h> | 25 | #include <qfont.h> |
@@ -38,10 +39,8 @@ PacketView::PacketView( QWidget * parent, const char * name, WFlags f ) | |||
38 | :QFrame( parent, name, f ) | 39 | :QFrame( parent, name, f ) |
39 | { | 40 | { |
40 | _number = new QSpinBox( this ); | 41 | _number = new QSpinBox( this ); |
41 | _number->setPrefix( "Packet # " ); | 42 | _number->setPrefix( "Pkt# " ); |
42 | _label = new QLabel( this ); | 43 | _label = new QLabel( this ); |
43 | _label->setText( "eth0 2004/03/08 - 00:00:21" ); | ||
44 | |||
45 | _list = new OListView( this ); | 44 | _list = new OListView( this ); |
46 | _list->addColumn( "#" ); | 45 | _list->addColumn( "#" ); |
47 | _list->addColumn( "Packet Type" ); | 46 | _list->addColumn( "Packet Type" ); |
@@ -49,42 +48,70 @@ PacketView::PacketView( QWidget * parent, const char * name, WFlags f ) | |||
49 | _list->setColumnAlignment( 1, Qt::AlignLeft ); | 48 | _list->setColumnAlignment( 1, Qt::AlignLeft ); |
50 | _list->setAllColumnsShowFocus( true ); | 49 | _list->setAllColumnsShowFocus( true ); |
51 | _list->setFont( QFont( "Fixed", 8 ) ); | 50 | _list->setFont( QFont( "Fixed", 8 ) ); |
52 | 51 | ||
53 | _hex = new QTextView( this ); | 52 | _hex = new QTextView( this ); |
53 | _hex->setMargin( 0 ); | ||
54 | _hex->setFont( QFont( "Fixed", 8 ) ); | 54 | _hex->setFont( QFont( "Fixed", 8 ) ); |
55 | 55 | ||
56 | QVBoxLayout* vb = new QVBoxLayout( this, 2, 2 ); | 56 | QVBoxLayout* vb = new QVBoxLayout( this, 2, 2 ); |
57 | QHBoxLayout* hb = new QHBoxLayout( vb, 2 ); | 57 | QHBoxLayout* hb = new QHBoxLayout( vb, 2 ); |
58 | hb->addWidget( _label ); | 58 | hb->addWidget( _label, 5 ); |
59 | hb->addWidget( _number ); | 59 | hb->addWidget( _number, 2 ); |
60 | vb->addWidget( _list ); | 60 | vb->addWidget( _list, 3 ); |
61 | vb->addWidget( _hex ); | 61 | vb->addWidget( _hex, 4 ); // allow a bit (4/3) more space |
62 | 62 | ||
63 | _packets.setAutoDelete( true ); | 63 | _packets.setAutoDelete( true ); |
64 | 64 | ||
65 | connect( _number, SIGNAL( valueChanged( int ) ), this, SLOT( showPacket( int ) ) ); | 65 | connect( _number, SIGNAL( valueChanged( int ) ), this, SLOT( showPacket( int ) ) ); |
66 | connect( parent, SIGNAL( currentChanged( QWidget *) ), this, SLOT( activated( QWidget* ) ) ); | ||
67 | |||
68 | clear(); | ||
69 | |||
66 | } | 70 | } |
67 | 71 | ||
68 | void PacketView::add( const OPacket* p ) | 72 | void PacketView::add( const OPacket* p, int size ) |
69 | { | 73 | { |
70 | _packets.append( p ); | 74 | odebug << "PacketView::add() size = " << size << oendl; |
71 | // Add Circular Buffer and check for number of elements here | 75 | if ( size == -1 ) // unlimited buffer |
76 | { | ||
77 | _packets.append( p ); | ||
78 | } | ||
79 | else | ||
80 | // limited buffer, limit = size | ||
81 | if ( _packets.count() < size ) | ||
82 | { | ||
83 | _packets.append( p ); | ||
84 | } | ||
85 | |||
86 | _number->setMinValue( 1 ); | ||
87 | _number->setMaxValue( _packets.count() ); | ||
88 | _number->setValue( _packets.count() ); | ||
72 | } | 89 | } |
73 | 90 | ||
74 | void PacketView::showPacket( int number ) | 91 | void PacketView::showPacket( int number ) |
75 | { | 92 | { |
76 | _list->clear(); | 93 | _list->clear(); |
77 | _hex->setText(""); | 94 | _hex->setText(""); |
78 | const OPacket* p = _packets.at( number ); | 95 | const OPacket* p = _packets.at( number-1 ); |
79 | 96 | ||
80 | if ( p ) | 97 | if ( p ) |
81 | { | 98 | { |
82 | _doSubPackets( const_cast<QObjectList*>( p->children() ), 0 ); | 99 | _doSubPackets( const_cast<QObjectList*>( p->children() ), 0 ); |
83 | _doHexPacket( p ); | 100 | _doHexPacket( p ); |
101 | QDateTime dt; dt.setTime_t( p->timeval().tv_sec ); | ||
102 | _label->setText( dt.toString() + QString().sprintf( " Len=%d", p->len() ) ); | ||
84 | } | 103 | } |
85 | else | 104 | else |
86 | { | 105 | { |
87 | odebug << "D'oh! No packet!" << oendl; | 106 | odebug << "D'oh! No packet!" << oendl; |
107 | } | ||
108 | } | ||
109 | |||
110 | void PacketView::activated( QWidget* w ) | ||
111 | { | ||
112 | if ( ( this == w ) && _packets.count() ) | ||
113 | { | ||
114 | _number->setValue( 1 ); | ||
88 | } | 115 | } |
89 | } | 116 | } |
90 | 117 | ||
@@ -98,11 +125,14 @@ void PacketView::_doSubPackets( QObjectList* l, int counter ) | |||
98 | _doSubPackets( const_cast<QObjectList*>( o->children() ), counter ); | 125 | _doSubPackets( const_cast<QObjectList*>( o->children() ), counter ); |
99 | o = l->next(); | 126 | o = l->next(); |
100 | } | 127 | } |
101 | } | 128 | } |
102 | 129 | ||
103 | void PacketView::_doHexPacket( const OPacket* p ) | 130 | void PacketView::_doHexPacket( const OPacket* p ) |
104 | { | 131 | { |
105 | _hex->setText( p->dump( 16 ) ); | 132 | if ( oApp->desktop()->width() > 320 ) |
133 | _hex->setText( p->dump( 16 ) ); | ||
134 | else | ||
135 | _hex->setText( p->dump( 8 ) ); | ||
106 | } | 136 | } |
107 | 137 | ||
108 | const QString PacketView::getLog() const | 138 | const QString PacketView::getLog() const |
@@ -116,6 +146,6 @@ void PacketView::clear() | |||
116 | _number->setMaxValue( 0 ); | 146 | _number->setMaxValue( 0 ); |
117 | _label->setText( "---" ); | 147 | _label->setText( "---" ); |
118 | _list->clear(); | 148 | _list->clear(); |
119 | _hex->setText( " <i>-- no Packet available --</i> " ); | 149 | _hex->setText( " <center><i>-- no Packet available --</i></center> " ); |
120 | } | 150 | } |
121 | 151 | ||
diff --git a/noncore/net/wellenreiter/gui/packetview.h b/noncore/net/wellenreiter/gui/packetview.h index 42e8f5d..bb366c5 100644 --- a/noncore/net/wellenreiter/gui/packetview.h +++ b/noncore/net/wellenreiter/gui/packetview.h | |||
@@ -21,6 +21,7 @@ | |||
21 | 21 | ||
22 | #include <opie2/opcap.h> | 22 | #include <opie2/opcap.h> |
23 | 23 | ||
24 | class QWidget; | ||
24 | class QLabel; | 25 | class QLabel; |
25 | class QString; | 26 | class QString; |
26 | class QSpinBox; | 27 | class QSpinBox; |
@@ -31,17 +32,18 @@ namespace Opie {namespace Ui {class OListView;}} | |||
31 | 32 | ||
32 | class PacketView: public QFrame | 33 | class PacketView: public QFrame |
33 | { | 34 | { |
34 | Q_OBJECT | 35 | Q_OBJECT |
35 | 36 | ||
36 | public: | 37 | public: |
37 | PacketView( QWidget * parent = 0, const char * name = "PacketView", WFlags f = 0 ); | 38 | PacketView( QWidget * parent = 0, const char * name = "PacketView", WFlags f = 0 ); |
38 | 39 | ||
39 | void add( const Opie::Net::OPacket* p ); | 40 | void add( const Opie::Net::OPacket* p, int size ); |
40 | const QString getLog() const; | 41 | const QString getLog() const; |
41 | void clear(); | 42 | void clear(); |
42 | 43 | ||
43 | public slots: | 44 | public slots: |
44 | void showPacket( int number ); | 45 | void showPacket( int number ); |
46 | void activated( QWidget* ); | ||
45 | 47 | ||
46 | protected: | 48 | protected: |
47 | QSpinBox* _number; | 49 | QSpinBox* _number; |
@@ -49,7 +51,7 @@ class PacketView: public QFrame | |||
49 | Opie::Ui::OListView* _list; | 51 | Opie::Ui::OListView* _list; |
50 | QTextView* _hex; | 52 | QTextView* _hex; |
51 | QList<const Opie::Net::OPacket> _packets; | 53 | QList<const Opie::Net::OPacket> _packets; |
52 | 54 | ||
53 | protected: | 55 | protected: |
54 | void _doSubPackets( QObjectList*, int ); | 56 | void _doSubPackets( QObjectList*, int ); |
55 | void _doHexPacket( const Opie::Net::OPacket* ); | 57 | void _doHexPacket( const Opie::Net::OPacket* ); |
diff --git a/noncore/net/wellenreiter/gui/wellenreiter.cpp b/noncore/net/wellenreiter/gui/wellenreiter.cpp index 12b3978..fe8f22d 100644 --- a/noncore/net/wellenreiter/gui/wellenreiter.cpp +++ b/noncore/net/wellenreiter/gui/wellenreiter.cpp | |||
@@ -413,7 +413,7 @@ bool Wellenreiter::checkDumpPacket( OPacket* p ) | |||
413 | 413 | ||
414 | void Wellenreiter::receivePacket( OPacket* p ) | 414 | void Wellenreiter::receivePacket( OPacket* p ) |
415 | { | 415 | { |
416 | hexWindow()->add( p ); | 416 | hexWindow()->add( p, configwindow->hexViewBuffer() ); |
417 | 417 | ||
418 | if ( checkDumpPacket( p ) ) | 418 | if ( checkDumpPacket( p ) ) |
419 | { | 419 | { |