[kde-plasma-networkmanagement] - knetworkmanager doesn´t recognize BSSID (kde#238046)
Rex Dieter
rdieter at fedoraproject.org
Tue Sep 14 17:28:00 UTC 2010
commit 73d75a17e66c35e1a21f9b147853efe4b98e8dda
Author: Rex Dieter <rdieter at fedoraproject.org>
Date: Tue Sep 14 12:33:16 2010 -0500
- knetworkmanager doesn´t recognize BSSID (kde#238046)
kde-plasma-networkmanagement.spec | 15 +++-
networkmanagement-bssid.patch | 160 +++++++++++++++++++++++++++++++++++++
2 files changed, 172 insertions(+), 3 deletions(-)
---
diff --git a/kde-plasma-networkmanagement.spec b/kde-plasma-networkmanagement.spec
index e6a9101..07d495b 100644
--- a/kde-plasma-networkmanagement.spec
+++ b/kde-plasma-networkmanagement.spec
@@ -8,7 +8,7 @@
Name: kde-plasma-networkmanagement
Epoch: 1
Version: 0.9
-Release: 0.22.%{snap}%{?dist}
+Release: 0.23.%{snap}%{?dist}
Summary: NetworkManager KDE 4 integration
Group: Applications/Internet
@@ -32,8 +32,13 @@ Patch2: networkmanagement-0.9-disable_kded.patch
# Adding "Enable networking" button to knetworkmanager
# https://bugs.kde.org/238325
Patch50: networkmanagement-kdebug238325.patch
+# knetworkmanager doesn´t recognize BSSID
+# https://bugs.kde.org/238046
+Patch51: networkmanagement-bssid.patch
+
+## upstream patches
# fix build for kde-4.4.x
-Patch51: networkmanagement-0.9-kutils_libs.patch
+Patch100: networkmanagement-0.9-kutils_libs.patch
BuildRequires: kdelibs4-devel
BuildRequires: kdebase-workspace-devel
@@ -155,7 +160,8 @@ Obsoletes: knetworkmanager4-vpnc < %{?epoch:%{epoch}:}%{version}-%{release}
%patch2 -p1 -b .disable_kded
%endif
%patch50 -p0 -b .kdebug238325
-%patch51 -p1 -b .kutils_libs
+%patch51 -p0 -b .bssid
+%patch100 -p1 -b .kutils_libs
%build
@@ -286,6 +292,9 @@ gtk-update-icon-cache %{_kde4_iconsdir}/oxygen &> /dev/null || :
%changelog
+* Tue Sep 14 2010 Rex Dieter <rdieter at fedoraproject.org> 1:0.9-0.23.20100830
+- knetworkmanager doesn´t recognize BSSID (kde#238046)
+
* Mon Aug 30 2010 Rex Dieter <rdieter at fedoraproject.org> 1:0.9-0.22.20100830
- 20100830 snapshot
- Requires: kdebase-runtime
diff --git a/networkmanagement-bssid.patch b/networkmanagement-bssid.patch
new file mode 100644
index 0000000..65db532
--- /dev/null
+++ b/networkmanagement-bssid.patch
@@ -0,0 +1,160 @@
+Index: libs/ui/802_11_wirelesswidget.cpp
+===================================================================
+--- libs/ui/802_11_wirelesswidget.cpp (revision 1175103)
++++ libs/ui/802_11_wirelesswidget.cpp (working copy)
+@@ -128,6 +128,8 @@ void Wireless80211Widget::writeConfig()
+
+ if (d->ui.bssid->text() != QString::fromLatin1(":::::")) {
+ d->setting->setBssid(d->ui.bssid->text().toAscii());
++ } else {
++ d->setting->setBssid(QByteArray());
+ }
+ d->setting->setMtu(d->ui.mtu->value());
+ }
+Index: backends/NetworkManager/settingdbus.h
+===================================================================
+--- backends/NetworkManager/settingdbus.h (revision 1175103)
++++ backends/NetworkManager/settingdbus.h (working copy)
+@@ -39,6 +39,10 @@ class SettingDbus
+ virtual void fromMap(const QVariantMap &) = 0;
+ virtual QVariantMap toMap() = 0;
+ virtual QVariantMap toSecretsMap() = 0;
++
++ // static methods to convert between binary and hex string MAC representation
++ static QByteArray macHex2Bin(const QByteArray & hexMac);
++ static QByteArray macBin2Hex(const QByteArray & binMac);
+ protected:
+ static void insertIfTrue(QVariantMap& map, const char * key, bool value);
+ static void insertIfNonZero(QVariantMap& map, const char * key, uint value);
+Index: backends/NetworkManager/settings/802-11-wirelessdbus.cpp
+===================================================================
+--- backends/NetworkManager/settings/802-11-wirelessdbus.cpp (revision 1175103)
++++ backends/NetworkManager/settings/802-11-wirelessdbus.cpp (working copy)
+@@ -29,7 +29,7 @@ void WirelessDbus::fromMap(const QVariantMap & map
+ setting->setChannel(map.value("channel").value<uint>());
+ }
+ if (map.contains("bssid")) {
+- setting->setBssid(map.value("bssid").value<QByteArray>());
++ setting->setBssid(SettingDbus::macBin2Hex(map.value("bssid").value<QByteArray>()));
+ }
+ if (map.contains("rate")) {
+ setting->setRate(map.value("rate").value<uint>());
+@@ -38,7 +38,7 @@ void WirelessDbus::fromMap(const QVariantMap & map
+ setting->setTxpower(map.value(QLatin1String(NM_SETTING_WIRELESS_TX_POWER)).value<uint>());
+ }
+ if (map.contains(QLatin1String(NM_SETTING_WIRELESS_MAC_ADDRESS))) {
+- setting->setMacaddress(map.value(QLatin1String(NM_SETTING_WIRELESS_MAC_ADDRESS)).value<QByteArray>());
++ setting->setMacaddress(SettingDbus::macBin2Hex(map.value(QLatin1String(NM_SETTING_WIRELESS_MAC_ADDRESS)).value<QByteArray>()));
+ }
+ if (map.contains("mtu")) {
+ setting->setMtu(map.value("mtu").value<uint>());
+@@ -77,12 +77,12 @@ QVariantMap WirelessDbus::toMap()
+ #endif
+ //map.insert("channel", setting->channel());
+ if (!setting->bssid().isEmpty()) {
+- map.insert("bssid", setting->bssid());
++ map.insert("bssid", SettingDbus::macHex2Bin(setting->bssid()));
+ }
+ //map.insert("rate", setting->rate());
+ //map.insert(QLatin1String(NM_SETTING_WIRELESS_TX_POWER), setting->txpower());
+ if (!setting->macaddress().isEmpty()) {
+- map.insert(QLatin1String(NM_SETTING_WIRELESS_MAC_ADDRESS), setting->macaddress());
++ map.insert(QLatin1String(NM_SETTING_WIRELESS_MAC_ADDRESS), SettingDbus::macHex2Bin(setting->macaddress()));
+ }
+ if (setting->mtu() > 0 )
+ map.insert("mtu", setting->mtu());
+Index: backends/NetworkManager/settings/802-3-ethernetdbus.cpp
+===================================================================
+--- backends/NetworkManager/settings/802-3-ethernetdbus.cpp (revision 1175103)
++++ backends/NetworkManager/settings/802-3-ethernetdbus.cpp (working copy)
+@@ -29,7 +29,7 @@ void WiredDbus::fromMap(const QVariantMap & map)
+ setting->setAutonegotiate(map.value(QLatin1String(NM_SETTING_WIRED_AUTO_NEGOTIATE)).value<bool>());
+ }
+ if (map.contains(QLatin1String(NM_SETTING_WIRED_MAC_ADDRESS))) {
+- setting->setMacaddress(map.value(QLatin1String(NM_SETTING_WIRED_MAC_ADDRESS)).value<QByteArray>());
++ setting->setMacaddress(SettingDbus::macBin2Hex(map.value(QLatin1String(NM_SETTING_WIRED_MAC_ADDRESS)).value<QByteArray>()));
+ }
+ if (map.contains("mtu")) {
+ setting->setMtu(map.value("mtu").value<uint>());
+@@ -67,10 +67,10 @@ QVariantMap WiredDbus::toMap()
+ }
+ map.insert(QLatin1String(NM_SETTING_WIRED_AUTO_NEGOTIATE), setting->autonegotiate());
+ #endif
+- // broken
+- //QString mac = setting->macaddress();
+- //map.insert(QLatin1String(NM_SETTING_WIRED_MAC_ADDRESS), mac.remove(':').toAscii());
+- if (setting->mtu() > 0 ) {
++ if (!setting->macaddress().isEmpty()) {
++ map.insert(QLatin1String(NM_SETTING_WIRED_MAC_ADDRESS), SettingDbus::macHex2Bin(setting->macaddress()));
++ }
++ if (setting->mtu() > 0) {
+ map.insert("mtu", setting->mtu());
+ }
+ return map;
+Index: backends/NetworkManager/settingdbus.cpp
+===================================================================
+--- backends/NetworkManager/settingdbus.cpp (revision 1175103)
++++ backends/NetworkManager/settingdbus.cpp (working copy)
+@@ -18,6 +18,8 @@ You should have received a copy of the GNU Lesser
+ License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ */
+
++#include "ctype.h"
++
+ #include "settingdbus.h"
+
+ using namespace Knm;
+@@ -33,6 +35,53 @@ SettingDbus::~SettingDbus()
+
+ }
+
++// convert MAC from hex string to binary
++// e.g. 00:11:22:dd:ee:ff -> 6-byte array
++QByteArray SettingDbus::macHex2Bin(const QByteArray & hexMac)
++{
++ const int MAC_STR_LEN = 17;
++ QByteArray ba = hexMac;
++
++ if (ba.isEmpty()) return ba;
++
++ // Check the MAC first and correct it.
++ // Although fromHex() ignores invalid characters, it scans the array from
++ // the end; so add missing zeroes to have even number of characters.
++ for (int i = 0; i < MAC_STR_LEN; i++) {
++ char ch = i < ba.size() ? ba.at(i) : ':';
++ int mod = i%3;
++ if (mod != 2) {
++ if (ch == ':') ba.insert(i-mod, "0");
++ else if (!isxdigit(ch)) ba[i] = '0';
++ } else {
++ if (ch != ':') ba.insert(i, ":");
++ }
++ }
++ ba.resize(MAC_STR_LEN);
++
++ return QByteArray::fromHex(ba);
++}
++
++// convert binary MAC to hex string (human readable)
++// e.g. 6-byte array -> 00:11:22:dd:ee:ff
++QByteArray SettingDbus::macBin2Hex(const QByteArray & binMac)
++{
++ const int MAC_STR_LEN = 17;
++ QByteArray ba = binMac;
++
++ if (ba.isEmpty()) return ba;
++
++ ba = ba.toHex().toUpper();
++ ba.insert(2, ':');
++ ba.insert(5, ':');
++ ba.insert(8, ':');
++ ba.insert(11, ':');
++ ba.insert(14, ':');
++ ba.resize(MAC_STR_LEN);
++
++ return ba;
++}
++
+ void SettingDbus::insertIfTrue(QVariantMap& map, const char * key, bool setting)
+ {
+ if (setting) {
More information about the scm-commits
mailing list