summaryrefslogtreecommitdiff
path: root/libopie2/opienet
authormickeyl <mickeyl>2003-04-07 18:07:38 (UTC)
committer mickeyl <mickeyl>2003-04-07 18:07:38 (UTC)
commitcac6a08e456a057a19cc1fc56824fc98ff4f0bc1 (patch) (side-by-side diff)
treeb17fa559629bcb9f49d685d3ec8b8dddc6a20f46 /libopie2/opienet
parent75f029f87d4c84b37ccfe1c81ef205a6cd5fca79 (diff)
downloadopie-cac6a08e456a057a19cc1fc56824fc98ff4f0bc1.zip
opie-cac6a08e456a057a19cc1fc56824fc98ff4f0bc1.tar.gz
opie-cac6a08e456a057a19cc1fc56824fc98ff4f0bc1.tar.bz2
- add OManufacturerDB
- API extensions for OMacAddress - add data packet recognition for miniwellenreiter
Diffstat (limited to 'libopie2/opienet') (more/less context) (ignore whitespace changes)
-rw-r--r--libopie2/opienet/omanufacturerdb.cpp96
-rw-r--r--libopie2/opienet/omanufacturerdb.h37
-rw-r--r--libopie2/opienet/onetutils.cpp21
-rw-r--r--libopie2/opienet/onetutils.h3
-rw-r--r--libopie2/opienet/opcap.cpp8
-rw-r--r--libopie2/opienet/opienet.pro12
6 files changed, 162 insertions, 15 deletions
diff --git a/libopie2/opienet/omanufacturerdb.cpp b/libopie2/opienet/omanufacturerdb.cpp
new file mode 100644
index 0000000..ea15125
--- a/dev/null
+++ b/libopie2/opienet/omanufacturerdb.cpp
@@ -0,0 +1,96 @@
+/**********************************************************************
+** Copyright (C) 2002 Michael 'Mickey' Lauer. All rights reserved.
+**
+** This file is part of Opie Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+**********************************************************************/
+
+#include "omanufacturerdb.h"
+
+// Qt
+#include <qstring.h>
+#include <qfile.h>
+#include <qtextstream.h>
+
+OManufacturerDB* OManufacturerDB::_instance = 0;
+
+OManufacturerDB* OManufacturerDB::instance()
+{
+ if ( !OManufacturerDB::_instance )
+ {
+ qDebug( "OManufacturerDB::instance(): creating OManufacturerDB..." );
+ _instance = new OManufacturerDB();
+ }
+ return _instance;
+}
+
+
+OManufacturerDB::OManufacturerDB()
+{
+ QString filename( "/etc/manufacturers" );
+ qDebug( "OManufacturerDB: trying to read '%s'...", (const char*) filename );
+ if ( !QFile::exists( filename ) )
+ {
+ filename = "/opt/QtPalmtop/etc/manufacturers";
+ qDebug( "OManufacturerDB: trying to read '%s'...", (const char*) filename );
+ if ( !QFile::exists( filename ) )
+ {
+ filename = "/usr/share/wellenreiter/manufacturers";
+ qDebug( "OManufacturerDB: trying to read '%s'...", (const char*) filename );
+ }
+ }
+
+ QFile file( filename );
+ bool hasFile = file.open( IO_ReadOnly );
+ if (!hasFile)
+ {
+ qWarning( "OManufacturerDB: no valid manufacturer list found.", (const char*) filename );
+ }
+ else
+ {
+ qDebug( "OManufacturerDB: found manufacturer list in '%s'...", (const char*) filename );
+ QTextStream s( &file );
+ QString addr;
+ QString manu;
+ while (!s.atEnd())
+ {
+ s >> addr;
+ if ( !addr ) // read nothing!?
+ {
+ continue;
+ }
+ else
+ if ( addr[0] == '#' )
+ {
+ s.readLine();
+ continue;
+ }
+ s.skipWhiteSpace();
+ s >> manu;
+ s.readLine();
+ //qDebug( "ManufacturerDB: read pair %s, %s", (const char*) addr, (const char*) manu );
+ manufacturers.insert( addr, manu );
+
+ }
+ }
+
+}
+
+
+OManufacturerDB::~OManufacturerDB()
+{
+}
+
+
+const QString& OManufacturerDB::lookup( const QString& macaddr ) const
+{
+ return manufacturers[macaddr.upper().left(8)];
+}
diff --git a/libopie2/opienet/omanufacturerdb.h b/libopie2/opienet/omanufacturerdb.h
new file mode 100644
index 0000000..5e66c37
--- a/dev/null
+++ b/libopie2/opienet/omanufacturerdb.h
@@ -0,0 +1,37 @@
+/**********************************************************************
+** Copyright (C) 2002 Michael 'Mickey' Lauer. All rights reserved.
+**
+** This file is part of Opie Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+**********************************************************************/
+
+#ifndef OMANUFACTURERDB_H
+#define OMANUFACTURERDB_H
+
+#include <qmap.h>
+
+class OManufacturerDB
+{
+ public:
+ static OManufacturerDB* instance();
+ const QString& lookup( const QString& macaddr ) const;
+
+ protected:
+ OManufacturerDB();
+ virtual ~OManufacturerDB();
+
+ private:
+ QMap<QString, QString> manufacturers;
+ static OManufacturerDB* _instance;
+};
+
+#endif
+
diff --git a/libopie2/opienet/onetutils.cpp b/libopie2/opienet/onetutils.cpp
index 2485f30..236f108 100644
--- a/libopie2/opienet/onetutils.cpp
+++ b/libopie2/opienet/onetutils.cpp
@@ -30,8 +30,9 @@
*/
#include <opie2/onetutils.h>
#include <opie2/onetwork.h>
+#include <opie2/omanufacturerdb.h>
#include <net/if.h>
#include <cstdio>
@@ -108,18 +109,26 @@ OMacAddress OMacAddress::fromString( const QString& str )
return (const unsigned char*) &buf;
}
-QString OMacAddress::toString() const
+QString OMacAddress::toString( bool substitute ) const
{
- QString s;
- s.sprintf( "%.2X:%.2X:%.2X:%.2X:%.2X:%.2X",
- _bytes[0]&0xff, _bytes[1]&0xff, _bytes[2]&0xff,
- _bytes[3]&0xff, _bytes[4]&0xff, _bytes[5]&0xff );
- return s;
+ QString manu;
+ manu.sprintf( "%.2X:%.2X:%.2X", _bytes[0]&0xff, _bytes[1]&0xff, _bytes[2]&0xff );
+ QString serial;
+ serial.sprintf( ":%.2X:%.2X:%.2X", _bytes[3]&0xff, _bytes[4]&0xff, _bytes[5]&0xff );
+ if ( !substitute ) return manu+serial;
+ // fallback - if no vendor is found, just use the number
+ QString textmanu = OManufacturerDB::instance()->lookup( manu );
+ return textmanu.isNull() ? manu+serial : textmanu + serial;
}
+QString OMacAddress::manufacturer() const
+{
+ return OManufacturerDB::instance()->lookup( toString() );
+}
+
bool operator==( const OMacAddress &m1, const OMacAddress &m2 )
{
return memcmp( &m1._bytes, &m2._bytes, 6 ) == 0;
}
diff --git a/libopie2/opienet/onetutils.h b/libopie2/opienet/onetutils.h
index 73d52cc..bedea63 100644
--- a/libopie2/opienet/onetutils.h
+++ b/libopie2/opienet/onetutils.h
@@ -54,9 +54,10 @@ class OMacAddress
OMacAddress( const unsigned char* );
OMacAddress( struct ifreq& );
~OMacAddress();
- QString toString() const;
+ QString manufacturer() const;
+ QString toString( bool substitute = false ) const;
const unsigned char* native() const;
static OMacAddress fromString( const QString& );
diff --git a/libopie2/opienet/opcap.cpp b/libopie2/opienet/opcap.cpp
index 6ddd457..40aac2c 100644
--- a/libopie2/opienet/opcap.cpp
+++ b/libopie2/opienet/opcap.cpp
@@ -638,13 +638,13 @@ OWaveLanManagementChallenge::~OWaveLanManagementChallenge()
OWaveLanDataPacket::OWaveLanDataPacket( const unsigned char* end, const struct ieee_802_11_data_header* data, OWaveLanPacket* parent )
:QObject( parent, "802.11 Data" ), _header( data )
{
- //qDebug( "size of header = %d", sizeof( struct ieee_802_11_data_header ) );
- //qDebug( "header: %0x", data );
+ qDebug( "OWaveLanDataPacket::OWaveLanDataPacket(): decoding frame..." );
+
const unsigned char* payload = (const unsigned char*) data + sizeof( struct ieee_802_11_data_header );
- //qDebug( "payload: %0x", payload );
+ #warning The next line works for most cases, but can not be correct generally!
if (!( ( (OWaveLanPacket*) this->parent())->duration() )) payload -= 6; // compensation for missing last address
new OLLCPacket( end, (const struct ieee_802_11_802_2_header*) payload, this );
}
@@ -659,9 +659,9 @@ OWaveLanDataPacket::~OWaveLanDataPacket()
* OLLCPacket
*======================================================================================*/
OLLCPacket::OLLCPacket( const unsigned char* end, const struct ieee_802_11_802_2_header* data, QObject* parent )
- :QObject( parent, "802.11 802_2" ), _header( data )
+ :QObject( parent, "802.11 LLC" ), _header( data )
{
qDebug( "OLLCPacket::OLLCPacket(): decoding frame..." );
if ( !(_header->oui[0] || _header->oui[1] || _header->oui[2]) )
diff --git a/libopie2/opienet/opienet.pro b/libopie2/opienet/opienet.pro
index e73afbf..3f9166a 100644
--- a/libopie2/opienet/opienet.pro
+++ b/libopie2/opienet/opienet.pro
@@ -1,17 +1,21 @@
TEMPLATE = lib
CONFIG += qt warn_on debug
DESTDIR = $(OPIEDIR)/lib
-HEADERS = onetutils.cpp onetwork.h opcap.h
-
-SOURCES = onetutils.cpp onetwork.cpp opcap.cpp
+HEADERS = omanufacturerdb.cpp \
+ onetutils.cpp \
+ onetwork.h \
+ opcap.h
+SOURCES = omanufacturerdb.cpp \
+ onetutils.cpp \
+ onetwork.cpp \
+ opcap.cpp
INTERFACES =
TARGET = opienet2
VERSION = 1.8.1
INCLUDEPATH += $(OPIEDIR)/include
DEPENDPATH += $(OPIEDIR)/include
LIBS += -lpcap
-
MOC_DIR = moc
OBJECTS_DIR = obj
include ( $(OPIEDIR)/include.pro )