summaryrefslogtreecommitdiff
authormickeyl <mickeyl>2003-04-16 13:20:06 (UTC)
committer mickeyl <mickeyl>2003-04-16 13:20:06 (UTC)
commitbe5832dc22255be38884e352917f48d5b71ae657 (patch) (unidiff)
treeeedcdeecb13bd873788fa53599a682b730c3286f
parent05b76911ab2082436c577c1461f0d1210ce0aa33 (diff)
downloadopie-be5832dc22255be38884e352917f48d5b71ae657.zip
opie-be5832dc22255be38884e352917f48d5b71ae657.tar.gz
opie-be5832dc22255be38884e352917f48d5b71ae657.tar.bz2
fix segfault after last packet when capturing from capture file
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/net/wellenreiter/gui/wellenreiter.cpp11
1 files changed, 9 insertions, 2 deletions
diff --git a/noncore/net/wellenreiter/gui/wellenreiter.cpp b/noncore/net/wellenreiter/gui/wellenreiter.cpp
index b4b6aa3..0105e09 100644
--- a/noncore/net/wellenreiter/gui/wellenreiter.cpp
+++ b/noncore/net/wellenreiter/gui/wellenreiter.cpp
@@ -290,100 +290,107 @@ void Wellenreiter::startClicked()
290 QMessageBox::information( this, "Wellenreiter II", "Your device is not\nproperly configured. Please reconfigure!" ); 290 QMessageBox::information( this, "Wellenreiter II", "Your device is not\nproperly configured. Please reconfigure!" );
291 return; 291 return;
292 } 292 }
293 293
294 // configure device 294 // configure device
295 295
296 ONetwork* net = ONetwork::instance(); 296 ONetwork* net = ONetwork::instance();
297 iface = static_cast<OWirelessNetworkInterface*>(net->interface( interface )); 297 iface = static_cast<OWirelessNetworkInterface*>(net->interface( interface ));
298 298
299 // set monitor mode 299 // set monitor mode
300 300
301 switch ( cardtype ) 301 switch ( cardtype )
302 { 302 {
303 case DEVTYPE_CISCO: iface->setMonitoring( new OCiscoMonitoringInterface( iface ) ); break; 303 case DEVTYPE_CISCO: iface->setMonitoring( new OCiscoMonitoringInterface( iface ) ); break;
304 case DEVTYPE_WLAN_NG: iface->setMonitoring( new OWlanNGMonitoringInterface( iface ) ); break; 304 case DEVTYPE_WLAN_NG: iface->setMonitoring( new OWlanNGMonitoringInterface( iface ) ); break;
305 case DEVTYPE_HOSTAP: iface->setMonitoring( new OHostAPMonitoringInterface( iface ) ); break; 305 case DEVTYPE_HOSTAP: iface->setMonitoring( new OHostAPMonitoringInterface( iface ) ); break;
306 case DEVTYPE_ORINOCO: iface->setMonitoring( new OOrinocoMonitoringInterface( iface ) ); break; 306 case DEVTYPE_ORINOCO: iface->setMonitoring( new OOrinocoMonitoringInterface( iface ) ); break;
307 case DEVTYPE_MANUAL: QMessageBox::information( this, "Wellenreiter II", "Bring your device into\nmonitor mode now." ); break; 307 case DEVTYPE_MANUAL: QMessageBox::information( this, "Wellenreiter II", "Bring your device into\nmonitor mode now." ); break;
308 case DEVTYPE_FILE: qDebug( "Wellenreiter: Capturing from file '%s'", (const char*) interface ); break; 308 case DEVTYPE_FILE: qDebug( "Wellenreiter: Capturing from file '%s'", (const char*) interface ); break;
309 default: assert( 0 ); // shouldn't reach this 309 default: assert( 0 ); // shouldn't reach this
310 } 310 }
311 311
312 // switch device into monitor mode 312 // switch device into monitor mode
313 if ( cardtype < DEVTYPE_FILE ) 313 if ( cardtype < DEVTYPE_FILE )
314 { 314 {
315 if ( cardtype != DEVTYPE_MANUAL ) 315 if ( cardtype != DEVTYPE_MANUAL )
316 iface->setMonitorMode( true ); 316 iface->setMonitorMode( true );
317 if ( !iface->monitorMode() ) 317 if ( !iface->monitorMode() )
318 { 318 {
319 QMessageBox::warning( this, "Wellenreiter II", "Can't set device into monitor mode." ); 319 QMessageBox::warning( this, "Wellenreiter II", "Can't set device into monitor mode." );
320 return; 320 return;
321 } 321 }
322 } 322 }
323 323
324 // open pcap and start sniffing 324 // open pcap and start sniffing
325 if ( cardtype != DEVTYPE_FILE ) 325 if ( cardtype != DEVTYPE_FILE )
326 { 326 {
327 if ( configwindow->writeCaptureFile->isEnabled() ) 327 if ( configwindow->writeCaptureFile->isEnabled() )
328 { 328 {
329 QString dumpname( configwindow->captureFileName->text() ); 329 QString dumpname( configwindow->captureFileName->text() );
330 dumpname.append( '-' ); 330 dumpname.append( '-' );
331 dumpname.append( QTime::currentTime().toString().replace( QRegExp( ":" ), "-" ) ); 331 dumpname.append( QTime::currentTime().toString().replace( QRegExp( ":" ), "-" ) );
332 dumpname.append( ".wellenreiter" ); 332 dumpname.append( ".wellenreiter" );
333 pcap->open( interface, dumpname ); 333 pcap->open( interface, dumpname );
334 } 334 }
335 else 335 else
336 { 336 {
337 pcap->open( interface ); 337 pcap->open( interface );
338 } 338 }
339 } 339 }
340 else 340 else
341 { 341 {
342 pcap->open( QFile( interface ) ); 342 pcap->open( QFile( interface ) );
343 } 343 }
344 344
345 if ( !pcap->isOpen() ) 345 if ( !pcap->isOpen() )
346 { 346 {
347 QMessageBox::warning( this, "Wellenreiter II", "Can't open packet capturer:\n" + QString(strerror( errno ) )); 347 QMessageBox::warning( this, "Wellenreiter II", "Can't open packet capturer:\n" + QString(strerror( errno ) ));
348 return; 348 return;
349 } 349 }
350 350
351 // set capturer to non-blocking mode 351 // set capturer to non-blocking mode
352 pcap->setBlocking( false ); 352 pcap->setBlocking( false );
353 353
354 // start channel hopper 354 // start channel hopper
355 if ( cardtype != DEVTYPE_FILE ) 355 if ( cardtype != DEVTYPE_FILE )
356 iface->setChannelHopping( 1000 ); //use interval from config window 356 iface->setChannelHopping( 1000 ); //use interval from config window
357 357
358 if ( cardtype != DEVTYPE_FILE ) 358 if ( cardtype != DEVTYPE_FILE )
359 { 359 {
360 // connect socket notifier and start channel hopper 360 // connect socket notifier and start channel hopper
361 connect( pcap, SIGNAL( receivedPacket(OPacket*) ), this, SLOT( receivePacket(OPacket*) ) ); 361 connect( pcap, SIGNAL( receivedPacket(OPacket*) ), this, SLOT( receivePacket(OPacket*) ) );
362 connect( iface->channelHopper(), SIGNAL( hopped(int) ), this, SLOT( channelHopped(int) ) ); 362 connect( iface->channelHopper(), SIGNAL( hopped(int) ), this, SLOT( channelHopped(int) ) );
363 } 363 }
364 else 364 else
365 { 365 {
366 // start timer for reading packets 366 // start timer for reading packets
367 startTimer( 100 ); 367 startTimer( 100 );
368 } 368 }
369 369
370 logwindow->log( "(i) Started Scanning." ); 370 logwindow->log( "(i) Started Scanning." );
371 sniffing = true; 371 sniffing = true;
372 emit( startedSniffing() ); 372 emit( startedSniffing() );
373 if ( cardtype != DEVTYPE_FILE ) channelHopped( 6 ); // set title 373 if ( cardtype != DEVTYPE_FILE ) channelHopped( 6 ); // set title
374 else 374 else
375 { 375 {
376 assert( parent() ); 376 assert( parent() );
377 ( (QMainWindow*) parent() )->setCaption( "Wellenreiter II - replaying capture file..." ); 377 ( (QMainWindow*) parent() )->setCaption( "Wellenreiter II - replaying capture file..." );
378 } 378 }
379} 379}
380 380
381 381
382void Wellenreiter::timerEvent( QTimerEvent* ) 382void Wellenreiter::timerEvent( QTimerEvent* )
383{ 383{
384 qDebug( "Wellenreiter::timerEvent()" ); 384 qDebug( "Wellenreiter::timerEvent()" );
385 OPacket* p = pcap->next(); 385 OPacket* p = pcap->next();
386 receivePacket( p ); 386 if ( !p ) // no more packets available
387 delete p; 387 {
388 stopClicked();
389 }
390 else
391 {
392 receivePacket( p );
393 delete p;
394 }
388} 395}
389 396