Diffstat (limited to 'noncore/net/wellenreiter/gui/wellenreiter.cpp') (more/less context) (show whitespace changes)
-rw-r--r-- | noncore/net/wellenreiter/gui/wellenreiter.cpp | 58 |
1 files changed, 46 insertions, 12 deletions
diff --git a/noncore/net/wellenreiter/gui/wellenreiter.cpp b/noncore/net/wellenreiter/gui/wellenreiter.cpp index 62bda91..9e1010b 100644 --- a/noncore/net/wellenreiter/gui/wellenreiter.cpp +++ b/noncore/net/wellenreiter/gui/wellenreiter.cpp @@ -137,13 +137,7 @@ void Wellenreiter::channelHopped(int c) } -void Wellenreiter::receivePacket(OPacket* p) -{ - hexWindow()->log( p->dump( 8 ) ); - - // check if we received a beacon frame - OWaveLanManagementPacket* beacon = static_cast<OWaveLanManagementPacket*>( p->child( "802.11 Management" ) ); - if ( beacon && beacon->managementType() == "Beacon" ) +void Wellenreiter::handleBeacon( OPacket* p, OWaveLanManagementPacket* beacon ) { QString type; if ( beacon->canIBSS() ) @@ -156,7 +150,7 @@ void Wellenreiter::receivePacket(OPacket* p) } else { - qDebug( "Wellenreiter::invalid frame detected: '%s'", (const char*) p->dump( 16 ) ); + qWarning( "Wellenreiter::invalid frame [possibly noise] detected!" ); return; } @@ -177,12 +171,10 @@ void Wellenreiter::receivePacket(OPacket* p) else graphwindow->traffic( ds->channel(), 95 ); } - return; } - // check for a data frame - OWaveLanDataPacket* data = static_cast<OWaveLanDataPacket*>( p->child( "802.11 Data" ) ); - if ( data ) + +void Wellenreiter::handleData( OPacket* p, OWaveLanDataPacket* data ) { OWaveLanPacket* wlan = (OWaveLanPacket*) p->child( "802.11" ); if ( wlan->fromDS() && !wlan->toDS() ) @@ -229,8 +221,50 @@ void Wellenreiter::receivePacket(OPacket* p) wlan->macAddress1().toString(), wlan->macAddress3().toString() ); } + + OARPPacket* arp = (OARPPacket*) p->child( "ARP" ); + if ( arp ) + { + qDebug( "Received ARP traffic (type '%s'): ", (const char*) arp->type() ); + if ( arp->type() == "REQUEST" ) + { + netView()->identify( arp->senderMacAddress().toString(), arp->senderIPV4Address().toString() ); + } + else if ( arp->type() == "REPLY" ) + { + netView()->identify( arp->senderMacAddress().toString(), arp->senderIPV4Address().toString() ); + netView()->identify( arp->targetMacAddress().toString(), arp->targetIPV4Address().toString() ); + } + } + + OIPPacket* ip = (OIPPacket*) p->child( "IP" ); + if ( ip ) + { + qDebug( "Received IP packet." ); + } +} + + +void Wellenreiter::receivePacket( OPacket* p ) +{ + hexWindow()->log( p->dump( 8 ) ); + + // check if we received a beacon frame + OWaveLanManagementPacket* beacon = static_cast<OWaveLanManagementPacket*>( p->child( "802.11 Management" ) ); + if ( beacon && beacon->managementType() == "Beacon" ) + { + handleBeacon( p, beacon ); return; } + + //TODO: WEP check here + + // check for a data frame + OWaveLanDataPacket* data = static_cast<OWaveLanDataPacket*>( p->child( "802.11 Data" ) ); + if ( data ) + { + handleData( p, data ); + } } |