summaryrefslogtreecommitdiff
authormickeyl <mickeyl>2004-01-03 18:33:43 (UTC)
committer mickeyl <mickeyl>2004-01-03 18:33:43 (UTC)
commit27b84ed363fd7fc52092e3c2d1e49dca079b7ffd (patch) (side-by-side diff)
tree932806dc83d84720bcb259df8711d894932580e1
parent3889c8f853aa2d128f54389b17f08fc7b9150788 (diff)
downloadopie-27b84ed363fd7fc52092e3c2d1e49dca079b7ffd.zip
opie-27b84ed363fd7fc52092e3c2d1e49dca079b7ffd.tar.gz
opie-27b84ed363fd7fc52092e3c2d1e49dca079b7ffd.tar.bz2
slightly improve the speed reading the manufacturers list
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--libopie2/opienet/omanufacturerdb.cpp13
-rwxr-xr-xlibopie2/tools/regen.py230
-rw-r--r--noncore/net/wellenreiter/ChangeLog9
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
@@ -1,118 +1,127 @@
/*
                This file is part of the Opie Project
              (C) 2003 Michael 'Mickey' Lauer <mickey@Vanille.de>
=.
.=l.
           .>+-=
 _;:,     .>    :=|. This program is free software; you can
.> <`_,   >  .   <= redistribute it and/or modify it under
:`=1 )Y*s>-.--   : the terms of the GNU Library General Public
.="- .-=="i,     .._ License as published by the Free Software
 - .   .-<_>     .<> Foundation; either version 2 of the License,
     ._= =}       : or (at your option) any later version.
    .%`+i>       _;_.
    .i_,=:_.      -<s. This program is distributed in the hope that
     +  .  -:.       = it will be useful, but WITHOUT ANY WARRANTY;
    : ..    .:,     . . . without even the implied warranty of
    =_        +     =;=|` MERCHANTABILITY or FITNESS FOR A
  _.=:.       :    :=>`: PARTICULAR PURPOSE. See the GNU
..}^=.=       =       ; Library General Public License for more
++=   -.     .`     .: details.
 :     =  ...= . :.=-
 -.   .:....=;==+<; You should have received a copy of the GNU
  -_. . .   )=.  = Library General Public License along with
    --        :-=` this library; see the file COPYING.LIB.
If not, write to the Free Software Foundation,
Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA.
*/
#include "omanufacturerdb.h"
/* OPIE CORE */
#include <opie2/odebug.h>
/* QT */
#include <qapplication.h>
#include <qstring.h>
#include <qfile.h>
#include <qtextstream.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()
{
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,67 +1,72 @@
+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).
2003-04-12 Michael Lauer <mickey@Vanille.de>
* Released as Version 1.0 (Beta)
* GUI enhancements in the Menubar and the Toolbar.
* Improved keyboard handling.
* Added sanity checks for running Wellenreiter II as non-root or with dhcp clients in the background.
* Add writing and replaying of libpcap compatible capture files.
2003-04-08 Michael Lauer <mickey@Vanille.de>
* Released as Version 0.2 (Alpha)
* Closed memory leak in packet capturer.
* Fixed client stations appearing under essid as access points.
* Fixed false WEP reporting in some cases.
* Started with inspecting data packages.
* Add detecting associated client stations in infrastructural networks (if they transmit data).
* Worked around buggy hostap drivers writing past fixed-length-structures on arm.
* Added dynamic checking of available private ioctls.
* Added a saveable hex window for packet dissection.
2003-03-30 Michael Lauer <mickey@Vanille.de>
* Released as Version 0.1 (Alpha)
2003-03-25 Michael Lauer <mickey@Vanille.de>
* Rewrote Wellenreiter II from scratch - including the sniffing engine.
* Beacon inspection works and finds ad-hoc networks and managed networks.