-rw-r--r-- | noncore/net/wellenreiter/gui/scanlist.cpp | 90 | ||||
-rw-r--r-- | noncore/net/wellenreiter/gui/scanlist.h | 10 | ||||
-rw-r--r-- | noncore/net/wellenreiter/gui/wellenreiter.cpp | 28 |
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 | ||
194 | void MScanListView::traffic( QString type, QString from, QString to, QString via, QString additional ) | 194 | |
195 | void 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 | ||
222 | void 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 ) | 246 | void 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 | ||
266 | void MScanListView::fromDStraffic( QString from, QString to, QString via ) | ||
267 | { | ||
268 | qWarning( "D'oh! Not yet implemented..." ); | ||
269 | } | ||
270 | |||
271 | void 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 | ||
246 | MScanListItem::MScanListItem( QListView* parent, QString type, QString essid, QString macaddr, | 280 | MScanListItem::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 | ||
258 | MScanListItem::MScanListItem( QListViewItem* parent, QString type, QString essid, QString macaddr, | 292 | MScanListItem::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 | ||
23 | class QString; | 23 | class QString; |
24 | class ManufacturerDB; | 24 | class ManufacturerDB; |
25 | 25 | ||
26 | class MScanListItem; | ||
27 | |||
26 | class MScanListView: public OListView | 28 | class 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 | ||
51 | class MScanListItem: public OListViewItem | 59 | class 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 | ||
226 | void Wellenreiter::stopClicked() | 226 | void 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 ); |