summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/net/wellenreiter/gui/scanlist.cpp90
-rw-r--r--noncore/net/wellenreiter/gui/scanlist.h10
-rw-r--r--noncore/net/wellenreiter/gui/wellenreiter.cpp28
3 files changed, 85 insertions, 43 deletions
diff --git a/noncore/net/wellenreiter/gui/scanlist.cpp b/noncore/net/wellenreiter/gui/scanlist.cpp
index a8cadd8..7733934 100644
--- a/noncore/net/wellenreiter/gui/scanlist.cpp
+++ b/noncore/net/wellenreiter/gui/scanlist.cpp
@@ -170,96 +170,130 @@ void MScanListView::addNewItem( QString type, QString essid, QString macaddr, bo
170 } 170 }
171 171
172 172
173 // insert new station as child from network 173 // insert new station as child from network
174 174
175 // no essid to reduce clutter, maybe later we have a nick or stationname to display!? 175 // no essid to reduce clutter, maybe later we have a nick or stationname to display!?
176 176
177 qDebug( "inserting new station %s", (const char*) macaddr ); 177 qDebug( "inserting new station %s", (const char*) macaddr );
178 178
179 MScanListItem* station = new MScanListItem( network, type, "", macaddr, wep, channel, signal ); 179 MScanListItem* station = new MScanListItem( network, type, "", macaddr, wep, channel, signal );
180 if ( _manufacturerdb ) 180 if ( _manufacturerdb )
181 station->setManufacturer( _manufacturerdb->lookup( macaddr ) ); 181 station->setManufacturer( _manufacturerdb->lookup( macaddr ) );
182 182
183 if ( type == "managed" ) 183 if ( type == "managed" )
184 { 184 {
185 s.sprintf( "(i) new AP in '%s' [%d]", (const char*) essid, channel ); 185 s.sprintf( "(i) new AP in '%s' [%d]", (const char*) essid, channel );
186 } 186 }
187 else 187 else
188 { 188 {
189 s.sprintf( "(i) new adhoc station in '%s' [%d]", (const char*) essid, channel ); 189 s.sprintf( "(i) new adhoc station in '%s' [%d]", (const char*) essid, channel );
190 } 190 }
191 191
192} 192}
193 193
194void MScanListView::traffic( QString type, QString from, QString to, QString via, QString additional ) 194
195void MScanListView::addIfNotExisting( MScanListItem* network, QString addr )
195{ 196{
196 if ( type != "toDS" ) return; 197 MScanListItem* subitem = static_cast<MScanListItem*>( network->firstChild() );
198
199 while ( subitem && ( subitem->text( col_ap ) != addr ) )
200 {
201 qDebug( "subitemtext: %s", (const char*) subitem->text( col_ap ) );
202 subitem = static_cast<MScanListItem*> ( subitem->itemBelow() );
203 }
204
205 if ( subitem )
206 {
207 // we have already seen this item, it's a dupe
208 #ifdef DEBUG
209 qDebug( "%s is a dupe - ignoring...", (const char*) addr );
210 #endif
211 subitem->receivedBeacon(); //FIXME: sent data bit
212 return;
213 }
214
215 // Hey, it seems to be a new item :-D
216 MScanListItem* station = new MScanListItem( network, "station", /* network->text( col_essid ) */ "", addr, false, -1, -1 );
217 if ( _manufacturerdb )
218 station->setManufacturer( _manufacturerdb->lookup( addr ) );
219}
197 220
198 qDebug( "MScanList::traffic( [%s] | %s -> %s (via %s)",
199 (const char*) type, (const char*) from,
200 (const char*) to, (const char*) via );
201 221
222void MScanListView::WDStraffic( QString from, QString to, QString viaFrom, QString viaTo )
223{
202 QString s; 224 QString s;
203 MScanListItem* network; 225 MScanListItem* network;
204 226
205 QListViewItemIterator it( this ); 227 QListViewItemIterator it( this );
206 while ( it.current() && it.current()->text( col_ap ) != via ) ++it; 228 while ( it.current() &&
229 it.current()->text( col_ap ) != viaFrom &&
230 it.current()->text( col_ap ) != viaTo ) ++it;
207 231
208 MScanListItem* item = static_cast<MScanListItem*>( it.current() ); 232 MScanListItem* item = static_cast<MScanListItem*>( it.current() );
209 233
210 if ( item ) // AP has been shown up, so just add our new "from" - station 234 if ( item ) // Either viaFrom or viaTo AP has shown up yet, so just add our two new stations
235 {
236 addIfNotExisting( static_cast<MScanListItem*>(item->parent()), from );
237 addIfNotExisting( static_cast<MScanListItem*>(item->parent()), to );
238 }
239 else
211 { 240 {
212 network = static_cast<MScanListItem*>( item->parent() ); 241 qDebug( "D'Oh! Stations without AP... ignoring for now... will handle this in 1.1 version :-D" );
213 MScanListItem* subitem = static_cast<MScanListItem*>( network->firstChild() ); 242 }
243}
214 244
215 while ( subitem && ( subitem->text( col_ap ) != from ) )
216 {
217 qDebug( "subitemtext: %s", (const char*) subitem->text( col_ap ) );
218 subitem = static_cast<MScanListItem*> ( subitem->itemBelow() );
219 }
220 245
221 if ( subitem ) 246void MScanListView::toDStraffic( QString from, QString to, QString via )
222 { 247{
223 // we have already seen this item, it's a dupe 248 QString s;
224 #ifdef DEBUG 249 MScanListItem* network;
225 qDebug( "%s is a dupe - ignoring...", (const char*) from ); 250
226 #endif 251 QListViewItemIterator it( this );
227 subitem->receivedBeacon(); //FIXME: sent data bit 252 while ( it.current() && it.current()->text( col_ap ) != via ) ++it;
228 return; 253
229 } 254 MScanListItem* item = static_cast<MScanListItem*>( it.current() );
230 255
231 // Hey, it seems to be a new item :-D 256 if ( item ) // AP has shown up yet, so just add our new "from" - station
232 MScanListItem* station = new MScanListItem( item->parent(), "adhoc", /* network->text( col_essid ) */ "", from, false, -1, -1 ); 257 {
233 if ( _manufacturerdb ) 258 addIfNotExisting( static_cast<MScanListItem*>(item->parent()), from );
234 station->setManufacturer( _manufacturerdb->lookup( from ) );
235 } 259 }
236 else 260 else
237 { 261 {
238 qDebug( "D'Oh! Station without AP... ignoring for now... will handle this in alpha-4 version :-D" ); 262 qDebug( "D'Oh! Station without AP... ignoring for now... will handle this in 1.1 :-D" );
239 } 263 }
240} 264}
241 265
266void MScanListView::fromDStraffic( QString from, QString to, QString via )
267{
268 qWarning( "D'oh! Not yet implemented..." );
269}
270
271void MScanListView::IBSStraffic( QString from, QString to, QString via )
272{
273 qWarning( "D'oh! Not yet implemented..." );
274}
275
242//============================================================ 276//============================================================
243// MScanListItem 277// MScanListItem
244//============================================================ 278//============================================================
245 279
246MScanListItem::MScanListItem( QListView* parent, QString type, QString essid, QString macaddr, 280MScanListItem::MScanListItem( QListView* parent, QString type, QString essid, QString macaddr,
247 bool wep, int channel, int signal ) 281 bool wep, int channel, int signal )
248 :OListViewItem( parent, essid, QString::null, macaddr, QString::null, QString::null ), 282 :OListViewItem( parent, essid, QString::null, macaddr, QString::null, QString::null ),
249 _type( type ), _essid( essid ), _macaddr( macaddr ), _wep( wep ), 283 _type( type ), _essid( essid ), _macaddr( macaddr ), _wep( wep ),
250 _channel( channel ), _signal( signal ), _beacons( 1 ) 284 _channel( channel ), _signal( signal ), _beacons( 1 )
251{ 285{
252 qDebug( "creating scanlist item" ); 286 qDebug( "creating scanlist item" );
253 if ( WellenreiterConfigWindow::instance() && type == "network" ) 287 if ( WellenreiterConfigWindow::instance() && type == "network" )
254 playSound( WellenreiterConfigWindow::instance()->soundOnNetwork() ); 288 playSound( WellenreiterConfigWindow::instance()->soundOnNetwork() );
255 decorateItem( type, essid, macaddr, wep, channel, signal ); 289 decorateItem( type, essid, macaddr, wep, channel, signal );
256} 290}
257 291
258MScanListItem::MScanListItem( QListViewItem* parent, QString type, QString essid, QString macaddr, 292MScanListItem::MScanListItem( QListViewItem* parent, QString type, QString essid, QString macaddr,
259 bool wep, int channel, int signal ) 293 bool wep, int channel, int signal )
260 :OListViewItem( parent, essid, QString::null, macaddr, QString::null, QString::null ) 294 :OListViewItem( parent, essid, QString::null, macaddr, QString::null, QString::null )
261{ 295{
262 qDebug( "creating scanlist item" ); 296 qDebug( "creating scanlist item" );
263 decorateItem( type, essid, macaddr, wep, channel, signal ); 297 decorateItem( type, essid, macaddr, wep, channel, signal );
264} 298}
265 299
diff --git a/noncore/net/wellenreiter/gui/scanlist.h b/noncore/net/wellenreiter/gui/scanlist.h
index bed69f1..a14d426 100644
--- a/noncore/net/wellenreiter/gui/scanlist.h
+++ b/noncore/net/wellenreiter/gui/scanlist.h
@@ -2,65 +2,73 @@
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 SCANLIST_H 16#ifndef SCANLIST_H
17#define SCANLIST_H 17#define SCANLIST_H
18 18
19#include <opie2/olistview.h> 19#include <opie2/olistview.h>
20 20
21#include <qtextstream.h> 21#include <qtextstream.h>
22 22
23class QString; 23class QString;
24class ManufacturerDB; 24class ManufacturerDB;
25 25
26class MScanListItem;
27
26class MScanListView: public OListView 28class MScanListView: public OListView
27{ 29{
28 Q_OBJECT 30 Q_OBJECT
29 31
30 public: 32 public:
31 MScanListView( QWidget* parent = 0, const char* name = 0 ); 33 MScanListView( QWidget* parent = 0, const char* name = 0 );
32 virtual ~MScanListView(); 34 virtual ~MScanListView();
33 35
34 void setManufacturerDB( ManufacturerDB* manufacturerdb ); 36 void setManufacturerDB( ManufacturerDB* manufacturerdb );
35 37
36 virtual OListViewItem* childFactory(); 38 virtual OListViewItem* childFactory();
37 virtual void serializeTo( QDataStream& s ) const; 39 virtual void serializeTo( QDataStream& s ) const;
38 virtual void serializeFrom( QDataStream& s ); 40 virtual void serializeFrom( QDataStream& s );
39 41
40 public slots: 42 public slots:
41 void addNewItem( QString type, QString essid, QString macaddr, bool wep, int channel, int signal ); 43 void addNewItem( QString type, QString essid, QString macaddr, bool wep, int channel, int signal );
42 void traffic( QString type, QString from, QString to, QString via, QString additional = QString::null ); 44 void fromDStraffic( QString from, QString to, QString via ); // NYI
45 void toDStraffic( QString from, QString to, QString via );
46 void WDStraffic( QString from, QString to, QString viaFrom, QString viaTo );
47 void IBSStraffic( QString from, QString to, QString via ); // NYI
48
49 protected:
50 void addIfNotExisting( MScanListItem* parent, QString addr );
43 51
44 private: 52 private:
45 ManufacturerDB* _manufacturerdb; 53 ManufacturerDB* _manufacturerdb;
46 54
47}; 55};
48 56
49//****************************** MScanListItem **************************************************************** 57//****************************** MScanListItem ****************************************************************
50 58
51class MScanListItem: public OListViewItem 59class MScanListItem: public OListViewItem
52{ 60{
53 public: 61 public:
54 MScanListItem::MScanListItem( QListView* parent, 62 MScanListItem::MScanListItem( QListView* parent,
55 QString type = "unknown", 63 QString type = "unknown",
56 QString essid = "unknown", 64 QString essid = "unknown",
57 QString macaddr = "unknown", 65 QString macaddr = "unknown",
58 bool wep = false, 66 bool wep = false,
59 int channel = 0, 67 int channel = 0,
60 int signal = 0 ); 68 int signal = 0 );
61 69
62 MScanListItem::MScanListItem( QListViewItem* parent, 70 MScanListItem::MScanListItem( QListViewItem* parent,
63 QString type = "unknown", 71 QString type = "unknown",
64 QString essid = "unknown", 72 QString essid = "unknown",
65 QString macaddr = "unknown", 73 QString macaddr = "unknown",
66 bool wep = false, 74 bool wep = false,
diff --git a/noncore/net/wellenreiter/gui/wellenreiter.cpp b/noncore/net/wellenreiter/gui/wellenreiter.cpp
index 5ec9ee4..4b82c9a 100644
--- a/noncore/net/wellenreiter/gui/wellenreiter.cpp
+++ b/noncore/net/wellenreiter/gui/wellenreiter.cpp
@@ -159,85 +159,85 @@ void Wellenreiter::receivePacket(OPacket* p)
159 return; 159 return;
160 } 160 }
161 161
162 OWaveLanManagementSSID* ssid = static_cast<OWaveLanManagementSSID*>( p->child( "802.11 SSID" ) ); 162 OWaveLanManagementSSID* ssid = static_cast<OWaveLanManagementSSID*>( p->child( "802.11 SSID" ) );
163 QString essid = ssid ? ssid->ID() : QString("<unknown>"); 163 QString essid = ssid ? ssid->ID() : QString("<unknown>");
164 OWaveLanManagementDS* ds = static_cast<OWaveLanManagementDS*>( p->child( "802.11 DS" ) ); 164 OWaveLanManagementDS* ds = static_cast<OWaveLanManagementDS*>( p->child( "802.11 DS" ) );
165 int channel = ds ? ds->channel() : -1; 165 int channel = ds ? ds->channel() : -1;
166 166
167 OWaveLanPacket* header = static_cast<OWaveLanPacket*>( p->child( "802.11" ) ); 167 OWaveLanPacket* header = static_cast<OWaveLanPacket*>( p->child( "802.11" ) );
168 netView()->addNewItem( type, essid, header->macAddress2().toString(), beacon->canPrivacy(), channel, 0 ); 168 netView()->addNewItem( type, essid, header->macAddress2().toString(), beacon->canPrivacy(), channel, 0 );
169 return; 169 return;
170 } 170 }
171 171
172 // check for a data frame 172 // check for a data frame
173 OWaveLanDataPacket* data = static_cast<OWaveLanDataPacket*>( p->child( "802.11 Data" ) ); 173 OWaveLanDataPacket* data = static_cast<OWaveLanDataPacket*>( p->child( "802.11 Data" ) );
174 if ( data ) 174 if ( data )
175 { 175 {
176 OWaveLanPacket* wlan = (OWaveLanPacket*) p->child( "802.11" ); 176 OWaveLanPacket* wlan = (OWaveLanPacket*) p->child( "802.11" );
177 if ( wlan->fromDS() && !wlan->toDS() ) 177 if ( wlan->fromDS() && !wlan->toDS() )
178 { 178 {
179 qDebug( "FromDS traffic: '%s' -> '%s' via '%s'", 179 qDebug( "FromDS traffic: '%s' -> '%s' via '%s'",
180 (const char*) wlan->macAddress3().toString(true), 180 (const char*) wlan->macAddress3().toString(true),
181 (const char*) wlan->macAddress1().toString(true), 181 (const char*) wlan->macAddress1().toString(true),
182 (const char*) wlan->macAddress2().toString(true) ); 182 (const char*) wlan->macAddress2().toString(true) );
183 netView()->traffic( "fromDS", wlan->macAddress3().toString(), 183 netView()->fromDStraffic( wlan->macAddress3().toString(),
184 wlan->macAddress1().toString(), 184 wlan->macAddress1().toString(),
185 wlan->macAddress2().toString() ); 185 wlan->macAddress2().toString() );
186 } 186 }
187 else 187 else
188 if ( !wlan->fromDS() && wlan->toDS() ) 188 if ( !wlan->fromDS() && wlan->toDS() )
189 { 189 {
190 qDebug( "ToDS traffic: '%s' -> '%s' via '%s'", 190 qDebug( "ToDS traffic: '%s' -> '%s' via '%s'",
191 (const char*) wlan->macAddress2().toString(true), 191 (const char*) wlan->macAddress2().toString(true),
192 (const char*) wlan->macAddress3().toString(true), 192 (const char*) wlan->macAddress3().toString(true),
193 (const char*) wlan->macAddress1().toString(true) ); 193 (const char*) wlan->macAddress1().toString(true) );
194 netView()->traffic( "toDS", wlan->macAddress2().toString(), 194 netView()->toDStraffic( wlan->macAddress2().toString(),
195 wlan->macAddress3().toString(), 195 wlan->macAddress3().toString(),
196 wlan->macAddress1().toString() ); 196 wlan->macAddress1().toString() );
197 } 197 }
198 else 198 else
199 if ( wlan->fromDS() && wlan->toDS() ) 199 if ( wlan->fromDS() && wlan->toDS() )
200 { 200 {
201 qDebug( "WSD(bridge) traffic: '%s' -> '%s' via '%s' and '%s'", 201 qDebug( "WDS(bridge) traffic: '%s' -> '%s' via '%s' and '%s'",
202 (const char*) wlan->macAddress4().toString(true), 202 (const char*) wlan->macAddress4().toString(true),
203 (const char*) wlan->macAddress3().toString(true), 203 (const char*) wlan->macAddress3().toString(true),
204 (const char*) wlan->macAddress1().toString(true), 204 (const char*) wlan->macAddress1().toString(true),
205 (const char*) wlan->macAddress2().toString(true) ); 205 (const char*) wlan->macAddress2().toString(true) );
206 netView()->traffic( "WSD", wlan->macAddress4().toString(), 206 netView()->WDStraffic( wlan->macAddress4().toString(),
207 wlan->macAddress3().toString(), 207 wlan->macAddress3().toString(),
208 wlan->macAddress1().toString(), 208 wlan->macAddress1().toString(),
209 wlan->macAddress2().toString() ); 209 wlan->macAddress2().toString() );
210 } 210 }
211 else 211 else
212 { 212 {
213 qDebug( "IBSS(AdHoc) traffic: '%s' -> '%s' (Cell: '%s')'", 213 qDebug( "IBSS(AdHoc) traffic: '%s' -> '%s' (Cell: '%s')'",
214 (const char*) wlan->macAddress2().toString(true), 214 (const char*) wlan->macAddress2().toString(true),
215 (const char*) wlan->macAddress1().toString(true), 215 (const char*) wlan->macAddress1().toString(true),
216 (const char*) wlan->macAddress3().toString(true) ); 216 (const char*) wlan->macAddress3().toString(true) );
217 netView()->traffic( "IBSS", wlan->macAddress2().toString(), 217 netView()->IBSStraffic( wlan->macAddress2().toString(),
218 wlan->macAddress1().toString(), 218 wlan->macAddress1().toString(),
219 wlan->macAddress3().toString() ); 219 wlan->macAddress3().toString() );
220 } 220 }
221 return; 221 return;
222 } 222 }
223} 223}
224 224
225 225
226void Wellenreiter::stopClicked() 226void Wellenreiter::stopClicked()
227{ 227{
228 if ( iface ) 228 if ( iface )
229 { 229 {
230 disconnect( SIGNAL( receivedPacket(OPacket*) ), this, SLOT( receivePacket(OPacket*) ) ); 230 disconnect( SIGNAL( receivedPacket(OPacket*) ), this, SLOT( receivePacket(OPacket*) ) );
231 disconnect( SIGNAL( hopped(int) ), this, SLOT( channelHopped(int) ) ); 231 disconnect( SIGNAL( hopped(int) ), this, SLOT( channelHopped(int) ) );
232 iface->setChannelHopping(); // stop hopping channels 232 iface->setChannelHopping(); // stop hopping channels
233 } 233 }
234 else 234 else
235 killTimers(); 235 killTimers();
236 236
237 pcap->close(); 237 pcap->close();
238 sniffing = false; 238 sniffing = false;
239 239
240 if ( iface ) 240 if ( iface )
241 { 241 {
242 // switch off monitor mode 242 // switch off monitor mode
243 iface->setMonitorMode( false ); 243 iface->setMonitorMode( false );