summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--libopie2/opienet/opcap.cpp19
-rw-r--r--libopie2/opienet/opcap.h20
2 files changed, 37 insertions, 2 deletions
diff --git a/libopie2/opienet/opcap.cpp b/libopie2/opienet/opcap.cpp
index 523be3e..bef9182 100644
--- a/libopie2/opienet/opcap.cpp
+++ b/libopie2/opienet/opcap.cpp
@@ -866,192 +866,211 @@ bool OPacketCapturer::blocking() const
866 866
867void OPacketCapturer::close() 867void OPacketCapturer::close()
868{ 868{
869 if ( _open ) 869 if ( _open )
870 { 870 {
871 if ( _sn ) 871 if ( _sn )
872 { 872 {
873 _sn->disconnect( SIGNAL( activated(int) ), this, SLOT( readyToReceive() ) ); 873 _sn->disconnect( SIGNAL( activated(int) ), this, SLOT( readyToReceive() ) );
874 delete _sn; 874 delete _sn;
875 } 875 }
876 if ( _pcd ) 876 if ( _pcd )
877 { 877 {
878 pcap_dump_close( _pcd ); 878 pcap_dump_close( _pcd );
879 _pcd = 0; 879 _pcd = 0;
880 } 880 }
881 pcap_close( _pch ); 881 pcap_close( _pch );
882 _open = false; 882 _open = false;
883 } 883 }
884 884
885 qDebug( "OPacketCapturer::close() --- dumping capturing statistics..." ); 885 qDebug( "OPacketCapturer::close() --- dumping capturing statistics..." );
886 qDebug( "--------------------------------------------------" ); 886 qDebug( "--------------------------------------------------" );
887 for( QMap<QString,int>::Iterator it = _stats.begin(); it != _stats.end(); ++it ) 887 for( QMap<QString,int>::Iterator it = _stats.begin(); it != _stats.end(); ++it )
888 qDebug( "%s : %d", (const char*) it.key(), it.data() ); 888 qDebug( "%s : %d", (const char*) it.key(), it.data() );
889 qDebug( "--------------------------------------------------" ); 889 qDebug( "--------------------------------------------------" );
890 890
891} 891}
892 892
893 893
894int OPacketCapturer::dataLink() const 894int OPacketCapturer::dataLink() const
895{ 895{
896 return pcap_datalink( _pch ); 896 return pcap_datalink( _pch );
897} 897}
898 898
899 899
900int OPacketCapturer::fileno() const 900int OPacketCapturer::fileno() const
901{ 901{
902 if ( _open ) 902 if ( _open )
903 { 903 {
904 return pcap_fileno( _pch ); 904 return pcap_fileno( _pch );
905 } 905 }
906 else 906 else
907 { 907 {
908 return -1; 908 return -1;
909 } 909 }
910} 910}
911 911
912OPacket* OPacketCapturer::next() 912OPacket* OPacketCapturer::next()
913{ 913{
914 packetheaderstruct header; 914 packetheaderstruct header;
915 qDebug( "==> OPacketCapturer::next()" ); 915 qDebug( "==> OPacketCapturer::next()" );
916 const unsigned char* pdata = pcap_next( _pch, &header ); 916 const unsigned char* pdata = pcap_next( _pch, &header );
917 qDebug( "<== OPacketCapturer::next()" ); 917 qDebug( "<== OPacketCapturer::next()" );
918 if ( _pcd ) 918 if ( _pcd )
919 pcap_dump( (u_char*) _pcd, &header, pdata ); 919 pcap_dump( (u_char*) _pcd, &header, pdata );
920 920
921 if ( pdata && header.len ) 921 if ( pdata && header.len )
922 { 922 {
923 OPacket* p = new OPacket( dataLink(), header, pdata, 0 ); 923 OPacket* p = new OPacket( dataLink(), header, pdata, 0 );
924 // packets shouldn't be inserted in the QObject child-parent hierarchy, 924 // packets shouldn't be inserted in the QObject child-parent hierarchy,
925 // because due to memory constraints they will be deleted as soon 925 // because due to memory constraints they will be deleted as soon
926 // as possible - that is right after they have been processed 926 // as possible - that is right after they have been processed
927 // by emit() [ see below ] 927 // by emit() [ see below ]
928 //TODO: make gathering statistics optional, because it takes time 928 //TODO: make gathering statistics optional, because it takes time
929 p->updateStats( _stats, const_cast<QObjectList*>( p->children() ) ); 929 p->updateStats( _stats, const_cast<QObjectList*>( p->children() ) );
930 930
931 return p; 931 return p;
932 } 932 }
933 else 933 else
934 { 934 {
935 qWarning( "OPacketCapturer::next() - no packet received!" ); 935 qWarning( "OPacketCapturer::next() - no packet received!" );
936 return 0; 936 return 0;
937 } 937 }
938} 938}
939 939
940 940
941bool OPacketCapturer::open( const QString& name, const QString& filename ) 941bool OPacketCapturer::open( const QString& name, const QString& filename )
942{ 942{
943 if ( _open ) 943 if ( _open )
944 { 944 {
945 if ( name == _name ) // ignore opening an already openend device 945 if ( name == _name ) // ignore opening an already openend device
946 { 946 {
947 return true; 947 return true;
948 } 948 }
949 else // close the last opened device 949 else // close the last opened device
950 { 950 {
951 close(); 951 close();
952 } 952 }
953 } 953 }
954 954
955 _name = name; 955 _name = name;
956 956
957 // open libpcap 957 // open libpcap
958 pcap_t* handle = pcap_open_live( const_cast<char*>( (const char*) name ), 1024, 0, 0, &_errbuf[0] ); 958 pcap_t* handle = pcap_open_live( const_cast<char*>( (const char*) name ), 1024, 0, 0, &_errbuf[0] );
959 959
960 if ( !handle ) 960 if ( !handle )
961 { 961 {
962 qWarning( "OPacketCapturer::open(): can't open libpcap with '%s': %s", (const char*) name, _errbuf ); 962 qWarning( "OPacketCapturer::open(): can't open libpcap with '%s': %s", (const char*) name, _errbuf );
963 return false; 963 return false;
964 } 964 }
965 965
966 qDebug( "OPacketCapturer::open(): libpcap [%s] opened successfully.", (const char*) name ); 966 qDebug( "OPacketCapturer::open(): libpcap [%s] opened successfully.", (const char*) name );
967 _pch = handle; 967 _pch = handle;
968 _open = true; 968 _open = true;
969 _stats.clear(); 969 _stats.clear();
970 970
971 // in case we have an application object, create a socket notifier 971 // in case we have an application object, create a socket notifier
972 if ( qApp ) //TODO: I don't like this here... 972 if ( qApp ) //TODO: I don't like this here...
973 { 973 {
974 _sn = new QSocketNotifier( fileno(), QSocketNotifier::Read ); 974 _sn = new QSocketNotifier( fileno(), QSocketNotifier::Read );
975 connect( _sn, SIGNAL( activated(int) ), this, SLOT( readyToReceive() ) ); 975 connect( _sn, SIGNAL( activated(int) ), this, SLOT( readyToReceive() ) );
976 } 976 }
977 977
978 // if requested, open a dump 978 // if requested, open a dump
979 pcap_dumper_t* dump = pcap_dump_open( _pch, const_cast<char*>( (const char*) filename ) ); 979 pcap_dumper_t* dump = pcap_dump_open( _pch, const_cast<char*>( (const char*) filename ) );
980 if ( !dump ) 980 if ( !dump )
981 { 981 {
982 qWarning( "OPacketCapturer::open(): can't open dump with '%s': %s", (const char*) filename, _errbuf ); 982 qWarning( "OPacketCapturer::open(): can't open dump with '%s': %s", (const char*) filename, _errbuf );
983 return false; 983 return false;
984 } 984 }
985 qDebug( "OPacketCapturer::open(): dump [%s] opened successfully.", (const char*) filename ); 985 qDebug( "OPacketCapturer::open(): dump [%s] opened successfully.", (const char*) filename );
986 _pcd = dump; 986 _pcd = dump;
987 987
988 return true; 988 return true;
989} 989}
990 990
991 991
992bool OPacketCapturer::open( const QFile& file ) 992bool OPacketCapturer::open( const QFile& file )
993{ 993{
994 QString name = file.name(); 994 QString name = file.name();
995 995
996 if ( _open ) 996 if ( _open )
997 { 997 {
998 close(); 998 close();
999 if ( name == _name ) // ignore opening an already openend device 999 if ( name == _name ) // ignore opening an already openend device
1000 { 1000 {
1001 return true; 1001 return true;
1002 } 1002 }
1003 else // close the last opened device 1003 else // close the last opened device
1004 { 1004 {
1005 close(); 1005 close();
1006 } 1006 }
1007 } 1007 }
1008 1008
1009 _name = name; 1009 _name = name;
1010 1010
1011 pcap_t* handle = pcap_open_offline( const_cast<char*>( (const char*) name ), &_errbuf[0] ); 1011 pcap_t* handle = pcap_open_offline( const_cast<char*>( (const char*) name ), &_errbuf[0] );
1012 1012
1013 if ( handle ) 1013 if ( handle )
1014 { 1014 {
1015 qDebug( "OPacketCapturer::open(): libpcap opened successfully." ); 1015 qDebug( "OPacketCapturer::open(): libpcap opened successfully." );
1016 _pch = handle; 1016 _pch = handle;
1017 _open = true; 1017 _open = true;
1018 1018
1019 // in case we have an application object, create a socket notifier 1019 // in case we have an application object, create a socket notifier
1020 if ( qApp ) 1020 if ( qApp )
1021 { 1021 {
1022 _sn = new QSocketNotifier( fileno(), QSocketNotifier::Read ); 1022 _sn = new QSocketNotifier( fileno(), QSocketNotifier::Read );
1023 connect( _sn, SIGNAL( activated(int) ), this, SLOT( readyToReceive() ) ); 1023 connect( _sn, SIGNAL( activated(int) ), this, SLOT( readyToReceive() ) );
1024 } 1024 }
1025 1025
1026 return true; 1026 return true;
1027 } 1027 }
1028 else 1028 else
1029 { 1029 {
1030 qDebug( "OPacketCapturer::open(): can't open libpcap with '%s': %s", (const char*) name, _errbuf ); 1030 qDebug( "OPacketCapturer::open(): can't open libpcap with '%s': %s", (const char*) name, _errbuf );
1031 return false; 1031 return false;
1032 } 1032 }
1033 1033
1034} 1034}
1035 1035
1036 1036
1037bool OPacketCapturer::isOpen() const 1037bool OPacketCapturer::isOpen() const
1038{ 1038{
1039 return _open; 1039 return _open;
1040} 1040}
1041 1041
1042 1042
1043void OPacketCapturer::readyToReceive() 1043void OPacketCapturer::readyToReceive()
1044{ 1044{
1045 qDebug( "OPacketCapturer::readyToReceive(): about to emit 'receivePacket(p)'" ); 1045 qDebug( "OPacketCapturer::readyToReceive(): about to emit 'receivePacket(p)'" );
1046 OPacket* p = next(); 1046 OPacket* p = next();
1047 emit receivedPacket( p ); 1047 emit receivedPacket( p );
1048 // emit is synchronous - packet has been dealt with, now it's safe to delete 1048 // emit is synchronous - packet has been dealt with, now it's safe to delete
1049 delete p; 1049 delete p;
1050} 1050}
1051 1051
1052 1052
1053const QMap<QString,int>& OPacketCapturer::statistics() const 1053const QMap<QString,int>& OPacketCapturer::statistics() const
1054{ 1054{
1055 return _stats; 1055 return _stats;
1056} 1056}
1057 1057
1058
1059int OPacketCapturer::snapShot() const
1060{
1061 return pcap_snapshot( _pch );
1062}
1063
1064
1065bool OPacketCapturer::swapped() const
1066{
1067 return pcap_is_swapped( _pch );
1068}
1069
1070
1071QString OPacketCapturer::version() const
1072{
1073 return QString().sprintf( "%s.%s", pcap_major_version( _pch ), pcap_minor_version( _pch ) );
1074}
1075
1076
diff --git a/libopie2/opienet/opcap.h b/libopie2/opienet/opcap.h
index 5a50d9b..ad5b07c 100644
--- a/libopie2/opienet/opcap.h
+++ b/libopie2/opienet/opcap.h
@@ -353,238 +353,254 @@ class OWaveLanManagementIBSS : public QObject
353class OWaveLanManagementChallenge : public QObject 353class OWaveLanManagementChallenge : public QObject
354{ 354{
355 Q_OBJECT 355 Q_OBJECT
356 356
357 public: 357 public:
358 OWaveLanManagementChallenge( const unsigned char*, const struct challenge_t*, QObject* parent = 0 ); 358 OWaveLanManagementChallenge( const unsigned char*, const struct challenge_t*, QObject* parent = 0 );
359 virtual ~OWaveLanManagementChallenge(); 359 virtual ~OWaveLanManagementChallenge();
360 360
361 private: 361 private:
362 const struct challenge_t* _data; 362 const struct challenge_t* _data;
363}; 363};
364 364
365/*====================================================================================== 365/*======================================================================================
366 * OWaveLanDataPacket - type: data (T_DATA) 366 * OWaveLanDataPacket - type: data (T_DATA)
367 *======================================================================================*/ 367 *======================================================================================*/
368 368
369class OWaveLanDataPacket : public QObject 369class OWaveLanDataPacket : public QObject
370{ 370{
371 Q_OBJECT 371 Q_OBJECT
372 372
373 public: 373 public:
374 OWaveLanDataPacket( const unsigned char*, const struct ieee_802_11_data_header*, OWaveLanPacket* parent = 0 ); 374 OWaveLanDataPacket( const unsigned char*, const struct ieee_802_11_data_header*, OWaveLanPacket* parent = 0 );
375 virtual ~OWaveLanDataPacket(); 375 virtual ~OWaveLanDataPacket();
376 376
377 private: 377 private:
378 const struct ieee_802_11_data_header* _header; 378 const struct ieee_802_11_data_header* _header;
379}; 379};
380 380
381/*====================================================================================== 381/*======================================================================================
382 * OWaveLanControlPacket - type: control (T_CTRL) 382 * OWaveLanControlPacket - type: control (T_CTRL)
383 *======================================================================================*/ 383 *======================================================================================*/
384 384
385class OWaveLanControlPacket : public QObject 385class OWaveLanControlPacket : public QObject
386{ 386{
387 Q_OBJECT 387 Q_OBJECT
388 388
389 public: 389 public:
390 OWaveLanControlPacket( const unsigned char*, const struct ieee_802_11_control_header*, OWaveLanPacket* parent = 0 ); 390 OWaveLanControlPacket( const unsigned char*, const struct ieee_802_11_control_header*, OWaveLanPacket* parent = 0 );
391 virtual ~OWaveLanControlPacket(); 391 virtual ~OWaveLanControlPacket();
392 392
393 private: 393 private:
394 const struct ieee_802_11_control_header* _header; 394 const struct ieee_802_11_control_header* _header;
395}; 395};
396 396
397/*====================================================================================== 397/*======================================================================================
398 * OLLCPacket - IEEE 802.2 Link Level Control 398 * OLLCPacket - IEEE 802.2 Link Level Control
399 *======================================================================================*/ 399 *======================================================================================*/
400 400
401class OLLCPacket : public QObject 401class OLLCPacket : public QObject
402{ 402{
403 Q_OBJECT 403 Q_OBJECT
404 404
405 public: 405 public:
406 OLLCPacket( const unsigned char*, const struct ieee_802_11_802_2_header* data, QObject* parent = 0 ); 406 OLLCPacket( const unsigned char*, const struct ieee_802_11_802_2_header* data, QObject* parent = 0 );
407 virtual ~OLLCPacket(); 407 virtual ~OLLCPacket();
408 408
409 private: 409 private:
410 const struct ieee_802_11_802_2_header* _header; 410 const struct ieee_802_11_802_2_header* _header;
411}; 411};
412 412
413/*====================================================================================== 413/*======================================================================================
414 * OIPPacket 414 * OIPPacket
415 *======================================================================================*/ 415 *======================================================================================*/
416 416
417class OIPPacket : public QObject 417class OIPPacket : public QObject
418{ 418{
419 Q_OBJECT 419 Q_OBJECT
420 420
421 public: 421 public:
422 OIPPacket( const unsigned char*, const struct iphdr*, QObject* parent = 0 ); 422 OIPPacket( const unsigned char*, const struct iphdr*, QObject* parent = 0 );
423 virtual ~OIPPacket(); 423 virtual ~OIPPacket();
424 424
425 QHostAddress fromIPAddress() const; 425 QHostAddress fromIPAddress() const;
426 QHostAddress toIPAddress() const; 426 QHostAddress toIPAddress() const;
427 427
428 int tos() const; 428 int tos() const;
429 int len() const; 429 int len() const;
430 int id() const; 430 int id() const;
431 int offset() const; 431 int offset() const;
432 int ttl() const; 432 int ttl() const;
433 int protocol() const; 433 int protocol() const;
434 int checksum() const; 434 int checksum() const;
435 435
436 private: 436 private:
437 const struct iphdr* _iphdr; 437 const struct iphdr* _iphdr;
438}; 438};
439 439
440/*====================================================================================== 440/*======================================================================================
441 * OARPPacket 441 * OARPPacket
442 *======================================================================================*/ 442 *======================================================================================*/
443 443
444class OARPPacket : public QObject 444class OARPPacket : public QObject
445{ 445{
446 Q_OBJECT 446 Q_OBJECT
447 447
448 public: 448 public:
449 OARPPacket( const unsigned char*, const struct myarphdr*, QObject* parent = 0 ); 449 OARPPacket( const unsigned char*, const struct myarphdr*, QObject* parent = 0 );
450 virtual ~OARPPacket(); 450 virtual ~OARPPacket();
451 451
452 QHostAddress senderIPV4Address() const; 452 QHostAddress senderIPV4Address() const;
453 OMacAddress senderMacAddress() const; 453 OMacAddress senderMacAddress() const;
454 QHostAddress targetIPV4Address() const; 454 QHostAddress targetIPV4Address() const;
455 OMacAddress targetMacAddress() const; 455 OMacAddress targetMacAddress() const;
456 456
457 //int type() const; 457 //int type() const;
458 QString type() const; 458 QString type() const;
459 459
460 private: 460 private:
461 const struct myarphdr* _arphdr; 461 const struct myarphdr* _arphdr;
462}; 462};
463 463
464/*====================================================================================== 464/*======================================================================================
465 * OUDPPacket 465 * OUDPPacket
466 *======================================================================================*/ 466 *======================================================================================*/
467 467
468class OUDPPacket : public QObject 468class OUDPPacket : public QObject
469{ 469{
470 Q_OBJECT 470 Q_OBJECT
471 471
472 public: 472 public:
473 OUDPPacket( const unsigned char*, const struct udphdr*, QObject* parent = 0 ); 473 OUDPPacket( const unsigned char*, const struct udphdr*, QObject* parent = 0 );
474 virtual ~OUDPPacket(); 474 virtual ~OUDPPacket();
475 475
476 int fromPort() const; 476 int fromPort() const;
477 int toPort() const; 477 int toPort() const;
478 478
479 private: 479 private:
480 const struct udphdr* _udphdr; 480 const struct udphdr* _udphdr;
481}; 481};
482 482
483/*====================================================================================== 483/*======================================================================================
484 * OTCPPacket 484 * OTCPPacket
485 *======================================================================================*/ 485 *======================================================================================*/
486 486
487class OTCPPacket : public QObject 487class OTCPPacket : public QObject
488{ 488{
489 Q_OBJECT 489 Q_OBJECT
490 490
491 public: 491 public:
492 OTCPPacket( const unsigned char*, const struct tcphdr*, QObject* parent = 0 ); 492 OTCPPacket( const unsigned char*, const struct tcphdr*, QObject* parent = 0 );
493 virtual ~OTCPPacket(); 493 virtual ~OTCPPacket();
494 494
495 int fromPort() const; 495 int fromPort() const;
496 int toPort() const; 496 int toPort() const;
497 497
498 private: 498 private:
499 const struct tcphdr* _tcphdr; 499 const struct tcphdr* _tcphdr;
500}; 500};
501 501
502 502
503/*====================================================================================== 503/*======================================================================================
504 * OPacketCapturer 504 * OPacketCapturer
505 *======================================================================================*/ 505 *======================================================================================*/
506 506
507/** 507/**
508 * @brief A class based wrapper for network packet capturing. 508 * @brief A class based wrapper for network packet capturing.
509 * 509 *
510 * This class is the base of a high-level interface to the well known packet capturing 510 * This class is the base of a high-level interface to the well known packet capturing
511 * library libpcap. ... 511 * library libpcap. ...
512 */ 512 */
513class OPacketCapturer : public QObject 513class OPacketCapturer : public QObject
514{ 514{
515 Q_OBJECT 515 Q_OBJECT
516 516
517 public: 517 public:
518 /** 518 /**
519 * Constructor. 519 * Constructor.
520 */ 520 */
521 OPacketCapturer( QObject* parent = 0, const char* name = 0 ); 521 OPacketCapturer( QObject* parent = 0, const char* name = 0 );
522 /** 522 /**
523 * Destructor. 523 * Destructor.
524 */ 524 */
525 ~OPacketCapturer(); 525 ~OPacketCapturer();
526 /** 526 /**
527 * Setting the packet capturer to use blocking IO calls can be useful when 527 * Setting the packet capturer to use blocking IO calls can be useful when
528 * not using the socket notifier, e.g. without an application object. 528 * not using the socket notifier, e.g. without an application object.
529 */ 529 */
530 void setBlocking( bool ); 530 void setBlocking( bool );
531 /** 531 /**
532 * @returns true if the packet capturer uses blocking IO calls. 532 * @returns true if the packet capturer uses blocking IO calls.
533 */ 533 */
534 bool blocking() const; 534 bool blocking() const;
535 /** 535 /**
536 * Closes the packet capturer. This is automatically done in the destructor. 536 * Closes the packet capturer. This is automatically done in the destructor.
537 */ 537 */
538 void close(); 538 void close();
539 /** 539 /**
540 * @returns the data link type. 540 * @returns the data link type.
541 * @see <pcap.h> for possible values. 541 * @see <pcap.h> for possible values.
542 */ 542 */
543 int dataLink() const; 543 int dataLink() const;
544 /** 544 /**
545 * @returns the filedescriptor of the packet capturer. This is only useful, if 545 * @returns the file descriptor of the packet capturer. This is only useful, if
546 * not using the socket notifier, e.g. without an application object. 546 * not using the socket notifier, e.g. without an application object.
547 */ 547 */
548 int fileno() const; 548 int fileno() const;
549 /** 549 /**
550 * @returns the next @ref OPacket from the packet capturer. 550 * @returns the next @ref OPacket from the packet capturer.
551 * @note If blocking mode is true then this call might block. 551 * @note If blocking mode is true then this call might block.
552 */ 552 */
553 OPacket* next(); 553 OPacket* next();
554 /** 554 /**
555 * Open the packet capturer to capture packets in live-mode from @a interface. 555 * Open the packet capturer to capture packets in live-mode from @a interface.
556 * If a @a filename is given, all captured packets are output to a tcpdump-compatible capture file. 556 * If a @a filename is given, all captured packets are output to a tcpdump-compatible capture file.
557 */ 557 */
558 bool open( const QString& interface, const QString& filename = QString::null ); 558 bool open( const QString& interface, const QString& filename = QString::null );
559 /** 559 /**
560 * Open the packet capturer to capture packets in offline-mode from @a file. 560 * Open the packet capturer to capture packets in offline-mode from @a file.
561 */ 561 */
562 bool open( const QFile& file ); 562 bool open( const QFile& file );
563 /** 563 /**
564 * @returns true if the packet capturer is open 564 * @returns true if the packet capturer is open
565 */ 565 */
566 bool isOpen() const; 566 bool isOpen() const;
567 567 /**
568 * @returns the snapshot length of this packet capturer
569 */
570 int snapShot() const;
571 /**
572 * @returns true if the input capture file has a different byte-order
573 * than the byte-order of the running system.
574 */
575 bool swapped() const;
576 /**
577 * @returns the libpcap version string used to write the input capture file.
578 */
579 QString version() const;
580 /**
581 * @returns the packet statistic database.
582 * @see QMap
583 */
568 const QMap<QString,int>& statistics() const; 584 const QMap<QString,int>& statistics() const;
569 585
570 signals: 586 signals:
571 /** 587 /**
572 * This signal is emitted, when a packet has been received. 588 * This signal is emitted, when a packet has been received.
573 */ 589 */
574 void receivedPacket( OPacket* ); 590 void receivedPacket( OPacket* );
575 591
576 protected slots: 592 protected slots:
577 void readyToReceive(); 593 void readyToReceive();
578 594
579 protected: 595 protected:
580 QString _name; // devicename 596 QString _name; // devicename
581 bool _open; // check this before doing pcap calls 597 bool _open; // check this before doing pcap calls
582 pcap_t* _pch; // pcap library handle 598 pcap_t* _pch; // pcap library handle
583 pcap_dumper_t* _pcd; // pcap dumper handle 599 pcap_dumper_t* _pcd; // pcap dumper handle
584 QSocketNotifier* _sn; // socket notifier for main loop 600 QSocketNotifier* _sn; // socket notifier for main loop
585 mutable char _errbuf[PCAP_ERRBUF_SIZE]; // holds error strings from libpcap 601 mutable char _errbuf[PCAP_ERRBUF_SIZE]; // holds error strings from libpcap
586 QMap<QString, int> _stats; // statistics; 602 QMap<QString, int> _stats; // statistics;
587}; 603};
588 604
589#endif // OPCAP_H 605#endif // OPCAP_H
590 606