author | mickeyl <mickeyl> | 2004-01-03 18:33:43 (UTC) |
---|---|---|
committer | mickeyl <mickeyl> | 2004-01-03 18:33:43 (UTC) |
commit | 27b84ed363fd7fc52092e3c2d1e49dca079b7ffd (patch) (side-by-side diff) | |
tree | 932806dc83d84720bcb259df8711d894932580e1 | |
parent | 3889c8f853aa2d128f54389b17f08fc7b9150788 (diff) | |
download | opie-27b84ed363fd7fc52092e3c2d1e49dca079b7ffd.zip opie-27b84ed363fd7fc52092e3c2d1e49dca079b7ffd.tar.gz opie-27b84ed363fd7fc52092e3c2d1e49dca079b7ffd.tar.bz2 |
slightly improve the speed reading the manufacturers list
-rw-r--r-- | libopie2/opienet/omanufacturerdb.cpp | 13 | ||||
-rwxr-xr-x | libopie2/tools/regen.py | 230 | ||||
-rw-r--r-- | noncore/net/wellenreiter/ChangeLog | 9 |
3 files changed, 221 insertions, 31 deletions
diff --git a/libopie2/opienet/omanufacturerdb.cpp b/libopie2/opienet/omanufacturerdb.cpp index 595633d..f61270b 100644 --- a/libopie2/opienet/omanufacturerdb.cpp +++ b/libopie2/opienet/omanufacturerdb.cpp @@ -53,66 +53,75 @@ OManufacturerDB* OManufacturerDB::instance() return _instance; } OManufacturerDB::OManufacturerDB() { QString filename( "/etc/manufacturers" ); odebug << "OManufacturerDB: trying to read " << filename << oendl; if ( !QFile::exists( filename ) ) { filename = "/opt/QtPalmtop/etc/manufacturers"; odebug << "OManufacturerDB: trying to read " << filename << oendl; if ( !QFile::exists( filename ) ) { filename = "/usr/share/wellenreiter/manufacturers"; odebug << "OManufacturerDB: trying to read " << filename << oendl; } } QFile file( filename ); bool hasFile = file.open( IO_ReadOnly ); if (!hasFile) { owarn << "OManufacturerDB: no valid manufacturer list found." << oendl; } else { odebug << "OManufacturerDB: found manufacturer list in " << filename << oendl; QTextStream s( &file ); QString addr; QString manu; QString extManu; + #ifdef OPIE_IMPROVE_GUI_LATENCY + int counter = 0; + #endif while (!s.atEnd()) { s >> addr; s >> manu; s >> extManu; manufacturers.insert( addr, manu ); manufacturersExt.insert( addr, extManu ); - odebug << "OmanufacturerDB: parse '" << addr << "' as '" << manu << "' (" << extManu << ")" << oendl; + // odebug << "OmanufacturerDB: parse '" << addr << "' as '" << manu << "' (" << extManu << ")" << oendl; #ifdef OPIE_IMPROVE_GUI_LATENCY - if ( qApp ) qApp->processEvents(); + counter++; + if ( counter == 50 ) + { + qApp->processEvents(); + counter = 0; + } #endif } + odebug << "OManufacturerDB: manufacturer list completed." << oendl; } } OManufacturerDB::~OManufacturerDB() { } const QString& OManufacturerDB::lookup( const QString& macaddr ) const { return manufacturers[macaddr.upper().left(8)]; } const QString& OManufacturerDB::lookupExt( const QString& macaddr ) const { QMap<QString,QString>::ConstIterator it = manufacturersExt.find( macaddr.upper().left(8) ); return it == manufacturersExt.end() ? lookup( macaddr ) : *it; } diff --git a/libopie2/tools/regen.py b/libopie2/tools/regen.py index 3779896..89385e1 100755 --- a/libopie2/tools/regen.py +++ b/libopie2/tools/regen.py @@ -1,96 +1,272 @@ #!/usr/bin/env python -# -# regenerate ioctl_table.h -# +"""Regenerate C++ mapping classes""" -import sys -import os -result = os.popen( 'find /usr/include -name "*.h" |xargs grep -h SIOC|grep 0x' ).readlines() +#---------------------------------------------------------------------------# +# # +#---------------------------------------------------------------------------# + +def regenDebugMapper( basename ): + """ + Debug Mapper - maps ioctl numbers to names, e.g. 0x4x5a -> SIOCGIWNAME + """ + + result = os.popen( 'find /usr/include -name "*.h" |xargs grep -h SIOC|grep 0x' ).readlines() -try: - tablehfile = file( sys.argv[1]+".h", "w" ) -except: - tablehfile = sys.stdout + try: + tablehfile = file( basename+".h", "w" ) + except: + tablehfile = sys.stdout -try: - tablecfile = file( sys.argv[1]+".cpp", "w" ) -except: - tablecfile = sys.stdout + try: + tablecfile = file( basename+".cpp", "w" ) + except: + tablecfile = sys.stdout -print >>tablehfile,""" + print >>tablehfile,""" /* - * debug value mapper - generated by regen.py - (C) Michael 'Mickey' Lauer <mickey@vanille.de> + * debug value mapper - generated by %s - (C) Michael 'Mickey' Lauer <mickey@vanille.de> */ #ifndef DEBUGMAPPER_H #define DEBUGMAPPER_H #include <qstring.h> #include <qintdict.h> typedef QIntDict<QString> IntStringMap; class DebugMapper { public: DebugMapper(); ~DebugMapper(); const QString& map( int value ) const; private: IntStringMap _map; }; #endif -""" +""" % sys.argv[0] -print >>tablecfile,""" + print >>tablecfile,""" /* - * debug value mapper - generated by regen.py - (C) Michael 'Mickey' Lauer <mickey@vanille.de> + * debug value mapper - generated by %s - (C) Michael 'Mickey' Lauer <mickey@vanille.de> */ #include <opie2/odebug.h> #include "%s" DebugMapper::DebugMapper() { odebug << "DebugMapper::DebugMapper()" << oendl; -""" % (tablehfile.name) +""" % ( sys.argv[0], tablehfile.name ) -for line in result: - l = line.split() - if not l[0].startswith( "#define" ) or not l[2].startswith( "0x" ): - print >>sys.stderr, "can't parse line: %s" % l - continue - print >>tablecfile, " _map.insert( %s, new QString(\"%s\") );" % ( l[2], l[1] ) + for line in result: + l = line.split() + if not l[0].startswith( "#define" ) or not l[2].startswith( "0x" ): + print >>sys.stderr, "can't parse line: %s" % l + continue + print >>tablecfile, " _map.insert( %s, new QString(\"%s\") );" % ( l[2], l[1] ) -print >>tablecfile,""" + print >>tablecfile,""" }; DebugMapper::~DebugMapper() { odebug << "DebugMapper::~DebugMapper()" << oendl; } const QString& DebugMapper::map( int value ) const { QString* result = _map[ value ]; if ( !result ) { owarn << "DebugMapper::map() - value " << value << " is not found." << oendl; return QString::null; } else { return *result; } } """ + +#---------------------------------------------------------------------------# +# # +#---------------------------------------------------------------------------# + +def regenManufacturerDB( basename ): + + try: + h = file( basename+".h", "w" ) + except: + h = sys.stdout + + try: + cpp = file( basename+".cpp", "w" ) + except: + cpp = sys.stdout + + print >>h,""" +#ifndef OMANUFACTURERDB_H +#define OMANUFACTURERDB_H + +#include <qmap.h> + +/** + * @brief A Ethernet card vendor database. + * + * This class encapsulates the lookup of Ethernet vendor given a + * certain Mac Address. Only the first three bytes define the vendor. + */ +class OManufacturerDB +{ + public: + /** + * @returns the one-and-only @ref OManufacturerDB instance. + */ + static OManufacturerDB* instance(); + /** + * @returns the short manufacturer string given a @a macaddr. + */ + const QString& lookup( const QString& macaddr ) const; + /** + * @returns the enhanced manufacturer string given a @a macaddr. + */ + const QString& lookupExt( const QString& macaddr ) const; + + protected: + OManufacturerDB(); + virtual ~OManufacturerDB(); + + private: + QMap<QString, QString> manufacturers; + QMap<QString, QString> manufacturersExt; + static OManufacturerDB* _instance; +}; + +#endif +""" + + print >>cpp,""" +#include "%s.h" + +/* OPIE CORE */ +#include <opie2/odebug.h> + +/* QT */ +#include <qapplication.h> +#include <qstring.h> + +#define OPIE_IMPROVE_GUI_LATENCY 1 + +OManufacturerDB* OManufacturerDB::_instance = 0; + +OManufacturerDB* OManufacturerDB::instance() +{ + if ( !OManufacturerDB::_instance ) + { + odebug << "OManufacturerDB::instance(): creating OManufacturerDB..." << oendl; + _instance = new OManufacturerDB(); + } + return _instance; +} + + +OManufacturerDB::OManufacturerDB() +{ +""" % basename + + count = 0 + for line in sys.stdin: + if line[0] == "#": # skip comments + continue + #print line.strip() + entries = line.strip().split() + #print "number of entries =", len( entries ) + #print entries + if len( entries ) < 2: + continue + elif len( entries ) == 2: + count += 1 + print "2-line detected." + print >>cpp, ' manufacturers.insert( "%s", "%s" );' % ( entries[0], entries[1] ) + print >>cpp, ' manufacturersExt.insert( "%s", "%s" );' % ( entries[0], entries[1] ) + elif len( entries ) > 2: + count += 1 + print "3-line detected." + print >>cpp, ' manufacturers.insert( "%s", "%s" );' % ( entries[0], entries[1] ) + print >>cpp, ' manufacturersExt.insert( "%s", "%s" );' % ( entries[0], "_".join( entries[3:] ) ) + else: + assert( false ) + if not (count % 1000): + print >>cpp,""" +#ifdef OPIE_IMPROVE_GUI_LATENCY + if (qApp) qApp->processEvents(); +#endif +""" + print "successfully parsed", count, "manufacturer lines" + print >>cpp,""" +} + + +OManufacturerDB::~OManufacturerDB() +{ +} + + +const QString& OManufacturerDB::lookup( const QString& macaddr ) const +{ + return manufacturers[macaddr.upper().left(8)]; +} + + +const QString& OManufacturerDB::lookupExt( const QString& macaddr ) const +{ + QMap<QString,QString>::ConstIterator it = manufacturersExt.find( macaddr.upper().left(8) ); + return it == manufacturersExt.end() ? lookup( macaddr ) : *it; +} +""" + +#---------------------------------------------------------------------------# +# # +#---------------------------------------------------------------------------# + +#---------------------------------------------------------------------------# +# # +#---------------------------------------------------------------------------# + +#---------------------------------------------------------------------------# +# # +#---------------------------------------------------------------------------# + +import sys +import os +import copy + +if __name__ == "__main__": + if len( sys.argv ) != 3: + print """ +Usage: %s <table> <basename> + +Available tables: %s +""" % ( sys.argv[0], [ str(k)[5:] for k in copy.copy( locals() ) if k.startswith( "regen" ) ] ) + sys.exit( -1 ) + + try: + func = locals()["regen%s" % sys.argv[1]] + except KeyError: + print "Table '%s' unknown." % sys.argv[1] + sys.exit( -1 ) + else: + func( sys.argv[2] ) + sys.exit( 0 )
\ No newline at end of file diff --git a/noncore/net/wellenreiter/ChangeLog b/noncore/net/wellenreiter/ChangeLog index 1ce25d5..55e13fc 100644 --- a/noncore/net/wellenreiter/ChangeLog +++ b/noncore/net/wellenreiter/ChangeLog @@ -1,39 +1,44 @@ +2004-??-?? Michael Lauer <mickey@Vanille.de> + + * Improved the speed reading the manufacturer list + * GPS coordinates are now presented in the DMS (as opposed to decimal) format + 2003-12-18 Michael Lauer <mickey@Vanille.de> * Released as Version 1.0.2 (Development Snapshot) - * Add automatic uploading of capture files to "The Capture Dump" site at + * Added automatic uploading of capture files to "The Capture Dump" site at http://www.Vanille.de/projects/capturedump.spy * Initial reading of the manufacturer database happens now in background - * Remove deprecated setMonitorMode() API ==> Use setMode( "monitor" ) now. + * Removed deprecated setMonitorMode() API ==> Use setMode( "monitor" ) now. The monitor mode now tries to use the standard IW_MODE_MONITOR first. If that doesn't work, it falls back to using the proprietary iwpriv commands 2003-11-30 Michael Lauer <mickey@Vanille.de> * Released as Version 1.0.1 (Development Snapshot) * Fixed ARP decoding for wired networks. Interestingly, 802.11 encapsulates these in IP packets, while wired ethernet just tags the type_of_protocol. * Added reading GPS data from a gps daemon. * Started preparations for utilizing Wellenreiter II in wired networks. * Implemented persistant configuration interface and retriggerable auto detection. * Added QCOP interface for talking to opie-networksettings. * Added parsing of DHCP packets and detecting DHCP servers. * Overhauled the configuration window and started with the customizable event system. * Added disabling the screensaver. * Added automatic opening and scrolling to the network tree if a new station appears. 2003-05-10 Michael Lauer <mickey@Vanille.de> * Released as Version 1.0 (Stable) * Added restarting the dhcp client if having killed it before. * Decouple dump files from live capture to shift control over 'what' is dumped to applications. 2003-05-05 Michael Lauer <mickey@Vanille.de> * Released as Version 1.0-RC1 (Release Candidate) * Fixed rare segfaults while sniffing and operating the GUI simultaenously. * Parse more data packets and detect more participating stations. * Added live graph window showing the signal strength on all channels. * Added parsing ARP packets and identifying IP addresses of participating stations. * Added parsing with optionally enabled PRISM headers (signal strength). |