summaryrefslogtreecommitdiff
path: root/libopie2/opienet/omanufacturerdb.cpp
blob: c185fc57845f96c1fb055593dc96c0901ab4ec8f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
/**********************************************************************
** 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;
        QString extManu;
        while (!s.atEnd())
        {
            s >> addr;
            if ( !addr ) // read nothing!?
            {
                continue;
            }
            else
            if ( addr[0] == '#' )
            {
                continue;
            }
            s.skipWhiteSpace();
            s >> manu;
            s.skipWhiteSpace();
            s >> extManu;
            if ( extManu[0] == '#' ) // we have an extended manufacturer
            {
                s.skipWhiteSpace();
                extManu = s.readLine();
                qDebug( "OManufacturerDB: read '%s' as extended manufacturer string", (const char*) extManu );
                manufacturersExt.insert( addr, extManu );
            }
            else
                s.readLine();
            qDebug( "ManufacturerDB: read tuple %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)];
}


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;
}