1
/***************************************************************************
3
* knetworkmanager-devicestore_dbus.cpp - A NetworkManager frontend for KDE
5
* Copyright (C) 2005, 2006 Novell, Inc.
7
* Author: Helmut Schaa <hschaa@suse.de>, <helmut.schaa@gmx.de>
9
* This program is free software; you can redistribute it and/or modify
10
* it under the terms of the GNU General Public License as published by
11
* the Free Software Foundation; either version 2 of the License, or
12
* (at your option) any later version.
14
* This program is distributed in the hope that it will be useful,
15
* but WITHOUT ANY WARRANTY; without even the implied warranty of
16
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17
* GNU General Public License for more details.
19
* You should have received a copy of the GNU General Public License
20
* along with this program; if not, write to the Free Software
21
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
23
**************************************************************************/
26
#include <qhostaddress.h>
35
#include <dbus/qdbusdata.h>
36
#include <dbus/qdbusdatamap.h>
38
/* knetworkmanager headers */
39
#include "knetworkmanager.h"
40
#include "knetworkmanager-connection_setting_wireless.h"
41
#include "knetworkmanager-connection_setting_wireless_security.h"
42
#include "knetworkmanager-accesspoint.h"
44
// the bssid should look like XX:XX:XX:XX:XX:XX where X is a hexadecimal digit
45
#define MAC_ADDRESS_PATTERN "[0-9A-Fa-f]{2}:[0-9A-F]{2}:[0-9A-F]{2}:[0-9A-F]{2}:[0-9A-F]{2}:[0-9A-F]{2}"
47
using namespace ConnectionSettings;
52
Wireless::Wireless(Connection* conn, ::AccessPoint* ap, WirelessSecurity* security)
53
: ConnectionSetting(conn, NM_SETTING_WIRELESS_SETTING_NAME)
55
_security = QString::null;
59
_essid = ap->getSsidByteArray();
60
_mode = ap->getMode() == 0 ? MODE_ADHOC : MODE_INFRASTRUCTURE;
64
_essid = QByteArray();
65
_mode = MODE_INFRASTRUCTURE;
68
_modeMap[MODE_INFRASTRUCTURE] = "infrastructure";
69
_modeMap[MODE_ADHOC] = "adhoc";
73
Wireless::toMap() const
77
map.insert(NM_SETTING_WIRELESS_MODE, QDBusData::fromString(_modeMap[_mode]));
79
QValueList<QDBusData> essid;
80
for (QByteArray::ConstIterator it = _essid.begin(); it != _essid.end(); ++it)
81
essid.append(QDBusData::fromByte(*it));
84
map.insert(NM_SETTING_WIRELESS_SSID, QDBusData::fromQValueList(essid));
86
kdWarning() << k_funcinfo << " SSID undefined" << endl;
88
if (!_security.isEmpty())
89
map.insert(NM_SETTING_WIRELESS_SEC, QDBusData::fromString(_security));
91
if (!_seenBssids.empty())
93
QValueList<QDBusData> bssids;
94
for (QValueList<QString>::ConstIterator it = _seenBssids.begin(); it != _seenBssids.end(); ++it)
95
bssids.append(QDBusData::fromString(*it));
97
map.insert(NM_SETTING_WIRELESS_SEEN_BSSIDS, QDBusData::fromQValueList(bssids));
104
Wireless::fromMap(const SettingsMap& map)
106
SettingsMap::ConstIterator it;
109
if ((it = map.find(NM_SETTING_WIRELESS_MODE)) != map.end())
111
QBiDirectionalMap<MODES, QString>::Iterator mode_it = _modeMap.findData(it.data().toString());
112
if (mode_it != _modeMap.end())
113
_mode = mode_it.key();
115
_mode = MODE_INFRASTRUCTURE;
119
if ((it = map.find(NM_SETTING_WIRELESS_SSID)) != map.end())
121
QValueList<QDBusData> dbus_essid = (*it).toQValueList();
122
QByteArray essid(dbus_essid.size());
125
for (QValueList<QDBusData>::ConstIterator byte_it = dbus_essid.begin(); byte_it != dbus_essid.end(); ++byte_it)
127
essid[index] = (*byte_it).toByte();
133
if ((it = map.find(NM_SETTING_WIRELESS_SEC)) != map.end())
135
_security = (*it).toString();
139
if ((it = map.find(NM_SETTING_WIRELESS_SEEN_BSSIDS)) != map.end())
141
QRegExp exp(MAC_ADDRESS_PATTERN);
142
QValueList<QDBusData> bssids = (*it).toQValueList();
145
for(QValueList<QDBusData>::Iterator it = bssids.begin(); it != bssids.end(); ++it)
147
QString bssid = (*it).toString();
148
if (exp.exactMatch(bssid))
149
_seenBssids.append(bssid);
155
Wireless::setEssid(const QByteArray& essid)
158
emitValidityChanged();
162
Wireless::getEssid(void) const
168
Wireless::setMode(MODES mode)
171
emitValidityChanged();
175
Wireless::getMode(void) const
181
Wireless::setSecurity(const QString& security)
183
_security = security;
184
emitValidityChanged();
188
Wireless::getSecurity(void) const
194
Wireless::isValid() const
196
// ESSID is essential
197
if (_essid.isEmpty())
204
Wireless::addSeenBssid(const QString& bssid)
206
QRegExp exp(MAC_ADDRESS_PATTERN);
207
if (!exp.exactMatch(bssid))
210
// no duplicates please
211
for(QValueList<QString>::Iterator it = _seenBssids.begin(); it != _seenBssids.end(); ++it)
218
_seenBssids.append(bssid);
219
emitValidityChanged();