-rw-r--r-- | noncore/net/wellenreiter/ChangeLog | 1 | ||||
-rw-r--r-- | noncore/net/wellenreiter/gui/wellenreiter.cpp | 41 | ||||
-rw-r--r-- | noncore/net/wellenreiter/gui/wellenreiter.h | 4 |
3 files changed, 38 insertions, 8 deletions
diff --git a/noncore/net/wellenreiter/ChangeLog b/noncore/net/wellenreiter/ChangeLog index 755ed76..8bf8cc8 100644 --- a/noncore/net/wellenreiter/ChangeLog +++ b/noncore/net/wellenreiter/ChangeLog @@ -1,4 +1,5 @@ 2004-??-?? Michael Lauer <mickey@Vanille.de> + * Added parsing of control frames. Display stations sending them SSID "???" for now. * Added command line option "-nocheck" to skip non-root and dhcp tests * Improved the speed reading the manufacturer list diff --git a/noncore/net/wellenreiter/gui/wellenreiter.cpp b/noncore/net/wellenreiter/gui/wellenreiter.cpp index 5575d6e..45d7142 100644 --- a/noncore/net/wellenreiter/gui/wellenreiter.cpp +++ b/noncore/net/wellenreiter/gui/wellenreiter.cpp @@ -160,6 +160,10 @@ void Wellenreiter::handleNotification( OPacket* p ) -void Wellenreiter::handleBeacon( OPacket* p, OWaveLanManagementPacket* beacon ) +void Wellenreiter::handleManagementFrame( OPacket* p, OWaveLanManagementPacket* manage ) { + if ( manage->managementType() != "Beacon" ) return; // only handling beacons at that time + + OWaveLanManagementPacket* beacon = manage; + QString type; if ( beacon->canIBSS() ) @@ -184,5 +188,5 @@ void Wellenreiter::handleBeacon( OPacket* p, OWaveLanManagementPacket* beacon ) OWaveLanPacket* header = static_cast<OWaveLanPacket*>( p->child( "802.11" ) ); - GpsLocation loc( 0, 0 ); + GpsLocation loc( -111.111, -111.111 ); if ( configwindow->enableGPS->isChecked() ) { @@ -207,4 +211,19 @@ void Wellenreiter::handleBeacon( OPacket* p, OWaveLanManagementPacket* beacon ) +void Wellenreiter::handleControlFrame( OPacket* p, OWaveLanControlPacket* control ) +{ + OWaveLanPacket* header = static_cast<OWaveLanPacket*>( p->child( "802.11" ) ); + + if ( control->controlType() == "Acknowledge" ) + { + netView()->addNewItem( "adhoc", "???", header->macAddress1(), false, -1, 0, GpsLocation( -111.111, -111.111 ) ); + } + else + { + qDebug( "Wellenreiter::handleControlFrame - please handle %s in a future version! :D", (const char*) control->controlType() ); + } +} + + void Wellenreiter::handleWlanData( OPacket* p, OWaveLanDataPacket* data, OMacAddress& from, OMacAddress& to ) { @@ -242,5 +261,5 @@ void Wellenreiter::handleEthernetData( OPacket* p, OEthernetPacket* data, OMacAd to = data->destinationAddress(); - netView()->addNewItem( "station", "<wired>", from, false, -1, 0, GpsLocation( 0, 0 ) ); + netView()->addNewItem( "station", "<wired>", from, false, -1, 0, GpsLocation( -111.111, -111.111 ) ); } @@ -341,9 +360,17 @@ void Wellenreiter::receivePacket( OPacket* p ) } - // check if we received a beacon frame - OWaveLanManagementPacket* beacon = static_cast<OWaveLanManagementPacket*>( childIfToParse( p, "802.11 Management" ) ); - if ( beacon && beacon->managementType() == "Beacon" ) + // check for a management frame + OWaveLanManagementPacket* manage = static_cast<OWaveLanManagementPacket*>( childIfToParse( p, "802.11 Management" ) ); + if ( manage ) + { + handleManagementFrame( p, manage ); + return; + } + + // check for a control frame + OWaveLanControlPacket* control = static_cast<OWaveLanControlPacket*>( childIfToParse( p, "802.11 Control" ) ); + if ( control ) { - handleBeacon( p, beacon ); + handleControlFrame( p, control ); return; } diff --git a/noncore/net/wellenreiter/gui/wellenreiter.h b/noncore/net/wellenreiter/gui/wellenreiter.h index 58dd1fd..5414fda 100644 --- a/noncore/net/wellenreiter/gui/wellenreiter.h +++ b/noncore/net/wellenreiter/gui/wellenreiter.h @@ -28,4 +28,5 @@ class QPixmap; class OPacket; class OWaveLanManagementPacket; +class OWaveLanControlPacket; class OWaveLanDataPacket; class OEthernetPacket; @@ -75,5 +76,6 @@ class Wellenreiter : public WellenreiterBase { private: - void handleBeacon( OPacket* p, OWaveLanManagementPacket* beacon ); + void handleManagementFrame( OPacket* p, OWaveLanManagementPacket* manage ); + void handleControlFrame( OPacket* p, OWaveLanControlPacket* control ); void handleWlanData( OPacket* p, OWaveLanDataPacket* data, OMacAddress& from, OMacAddress& to ); void handleEthernetData( OPacket* p, OEthernetPacket* data, OMacAddress& from, OMacAddress& to ); |