• Skip to content
  • Skip to link menu
Trinity API Reference
  • Trinity API Reference
  • tdecore
 

tdecore

network-manager.cpp
00001 /* This file is part of the TDE libraries
00002    Copyright (C) 2012 Timothy Pearson <kb9vqf@pearsoncomputing.net>
00003 
00004    This library is free software; you can redistribute it and/or
00005    modify it under the terms of the GNU Library General Public
00006    License version 2 as published by the Free Software Foundation.
00007 
00008    This library is distributed in the hope that it will be useful,
00009    but WITHOUT ANY WARRANTY; without even the implied warranty of
00010    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00011    Library General Public License for more details.
00012 
00013    You should have received a copy of the GNU Library General Public License
00014    along with this library; see the file COPYING.LIB.  If not, write to
00015    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
00016    Boston, MA 02110-1301, USA.
00017 */
00018 
00019 #include <tqdir.h>
00020 
00021 #include <tqdbusmessage.h>
00022 
00023 #include "tdeconfig.h"
00024 #include "tdehardwaredevices.h"
00025 #include "tdenetworkdevice.h"
00026 
00027 #include "network-manager.h"
00028 #include "network-manager_p.h"
00029 
00030 // #define DEBUG_NETWORK_MANAGER_COMMUNICATIONS
00031 
00032 #define PRINT_ERROR(x) printf("[TDE NM Backend ERROR] [%s:%d] %s\n", __FILE__, __LINE__, x.ascii());
00033 
00034 #ifdef DEBUG_NETWORK_MANAGER_COMMUNICATIONS
00035 #define PRINT_WARNING(x) printf("[TDE NM Backend WARNING] [%s:%d] %s\n", __FILE__, __LINE__, x.ascii());
00036 #else
00037 #define PRINT_WARNING(x)
00038 #endif
00039 
00040 #define UPDATE_STRING_SETTING_IF_VALID(string, key, settingsMap)    \
00041     if (!string.isNull()) { settingsMap[key] = (TQT_DBusData::fromString(string)).getAsVariantData();   } \
00042         else { settingsMap.remove(key); }
00043 
00044 #define NM_ASYNC_TIMEOUT_MS 1000
00045 // Give the user 5 minutes to authenticate to DBUS before timing out
00046 #define NM_ASYNC_SECRETS_INTERACTION_TIMEOUT_MS (5*60*1000)
00047 
00048 // #define WAIT_FOR_OPERATION_BEFORE_RETURNING 1
00049 #define USE_ASYNC_DBUS_CONNECTION_COMMAND_CALLS 1
00050 
00051 TQ_UINT32 reverseIPV4ByteOrder(TQ_UINT32 address) {
00052     TQ_UINT32 ret;
00053     unsigned char valuearray[4];
00054     valuearray[0] = (address & 0xff000000) >> 24;
00055     valuearray[1] = (address & 0x00ff0000) >> 16;
00056     valuearray[2] = (address & 0x0000ff00) >> 8;
00057     valuearray[3] = (address & 0x000000ff) >> 0;
00058     ret = 0;
00059     ret = ret | (valuearray[0] << 0);
00060     ret = ret | (valuearray[1] << 8);
00061     ret = ret | (valuearray[2] << 16);
00062     ret = ret | (valuearray[3] << 24);
00063     return ret;
00064 }
00065 
00066 void printDBUSObjectStructure(TQT_DBusData object, int level=0, TQString mapKey=TQString::null) {
00067     int i;
00068     TQString levelIndent = "";
00069     for (i=0; i<level; i++) {
00070         levelIndent = levelIndent + " ";
00071     }
00072     TQCString signature = object.buildDBusSignature();
00073 
00074     if (object.type() == TQT_DBusData::String) {
00075         printf("%s%s\t%s%s'%s'\n", levelIndent.ascii(), signature.data(), (mapKey.isNull())?"":mapKey.ascii(), (mapKey.isNull())?"":" = ", object.toString().ascii()); fflush(stdout);
00076     }
00077     else if (object.type() == TQT_DBusData::Bool) {
00078         printf("%s%s\t%s%s'%s'\n", levelIndent.ascii(), signature.data(), (mapKey.isNull())?"":mapKey.ascii(), (mapKey.isNull())?"":" = ", (object.toBool())?"true":"false"); fflush(stdout);
00079     }
00080     else if (object.type() == TQT_DBusData::Byte) {
00081         printf("%s%s\t%s%s'%d'\n", levelIndent.ascii(), signature.data(), (mapKey.isNull())?"":mapKey.ascii(), (mapKey.isNull())?"":" = ", object.toByte()); fflush(stdout);
00082     }
00083     else if (object.type() == TQT_DBusData::Int16) {
00084         printf("%s%s\t%s%s'%d'\n", levelIndent.ascii(), signature.data(), (mapKey.isNull())?"":mapKey.ascii(), (mapKey.isNull())?"":" = ", object.toInt16()); fflush(stdout);
00085     }
00086     else if (object.type() == TQT_DBusData::UInt16) {
00087         printf("%s%s\t%s%s'%d'\n", levelIndent.ascii(), signature.data(), (mapKey.isNull())?"":mapKey.ascii(), (mapKey.isNull())?"":" = ", object.toUInt16()); fflush(stdout);
00088     }
00089     else if (object.type() == TQT_DBusData::Int32) {
00090         printf("%s%s\t%s%s'%d'\n", levelIndent.ascii(), signature.data(), (mapKey.isNull())?"":mapKey.ascii(), (mapKey.isNull())?"":" = ", object.toInt32()); fflush(stdout);
00091     }
00092     else if (object.type() == TQT_DBusData::UInt32) {
00093         printf("%s%s\t%s%s'%d'\n", levelIndent.ascii(), signature.data(), (mapKey.isNull())?"":mapKey.ascii(), (mapKey.isNull())?"":" = ", object.toUInt32()); fflush(stdout);
00094     }
00095     else if (object.type() == TQT_DBusData::Int64) {
00096         printf("%s%s\t%s%s'%lld'\n", levelIndent.ascii(), signature.data(), (mapKey.isNull())?"":mapKey.ascii(), (mapKey.isNull())?"":" = ", object.toInt64()); fflush(stdout);
00097     }
00098     else if (object.type() == TQT_DBusData::UInt64) {
00099         printf("%s%s\t%s%s'%lld'\n", levelIndent.ascii(), signature.data(), (mapKey.isNull())?"":mapKey.ascii(), (mapKey.isNull())?"":" = ", object.toUInt64()); fflush(stdout);
00100     }
00101     else {
00102         printf("%s%s\n", levelIndent.ascii(), signature.data()); fflush(stdout);
00103     }
00104 
00105     if (object.type() == TQT_DBusData::Map) {
00106         // HACK
00107         // NetworkManager currently uses string key maps exclusively as far as I can tell, so this should be adequate for the time being
00108         TQMap<TQString, TQT_DBusData> outerMap = object.toStringKeyMap().toTQMap();
00109         TQMap<TQString, TQT_DBusData>::const_iterator it;
00110             for (it = outerMap.begin(); it != outerMap.end(); ++it) {
00111             printDBUSObjectStructure(*it, level+1, it.key());
00112         }
00113     }
00114     else if (object.type() == TQT_DBusData::List) {
00115         TQT_DBusDataValueList valueList = object.toTQValueList();
00116         TQT_DBusDataValueList::const_iterator it;
00117         for (it = valueList.begin(); it != valueList.end(); ++it) {
00118             printDBUSObjectStructure(*it, level+1);
00119         }
00120     }
00121     else if (object.type() == TQT_DBusData::Variant) {
00122         TQT_DBusVariant dataValueVariant = object.toVariant();
00123         TQT_DBusData dataValue = dataValueVariant.value;
00124         printDBUSObjectStructure(dataValue, level+1, mapKey);
00125     }
00126 }
00127 
00128 TDENetworkGlobalManagerFlags::TDENetworkGlobalManagerFlags nmGlobalStateToTDEGlobalState(TQ_UINT32 nmType) {
00129     TDENetworkGlobalManagerFlags::TDENetworkGlobalManagerFlags ret = TDENetworkGlobalManagerFlags::Unknown;
00130 
00131     if (nmType == NM_STATE_UNKNOWN) {
00132         ret |= TDENetworkGlobalManagerFlags::Unknown;
00133     }
00134     else if (nmType == NM_STATE_ASLEEP) {
00135         ret |= TDENetworkGlobalManagerFlags::Disconnected;
00136         ret |= TDENetworkGlobalManagerFlags::Sleeping;
00137     }
00138     else if (nmType == NM_STATE_DISCONNECTED) {
00139         ret |= TDENetworkGlobalManagerFlags::Disconnected;
00140     }
00141     else if (nmType == NM_STATE_DISCONNECTING) {
00142         ret |= TDENetworkGlobalManagerFlags::Connected;
00143         ret |= TDENetworkGlobalManagerFlags::DeactivatingLink;
00144     }
00145     else if (nmType == NM_STATE_CONNECTING) {
00146         ret |= TDENetworkGlobalManagerFlags::Disconnected;
00147         ret |= TDENetworkGlobalManagerFlags::EstablishingLink;
00148     }
00149     else if (nmType == NM_STATE_CONNECTED_LOCAL) {
00150         ret |= TDENetworkGlobalManagerFlags::Connected;
00151         ret |= TDENetworkGlobalManagerFlags::LinkLocalAccess;
00152     }
00153     else if (nmType == NM_STATE_CONNECTED_SITE) {
00154         ret |= TDENetworkGlobalManagerFlags::Connected;
00155         ret |= TDENetworkGlobalManagerFlags::SiteLocalAccess;
00156     }
00157     else if (nmType == NM_STATE_CONNECTED_GLOBAL) {
00158         ret |= TDENetworkGlobalManagerFlags::Connected;
00159         ret |= TDENetworkGlobalManagerFlags::GlobalAccess;
00160     }
00161 
00162     return ret;
00163 }
00164 
00165 TDENetworkGlobalManagerFlags::TDENetworkGlobalManagerFlags nmVPNStateToTDEGlobalState(TQ_UINT32 nmType) {
00166     TDENetworkGlobalManagerFlags::TDENetworkGlobalManagerFlags ret = TDENetworkGlobalManagerFlags::Unknown;
00167 
00168     if (nmType == NM_VPN_STATE_UNKNOWN) {
00169         ret |= TDENetworkGlobalManagerFlags::VPNUnknown;
00170     }
00171     else if (nmType == NM_VPN_STATE_PREPARE) {
00172         ret |= TDENetworkGlobalManagerFlags::VPNDisconnected;
00173         ret |= TDENetworkGlobalManagerFlags::VPNEstablishingLink;
00174     }
00175     else if (nmType == NM_VPN_STATE_NEED_AUTH) {
00176         ret |= TDENetworkGlobalManagerFlags::VPNDisconnected;
00177         ret |= TDENetworkGlobalManagerFlags::VPNNeedAuthorization;
00178     }
00179     else if (nmType == NM_VPN_STATE_CONNECT) {
00180         ret |= TDENetworkGlobalManagerFlags::VPNDisconnected;
00181         ret |= TDENetworkGlobalManagerFlags::VPNConfiguringProtocols;
00182     }
00183     else if (nmType == NM_VPN_STATE_IP_CONFIG_GET) {
00184         ret |= TDENetworkGlobalManagerFlags::VPNDisconnected;
00185         ret |= TDENetworkGlobalManagerFlags::VPNVerifyingProtocols;
00186     }
00187     else if (nmType == NM_VPN_STATE_ACTIVATED) {
00188         ret |= TDENetworkGlobalManagerFlags::VPNConnected;
00189     }
00190     else if (nmType == NM_VPN_STATE_FAILED) {
00191         ret |= TDENetworkGlobalManagerFlags::VPNDisconnected;
00192         ret |= TDENetworkGlobalManagerFlags::VPNFailed;
00193     }
00194     else if (nmType == NM_VPN_STATE_DISCONNECTED) {
00195         ret |= TDENetworkGlobalManagerFlags::VPNDisconnected;
00196     }
00197 
00198     return ret;
00199 }
00200 
00201 TDENetworkConnectionStatus::TDENetworkConnectionStatus nmDeviceStateToTDEDeviceState(TQ_UINT32 nmType) {
00202     TDENetworkConnectionStatus::TDENetworkConnectionStatus ret = TDENetworkConnectionStatus::None;
00203 
00204     if (nmType == NM_DEVICE_STATE_UNKNOWN) {
00205         ret |= TDENetworkConnectionStatus::Invalid;
00206     }
00207     else if (nmType == NM_DEVICE_STATE_UNMANAGED) {
00208         ret |= TDENetworkConnectionStatus::UnManaged;
00209     }
00210     else if (nmType == NM_DEVICE_STATE_UNAVAILABLE) {
00211         ret |= TDENetworkConnectionStatus::Disconnected;
00212         ret |= TDENetworkConnectionStatus::LinkUnavailable;
00213     }
00214     else if (nmType == NM_DEVICE_STATE_DISCONNECTED) {
00215         ret |= TDENetworkConnectionStatus::Disconnected;
00216     }
00217     else if (nmType == NM_DEVICE_STATE_PREPARE) {
00218         ret |= TDENetworkConnectionStatus::Disconnected;
00219         ret |= TDENetworkConnectionStatus::EstablishingLink;
00220     }
00221     else if (nmType == NM_DEVICE_STATE_CONFIG) {
00222         ret |= TDENetworkConnectionStatus::Disconnected;
00223         ret |= TDENetworkConnectionStatus::EstablishingLink;
00224     }
00225     else if (nmType == NM_DEVICE_STATE_NEED_AUTH) {
00226         ret |= TDENetworkConnectionStatus::Disconnected;
00227         ret |= TDENetworkConnectionStatus::NeedAuthorization;
00228     }
00229     else if (nmType == NM_DEVICE_STATE_IP_CONFIG) {
00230         ret |= TDENetworkConnectionStatus::Disconnected;
00231         ret |= TDENetworkConnectionStatus::ConfiguringProtocols;
00232     }
00233     else if (nmType == NM_DEVICE_STATE_IP_CHECK) {
00234         ret |= TDENetworkConnectionStatus::Disconnected;
00235         ret |= TDENetworkConnectionStatus::VerifyingProtocols;
00236     }
00237     else if (nmType == NM_DEVICE_STATE_SECONDARIES) {
00238         ret |= TDENetworkConnectionStatus::Disconnected;
00239         ret |= TDENetworkConnectionStatus::DependencyWait;
00240     }
00241     else if (nmType == NM_DEVICE_STATE_ACTIVATED) {
00242         ret |= TDENetworkConnectionStatus::Connected;
00243     }
00244     else if (nmType == NM_DEVICE_STATE_DEACTIVATING) {
00245         ret |= TDENetworkConnectionStatus::Connected;
00246         ret |= TDENetworkConnectionStatus::DeactivatingLink;
00247     }
00248     else if (nmType == NM_DEVICE_STATE_FAILED) {
00249         ret |= TDENetworkConnectionStatus::Disconnected;
00250         ret |= TDENetworkConnectionStatus::Failed;
00251     }
00252 
00253     return ret;
00254 }
00255 
00256 TDENetworkDeviceType::TDENetworkDeviceType TDENetworkConnectionManager_BackendNM::nmDeviceTypeToTDEDeviceType(TQ_UINT32 nmType) {
00257     TDENetworkDeviceType::TDENetworkDeviceType ret = TDENetworkDeviceType::Other;
00258 
00259     if (nmType == NM_DEVICE_TYPE_UNKNOWN) {
00260         ret = TDENetworkDeviceType::Other;
00261     }
00262     else if (nmType == NM_DEVICE_TYPE_ETHERNET) {
00263         ret = TDENetworkDeviceType::WiredEthernet;
00264     }
00265     else if (nmType == NM_DEVICE_TYPE_WIFI) {
00266         ret = TDENetworkDeviceType::WiFi;
00267     }
00268     else if (nmType == NM_DEVICE_TYPE_UNUSED1) {
00269     }
00270     else if (nmType == NM_DEVICE_TYPE_UNUSED2) {
00271     }
00272     else if (nmType == NM_DEVICE_TYPE_BT) {
00273         ret = TDENetworkDeviceType::Bluetooth;
00274     }
00275     else if (nmType == NM_DEVICE_TYPE_OLPC_MESH) {
00276         ret = TDENetworkDeviceType::OLPCMesh;
00277     }
00278     else if (nmType == NM_DEVICE_TYPE_WIMAX) {
00279         ret = TDENetworkDeviceType::WiMax;
00280     }
00281     else if (nmType == NM_DEVICE_TYPE_MODEM) {
00282         ret = TDENetworkDeviceType::Modem;
00283     }
00284     else if (nmType == NM_DEVICE_TYPE_INFINIBAND) {
00285         ret = TDENetworkDeviceType::Infiniband;
00286     }
00287     else if (nmType == NM_DEVICE_TYPE_BOND) {
00288         ret = TDENetworkDeviceType::Bond;
00289     }
00290     else if (nmType == NM_DEVICE_TYPE_VLAN) {
00291         ret = TDENetworkDeviceType::VLAN;
00292     }
00293     else if (nmType == NM_DEVICE_TYPE_ADSL) {
00294         ret = TDENetworkDeviceType::ADSL;
00295     }
00296 
00297     return ret;
00298 }
00299 
00300 TDENetworkConnectionType::TDENetworkConnectionType nmConnectionTypeToTDEConnectionType(TQString nm) {
00301     TDENetworkConnectionType::TDENetworkConnectionType ret = TDENetworkConnectionType::Other;
00302 
00303     if (nm.lower() == "802-3-ethernet") {
00304         ret = TDENetworkConnectionType::WiredEthernet;
00305     }
00306     else if (nm.lower() == "infiniband") {
00307         ret = TDENetworkConnectionType::Infiniband;
00308     }
00309     else if (nm.lower() == "802-11-wireless") {
00310         ret = TDENetworkConnectionType::WiFi;
00311     }
00312     else if (nm.lower() == "vpn") {
00313         ret = TDENetworkConnectionType::VPN;
00314     }
00315     else if (nm.lower() == "wimax") {
00316         ret = TDENetworkConnectionType::WiMax;
00317     }
00318     else if (nm.lower() == "vlan") {
00319         ret = TDENetworkConnectionType::VLAN;
00320     }
00321     else if (nm.lower() == "802-11-olpc-mesh") {
00322         ret = TDENetworkConnectionType::OLPCMesh;
00323     }
00324     else if (nm.lower() == "bluetooth") {
00325         ret = TDENetworkConnectionType::Bluetooth;
00326     }
00327     else if (nm.lower() == "cdma") {
00328         ret = TDENetworkConnectionType::Modem;
00329     }
00330     else if (nm.lower() == "gsm") {
00331         ret = TDENetworkConnectionType::Modem;
00332     }
00333 
00334     return ret;
00335 }
00336 
00337 TQString tdeConnectionTypeToNMConnectionType(TDENetworkConnectionType::TDENetworkConnectionType type, TDEModemConnectionType::TDEModemConnectionType modemType=TDEModemConnectionType::Other) {
00338     TQString ret;
00339 
00340     if (type == TDENetworkConnectionType::WiredEthernet) {
00341         ret = "802-3-ethernet";
00342     }
00343     else if (type == TDENetworkConnectionType::Infiniband) {
00344         ret = "infiniband";
00345     }
00346     else if (type == TDENetworkConnectionType::WiFi) {
00347         ret = "802-11-wireless";
00348     }
00349     else if (type == TDENetworkConnectionType::VPN) {
00350         ret = "vpn";
00351     }
00352     else if (type == TDENetworkConnectionType::WiMax) {
00353         ret = "wimax";
00354     }
00355     else if (type == TDENetworkConnectionType::VLAN) {
00356         ret = "vlan";
00357     }
00358     else if (type == TDENetworkConnectionType::OLPCMesh) {
00359         ret = "802-11-olpc-mesh";
00360     }
00361     else if (type == TDENetworkConnectionType::Bluetooth) {
00362         ret = "bluetooth";
00363     }
00364     else if (type == TDENetworkConnectionType::Modem) {
00365         if (modemType == TDEModemConnectionType::CDMA) {
00366             ret = "cdma";
00367         }
00368         else if (modemType == TDEModemConnectionType::GSM) {
00369             ret = "gsm";
00370         }
00371     }
00372 
00373     return ret;
00374 }
00375 
00376 TDENetworkIEEE8021xType::TDENetworkIEEE8021xType nmEAPTypeToTDEEAPType(TQString nm) {
00377     TDENetworkIEEE8021xType::TDENetworkIEEE8021xType ret = TDENetworkIEEE8021xType::None;
00378 
00379     if (nm.lower() == "") {
00380         ret = TDENetworkIEEE8021xType::None;
00381     }
00382     else if (nm.lower() == "leap") {
00383         ret = TDENetworkIEEE8021xType::LEAP;
00384     }
00385     else if (nm.lower() == "md5") {
00386         ret = TDENetworkIEEE8021xType::MD5;
00387     }
00388     else if (nm.lower() == "pap") {
00389         ret = TDENetworkIEEE8021xType::PAP;
00390     }
00391     else if (nm.lower() == "chap") {
00392         ret = TDENetworkIEEE8021xType::CHAP;
00393     }
00394     else if (nm.lower() == "mschap") {
00395         ret = TDENetworkIEEE8021xType::MSCHAP;
00396     }
00397     else if (nm.lower() == "mschapv2") {
00398         ret = TDENetworkIEEE8021xType::MSCHAPV2;
00399     }
00400     else if (nm.lower() == "fast") {
00401         ret = TDENetworkIEEE8021xType::Fast;
00402     }
00403     else if (nm.lower() == "psk") {
00404         ret = TDENetworkIEEE8021xType::PSK;
00405     }
00406     else if (nm.lower() == "pax") {
00407         ret = TDENetworkIEEE8021xType::PAX;
00408     }
00409     else if (nm.lower() == "sake") {
00410         ret = TDENetworkIEEE8021xType::SAKE;
00411     }
00412     else if (nm.lower() == "gpsk") {
00413         ret = TDENetworkIEEE8021xType::GPSK;
00414     }
00415     else if (nm.lower() == "tls") {
00416         ret = TDENetworkIEEE8021xType::TLS;
00417     }
00418     else if (nm.lower() == "peap") {
00419         ret = TDENetworkIEEE8021xType::PEAP;
00420     }
00421     else if (nm.lower() == "ttls") {
00422         ret = TDENetworkIEEE8021xType::TTLS;
00423     }
00424     else if (nm.lower() == "sim") {
00425         ret = TDENetworkIEEE8021xType::SIM;
00426     }
00427     else if (nm.lower() == "gtc") {
00428         ret = TDENetworkIEEE8021xType::GTC;
00429     }
00430     else if (nm.lower() == "otp") {
00431         ret = TDENetworkIEEE8021xType::OTP;
00432     }
00433     else {
00434         PRINT_ERROR(TQString("unknown EAP type %s requested in existing connection").arg(nm.lower()))
00435     }
00436 
00437     return ret;
00438 }
00439 
00440 TQString tdeEAPTypeToNMEAPType(TDENetworkIEEE8021xType::TDENetworkIEEE8021xType eaptype) {
00441     TQString ret = "";
00442 
00443     if (eaptype == TDENetworkIEEE8021xType::None) {
00444         ret = "";
00445     }
00446     else if (eaptype == TDENetworkIEEE8021xType::LEAP) {
00447         ret = "leap";
00448     }
00449     else if (eaptype == TDENetworkIEEE8021xType::MD5) {
00450         ret = "md5";
00451     }
00452     else if (eaptype == TDENetworkIEEE8021xType::PAP) {
00453         ret = "pap";
00454     }
00455     else if (eaptype == TDENetworkIEEE8021xType::CHAP) {
00456         ret = "chap";
00457     }
00458     else if (eaptype == TDENetworkIEEE8021xType::MSCHAP) {
00459         ret = "mschap";
00460     }
00461     else if (eaptype == TDENetworkIEEE8021xType::MSCHAPV2) {
00462         ret = "mschapv2";
00463     }
00464     else if (eaptype == TDENetworkIEEE8021xType::Fast) {
00465         ret = "fast";
00466     }
00467     else if (eaptype == TDENetworkIEEE8021xType::PSK) {
00468         ret = "psk";
00469     }
00470     else if (eaptype == TDENetworkIEEE8021xType::PAX) {
00471         ret = "pax";
00472     }
00473     else if (eaptype == TDENetworkIEEE8021xType::SAKE) {
00474         ret = "sake";
00475     }
00476     else if (eaptype == TDENetworkIEEE8021xType::GPSK) {
00477         ret = "gpsk";
00478     }
00479     else if (eaptype == TDENetworkIEEE8021xType::TLS) {
00480         ret = "tls";
00481     }
00482     else if (eaptype == TDENetworkIEEE8021xType::PEAP) {
00483         ret = "peap";
00484     }
00485     else if (eaptype == TDENetworkIEEE8021xType::TTLS) {
00486         ret = "ttls";
00487     }
00488     else if (eaptype == TDENetworkIEEE8021xType::SIM) {
00489         ret = "sim";
00490     }
00491     else if (eaptype == TDENetworkIEEE8021xType::GTC) {
00492         ret = "gtc";
00493     }
00494     else if (eaptype == TDENetworkIEEE8021xType::OTP) {
00495         ret = "otp";
00496     }
00497     else {
00498         PRINT_ERROR(TQString("unknown TDE EAP type %d requested in new or updated connection").arg(eaptype))
00499     }
00500 
00501     return ret;
00502 }
00503 
00504 TDENetworkIEEE8021xFastFlags::TDENetworkIEEE8021xFastFlags nmEAPFastFlagsToTDEEAPFastFlags(TQString nm) {
00505     TDENetworkIEEE8021xFastFlags::TDENetworkIEEE8021xFastFlags ret = TDENetworkIEEE8021xFastFlags::AllowUnauthenticated | TDENetworkIEEE8021xFastFlags::AllowAuthenticated;
00506 
00507     unsigned int nm_int = nm.toUInt();
00508     if (nm_int == NM_EAP_FAST_PROVISIONING_DISABLED) {
00509         ret = TDENetworkIEEE8021xFastFlags::None;
00510     }
00511     else if (nm_int == NM_EAP_FAST_PROVISIONING_UNAUTHONLY) {
00512         ret = TDENetworkIEEE8021xFastFlags::AllowUnauthenticated;
00513     }
00514     else if (nm_int == NM_EAP_FAST_PROVISIONING_AUTHONLY) {
00515         ret = TDENetworkIEEE8021xFastFlags::AllowAuthenticated;
00516     }
00517     else if (nm_int == NM_EAP_FAST_PROVISIONING_BOTH) {
00518         ret = TDENetworkIEEE8021xFastFlags::AllowUnauthenticated | TDENetworkIEEE8021xFastFlags::AllowAuthenticated;
00519     }
00520     else {
00521         PRINT_ERROR(TQString("unknown EAP fast flag %s requested in existing connection").arg(nm.lower()))
00522     }
00523 
00524     return ret;
00525 }
00526 
00527 TQString tdeEAPFastFlagsToNMEAPFastFlags(TDENetworkIEEE8021xFastFlags::TDENetworkIEEE8021xFastFlags eaptype) {
00528     TQString ret = "";
00529 
00530     if ((eaptype & TDENetworkIEEE8021xFastFlags::AllowUnauthenticated) && (eaptype & TDENetworkIEEE8021xFastFlags::AllowAuthenticated)) {
00531         ret = TQString("%1").arg(NM_EAP_FAST_PROVISIONING_BOTH);
00532     }
00533     else if (eaptype & TDENetworkIEEE8021xFastFlags::AllowAuthenticated) {
00534         ret = TQString("%1").arg(NM_EAP_FAST_PROVISIONING_AUTHONLY);
00535     }
00536     else if (eaptype & TDENetworkIEEE8021xFastFlags::AllowUnauthenticated) {
00537         ret = TQString("%1").arg(NM_EAP_FAST_PROVISIONING_UNAUTHONLY);
00538     }
00539     else {
00540         ret = TQString("%1").arg(NM_EAP_FAST_PROVISIONING_DISABLED);
00541     }
00542 
00543     return ret;
00544 }
00545 
00546 TDEWiFiMode::TDEWiFiMode nmWiFiModeToTDEWiFiMode(TQString nm) {
00547     TDEWiFiMode::TDEWiFiMode ret = TDEWiFiMode::Infrastructure;
00548 
00549     if (nm.lower() == "infrastructure") {
00550         ret = TDEWiFiMode::Infrastructure;
00551     }
00552     else if (nm.lower() == "adhoc") {
00553         ret = TDEWiFiMode::AdHoc;
00554     }
00555 
00556     return ret;
00557 }
00558 
00559 TQString tdeWiFiModeToNMWiFiMode(TDEWiFiMode::TDEWiFiMode mode) {
00560     TQString ret;
00561 
00562     if (mode == TDEWiFiMode::Infrastructure) {
00563         ret = "infrastructure";
00564     }
00565     else if (mode == TDEWiFiMode::AdHoc) {
00566         ret = "adhoc";
00567     }
00568 
00569     return ret;
00570 }
00571 
00572 TDEWiFiMode::TDEWiFiMode nmWiFiModeToTDEWiFiMode(TQ_UINT32 nm) {
00573     TDEWiFiMode::TDEWiFiMode ret = TDEWiFiMode::Infrastructure;
00574 
00575     if (nm == NM_802_11_MODE_INFRASTRUCTURE) {
00576         ret = TDEWiFiMode::Infrastructure;
00577     }
00578     else if (nm == NM_802_11_MODE_ADHOC) {
00579         ret = TDEWiFiMode::AdHoc;
00580     }
00581 
00582     return ret;
00583 }
00584 
00585 TDENetworkWiFiClientFlags::TDENetworkWiFiClientFlags tdeWiFiFlagsToNMWiFiFlags(TQ_UINT32 nm) {
00586     TDENetworkWiFiClientFlags::TDENetworkWiFiClientFlags ret = TDENetworkWiFiClientFlags::None;
00587 
00588     if (nm & NM_802_11_DEVICE_CAP_CIPHER_WEP40) {
00589         ret | TDENetworkWiFiClientFlags::CipherWEP40;
00590     }
00591     if (nm & NM_802_11_DEVICE_CAP_CIPHER_WEP104) {
00592         ret | TDENetworkWiFiClientFlags::CipherWEP104;
00593     }
00594     if (nm & NM_802_11_DEVICE_CAP_CIPHER_TKIP) {
00595         ret | TDENetworkWiFiClientFlags::CipherTKIP;
00596     }
00597     if (nm & NM_802_11_DEVICE_CAP_CIPHER_CCMP) {
00598         ret | TDENetworkWiFiClientFlags::CipherCCMP;
00599     }
00600     if (nm & NM_802_11_DEVICE_CAP_WPA) {
00601         ret | TDENetworkWiFiClientFlags::CipherWPA;
00602     }
00603     if (nm & NM_802_11_DEVICE_CAP_RSN) {
00604         ret | TDENetworkWiFiClientFlags::CipherRSN;
00605     }
00606 
00607     return ret;
00608 }
00609 
00610 TDEBluetoothConnectionType::TDEBluetoothConnectionType nmBluetoothModeToTDEBluetoothMode(TQString nm) {
00611     TDEBluetoothConnectionType::TDEBluetoothConnectionType ret = TDEBluetoothConnectionType::PAN;
00612 
00613     if (nm.lower() == "dun") {
00614         ret = TDEBluetoothConnectionType::DUN;
00615     }
00616     else if (nm.lower() == "panu") {
00617         ret = TDEBluetoothConnectionType::PAN;
00618     }
00619 
00620     return ret;
00621 }
00622 
00623 TQString tdeBluetoothModeToNMBluetoothMode(TDEBluetoothConnectionType::TDEBluetoothConnectionType type) {
00624     TQString ret;
00625 
00626     if (type == TDEBluetoothConnectionType::DUN) {
00627         ret = "dun";
00628     }
00629     else if (type == TDEBluetoothConnectionType::PAN) {
00630         ret = "panu";
00631     }
00632 
00633     return ret;
00634 }
00635 
00636 TDEGSMNetworkType::TDEGSMNetworkType nmGSMModeToTDEGSMMode(TQ_INT32 nm) {
00637     TDEGSMNetworkType::TDEGSMNetworkType ret = TDEGSMNetworkType::Any;
00638 
00639     if (nm == NM_GSM_3G_ONLY) {
00640         ret = TDEGSMNetworkType::Only3G;
00641     }
00642     else if (nm == NM_GSM_GPRS_EDGE_ONLY) {
00643         ret = TDEGSMNetworkType::GPRSEdge;
00644     }
00645     else if (nm == NM_GSM_PREFER_3G) {
00646         ret = TDEGSMNetworkType::Prefer3G;
00647     }
00648     else if (nm == NM_GSM_PREFER_2G) {
00649         ret = TDEGSMNetworkType::Prefer2G;
00650     }
00651 
00652     return ret;
00653 }
00654 
00655 TQ_INT32 tdeGSMModeToNMGSMMode(TDEGSMNetworkType::TDEGSMNetworkType type) {
00656     TQ_INT32 ret = -1;
00657 
00658     if (type == TDEGSMNetworkType::Only3G) {
00659         ret = NM_GSM_3G_ONLY;
00660     }
00661     else if (type == TDEGSMNetworkType::GPRSEdge) {
00662         ret = NM_GSM_GPRS_EDGE_ONLY;
00663     }
00664     else if (type == TDEGSMNetworkType::Prefer3G) {
00665         ret = NM_GSM_PREFER_3G;
00666     }
00667     else if (type == TDEGSMNetworkType::Prefer2G) {
00668         ret = NM_GSM_PREFER_2G;
00669     }
00670 
00671     return ret;
00672 }
00673 
00674 TDEWiFiFrequencyBand::TDEWiFiFrequencyBand nmWiFiFrequencyBandToTDEWiFiFrequencyBand(TQString nm) {
00675     TDEWiFiFrequencyBand::TDEWiFiFrequencyBand ret = TDEWiFiFrequencyBand::Other;
00676 
00677     if (nm.lower() == "") {
00678         ret = TDEWiFiFrequencyBand::None;
00679     }
00680     else if (nm.lower() == "bg") {
00681         ret = TDEWiFiFrequencyBand::Band2_4GHz;
00682     }
00683     else if (nm.lower() == "a") {
00684         ret = TDEWiFiFrequencyBand::Band5GHz;
00685     }
00686 
00687     return ret;
00688 }
00689 
00690 TQString tdeWiFiFrequencyBandToNMWiFiFrequencyBand(TDEWiFiFrequencyBand::TDEWiFiFrequencyBand mode) {
00691     TQString ret;
00692 
00693     if (mode == TDEWiFiFrequencyBand::None) {
00694         ret = TQString::null;
00695     }
00696     else if (mode == TDEWiFiFrequencyBand::Band2_4GHz) {
00697         ret = "bg";
00698     }
00699     else if (mode == TDEWiFiFrequencyBand::Band5GHz) {
00700         ret = "a";
00701     }
00702 
00703     return ret;
00704 }
00705 
00706 TDENetworkWiFiKeyType::TDENetworkWiFiKeyType nmWiFiKeyTypeToTDEWiFiKeyType(TQString nm) {
00707     TDENetworkWiFiKeyType::TDENetworkWiFiKeyType ret = TDENetworkWiFiKeyType::Other;
00708 
00709     if (nm.lower() == "none") {
00710         ret = TDENetworkWiFiKeyType::WEP;
00711     }
00712     else if (nm.lower() == "ieee8021x") {
00713         ret = TDENetworkWiFiKeyType::DynamicWEP;
00714     }
00715     else if (nm.lower() == "wpa-none") {
00716         ret = TDENetworkWiFiKeyType::WPAAdHoc;
00717     }
00718     else if (nm.lower() == "wpa-psk") {
00719         ret = TDENetworkWiFiKeyType::WPAInfrastructure;
00720     }
00721     else if (nm.lower() == "wpa-eap") {
00722         ret = TDENetworkWiFiKeyType::WPAEnterprise;
00723     }
00724 
00725     return ret;
00726 }
00727 
00728 TQString tdeWiFiKeyTypeToNMWiFiKeyType(TDENetworkWiFiKeyType::TDENetworkWiFiKeyType type) {
00729     TQString ret;
00730 
00731     if (type == TDENetworkWiFiKeyType::WEP) {
00732         return "none";
00733     }
00734     else if (type == TDENetworkWiFiKeyType::DynamicWEP) {
00735         return "ieee8021x";
00736     }
00737     else if (type == TDENetworkWiFiKeyType::WPAAdHoc) {
00738         return "wpa-none";
00739     }
00740     else if (type == TDENetworkWiFiKeyType::WPAInfrastructure) {
00741         return "wpa-psk";
00742     }
00743     else if (type == TDENetworkWiFiKeyType::WPAEnterprise) {
00744         return "wpa-eap";
00745     }
00746 
00747     return ret;
00748 }
00749 
00750 TDENetworkWiFiAuthType::TDENetworkWiFiAuthType nmWiFiAuthTypeToTDEWiFiAuthType(TQString nm) {
00751     TDENetworkWiFiAuthType::TDENetworkWiFiAuthType ret = TDENetworkWiFiAuthType::Other;
00752 
00753     if (nm.lower() == "open") {
00754         ret = TDENetworkWiFiAuthType::Open;
00755     }
00756     else if (nm.lower() == "shared") {
00757         ret = TDENetworkWiFiAuthType::Shared;
00758     }
00759     else if (nm.lower() == "leap") {
00760         ret = TDENetworkWiFiAuthType::LEAP;
00761     }
00762 
00763     return ret;
00764 }
00765 
00766 TQString tdeWiFiAuthTypeToNMWiFiAuthType(TDENetworkWiFiAuthType::TDENetworkWiFiAuthType type) {
00767     TQString ret;
00768 
00769     if (type == TDENetworkWiFiAuthType::Open) {
00770         return "open";
00771     }
00772     else if (type == TDENetworkWiFiAuthType::Shared) {
00773         return "shared";
00774     }
00775     else if (type == TDENetworkWiFiAuthType::LEAP) {
00776         return "leap";
00777     }
00778 
00779     return ret;
00780 }
00781 
00782 TDENetworkWiFiWPAVersionFlags::TDENetworkWiFiWPAVersionFlags nmWiFiWPAVersionToTDEWiFiWPAVersion(TQStringList nm) {
00783     TDENetworkWiFiWPAVersionFlags::TDENetworkWiFiWPAVersionFlags ret = TDENetworkWiFiWPAVersionFlags::None;
00784 
00785     if ((nm.contains("wpa") && nm.contains("rsn")) || (nm.count() < 1)) {
00786         ret |= TDENetworkWiFiWPAVersionFlags::Any;
00787     }
00788     else if (nm.contains("wpa")) {
00789         ret |= TDENetworkWiFiWPAVersionFlags::WPA;
00790     }
00791     else if (nm.contains("rsn")) {
00792         ret |= TDENetworkWiFiWPAVersionFlags::RSN;
00793     }
00794 
00795     return ret;
00796 }
00797 
00798 TQStringList tdeWiFiWPAVersionToNMWiFiWPAVersion(TDENetworkWiFiWPAVersionFlags::TDENetworkWiFiWPAVersionFlags type) {
00799     TQStringList ret;
00800 
00801     if (type & TDENetworkWiFiWPAVersionFlags::WPA) {
00802         ret.append("wpa");
00803     }
00804     if (type & TDENetworkWiFiWPAVersionFlags::RSN) {
00805         ret.append("rsn");
00806     }
00807 
00808     return ret;
00809 }
00810 
00811 TDENetworkWiFiConnectionCipher::TDENetworkWiFiConnectionCipher nmWiFiCipherToTDEWiFiCipher(TQString nm) {
00812     TDENetworkWiFiConnectionCipher::TDENetworkWiFiConnectionCipher ret = TDENetworkWiFiConnectionCipher::None;
00813 
00814     if (nm.lower() == "wep40") {
00815         ret = TDENetworkWiFiConnectionCipher::CipherWEP40;
00816     }
00817     else if (nm.lower() == "wep104") {
00818         ret = TDENetworkWiFiConnectionCipher::CipherWEP104;
00819     }
00820     else if (nm.lower() == "tkip") {
00821         ret = TDENetworkWiFiConnectionCipher::CipherTKIP;
00822     }
00823     else if (nm.lower() == "ccmp") {
00824         ret = TDENetworkWiFiConnectionCipher::CipherCCMP;
00825     }
00826 
00827     return ret;
00828 }
00829 
00830 TQString tdeWiFiCipherToNMWiFiCipher(TDENetworkWiFiConnectionCipher::TDENetworkWiFiConnectionCipher cipher) {
00831     TQString ret;
00832 
00833     if (cipher == TDENetworkWiFiConnectionCipher::CipherWEP40) {
00834         ret = "wep40";
00835     }
00836     else if (cipher == TDENetworkWiFiConnectionCipher::CipherWEP104) {
00837         ret = "wep104";
00838     }
00839     else if (cipher == TDENetworkWiFiConnectionCipher::CipherTKIP) {
00840         ret = "tkip";
00841     }
00842     else if (cipher == TDENetworkWiFiConnectionCipher::CipherCCMP) {
00843         ret = "ccmp";
00844     }
00845 
00846     return ret;
00847 }
00848 
00849 TDENetworkSlaveDeviceType::TDENetworkSlaveDeviceType nmSlaveTypeToTDESlaveType(TQString nm) {
00850     TDENetworkSlaveDeviceType::TDENetworkSlaveDeviceType ret = TDENetworkSlaveDeviceType::None;
00851 
00852     if (nm.lower() == "bond") {
00853         ret = TDENetworkSlaveDeviceType::Bond;
00854     }
00855 
00856     return ret;
00857 }
00858 
00859 TQString tdeSlaveTypeToNMSlaveType(TDENetworkSlaveDeviceType::TDENetworkSlaveDeviceType slavetype) {
00860     TQString ret;
00861 
00862     if (slavetype == TDENetworkSlaveDeviceType::Bond) {
00863         ret = "bond";
00864     }
00865 
00866     return ret;
00867 }
00868 
00869 TDENetworkPasswordHandlingFlags::TDENetworkPasswordHandlingFlags nmPasswordFlagsToTDEPasswordFlags(unsigned int nm) {
00870     TDENetworkPasswordHandlingFlags::TDENetworkPasswordHandlingFlags ret = TDENetworkPasswordHandlingFlags::None;
00871 
00872     if (nm & NM_PASSWORD_SECRET_AGENTOWNED) {
00873         ret |= TDENetworkPasswordHandlingFlags::ExternalStorage;
00874     }
00875     if (nm & NM_PASSWORD_SECRET_NOTSAVED) {
00876         ret |= TDENetworkPasswordHandlingFlags::NoSave;
00877     }
00878     if (nm & NM_PASSWORD_SECRET_NOTREQUIRED) {
00879         ret |= TDENetworkPasswordHandlingFlags::NoPrompt;
00880     }
00881 
00882     return ret;
00883 }
00884 
00885 unsigned int tdePasswordFlagsToNMPasswordFlags(TDENetworkPasswordHandlingFlags::TDENetworkPasswordHandlingFlags flags) {
00886     unsigned int ret = 0;
00887 
00888     if (flags & TDENetworkPasswordHandlingFlags::ExternalStorage) {
00889         ret |= NM_PASSWORD_SECRET_AGENTOWNED;
00890     }
00891     if (flags & TDENetworkPasswordHandlingFlags::NoSave) {
00892         ret |= NM_PASSWORD_SECRET_NOTSAVED;
00893     }
00894     if (flags & TDENetworkPasswordHandlingFlags::NoPrompt) {
00895         ret |= NM_PASSWORD_SECRET_NOTREQUIRED;
00896     }
00897 
00898     return ret;
00899 }
00900 
00901 TDENetworkVLANFlags::TDENetworkVLANFlags nmVLANFlagsToTDEVLANFlags(unsigned int nm) {
00902     TDENetworkVLANFlags::TDENetworkVLANFlags ret = TDENetworkVLANFlags::None;
00903 
00904     if (nm & NM_VLAN_REORDER_PACKET_HEADERS) {
00905         ret |= TDENetworkVLANFlags::ReorderPacketHeaders;
00906     }
00907     if (nm & NM_VLAN_USE_GVRP) {
00908         ret |= TDENetworkVLANFlags::UseGVRP;
00909     }
00910     if (nm & NM_VLAN_LOOSE_BINDING) {
00911         ret |= TDENetworkVLANFlags::LooseBinding;
00912     }
00913 
00914     return ret;
00915 }
00916 
00917 unsigned int tdeVLANFlagsToNMVLANFlags(TDENetworkVLANFlags::TDENetworkVLANFlags flags) {
00918     unsigned int ret = 0;
00919 
00920     if (flags & TDENetworkVLANFlags::ReorderPacketHeaders) {
00921         ret |= NM_VLAN_REORDER_PACKET_HEADERS;
00922     }
00923     if (flags & TDENetworkVLANFlags::UseGVRP) {
00924         ret |= NM_VLAN_USE_GVRP;
00925     }
00926     if (flags & TDENetworkVLANFlags::LooseBinding) {
00927         ret |= NM_VLAN_LOOSE_BINDING;
00928     }
00929 
00930     return ret;
00931 }
00932 
00933 TDENetworkParity::TDENetworkParity nmParityToTDEParity(char nm) {
00934     TDENetworkParity::TDENetworkParity ret = TDENetworkParity::None;
00935 
00936     if (nm == 'E') {
00937         ret = TDENetworkParity::Even;
00938     }
00939     else if (nm == 'o') {
00940         ret = TDENetworkParity::Odd;
00941     }
00942 
00943     return ret;
00944 }
00945 
00946 char tdeParityToNMParity(TDENetworkParity::TDENetworkParity parity) {
00947     char ret = 'n';
00948 
00949     if (parity == TDENetworkParity::Even) {
00950         ret = 'E';
00951     }
00952     else if (parity == TDENetworkParity::Odd) {
00953         ret = 'o';
00954     }
00955 
00956     return ret;
00957 }
00958 
00959 TDENetworkWepKeyType::TDENetworkWepKeyType nmWepKeyTypeToTDEWepKeyType(unsigned int nm, TQString key=TQString::null) {
00960     TDENetworkWepKeyType::TDENetworkWepKeyType ret = TDENetworkWepKeyType::Hexadecimal;
00961 
00962     if (nm == NM_WEP_TYPE_HEXADECIMAL) {
00963         if (key.isNull()) {
00964             ret = TDENetworkWepKeyType::Hexadecimal;
00965         }
00966         else {
00967             if ((key.length() == 10) || (key.length() == 26)) {
00968                 ret = TDENetworkWepKeyType::Hexadecimal;
00969             }
00970             else {
00971                 ret = TDENetworkWepKeyType::Ascii;
00972             }
00973         }
00974     }
00975     else if (nm == NM_WEP_TYPE_PASSPHRASE) {
00976         ret = TDENetworkWepKeyType::Passphrase;
00977     }
00978 
00979     return ret;
00980 }
00981 
00982 unsigned int tdeWepKeyTypeToNMWepKeyType(TDENetworkWepKeyType::TDENetworkWepKeyType type) {
00983     unsigned int ret = 0;
00984 
00985     if (type == TDENetworkWepKeyType::Hexadecimal) {
00986         ret = NM_WEP_TYPE_HEXADECIMAL;
00987     }
00988     else if (type == TDENetworkWepKeyType::Ascii) {
00989         ret = NM_WEP_TYPE_HEXADECIMAL;
00990     }
00991     else if (type == TDENetworkWepKeyType::Passphrase) {
00992         ret = NM_WEP_TYPE_PASSPHRASE;
00993     }
00994 
00995     return ret;
00996 }
00997 
00998 TDENetworkDeviceCapabilityFlags::TDENetworkDeviceCapabilityFlags nmCapabilityFlagsToTDECapabilityFlags(unsigned int nm) {
00999     TDENetworkDeviceCapabilityFlags::TDENetworkDeviceCapabilityFlags ret = TDENetworkDeviceCapabilityFlags::None;
01000 
01001     if (nm & NM_DEVICE_CAP_NM_SUPPORTED) {
01002         ret |= TDENetworkDeviceCapabilityFlags::Supported;
01003     }
01004     if (nm & NM_DEVICE_CAP_CARRIER_DETECT) {
01005         ret |= TDENetworkDeviceCapabilityFlags::CanDetectLink;
01006     }
01007 
01008     return ret;
01009 }
01010 
01011 unsigned int tdeCapabilityFlagsToNMCapabilityFlags(TDENetworkDeviceCapabilityFlags::TDENetworkDeviceCapabilityFlags flags) {
01012     unsigned int ret = 0;
01013 
01014     if (flags & TDENetworkDeviceCapabilityFlags::Supported) {
01015         ret |= NM_DEVICE_CAP_NM_SUPPORTED;
01016     }
01017     if (flags & TDENetworkDeviceCapabilityFlags::CanDetectLink) {
01018         ret |= NM_DEVICE_CAP_CARRIER_DETECT;
01019     }
01020 
01021     return ret;
01022 }
01023 
01024 TDENetworkWiFiAPFlags::TDENetworkWiFiAPFlags nmAPSecFlagsToTDEAPSecFlags(unsigned int genflags, unsigned int nm) {
01025     TDENetworkWiFiAPFlags::TDENetworkWiFiAPFlags ret = TDENetworkWiFiAPFlags::None;
01026 
01027     if (genflags & NM_ACCESS_POINT_CAP_PRIVACY) {
01028         ret |= TDENetworkWiFiAPFlags::PrivacySupport;
01029     }
01030 
01031     if (nm & NM_ACCESS_POINT_SEC_PAIR_WEP40) {
01032         ret |= TDENetworkWiFiAPFlags::PairWEP40;
01033     }
01034     if (nm & NM_ACCESS_POINT_SEC_PAIR_WEP104) {
01035         ret |= TDENetworkWiFiAPFlags::PairWEP104;
01036     }
01037     if (nm & NM_ACCESS_POINT_SEC_PAIR_TKIP) {
01038         ret |= TDENetworkWiFiAPFlags::PairTKIP;
01039     }
01040     if (nm & NM_ACCESS_POINT_SEC_PAIR_CCMP) {
01041         ret |= TDENetworkWiFiAPFlags::PairCCMP;
01042     }
01043     if (nm & NM_ACCESS_POINT_SEC_GROUP_WEP40) {
01044         ret |= TDENetworkWiFiAPFlags::GroupWEP40;
01045     }
01046     if (nm & NM_ACCESS_POINT_SEC_GROUP_WEP104) {
01047         ret |= TDENetworkWiFiAPFlags::GroupWEP104;
01048     }
01049     if (nm & NM_ACCESS_POINT_SEC_GROUP_TKIP) {
01050         ret |= TDENetworkWiFiAPFlags::GroupTKIP;
01051     }
01052     if (nm & NM_ACCESS_POINT_SEC_GROUP_CCMP) {
01053         ret |= TDENetworkWiFiAPFlags::GroupCCMP;
01054     }
01055     if (nm & NM_ACCESS_POINT_SEC_KEY_MGMT_PSK) {
01056         ret |= TDENetworkWiFiAPFlags::KeyManagementPSK;
01057     }
01058     if (nm & NM_ACCESS_POINT_SEC_KEY_MGMT_802_1X) {
01059         ret |= TDENetworkWiFiAPFlags::KeyManagement80211;
01060     }
01061 
01062     return ret;
01063 }
01064 
01065 unsigned int tdeAPSecFlagsToNMAPGenSecFlags(TDENetworkWiFiAPFlags::TDENetworkWiFiAPFlags flags) {
01066     unsigned int ret = 0;
01067 
01068     if (flags & TDENetworkWiFiAPFlags::PrivacySupport) {
01069         ret |= NM_ACCESS_POINT_CAP_PRIVACY;
01070     }
01071 
01072     return ret;
01073 }
01074 
01075 unsigned int tdeAPSecFlagsToNMAPSecFlags(TDENetworkWiFiAPFlags::TDENetworkWiFiAPFlags flags) {
01076     unsigned int ret = 0;
01077 
01078     if (flags & TDENetworkWiFiAPFlags::PairWEP40) {
01079         ret |= NM_ACCESS_POINT_SEC_PAIR_WEP40;
01080     }
01081     if (flags & TDENetworkWiFiAPFlags::PairWEP104) {
01082         ret |= NM_ACCESS_POINT_SEC_PAIR_WEP104;
01083     }
01084     if (flags & TDENetworkWiFiAPFlags::PairTKIP) {
01085         ret |= NM_ACCESS_POINT_SEC_PAIR_TKIP;
01086     }
01087     if (flags & TDENetworkWiFiAPFlags::PairCCMP) {
01088         ret |= NM_ACCESS_POINT_SEC_PAIR_CCMP;
01089     }
01090     if (flags & TDENetworkWiFiAPFlags::GroupWEP40) {
01091         ret |= NM_ACCESS_POINT_SEC_GROUP_WEP40;
01092     }
01093     if (flags & TDENetworkWiFiAPFlags::GroupWEP104) {
01094         ret |= NM_ACCESS_POINT_SEC_GROUP_WEP104;
01095     }
01096     if (flags & TDENetworkWiFiAPFlags::GroupTKIP) {
01097         ret |= NM_ACCESS_POINT_SEC_GROUP_TKIP;
01098     }
01099     if (flags & TDENetworkWiFiAPFlags::GroupCCMP) {
01100         ret |= NM_ACCESS_POINT_SEC_GROUP_CCMP;
01101     }
01102     if (flags & TDENetworkWiFiAPFlags::KeyManagementPSK) {
01103         ret |= NM_ACCESS_POINT_SEC_KEY_MGMT_PSK;
01104     }
01105     if (flags & TDENetworkWiFiAPFlags::KeyManagement80211) {
01106         ret |= NM_ACCESS_POINT_SEC_KEY_MGMT_802_1X;
01107     }
01108 
01109     return ret;
01110 }
01111 
01112 TDENetworkInfinibandTransportMode::TDENetworkInfinibandTransportMode nmIBTransportToTDEIBTransport(TQString nm) {
01113     TDENetworkInfinibandTransportMode::TDENetworkInfinibandTransportMode ret = TDENetworkInfinibandTransportMode::Other;
01114 
01115     if (nm.lower() == "datagram") {
01116         ret = TDENetworkInfinibandTransportMode::Datagram;
01117     }
01118     else if (nm.lower() == "connected") {
01119         ret = TDENetworkInfinibandTransportMode::Connected;
01120     }
01121 
01122     return ret;
01123 }
01124 
01125 TQString tdeIBTransportToNMIBTransport(TDENetworkInfinibandTransportMode::TDENetworkInfinibandTransportMode mode) {
01126     TQString ret;
01127 
01128     if (mode == TDENetworkInfinibandTransportMode::Datagram) {
01129         ret = "datagram";
01130     }
01131     else if (mode == TDENetworkInfinibandTransportMode::Connected) {
01132         ret = "connected";
01133     }
01134 
01135     return ret;
01136 }
01137 
01138 TQString TDENetworkConnectionManager_BackendNM::deviceInterfaceString(TQString deviceNode) {
01139     if (d->m_networkManagerProxy) {
01140         TQT_DBusObjectPathList devices;
01141         TQT_DBusError error;
01142         bool ret;
01143         ret = d->m_networkManagerProxy->GetDevices(devices, error);
01144         if (ret) {
01145             TQT_DBusObjectPathList::iterator it;
01146             for (it = devices.begin(); it != devices.end(); ++it) {
01147                 DBus::DeviceProxy genericDevice(NM_DBUS_SERVICE, (*it));
01148                 genericDevice.setConnection(TQT_DBusConnection::systemBus());
01149                 TQString deviceInterface = genericDevice.getInterface(error);
01150                 if (error.isValid()) {
01151                     // Error!
01152                     PRINT_ERROR((error.name() + ": " + error.message()))
01153                     break;
01154                 }
01155                 else if (deviceInterface == deviceNode) {
01156                     return (*it);
01157                 }
01158             }
01159             return TQString::null;
01160         }
01161         else {
01162             // Error!
01163             PRINT_ERROR((error.name() + ": " + error.message()))
01164             return TQString::null;
01165         }
01166     }
01167     else {
01168         return TQString::null;
01169     }
01170 }
01171 
01172 TQString tdeDeviceUUIDForGenericDevice(TQT_DBusObjectPath path) {
01173     TQT_DBusError error;
01174     DBus::DeviceProxy genericDevice(NM_DBUS_SERVICE, path);
01175     genericDevice.setConnection(TQT_DBusConnection::systemBus());
01176     TQString deviceInterface = genericDevice.getInterface(error);
01177     if (error.isValid()) {
01178         return TQString::null;
01179     }
01180 
01181     TDEHardwareDevices *hwdevices = TDEGlobal::hardwareDevices();
01182     if (!hwdevices) {
01183         return TQString::null;
01184     }
01185 
01186     TDEGenericHardwareList devices = hwdevices->listByDeviceClass(TDEGenericDeviceType::Network);
01187     for (TDEGenericHardwareList::iterator it = devices.begin(); it != devices.end(); ++it) {
01188         TDENetworkDevice* dev = dynamic_cast<TDENetworkDevice*>(*it);
01189         if (dev) {
01190             if (deviceInterface == dev->deviceNode()) {
01191                 return dev->uniqueID();
01192             }
01193         }
01194     }
01195 
01196     return TQString::null;
01197 }
01198 
01199 TDENetworkConnectionManager_BackendNM_DBusSignalReceiver::TDENetworkConnectionManager_BackendNM_DBusSignalReceiver(TDENetworkConnectionManager_BackendNMPrivate* parent) : m_parent(parent) {
01200     //
01201 }
01202 
01203 TDENetworkConnectionManager_BackendNM_DBusSignalReceiver::~TDENetworkConnectionManager_BackendNM_DBusSignalReceiver() {
01204     //
01205 }
01206 
01207 void TDENetworkConnectionManager_BackendNM_DBusSignalReceiver::dbusSignal(const TQT_DBusMessage& message) {
01208     if (message.type() == TQT_DBusMessage::SignalMessage) {
01209         TQString interface = message.interface();
01210         TQString sender = message.sender();
01211         TQString member = message.member();
01212         TQString path = message.path();
01213 
01214 //      printf("[DEBUG] In dbusSignal: sender: %s, member: %s, interface: %s, path: %s, parent path: %s\n", sender.ascii(), member.ascii(), interface.ascii(), path.ascii(), m_parent->m_dbusDeviceString.ascii()); fflush(stdout);
01215 
01216         if (interface == NM_VPN_DBUS_CONNECTION_SERVICE) {
01217             if (member == "VpnStateChanged") {
01218                 // Demarshal data
01219                 TQ_UINT32 state = message[0].toUInt32();
01220                 TQ_UINT32 reason = message[1].toUInt32();
01221                 if (state == NM_VPN_STATE_FAILED) {
01222                     m_parent->internalProcessVPNFailure(reason);
01223                 }
01224             }
01225         }
01226         else if (interface == NM_DBUS_DEVICE_SERVICE) {
01227             if (path == m_parent->m_dbusDeviceString) {
01228                 if (member == "StateChanged") {
01229                     // Demarshal data
01230                     TQ_UINT32 new_state = message[0].toUInt32();
01231                     TQ_UINT32 old_state = message[1].toUInt32();
01232                     TQ_UINT32 reason = message[2].toUInt32();
01233                     m_parent->internalProcessDeviceStateChanged(new_state, old_state, reason);
01234                 }
01235             }
01236         }
01237     }
01238 }
01239 
01240 TDENetworkConnectionManager_BackendNM::TDENetworkConnectionManager_BackendNM(TDENetworkDevice* networkDevice) : TDENetworkConnectionManager(networkDevice) {
01241     d = new TDENetworkConnectionManager_BackendNMPrivate(this);
01242 
01243     // Set up proxy interfaces
01244     d->m_networkManagerProxy = new DBus::NetworkManagerProxy(NM_DBUS_SERVICE, NM_DBUS_PATH);
01245     d->m_networkManagerProxy->setConnection(TQT_DBusConnection::systemBus());
01246     d->m_networkManagerSettings = new DBus::SettingsInterface(NM_DBUS_SERVICE, NM_DBUS_PATH_SETTINGS);
01247     d->m_networkManagerSettings->setConnection(TQT_DBusConnection::systemBus());
01248     d->m_vpnProxy = new DBus::VPNPluginProxy(NM_VPN_DBUS_PLUGIN_SERVICE, NM_VPN_DBUS_PLUGIN_PATH);
01249     d->m_vpnProxy->setConnection(TQT_DBusConnection::systemBus());
01250 
01251     d->m_dbusDeviceString = deviceInterfaceString(deviceNode());
01252     if (!d->m_dbusDeviceString.isEmpty()) {
01253         d->m_networkDeviceProxy = new DBus::DeviceProxy(NM_DBUS_SERVICE, d->m_dbusDeviceString);
01254         d->m_networkDeviceProxy->setConnection(TQT_DBusConnection::systemBus());
01255         if (deviceType() == TDENetworkDeviceType::WiFi) {
01256             d->m_wiFiDeviceProxy = new DBus::WiFiDeviceProxy(NM_DBUS_SERVICE, d->m_dbusDeviceString);
01257             d->m_wiFiDeviceProxy->setConnection(TQT_DBusConnection::systemBus());
01258         }
01259     }
01260 
01261     // Connect global signals
01262     connect(d->m_networkManagerProxy, SIGNAL(StateChanged(TQ_UINT32)), d, SLOT(internalProcessGlobalStateChanged(TQ_UINT32)));
01263 
01264     // Connect VPN signals
01265     if (d->m_vpnProxy) {
01266         connect(d->m_vpnProxy, SIGNAL(StateChanged(TQ_UINT32)), d, SLOT(internalProcessVPNStateChanged(TQ_UINT32)));
01267         connect(d->m_vpnProxy, SIGNAL(LoginBanner(const TQString&)), d, SLOT(internalProcessVPNLoginBanner(const TQString&)));
01268         connect(d->m_vpnProxy, SIGNAL(Failure(TQ_UINT32)), d, SLOT(internalProcessVPNFailure(TQ_UINT32)));
01269     }
01270 
01271     // Connect local signals
01272     if (d->m_networkDeviceProxy) {
01273         connect(d->m_networkDeviceProxy, SIGNAL(StateChanged(TQ_UINT32, TQ_UINT32, TQ_UINT32)), d, SLOT(internalProcessDeviceStateChanged(TQ_UINT32, TQ_UINT32, TQ_UINT32)));
01274     }
01275     if (d->m_wiFiDeviceProxy) {
01276         connect(d->m_wiFiDeviceProxy, SIGNAL(AccessPointAdded(const TQT_DBusObjectPath&)), d, SLOT(internalProcessWiFiAccessPointAdded(const TQT_DBusObjectPath&)));
01277         connect(d->m_wiFiDeviceProxy, SIGNAL(AccessPointRemoved(const TQT_DBusObjectPath&)), d, SLOT(internalProcessWiFiAccessPointRemoved(const TQT_DBusObjectPath&)));
01278         connect(d->m_wiFiDeviceProxy, SIGNAL(PropertiesChanged(const TQMap<TQString, TQT_DBusVariant>&)), d, SLOT(internalProcessWiFiPropertiesChanged(const TQMap<TQString, TQT_DBusVariant>&)));
01279     }
01280 
01281     // Create public lists
01282     m_connectionList = new TDENetworkConnectionList;
01283     m_hwNeighborList = new TDENetworkHWNeighborList;
01284 
01285     // Run site survey to populate neighbor list with initial data
01286     siteSurvey();
01287 }
01288 
01289 TDENetworkConnectionManager_BackendNM::~TDENetworkConnectionManager_BackendNM() {
01290     // Destroy public lists
01291     clearTDENetworkConnectionList();
01292     delete m_connectionList;
01293     clearTDENetworkHWNeighborList();
01294     delete m_hwNeighborList;
01295 
01296     // Tear down proxy interfaces
01297     if (d->m_networkManagerProxy) delete d->m_networkManagerProxy;
01298     if (d->m_networkManagerSettings) delete d->m_networkManagerSettings;
01299     if (d->m_networkDeviceProxy) delete d->m_networkDeviceProxy;
01300 
01301     delete d;
01302 }
01303 
01304 void TDENetworkConnectionManager_BackendNMPrivate::internalProcessGlobalStateChanged(TQ_UINT32 state) {
01305     m_parent->internalNetworkConnectionStateChanged(m_parent->backendStatus());
01306 }
01307 
01308 void TDENetworkConnectionManager_BackendNMPrivate::internalProcessVPNStateChanged(TQ_UINT32 state) {
01309     m_parent->internalNetworkConnectionStateChanged(m_parent->backendStatus());
01310 }
01311 
01312 void TDENetworkConnectionManager_BackendNMPrivate::internalProcessVPNLoginBanner(const TQString& banner) {
01313     m_parent->internalVpnEvent(TDENetworkVPNEventType::LoginBanner, banner);
01314 }
01315 
01316 void TDENetworkConnectionManager_BackendNMPrivate::internalProcessVPNFailure(TQ_UINT32 reason) {
01317     // FIXME
01318     // This should provide a plain-text interpretation of the NetworkManager-specific error code
01319     m_parent->internalVpnEvent(TDENetworkVPNEventType::Failure, TQString("VPN connection attempt failed!<br>NetworkManager returned error %1.").arg(reason));
01320 }
01321 
01322 void TDENetworkConnectionManager_BackendNMPrivate::internalProcessDeviceStateChanged(TQ_UINT32 newState, TQ_UINT32 oldState, TQ_UINT32 reason) {
01323     Q_UNUSED(oldState)
01324 
01325     if (m_prevDeviceState == newState) return;
01326     m_prevDeviceState = newState;
01327 
01328     if (newState == NM_DEVICE_STATE_FAILED) {
01329         TQString errorString;
01330         if (reason == NM_DEVICE_STATE_REASON_NONE) {
01331             errorString = TQString("Connection attempt failed!");
01332         }
01333         else if (reason == NM_DEVICE_STATE_REASON_UNKNOWN) {
01334             errorString = TQString("Connection attempt failed!<br>Unknown error detected.");
01335         }
01336         else if (reason == NM_DEVICE_STATE_REASON_NOW_MANAGED) {
01337             errorString = TQString("Connection attempt failed!<br>Network device is now managed.");
01338         }
01339         else if (reason == NM_DEVICE_STATE_REASON_NOW_UNMANAGED) {
01340             errorString = TQString("Connection attempt failed!<br>Network device is now unmanaged.");
01341         }
01342         else if (reason == NM_DEVICE_STATE_REASON_CONFIG_FAILED) {
01343             errorString = TQString("Connection attempt failed!<br>Configuration failed.");
01344         }
01345         else if (reason == NM_DEVICE_STATE_REASON_IP_CONFIG_UNAVAILABLE) {
01346             errorString = TQString("Connection attempt failed!<br>IP configuration unavailable.");
01347         }
01348         else if (reason == NM_DEVICE_STATE_REASON_IP_CONFIG_EXPIRED) {
01349             errorString = TQString("Connection attempt failed!<br>IP configuration expired.");
01350         }
01351         else if (reason == NM_DEVICE_STATE_REASON_NO_SECRETS) {
01352             errorString = i18n("Connection attempt failed!<br>Secrets were required to establish a connection, but no secrets were available.");
01353         }
01354         else if (reason == NM_DEVICE_STATE_REASON_SUPPLICANT_DISCONNECT) {
01355             errorString = TQString("Connection attempt failed!<br>The supplicant was disconnected while attempting to establish a wireless connection.");
01356         }
01357         else if (reason == NM_DEVICE_STATE_REASON_SUPPLICANT_CONFIG_FAILED) {
01358             errorString = TQString("Connection attempt failed!<br>Supplicant configuration failed while attempting to establish a wireless connection.");
01359         }
01360         else if (reason == NM_DEVICE_STATE_REASON_SUPPLICANT_FAILED) {
01361             errorString = i18n("Connection attempt failed!<br>The supplicant failed while attempting to establish a wireless connection.");
01362         }
01363         else if (reason == NM_DEVICE_STATE_REASON_SUPPLICANT_TIMEOUT) {
01364             errorString = i18n("Connection attempt failed!<br>The supplicant timed out while attempting to establish a wireless connection.");
01365         }
01366         else if (reason == NM_DEVICE_STATE_REASON_PPP_START_FAILED) {
01367             errorString = i18n("Connection attempt failed!<br>The PPP client failed to start.");
01368         }
01369         else if (reason == NM_DEVICE_STATE_REASON_PPP_DISCONNECT) {
01370             errorString = i18n("Connection attempt failed!<br>The PPP client was disconnected.");
01371         }
01372         else if (reason == NM_DEVICE_STATE_REASON_PPP_FAILED) {
01373             errorString = i18n("Connection attempt failed!<br>Unknown PPP failure.");
01374         }
01375         else if (reason == NM_DEVICE_STATE_REASON_DHCP_START_FAILED) {
01376             errorString = i18n("Connection attempt failed!<br>The DHCP client failed to start.");
01377         }
01378         else if (reason == NM_DEVICE_STATE_REASON_DHCP_ERROR) {
01379             errorString = i18n("Connection attempt failed!<br>The DHCP client encountered an error.");
01380         }
01381         else if (reason == NM_DEVICE_STATE_REASON_DHCP_FAILED) {
01382             errorString = i18n("Connection attempt failed!<br>Uknown DHCP failure.");
01383         }
01384         else if (reason == NM_DEVICE_STATE_REASON_SHARED_START_FAILED) {
01385             errorString = i18n("Connection attempt failed!<br>The connection sharing service failed to start.");
01386         }
01387         else if (reason == NM_DEVICE_STATE_REASON_SHARED_FAILED) {
01388             errorString = i18n("Connection attempt failed!<br>The connection sharing service encountered an error.");
01389         }
01390         else if (reason == NM_DEVICE_STATE_REASON_AUTOIP_START_FAILED) {
01391             errorString = i18n("Connection attempt failed!<br>The AutoIP service failed to start.");
01392         }
01393         else if (reason == NM_DEVICE_STATE_REASON_AUTOIP_ERROR) {
01394             errorString = i18n("Connection attempt failed!<br>The AutoIP service encountered an error.");
01395         }
01396         else if (reason == NM_DEVICE_STATE_REASON_AUTOIP_FAILED) {
01397             errorString = i18n("Connection attempt failed!<br>Unknown AutoIP failure.");
01398         }
01399         else if (reason == NM_DEVICE_STATE_REASON_MODEM_BUSY) {
01400             errorString = i18n("Connection attempt failed!<br>Modem was busy.");
01401         }
01402         else if (reason == NM_DEVICE_STATE_REASON_MODEM_NO_DIAL_TONE) {
01403             errorString = i18n("Connection attempt failed!<br>No dial tone.");
01404         }
01405         else if (reason == NM_DEVICE_STATE_REASON_MODEM_NO_CARRIER) {
01406             errorString = i18n("Connection attempt failed!<br>No carrier detected.");
01407         }
01408         else if (reason == NM_DEVICE_STATE_REASON_MODEM_DIAL_TIMEOUT) {
01409             errorString = i18n("Connection attempt failed!<br>Modem timed out while dialing.");
01410         }
01411         else if (reason == NM_DEVICE_STATE_REASON_MODEM_DIAL_FAILED) {
01412             errorString = i18n("Connection attempt failed!<br>The modem failed to dial.");
01413         }
01414         else if (reason == NM_DEVICE_STATE_REASON_MODEM_INIT_FAILED) {
01415             errorString = i18n("Connection attempt failed!<br>Modem initialization failed.");
01416         }
01417         else if (reason == NM_DEVICE_STATE_REASON_GSM_APN_FAILED) {
01418             errorString = i18n("Connection attempt failed!<br>GSM APN failure.");
01419         }
01420         else if (reason == NM_DEVICE_STATE_REASON_GSM_REGISTRATION_NOT_SEARCHING) {
01421             errorString = i18n("Connection attempt failed!<br>GSM registration failed to search for networks.");
01422         }
01423         else if (reason == NM_DEVICE_STATE_REASON_GSM_REGISTRATION_DENIED) {
01424             errorString = i18n("Connection attempt failed!<br>GSM registration attempt was rejected.");
01425         }
01426         else if (reason == NM_DEVICE_STATE_REASON_GSM_REGISTRATION_TIMEOUT) {
01427             errorString = i18n("Connection attempt failed!<br>GSM registration attempt timed out.");
01428         }
01429         else if (reason == NM_DEVICE_STATE_REASON_GSM_REGISTRATION_FAILED) {
01430             errorString = i18n("Connection attempt failed!<br>GSM registration attempt failed.");
01431         }
01432         else if (reason == NM_DEVICE_STATE_REASON_GSM_PIN_CHECK_FAILED) {
01433             errorString = i18n("Connection attempt failed!<br>GSM PIN check failed.");
01434         }
01435         else if (reason == NM_DEVICE_STATE_REASON_FIRMWARE_MISSING) {
01436             errorString = i18n("Connection attempt failed!<br>Network device firmware is missing.");
01437         }
01438         else if (reason == NM_DEVICE_STATE_REASON_REMOVED) {
01439             errorString = i18n("Connection attempt failed!<br>Network device was removed.");
01440         }
01441         else if (reason == NM_DEVICE_STATE_REASON_SLEEPING) {
01442             errorString = i18n("Connection attempt failed!<br>Network device is sleeping.");
01443         }
01444         else if (reason == NM_DEVICE_STATE_REASON_CONNECTION_REMOVED) {
01445             errorString = i18n("Connection attempt failed!<br>Connection was removed.");
01446         }
01447         else if (reason == NM_DEVICE_STATE_REASON_USER_REQUESTED) {
01448             errorString = i18n("Connection attempt failed!<br>User requested device disconnection.");
01449         }
01450         else if (reason == NM_DEVICE_STATE_REASON_CARRIER) {
01451             errorString = i18n("Connection attempt failed!<br>Carrier or link status changed.");
01452         }
01453         else if (reason == NM_DEVICE_STATE_REASON_CONNECTION_ASSUMED) {
01454             errorString = i18n("Connection attempt failed!<br>Device and/or connection already active.");
01455         }
01456         else if (reason == NM_DEVICE_STATE_REASON_SUPPLICANT_AVAILABLE) {
01457             errorString = i18n("Connection attempt failed!<br>The supplicant is now available.");
01458         }
01459         else if (reason == NM_DEVICE_STATE_REASON_MODEM_NOT_FOUND) {
01460             errorString = i18n("Connection attempt failed!<br>Requested modem was not found.");
01461         }
01462         else if (reason == NM_DEVICE_STATE_REASON_BT_FAILED) {
01463             errorString = i18n("Connection attempt failed!<br>Bluetooth connection timeout.");
01464         }
01465         else if (reason == NM_DEVICE_STATE_REASON_GSM_SIM_NOT_INSERTED) {
01466             errorString = i18n("Connection attempt failed!<br>GSM SIM not inserted.");
01467         }
01468         else if (reason == NM_DEVICE_STATE_REASON_GSM_SIM_PIN_REQUIRED) {
01469             errorString = i18n("Connection attempt failed!<br>GSM PIN required.");
01470         }
01471         else if (reason == NM_DEVICE_STATE_REASON_GSM_SIM_PUK_REQUIRED) {
01472             errorString = i18n("Connection attempt failed!<br>GSM PUK required.");
01473         }
01474         else if (reason == NM_DEVICE_STATE_REASON_GSM_SIM_WRONG) {
01475             errorString = i18n("Connection attempt failed!<br>GSM SIM incorrect.");
01476         }
01477         else if (reason == NM_DEVICE_STATE_REASON_INFINIBAND_MODE) {
01478             errorString = i18n("Connection attempt failed!<br>Incorrect Infiniband mode.");
01479         }
01480         else if (reason == NM_DEVICE_STATE_REASON_DEPENDENCY_FAILED) {
01481             errorString = i18n("Connection attempt failed!<br>Dependency failure.");
01482         }
01483         else if (reason == NM_DEVICE_STATE_REASON_BR2684_FAILED) {
01484             errorString = i18n("Connection attempt failed!<br>Unknown bridge failure.");
01485         }
01486         else if (reason == NM_DEVICE_STATE_REASON_MODEM_MANAGER_UNAVAILABLE) {
01487             errorString = i18n("Connection attempt failed!<br>ModemManager not available.");
01488         }
01489         else if (reason == NM_DEVICE_STATE_REASON_SSID_NOT_FOUND) {
01490             errorString = i18n("Connection attempt failed!<br>SSID not found.");
01491         }
01492         else if (reason == NM_DEVICE_STATE_REASON_SECONDARY_CONNECTION_FAILED) {
01493             errorString = i18n("Connection attempt failed!<br>Secondary connection failure.");
01494         }
01495         else {
01496             // FIXME
01497             // This should provide a plain-text interpretation of the NetworkManager-specific error code
01498             errorString = TQString("Connection attempt failed!<br>NetworkManager returned error %1.").arg(reason);
01499         }
01500         m_parent->internalNetworkDeviceEvent(TDENetworkDeviceEventType::Failure, errorString);
01501     }
01502 
01503     m_parent->internalNetworkDeviceStateChanged(nmDeviceStateToTDEDeviceState(newState), m_parent->deviceNode());
01504 }
01505 
01506 void TDENetworkConnectionManager_BackendNMPrivate::internalProcessWiFiAccessPointAdded(const TQT_DBusObjectPath& dbuspath) {
01507     TDENetworkWiFiAPInfo* apInfo = m_parent->getAccessPointDetails(dbuspath);
01508     if (apInfo) {
01509         if (!m_accessPointProxyList.contains(dbuspath)) {
01510             // Set up monitoring object
01511             DBus::AccessPointProxy* apProxy = new DBus::AccessPointProxy(NM_DBUS_SERVICE, dbuspath);
01512             apProxy->setConnection(TQT_DBusConnection::systemBus());
01513             connect(apProxy, SIGNAL(PropertiesChanged(const TQMap<TQString, TQT_DBusVariant>&)), this, SLOT(internalProcessAPPropertiesChanged(const TQMap<TQString, TQT_DBusVariant>&)));
01514             m_accessPointProxyList[dbuspath] = (apProxy);
01515 
01516             // Notify client applications
01517             m_parent->internalAccessPointStatusChanged(apInfo->BSSID, TDENetworkAPEventType::Discovered);
01518         }
01519         delete apInfo;
01520     }
01521 }
01522 
01523 void TDENetworkConnectionManager_BackendNMPrivate::internalProcessWiFiAccessPointRemoved(const TQT_DBusObjectPath& dbuspath) {
01524     TDENetworkWiFiAPInfo* apInfo = m_parent->getAccessPointDetails(dbuspath);
01525     if (apInfo) {
01526         // Notify client applications
01527         m_parent->internalAccessPointStatusChanged(apInfo->BSSID, TDENetworkAPEventType::Lost);
01528         delete apInfo;
01529 
01530         // Destroy related monitoring object
01531         DBus::AccessPointProxy* apProxy = m_accessPointProxyList[dbuspath];
01532         m_accessPointProxyList.remove(dbuspath);
01533         if (apProxy) {
01534             delete apProxy;
01535         }
01536     }
01537 }
01538 
01539 void TDENetworkConnectionManager_BackendNMPrivate::internalProcessWiFiPropertiesChanged(const TQMap<TQString, TQT_DBusVariant>& props) {
01540     if (m_wiFiDeviceProxy) {
01541         if (props.contains("ActiveAccessPoint")) {
01542             TQT_DBusError error;
01543             TDENetworkWiFiAPInfo* apInfo = m_parent->getAccessPointDetails(m_wiFiDeviceProxy->getActiveAccessPoint(error));
01544             if (apInfo) {
01545                 m_parent->internalAccessPointStatusChanged(apInfo->BSSID, TDENetworkAPEventType::AccessPointChanged);
01546             }
01547         }
01548         else if (props.contains("Bitrate")) {
01549             m_parent->internalNetworkDeviceEvent(TDENetworkDeviceEventType::BitRateChanged, TQString::null);
01550         }
01551     }
01552 }
01553 
01554 void TDENetworkConnectionManager_BackendNMPrivate::internalProcessAPPropertiesChanged(const TQMap<TQString, TQT_DBusVariant>& props) {
01555     const DBus::AccessPointProxy* apProxy = dynamic_cast<const DBus::AccessPointProxy*>(sender());
01556     if (apProxy) {
01557         TQT_DBusError error;
01558         TDEMACAddress BSSID;
01559         BSSID.fromString(apProxy->getHwAddress(error));
01560         if (props.contains("Strength")) {
01561             m_parent->internalAccessPointStatusChanged(BSSID, TDENetworkAPEventType::SignalStrengthChanged);
01562         }
01563     }
01564 }
01565 
01566 TDENetworkDeviceType::TDENetworkDeviceType TDENetworkConnectionManager_BackendNM::deviceType() {
01567     if (!m_networkDevice) {
01568         return TDENetworkDeviceType::BackendOnly;
01569     }
01570 
01571     // Query NM for the device type
01572     TQT_DBusError error;
01573     d->m_dbusDeviceString = deviceInterfaceString(deviceNode());
01574     if (!d->m_dbusDeviceString.isEmpty()) {
01575         DBus::DeviceProxy genericDevice(NM_DBUS_SERVICE, d->m_dbusDeviceString);
01576         genericDevice.setConnection(TQT_DBusConnection::systemBus());
01577         TDENetworkDeviceType::TDENetworkDeviceType ret = nmDeviceTypeToTDEDeviceType(genericDevice.getDeviceType(error));
01578         if (error.isValid()) {
01579             // Error!
01580             PRINT_ERROR((error.name() + ": " + error.message()))
01581             return TDENetworkDeviceType::Other;
01582         }
01583         else {
01584             return ret;
01585         }
01586     }
01587     else {
01588         // Error!
01589         PRINT_ERROR(TQString("Invalid empty DBUS device string"))
01590         return TDENetworkDeviceType::Other;
01591     }
01592 }
01593 
01594 TDENetworkConnectionType::TDENetworkConnectionType TDENetworkConnectionManager_BackendNM::connectionType(TQString dbusPath) {
01595     TDENetworkConnectionType::TDENetworkConnectionType connType = TDENetworkConnectionType::Other;
01596     TQ_UINT32 ret;
01597     TQT_DBusError error;
01598 
01599     // Obtain connection settings from the path specified
01600     DBus::ConnectionSettingsInterface connectionSettings(NM_DBUS_SERVICE, dbusPath);
01601     connectionSettings.setConnection(TQT_DBusConnection::systemBus());
01602     connect(&connectionSettings, SIGNAL(GetSettingsAsyncReply(int, const TQT_DBusDataMap<TQString>&)), d, SLOT(processConnectionSettingsAsyncReply(int, const TQT_DBusDataMap<TQString>&)));
01603     int asyncCallID;
01604     ret = connectionSettings.GetSettingsAsync(asyncCallID, error);
01605     if (ret && error.isValid()) {
01606         ret = 0;
01607         PRINT_ERROR((error.name() + ": " + error.message()))
01608     }
01609     if (ret) {
01610         // Wait for the asynchronous call to return...
01611         d->nmConnectionSettingsAsyncCallWaiting[asyncCallID] = true;
01612         TQTimer nmCallTimeoutTimer;
01613         nmCallTimeoutTimer.start(NM_ASYNC_TIMEOUT_MS, true);
01614         while (d->nmConnectionSettingsAsyncCallWaiting[asyncCallID]) {
01615             tqApp->processEvents();
01616             if (!nmCallTimeoutTimer.isActive()) {
01617                 PRINT_ERROR(TQString("DBUS asynchronous call timed out!"))
01618                 break;
01619             }
01620         }
01621         TQT_DBusTQStringDataMap connectionSettingsMap = d->nmConnectionSettingsAsyncSettingsResponse[asyncCallID];
01622         if (d->nmConnectionSettingsAsyncSettingsErrorResponse.contains(asyncCallID)) {
01623             PRINT_ERROR((d->nmConnectionSettingsAsyncSettingsErrorResponse[asyncCallID].name() + ": " + d->nmConnectionSettingsAsyncSettingsErrorResponse[asyncCallID].message()));
01624             d->nmConnectionSettingsAsyncSettingsErrorResponse.remove(asyncCallID);
01625         }
01626         d->nmConnectionSettingsAsyncCallWaiting.remove(asyncCallID);
01627         if (d->nmConnectionSettingsAsyncSettingsResponse.contains(asyncCallID)) {
01628             d->nmConnectionSettingsAsyncSettingsResponse.remove(asyncCallID);
01629         }
01630 
01631         // Parse settings to find connection type
01632         TQT_DBusTQStringDataMap::const_iterator it2;
01633         for (it2 = connectionSettingsMap.begin(); it2 != connectionSettingsMap.end(); ++it2) {
01634             TQString outerKeyValue = it2.key();
01635             TQT_DBusData dataValue = it2.data();
01636 
01637             TQT_DBusTQStringDataMap nestedConnectionSettingsMap = dataValue.toStringKeyMap();
01638             TQT_DBusTQStringDataMap::const_iterator it3;
01639             for (it3 = nestedConnectionSettingsMap.begin(); it3 != nestedConnectionSettingsMap.end(); ++it3) {
01640                 TQString keyValue = it3.key();
01641                 TQT_DBusData dataValue = it3.data();
01642                 if (dataValue.type() == TQT_DBusData::Variant) {
01643                     TQT_DBusVariant dataValueVariant = dataValue.toVariant();
01644                     TQT_DBusData dataValue2 = dataValueVariant.value;
01645                     if (dataValue2.type() != TQT_DBusData::Variant) {
01646                         if (outerKeyValue.lower() == "connection") {
01647                             if (keyValue.lower() == "type") {
01648                                 connType = nmConnectionTypeToTDEConnectionType(dataValue2.toString());
01649                             }
01650                         }
01651                     }
01652                 }
01653             }
01654         }
01655     }
01656 
01657     return connType;
01658 }
01659 
01660 TQString TDENetworkConnectionManager_BackendNM::backendName() {
01661     return i18n("NetworkManager");
01662 }
01663 
01664 TDENetworkGlobalManagerFlags::TDENetworkGlobalManagerFlags TDENetworkConnectionManager_BackendNM::backendStatus() {
01665     if (d->m_networkManagerProxy) {
01666         TQ_UINT32 ret;
01667         TQT_DBusError error;
01668         ret = d->m_networkManagerProxy->getState(error);
01669         if (error.isValid()) {
01670             // Error!
01671             PRINT_ERROR((error.name() + ": " + error.message()))
01672             return TDENetworkGlobalManagerFlags::BackendUnavailable;
01673         }
01674         else {
01675             TDENetworkGlobalManagerFlags::TDENetworkGlobalManagerFlags globalFlags = nmGlobalStateToTDEGlobalState(ret);
01676             TDENetworkGlobalManagerFlags::TDENetworkGlobalManagerFlags vpnFlags = TDENetworkGlobalManagerFlags::Unknown;
01677             if (d->m_vpnProxy) {
01678                 ret = d->m_vpnProxy->getState(error);
01679                 if (error.isValid()) {
01680                     // Error!
01681                     bool print_error = true;
01682                     if (error.name() == "org.freedesktop.DBus.Error.ServiceUnknown") {
01683                         if (d->vpn_service_error_notified) {
01684                             print_error = false;
01685                         }
01686                         else {
01687                             d->vpn_service_error_notified = true;
01688                         }
01689                     }
01690                     if (print_error) {
01691                         PRINT_ERROR(TQString("Attempting to access the network-manager VPN service returned: %1").arg(error.name() + ": " + error.message()))
01692                     }
01693                     vpnFlags = TDENetworkGlobalManagerFlags::VPNUnknown;
01694                 }
01695                 else {
01696                     vpnFlags = nmVPNStateToTDEGlobalState(ret);
01697                 }
01698             }
01699             return globalFlags | vpnFlags;
01700         }
01701     }
01702     else {
01703         return TDENetworkGlobalManagerFlags::BackendUnavailable;
01704     }
01705 }
01706 
01707 TDENetworkDeviceInformation TDENetworkConnectionManager_BackendNM::deviceInformation() {
01708     TQT_DBusError error;
01709     TDENetworkDeviceInformation ret;
01710 
01711     if (d->m_networkDeviceProxy) {
01712         ret.statusFlags = nmDeviceStateToTDEDeviceState(d->m_networkDeviceProxy->getState(error));
01713         ret.UUID = d->m_networkDeviceProxy->getUdi(error);
01714         ret.backendDriver = d->m_networkDeviceProxy->getDriver(error);
01715         ret.backendDriverVersion = d->m_networkDeviceProxy->getDriverVersion(error);
01716         ret.firmwareVersion = d->m_networkDeviceProxy->getFirmwareVersion(error);
01717         ret.capabilityFlags = nmCapabilityFlagsToTDECapabilityFlags(d->m_networkDeviceProxy->getCapabilities(error));
01718         // ipConfiguration is not filled in, as the TDE HW library provides complementary functionality and is more reliable/easier to use and maintain
01719         ret.managed = d->m_networkDeviceProxy->getManaged(error);
01720         ret.autoConnect = d->m_networkDeviceProxy->getAutoconnect(error);
01721         ret.firmwareMissing = d->m_networkDeviceProxy->getFirmwareMissing(error);
01722         ret.deviceType = nmDeviceTypeToTDEDeviceType(d->m_networkDeviceProxy->getDeviceType(error));
01723         if (error.isValid()) {
01724             // Error!
01725             bool print_error = true;
01726             if (error.name() == "org.freedesktop.DBus.Error.AccessDenied") {
01727                 if (error.message().contains("org.freedesktop.NetworkManager.Device")) {
01728                     // Unable to determine if device allows autoconnect
01729                     // Assume true!
01730                     ret.autoConnect = true;
01731                     if (d->device_autoconnect_error_notified) {
01732                         print_error = false;
01733                     }
01734                     else {
01735                         d->device_autoconnect_error_notified = true;
01736                     }
01737                 }
01738             }
01739             if (print_error) {
01740                 PRINT_ERROR((error.name() + ": " + error.message()))
01741             }
01742 
01743             // Reset error object to avoid spurious error messages on the command line
01744             error = TQT_DBusError();
01745         }
01746 
01747         // Populate wiFiInfo
01748         if ((deviceType() == TDENetworkDeviceType::WiFi) && (d->m_wiFiDeviceProxy)) {
01749             ret.wiFiInfo.valid = true;
01750             ret.wiFiInfo.hwAddress.fromString(d->m_wiFiDeviceProxy->getHwAddress(error));
01751             ret.wiFiInfo.permanentHWAddress.fromString(d->m_wiFiDeviceProxy->getPermHwAddress(error));
01752             ret.wiFiInfo.operatingMode = nmWiFiModeToTDEWiFiMode(d->m_wiFiDeviceProxy->getMode(error));
01753             ret.wiFiInfo.bitrate = d->m_wiFiDeviceProxy->getBitrate(error);
01754             TDENetworkWiFiAPInfo* apInfo = getAccessPointDetails(d->m_wiFiDeviceProxy->getActiveAccessPoint(error));
01755             if (error.isValid()) {
01756                 PRINT_ERROR((error.name() + ": " + error.message()))
01757 
01758                 // Reset error object to avoid spurious error messages on the command line
01759                 error = TQT_DBusError();
01760             }
01761             if (apInfo) {
01762                 ret.wiFiInfo.activeAccessPointBSSID = apInfo->BSSID;
01763                 TDENetworkWiFiAPInfo* neighborListAPInfo = findAccessPointByBSSID(ret.wiFiInfo.activeAccessPointBSSID);
01764                 if (neighborListAPInfo) {
01765                     *neighborListAPInfo = *apInfo;
01766                 }
01767                 delete apInfo;
01768             }
01769             else {
01770                 ret.wiFiInfo.activeAccessPointBSSID = TDEMACAddress();
01771             }
01772             ret.wiFiInfo.wirelessFlags = tdeWiFiFlagsToNMWiFiFlags(d->m_wiFiDeviceProxy->getWirelessCapabilities(error));
01773         }
01774         else {
01775             ret.wiFiInfo.valid = false;
01776         }
01777 
01778         // Get active connection UUID
01779         TQT_DBusObjectPath connectionPath = d->m_networkDeviceProxy->getActiveConnection(error);
01780         if (!error.isValid()) {
01781             DBus::ActiveConnectionProxy activeConnection(NM_DBUS_SERVICE, connectionPath);
01782             activeConnection.setConnection(TQT_DBusConnection::systemBus());
01783             ret.activeConnectionUUID = activeConnection.getUuid(error);
01784             if (error.isValid()) {
01785                 ret.activeConnectionUUID = TQString::null;
01786             }
01787         }
01788 
01789         ret.valid = true;
01790     }
01791 
01792     return ret;
01793 }
01794 
01795 TDENetworkDeviceInformation TDENetworkConnectionManager_BackendNM::deviceStatus() {
01796     TQT_DBusError error;
01797     TDENetworkDeviceInformation ret;
01798 
01799     if (d->m_networkDeviceProxy) {
01800         ret.statusFlags = nmDeviceStateToTDEDeviceState(d->m_networkDeviceProxy->getState(error));
01801         ret.UUID = d->m_networkDeviceProxy->getUdi(error);
01802 
01803         // Get active connection UUID
01804         TQT_DBusObjectPath connectionPath = d->m_networkDeviceProxy->getActiveConnection(error);
01805         if (!error.isValid()) {
01806             DBus::ActiveConnectionProxy activeConnection(NM_DBUS_SERVICE, connectionPath);
01807             activeConnection.setConnection(TQT_DBusConnection::systemBus());
01808             ret.activeConnectionUUID = activeConnection.getUuid(error);
01809             if (error.isValid()) {
01810                 ret.activeConnectionUUID = TQString::null;
01811             }
01812         }
01813 
01814         ret.valid = true;
01815     }
01816 
01817     return ret;
01818 }
01819 
01820 void TDENetworkConnectionManager_BackendNMPrivate::processConnectionSettingsAsyncReply(int asyncCallId, const TQT_DBusDataMap<TQString>& settings) {
01821     nmConnectionSettingsAsyncCallWaiting[asyncCallId] = false;
01822     nmConnectionSettingsAsyncSettingsResponse[asyncCallId] = settings;
01823 }
01824 
01825 void TDENetworkConnectionManager_BackendNMPrivate::processConnectionSettingsUpdateAsyncReply(int asyncCallId) {
01826     nmConnectionSettingsAsyncCallWaiting[asyncCallId] = false;
01827 }
01828 
01829 void TDENetworkConnectionManager_BackendNMPrivate::processAddConnectionAsyncReply(int asyncCallId, const TQT_DBusObjectPath& path) {
01830     nmConnectionSettingsAsyncCallWaiting[asyncCallId] = false;
01831     nmAddConnectionAsyncResponse[asyncCallId] = path;
01832 }
01833 
01834 void TDENetworkConnectionManager_BackendNMPrivate::processConnectionSettingsAsyncError(int asyncCallId, const TQT_DBusError error) {
01835     nmConnectionSettingsAsyncSettingsErrorResponse[asyncCallId] = error;
01836 }
01837 
01838 void TDENetworkConnectionManager_BackendNMPrivate::processConnectionSettingsUpdateAsyncError(int asyncCallId, const TQT_DBusError error) {
01839     nmConnectionSettingsUpdateAsyncSettingsErrorResponse[asyncCallId] = error;
01840 }
01841 
01842 void TDENetworkConnectionManager_BackendNMPrivate::processAddConnectionAsyncError(int asyncCallId, const TQT_DBusError error) {
01843     nmAddConnectionAsyncErrorResponse[asyncCallId] = error;
01844 }
01845 
01846 void TDENetworkConnectionManager_BackendNM::loadConnectionInformation() {
01847     if (d->nonReentrantCallActive) return;
01848 
01849     d->nonReentrantCallActive = true;
01850 
01851     TDEMACAddress deviceMACAddress;
01852     deviceMACAddress.fromString(this->deviceMACAddress());
01853 
01854     if (d->m_networkManagerSettings) {
01855         clearTDENetworkConnectionList();
01856         TQT_DBusObjectPathList connections;
01857         TQT_DBusError error;
01858         bool ret;
01859         int state;
01860         ret = d->m_networkManagerSettings->ListConnections(connections, error);
01861         if (ret) {
01862             TQT_DBusObjectPathList::iterator it;
01863             for (it = connections.begin(); it != connections.end(); ++it) {
01864                 TDENetworkConnection* connection;
01865                 TDEWiredEthernetConnection* ethernetConnection = NULL;
01866                 TDEWiredInfinibandConnection* infinibandConnection = NULL;
01867                 TDEWiFiConnection* wiFiConnection = NULL;
01868                 TDEVPNConnection* vpnConnection = NULL;
01869                 TDEWiMaxConnection* wiMaxConnection = NULL;
01870                 TDEVLANConnection* vlanConnection = NULL;
01871                 TDEOLPCMeshConnection* olpcMeshConnection = NULL;
01872                 TDEBluetoothConnection* bluetoothConnection = NULL;
01873                 TDEModemConnection* modemConnection = NULL;
01874                 TDENetworkConnectionType::TDENetworkConnectionType connType = connectionType((*it));
01875                 if (connType == TDENetworkConnectionType::WiredEthernet) {
01876                     connection = ethernetConnection = new TDEWiredEthernetConnection;
01877                 }
01878                 else if (connType == TDENetworkConnectionType::Infiniband) {
01879                     connection = infinibandConnection = new TDEWiredInfinibandConnection;
01880                 }
01881                 else if (connType == TDENetworkConnectionType::WiFi) {
01882                     connection = wiFiConnection = new TDEWiFiConnection;
01883                 }
01884                 else if (connType == TDENetworkConnectionType::VPN) {
01885                     connection = vpnConnection = new TDEVPNConnection;
01886                 }
01887                 else if (connType == TDENetworkConnectionType::WiMax) {
01888                     connection = wiMaxConnection = new TDEWiMaxConnection;
01889                 }
01890                 else if (connType == TDENetworkConnectionType::VLAN) {
01891                     connection = vlanConnection = new TDEVLANConnection;
01892                 }
01893                 else if (connType == TDENetworkConnectionType::OLPCMesh) {
01894                     connection = olpcMeshConnection = new TDEOLPCMeshConnection;
01895                 }
01896                 else if (connType == TDENetworkConnectionType::Bluetooth) {
01897                     connection = bluetoothConnection = new TDEBluetoothConnection;
01898                 }
01899                 else if (connType == TDENetworkConnectionType::Modem) {
01900                     connection = modemConnection = new TDEModemConnection;
01901                 }
01902                 else {
01903                     connection = new TDENetworkConnection;
01904                 }
01905                 // Set up defaults
01906                 connection->ipConfig.connectionFlags =  TDENetworkIPConfigurationFlags::IPV4DHCPIP          | \
01907                                     TDENetworkIPConfigurationFlags::IPV4DHCPDNS         | \
01908                                     TDENetworkIPConfigurationFlags::IPV4DHCPRoutes          | \
01909                                     TDENetworkIPConfigurationFlags::IPV4MayUseAsDefaultRoute    | \
01910                                     TDENetworkIPConfigurationFlags::IPV6DHCPIP          | \
01911                                     TDENetworkIPConfigurationFlags::IPV6DHCPDNS         | \
01912                                     TDENetworkIPConfigurationFlags::IPV6DHCPRoutes          | \
01913                                     TDENetworkIPConfigurationFlags::IPV6MayUseAsDefaultRoute;
01914                 // Set up NM-specific defaults
01915                 // Keep in sync with latest NM default settings!
01916                 // NM 0.9 setting descriptions and default values are available at:
01917                 // http://projects.gnome.org/NetworkManager/developers/api/09/ref-settings.html
01918                 connection->autoConnect = true;
01919 
01920                 if (wiFiConnection) {
01921                     wiFiConnection->securitySettings.authType = TDENetworkWiFiAuthType::Open;
01922                 }
01923 
01924 #ifdef DEBUG_NETWORK_MANAGER_COMMUNICATIONS
01925                 printf("[network-manager comm debug] %s\n", (*it).data()); fflush(stdout);
01926 #endif // DEBUG_NETWORK_MANAGER_COMMUNICATIONS
01927 
01928                 // Obtain connection settings from the path specified
01929                 DBus::ConnectionSettingsInterface connectionSettings(NM_DBUS_SERVICE, (*it));
01930                 connectionSettings.setConnection(TQT_DBusConnection::systemBus());
01931                 connect(&connectionSettings, SIGNAL(GetSettingsAsyncReply(int, const TQT_DBusDataMap<TQString>&)), d, SLOT(processConnectionSettingsAsyncReply(int, const TQT_DBusDataMap<TQString>&)));
01932                 connect(&connectionSettings, SIGNAL(AsyncErrorResponseDetected(int, const TQT_DBusError)), d, SLOT(processConnectionSettingsAsyncError(int, const TQT_DBusError)));
01933                 int asyncCallID;
01934                 ret = connectionSettings.GetSettingsAsync(asyncCallID, error);
01935                 if (ret && error.isValid()) {
01936                     ret = 0;
01937                     PRINT_ERROR((error.name() + ": " + error.message()))
01938                 }
01939                 if (ret) {
01940                     // Wait for the asynchronous call to return...
01941                     d->nmConnectionSettingsAsyncCallWaiting[asyncCallID] = true;
01942                     TQTimer nmCallTimeoutTimer;
01943                     nmCallTimeoutTimer.start(NM_ASYNC_TIMEOUT_MS, true);
01944                     while (d->nmConnectionSettingsAsyncCallWaiting[asyncCallID]) {
01945                         tqApp->processEvents();
01946                         if (!nmCallTimeoutTimer.isActive()) {
01947                             PRINT_ERROR(TQString("DBUS asynchronous call timed out!"))
01948                             break;
01949                         }
01950                     }
01951                     TQT_DBusTQStringDataMap connectionSettingsMap = d->nmConnectionSettingsAsyncSettingsResponse[asyncCallID];
01952                     if (d->nmConnectionSettingsAsyncSettingsErrorResponse.contains(asyncCallID)) {
01953                         PRINT_ERROR((d->nmConnectionSettingsAsyncSettingsErrorResponse[asyncCallID].name() + ": " + d->nmConnectionSettingsAsyncSettingsErrorResponse[asyncCallID].message()));
01954                         d->nmConnectionSettingsAsyncSettingsErrorResponse.remove(asyncCallID);
01955                     }
01956                     d->nmConnectionSettingsAsyncCallWaiting.remove(asyncCallID);
01957                     if (d->nmConnectionSettingsAsyncSettingsResponse.contains(asyncCallID)) {
01958                         d->nmConnectionSettingsAsyncSettingsResponse.remove(asyncCallID);
01959                     }
01960 
01961 #ifdef DEBUG_NETWORK_MANAGER_COMMUNICATIONS
01962                     printf("[network-manager comm debug] received DBUS object structure map follows:\n"); fflush(stdout);
01963                     printDBUSObjectStructure(TQT_DBusData::fromStringKeyMap(connectionSettingsMap));
01964 #endif // DEBUG_NETWORK_MANAGER_COMMUNICATIONS
01965 
01966                     // Parse settings
01967                     TQT_DBusTQStringDataMap::const_iterator it2;
01968                     for (it2 = connectionSettingsMap.begin(); it2 != connectionSettingsMap.end(); ++it2) {
01969                         TQString outerKeyValue = it2.key();
01970                         TQT_DBusData dataValue = it2.data();
01971 #ifdef DEBUG_NETWORK_MANAGER_COMMUNICATIONS
01972                         printf("[network-manager comm debug] [%s]\n", outerKeyValue.ascii()); fflush(stdout);
01973 #endif // DEBUG_NETWORK_MANAGER_COMMUNICATIONS
01974                         TQT_DBusTQStringDataMap nestedConnectionSettingsMap = dataValue.toStringKeyMap();
01975                         TQT_DBusTQStringDataMap::const_iterator it3;
01976                         for (it3 = nestedConnectionSettingsMap.begin(); it3 != nestedConnectionSettingsMap.end(); ++it3) {
01977                             TQString keyValue = it3.key();
01978                             TQT_DBusData dataValue = it3.data();
01979                             if (dataValue.type() != TQT_DBusData::Variant) {
01980 #ifdef DEBUG_NETWORK_MANAGER_COMMUNICATIONS
01981                                 printf("[network-manager comm debug] %s = %s (type %d(%s))\n", keyValue.ascii(), dataValue.toString().ascii(), dataValue.type(), dataValue.typeName()); fflush(stdout);
01982 #endif // DEBUG_NETWORK_MANAGER_COMMUNICATIONS
01983                                 // No NM settings are known which use this style
01984                             }
01985                             else {
01986                                 TQT_DBusVariant dataValueVariant = dataValue.toVariant();
01987                                 TQT_DBusData dataValue2 = dataValueVariant.value;
01988                                 if (dataValue2.type() != TQT_DBusData::Variant) {
01989 #ifdef DEBUG_NETWORK_MANAGER_COMMUNICATIONS
01990                                     printf("[network-manager comm debug] %s = %s (type %d(%s), signature %s)\n", keyValue.ascii(), dataValue2.toString().ascii(), dataValue2.type(), dataValue2.typeName(), dataValueVariant.signature.ascii()); fflush(stdout);
01991 #endif // DEBUG_NETWORK_MANAGER_COMMUNICATIONS
01992                                     // Most NM settings use this style
01993                                     if (outerKeyValue.lower() == "connection") {
01994                                         if (keyValue.lower() == "id") {
01995                                             connection->friendlyName = dataValue2.toString();
01996                                         }
01997                                         else if (keyValue.lower() == "uuid") {
01998                                             connection->UUID = dataValue2.toString().lower();
01999                                         }
02000                                         else if (keyValue.lower() == "permissions") {
02001                                             TQT_DBusDataValueList valueList = dataValue2.toTQValueList();
02002                                             TQT_DBusDataValueList::const_iterator it4;
02003                                             for (it4 = valueList.begin(); it4 != valueList.end(); ++it4) {
02004                                                 TQT_DBusData innerDataValue = *it4;
02005                                                 TQString authString = innerDataValue.toString();
02006                                                 TQStringList pieces = TQStringList::split(":", authString);
02007                                                 if (pieces[0].lower() == "user") {
02008                                                     connection->authorizedUsers.append(pieces[1]);
02009                                                 }
02010                                             }
02011                                         }
02012                                         else if (keyValue.lower() == "autoconnect") {
02013                                             connection->autoConnect = dataValue2.toBool();
02014                                         }
02015                                         else if (keyValue.lower() == "read-only") {
02016                                             connection->readOnly = dataValue2.toBool();
02017                                         }
02018                                         else if (keyValue.lower() == "master") {
02019                                             connection->masterConnectionUUID = dataValue2.toString().lower();
02020                                         }
02021                                         else if (keyValue.lower() == "slave-type") {
02022                                             connection->slaveType = nmSlaveTypeToTDESlaveType(dataValue2.toString());
02023                                         }
02024                                         else if (keyValue.lower() == "timestamp") {
02025                                             connection->lastKnownConnection.setTime_t(dataValue2.toUInt64());
02026                                         }
02027                                     }
02028                                     else if (outerKeyValue.lower() == "802-1x") {
02029                                         if (keyValue.lower() == "eap") {
02030                                             TQT_DBusDataValueList valueList = dataValue2.toTQValueList();
02031                                             TQT_DBusDataValueList::const_iterator it4;
02032                                             state = 0;
02033                                             for (it4 = valueList.begin(); it4 != valueList.end(); ++it4) {
02034                                                 TQT_DBusData innerDataValue = *it4;
02035                                                 if (state == 0) {
02036                                                     // EAP type
02037                                                     connection->eapConfig.type = nmEAPTypeToTDEEAPType(innerDataValue.toString());
02038                                                 }
02039                                                 state++;
02040                                             }
02041                                         }
02042                                         else if (keyValue.lower() == "identity") {
02043                                             connection->eapConfig.userName = dataValue2.toString();
02044                                         }
02045                                         else if (keyValue.lower() == "anonymous-identity") {
02046                                             connection->eapConfig.anonymousUserName = dataValue2.toString();
02047                                         }
02048                                         else if (keyValue.lower() == "pac-file") {
02049                                             connection->eapConfig.pacFileName = dataValue2.toString();
02050                                         }
02051                                         else if (keyValue.lower() == "ca-cert") {
02052                                             TQT_DBusDataValueList valueList = dataValue2.toTQValueList();
02053                                             TQT_DBusDataValueList::const_iterator it4;
02054                                             int count=0;
02055                                             for (it4 = valueList.begin(); it4 != valueList.end(); ++it4) {
02056                                                 TQT_DBusData innerDataValue = *it4;
02057                                                 count++;
02058                                                 connection->eapConfig.caCertificate.resize(count+1);
02059                                                 connection->eapConfig.caCertificate[count] = innerDataValue.toByte();
02060                                             }
02061                                         }
02062                                         else if (keyValue.lower() == "ca-path") {
02063                                             connection->eapConfig.additionalCAFilesPath = dataValue2.toString();
02064                                         }
02065                                         else if (keyValue.lower() == "subject-match") {
02066                                             connection->eapConfig.authServerCertSubjectMatch = dataValue2.toString();
02067                                         }
02068                                         else if (keyValue.lower() == "altsubject-matches") {
02069                                             TQT_DBusDataValueList valueList = dataValue2.toTQValueList();
02070                                             TQT_DBusDataValueList::const_iterator it4;
02071                                             for (it4 = valueList.begin(); it4 != valueList.end(); ++it4) {
02072                                                 TQT_DBusData innerDataValue = *it4;
02073                                                 connection->eapConfig.alternateAuthServerCertSubjectMatch.append(innerDataValue.toString());
02074                                             }
02075                                         }
02076                                         else if (keyValue.lower() == "client-cert") {
02077                                             TQT_DBusDataValueList valueList = dataValue2.toTQValueList();
02078                                             TQT_DBusDataValueList::const_iterator it4;
02079                                             int count=0;
02080                                             for (it4 = valueList.begin(); it4 != valueList.end(); ++it4) {
02081                                                 TQT_DBusData innerDataValue = *it4;
02082                                                 count++;
02083                                                 connection->eapConfig.clientCertificate.resize(count+1);
02084                                                 connection->eapConfig.clientCertificate[count] = innerDataValue.toByte();
02085                                             }
02086                                         }
02087                                         else if (keyValue.lower() == "phase1-peapver") {
02088                                             connection->eapConfig.forcePEAPVersion = dataValue2.toString();
02089                                         }
02090                                         else if (keyValue.lower() == "phase1-peaplabel") {
02091                                             connection->eapConfig.forcePEAPLabel = dataValue2.toString();
02092                                         }
02093                                         else if (keyValue.lower() == "phase1-fast-provisioning") {
02094                                             connection->eapConfig.fastProvisioningFlags = nmEAPFastFlagsToTDEEAPFastFlags(dataValue2.toString());
02095                                         }
02096                                         else if (keyValue.lower() == "phase2-auth") {
02097                                             connection->eapConfig.phase2NonEAPAuthMethod = nmEAPTypeToTDEEAPType(dataValue2.toString());
02098                                         }
02099                                         else if (keyValue.lower() == "phase2-autheap") {
02100                                             connection->eapConfig.phase2EAPAuthMethod = nmEAPTypeToTDEEAPType(dataValue2.toString());
02101                                         }
02102                                         else if (keyValue.lower() == "phase2-ca-cert") {
02103                                             TQT_DBusDataValueList valueList = dataValue2.toTQValueList();
02104                                             TQT_DBusDataValueList::const_iterator it4;
02105                                             int count=0;
02106                                             for (it4 = valueList.begin(); it4 != valueList.end(); ++it4) {
02107                                                 TQT_DBusData innerDataValue = *it4;
02108                                                 count++;
02109                                                 connection->eapConfig.phase2CaCertificate.resize(count+1);
02110                                                 connection->eapConfig.phase2CaCertificate[count] = innerDataValue.toByte();
02111                                             }
02112                                         }
02113                                         else if (keyValue.lower() == "phase2-ca-path") {
02114                                             connection->eapConfig.phase2CaFilesPath = dataValue2.toString();
02115                                         }
02116                                         else if (keyValue.lower() == "phase2-subject-match") {
02117                                             connection->eapConfig.phase2AuthServerCertSubjectMatch = dataValue2.toString();
02118                                         }
02119                                         else if (keyValue.lower() == "phase2-altsubject-matches") {
02120                                             TQT_DBusDataValueList valueList = dataValue2.toTQValueList();
02121                                             TQT_DBusDataValueList::const_iterator it4;
02122                                             for (it4 = valueList.begin(); it4 != valueList.end(); ++it4) {
02123                                                 TQT_DBusData innerDataValue = *it4;
02124                                                 connection->eapConfig.phase2AlternateAuthServerCertSubjectMatch.append(innerDataValue.toString());
02125                                             }
02126                                         }
02127                                         else if (keyValue.lower() == "phase2-client-cert") {
02128                                             TQT_DBusDataValueList valueList = dataValue2.toTQValueList();
02129                                             TQT_DBusDataValueList::const_iterator it4;
02130                                             int count=0;
02131                                             for (it4 = valueList.begin(); it4 != valueList.end(); ++it4) {
02132                                                 TQT_DBusData innerDataValue = *it4;
02133                                                 count++;
02134                                                 connection->eapConfig.phase2ClientCertificate.resize(count+1);
02135                                                 connection->eapConfig.phase2ClientCertificate[count] = innerDataValue.toByte();
02136                                             }
02137                                         }
02138                                         else if (keyValue.lower() == "password-flags") {
02139                                             connection->eapConfig.passwordFlags = nmPasswordFlagsToTDEPasswordFlags(dataValue2.toUInt32());
02140                                         }
02141                                         else if (keyValue.lower() == "password-raw-flags") {
02142                                             connection->eapConfig.binaryPasswordFlags = nmPasswordFlagsToTDEPasswordFlags(dataValue2.toUInt32());
02143                                         }
02144                                         else if (keyValue.lower() == "private-key") {
02145                                             TQT_DBusDataValueList valueList = dataValue2.toTQValueList();
02146                                             TQT_DBusDataValueList::const_iterator it4;
02147                                             int count=0;
02148                                             for (it4 = valueList.begin(); it4 != valueList.end(); ++it4) {
02149                                                 TQT_DBusData innerDataValue = *it4;
02150                                                 count++;
02151                                                 connection->eapConfig.privateKey.resize(count+1);
02152                                                 connection->eapConfig.privateKey[count] = innerDataValue.toByte();
02153                                             }
02154                                         }
02155                                         else if (keyValue.lower() == "private-key-password-flags") {
02156                                             connection->eapConfig.privateKeyPasswordFlags = nmPasswordFlagsToTDEPasswordFlags(dataValue2.toUInt32());
02157                                         }
02158                                         else if (keyValue.lower() == "phase2-private-key") {
02159                                             TQT_DBusDataValueList valueList = dataValue2.toTQValueList();
02160                                             TQT_DBusDataValueList::const_iterator it4;
02161                                             int count=0;
02162                                             for (it4 = valueList.begin(); it4 != valueList.end(); ++it4) {
02163                                                 TQT_DBusData innerDataValue = *it4;
02164                                                 count++;
02165                                                 connection->eapConfig.phase2PrivateKey.resize(count+1);
02166                                                 connection->eapConfig.phase2PrivateKey[count] = innerDataValue.toByte();
02167                                             }
02168                                         }
02169                                         else if (keyValue.lower() == "phase2-private-key-password-flags") {
02170                                             connection->eapConfig.phase2PrivateKeyPasswordFlags = nmPasswordFlagsToTDEPasswordFlags(dataValue2.toUInt32());
02171                                         }
02172                                         else if (keyValue.lower() == "system-ca-certs") {
02173                                             connection->eapConfig.forceSystemCaCertificates = dataValue2.toBool();
02174                                         }
02175                                         connection->eapConfig.valid = true;
02176                                     }
02177                                     else if (outerKeyValue.lower() == "802-3-ethernet") {
02178                                         if (keyValue.lower() == "duplex") {
02179                                             connection->fullDuplex = (dataValue2.toString().lower() == "full")?true:false;
02180                                         }
02181                                         else if (keyValue.lower() == "mac-address") {
02182                                             TQT_DBusDataValueList valueList = dataValue2.toTQValueList();
02183                                             TQT_DBusDataValueList::const_iterator it4;
02184                                             TDENetworkByteList macAddress;
02185                                             for (it4 = valueList.begin(); it4 != valueList.end(); ++it4) {
02186                                                 TQT_DBusData innerDataValue = *it4;
02187                                                 macAddress.append(innerDataValue.toByte());
02188                                             }
02189                                             connection->lockedHWAddress.setAddress(macAddress);
02190                                         }
02191                                         else if (keyValue.lower() == "cloned-mac-address") {
02192                                             TQT_DBusDataValueList valueList = dataValue2.toTQValueList();
02193                                             TQT_DBusDataValueList::const_iterator it4;
02194                                             TDENetworkByteList macAddress;
02195                                             for (it4 = valueList.begin(); it4 != valueList.end(); ++it4) {
02196                                                 TQT_DBusData innerDataValue = *it4;
02197                                                 macAddress.append(innerDataValue.toByte());
02198                                             }
02199                                             connection->manualHWAddress.setAddress(macAddress);
02200                                         }
02201                                         else if (keyValue.lower() == "mtu") {
02202                                             connection->mtu = dataValue2.toUInt32();
02203                                         }
02204                                     }
02205                                     else if (outerKeyValue.lower() == "infiniband") {
02206                                         if (keyValue.lower() == "mac-address") {
02207                                             TQT_DBusDataValueList valueList = dataValue2.toTQValueList();
02208                                             TQT_DBusDataValueList::const_iterator it4;
02209                                             TDENetworkByteList macAddress;
02210                                             for (it4 = valueList.begin(); it4 != valueList.end(); ++it4) {
02211                                                 TQT_DBusData innerDataValue = *it4;
02212                                                 macAddress.append(innerDataValue.toByte());
02213                                             }
02214                                             connection->lockedHWAddress.setAddress(macAddress);
02215                                         }
02216                                         else if (keyValue.lower() == "mtu") {
02217                                             connection->mtu = dataValue2.toUInt32();
02218                                         }
02219                                         else if (keyValue.lower() == "transport-mode") {
02220                                             infinibandConnection->transportMode = nmIBTransportToTDEIBTransport(dataValue2.toString());
02221                                         }
02222                                     }
02223                                     else if (outerKeyValue.lower() == "802-11-wireless") {
02224                                         if (keyValue.lower() == "ssid") {
02225                                             TQT_DBusDataValueList valueList = dataValue2.toTQValueList();
02226                                             TQT_DBusDataValueList::const_iterator it4;
02227                                             int count = 0;
02228                                             for (it4 = valueList.begin(); it4 != valueList.end(); ++it4) {
02229                                                 TQT_DBusData innerDataValue = *it4;
02230                                                 wiFiConnection->SSID.resize(count+1);
02231                                                 wiFiConnection->SSID[count] = innerDataValue.toByte();
02232                                                 count++;
02233                                             }
02234                                         }
02235                                         else if (keyValue.lower() == "mac-address") {
02236                                             TQT_DBusDataValueList valueList = dataValue2.toTQValueList();
02237                                             TQT_DBusDataValueList::const_iterator it4;
02238                                             TDENetworkByteList macAddress;
02239                                             for (it4 = valueList.begin(); it4 != valueList.end(); ++it4) {
02240                                                 TQT_DBusData innerDataValue = *it4;
02241                                                 macAddress.append(innerDataValue.toByte());
02242                                             }
02243                                             connection->lockedHWAddress.setAddress(macAddress);
02244                                         }
02245                                         else if (keyValue.lower() == "cloned-mac-address") {
02246                                             TQT_DBusDataValueList valueList = dataValue2.toTQValueList();
02247                                             TQT_DBusDataValueList::const_iterator it4;
02248                                             TDENetworkByteList macAddress;
02249                                             for (it4 = valueList.begin(); it4 != valueList.end(); ++it4) {
02250                                                 TQT_DBusData innerDataValue = *it4;
02251                                                 macAddress.append(innerDataValue.toByte());
02252                                             }
02253                                             connection->manualHWAddress.setAddress(macAddress);
02254                                         }
02255                                         else if (keyValue.lower() == "mtu") {
02256                                             connection->mtu = dataValue2.toUInt32();
02257                                         }
02258                                         else if (keyValue.lower() == "mode") {
02259                                             wiFiConnection->operatingMode = nmWiFiModeToTDEWiFiMode(dataValue2.toString());
02260                                         }
02261                                         else if (keyValue.lower() == "band") {
02262                                             wiFiConnection->bandRestriction = nmWiFiFrequencyBandToTDEWiFiFrequencyBand(dataValue2.toString());
02263                                         }
02264                                         else if (keyValue.lower() == "channel") {
02265                                             wiFiConnection->channelRestriction = dataValue2.toUInt32();
02266                                             if (wiFiConnection->channelRestriction == 0) wiFiConnection->channelRestriction = -1;
02267                                         }
02268                                         else if (keyValue.lower() == "rate") {
02269                                             wiFiConnection->bitRateRestriction = dataValue2.toUInt32()*1000;
02270                                             if (wiFiConnection->bitRateRestriction == 0) wiFiConnection->bitRateRestriction = -1;
02271                                         }
02272                                         else if (keyValue.lower() == "tx-power") {
02273                                             wiFiConnection->powerRestriction = dataValue2.toUInt32();
02274                                             if (wiFiConnection->powerRestriction == 0) wiFiConnection->powerRestriction = -1;
02275                                         }
02276                                         else if (keyValue.lower() == "bssid") {
02277                                             TQT_DBusDataValueList valueList = dataValue2.toTQValueList();
02278                                             TQT_DBusDataValueList::const_iterator it4;
02279                                             TDENetworkByteList macAddress;
02280                                             for (it4 = valueList.begin(); it4 != valueList.end(); ++it4) {
02281                                                 TQT_DBusData innerDataValue = *it4;
02282                                                 macAddress.append(innerDataValue.toByte());
02283                                             }
02284                                             wiFiConnection->accessPointRestriction.setAddress(macAddress);
02285                                         }
02286                                         else if (keyValue.lower() == "mac-address-blacklist") {
02287                                             TQT_DBusDataValueList valueList = dataValue2.toTQValueList();
02288                                             TQT_DBusDataValueList::const_iterator it4;
02289                                             for (it4 = valueList.begin(); it4 != valueList.end(); ++it4) {
02290                                                 TQT_DBusData innerDataValue = *it4;
02291                                                 TDEMACAddress hwAddress;
02292                                                 hwAddress.fromString(innerDataValue.toString());
02293                                                 wiFiConnection->blacklistedBSSIDs.append(hwAddress);
02294                                             }
02295                                         }
02296                                         else if (keyValue.lower() == "seen-bssids") {
02297                                             TQT_DBusDataValueList valueList = dataValue2.toTQValueList();
02298                                             TQT_DBusDataValueList::const_iterator it4;
02299                                             for (it4 = valueList.begin(); it4 != valueList.end(); ++it4) {
02300                                                 TQT_DBusData innerDataValue = *it4;
02301                                                 TDEMACAddress hwAddress;
02302                                                 hwAddress.fromString(innerDataValue.toString());
02303                                                 wiFiConnection->heardBSSIDs.append(hwAddress);
02304                                             }
02305                                         }
02306                                         else if (keyValue.lower() == "security") {
02307                                             TQString setting;
02308                                             if (setting.lower() == "802-11-wireless-security") {
02309                                                 wiFiConnection->securityRequired = true;
02310                                             }
02311                                             else {
02312                                                 wiFiConnection->securityRequired = false;
02313                                             }
02314                                         }
02315                                         else if (keyValue.lower() == "hidden") {
02316                                             wiFiConnection->isHiddenNetwork = dataValue2.toBool();
02317                                         }
02318                                     }
02319                                     else if ((outerKeyValue.lower() == "802-11-wireless-security") && (wiFiConnection)) {
02320                                         if (keyValue.lower() == "key-mgmt") {
02321                                             wiFiConnection->securitySettings.keyType = nmWiFiKeyTypeToTDEWiFiKeyType(dataValue2.toString());
02322                                         }
02323                                         else if (keyValue.lower() == "wep-tx-keyidx") {
02324                                             wiFiConnection->securitySettings.wepKeyIndex = dataValue2.toUInt32();
02325                                         }
02326                                         else if (keyValue.lower() == "auth-alg") {
02327                                             wiFiConnection->securitySettings.authType = nmWiFiAuthTypeToTDEWiFiAuthType(dataValue2.toString());
02328                                         }
02329                                         else if (keyValue.lower() == "proto") {
02330                                             TQT_DBusDataValueList valueList = dataValue2.toTQValueList();
02331                                             TQT_DBusDataValueList::const_iterator it4;
02332                                             TQStringList strings;
02333                                             for (it4 = valueList.begin(); it4 != valueList.end(); ++it4) {
02334                                                 TQT_DBusData innerDataValue = *it4;
02335                                                 strings.append(innerDataValue.toString());
02336                                             }
02337                                             wiFiConnection->securitySettings.wpaVersion = nmWiFiWPAVersionToTDEWiFiWPAVersion(strings);
02338                                         }
02339                                         else if (keyValue.lower() == "pairwise") {
02340                                             TQT_DBusDataValueList valueList = dataValue2.toTQValueList();
02341                                             TQT_DBusDataValueList::const_iterator it4;
02342                                             TQStringList strings;
02343                                             for (it4 = valueList.begin(); it4 != valueList.end(); ++it4) {
02344                                                 TQT_DBusData innerDataValue = *it4;
02345                                                 wiFiConnection->securitySettings.allowedPairWiseCiphers.append(nmWiFiCipherToTDEWiFiCipher(innerDataValue.toString()));
02346                                             }
02347                                             if ((wiFiConnection->securitySettings.allowedPairWiseCiphers.contains(TDENetworkWiFiConnectionCipher::CipherWEP40))
02348                                                 || (wiFiConnection->securitySettings.allowedPairWiseCiphers.contains(TDENetworkWiFiConnectionCipher::CipherWEP104))
02349                                                 || (wiFiConnection->securitySettings.allowedPairWiseCiphers.contains(TDENetworkWiFiConnectionCipher::CipherTKIP))
02350                                                 || (wiFiConnection->securitySettings.allowedPairWiseCiphers.contains(TDENetworkWiFiConnectionCipher::CipherCCMP))) {
02351                                                 wiFiConnection->securitySettings.allowedPairWiseCiphers.append(TDENetworkWiFiConnectionCipher::Any);
02352                                             }
02353                                         }
02354                                         else if (keyValue.lower() == "group") {
02355                                             TQT_DBusDataValueList valueList = dataValue2.toTQValueList();
02356                                             TQT_DBusDataValueList::const_iterator it4;
02357                                             TQStringList strings;
02358                                             for (it4 = valueList.begin(); it4 != valueList.end(); ++it4) {
02359                                                 TQT_DBusData innerDataValue = *it4;
02360                                                 wiFiConnection->securitySettings.allowedGroupWiseCiphers.append(nmWiFiCipherToTDEWiFiCipher(innerDataValue.toString()));
02361                                             }
02362                                             if ((wiFiConnection->securitySettings.allowedGroupWiseCiphers.contains(TDENetworkWiFiConnectionCipher::CipherWEP40))
02363                                                 || (wiFiConnection->securitySettings.allowedGroupWiseCiphers.contains(TDENetworkWiFiConnectionCipher::CipherWEP104))
02364                                                 || (wiFiConnection->securitySettings.allowedGroupWiseCiphers.contains(TDENetworkWiFiConnectionCipher::CipherTKIP))
02365                                                 || (wiFiConnection->securitySettings.allowedGroupWiseCiphers.contains(TDENetworkWiFiConnectionCipher::CipherCCMP))) {
02366                                                 wiFiConnection->securitySettings.allowedGroupWiseCiphers.append(TDENetworkWiFiConnectionCipher::Any);
02367                                             }
02368                                         }
02369                                         else if (keyValue.lower() == "leap-username") {
02370                                             wiFiConnection->securitySettings.leapUsername = dataValue2.toString();
02371                                         }
02372                                         else if (keyValue.lower() == "wep-key-flags") {
02373                                             wiFiConnection->securitySettings.wepKeyFlags = nmPasswordFlagsToTDEPasswordFlags(dataValue2.toUInt32());
02374                                         }
02375                                         else if (keyValue.lower() == "wep-key-type") {
02376                                             wiFiConnection->securitySettings.wepKeyType = nmWepKeyTypeToTDEWepKeyType(dataValue2.toUInt32());
02377                                         }
02378                                         else if (keyValue.lower() == "psk-flags") {
02379                                             wiFiConnection->securitySettings.pskFlags = nmPasswordFlagsToTDEPasswordFlags(dataValue2.toUInt32());
02380                                         }
02381                                         else if (keyValue.lower() == "leap-password-flags") {
02382                                             wiFiConnection->securitySettings.leapPasswordFlags = nmPasswordFlagsToTDEPasswordFlags(dataValue2.toUInt32());
02383                                         }
02384                                         wiFiConnection->securitySettings.valid = true;
02385                                     }
02386                                     else if (outerKeyValue.lower() == "vpn") {
02387                                         if (keyValue.lower() == "service-type") {
02388                                             TQString plugin = dataValue2.toString();
02389                                             plugin.replace("org.freedesktop.NetworkManager.", "");
02390                                             vpnConnection->vpnPluginID = plugin;
02391                                         }
02392                                         else if (keyValue.lower() == "user-name") {
02393                                             vpnConnection->lockedUserName = dataValue2.toString();
02394                                         }
02395                                         else if (keyValue.lower() == "data") {
02396                                             vpnConnection->pluginData.clear();
02397                                             TQT_DBusTQStringDataMap nestedConnectionSettingsMap = dataValue2.toStringKeyMap();
02398                                             TQT_DBusTQStringDataMap::const_iterator it4;
02399                                             for (it4 = nestedConnectionSettingsMap.begin(); it4 != nestedConnectionSettingsMap.end(); ++it4) {
02400                                                 TQString keyValue4 = it4.key();
02401                                                 TQT_DBusData dataValue4 = it4.data();
02402                                                 if (dataValue4.type() == TQT_DBusData::String) {
02403                                                     vpnConnection->pluginData[keyValue4] = dataValue4.toString();
02404                                                 }
02405                                             }
02406                                         }
02407                                     }
02408                                     else if (outerKeyValue.lower() == "wimax") {
02409                                         if (keyValue.lower() == "mac-address") {
02410                                             TQT_DBusDataValueList valueList = dataValue2.toTQValueList();
02411                                             TQT_DBusDataValueList::const_iterator it4;
02412                                             TDENetworkByteList macAddress;
02413                                             for (it4 = valueList.begin(); it4 != valueList.end(); ++it4) {
02414                                                 TQT_DBusData innerDataValue = *it4;
02415                                                 macAddress.append(innerDataValue.toByte());
02416                                             }
02417                                             connection->lockedHWAddress.setAddress(macAddress);
02418                                         }
02419                                         else if (keyValue.lower() == "network-name") {
02420                                             wiMaxConnection->networkServiceProvider = dataValue2.toString();
02421                                         }
02422                                     }
02423                                     else if (outerKeyValue.lower() == "vlan") {
02424                                         if (keyValue.lower() == "interface-name") {
02425                                             vlanConnection->kernelName = dataValue2.toString();
02426                                         }
02427                                         else if (keyValue.lower() == "parent") {
02428                                             vlanConnection->parentConnectionUUID = dataValue2.toString();
02429                                         }
02430                                         else if (keyValue.lower() == "id") {
02431                                             vlanConnection->vlanID = dataValue2.toUInt32();
02432                                         }
02433                                         else if (keyValue.lower() == "flags") {
02434                                             vlanConnection->vlanFlags = nmVLANFlagsToTDEVLANFlags(dataValue2.toUInt32());
02435                                         }
02436                                         else if (keyValue.lower() == "ingress-priority-map") {
02437                                             TQT_DBusDataValueList valueList = dataValue2.toTQValueList();
02438                                             TQT_DBusDataValueList::const_iterator it4;
02439                                             for (it4 = valueList.begin(); it4 != valueList.end(); ++it4) {
02440                                                 TQT_DBusData innerDataValue = *it4;
02441                                                 TQStringList pieces = TQStringList::split(":", innerDataValue.toString(), true);
02442                                                 vlanConnection->ingressPriorityMap[pieces[0].toUInt()] = pieces[1].toUInt();;
02443                                             }
02444                                         }
02445                                         else if (keyValue.lower() == "egress-priority-map") {
02446                                             TQT_DBusDataValueList valueList = dataValue2.toTQValueList();
02447                                             TQT_DBusDataValueList::const_iterator it4;
02448                                             for (it4 = valueList.begin(); it4 != valueList.end(); ++it4) {
02449                                                 TQT_DBusData innerDataValue = *it4;
02450                                                 TQStringList pieces = TQStringList::split(":", innerDataValue.toString(), true);
02451                                                 vlanConnection->egressPriorityMap[pieces[0].toUInt()] = pieces[1].toUInt();;
02452                                             }
02453                                         }
02454                                     }
02455                                     else if (outerKeyValue.lower() == "serial") {
02456                                         if (keyValue.lower() == "baud") {
02457                                             connection->serialConfig.baudRate = dataValue2.toUInt32();
02458                                         }
02459                                         else if (keyValue.lower() == "bits") {
02460                                             connection->serialConfig.byteWidth = dataValue2.toUInt32();
02461                                         }
02462                                         else if (keyValue.lower() == "parity") {
02463                                             connection->serialConfig.parity = nmParityToTDEParity(dataValue2.toByte());
02464                                         }
02465                                         else if (keyValue.lower() == "stopbits") {
02466                                             connection->serialConfig.stopBits = dataValue2.toUInt32();
02467                                         }
02468                                         else if (keyValue.lower() == "send-delay") {
02469                                             connection->serialConfig.txDelay = dataValue2.toUInt64();
02470                                         }
02471                                         connection->serialConfig.valid = true;
02472                                     }
02473                                     else if (outerKeyValue.lower() == "ppp") {
02474                                         if (keyValue.lower() == "noauth") {
02475                                             connection->pppConfig.requireServerAuthentication = !(dataValue2.toBool());
02476                                         }
02477                                         else if (keyValue.lower() == "refuse-eap") {
02478                                             if (dataValue2.toBool())    connection->pppConfig.flags |=  TDENetworkPPPFlags::DisableEAP;
02479                                             else                connection->pppConfig.flags &= ~TDENetworkPPPFlags::DisableEAP;
02480                                         }
02481                                         else if (keyValue.lower() == "refuse-pap") {
02482                                             if (dataValue2.toBool())    connection->pppConfig.flags |=  TDENetworkPPPFlags::DisablePAP;
02483                                             else                connection->pppConfig.flags &= ~TDENetworkPPPFlags::DisablePAP;
02484                                         }
02485                                         else if (keyValue.lower() == "refuse-chap") {
02486                                             if (dataValue2.toBool())    connection->pppConfig.flags |=  TDENetworkPPPFlags::DisableCHAP;
02487                                             else                connection->pppConfig.flags &= ~TDENetworkPPPFlags::DisableCHAP;
02488                                         }
02489                                         else if (keyValue.lower() == "refuse-mschap") {
02490                                             if (dataValue2.toBool())    connection->pppConfig.flags |=  TDENetworkPPPFlags::DisableMSCHAP;
02491                                             else                connection->pppConfig.flags &= ~TDENetworkPPPFlags::DisableMSCHAP;
02492                                         }
02493                                         else if (keyValue.lower() == "refuse-mschapv2") {
02494                                             if (dataValue2.toBool())    connection->pppConfig.flags |=  TDENetworkPPPFlags::DisableMSCHAPv2;
02495                                             else                connection->pppConfig.flags &= ~TDENetworkPPPFlags::DisableMSCHAPv2;
02496                                         }
02497                                         else if (keyValue.lower() == "nobsdcomp") {
02498                                             if (dataValue2.toBool())    connection->pppConfig.flags &= ~TDENetworkPPPFlags::AllowBSDCompression;
02499                                             else                connection->pppConfig.flags |=  TDENetworkPPPFlags::AllowBSDCompression;
02500                                         }
02501                                         else if (keyValue.lower() == "nodeflate") {
02502                                             if (dataValue2.toBool())    connection->pppConfig.flags &= ~TDENetworkPPPFlags::AllowDeflateCompression;
02503                                             else                connection->pppConfig.flags |=  TDENetworkPPPFlags::AllowDeflateCompression;
02504                                         }
02505                                         else if (keyValue.lower() == "no-vj-comp") {
02506                                             if (dataValue2.toBool())    connection->pppConfig.flags &= ~TDENetworkPPPFlags::AllowVJCompression;
02507                                             else                connection->pppConfig.flags |=  TDENetworkPPPFlags::AllowVJCompression;
02508                                         }
02509                                         else if (keyValue.lower() == "require-mppe") {
02510                                             if (dataValue2.toBool())    connection->pppConfig.flags |=  TDENetworkPPPFlags::RequireMPPE;
02511                                             else                connection->pppConfig.flags &= ~TDENetworkPPPFlags::RequireMPPE;
02512                                         }
02513                                         else if (keyValue.lower() == "require-mppe-128") {
02514                                             if (dataValue2.toBool())    connection->pppConfig.flags |=  TDENetworkPPPFlags::RequireMPPE128;
02515                                             else                connection->pppConfig.flags &= ~TDENetworkPPPFlags::RequireMPPE128;
02516                                         }
02517                                         else if (keyValue.lower() == "mppe-stateful") {
02518                                             if (dataValue2.toBool())    connection->pppConfig.flags |=  TDENetworkPPPFlags::StatefulMPPE;
02519                                             else                connection->pppConfig.flags &= ~TDENetworkPPPFlags::StatefulMPPE;
02520                                         }
02521                                         else if (keyValue.lower() == "crtscts") {
02522                                             if (dataValue2.toBool())    connection->pppConfig.flags |=  TDENetworkPPPFlags::UseHardwareFlowControl;
02523                                             else                connection->pppConfig.flags &= ~TDENetworkPPPFlags::UseHardwareFlowControl;
02524                                         }
02525                                         else if (keyValue.lower() == "baud") {
02526                                             connection->pppConfig.baudRate = dataValue2.toUInt32();
02527                                         }
02528                                         else if (keyValue.lower() == "mru") {
02529                                             connection->pppConfig.mru = dataValue2.toUInt32();
02530                                         }
02531                                         else if (keyValue.lower() == "mtu") {
02532                                             connection->pppConfig.mtu = dataValue2.toUInt32();
02533                                         }
02534                                         else if (keyValue.lower() == "lcp-echo-interval") {
02535                                             connection->pppConfig.lcpEchoPingInterval = dataValue2.toUInt32();
02536                                         }
02537                                         else if (keyValue.lower() == "lcp-echo-failure") {
02538                                             connection->pppConfig.lcpEchoFailureThreshold = dataValue2.toUInt32();
02539                                         }
02540                                         connection->pppConfig.valid = true;
02541                                     }
02542                                     else if (outerKeyValue.lower() == "pppoe") {
02543                                         if (keyValue.lower() == "service") {
02544                                             connection->pppoeConfig.networkServiceProvider = dataValue2.toString();
02545                                         }
02546                                         else if (keyValue.lower() == "username") {
02547                                             connection->pppoeConfig.username = dataValue2.toString();
02548                                         }
02549                                         else if (keyValue.lower() == "password-flags") {
02550                                             connection->pppoeConfig.passwordFlags = nmPasswordFlagsToTDEPasswordFlags(dataValue2.toUInt32());
02551                                         }
02552                                         connection->pppoeConfig.secretsValid = true;
02553                                     }
02554                                     else if ((outerKeyValue.lower() == "802-11-olpc-mesh") && (olpcMeshConnection)) {
02555                                         if (keyValue.lower() == "ssid") {
02556                                             TQT_DBusDataValueList valueList = dataValue2.toTQValueList();
02557                                             TQT_DBusDataValueList::const_iterator it4;
02558                                             int count = 0;
02559                                             for (it4 = valueList.begin(); it4 != valueList.end(); ++it4) {
02560                                                 TQT_DBusData innerDataValue = *it4;
02561                                                 olpcMeshConnection->SSID.resize(count+1);
02562                                                 olpcMeshConnection->SSID[count] = innerDataValue.toByte();
02563                                                 count++;
02564                                             }
02565                                         }
02566                                         else if (keyValue.lower() == "channel") {
02567                                             olpcMeshConnection->channel = dataValue2.toUInt32();
02568                                         }
02569                                         else if (keyValue.lower() == "dhcp-anycast-address") {
02570                                             TQT_DBusDataValueList valueList = dataValue2.toTQValueList();
02571                                             TQT_DBusDataValueList::const_iterator it4;
02572                                             int count = 0;
02573                                             for (it4 = valueList.begin(); it4 != valueList.end(); ++it4) {
02574                                                 TQT_DBusData innerDataValue = *it4;
02575                                                 olpcMeshConnection->anycastDHCPHWAddress.resize(count+1);
02576                                                 olpcMeshConnection->anycastDHCPHWAddress[count] = innerDataValue.toByte();
02577                                                 count++;
02578                                             }
02579                                         }
02580                                     }
02581                                     else if ((outerKeyValue.lower() == "bluetooth") && (bluetoothConnection)) {
02582                                         if (keyValue.lower() == "bdaddr") {
02583                                             TQT_DBusDataValueList valueList = dataValue2.toTQValueList();
02584                                             TQT_DBusDataValueList::const_iterator it4;
02585                                             TDENetworkByteList macAddress;
02586                                             for (it4 = valueList.begin(); it4 != valueList.end(); ++it4) {
02587                                                 TQT_DBusData innerDataValue = *it4;
02588                                                 macAddress.append(innerDataValue.toByte());
02589                                             }
02590                                             connection->lockedHWAddress.setAddress(macAddress);
02591                                         }
02592                                         else if (keyValue.lower() == "type") {
02593                                             bluetoothConnection->type = nmBluetoothModeToTDEBluetoothMode(dataValue2.toString());
02594                                         }
02595                                     }
02596                                     else if ((outerKeyValue.lower() == "cdma") && (modemConnection)) {
02597                                         if (keyValue.lower() == "number") {
02598                                             modemConnection->cdmaConfig.providerDataNumber = dataValue2.toString();
02599                                         }
02600                                         else if (keyValue.lower() == "username") {
02601                                             modemConnection->cdmaConfig.username = dataValue2.toString();
02602                                         }
02603                                         else if (keyValue.lower() == "password-flags") {
02604                                             modemConnection->cdmaConfig.passwordFlags = nmPasswordFlagsToTDEPasswordFlags(dataValue2.toUInt32());
02605                                         }
02606                                         modemConnection->type = TDEModemConnectionType::CDMA;
02607                                         modemConnection->cdmaConfig.valid = true;
02608                                     }
02609                                     else if ((outerKeyValue.lower() == "gsm") && (modemConnection)) {
02610                                         if (keyValue.lower() == "number") {
02611                                             modemConnection->gsmConfig.providerDataNumber = dataValue2.toString();
02612                                         }
02613                                         else if (keyValue.lower() == "username") {
02614                                             modemConnection->gsmConfig.username = dataValue2.toString();
02615                                         }
02616                                         else if (keyValue.lower() == "password-flags") {
02617                                             modemConnection->gsmConfig.passwordFlags = nmPasswordFlagsToTDEPasswordFlags(dataValue2.toUInt32());
02618                                         }
02619                                         else if (keyValue.lower() == "apn") {
02620                                             modemConnection->gsmConfig.accessPointName = dataValue2.toString();
02621                                         }
02622                                         else if (keyValue.lower() == "network-id") {
02623                                             modemConnection->gsmConfig.networkID = dataValue2.toString();
02624                                         }
02625                                         else if (keyValue.lower() == "network-type") {
02626                                             modemConnection->gsmConfig.networkType = nmGSMModeToTDEGSMMode(dataValue2.toInt32());
02627                                         }
02628                                         else if (keyValue.lower() == "pin-flags") {
02629                                             modemConnection->gsmConfig.pinFlags = nmPasswordFlagsToTDEPasswordFlags(dataValue2.toUInt32());
02630                                         }
02631                                         else if (keyValue.lower() == "allowed-bands") {
02632                                             modemConnection->gsmConfig.allowedFrequencyBands = dataValue2.toUInt32();
02633                                         }
02634                                         else if (keyValue.lower() == "home-only") {
02635                                             modemConnection->gsmConfig.allowRoaming = !dataValue2.toBool();
02636                                         }
02637                                         modemConnection->type = TDEModemConnectionType::GSM;
02638                                         modemConnection->gsmConfig.valid = true;
02639                                     }
02640                                     else if (outerKeyValue.lower() == "ipv4") {
02641                                         if (keyValue.lower() == "addresses") {
02642                                             TQT_DBusDataValueList valueList = dataValue2.toTQValueList();
02643                                             TQT_DBusDataValueList::const_iterator it4;
02644                                             for (it4 = valueList.begin(); it4 != valueList.end(); ++it4) {
02645                                                 TQT_DBusData innerDataValue = *it4;
02646                                                 TQT_DBusDataValueList innerValueList = innerDataValue.toTQValueList();
02647                                                 TQT_DBusDataValueList::const_iterator it5;
02648                                                 state = 0;
02649                                                 TDENetworkSingleIPConfiguration ipConfig;
02650                                                 for (it5 = innerValueList.begin(); it5 != innerValueList.end(); ++it5) {
02651                                                     TQT_DBusData innerMostDataValue = *it5;
02652                                                     if (state == 0) {
02653                                                         // Address
02654                                                         ipConfig.ipAddress = TQHostAddress(reverseIPV4ByteOrder(innerMostDataValue.toUInt32()));
02655                                                     }
02656                                                     else if (state == 1) {
02657                                                         // Network mask
02658                                                         ipConfig.networkMask.fromCIDRMask(innerMostDataValue.toUInt32());
02659                                                     }
02660                                                     else if (state == 2) {
02661                                                         // Gateway
02662                                                         ipConfig.gateway = TQHostAddress(reverseIPV4ByteOrder(innerMostDataValue.toUInt32()));
02663                                                     }
02664                                                     state++;
02665                                                 }
02666                                                 ipConfig.valid = true;
02667                                                 connection->ipConfig.ipConfigurations.append(ipConfig);
02668                                             }
02669                                         }
02670                                         else if (keyValue.lower() == "dhcp-client-id") {
02671                                             connection->ipConfig.dhcpClientIdentifier = dataValue2.toString();
02672                                         }
02673                                         else if (keyValue.lower() == "dns") {
02674                                             TQT_DBusDataValueList valueList = dataValue2.toTQValueList();
02675                                             TQT_DBusDataValueList::const_iterator it4;
02676                                             for (it4 = valueList.begin(); it4 != valueList.end(); ++it4) {
02677                                                 TQT_DBusData innerDataValue = *it4;
02678                                                 connection->ipConfig.resolvers.append(TQHostAddress(reverseIPV4ByteOrder(innerDataValue.toUInt32())));
02679                                             }
02680                                         }
02681                                         else if (keyValue.lower() == "dns-search") {
02682                                             TQT_DBusDataValueList valueList = dataValue2.toTQValueList();
02683                                             TQT_DBusDataValueList::const_iterator it4;
02684                                             for (it4 = valueList.begin(); it4 != valueList.end(); ++it4) {
02685                                                 TQT_DBusData innerDataValue = *it4;
02686                                                 connection->ipConfig.searchDomains.append(TDENetworkSearchDomain(innerDataValue.toString(), false));
02687                                             }
02688                                         }
02689                                         else if (keyValue.lower() == "ignore-auto-dns") {
02690                                             bool nm_static_dns = dataValue2.toBool();
02691                                             if (nm_static_dns) {
02692                                                 connection->ipConfig.connectionFlags &= ~TDENetworkIPConfigurationFlags::IPV4DHCPDNS;
02693                                             }
02694                                             else {
02695                                                 connection->ipConfig.connectionFlags |= TDENetworkIPConfigurationFlags::IPV4DHCPDNS;
02696                                             }
02697                                         }
02698                                         else if (keyValue.lower() == "may-fail") {
02699                                             bool nm_may_fail = dataValue2.toBool();
02700                                             connection->requireIPV4 = !nm_may_fail;
02701                                         }
02702                                         else if (keyValue.lower() == "method") {
02703                                             TQString nm_method = dataValue2.toString().lower();
02704                                             if (nm_method == "auto") {
02705                                                 connection->ipConfig.connectionFlags |= TDENetworkIPConfigurationFlags::IPV4DHCPIP;
02706                                             }
02707                                             else if (nm_method == "manual") {
02708                                                 connection->ipConfig.connectionFlags &= ~TDENetworkIPConfigurationFlags::IPV4DHCPIP;
02709                                             }
02710                                             else if (nm_method == "link-local") {
02711                                                 connection->ipConfig.connectionFlags &= ~TDENetworkIPConfigurationFlags::IPV4LocalOnly;
02712                                             }
02713                                             else if (nm_method == "shared") {
02714                                                 connection->ipConfig.connectionFlags &= ~TDENetworkIPConfigurationFlags::IPV4StartConnectionSharingServer;
02715                                             }
02716                                             else if (nm_method == "disabled") {
02717                                                 connection->ipConfig.connectionFlags &= ~TDENetworkIPConfigurationFlags::IPV4Disabled;
02718                                             }
02719                                         }
02720                                         else if (keyValue.lower() == "ignore-auto-routes") {
02721                                             bool nm_static_routes = dataValue2.toBool();
02722                                             if (nm_static_routes) {
02723                                                 connection->ipConfig.connectionFlags &= ~TDENetworkIPConfigurationFlags::IPV4DHCPRoutes;
02724                                             }
02725                                             else {
02726                                                 connection->ipConfig.connectionFlags |= TDENetworkIPConfigurationFlags::IPV4DHCPRoutes;
02727                                             }
02728                                         }
02729                                         else if (keyValue.lower() == "never-default") {
02730                                             bool nm_can_default_route = !dataValue2.toBool();
02731                                             if (nm_can_default_route) {
02732                                                 connection->ipConfig.connectionFlags |= TDENetworkIPConfigurationFlags::IPV4MayUseAsDefaultRoute;
02733                                             }
02734                                             else {
02735                                                 connection->ipConfig.connectionFlags &= ~TDENetworkIPConfigurationFlags::IPV4MayUseAsDefaultRoute;
02736                                             }
02737                                         }
02738                                         else if (keyValue.lower() == "routes") {
02739                                             TQT_DBusDataValueList valueList = dataValue2.toTQValueList();
02740                                             TQT_DBusDataValueList::const_iterator it4;
02741                                             for (it4 = valueList.begin(); it4 != valueList.end(); ++it4) {
02742                                                 TQT_DBusData innerDataValue = *it4;
02743                                                 TQT_DBusDataValueList innerValueList = innerDataValue.toTQValueList();
02744                                                 TQT_DBusDataValueList::const_iterator it5;
02745                                                 state = 0;
02746                                                 TDENetworkSingleRouteConfiguration routeConfig;
02747                                                 for (it5 = innerValueList.begin(); it5 != innerValueList.end(); ++it5) {
02748                                                     TQT_DBusData innerMostDataValue = *it5;
02749                                                     if (state == 0) {
02750                                                         // Address
02751                                                         routeConfig.ipAddress = TQHostAddress(reverseIPV4ByteOrder(innerMostDataValue.toUInt32()));
02752                                                     }
02753                                                     else if (state == 1) {
02754                                                         // Network mask
02755                                                         routeConfig.networkMask.fromCIDRMask(innerMostDataValue.toUInt32());
02756                                                     }
02757                                                     else if (state == 2) {
02758                                                         // Gateway
02759                                                         routeConfig.gateway = TQHostAddress(reverseIPV4ByteOrder(innerMostDataValue.toUInt32()));
02760                                                     }
02761                                                     else if (state == 3) {
02762                                                         // Metric
02763                                                         routeConfig.metric = innerMostDataValue.toUInt32();
02764                                                     }
02765                                                     state++;
02766                                                 }
02767                                                 routeConfig.valid = true;
02768                                                 connection->ipConfig.routeConfigurations.append(routeConfig);
02769                                             }
02770                                         }
02771                                         connection->ipConfig.valid = true;
02772                                     }
02773                                     else if (outerKeyValue.lower() == "ipv6") {
02774                                         if (keyValue.lower() == "addresses") {
02775                                             TQT_DBusDataValueList valueList = dataValue2.toTQValueList();
02776                                             TQT_DBusDataValueList::const_iterator it4;
02777                                             for (it4 = valueList.begin(); it4 != valueList.end(); ++it4) {
02778                                                 TQT_DBusData innerDataValue = *it4;
02779                                                 TQT_DBusDataValueList innerValueList = innerDataValue.toStruct();
02780                                                 TQT_DBusDataValueList::const_iterator it5;
02781                                                 TDENetworkSingleIPConfiguration ipConfig;
02782                                                 // Address
02783                                                 TQT_DBusDataValueList innerMostValueList;
02784                                                 innerMostValueList = innerValueList[0].toTQValueList();
02785                                                 TQ_UINT8 nm_v6address[16];
02786                                                 unsigned char nm_addr_ptr = 0;
02787                                                 memset(nm_v6address, 0, sizeof(TQ_UINT8)*16);
02788                                                 for (it5 = innerMostValueList.begin(); it5 != innerMostValueList.end(); ++it5) {
02789                                                     TQT_DBusData innerMostDataValue = *it5;
02790                                                     if (nm_addr_ptr < 16) {
02791                                                         nm_v6address[nm_addr_ptr] = innerMostDataValue.toByte();
02792                                                         nm_addr_ptr++;
02793                                                     }
02794                                                 }
02795                                                 ipConfig.ipAddress = TQHostAddress(nm_v6address);
02796 
02797                                                 // Netmask
02798                                                 ipConfig.networkMask.fromCIDRMask(innerValueList[1].toUInt32(), true);
02799 
02800                                                 // Gateway
02801                                                 memset(nm_v6address, 0, sizeof(TQ_UINT8)*16);
02802                                                 for (it5 = innerMostValueList.begin(); it5 != innerMostValueList.end(); ++it5) {
02803                                                     TQT_DBusData innerMostDataValue = *it5;
02804                                                     if (nm_addr_ptr < 16) {
02805                                                         nm_v6address[nm_addr_ptr] = innerMostDataValue.toByte();
02806                                                         nm_addr_ptr++;
02807                                                     }
02808                                                 }
02809                                                 ipConfig.gateway = TQHostAddress(nm_v6address);
02810 
02811                                                 ipConfig.valid = true;
02812                                                 connection->ipConfig.ipConfigurations.append(ipConfig);
02813                                             }
02814                                         }
02815                                         else if (keyValue.lower() == "dns") {
02816                                             TQT_DBusDataValueList valueList = dataValue2.toTQValueList();
02817                                             TQT_DBusDataValueList::const_iterator it4;
02818                                             for (it4 = valueList.begin(); it4 != valueList.end(); ++it4) {
02819                                                 TQT_DBusData innerDataValue = *it4;
02820                                                 TQT_DBusDataValueList innerValueList = innerDataValue.toTQValueList();
02821                                                 TQT_DBusDataValueList::const_iterator it5;
02822                                                 TQ_UINT8 nm_v6address[16];
02823                                                 unsigned char nm_addr_ptr = 0;
02824                                                 memset(nm_v6address, 0, sizeof(TQ_UINT8)*16);
02825                                                 for (it5 = innerValueList.begin(); it5 != innerValueList.end(); ++it5) {
02826                                                     TQT_DBusData innerMostDataValue = *it5;
02827                                                     if (nm_addr_ptr < 16) {
02828                                                         nm_v6address[nm_addr_ptr] = innerMostDataValue.toByte();
02829                                                         nm_addr_ptr++;
02830                                                     }
02831                                                 }
02832                                                 connection->ipConfig.resolvers.append(TQHostAddress(nm_v6address));
02833                                             }
02834                                         }
02835                                         else if (keyValue.lower() == "dns-search") {
02836                                             TQT_DBusDataValueList valueList = dataValue2.toTQValueList();
02837                                             TQT_DBusDataValueList::const_iterator it4;
02838                                             for (it4 = valueList.begin(); it4 != valueList.end(); ++it4) {
02839                                                 TQT_DBusData innerDataValue = *it4;
02840                                                 TQT_DBusDataValueList innerValueList = innerDataValue.toTQValueList();
02841                                                 TQT_DBusDataValueList::const_iterator it5;
02842                                                 connection->ipConfig.searchDomains.append(TDENetworkSearchDomain(innerDataValue.toString(), true));
02843                                             }
02844                                         }
02845                                         else if (keyValue.lower() == "ignore-auto-dns") {
02846                                             bool nm_static_dns = dataValue2.toBool();
02847                                             if (nm_static_dns) {
02848                                                 connection->ipConfig.connectionFlags &= ~TDENetworkIPConfigurationFlags::IPV4DHCPDNS;
02849                                             }
02850                                             else {
02851                                                 connection->ipConfig.connectionFlags |= TDENetworkIPConfigurationFlags::IPV4DHCPDNS;
02852                                             }
02853                                         }
02854                                         else if (keyValue.lower() == "may-fail") {
02855                                             bool nm_may_fail = dataValue2.toBool();
02856                                             connection->requireIPV6 = !nm_may_fail;
02857                                         }
02858                                         else if (keyValue.lower() == "method") {
02859                                             TQString nm_method = dataValue2.toString().lower();
02860                                             if (nm_method == "auto") {
02861                                                 connection->ipConfig.connectionFlags |= TDENetworkIPConfigurationFlags::IPV6DHCPIP;
02862                                             }
02863                                             else if (nm_method == "manual") {
02864                                                 connection->ipConfig.connectionFlags &= ~TDENetworkIPConfigurationFlags::IPV6DHCPIP;
02865                                             }
02866                                             else if (nm_method == "link-local") {
02867                                                 connection->ipConfig.connectionFlags &= ~TDENetworkIPConfigurationFlags::IPV6LocalOnly;
02868                                             }
02869                                             else if (nm_method == "shared") {
02870                                                 connection->ipConfig.connectionFlags &= ~TDENetworkIPConfigurationFlags::IPV6StartConnectionSharingServer;
02871                                             }
02872                                             else if (nm_method == "ignore") {
02873                                                 connection->ipConfig.connectionFlags &= ~TDENetworkIPConfigurationFlags::IPV6Disabled;
02874                                             }
02875                                         }
02876                                         else if (keyValue.lower() == "ignore-auto-routes") {
02877                                             bool nm_static_routes = dataValue2.toBool();
02878                                             if (nm_static_routes) {
02879                                                 connection->ipConfig.connectionFlags &= ~TDENetworkIPConfigurationFlags::IPV6DHCPRoutes;
02880                                             }
02881                                             else {
02882                                                 connection->ipConfig.connectionFlags |= TDENetworkIPConfigurationFlags::IPV6DHCPRoutes;
02883                                             }
02884                                         }
02885                                         else if (keyValue.lower() == "never-default") {
02886                                             bool nm_can_default_route = !dataValue2.toBool();
02887                                             if (nm_can_default_route) {
02888                                                 connection->ipConfig.connectionFlags |= TDENetworkIPConfigurationFlags::IPV6MayUseAsDefaultRoute;
02889                                             }
02890                                             else {
02891                                                 connection->ipConfig.connectionFlags &= ~TDENetworkIPConfigurationFlags::IPV6MayUseAsDefaultRoute;
02892                                             }
02893                                         }
02894                                         else if (keyValue.lower() == "routes") {
02895                                             TQT_DBusDataValueList valueList = dataValue2.toTQValueList();
02896                                             TQT_DBusDataValueList::const_iterator it4;
02897                                             for (it4 = valueList.begin(); it4 != valueList.end(); ++it4) {
02898                                                 TQT_DBusData innerDataValue = *it4;
02899                                                 TQT_DBusDataValueList innerValueList = innerDataValue.toStruct();
02900                                                 TQT_DBusDataValueList::const_iterator it5;
02901                                                 TDENetworkSingleRouteConfiguration routeConfig;
02902                                                 // Address
02903                                                 TQT_DBusDataValueList innerMostValueList;
02904                                                 innerMostValueList = innerValueList[0].toTQValueList();
02905                                                 TQ_UINT8 nm_v6address[16];
02906                                                 unsigned char nm_addr_ptr = 0;
02907                                                 memset(nm_v6address, 0, sizeof(TQ_UINT8)*16);
02908                                                 for (it5 = innerMostValueList.begin(); it5 != innerMostValueList.end(); ++it5) {
02909                                                     TQT_DBusData innerMostDataValue = *it5;
02910                                                     if (nm_addr_ptr < 16) {
02911                                                         nm_v6address[nm_addr_ptr] = innerMostDataValue.toByte();
02912                                                         nm_addr_ptr++;
02913                                                     }
02914                                                 }
02915                                                 routeConfig.ipAddress = TQHostAddress(nm_v6address);
02916 
02917                                                 // Netmask
02918                                                 routeConfig.networkMask.fromCIDRMask(innerValueList[1].toUInt32(), true);
02919 
02920                                                 // Gateway
02921                                                 innerMostValueList = innerValueList[2].toTQValueList();
02922                                                 nm_addr_ptr = 0;
02923                                                 memset(nm_v6address, 0, sizeof(TQ_UINT8)*16);
02924                                                 for (it5 = innerMostValueList.begin(); it5 != innerMostValueList.end(); ++it5) {
02925                                                     TQT_DBusData innerMostDataValue = *it5;
02926                                                     if (nm_addr_ptr < 16) {
02927                                                         nm_v6address[nm_addr_ptr] = innerMostDataValue.toByte();
02928                                                         nm_addr_ptr++;
02929                                                     }
02930                                                 }
02931                                                 routeConfig.gateway = TQHostAddress(nm_v6address);
02932 
02933                                                 // Metric
02934                                                 routeConfig.metric = innerValueList[3].toUInt32();
02935 
02936                                                 routeConfig.valid = true;
02937                                                 connection->ipConfig.routeConfigurations.append(routeConfig);
02938                                             }
02939                                         }
02940                                         connection->ipConfig.valid = true;
02941                                     }
02942                                 }
02943                                 else {
02944                                     // FIXME
02945                                     // There are several advanced properties which appear to use string maps
02946                                     // For example, s390-options
02947                                     // Support should eventually be added for these, e.g. in a backend-specific Advanced tab somewhere
02948                                 }
02949                             }
02950                         }
02951                     }
02952 
02953                     // If the connection's MAC matches my MAC, or if the connection is not locked to any MAC address,
02954                     // or if this manager object is not locked to a device, then add this connection to the list
02955                     if ((deviceMACAddress == connection->lockedHWAddress) || (!connection->lockedHWAddress.isValid()) || (!deviceMACAddress.isValid())) {
02956                         loadConnectionAllowedValues(connection);
02957                         m_connectionList->append(connection);
02958                     }
02959                 }
02960                 else {
02961                     // Error!
02962                     PRINT_ERROR((error.name() + ": " + error.message()))
02963                 }
02964             }
02965         }
02966         else {
02967             // Error!
02968             PRINT_ERROR((error.name() + ": " + error.message()))
02969         }
02970         internalNetworkManagementEvent(TDENetworkGlobalEventType::ConnectionListChanged);
02971     }
02972 
02973     d->nonReentrantCallActive = false;
02974 }
02975 
02976 void TDENetworkConnectionManager_BackendNM::loadConnectionAllowedValues(TDENetworkConnection* connection) {
02977     if (connection) {
02978         // Insert all allowed EAP phase 2 methods
02979         connection->eapConfig.allowedPhase2NonEAPMethods.clear();
02980         connection->eapConfig.allowedPhase2NonEAPMethods.append(TDENetworkIEEE8021xType::MD5);
02981         connection->eapConfig.allowedPhase2NonEAPMethods.append(TDENetworkIEEE8021xType::MSCHAPV2);
02982         connection->eapConfig.allowedPhase2NonEAPMethods.append(TDENetworkIEEE8021xType::OTP);
02983         connection->eapConfig.allowedPhase2NonEAPMethods.append(TDENetworkIEEE8021xType::GTC);
02984         connection->eapConfig.allowedPhase2NonEAPMethods.append(TDENetworkIEEE8021xType::TLS);
02985 
02986         connection->eapConfig.allowedPhase2EAPMethods.clear();
02987         connection->eapConfig.allowedPhase2EAPMethods.append(TDENetworkIEEE8021xType::PAP);
02988         connection->eapConfig.allowedPhase2EAPMethods.append(TDENetworkIEEE8021xType::CHAP);
02989         connection->eapConfig.allowedPhase2EAPMethods.append(TDENetworkIEEE8021xType::MSCHAP);
02990         connection->eapConfig.allowedPhase2EAPMethods.append(TDENetworkIEEE8021xType::MSCHAPV2);
02991         connection->eapConfig.allowedPhase2EAPMethods.append(TDENetworkIEEE8021xType::OTP);
02992         connection->eapConfig.allowedPhase2EAPMethods.append(TDENetworkIEEE8021xType::GTC);
02993         connection->eapConfig.allowedPhase2EAPMethods.append(TDENetworkIEEE8021xType::TLS);
02994 
02995         connection->eapConfig.allowedValid = true;
02996     }
02997 }
02998 
02999 // NOTE
03000 // While this separate separate routine is needed to get the secrets, note that secrets must
03001 // be saved using the same connection map save routine that all other settings use above.
03002 bool TDENetworkConnectionManager_BackendNM::loadConnectionSecrets(TQString uuid) {
03003     TDENetworkConnection* connection = findConnectionByUUID(uuid);
03004     if (!connection) {
03005         PRINT_ERROR(TQString("Unable to locate connection with uuid '%1' in local database.  Did you run loadConnectionInformation() first?"));
03006         return false;
03007     }
03008     //TDEWiredEthernetConnection* ethernetConnection = dynamic_cast<TDEWiredEthernetConnection*>(connection);
03009     //TDEWiredInfinibandConnection* infinibandConnection = dynamic_cast<TDEWiredInfinibandConnection*>(connection);
03010     TDEWiFiConnection* wiFiConnection = dynamic_cast<TDEWiFiConnection*>(connection);
03011     TDEVPNConnection* vpnConnection = dynamic_cast<TDEVPNConnection*>(connection);
03012     //TDEWiMaxConnection* wiMaxConnection = dynamic_cast<TDEWiMaxConnection*>(connection);
03013     //TDEVLANConnection* vlanConnection = dynamic_cast<TDEVLANConnection*>(connection);
03014     //TDEOLPCMeshConnection* olpcMeshConnection = dynamic_cast<TDEVLANConnection*>(connection);
03015     //TDEBluetoothConnection* bluetoothConnection = dynamic_cast<TDEBluetoothConnection*>(connection);
03016     TDEModemConnection* modemConnection = dynamic_cast<TDEModemConnection*>(connection);
03017 
03018     bool ret = true;
03019     ret = ret && loadConnectionSecretsForGroup(uuid, "802-1x");
03020     if (wiFiConnection) {
03021         ret = ret && loadConnectionSecretsForGroup(uuid, "802-11-wireless-security");
03022     }
03023     if (vpnConnection) {
03024         ret = ret && loadConnectionSecretsForGroup(uuid, "vpn");
03025     }
03026     ret = ret && loadConnectionSecretsForGroup(uuid, "pppoe");
03027     if (modemConnection) {
03028         ret = ret && loadConnectionSecretsForGroup(uuid, "cdma");
03029         ret = ret && loadConnectionSecretsForGroup(uuid, "gsm");
03030     }
03031     return ret;
03032 }
03033 
03034 bool TDENetworkConnectionManager_BackendNM::loadConnectionSecretsForGroup(TQString uuid, TQString group) {
03035     TDENetworkConnection* connection = findConnectionByUUID(uuid);
03036     if (!connection) {
03037         PRINT_ERROR(TQString("Unable to locate connection with uuid '%1' in local database.  Did you run loadConnectionInformation() first?"));
03038         return false;
03039     }
03040     //TDEWiredEthernetConnection* ethernetConnection = dynamic_cast<TDEWiredEthernetConnection*>(connection);
03041     //TDEWiredInfinibandConnection* infinibandConnection = dynamic_cast<TDEWiredInfinibandConnection*>(connection);
03042     TDEWiFiConnection* wiFiConnection = dynamic_cast<TDEWiFiConnection*>(connection);
03043     TDEVPNConnection* vpnConnection = dynamic_cast<TDEVPNConnection*>(connection);
03044     //TDEWiMaxConnection* wiMaxConnection = dynamic_cast<TDEWiMaxConnection*>(connection);
03045     //TDEVLANConnection* vlanConnection = dynamic_cast<TDEVLANConnection*>(connection);
03046     //TDEOLPCMeshConnection* olpcMeshConnection = dynamic_cast<TDEVLANConnection*>(connection);
03047     //TDEBluetoothConnection* bluetoothConnection = dynamic_cast<TDEBluetoothConnection*>(connection);
03048     TDEModemConnection* modemConnection = dynamic_cast<TDEModemConnection*>(connection);
03049     TQT_DBusObjectPath existingConnection;
03050     TQT_DBusError error;
03051     bool ret;
03052     TQT_DBusTQStringDataMap connectionSecretsMap(TQT_DBusData::String);
03053     ret = d->m_networkManagerSettings->GetConnectionByUuid(uuid, existingConnection, error);
03054     if (ret) {
03055         // Obtain connection secrets from the path specified
03056         DBus::ConnectionSettingsInterface connectionSettings(NM_DBUS_SERVICE, existingConnection);
03057         connectionSettings.setConnection(TQT_DBusConnection::systemBus());
03058         connect(&connectionSettings, SIGNAL(GetSecretsAsyncReply(int, const TQT_DBusDataMap<TQString>&)), d, SLOT(processConnectionSettingsAsyncReply(int, const TQT_DBusDataMap<TQString>&)));
03059         int asyncCallID;
03060         ret = connectionSettings.GetSecretsAsync(asyncCallID, group, error);
03061         if (ret && error.isValid()) {
03062             ret = 0;
03063             PRINT_ERROR((error.name() + ": " + error.message()))
03064         }
03065         if (ret) {
03066             // Wait for the asynchronous call to return...
03067             d->nmConnectionSettingsAsyncCallWaiting[asyncCallID] = true;
03068             TQTimer nmCallTimeoutTimer;
03069             nmCallTimeoutTimer.start(NM_ASYNC_SECRETS_INTERACTION_TIMEOUT_MS, true);
03070             while (d->nmConnectionSettingsAsyncCallWaiting[asyncCallID]) {
03071                 tqApp->processEvents();
03072                 if (!nmCallTimeoutTimer.isActive()) {
03073                     PRINT_ERROR(TQString("DBUS asynchronous call timed out!"))
03074                     break;
03075                 }
03076             }
03077             connectionSecretsMap = d->nmConnectionSettingsAsyncSettingsResponse[asyncCallID];
03078             if (d->nmConnectionSettingsAsyncSettingsErrorResponse.contains(asyncCallID)) {
03079                 PRINT_ERROR((d->nmConnectionSettingsAsyncSettingsErrorResponse[asyncCallID].name() + ": " + d->nmConnectionSettingsAsyncSettingsErrorResponse[asyncCallID].message()));
03080                 d->nmConnectionSettingsAsyncSettingsErrorResponse.remove(asyncCallID);
03081             }
03082             d->nmConnectionSettingsAsyncCallWaiting.remove(asyncCallID);
03083             if (d->nmConnectionSettingsAsyncSettingsResponse.contains(asyncCallID)) {
03084                 d->nmConnectionSettingsAsyncSettingsResponse.remove(asyncCallID);
03085             }
03086 
03087 #ifdef DEBUG_NETWORK_MANAGER_COMMUNICATIONS
03088             printf("[network-manager comm debug] received DBUS object structure map follows:\n"); fflush(stdout);
03089             printDBUSObjectStructure(TQT_DBusData::fromStringKeyMap(connectionSecretsMap));
03090 #endif // DEBUG_NETWORK_MANAGER_COMMUNICATIONS
03091 
03092             // Parse settings
03093             TQT_DBusTQStringDataMap::const_iterator it2;
03094             for (it2 = connectionSecretsMap.begin(); it2 != connectionSecretsMap.end(); ++it2) {
03095                 TQString outerKeyValue = it2.key();
03096                 TQT_DBusData dataValue = it2.data();
03097 #ifdef DEBUG_NETWORK_MANAGER_COMMUNICATIONS
03098                 printf("[network-manager comm debug] [%s]\n", outerKeyValue.ascii()); fflush(stdout);
03099 #endif // DEBUG_NETWORK_MANAGER_COMMUNICATIONS
03100                 TQT_DBusTQStringDataMap nestedConnectionSettingsMap = dataValue.toStringKeyMap();
03101                 TQT_DBusTQStringDataMap::const_iterator it3;
03102                 for (it3 = nestedConnectionSettingsMap.begin(); it3 != nestedConnectionSettingsMap.end(); ++it3) {
03103                     TQString keyValue = it3.key();
03104                     TQT_DBusData dataValue = it3.data();
03105                     if (dataValue.type() != TQT_DBusData::Variant) {
03106 #ifdef DEBUG_NETWORK_MANAGER_COMMUNICATIONS
03107                         printf("[network-manager comm debug] %s = %s (type %d(%s))\n", keyValue.ascii(), dataValue.toString().ascii(), dataValue.type(), dataValue.typeName()); fflush(stdout);
03108 #endif // DEBUG_NETWORK_MANAGER_COMMUNICATIONS
03109                         // No NM settings are known which use this style
03110                     }
03111                     else {
03112                         TQT_DBusVariant dataValueVariant = dataValue.toVariant();
03113                         TQT_DBusData dataValue2 = dataValueVariant.value;
03114                         if (dataValue2.type() != TQT_DBusData::Variant) {
03115 #ifdef DEBUG_NETWORK_MANAGER_COMMUNICATIONS
03116                             printf("[network-manager comm debug] %s = %s (type %d(%s), signature %s)\n", keyValue.ascii(), dataValue2.toString().ascii(), dataValue2.type(), dataValue2.typeName(), dataValueVariant.signature.ascii()); fflush(stdout);
03117 #endif // DEBUG_NETWORK_MANAGER_COMMUNICATIONS
03118                             // Most NM settings use this style
03119                             if (outerKeyValue.lower() == "802-1x") {
03120                                 if (keyValue.lower() == "password") {
03121                                     connection->eapConfig.password = dataValue2.toString();
03122                                 }
03123                                 else if (keyValue.lower() == "password-raw") {
03124                                     TQT_DBusDataValueList valueList = dataValue2.toTQValueList();
03125                                     TQT_DBusDataValueList::const_iterator it4;
03126                                     int count=0;
03127                                     for (it4 = valueList.begin(); it4 != valueList.end(); ++it4) {
03128                                         TQT_DBusData innerDataValue = *it4;
03129                                         count++;
03130                                         connection->eapConfig.binaryPassword.resize(count+1);
03131                                         connection->eapConfig.binaryPassword[count] = innerDataValue.toByte();
03132                                     }
03133                                 }
03134                                 else if (keyValue.lower() == "private-key-password") {
03135                                     connection->eapConfig.privateKeyPassword = dataValue2.toString();
03136                                 }
03137                                 else if (keyValue.lower() == "phase2-private-key-password") {
03138                                     connection->eapConfig.phase2PrivateKeyPassword = dataValue2.toString();
03139                                 }
03140                                 connection->eapConfig.secretsValid = true;
03141                             }
03142                             if ((outerKeyValue.lower() == "802-11-wireless-security") && (wiFiConnection)) {
03143                                 if (keyValue.lower() == "wep-key0") {
03144                                     wiFiConnection->securitySettings.wepKey0 = dataValue2.toString();
03145                                     wiFiConnection->securitySettings.wepKeyType = nmWepKeyTypeToTDEWepKeyType(tdeWepKeyTypeToNMWepKeyType(wiFiConnection->securitySettings.wepKeyType), wiFiConnection->securitySettings.wepKey0);
03146                                 }
03147                                 else if (keyValue.lower() == "wep-key1") {
03148                                     wiFiConnection->securitySettings.wepKey1 = dataValue2.toString();
03149                                     wiFiConnection->securitySettings.wepKeyType = nmWepKeyTypeToTDEWepKeyType(tdeWepKeyTypeToNMWepKeyType(wiFiConnection->securitySettings.wepKeyType), wiFiConnection->securitySettings.wepKey1);
03150                                 }
03151                                 else if (keyValue.lower() == "wep-key2") {
03152                                     wiFiConnection->securitySettings.wepKey2 = dataValue2.toString();
03153                                     wiFiConnection->securitySettings.wepKeyType = nmWepKeyTypeToTDEWepKeyType(tdeWepKeyTypeToNMWepKeyType(wiFiConnection->securitySettings.wepKeyType), wiFiConnection->securitySettings.wepKey2);
03154                                 }
03155                                 else if (keyValue.lower() == "wep-key3") {
03156                                     wiFiConnection->securitySettings.wepKey3 = dataValue2.toString();
03157                                     wiFiConnection->securitySettings.wepKeyType = nmWepKeyTypeToTDEWepKeyType(tdeWepKeyTypeToNMWepKeyType(wiFiConnection->securitySettings.wepKeyType), wiFiConnection->securitySettings.wepKey3);
03158                                 }
03159                                 else if (keyValue.lower() == "psk") {
03160                                     wiFiConnection->securitySettings.psk = dataValue2.toString();
03161                                 }
03162                                 else if (keyValue.lower() == "eap-password") {
03163                                     wiFiConnection->securitySettings.leapPassword = dataValue2.toString();
03164                                 }
03165                             }
03166                             if ((outerKeyValue.lower() == "vpn") && (vpnConnection)) {
03167                                 if (keyValue.lower() == "secrets") {
03168                                     TQT_DBusTQStringDataMap nestedConnectionSettingsMap = dataValue2.toStringKeyMap();
03169                                     TQT_DBusTQStringDataMap::const_iterator it4;
03170                                     for (it4 = nestedConnectionSettingsMap.begin(); it4 != nestedConnectionSettingsMap.end(); ++it4) {
03171                                         vpnConnection->pluginSecrets.clear();
03172                                         TQString keyValue4 = it4.key();
03173                                         TQT_DBusData dataValue4 = it4.data();
03174                                         if (dataValue4.type() == TQT_DBusData::String) {
03175                                             vpnConnection->pluginSecrets[keyValue4] = dataValue4.toString();
03176                                         }
03177                                     }
03178                                     vpnConnection->secretsValid = true;
03179                                 }
03180                             }
03181                             if (outerKeyValue.lower() == "pppoe") {
03182                                 if (keyValue.lower() == "password") {
03183                                     connection->pppoeConfig.password = dataValue2.toString();
03184                                 }
03185                                 connection->pppoeConfig.secretsValid = true;
03186                             }
03187                             if (outerKeyValue.lower() == "cdma") {
03188                                 if (keyValue.lower() == "password") {
03189                                     modemConnection->cdmaConfig.password = dataValue2.toString();
03190                                 }
03191                                 modemConnection->cdmaConfig.secretsValid = true;
03192                             }
03193                             if (outerKeyValue.lower() == "gsm") {
03194                                 if (keyValue.lower() == "password") {
03195                                     modemConnection->gsmConfig.password = dataValue2.toString();
03196                                 }
03197                                 else if (keyValue.lower() == "pin") {
03198                                     modemConnection->gsmConfig.pin = dataValue2.toString();
03199                                 }
03200                                 modemConnection->gsmConfig.secretsValid = true;
03201                             }
03202                         }
03203                     }
03204                 }
03205             }
03206             return true;
03207         }
03208         else {
03209             PRINT_ERROR(TQString("Unable to load secrets for connection with uuid '%1'").arg(uuid))
03210             return false;
03211         }
03212     }
03213     else {
03214         PRINT_WARNING(TQString("connection for provided uuid '%1' was not found").arg(uuid));
03215         return false;
03216     }
03217 }
03218 
03219 bool TDENetworkConnectionManager_BackendNM::saveConnection(TDENetworkConnection* connection) {
03220     bool timed_out = false;
03221     bool command_failed = false;
03222 
03223     if (!connection) {
03224         PRINT_ERROR(TQString("connection cannot be NULL!"));
03225         return false;
03226     }
03227 
03228     // If the UUID is blank, generate a new UUID for this connection and also guarantee that it it truly unique
03229     if (connection->UUID == "") {
03230         bool unique = false;
03231         while (!unique) {
03232             connection->UUID = TQUuid::createUuid().toString();
03233             connection->UUID.replace("{", "");
03234             connection->UUID.replace("}", "");
03235             if (!findConnectionByUUID(connection->UUID)) {
03236                 unique = true;
03237             }
03238         }
03239     }
03240 
03241     // Find path for connection with specified UUID, if it exists
03242     // This is so that any settings that we are not aware of can be loaded now and preserved through the update operation
03243     TDEWiredEthernetConnection* ethernetConnection = dynamic_cast<TDEWiredEthernetConnection*>(connection);
03244     TDEWiredInfinibandConnection* infinibandConnection = dynamic_cast<TDEWiredInfinibandConnection*>(connection);
03245     TDEWiFiConnection* wiFiConnection = dynamic_cast<TDEWiFiConnection*>(connection);
03246     TDEVPNConnection* vpnConnection = dynamic_cast<TDEVPNConnection*>(connection);
03247     TDEWiMaxConnection* wiMaxConnection = dynamic_cast<TDEWiMaxConnection*>(connection);
03248     TDEVLANConnection* vlanConnection = dynamic_cast<TDEVLANConnection*>(connection);
03249     TDEOLPCMeshConnection* olpcMeshConnection = dynamic_cast<TDEOLPCMeshConnection*>(connection);
03250     TDEBluetoothConnection* bluetoothConnection = dynamic_cast<TDEBluetoothConnection*>(connection);
03251     TDEModemConnection* modemConnection = dynamic_cast<TDEModemConnection*>(connection);
03252     TQT_DBusObjectPath existingConnection;
03253     TQT_DBusError error;
03254     bool ret;
03255     bool existing;
03256     TQT_DBusTQStringDataMap connectionSettingsMap(TQT_DBusData::String);
03257     existing = false;
03258     ret = d->m_networkManagerSettings->GetConnectionByUuid(connection->UUID, existingConnection, error);
03259     if (ret) {
03260         // Obtain connection settings from the path specified
03261         DBus::ConnectionSettingsInterface connectionSettings(NM_DBUS_SERVICE, existingConnection);
03262         connectionSettings.setConnection(TQT_DBusConnection::systemBus());
03263         connect(&connectionSettings, SIGNAL(GetSettingsAsyncReply(int, const TQT_DBusDataMap<TQString>&)), d, SLOT(processConnectionSettingsAsyncReply(int, const TQT_DBusDataMap<TQString>&)));
03264         int asyncCallID;
03265         ret = connectionSettings.GetSettingsAsync(asyncCallID, error);
03266         if (ret && error.isValid()) {
03267             ret = 0;
03268             PRINT_ERROR((error.name() + ": " + error.message()))
03269         }
03270         if (ret) {
03271             // Wait for the asynchronous call to return...
03272             d->nmConnectionSettingsAsyncCallWaiting[asyncCallID] = true;
03273             TQTimer nmCallTimeoutTimer;
03274             nmCallTimeoutTimer.start(NM_ASYNC_TIMEOUT_MS, true);
03275             while (d->nmConnectionSettingsAsyncCallWaiting[asyncCallID]) {
03276                 tqApp->processEvents();
03277                 if (!nmCallTimeoutTimer.isActive()) {
03278                     PRINT_ERROR(TQString("DBUS asynchronous call timed out!"))
03279                     timed_out = true;
03280                     break;
03281                 }
03282             }
03283             connectionSettingsMap = d->nmConnectionSettingsAsyncSettingsResponse[asyncCallID];
03284             if (d->nmConnectionSettingsAsyncSettingsErrorResponse.contains(asyncCallID)) {
03285                 PRINT_ERROR((d->nmConnectionSettingsAsyncSettingsErrorResponse[asyncCallID].name() + ": " + d->nmConnectionSettingsAsyncSettingsErrorResponse[asyncCallID].message()));
03286                 d->nmConnectionSettingsAsyncSettingsErrorResponse.remove(asyncCallID);
03287             }
03288             d->nmConnectionSettingsAsyncCallWaiting.remove(asyncCallID);
03289             if (d->nmConnectionSettingsAsyncSettingsResponse.contains(asyncCallID)) {
03290                 d->nmConnectionSettingsAsyncSettingsResponse.remove(asyncCallID);
03291             }
03292             existing = true;
03293         }
03294     }
03295 
03296     // Create and/or update settings map from provided connection information
03297     // We start at the outermost layer and work our way inwards, in a structure which should match the parser in loadConnectionInformation() very closely
03298     bool groupValid;
03299     TQT_DBusData dbusData;
03300     TQT_DBusData innerDbusData;
03301     TQMap<TQString, TQT_DBusData> outerMap = connectionSettingsMap.toTQMap();
03302     {
03303         groupValid = false;
03304         dbusData = outerMap["connection"];
03305         {
03306             TQMap<TQString, TQT_DBusData> settingsMap = dbusData.toStringKeyMap().toTQMap();
03307             {
03308                 settingsMap["id"] = (TQT_DBusData::fromString(connection->friendlyName)).getAsVariantData();
03309                 {
03310                     TQString type;
03311                     if (ethernetConnection) type = "802-3-ethernet";
03312                     else if (infinibandConnection) type = "infiniband";
03313                     else if (wiFiConnection) type = "802-11-wireless";
03314                     else if (vpnConnection) type = "vpn";
03315                     else if (wiMaxConnection) type = "wimax";
03316                     else if (vlanConnection) type = "vlan";
03317                     else if (olpcMeshConnection) type = "802-11-olpc-mesh";
03318                     else if (bluetoothConnection) type = "bluetooth";
03319                     else if (modemConnection) {
03320                         if (modemConnection->type == TDEModemConnectionType::CDMA) {
03321                             type = "cdma";
03322                         }
03323                         else if (modemConnection->type == TDEModemConnectionType::GSM) {
03324                             type = "gsm";
03325                         }
03326                     }
03327                     if (!type.isNull()) settingsMap["type"] = (TQT_DBusData::fromString(type)).getAsVariantData();
03328                 }
03329                 settingsMap["uuid"] = (TQT_DBusData::fromString(connection->UUID)).getAsVariantData();
03330                 {
03331                     TQT_DBusDataValueList valueList;
03332                     {
03333                         for (TQStringList::Iterator it = connection->authorizedUsers.begin(); it != connection->authorizedUsers.end(); ++it) {
03334                             TQString assembledString = TQString("user:%1:").arg(*it);
03335                             valueList.append(TQT_DBusData::fromString(assembledString));
03336                         }
03337                     }
03338                     if (valueList.count() > 0) settingsMap["permissions"] = (TQT_DBusData::fromTQValueList(valueList)).getAsVariantData();
03339                     else settingsMap.remove("permissions");
03340                 }
03341                 settingsMap["autoconnect"] = (TQT_DBusData::fromBool(connection->autoConnect)).getAsVariantData();
03342                 settingsMap["read-only"] = (TQT_DBusData::fromBool(connection->readOnly)).getAsVariantData();
03343                 UPDATE_STRING_SETTING_IF_VALID(connection->masterConnectionUUID, "master", settingsMap)
03344                 {
03345                     TQString slaveType = tdeSlaveTypeToNMSlaveType(connection->slaveType);
03346                     if (slaveType != "") settingsMap["slave-type"] = (TQT_DBusData::fromString(slaveType)).getAsVariantData();
03347                     else settingsMap.remove("slave-type");
03348                 }
03349                 // settingsMap["timestamp"] = (TQT_DBusData::fromUInt64(connection->lastKnownConnection.toTime_t())).getAsVariantData();    // Probably read-only to us
03350             }
03351             dbusData = TQT_DBusData::fromStringKeyMap(TQT_DBusDataMap<TQString>(settingsMap));
03352             groupValid = (settingsMap.count() > 0);
03353         }
03354         if (groupValid) outerMap.insert("connection", dbusData, true); else outerMap.remove("connection");
03355 
03356         groupValid = false;
03357         dbusData = outerMap["802-1x"];
03358         {
03359             TQMap<TQString, TQT_DBusData> settingsMap = dbusData.toStringKeyMap().toTQMap();
03360             {
03361                 if (connection->eapConfig.valid) {
03362                     TQT_DBusDataValueList valueList;
03363                     {
03364                         // WARNING: The exact order of the data in the list is critical, therefore extreme caution should be exercised when modifying the code below!
03365                         // EAP type
03366                         valueList.append(TQT_DBusData::fromString(tdeEAPTypeToNMEAPType(connection->eapConfig.type)));
03367                     }
03368                     settingsMap["eap"] = (TQT_DBusData::fromTQValueList(valueList)).getAsVariantData();
03369                 }
03370                 else {
03371                     settingsMap.remove("eap");
03372                 }
03373                 if (connection->eapConfig.valid) {
03374                     UPDATE_STRING_SETTING_IF_VALID(connection->eapConfig.userName, "identity", settingsMap)
03375                     UPDATE_STRING_SETTING_IF_VALID(connection->eapConfig.anonymousUserName, "anonymous-identity", settingsMap)
03376                     UPDATE_STRING_SETTING_IF_VALID(connection->eapConfig.pacFileName, "pac-file", settingsMap)
03377                 }
03378                 else {
03379                     settingsMap.remove("identity");
03380                     settingsMap.remove("anonymous-identity");
03381                     settingsMap.remove("pac-file");
03382                 }
03383                 if (connection->eapConfig.valid) {
03384                     TQT_DBusDataValueList valueList;
03385                     {
03386                         unsigned int count;
03387                         for (count=0; count<connection->eapConfig.caCertificate.count(); count++) {
03388                             valueList.append(TQT_DBusData::fromByte(connection->eapConfig.caCertificate[count]));
03389                         }
03390                     }
03391                     if (valueList.count() > 0) settingsMap["ca-cert"] = (TQT_DBusData::fromTQValueList(valueList)).getAsVariantData();
03392                     else settingsMap.remove("ca-cert");
03393                 }
03394                 else {
03395                     settingsMap.remove("ca-cert");
03396                 }
03397                 if (connection->eapConfig.valid) {
03398                     UPDATE_STRING_SETTING_IF_VALID(connection->eapConfig.additionalCAFilesPath, "ca-path", settingsMap)
03399                     UPDATE_STRING_SETTING_IF_VALID(connection->eapConfig.authServerCertSubjectMatch, "subject-match", settingsMap)
03400                 }
03401                 else {
03402                     settingsMap.remove("ca-path");
03403                     settingsMap.remove("subject-match");
03404                 }
03405                 if (connection->eapConfig.valid) {
03406                     TQT_DBusDataValueList valueList;
03407                     {
03408                         for (TQStringList::Iterator it = connection->eapConfig.alternateAuthServerCertSubjectMatch.begin(); it != connection->eapConfig.alternateAuthServerCertSubjectMatch.end(); ++it) {
03409                             valueList.append(TQT_DBusData::fromString(*it));
03410                         }
03411                     }
03412                     if (valueList.count() > 0) settingsMap["altsubject-matches"] = (TQT_DBusData::fromTQValueList(valueList)).getAsVariantData();
03413                     else settingsMap.remove("altsubject-matches");
03414                 }
03415                 else {
03416                     settingsMap.remove("altsubject-matches");
03417                 }
03418                 if (connection->eapConfig.valid) {
03419                     TQT_DBusDataValueList valueList;
03420                     {
03421                         unsigned int count;
03422                         for (count=0; count<connection->eapConfig.clientCertificate.count(); count++) {
03423                             valueList.append(TQT_DBusData::fromByte(connection->eapConfig.clientCertificate[count]));
03424                         }
03425                     }
03426                     if (valueList.count() > 0) settingsMap["client-cert"] = (TQT_DBusData::fromTQValueList(valueList)).getAsVariantData();
03427                     else settingsMap.remove("client-cert");
03428                 }
03429                 else {
03430                     settingsMap.remove("client-cert");
03431                 }
03432                 if (connection->eapConfig.valid) {
03433                     UPDATE_STRING_SETTING_IF_VALID(connection->eapConfig.forcePEAPVersion, "phase1-peapver", settingsMap)
03434                     UPDATE_STRING_SETTING_IF_VALID(connection->eapConfig.forcePEAPLabel, "phase1-peaplabel", settingsMap)
03435                     UPDATE_STRING_SETTING_IF_VALID(tdeEAPFastFlagsToNMEAPFastFlags(connection->eapConfig.fastProvisioningFlags), "phase1-fast-provisioning", settingsMap)
03436                 }
03437                 else {
03438                     settingsMap.remove("phase1-peapver");
03439                     settingsMap.remove("phase1-peaplabel");
03440                     settingsMap.remove("phase1-fast-provisioning");
03441                 }
03442                 if (connection->eapConfig.valid) {
03443                     settingsMap["phase2-auth"] = (TQT_DBusData::fromString(tdeEAPTypeToNMEAPType(connection->eapConfig.phase2NonEAPAuthMethod))).getAsVariantData();
03444                     settingsMap["phase2-autheap"] = (TQT_DBusData::fromString(tdeEAPTypeToNMEAPType(connection->eapConfig.phase2EAPAuthMethod))).getAsVariantData();
03445                 }
03446                 else {
03447                     settingsMap.remove("phase2-auth");
03448                     settingsMap.remove("phase2-autheap");
03449                 }
03450                 if (connection->eapConfig.valid) {
03451                     TQT_DBusDataValueList valueList;
03452                     {
03453                         unsigned int count;
03454                         for (count=0; count<connection->eapConfig.phase2CaCertificate.count(); count++) {
03455                             valueList.append(TQT_DBusData::fromByte(connection->eapConfig.phase2CaCertificate[count]));
03456                         }
03457                     }
03458                     if (valueList.count() > 0) settingsMap["phase2-ca-cert"] = (TQT_DBusData::fromTQValueList(valueList)).getAsVariantData();
03459                     else settingsMap.remove("phase2-ca-cert");
03460                 }
03461                 else {
03462                     settingsMap.remove("phase2-ca-cert");
03463                 }
03464                 if (connection->eapConfig.valid) {
03465                     UPDATE_STRING_SETTING_IF_VALID(connection->eapConfig.phase2CaFilesPath, "phase2-ca-path", settingsMap)
03466                     UPDATE_STRING_SETTING_IF_VALID(connection->eapConfig.phase2AuthServerCertSubjectMatch, "phase2-subject-match", settingsMap)
03467                 }
03468                 else {
03469                     settingsMap.remove("phase2-ca-path");
03470                     settingsMap.remove("phase2-subject-match");
03471                 }
03472                 if (connection->eapConfig.valid) {
03473                     TQT_DBusDataValueList valueList;
03474                     {
03475                         for (TQStringList::Iterator it = connection->eapConfig.phase2AlternateAuthServerCertSubjectMatch.begin(); it != connection->eapConfig.phase2AlternateAuthServerCertSubjectMatch.end(); ++it) {
03476                             valueList.append(TQT_DBusData::fromString(*it));
03477                         }
03478                     }
03479                     if (valueList.count() > 0) settingsMap["phase2-altsubject-matches"] = (TQT_DBusData::fromTQValueList(valueList)).getAsVariantData();
03480                     else settingsMap.remove("phase2-altsubject-matches");
03481                 }
03482                 else {
03483                     settingsMap.remove("phase2-altsubject-matches");
03484                 }
03485                 if (connection->eapConfig.valid) {
03486                     TQT_DBusDataValueList valueList;
03487                     {
03488                         unsigned int count;
03489                         for (count=0; count<connection->eapConfig.phase2ClientCertificate.count(); count++) {
03490                             valueList.append(TQT_DBusData::fromByte(connection->eapConfig.phase2ClientCertificate[count]));
03491                         }
03492                     }
03493                     if (valueList.count() > 0) settingsMap["phase2-client-cert"] = (TQT_DBusData::fromTQValueList(valueList)).getAsVariantData();
03494                     else settingsMap.remove("phase2-client-cert");
03495                 }
03496                 else {
03497                     settingsMap.remove("phase2-client-cert");
03498                 }
03499                 if (connection->eapConfig.valid) {
03500                     settingsMap["password-flags"] = (TQT_DBusData::fromUInt32(tdePasswordFlagsToNMPasswordFlags(connection->eapConfig.passwordFlags))).getAsVariantData();
03501                     settingsMap["password-raw-flags"] = (TQT_DBusData::fromUInt32(tdePasswordFlagsToNMPasswordFlags(connection->eapConfig.binaryPasswordFlags))).getAsVariantData();
03502                 }
03503                 else {
03504                     settingsMap.remove("password-flags");
03505                     settingsMap.remove("password-raw-flags");
03506                 }
03507                 if (connection->eapConfig.valid) {
03508                     TQT_DBusDataValueList valueList;
03509                     {
03510                         unsigned int count;
03511                         for (count=0; count<connection->eapConfig.privateKey.count(); count++) {
03512                             valueList.append(TQT_DBusData::fromByte(connection->eapConfig.privateKey[count]));
03513                         }
03514                     }
03515                     if (valueList.count() > 0) settingsMap["private-key"] = (TQT_DBusData::fromTQValueList(valueList)).getAsVariantData();
03516                     else settingsMap.remove("private-key");
03517                 }
03518                 else {
03519                     settingsMap.remove("private-key");
03520                 }
03521                 if (connection->eapConfig.valid) {
03522                     settingsMap["private-key-password-flags"] = (TQT_DBusData::fromUInt32(tdePasswordFlagsToNMPasswordFlags(connection->eapConfig.privateKeyPasswordFlags))).getAsVariantData();
03523                 }
03524                 else {
03525                     settingsMap.remove("private-key-password-flags");
03526                 }
03527                 if (connection->eapConfig.valid) {
03528                     TQT_DBusDataValueList valueList;
03529                     {
03530                         unsigned int count;
03531                         for (count=0; count<connection->eapConfig.phase2PrivateKey.count(); count++) {
03532                             valueList.append(TQT_DBusData::fromByte(connection->eapConfig.phase2PrivateKey[count]));
03533                         }
03534                     }
03535                     if (valueList.count() > 0) settingsMap["phase2-private-key"] = (TQT_DBusData::fromTQValueList(valueList)).getAsVariantData();
03536                     else settingsMap.remove("phase2-private-key");
03537                 }
03538                 else {
03539                     settingsMap.remove("phase2-private-key");
03540                 }
03541                 if (connection->eapConfig.valid) {
03542                     settingsMap["phase2-private-key-password-flags"] = (TQT_DBusData::fromUInt32(tdePasswordFlagsToNMPasswordFlags(connection->eapConfig.phase2PrivateKeyPasswordFlags))).getAsVariantData();
03543                 }
03544                 else {
03545                     settingsMap.remove("phase2-private-key-password-flags");
03546                 }
03547                 if (connection->eapConfig.valid) {
03548                     settingsMap["system-ca-certs"] = (TQT_DBusData::fromBool(connection->eapConfig.forceSystemCaCertificates)).getAsVariantData();
03549                 }
03550                 else {
03551                     settingsMap.remove("system-ca-certs");
03552                 }
03553                 if (connection->eapConfig.secretsValid) {
03554                     settingsMap["password"] = (TQT_DBusData::fromString(connection->eapConfig.password)).getAsVariantData();
03555                 }
03556                 else {
03557                     settingsMap.remove("password");
03558                 }
03559                 if (connection->eapConfig.valid) {
03560                     TQT_DBusDataValueList valueList;
03561                     {
03562                         unsigned int count;
03563                         for (count=0; count<connection->eapConfig.binaryPassword.count(); count++) {
03564                             valueList.append(TQT_DBusData::fromByte(connection->eapConfig.binaryPassword[count]));
03565                         }
03566                     }
03567                     if (valueList.count() > 0) settingsMap["password-raw"] = (TQT_DBusData::fromTQValueList(valueList)).getAsVariantData();
03568                     else settingsMap.remove("password-raw");
03569                 }
03570                 else {
03571                     settingsMap.remove("password-raw");
03572                 }
03573                 if (connection->eapConfig.secretsValid) {
03574                     settingsMap["private-key-password"] = (TQT_DBusData::fromString(connection->eapConfig.privateKeyPassword)).getAsVariantData();
03575                     settingsMap["phase2-private-key-password"] = (TQT_DBusData::fromString(connection->eapConfig.phase2PrivateKeyPassword)).getAsVariantData();
03576                 }
03577                 else {
03578                     settingsMap.remove("private-key-password");
03579                     settingsMap.remove("phase2-private-key-password");
03580                 }
03581             }
03582             dbusData = TQT_DBusData::fromStringKeyMap(TQT_DBusDataMap<TQString>(settingsMap));
03583             groupValid = (settingsMap.count() > 0);
03584         }
03585         if (groupValid) outerMap.insert("802-1x", dbusData, true); else outerMap.remove("802-1x");
03586 
03587         groupValid = false;
03588         dbusData = outerMap["802-3-ethernet"];
03589         if (ethernetConnection) {
03590             TQMap<TQString, TQT_DBusData> settingsMap = dbusData.toStringKeyMap().toTQMap();
03591             {
03592                 settingsMap["duplex"] = (TQT_DBusData::fromString((connection->fullDuplex)?"full":"half")).getAsVariantData();
03593                 if (connection->lockedHWAddress.isValid()) {
03594                     TDENetworkByteList address = connection->lockedHWAddress.address();
03595                     TQT_DBusDataValueList valueList;
03596                     TDENetworkByteList::iterator it;
03597                     for (it = address.begin(); it != address.end(); ++it) {
03598                         TQT_DBusData innerDataValue = TQT_DBusData::fromByte(*it);
03599                         valueList.append(innerDataValue);
03600                     }
03601                     TQT_DBusData nmHWAddress = TQT_DBusData::fromTQValueList(valueList);
03602                     settingsMap["mac-address"] = (nmHWAddress).getAsVariantData();
03603                 }
03604                 else {
03605                     settingsMap.remove("mac-address");
03606                 }
03607                 if (connection->manualHWAddress.isValid()) {
03608                     TDENetworkByteList address = connection->manualHWAddress.address();
03609                     TQT_DBusDataValueList valueList;
03610                     TDENetworkByteList::iterator it;
03611                     for (it = address.begin(); it != address.end(); ++it) {
03612                         TQT_DBusData innerDataValue = TQT_DBusData::fromByte(*it);
03613                         valueList.append(innerDataValue);
03614                     }
03615                     TQT_DBusData nmHWAddress = TQT_DBusData::fromTQValueList(valueList);
03616                     settingsMap["cloned-mac-address"] = (nmHWAddress).getAsVariantData();
03617                 }
03618                 else {
03619                     settingsMap.remove("cloned-mac-address");
03620                 }
03621                 if (connection->mtu > 0) {
03622                     settingsMap["mtu"] = (TQT_DBusData::fromUInt32(connection->mtu)).getAsVariantData();
03623                 }
03624                 else {
03625                     settingsMap.remove("mtu");
03626                 }
03627             }
03628             dbusData = TQT_DBusData::fromStringKeyMap(TQT_DBusDataMap<TQString>(settingsMap));
03629             groupValid = (settingsMap.count() > 0);
03630         }
03631         if (groupValid) outerMap.insert("802-3-ethernet", dbusData, true); else outerMap.remove("802-3-ethernet");
03632 
03633         groupValid = false;
03634         dbusData = outerMap["infiniband"];
03635         if (infinibandConnection) {
03636             TQMap<TQString, TQT_DBusData> settingsMap = dbusData.toStringKeyMap().toTQMap();
03637             {
03638                 if (connection->lockedHWAddress.isValid()) {
03639                     TDENetworkByteList address = connection->lockedHWAddress.address();
03640                     TQT_DBusDataValueList valueList;
03641                     TDENetworkByteList::iterator it;
03642                     for (it = address.begin(); it != address.end(); ++it) {
03643                         TQT_DBusData innerDataValue = TQT_DBusData::fromByte(*it);
03644                         valueList.append(innerDataValue);
03645                     }
03646                     TQT_DBusData nmHWAddress = TQT_DBusData::fromTQValueList(valueList);
03647                     settingsMap["mac-address"] = (nmHWAddress).getAsVariantData();
03648                 }
03649                 else {
03650                     settingsMap.remove("mac-address");
03651                 }
03652                 if (connection->mtu > 0) {
03653                     settingsMap["mtu"] = (TQT_DBusData::fromUInt32(connection->mtu)).getAsVariantData();
03654                 }
03655                 else {
03656                     settingsMap.remove("mtu");
03657                 }
03658                 UPDATE_STRING_SETTING_IF_VALID(tdeIBTransportToNMIBTransport(infinibandConnection->transportMode), "transport-mode", settingsMap)
03659             }
03660             dbusData = TQT_DBusData::fromStringKeyMap(TQT_DBusDataMap<TQString>(settingsMap));
03661             groupValid = (settingsMap.count() > 0);
03662         }
03663         if (groupValid) outerMap.insert("infiniband", dbusData, true); else outerMap.remove("infiniband");
03664 
03665         groupValid = false;
03666         dbusData = outerMap["802-11-wireless"];
03667         if (wiFiConnection) {
03668             TQMap<TQString, TQT_DBusData> settingsMap = dbusData.toStringKeyMap().toTQMap();
03669             {
03670                 {
03671                     unsigned int i;
03672                     TQT_DBusDataValueList valueList;
03673                     for (i=0; i<wiFiConnection->SSID.count(); i++) {
03674                         TQT_DBusData innerDataValue = TQT_DBusData::fromByte(wiFiConnection->SSID[i]);
03675                         valueList.append(innerDataValue);
03676                     }
03677                     settingsMap["ssid"] = (TQT_DBusData::fromTQValueList(valueList)).getAsVariantData();
03678                 }
03679                 if (connection->lockedHWAddress.isValid()) {
03680                     TDENetworkByteList address = connection->lockedHWAddress.address();
03681                     TQT_DBusDataValueList valueList;
03682                     TDENetworkByteList::iterator it;
03683                     for (it = address.begin(); it != address.end(); ++it) {
03684                         TQT_DBusData innerDataValue = TQT_DBusData::fromByte(*it);
03685                         valueList.append(innerDataValue);
03686                     }
03687                     TQT_DBusData nmHWAddress = TQT_DBusData::fromTQValueList(valueList);
03688                     settingsMap["mac-address"] = (nmHWAddress).getAsVariantData();
03689                 }
03690                 else {
03691                     settingsMap.remove("mac-address");
03692                 }
03693                 if (connection->manualHWAddress.isValid()) {
03694                     TDENetworkByteList address = connection->manualHWAddress.address();
03695                     TQT_DBusDataValueList valueList;
03696                     TDENetworkByteList::iterator it;
03697                     for (it = address.begin(); it != address.end(); ++it) {
03698                         TQT_DBusData innerDataValue = TQT_DBusData::fromByte(*it);
03699                         valueList.append(innerDataValue);
03700                     }
03701                     TQT_DBusData nmHWAddress = TQT_DBusData::fromTQValueList(valueList);
03702                     settingsMap["cloned-mac-address"] = (nmHWAddress).getAsVariantData();
03703                 }
03704                 else {
03705                     settingsMap.remove("cloned-mac-address");
03706                 }
03707                 if (connection->mtu > 0) {
03708                     settingsMap["mtu"] = (TQT_DBusData::fromUInt32(connection->mtu)).getAsVariantData();
03709                 }
03710                 else {
03711                     settingsMap.remove("mtu");
03712                 }
03713                 UPDATE_STRING_SETTING_IF_VALID(tdeWiFiModeToNMWiFiMode(wiFiConnection->operatingMode), "mode", settingsMap)
03714                 UPDATE_STRING_SETTING_IF_VALID(tdeWiFiFrequencyBandToNMWiFiFrequencyBand(wiFiConnection->bandRestriction), "band", settingsMap)
03715                 if (wiFiConnection->channelRestriction > 0) {
03716                     settingsMap["channel"] = (TQT_DBusData::fromUInt32(wiFiConnection->channelRestriction)).getAsVariantData();
03717                 }
03718                 else {
03719                     settingsMap.remove("channel");
03720                 }
03721                 if (wiFiConnection->bitRateRestriction > 0) {
03722                     settingsMap["rate"] = (TQT_DBusData::fromUInt32(wiFiConnection->bitRateRestriction/1000)).getAsVariantData();
03723                 }
03724                 else {
03725                     settingsMap.remove("rate");
03726                 }
03727                 if (wiFiConnection->powerRestriction > 0) {
03728                     settingsMap["tx-power"] = (TQT_DBusData::fromUInt32(wiFiConnection->powerRestriction)).getAsVariantData();
03729                 }
03730                 else {
03731                     settingsMap.remove("tx-power");
03732                 }
03733                 if (wiFiConnection->accessPointRestriction.isValid()) {
03734                     TDENetworkByteList address = wiFiConnection->accessPointRestriction.address();
03735                     TQT_DBusDataValueList valueList;
03736                     TDENetworkByteList::iterator it;
03737                     for (it = address.begin(); it != address.end(); ++it) {
03738                         TQT_DBusData innerDataValue = TQT_DBusData::fromByte(*it);
03739                         valueList.append(innerDataValue);
03740                     }
03741                     TQT_DBusData nmHWAddress = TQT_DBusData::fromTQValueList(valueList);
03742                     settingsMap["bssid"] = (nmHWAddress).getAsVariantData();
03743                 }
03744                 else {
03745                     settingsMap.remove("bssid");
03746                 }
03747                 {
03748                     TQT_DBusDataValueList valueList;
03749                     TDEMACAddressList::iterator it;
03750                     for (it = wiFiConnection->blacklistedBSSIDs.begin(); it != wiFiConnection->blacklistedBSSIDs.end(); ++it) {
03751                         valueList.append(TQT_DBusData::fromString((*it).toString()));
03752                     }
03753                     if (valueList.count() > 0) settingsMap["mac-address-blacklist"] = (TQT_DBusData::fromTQValueList(valueList)).getAsVariantData();
03754                 }
03755                 {
03756                     TQT_DBusDataValueList valueList;
03757                     TDEMACAddressList::iterator it;
03758                     for (it = wiFiConnection->heardBSSIDs.begin(); it != wiFiConnection->heardBSSIDs.end(); ++it) {
03759                         valueList.append(TQT_DBusData::fromString((*it).toString()));
03760                     }
03761                     if (valueList.count() > 0) settingsMap["seen-bssids"] = (TQT_DBusData::fromTQValueList(valueList)).getAsVariantData();
03762                 }
03763                 {
03764                     if (wiFiConnection->securityRequired) {
03765                         settingsMap["security"] = (TQT_DBusData::fromString("802-11-wireless-security")).getAsVariantData();
03766                     }
03767                     else {
03768                         settingsMap.remove("security");
03769                     }
03770                 }
03771                 {
03772                     if (wiFiConnection->isHiddenNetwork) {
03773                         settingsMap["hidden"] = (TQT_DBusData::fromBool(true)).getAsVariantData();
03774                     }
03775                     else {
03776                         settingsMap.remove("hidden");
03777                     }
03778                 }
03779             }
03780             dbusData = TQT_DBusData::fromStringKeyMap(TQT_DBusDataMap<TQString>(settingsMap));
03781             groupValid = (settingsMap.count() > 0);
03782         }
03783         if (groupValid) outerMap.insert("802-11-wireless", dbusData, true); else outerMap.remove("802-11-wireless");
03784 
03785         groupValid = false;
03786         dbusData = outerMap["802-11-wireless-security"];
03787         if (wiFiConnection) {
03788             TQMap<TQString, TQT_DBusData> settingsMap = dbusData.toStringKeyMap().toTQMap();
03789             {
03790                 if (wiFiConnection->securityRequired) {
03791                     if (wiFiConnection->securityRequired) {
03792                         settingsMap["key-mgmt"] = (TQT_DBusData::fromString(tdeWiFiKeyTypeToNMWiFiKeyType(wiFiConnection->securitySettings.keyType))).getAsVariantData();
03793                     }
03794                     if (wiFiConnection->securitySettings.wepKeyIndex > 0) {
03795                         settingsMap["wep-tx-keyidx"] = (TQT_DBusData::fromUInt32(wiFiConnection->securitySettings.wepKeyIndex)).getAsVariantData();
03796                     }
03797                     else {
03798                         settingsMap.remove("wep-tx-keyidx");
03799                     }
03800                     UPDATE_STRING_SETTING_IF_VALID(tdeWiFiAuthTypeToNMWiFiAuthType(wiFiConnection->securitySettings.authType), "auth-alg", settingsMap)
03801                     {
03802                         TQT_DBusDataValueList valueList;
03803                         {
03804                             TQStringList strings = tdeWiFiWPAVersionToNMWiFiWPAVersion(wiFiConnection->securitySettings.wpaVersion);
03805                             for (TQStringList::Iterator it = strings.begin(); it != strings.end(); ++it) {
03806                                 valueList.append(TQT_DBusData::fromString(*it));
03807                             }
03808                         }
03809                         if (valueList.count() > 0) settingsMap["proto"] = (TQT_DBusData::fromTQValueList(valueList)).getAsVariantData();
03810                         else settingsMap.remove("proto");
03811                     }
03812                     {
03813                         TQT_DBusDataValueList valueList;
03814                         {
03815                             if (wiFiConnection->securitySettings.allowedPairWiseCiphers.contains(TDENetworkWiFiConnectionCipher::Any)) {
03816                                 if (!wiFiConnection->securitySettings.allowedPairWiseCiphers.contains(TDENetworkWiFiConnectionCipher::CipherWEP40)) wiFiConnection->securitySettings.allowedPairWiseCiphers.append(TDENetworkWiFiConnectionCipher::CipherWEP40);
03817                                 if (!wiFiConnection->securitySettings.allowedPairWiseCiphers.contains(TDENetworkWiFiConnectionCipher::CipherWEP104)) wiFiConnection->securitySettings.allowedPairWiseCiphers.append(TDENetworkWiFiConnectionCipher::CipherWEP104);
03818                                 if (!wiFiConnection->securitySettings.allowedPairWiseCiphers.contains(TDENetworkWiFiConnectionCipher::CipherTKIP)) wiFiConnection->securitySettings.allowedPairWiseCiphers.append(TDENetworkWiFiConnectionCipher::CipherTKIP);
03819                                 if (!wiFiConnection->securitySettings.allowedPairWiseCiphers.contains(TDENetworkWiFiConnectionCipher::CipherCCMP)) wiFiConnection->securitySettings.allowedPairWiseCiphers.append(TDENetworkWiFiConnectionCipher::CipherCCMP);
03820                             }
03821                             for (TDENetworkWiFiConnectionCipherList::Iterator it = wiFiConnection->securitySettings.allowedPairWiseCiphers.begin(); it != wiFiConnection->securitySettings.allowedPairWiseCiphers.end(); ++it) {
03822                                 valueList.append(TQT_DBusData::fromString(tdeWiFiCipherToNMWiFiCipher(*it)));
03823                             }
03824                         }
03825                         if (valueList.count() > 0) settingsMap["pairwise"] = (TQT_DBusData::fromTQValueList(valueList)).getAsVariantData();
03826                         else settingsMap.remove("pairwise");
03827                     }
03828                     {
03829                         TQT_DBusDataValueList valueList;
03830                         {
03831                             if (wiFiConnection->securitySettings.allowedGroupWiseCiphers.contains(TDENetworkWiFiConnectionCipher::Any)) {
03832                                 if (!wiFiConnection->securitySettings.allowedGroupWiseCiphers.contains(TDENetworkWiFiConnectionCipher::CipherWEP40)) wiFiConnection->securitySettings.allowedGroupWiseCiphers.append(TDENetworkWiFiConnectionCipher::CipherWEP40);
03833                                 if (!wiFiConnection->securitySettings.allowedGroupWiseCiphers.contains(TDENetworkWiFiConnectionCipher::CipherWEP104)) wiFiConnection->securitySettings.allowedGroupWiseCiphers.append(TDENetworkWiFiConnectionCipher::CipherWEP104);
03834                                 if (!wiFiConnection->securitySettings.allowedGroupWiseCiphers.contains(TDENetworkWiFiConnectionCipher::CipherTKIP)) wiFiConnection->securitySettings.allowedGroupWiseCiphers.append(TDENetworkWiFiConnectionCipher::CipherTKIP);
03835                                 if (!wiFiConnection->securitySettings.allowedGroupWiseCiphers.contains(TDENetworkWiFiConnectionCipher::CipherCCMP)) wiFiConnection->securitySettings.allowedGroupWiseCiphers.append(TDENetworkWiFiConnectionCipher::CipherCCMP);
03836                             }
03837                             for (TDENetworkWiFiConnectionCipherList::Iterator it = wiFiConnection->securitySettings.allowedGroupWiseCiphers.begin(); it != wiFiConnection->securitySettings.allowedGroupWiseCiphers.end(); ++it) {
03838                                 valueList.append(TQT_DBusData::fromString(tdeWiFiCipherToNMWiFiCipher(*it)));
03839                             }
03840                         }
03841                         if (valueList.count() > 0) settingsMap["group"] = (TQT_DBusData::fromTQValueList(valueList)).getAsVariantData();
03842                         else settingsMap.remove("group");
03843                     }
03844                     UPDATE_STRING_SETTING_IF_VALID(wiFiConnection->securitySettings.leapUsername, "leap-username", settingsMap)
03845                     settingsMap["wep-key-flags"] = (TQT_DBusData::fromUInt32(tdePasswordFlagsToNMPasswordFlags(wiFiConnection->securitySettings.wepKeyFlags))).getAsVariantData();
03846                     settingsMap["wep-key-type"] = (TQT_DBusData::fromUInt32(tdeWepKeyTypeToNMWepKeyType(wiFiConnection->securitySettings.wepKeyType))).getAsVariantData();
03847                     settingsMap["psk-flags"] = (TQT_DBusData::fromUInt32(tdePasswordFlagsToNMPasswordFlags(wiFiConnection->securitySettings.pskFlags))).getAsVariantData();
03848                     settingsMap["leap-password-flags"] = (TQT_DBusData::fromUInt32(tdePasswordFlagsToNMPasswordFlags(wiFiConnection->securitySettings.leapPasswordFlags))).getAsVariantData();
03849                     if (wiFiConnection->securitySettings.secretsValid) {
03850                         UPDATE_STRING_SETTING_IF_VALID(wiFiConnection->securitySettings.wepKey0, "wep-key0", settingsMap)
03851                         UPDATE_STRING_SETTING_IF_VALID(wiFiConnection->securitySettings.wepKey1, "wep-key1", settingsMap)
03852                         UPDATE_STRING_SETTING_IF_VALID(wiFiConnection->securitySettings.wepKey2, "wep-key2", settingsMap)
03853                         UPDATE_STRING_SETTING_IF_VALID(wiFiConnection->securitySettings.wepKey3, "wep-key3", settingsMap)
03854                         UPDATE_STRING_SETTING_IF_VALID(wiFiConnection->securitySettings.psk, "psk", settingsMap)
03855                         UPDATE_STRING_SETTING_IF_VALID(wiFiConnection->securitySettings.leapPassword, "leap-password", settingsMap)
03856                     }
03857                     else {
03858                         settingsMap.remove("wep-key0");
03859                         settingsMap.remove("wep-key1");
03860                         settingsMap.remove("wep-key2");
03861                         settingsMap.remove("wep-key3");
03862                         settingsMap.remove("psk");
03863                         settingsMap.remove("leap-password");
03864                     }
03865                 }
03866                 else {
03867                     settingsMap.remove("key-mgmt");
03868                     settingsMap.remove("wep-tx-keyidx");
03869                     settingsMap.remove("auth-alg");
03870                     settingsMap.remove("proto");
03871                     settingsMap.remove("pairwise");
03872                     settingsMap.remove("group");
03873                     settingsMap.remove("leap-username");
03874                     settingsMap.remove("wep-key-flags");
03875                     settingsMap.remove("wep-key-type");
03876                     settingsMap.remove("psk-flags");
03877                     settingsMap.remove("leap-password-flags");
03878                     settingsMap.remove("wep-key0");
03879                     settingsMap.remove("wep-key1");
03880                     settingsMap.remove("wep-key2");
03881                     settingsMap.remove("wep-key3");
03882                     settingsMap.remove("psk");
03883                     settingsMap.remove("leap-password");
03884                 }
03885             }
03886             dbusData = TQT_DBusData::fromStringKeyMap(TQT_DBusDataMap<TQString>(settingsMap));
03887             groupValid = (settingsMap.count() > 0);
03888         }
03889         if (groupValid) outerMap.insert("802-11-wireless-security", dbusData, true); else outerMap.remove("802-11-wireless-security");
03890 
03891         groupValid = false;
03892         dbusData = outerMap["vpn"];
03893         if (vpnConnection) {
03894             TQMap<TQString, TQT_DBusData> settingsMap = dbusData.toStringKeyMap().toTQMap();
03895             {
03896                 {
03897                     TQString pluginService = vpnConnection->vpnPluginID;
03898                     if (pluginService != "") {
03899                         pluginService = "org.freedesktop.NetworkManager." + pluginService;
03900                     }
03901                     UPDATE_STRING_SETTING_IF_VALID(pluginService, "service-type", settingsMap)
03902                 }
03903                 UPDATE_STRING_SETTING_IF_VALID(vpnConnection->lockedUserName, "user-name", settingsMap)
03904                 {
03905                     TQMap<TQString, TQT_DBusData> nestedConnectionSettingsMap;
03906                     TDENetworkSettingsMap::const_iterator it;
03907                     for (it = vpnConnection->pluginData.begin(); it != vpnConnection->pluginData.end(); ++it) {
03908                         nestedConnectionSettingsMap[it.key()] = TQT_DBusData::fromString(it.data());
03909                     }
03910                     if (nestedConnectionSettingsMap.count() > 0) settingsMap["data"] = (TQT_DBusData::fromStringKeyMap(TQT_DBusDataMap<TQString>(nestedConnectionSettingsMap))).getAsVariantData();
03911                     else settingsMap.remove("data");
03912                 }
03913                 if (vpnConnection->secretsValid) {
03914                     TQMap<TQString, TQT_DBusData> nestedConnectionSettingsMap;
03915                     TDENetworkSettingsMap::const_iterator it;
03916                     for (it = vpnConnection->pluginSecrets.begin(); it != vpnConnection->pluginSecrets.end(); ++it) {
03917                         nestedConnectionSettingsMap[it.key()] = TQT_DBusData::fromString(it.data());
03918                     }
03919                     if (nestedConnectionSettingsMap.count() > 0) settingsMap["secrets"] = (TQT_DBusData::fromStringKeyMap(TQT_DBusDataMap<TQString>(nestedConnectionSettingsMap))).getAsVariantData();
03920                     else settingsMap.remove("secrets");
03921                 }
03922             }
03923             dbusData = TQT_DBusData::fromStringKeyMap(TQT_DBusDataMap<TQString>(settingsMap));
03924             groupValid = (settingsMap.count() > 0);
03925         }
03926         if (groupValid) outerMap.insert("vpn", dbusData, true); else outerMap.remove("vpn");
03927 
03928         groupValid = false;
03929         dbusData = outerMap["wimax"];
03930         if (wiMaxConnection) {
03931             TQMap<TQString, TQT_DBusData> settingsMap = dbusData.toStringKeyMap().toTQMap();
03932             {
03933                 if (connection->lockedHWAddress.isValid()) {
03934                     TDENetworkByteList address = connection->lockedHWAddress.address();
03935                     TQT_DBusDataValueList valueList;
03936                     TDENetworkByteList::iterator it;
03937                     for (it = address.begin(); it != address.end(); ++it) {
03938                         TQT_DBusData innerDataValue = TQT_DBusData::fromByte(*it);
03939                         valueList.append(innerDataValue);
03940                     }
03941                     TQT_DBusData nmHWAddress = TQT_DBusData::fromTQValueList(valueList);
03942                     settingsMap["mac-address"] = (nmHWAddress).getAsVariantData();
03943                 }
03944                 else {
03945                     settingsMap.remove("mac-address");
03946                 }
03947                 UPDATE_STRING_SETTING_IF_VALID(wiMaxConnection->networkServiceProvider, "network-name", settingsMap)
03948             }
03949             dbusData = TQT_DBusData::fromStringKeyMap(TQT_DBusDataMap<TQString>(settingsMap));
03950             groupValid = (settingsMap.count() > 0);
03951         }
03952         if (groupValid) outerMap.insert("wimax", dbusData, true); else outerMap.remove("wimax");
03953 
03954         groupValid = false;
03955         dbusData = outerMap["vlan"];
03956         if (vlanConnection) {
03957             TQMap<TQString, TQT_DBusData> settingsMap = dbusData.toStringKeyMap().toTQMap();
03958             {
03959                 UPDATE_STRING_SETTING_IF_VALID(vlanConnection->kernelName, "interface-name", settingsMap)
03960                 UPDATE_STRING_SETTING_IF_VALID(vlanConnection->parentConnectionUUID, "parent", settingsMap)
03961                 settingsMap["id"] = (TQT_DBusData::fromUInt32(vlanConnection->vlanID)).getAsVariantData();
03962                 settingsMap["flags"] = (TQT_DBusData::fromUInt32(tdeVLANFlagsToNMVLANFlags(vlanConnection->vlanFlags))).getAsVariantData();
03963                 {
03964                     TQT_DBusDataValueList valueList;
03965                     TDENetworkPriorityMap::const_iterator it;
03966                     for (it = vlanConnection->ingressPriorityMap.begin(); it != vlanConnection->ingressPriorityMap.end(); ++it) {
03967                         valueList.append(TQT_DBusData::fromString(TQString("%1:%2").arg(it.key()).arg(it.data())));
03968                     }
03969                     if (valueList.count() > 0) settingsMap["ingress-priority-map"] = (TQT_DBusData::fromTQValueList(valueList)).getAsVariantData();
03970                 }
03971                 {
03972                     TQT_DBusDataValueList valueList;
03973                     TDENetworkPriorityMap::const_iterator it;
03974                     for (it = vlanConnection->egressPriorityMap.begin(); it != vlanConnection->egressPriorityMap.end(); ++it) {
03975                         valueList.append(TQT_DBusData::fromString(TQString("%1:%2").arg(it.key()).arg(it.data())));
03976                     }
03977                     if (valueList.count() > 0) settingsMap["egress-priority-map"] = (TQT_DBusData::fromTQValueList(valueList)).getAsVariantData();
03978                 }
03979             }
03980             dbusData = TQT_DBusData::fromStringKeyMap(TQT_DBusDataMap<TQString>(settingsMap));
03981             groupValid = (settingsMap.count() > 0);
03982         }
03983         if (groupValid) outerMap.insert("vlan", dbusData, true); else outerMap.remove("vlan");
03984 
03985         groupValid = false;
03986         dbusData = outerMap["serial"];
03987         if (connection->serialConfig.valid) {
03988             TQMap<TQString, TQT_DBusData> settingsMap = dbusData.toStringKeyMap().toTQMap();
03989             {
03990                 settingsMap["baud"] = (TQT_DBusData::fromUInt32(connection->serialConfig.baudRate)).getAsVariantData();
03991                 settingsMap["bits"] = (TQT_DBusData::fromUInt32(connection->serialConfig.byteWidth)).getAsVariantData();
03992                 settingsMap["parity"] = (TQT_DBusData::fromByte(tdeParityToNMParity(connection->serialConfig.parity))).getAsVariantData();
03993                 settingsMap["stopbits"] = (TQT_DBusData::fromUInt32(connection->serialConfig.stopBits)).getAsVariantData();
03994                 settingsMap["send-delay"] = (TQT_DBusData::fromUInt64(connection->serialConfig.txDelay)).getAsVariantData();
03995             }
03996             dbusData = TQT_DBusData::fromStringKeyMap(TQT_DBusDataMap<TQString>(settingsMap));
03997             groupValid = (settingsMap.count() > 0);
03998         }
03999         if (groupValid) outerMap.insert("serial", dbusData, true); else outerMap.remove("serial");
04000 
04001         groupValid = false;
04002         dbusData = outerMap["ppp"];
04003         if (connection->pppConfig.valid) {
04004             TQMap<TQString, TQT_DBusData> settingsMap = dbusData.toStringKeyMap().toTQMap();
04005             {
04006                 settingsMap["noauth"] = (TQT_DBusData::fromBool(!(connection->pppConfig.requireServerAuthentication))).getAsVariantData();
04007                 settingsMap["refuse-eap"] = (TQT_DBusData::fromBool(connection->pppConfig.flags & TDENetworkPPPFlags::DisableEAP)).getAsVariantData();
04008                 settingsMap["refuse-pap"] = (TQT_DBusData::fromBool(connection->pppConfig.flags & TDENetworkPPPFlags::DisablePAP)).getAsVariantData();
04009                 settingsMap["refuse-chap"] = (TQT_DBusData::fromBool(connection->pppConfig.flags & TDENetworkPPPFlags::DisableCHAP)).getAsVariantData();
04010                 settingsMap["refuse-mschap"] = (TQT_DBusData::fromBool(connection->pppConfig.flags & TDENetworkPPPFlags::DisableMSCHAP)).getAsVariantData();
04011                 settingsMap["refuse-mschapv2"] = (TQT_DBusData::fromBool(connection->pppConfig.flags & TDENetworkPPPFlags::DisableMSCHAPv2)).getAsVariantData();
04012                 settingsMap["nobsdcomp"] = (TQT_DBusData::fromBool(!(connection->pppConfig.flags & TDENetworkPPPFlags::AllowBSDCompression))).getAsVariantData();
04013                 settingsMap["nodeflate"] = (TQT_DBusData::fromBool(!(connection->pppConfig.flags & TDENetworkPPPFlags::AllowDeflateCompression))).getAsVariantData();
04014                 settingsMap["no-vj-comp"] = (TQT_DBusData::fromBool(!(connection->pppConfig.flags & TDENetworkPPPFlags::AllowVJCompression))).getAsVariantData();
04015                 settingsMap["require-mppe"] = (TQT_DBusData::fromBool(connection->pppConfig.flags & TDENetworkPPPFlags::RequireMPPE)).getAsVariantData();
04016                 settingsMap["require-mppe-128"] = (TQT_DBusData::fromBool(connection->pppConfig.flags & TDENetworkPPPFlags::RequireMPPE128)).getAsVariantData();
04017                 settingsMap["mppe-stateful"] = (TQT_DBusData::fromBool(connection->pppConfig.flags & TDENetworkPPPFlags::StatefulMPPE)).getAsVariantData();
04018                 settingsMap["crtscts"] = (TQT_DBusData::fromBool(connection->pppConfig.flags & TDENetworkPPPFlags::UseHardwareFlowControl)).getAsVariantData();
04019                 settingsMap["baud"] = (TQT_DBusData::fromUInt32(connection->pppConfig.baudRate)).getAsVariantData();
04020                 if (connection->pppConfig.mru > 0) {
04021                     settingsMap["mru"] = (TQT_DBusData::fromUInt32(connection->pppConfig.mru)).getAsVariantData();
04022                 }
04023                 else {
04024                     settingsMap.remove("mru");
04025                 }
04026                 if (connection->pppConfig.mtu > 0) {
04027                     settingsMap["mtu"] = (TQT_DBusData::fromUInt32(connection->pppConfig.mtu)).getAsVariantData();
04028                 }
04029                 else {
04030                     settingsMap.remove("mtu");
04031                 }
04032                 if (connection->pppConfig.mtu > 0) {
04033                     settingsMap["lcp-echo-interval"] = (TQT_DBusData::fromUInt32(connection->pppConfig.lcpEchoPingInterval)).getAsVariantData();
04034                 }
04035                 else {
04036                     settingsMap.remove("lcp-echo-interval");
04037                 }
04038                 if (connection->pppConfig.mtu > 0) {
04039                     settingsMap["lcp-echo-failure"] = (TQT_DBusData::fromUInt32(connection->pppConfig.lcpEchoFailureThreshold)).getAsVariantData();
04040                 }
04041                 else {
04042                     settingsMap.remove("lcp-echo-failure");
04043                 }
04044             }
04045             dbusData = TQT_DBusData::fromStringKeyMap(TQT_DBusDataMap<TQString>(settingsMap));
04046             groupValid = (settingsMap.count() > 0);
04047         }
04048         if (groupValid) outerMap.insert("ppp", dbusData, true); else outerMap.remove("ppp");
04049 
04050         groupValid = false;
04051         dbusData = outerMap["pppoe"];
04052         if (connection->pppoeConfig.valid) {
04053             TQMap<TQString, TQT_DBusData> settingsMap = dbusData.toStringKeyMap().toTQMap();
04054             {
04055                 UPDATE_STRING_SETTING_IF_VALID(connection->pppoeConfig.networkServiceProvider, "service", settingsMap)
04056                 UPDATE_STRING_SETTING_IF_VALID(connection->pppoeConfig.username, "username", settingsMap)
04057                 if (connection->pppoeConfig.secretsValid) {
04058                     UPDATE_STRING_SETTING_IF_VALID(connection->pppoeConfig.password, "password", settingsMap)
04059                 }
04060                 settingsMap["password-flags"] = (TQT_DBusData::fromUInt32(tdePasswordFlagsToNMPasswordFlags(connection->pppoeConfig.passwordFlags))).getAsVariantData();
04061             }
04062             dbusData = TQT_DBusData::fromStringKeyMap(TQT_DBusDataMap<TQString>(settingsMap));
04063             groupValid = (settingsMap.count() > 0);
04064         }
04065         if (groupValid) outerMap.insert("pppoe", dbusData, true); else outerMap.remove("pppoe");
04066 
04067         groupValid = false;
04068         dbusData = outerMap["802-11-olpc-mesh"];
04069         if (olpcMeshConnection) {
04070             TQMap<TQString, TQT_DBusData> settingsMap = dbusData.toStringKeyMap().toTQMap();
04071             {
04072                 {
04073                     unsigned int i;
04074                     TQT_DBusDataValueList valueList;
04075                     for (i=0; i<olpcMeshConnection->SSID.count(); i++) {
04076                         TQT_DBusData innerDataValue = TQT_DBusData::fromByte(olpcMeshConnection->SSID[i]);
04077                         valueList.append(innerDataValue);
04078                     }
04079                     settingsMap["ssid"] = (TQT_DBusData::fromTQValueList(valueList)).getAsVariantData();
04080                 }
04081                 settingsMap["channel"] = (TQT_DBusData::fromUInt32(olpcMeshConnection->channel)).getAsVariantData();
04082                 {
04083                     unsigned int i;
04084                     TQT_DBusDataValueList valueList;
04085                     for (i=0; i<olpcMeshConnection->anycastDHCPHWAddress.count(); i++) {
04086                         TQT_DBusData innerDataValue = TQT_DBusData::fromByte(olpcMeshConnection->anycastDHCPHWAddress[i]);
04087                         valueList.append(innerDataValue);
04088                     }
04089                     settingsMap["dhcp-anycast-address"] = (TQT_DBusData::fromTQValueList(valueList)).getAsVariantData();
04090                 }
04091             }
04092             dbusData = TQT_DBusData::fromStringKeyMap(TQT_DBusDataMap<TQString>(settingsMap));
04093             groupValid = (settingsMap.count() > 0);
04094         }
04095         if (groupValid) outerMap.insert("802-11-olpc-mesh", dbusData, true); else outerMap.remove("802-11-olpc-mesh");
04096 
04097         groupValid = false;
04098         dbusData = outerMap["bluetooth"];
04099         if (bluetoothConnection) {
04100             TQMap<TQString, TQT_DBusData> settingsMap = dbusData.toStringKeyMap().toTQMap();
04101             {
04102                 if (connection->lockedHWAddress.isValid()) {
04103                     TDENetworkByteList address = connection->lockedHWAddress.address();
04104                     TQT_DBusDataValueList valueList;
04105                     TDENetworkByteList::iterator it;
04106                     for (it = address.begin(); it != address.end(); ++it) {
04107                         TQT_DBusData innerDataValue = TQT_DBusData::fromByte(*it);
04108                         valueList.append(innerDataValue);
04109                     }
04110                     TQT_DBusData nmHWAddress = TQT_DBusData::fromTQValueList(valueList);
04111                     settingsMap["bdaddr"] = (nmHWAddress).getAsVariantData();
04112                 }
04113                 else {
04114                     settingsMap.remove("bdaddr");
04115                 }
04116                 UPDATE_STRING_SETTING_IF_VALID(tdeBluetoothModeToNMBluetoothMode(bluetoothConnection->type), "type", settingsMap)
04117             }
04118             dbusData = TQT_DBusData::fromStringKeyMap(TQT_DBusDataMap<TQString>(settingsMap));
04119             groupValid = (settingsMap.count() > 0);
04120         }
04121         if (groupValid) outerMap.insert("bluetooth", dbusData, true); else outerMap.remove("bluetooth");
04122 
04123         groupValid = false;
04124         dbusData = outerMap["cdma"];
04125         if ((modemConnection) && (modemConnection->type == TDEModemConnectionType::CDMA)) {
04126             TQMap<TQString, TQT_DBusData> settingsMap = dbusData.toStringKeyMap().toTQMap();
04127             {
04128                 UPDATE_STRING_SETTING_IF_VALID(modemConnection->cdmaConfig.providerDataNumber, "number", settingsMap)
04129                 UPDATE_STRING_SETTING_IF_VALID(modemConnection->cdmaConfig.username, "username", settingsMap)
04130                 if (connection->pppoeConfig.secretsValid) {
04131                     UPDATE_STRING_SETTING_IF_VALID(modemConnection->cdmaConfig.password, "password", settingsMap)
04132                 }
04133                 settingsMap["password-flags"] = (TQT_DBusData::fromUInt32(tdePasswordFlagsToNMPasswordFlags(modemConnection->cdmaConfig.passwordFlags))).getAsVariantData();
04134             }
04135             dbusData = TQT_DBusData::fromStringKeyMap(TQT_DBusDataMap<TQString>(settingsMap));
04136             groupValid = (settingsMap.count() > 0);
04137         }
04138         if (groupValid) outerMap.insert("cdma", dbusData, true); else outerMap.remove("cdma");
04139 
04140         groupValid = false;
04141         dbusData = outerMap["gsm"];
04142         if ((modemConnection) && (modemConnection->type == TDEModemConnectionType::GSM)) {
04143             TQMap<TQString, TQT_DBusData> settingsMap = dbusData.toStringKeyMap().toTQMap();
04144             {
04145                 UPDATE_STRING_SETTING_IF_VALID(modemConnection->gsmConfig.providerDataNumber, "number", settingsMap)
04146                 UPDATE_STRING_SETTING_IF_VALID(modemConnection->gsmConfig.username, "username", settingsMap)
04147                 if (connection->pppoeConfig.secretsValid) {
04148                     UPDATE_STRING_SETTING_IF_VALID(modemConnection->gsmConfig.password, "password", settingsMap)
04149                 }
04150                 settingsMap["password-flags"] = (TQT_DBusData::fromUInt32(tdePasswordFlagsToNMPasswordFlags(modemConnection->gsmConfig.passwordFlags))).getAsVariantData();
04151                 UPDATE_STRING_SETTING_IF_VALID(modemConnection->gsmConfig.accessPointName, "apn", settingsMap)
04152                 UPDATE_STRING_SETTING_IF_VALID(modemConnection->gsmConfig.networkID, "network-id", settingsMap)
04153                 settingsMap["network-type"] = (TQT_DBusData::fromInt32(tdeGSMModeToNMGSMMode(modemConnection->gsmConfig.networkType))).getAsVariantData();
04154                 if (connection->pppoeConfig.secretsValid) {
04155                     UPDATE_STRING_SETTING_IF_VALID(modemConnection->gsmConfig.pin, "pin", settingsMap)
04156                 }
04157                 settingsMap["pin-flags"] = (TQT_DBusData::fromUInt32(tdePasswordFlagsToNMPasswordFlags(modemConnection->gsmConfig.pinFlags))).getAsVariantData();
04158                 settingsMap["allowed-bands"] = (TQT_DBusData::fromUInt32(modemConnection->gsmConfig.allowedFrequencyBands)).getAsVariantData();
04159                 settingsMap["home-only"] = (TQT_DBusData::fromBool(!(modemConnection->gsmConfig.allowRoaming))).getAsVariantData();
04160             }
04161             dbusData = TQT_DBusData::fromStringKeyMap(TQT_DBusDataMap<TQString>(settingsMap));
04162             groupValid = (settingsMap.count() > 0);
04163         }
04164         if (groupValid) outerMap.insert("gsm", dbusData, true); else outerMap.remove("gsm");
04165 
04166         groupValid = false;
04167         dbusData = outerMap["ipv4"];
04168         {
04169             TQMap<TQString, TQT_DBusData> settingsMap = dbusData.toStringKeyMap().toTQMap();
04170             {
04171                 {
04172                     TQT_DBusDataValueList valueList;
04173                     TDENetworkSingleIPConfigurationList::iterator it;
04174                     for (it = connection->ipConfig.ipConfigurations.begin(); it != connection->ipConfig.ipConfigurations.end(); ++it) {
04175                         if ((*it).isIPv4()) {
04176                             TQT_DBusDataValueList innerValueList;
04177                             // WARNING: The exact order of the data in the list is critical, therefore extreme caution should be exercised when modifying the code below!
04178                             // Address
04179                             innerValueList.append(TQT_DBusData::fromUInt32(reverseIPV4ByteOrder((*it).ipAddress.toIPv4Address())));
04180                             // Netmask
04181                             innerValueList.append(TQT_DBusData::fromUInt32((*it).networkMask.toCIDRMask()));
04182                             // Gateway
04183                             innerValueList.append(TQT_DBusData::fromUInt32(reverseIPV4ByteOrder((*it).gateway.toIPv4Address())));
04184                             valueList.append(TQT_DBusData::fromTQValueList(innerValueList));
04185                         }
04186                     }
04187                     if (valueList.count() <= 0) {
04188                         // Create an empty list with the correct DBUS type structure
04189                         TQT_DBusData valueList;
04190                         valueList = TQT_DBusData::fromList(TQT_DBusDataList(TQT_DBusData::UInt32));
04191                         settingsMap["addresses"] = (TQT_DBusData::fromList(TQT_DBusDataList(valueList))).getAsVariantData();
04192                     }
04193                     else {
04194                         settingsMap["addresses"] = (TQT_DBusData::fromTQValueList(valueList)).getAsVariantData();
04195                     }
04196                 }
04197                 {
04198                     if (!connection->ipConfig.dhcpClientIdentifier.isNull()) {
04199                         settingsMap["dhcp-client-id"] = (TQT_DBusData::fromString(connection->ipConfig.dhcpClientIdentifier)).getAsVariantData();
04200                     }
04201                 }
04202                 {
04203                     TQT_DBusDataValueList valueList;
04204                     TDENetworkAddressList::iterator it;
04205                     for (it = connection->ipConfig.resolvers.begin(); it != connection->ipConfig.resolvers.end(); ++it) {
04206                         if ((*it).isIPv4Address()) {
04207                             valueList.append(TQT_DBusData::fromUInt32(reverseIPV4ByteOrder((*it).toIPv4Address())));
04208                         }
04209                     }
04210                     if (valueList.count() <= 0) {
04211                         // Create an empty list with the correct DBUS type structure
04212                         settingsMap["dns"] = (TQT_DBusData::fromList(TQT_DBusDataList(TQT_DBusData::UInt32))).getAsVariantData();
04213                     }
04214                     else {
04215                         settingsMap["dns"] = (TQT_DBusData::fromTQValueList(valueList)).getAsVariantData();
04216                     }
04217                 }
04218                 {
04219                     TQT_DBusDataValueList valueList;
04220                     TDENetworkSearchDomainList::iterator it;
04221                     for (it = connection->ipConfig.searchDomains.begin(); it != connection->ipConfig.searchDomains.end(); ++it) {
04222                         if ((*it).isIPv4()) {
04223                             valueList.append(TQT_DBusData::fromString((*it).searchDomain()));
04224                         }
04225                     }
04226                     if (valueList.count() > 0) settingsMap["dns-search"] = (TQT_DBusData::fromTQValueList(valueList)).getAsVariantData();
04227                 }
04228                 {
04229                     settingsMap["ignore-auto-dns"] = (TQT_DBusData::fromBool(!(connection->ipConfig.connectionFlags & TDENetworkIPConfigurationFlags::IPV4DHCPDNS))).getAsVariantData();
04230                 }
04231                 {
04232                     settingsMap["may-fail"] = (TQT_DBusData::fromBool(!connection->requireIPV4)).getAsVariantData();
04233                 }
04234                 {
04235                     TQString method;
04236                     if (connection->ipConfig.connectionFlags & TDENetworkIPConfigurationFlags::IPV4DHCPIP) {
04237                         method = "auto";
04238                     }
04239                     else if (connection->ipConfig.connectionFlags & TDENetworkIPConfigurationFlags::IPV4LocalOnly) {
04240                         method = "link-local";
04241                     }
04242                     else if (connection->ipConfig.connectionFlags & TDENetworkIPConfigurationFlags::IPV4StartConnectionSharingServer) {
04243                         method = "shared";
04244                     }
04245                     else if (connection->ipConfig.connectionFlags & TDENetworkIPConfigurationFlags::IPV4Disabled) {
04246                         method = "disabled";
04247                     }
04248                     else {
04249                         method = "manual";
04250                     }
04251                     if (!method.isNull())
04252                         settingsMap["method"] = (TQT_DBusData::fromString(method)).getAsVariantData();
04253                 }
04254                 {
04255                     settingsMap["ignore-auto-routes"] = (TQT_DBusData::fromBool(!(connection->ipConfig.connectionFlags & TDENetworkIPConfigurationFlags::IPV4DHCPRoutes))).getAsVariantData();
04256                 }
04257                 {
04258                     settingsMap["never-default"] = (TQT_DBusData::fromBool(!(connection->ipConfig.connectionFlags & TDENetworkIPConfigurationFlags::IPV4MayUseAsDefaultRoute))).getAsVariantData();
04259                 }
04260                 {
04261                     TQT_DBusDataValueList valueList;
04262                     TDENetworkSingleRouteConfigurationList::iterator it;
04263                     for (it = connection->ipConfig.routeConfigurations.begin(); it != connection->ipConfig.routeConfigurations.end(); ++it) {
04264                         if ((*it).isIPv4()) {
04265                             TQT_DBusDataValueList innerValueList;
04266                             // WARNING: The exact order of the data in the list is critical, therefore extreme caution should be exercised when modifying the code below!
04267                             // Address
04268                             innerValueList.append(TQT_DBusData::fromUInt32(reverseIPV4ByteOrder((*it).ipAddress.toIPv4Address())));
04269                             // Netmask
04270                             innerValueList.append(TQT_DBusData::fromUInt32((*it).networkMask.toCIDRMask()));
04271                             // Gateway
04272                             innerValueList.append(TQT_DBusData::fromUInt32(reverseIPV4ByteOrder((*it).gateway.toIPv4Address())));
04273                             // Metric
04274                             innerValueList.append(TQT_DBusData::fromUInt32((*it).metric));
04275                             valueList.append(TQT_DBusData::fromTQValueList(innerValueList));
04276                         }
04277                     }
04278                     if (valueList.count() <= 0) {
04279                         // Create an empty list with the correct DBUS type structure
04280                         TQT_DBusData valueList;
04281                         valueList = TQT_DBusData::fromList(TQT_DBusDataList(TQT_DBusData::UInt32));
04282                         settingsMap["routes"] = (TQT_DBusData::fromList(TQT_DBusDataList(valueList))).getAsVariantData();
04283                     }
04284                     else {
04285                         settingsMap["routes"] = (TQT_DBusData::fromTQValueList(valueList)).getAsVariantData();
04286                     }
04287                 }
04288             }
04289             dbusData = TQT_DBusData::fromStringKeyMap(TQT_DBusDataMap<TQString>(settingsMap));
04290             groupValid = (settingsMap.count() > 0);
04291         }
04292         if (groupValid) outerMap.insert("ipv4", dbusData, true); else outerMap.remove("ipv4");
04293 
04294         groupValid = false;
04295         dbusData = outerMap["ipv6"];
04296         {
04297             TQMap<TQString, TQT_DBusData> settingsMap = dbusData.toStringKeyMap().toTQMap();
04298             {
04299                 {
04300                     TQT_DBusDataValueList valueList;
04301                     TDENetworkSingleIPConfigurationList::iterator it;
04302                     for (it = connection->ipConfig.ipConfigurations.begin(); it != connection->ipConfig.ipConfigurations.end(); ++it) {
04303                         if ((*it).isIPv6()) {
04304                             int i;
04305                             Q_IPV6ADDR v6address;
04306                             TQT_DBusDataValueList innerValueList;
04307                             TQT_DBusDataValueList innerMostValueList;
04308                             // WARNING: The exact order of the data in the list is critical, therefore extreme caution should be exercised when modifying the code below!
04309                             // Address
04310                             innerMostValueList.clear();
04311                             v6address = (*it).ipAddress.toIPv6Address();
04312                             for (i=0; i<16; i++) {
04313                                 innerMostValueList.append(TQT_DBusData::fromByte(v6address.c[i]));
04314                             }
04315                             innerValueList.append(TQT_DBusData::fromTQValueList(innerMostValueList));
04316                             // Netmask
04317                             innerValueList.append(TQT_DBusData::fromUInt32((*it).networkMask.toCIDRMask()));
04318                             // Gateway
04319                             innerMostValueList.clear();
04320                             v6address = (*it).gateway.toIPv6Address();
04321                             for (i=0; i<16; i++) {
04322                                 innerMostValueList.append(TQT_DBusData::fromByte(v6address.c[i]));
04323                             }
04324                             innerValueList.append(TQT_DBusData::fromTQValueList(innerMostValueList));
04325                             valueList.append(TQT_DBusData::fromStruct(innerValueList));
04326                         }
04327                     }
04328                     if (valueList.count() <= 0) {
04329                         // Create an empty list with the correct DBUS type structure
04330                         TQT_DBusDataValueList innerValueList;
04331                         TQT_DBusDataValueList innerMostValueList;
04332                         // WARNING: The exact order of the data in the list is critical, therefore extreme caution should be exercised when modifying the code below!
04333                         // Address
04334                         innerMostValueList.clear();
04335                         innerMostValueList.append(TQT_DBusData::fromByte(0));
04336                         innerValueList.append(TQT_DBusData::fromTQValueList(innerMostValueList));
04337                         // Netmask
04338                         innerValueList.append(TQT_DBusData::fromUInt32(0));
04339                         // Gateway
04340                         innerMostValueList.clear();
04341                         innerMostValueList.append(TQT_DBusData::fromByte(0));
04342                         innerValueList.append(TQT_DBusData::fromTQValueList(innerMostValueList));
04343                         settingsMap["addresses"] = (TQT_DBusData::fromList(TQT_DBusDataList(TQT_DBusData::fromStruct(innerValueList)))).getAsVariantData();
04344                     }
04345                     else {
04346                         settingsMap["addresses"] = (TQT_DBusData::fromTQValueList(valueList)).getAsVariantData();
04347                     }
04348                 }
04349                 {
04350                     TQT_DBusDataValueList valueList;
04351                     TDENetworkAddressList::iterator it;
04352                     for (it = connection->ipConfig.resolvers.begin(); it != connection->ipConfig.resolvers.end(); ++it) {
04353                         if ((*it).isIPv6Address()) {
04354                             int i;
04355                             Q_IPV6ADDR v6address;
04356                             TQT_DBusDataValueList innerValueList;
04357                             v6address = (*it).toIPv6Address();
04358                             for (i=0; i<16; i++) {
04359                                 innerValueList.append(TQT_DBusData::fromByte(v6address.c[i]));
04360                             }
04361                             valueList.append(TQT_DBusData::fromTQValueList(innerValueList));
04362                         }
04363                     }
04364                     if (valueList.count() <= 0) {
04365                         // Create an empty list with the correct DBUS type structure
04366                         TQT_DBusData valueList;
04367                         valueList = TQT_DBusData::fromList(TQT_DBusDataList(TQT_DBusData::Byte));
04368                         settingsMap["dns"] = (TQT_DBusData::fromList(TQT_DBusDataList(valueList))).getAsVariantData();
04369                     }
04370                     else {
04371                         settingsMap["dns"] = (TQT_DBusData::fromTQValueList(valueList)).getAsVariantData();
04372                     }
04373                 }
04374                 {
04375                     TQT_DBusDataValueList valueList;
04376                     TDENetworkSearchDomainList::iterator it;
04377                     for (it = connection->ipConfig.searchDomains.begin(); it != connection->ipConfig.searchDomains.end(); ++it) {
04378                         if ((*it).isIPv6()) {
04379                             valueList.append(TQT_DBusData::fromString((*it).searchDomain()));
04380                         }
04381                     }
04382                     if (valueList.count() > 0) settingsMap["dns-search"] = (TQT_DBusData::fromTQValueList(valueList)).getAsVariantData();
04383                 }
04384                 {
04385                     settingsMap["ignore-auto-dns"] = (TQT_DBusData::fromBool(!(connection->ipConfig.connectionFlags & TDENetworkIPConfigurationFlags::IPV4DHCPDNS))).getAsVariantData();
04386                 }
04387                 {
04388                     settingsMap["may-fail"] = (TQT_DBusData::fromBool(!connection->requireIPV6)).getAsVariantData();
04389                 }
04390                 {
04391                     TQString method;
04392                     if (connection->ipConfig.connectionFlags & TDENetworkIPConfigurationFlags::IPV6DHCPIP) {
04393                         method = "auto";
04394                     }
04395                     else if (connection->ipConfig.connectionFlags & TDENetworkIPConfigurationFlags::IPV6LocalOnly) {
04396                         method = "link-local";
04397                     }
04398                     else if (connection->ipConfig.connectionFlags & TDENetworkIPConfigurationFlags::IPV6StartConnectionSharingServer) {
04399                         method = "shared";
04400                     }
04401                     else if (connection->ipConfig.connectionFlags & TDENetworkIPConfigurationFlags::IPV6Disabled) {
04402                         method = "ignore";
04403                     }
04404                     else {
04405                         method = "manual";
04406                     }
04407                     if (!method.isNull())
04408                         settingsMap["method"] = (TQT_DBusData::fromString(method)).getAsVariantData();
04409                 }
04410                 {
04411                     settingsMap["ignore-auto-routes"] = (TQT_DBusData::fromBool(!(connection->ipConfig.connectionFlags & TDENetworkIPConfigurationFlags::IPV6DHCPRoutes))).getAsVariantData();
04412                 }
04413                 {
04414                     settingsMap["never-default"] = (TQT_DBusData::fromBool(!(connection->ipConfig.connectionFlags & TDENetworkIPConfigurationFlags::IPV6MayUseAsDefaultRoute))).getAsVariantData();
04415                 }
04416                 {
04417                     TQT_DBusDataValueList valueList;
04418                     TDENetworkSingleRouteConfigurationList::iterator it;
04419                     for (it = connection->ipConfig.routeConfigurations.begin(); it != connection->ipConfig.routeConfigurations.end(); ++it) {
04420                         if ((*it).isIPv6()) {
04421                             int i;
04422                             Q_IPV6ADDR v6address;
04423                             TQT_DBusDataValueList innerValueList;
04424                             TQT_DBusDataValueList innerMostValueList;
04425                             // WARNING: The exact order of the data in the list is critical, therefore extreme caution should be exercised when modifying the code below!
04426                             // Address
04427                             innerMostValueList.clear();
04428                             v6address = (*it).ipAddress.toIPv6Address();
04429                             for (i=0; i<16; i++) {
04430                                 innerMostValueList.append(TQT_DBusData::fromByte(v6address.c[i]));
04431                             }
04432                             innerValueList.append(TQT_DBusData::fromTQValueList(innerMostValueList));
04433                             // Netmask
04434                             innerValueList.append(TQT_DBusData::fromUInt32((*it).networkMask.toCIDRMask()));
04435                             // Gateway
04436                             innerMostValueList.clear();
04437                             v6address = (*it).gateway.toIPv6Address();
04438                             for (i=0; i<16; i++) {
04439                                 innerMostValueList.append(TQT_DBusData::fromByte(v6address.c[i]));
04440                             }
04441                             innerValueList.append(TQT_DBusData::fromTQValueList(innerMostValueList));
04442                             // Metric
04443                             innerValueList.append(TQT_DBusData::fromUInt32((*it).metric));
04444                             valueList.append(TQT_DBusData::fromStruct(innerValueList));
04445                         }
04446                     }
04447                     if (valueList.count() <= 0) {
04448                         // Create an empty list with the correct DBUS type structure
04449                         TQT_DBusDataValueList innerValueList;
04450                         TQT_DBusDataValueList innerMostValueList;
04451                         // WARNING: The exact order of the data in the list is critical, therefore extreme caution should be exercised when modifying the code below!
04452                         // Address
04453                         innerMostValueList.clear();
04454                         innerMostValueList.append(TQT_DBusData::fromByte(0));
04455                         innerValueList.append(TQT_DBusData::fromTQValueList(innerMostValueList));
04456                         // Netmask
04457                         innerValueList.append(TQT_DBusData::fromUInt32(0));
04458                         // Gateway
04459                         innerMostValueList.clear();
04460                         innerMostValueList.append(TQT_DBusData::fromByte(0));
04461                         innerValueList.append(TQT_DBusData::fromTQValueList(innerMostValueList));
04462                         // Metric
04463                         innerValueList.append(TQT_DBusData::fromUInt32(0));
04464                         settingsMap["routes"] = (TQT_DBusData::fromList(TQT_DBusDataList(TQT_DBusData::fromStruct(innerValueList)))).getAsVariantData();
04465                     }
04466                     else {
04467                         settingsMap["routes"] = (TQT_DBusData::fromTQValueList(valueList)).getAsVariantData();
04468                     }
04469                 }
04470             }
04471             dbusData = TQT_DBusData::fromStringKeyMap(TQT_DBusDataMap<TQString>(settingsMap));
04472             groupValid = (settingsMap.count() > 0);
04473         }
04474         if (groupValid) outerMap.insert("ipv6", dbusData, true); else outerMap.remove("ipv6");
04475     }
04476     connectionSettingsMap = TQT_DBusDataMap<TQString>(outerMap);
04477 
04478     // If existing==true, a connection already existed and simply needs to be updated
04479     // If existing==false, a new connection must be created
04480     // To update: Use 'DBus::ConnectionSettingsInterface' with the connection path 'existingConnection' and call 'virtual bool UpdateAsync(int& asyncCallId, const TQT_DBusDataMap<TQString>& properties, TQT_DBusError& error);'
04481     // To create new: Use 'd->m_networkManagerSettings' and call 'virtual bool AddConnectionAsync(int& asyncCallId, const TQT_DBusDataMap<TQString>& connection, TQT_DBusError& error);'
04482 
04483 #ifdef DEBUG_NETWORK_MANAGER_COMMUNICATIONS
04484     printf("[network-manager comm debug] uploaded DBUS object structure map follows:\n"); fflush(stdout);
04485     printDBUSObjectStructure(TQT_DBusData::fromStringKeyMap(connectionSettingsMap));
04486 #endif // DEBUG_NETWORK_MANAGER_COMMUNICATIONS
04487 
04488     if (existing) {
04489 #ifdef DEBUG_NETWORK_MANAGER_COMMUNICATIONS
04490         printf("[network-manager comm debug] Updating existing connection\n"); fflush(stdout);
04491 #endif // DEBUG_NETWORK_MANAGER_COMMUNICATIONS
04492         // Save connection settings to the path specified
04493         DBus::ConnectionSettingsInterface connectionSettings(NM_DBUS_SERVICE, existingConnection);
04494         connectionSettings.setConnection(TQT_DBusConnection::systemBus());
04495         connect(&connectionSettings, SIGNAL(UpdateAsyncReply(int)), d, SLOT(processConnectionSettingsUpdateAsyncReply(int)));
04496         int asyncCallID;
04497         ret = connectionSettings.UpdateAsync(asyncCallID, connectionSettingsMap, error);
04498         if (ret && error.isValid()) {
04499             ret = 0;
04500             PRINT_ERROR((error.name() + ": " + error.message()))
04501         }
04502         if (ret) {
04503             // Wait for the asynchronous call to return...
04504             d->nmConnectionSettingsAsyncCallWaiting[asyncCallID] = true;
04505             TQTimer nmCallTimeoutTimer;
04506             nmCallTimeoutTimer.start(NM_ASYNC_TIMEOUT_MS, true);
04507             while (d->nmConnectionSettingsAsyncCallWaiting[asyncCallID]) {
04508                 tqApp->processEvents();
04509                 if (!nmCallTimeoutTimer.isActive()) {
04510                     PRINT_ERROR(TQString("DBUS asynchronous call timed out!"))
04511                     timed_out = true;
04512                     break;
04513                 }
04514             }
04515             d->nmConnectionSettingsAsyncCallWaiting.remove(asyncCallID);
04516             return !timed_out;
04517         }
04518         else {
04519             // Error!
04520             PRINT_ERROR((error.name() + ": " + error.message()))
04521             return false;
04522         }
04523     }
04524     else {
04525 #ifdef DEBUG_NETWORK_MANAGER_COMMUNICATIONS
04526         printf("[network-manager comm debug] Creating new connection\n"); fflush(stdout);
04527 #endif // DEBUG_NETWORK_MANAGER_COMMUNICATIONS
04528         // Create new connection
04529         connect(d->m_networkManagerSettings, SIGNAL(AddConnectionAsyncReply(int, const TQT_DBusObjectPath&)), d, SLOT(processAddConnectionAsyncReply(int, const TQT_DBusObjectPath&)));
04530         connect(d->m_networkManagerSettings, SIGNAL(AsyncErrorResponseDetected(int, const TQT_DBusError)), d, SLOT(processAddConnectionAsyncError(int, const TQT_DBusError)));
04531         int asyncCallID;
04532         ret = d->m_networkManagerSettings->AddConnectionAsync(asyncCallID, connectionSettingsMap, error);
04533         if (ret && error.isValid()) {
04534             ret = 0;
04535             PRINT_ERROR((error.name() + ": " + error.message()))
04536         }
04537         if (ret) {
04538             // Wait for the asynchronous call to return...
04539             d->nmConnectionSettingsAsyncCallWaiting[asyncCallID] = true;
04540             TQTimer nmCallTimeoutTimer;
04541             nmCallTimeoutTimer.start(NM_ASYNC_TIMEOUT_MS, true);
04542             while (d->nmConnectionSettingsAsyncCallWaiting[asyncCallID]) {
04543                 if (!nmCallTimeoutTimer.isActive()) {
04544                     PRINT_ERROR(TQString("DBUS asynchronous call timed out!"))
04545                     timed_out = true;
04546                     break;
04547                 }
04548                 tqApp->processEvents();
04549             }
04550             if (d->nmAddConnectionAsyncErrorResponse.contains(asyncCallID)) {
04551                 PRINT_ERROR((d->nmAddConnectionAsyncErrorResponse[asyncCallID].name() + ": " + d->nmAddConnectionAsyncErrorResponse[asyncCallID].message()));
04552                 d->nmAddConnectionAsyncErrorResponse.remove(asyncCallID);
04553             }
04554             if (!d->nmAddConnectionAsyncResponse[asyncCallID].ascii()) {
04555                 PRINT_ERROR(TQString("NetworkManager did not return a new connection object!"))
04556                 command_failed = true;
04557             }
04558             d->nmConnectionSettingsAsyncCallWaiting.remove(asyncCallID);
04559             if (d->nmAddConnectionAsyncResponse.contains(asyncCallID)) {
04560                 d->nmAddConnectionAsyncResponse.remove(asyncCallID);
04561             }
04562             return ((!timed_out) && (!command_failed));
04563         }
04564         else {
04565             // Error!
04566             PRINT_ERROR((error.name() + ": " + error.message()))
04567             return false;
04568         }
04569     }
04570 }
04571 
04572 bool TDENetworkConnectionManager_BackendNM::deleteConnection(TQString uuid) {
04573     TQT_DBusObjectPath existingConnection;
04574     TQT_DBusError error;
04575     bool timed_out = false;
04576     bool ret;
04577     if (d->m_networkManagerSettings) {
04578         ret = d->m_networkManagerSettings->GetConnectionByUuid(uuid, existingConnection, error);
04579         if (ret) {
04580             // Obtain connection secrets from the path specified
04581             DBus::ConnectionSettingsInterface connectionSettings(NM_DBUS_SERVICE, existingConnection);
04582             connectionSettings.setConnection(TQT_DBusConnection::systemBus());
04583             connect(&connectionSettings, SIGNAL(DeleteAsyncReply(int)), d, SLOT(processConnectionSettingsUpdateAsyncReply(int)));
04584             int asyncCallID;
04585             ret = connectionSettings.DeleteAsync(asyncCallID, error);
04586             if (ret && error.isValid()) {
04587                 ret = 0;
04588                 PRINT_ERROR((error.name() + ": " + error.message()))
04589             }
04590             if (ret) {
04591                 // Wait for the asynchronous call to return...
04592                 d->nmConnectionSettingsAsyncCallWaiting[asyncCallID] = true;
04593                 TQTimer nmCallTimeoutTimer;
04594                 nmCallTimeoutTimer.start(NM_ASYNC_TIMEOUT_MS, true);
04595                 while (d->nmConnectionSettingsAsyncCallWaiting[asyncCallID]) {
04596                     tqApp->processEvents();
04597                     if (!nmCallTimeoutTimer.isActive()) {
04598                         PRINT_ERROR(TQString("DBUS asynchronous call timed out!"))
04599                         timed_out = true;
04600                         break;
04601                     }
04602                 }
04603                 d->nmConnectionSettingsAsyncCallWaiting.remove(asyncCallID);
04604                 return !timed_out;
04605             }
04606             else {
04607                 PRINT_ERROR(TQString("Unable to remove connection with uuid '%1'").arg(uuid))
04608                 return false;
04609             }
04610         }
04611         else {
04612             PRINT_WARNING(TQString("connection for provided uuid '%1' was not found").arg(uuid));
04613             return false;
04614         }
04615     }
04616     else {
04617         PRINT_ERROR(TQString("invalid internal network-manager settings proxy object"));
04618         return false;
04619     }
04620 }
04621 
04622 bool TDENetworkConnectionManager_BackendNM::verifyConnectionSettings(TDENetworkConnection* connection, TDENetworkConnectionErrorFlags::TDENetworkConnectionErrorFlags* type, TDENetworkErrorStringMap* reason) {
04623     // FIXME
04624     // This should actually attempt to validate all the settings!
04625 
04626     if (!connection) {
04627         return false;
04628     }
04629 
04630     if (connection->friendlyName == "") {
04631         if (reason) (*reason)[TDENetworkConnectionErrorFlags::InvalidConnectionSetting] = i18n("Connection name is invalid");
04632         if (type) *type |= TDENetworkConnectionErrorFlags::InvalidConnectionSetting;
04633         return false;
04634     }
04635 
04636     if (connection->ipConfig.valid) {
04637         // Iterate over all addresses
04638         TDENetworkSingleIPConfigurationList::iterator it;
04639         for (it = connection->ipConfig.ipConfigurations.begin(); it != connection->ipConfig.ipConfigurations.end(); ++it) {
04640             if ((*it).isIPv4()) {
04641                 if (!(connection->ipConfig.connectionFlags & TDENetworkIPConfigurationFlags::IPV4DHCPIP)) {
04642                     if (!TDENetworkConnectionManager::validateIPAddress((*it).ipAddress)) {
04643                         if (reason) (*reason)[TDENetworkConnectionErrorFlags::InvalidIPv4Setting] = i18n("IPv4 address is invalid");
04644                         if (type) *type |= TDENetworkConnectionErrorFlags::InvalidIPv4Setting;
04645                         return false;
04646                     }
04647                 }
04648             }
04649             else if ((*it).isIPv6()) {
04650                 if (!(connection->ipConfig.connectionFlags & TDENetworkIPConfigurationFlags::IPV6DHCPIP)) {
04651                     if (!TDENetworkConnectionManager::validateIPAddress((*it).ipAddress)) {
04652                         if (reason) (*reason)[TDENetworkConnectionErrorFlags::InvalidIPv6Setting] = i18n("IPv6 address is invalid");
04653                         if (type) *type |= TDENetworkConnectionErrorFlags::InvalidIPv6Setting;
04654                         return false;
04655                     }
04656                 }
04657             }
04658         }
04659     }
04660 
04661     TDEWiFiConnection* wiFiConnection = dynamic_cast<TDEWiFiConnection*>(connection);
04662     if (wiFiConnection) {
04663         if (wiFiConnection->SSID.count() < 1) {
04664             if (reason) (*reason)[TDENetworkConnectionErrorFlags::InvalidWirelessSetting] = i18n("No SSID provided");
04665             if (type) *type |= TDENetworkConnectionErrorFlags::InvalidWirelessSetting;
04666             return false;
04667         }
04668         if (wiFiConnection->securityRequired) {
04669             if (wiFiConnection->securitySettings.secretsValid) {
04670                 if ((wiFiConnection->securitySettings.keyType == TDENetworkWiFiKeyType::WEP) || ((wiFiConnection->securitySettings.keyType == TDENetworkWiFiKeyType::DynamicWEP) && ((wiFiConnection->securitySettings.authType == TDENetworkWiFiAuthType::Open) || (wiFiConnection->securitySettings.authType == TDENetworkWiFiAuthType::Shared)))) {
04671                     if (wiFiConnection->securitySettings.wepKeyType == TDENetworkWepKeyType::Hexadecimal) {
04672                         if (wiFiConnection->securitySettings.wepKey0 != "") {
04673                             if ((wiFiConnection->securitySettings.wepKey0.length() != 10) && (wiFiConnection->securitySettings.wepKey0.length() != 26)) {
04674                                 if (reason) (*reason)[TDENetworkConnectionErrorFlags::InvalidWirelessKey] = i18n("WEP key 0 has invalid length");
04675                                 if (type) *type |= TDENetworkConnectionErrorFlags::InvalidWirelessKey;
04676                                 return false;
04677                             }
04678                         }
04679                         if (wiFiConnection->securitySettings.wepKey1 != "") {
04680                             if ((wiFiConnection->securitySettings.wepKey1.length() != 10) && (wiFiConnection->securitySettings.wepKey1.length() != 26)) {
04681                                 if (reason) (*reason)[TDENetworkConnectionErrorFlags::InvalidWirelessKey] = i18n("WEP key 1 has invalid length");
04682                                 if (type) *type |= TDENetworkConnectionErrorFlags::InvalidWirelessKey;
04683                                 return false;
04684                             }
04685                         }
04686                         if (wiFiConnection->securitySettings.wepKey2 != "") {
04687                             if ((wiFiConnection->securitySettings.wepKey2.length() != 10) && (wiFiConnection->securitySettings.wepKey2.length() != 26)) {
04688                                 if (reason) (*reason)[TDENetworkConnectionErrorFlags::InvalidWirelessKey] = i18n("WEP key 2 has invalid length");
04689                                 if (type) *type |= TDENetworkConnectionErrorFlags::InvalidWirelessKey;
04690                                 return false;
04691                             }
04692                         }
04693                         if (wiFiConnection->securitySettings.wepKey3 != "") {
04694                             if ((wiFiConnection->securitySettings.wepKey3.length() != 10) && (wiFiConnection->securitySettings.wepKey3.length() != 26)) {
04695                                 if (reason) (*reason)[TDENetworkConnectionErrorFlags::InvalidWirelessKey] = i18n("WEP key 3 has invalid length");
04696                                 if (type) *type |= TDENetworkConnectionErrorFlags::InvalidWirelessKey;
04697                                 return false;
04698                             }
04699                         }
04700                         if ((wiFiConnection->securitySettings.wepKey0 == "") && (wiFiConnection->securitySettings.wepKey1 == "") && (wiFiConnection->securitySettings.wepKey2 == "") && (wiFiConnection->securitySettings.wepKey3 == "")) {
04701                             if (reason) (*reason)[TDENetworkConnectionErrorFlags::InvalidWirelessKey] = i18n("No WEP key(s) provided");
04702                             if (type) *type |= TDENetworkConnectionErrorFlags::InvalidWirelessKey;
04703                             return false;
04704                         }
04705                     }
04706                     else if (wiFiConnection->securitySettings.wepKeyType == TDENetworkWepKeyType::Ascii) {
04707                         if (wiFiConnection->securitySettings.wepKey0 != "") {
04708                             if ((wiFiConnection->securitySettings.wepKey0.length() != 5) && (wiFiConnection->securitySettings.wepKey0.length() != 13)) {
04709                                 if (reason) (*reason)[TDENetworkConnectionErrorFlags::InvalidWirelessKey] = i18n("WEP key 0 has invalid length");
04710                                 if (type) *type |= TDENetworkConnectionErrorFlags::InvalidWirelessKey;
04711                                 return false;
04712                             }
04713                         }
04714                         if (wiFiConnection->securitySettings.wepKey1 != "") {
04715                             if ((wiFiConnection->securitySettings.wepKey1.length() != 5) && (wiFiConnection->securitySettings.wepKey1.length() != 13)) {
04716                                 if (reason) (*reason)[TDENetworkConnectionErrorFlags::InvalidWirelessKey] = i18n("WEP key 1 has invalid length");
04717                                 if (type) *type |= TDENetworkConnectionErrorFlags::InvalidWirelessKey;
04718                                 return false;
04719                             }
04720                         }
04721                         if (wiFiConnection->securitySettings.wepKey2 != "") {
04722                             if ((wiFiConnection->securitySettings.wepKey2.length() != 5) && (wiFiConnection->securitySettings.wepKey2.length() != 13)) {
04723                                 if (reason) (*reason)[TDENetworkConnectionErrorFlags::InvalidWirelessKey] = i18n("WEP key 2 has invalid length");
04724                                 if (type) *type |= TDENetworkConnectionErrorFlags::InvalidWirelessKey;
04725                                 return false;
04726                             }
04727                         }
04728                         if (wiFiConnection->securitySettings.wepKey3 != "") {
04729                             if ((wiFiConnection->securitySettings.wepKey3.length() != 5) && (wiFiConnection->securitySettings.wepKey3.length() != 13)) {
04730                                 if (reason) (*reason)[TDENetworkConnectionErrorFlags::InvalidWirelessKey] = i18n("WEP key 3 has invalid length");
04731                                 if (type) *type |= TDENetworkConnectionErrorFlags::InvalidWirelessKey;
04732                                 return false;
04733                             }
04734                         }
04735                         if ((wiFiConnection->securitySettings.wepKey0 == "") && (wiFiConnection->securitySettings.wepKey1 == "") && (wiFiConnection->securitySettings.wepKey2 == "") && (wiFiConnection->securitySettings.wepKey3 == "")) {
04736                             if (reason) (*reason)[TDENetworkConnectionErrorFlags::InvalidWirelessKey] = i18n("No WEP key(s) provided");
04737                             if (type) *type |= TDENetworkConnectionErrorFlags::InvalidWirelessKey;
04738                             return false;
04739                         }
04740                     }
04741                     else if (wiFiConnection->securitySettings.wepKeyType == TDENetworkWepKeyType::Ascii) {
04742                         if ((wiFiConnection->securitySettings.wepKey0 == "") && (wiFiConnection->securitySettings.wepKey1 == "") && (wiFiConnection->securitySettings.wepKey2 == "") && (wiFiConnection->securitySettings.wepKey3 == "")) {
04743                             if (reason) (*reason)[TDENetworkConnectionErrorFlags::InvalidWirelessKey] = i18n("No WEP key(s) provided");
04744                             if (type) *type |= TDENetworkConnectionErrorFlags::InvalidWirelessKey;
04745                             return false;
04746                         }
04747                     }
04748                 }
04749                 else if ((wiFiConnection->securitySettings.keyType == TDENetworkWiFiKeyType::DynamicWEP) && (wiFiConnection->securitySettings.authType == TDENetworkWiFiAuthType::LEAP)) {
04750                     if ((wiFiConnection->securitySettings.leapUsername.length() < 1) || (wiFiConnection->securitySettings.leapPassword.length() < 1)) {
04751                         if (reason) (*reason)[TDENetworkConnectionErrorFlags::InvalidWirelessKey] = i18n("LEAP username and/or password not provided");
04752                         if (type) *type |= TDENetworkConnectionErrorFlags::InvalidWirelessKey;
04753                         return false;
04754                     }
04755                 }
04756                 else if ((wiFiConnection->securitySettings.keyType == TDENetworkWiFiKeyType::WPAAdHoc) || (wiFiConnection->securitySettings.keyType == TDENetworkWiFiKeyType::WPAInfrastructure) || (wiFiConnection->securitySettings.keyType == TDENetworkWiFiKeyType::WPAEnterprise)) {
04757                     if (wiFiConnection->securitySettings.psk.length() == 64) {
04758                         // Verify that only hex characters are present in the string
04759                         bool ok;
04760                         wiFiConnection->securitySettings.psk.toULongLong(&ok, 16);
04761                         if (!ok) {
04762                             if (reason) (*reason)[TDENetworkConnectionErrorFlags::InvalidWirelessKey] = i18n("Hexadecimal length PSK contains non-hexadecimal characters");
04763                             if (type) *type |= TDENetworkConnectionErrorFlags::InvalidWirelessKey;
04764                             return false;
04765                         }
04766                     }
04767                     else if ((wiFiConnection->securitySettings.psk.length() < 8) || (wiFiConnection->securitySettings.psk.length() > 63)) {
04768                         if (reason) (*reason)[TDENetworkConnectionErrorFlags::InvalidWirelessKey] = i18n("No PSK provided");
04769                         if (type) *type |= TDENetworkConnectionErrorFlags::InvalidWirelessKey;
04770                         return false;
04771                     }
04772                 }
04773             }
04774         }
04775     }
04776 
04777     return true;
04778 }
04779 
04780 TDENetworkConnectionStatus::TDENetworkConnectionStatus TDENetworkConnectionManager_BackendNM::initiateConnection(TQString uuid) {
04781     TQT_DBusObjectPath existingConnection;
04782     TQT_DBusError error;
04783     bool ret;
04784     if ((d->m_networkManagerSettings) && (d->m_networkManagerProxy)) {
04785         ret = d->m_networkManagerSettings->GetConnectionByUuid(uuid, existingConnection, error);
04786         if (ret) {
04787             if (!m_networkDevice) {
04788                 d->m_dbusDeviceString = "/";
04789             }
04790             else {
04791                 d->m_dbusDeviceString = deviceInterfaceString(deviceNode());
04792             }
04793             if (d->m_dbusDeviceString.isEmpty()) {
04794                 PRINT_ERROR(TQString("Invalid empty DBUS device string"))
04795                 return TDENetworkConnectionStatus::Invalid;
04796             }
04797 #ifndef USE_ASYNC_DBUS_CONNECTION_COMMAND_CALLS
04798             TQT_DBusObjectPath active_connection;
04799             ret = d->m_networkManagerProxy->ActivateConnection(existingConnection, TQT_DBusObjectPath(d->m_dbusDeviceString.ascii()), TQT_DBusObjectPath("/"), active_connection, error);
04800             if (ret && error.isValid()) {
04801                 ret = 0;
04802                 PRINT_ERROR((error.name() + ": " + error.message()))
04803             }
04804             return checkConnectionStatus(uuid);
04805 #else // USE_ASYNC_DBUS_CONNECTION_COMMAND_CALLS
04806 #ifdef WAIT_FOR_OPERATION_BEFORE_RETURNING
04807             connect(d->m_networkManagerProxy, SIGNAL(ActivateConnectionAsyncReply(int, const TQT_DBusObjectPath&)), d, SLOT(processAddConnectionAsyncReply(int, const TQT_DBusObjectPath&)));
04808             connect(d->m_networkManagerProxy, SIGNAL(AsyncErrorResponseDetected(int, const TQT_DBusError)), d, SLOT(processAddConnectionAsyncError(int, const TQT_DBusError)));
04809 #endif // WAIT_FOR_OPERATION_BEFORE_RETURNING
04810             int asyncCallID;
04811             ret = d->m_networkManagerProxy->ActivateConnectionAsync(asyncCallID, existingConnection, TQT_DBusObjectPath(d->m_dbusDeviceString.ascii()), TQT_DBusObjectPath("/"), error);
04812             if (ret && error.isValid()) {
04813                 ret = 0;
04814                 PRINT_ERROR((error.name() + ": " + error.message()))
04815             }
04816 #ifdef WAIT_FOR_OPERATION_BEFORE_RETURNING
04817             if (ret) {
04818                 // Wait for the asynchronous call to return...
04819                 d->nmConnectionSettingsAsyncCallWaiting[asyncCallID] = true;
04820                 TQTimer nmCallTimeoutTimer;
04821                 nmCallTimeoutTimer.start(NM_ASYNC_TIMEOUT_MS, true);
04822                 while (d->nmConnectionSettingsAsyncCallWaiting[asyncCallID]) {
04823                     if (!nmCallTimeoutTimer.isActive()) {
04824                         PRINT_ERROR(TQString("DBUS asynchronous call timed out!"))
04825                         break;
04826                     }
04827                     tqApp->processEvents();
04828                 }
04829                 d->nmConnectionSettingsAsyncCallWaiting.remove(asyncCallID);
04830                 if (d->nmAddConnectionAsyncErrorResponse.contains(asyncCallID)) {
04831                     PRINT_ERROR((d->nmAddConnectionAsyncErrorResponse[asyncCallID].name() + ": " + d->nmAddConnectionAsyncErrorResponse[asyncCallID].message()));
04832                     d->nmAddConnectionAsyncErrorResponse.remove(asyncCallID);
04833                 }
04834                 if (!d->nmAddConnectionAsyncResponse[asyncCallID].ascii()) {
04835                     PRINT_ERROR(TQString("NetworkManager did not return a new connection object!"))
04836                 }
04837                 if (d->nmAddConnectionAsyncResponse.contains(asyncCallID)) {
04838                     d->nmAddConnectionAsyncResponse.remove(asyncCallID);
04839                 }
04840                 return checkConnectionStatus(uuid);
04841             }
04842             else {
04843                 // Error!
04844                 PRINT_ERROR((error.name() + ": " + error.message()))
04845                 return checkConnectionStatus(uuid);
04846             }
04847 #else
04848             return checkConnectionStatus(uuid);
04849 #endif
04850 #endif // USE_ASYNC_DBUS_CONNECTION_COMMAND_CALLS
04851         }
04852         else {
04853             PRINT_WARNING(TQString("connection for provided uuid '%1' was not found").arg(uuid));
04854             return TDENetworkConnectionStatus::Invalid;
04855         }
04856     }
04857     else {
04858         PRINT_ERROR(TQString("invalid internal network-manager settings proxy object"));
04859         return TDENetworkConnectionStatus::Invalid;
04860     }
04861 }
04862 
04863 TDENetworkConnectionStatus::TDENetworkConnectionStatus TDENetworkConnectionManager_BackendNM::checkConnectionStatus(TQString uuid) {
04864     TQT_DBusObjectPath existingConnection;
04865     TQT_DBusError error;
04866     if (d->m_networkManagerProxy) {
04867         TQT_DBusObjectPathList activeConnections = d->m_networkManagerProxy->getActiveConnections(error);
04868         TQT_DBusObjectPathList::iterator it;
04869         for (it = activeConnections.begin(); it != activeConnections.end(); ++it) {
04870             DBus::ActiveConnectionProxy activeConnection(NM_DBUS_SERVICE, (*it));
04871             activeConnection.setConnection(TQT_DBusConnection::systemBus());
04872             if (activeConnection.getUuid(error) == uuid) {
04873                 return nmDeviceStateToTDEDeviceState(activeConnection.getState(error));
04874             }
04875         }
04876         PRINT_WARNING(TQString("active connection for provided uuid '%1' was not found").arg(uuid));
04877         return TDENetworkConnectionStatus::Invalid;
04878     }
04879     else {
04880         PRINT_ERROR(TQString("invalid internal network-manager settings proxy object"));
04881         return TDENetworkConnectionStatus::Invalid;
04882     }
04883 }
04884 
04885 TQT_DBusObjectPath TDENetworkConnectionManager_BackendNM::getActiveConnectionPath(TQString uuid) {
04886     TQT_DBusObjectPath existingConnection;
04887     TQT_DBusError error;
04888     if (d->m_networkManagerProxy) {
04889         TQT_DBusObjectPathList activeConnections = d->m_networkManagerProxy->getActiveConnections(error);
04890         TQT_DBusObjectPathList::iterator it;
04891         for (it = activeConnections.begin(); it != activeConnections.end(); ++it) {
04892             DBus::ActiveConnectionProxy activeConnection(NM_DBUS_SERVICE, (*it));
04893             activeConnection.setConnection(TQT_DBusConnection::systemBus());
04894             if (activeConnection.getUuid(error) == uuid) {
04895                 return (*it);
04896             }
04897         }
04898         PRINT_WARNING(TQString("active connection for provided uuid '%1' was not found").arg(uuid));
04899         return TQT_DBusObjectPath();
04900     }
04901     else {
04902         PRINT_ERROR(TQString("invalid internal network-manager settings proxy object"));
04903         return TQT_DBusObjectPath();
04904     }
04905 }
04906 
04907 TQStringList TDENetworkConnectionManager_BackendNM::connectionPhysicalDeviceUUIDs(TQString uuid) {
04908     if (deviceType() == TDENetworkDeviceType::BackendOnly) {
04909         return TQStringList();
04910     }
04911 
04912     TQT_DBusObjectPath existingConnection;
04913     TQT_DBusError error;
04914     if (d->m_networkManagerProxy) {
04915         TQT_DBusObjectPathList activeConnections = d->m_networkManagerProxy->getActiveConnections(error);
04916         TQT_DBusObjectPathList::iterator it;
04917         TQStringList ret;
04918         for (it = activeConnections.begin(); it != activeConnections.end(); ++it) {
04919             DBus::ActiveConnectionProxy activeConnection(NM_DBUS_SERVICE, (*it));
04920             activeConnection.setConnection(TQT_DBusConnection::systemBus());
04921             if (activeConnection.getUuid(error) == uuid) {
04922                 TQValueList<TQT_DBusObjectPath> deviceList = activeConnection.getDevices(error);
04923                 TQT_DBusObjectPathList::iterator it2;
04924                 for (it2 = deviceList.begin(); it2 != deviceList.end(); ++it2) {
04925                     TQString devUUID = tdeDeviceUUIDForGenericDevice(*it2);
04926                     if (devUUID != "") {
04927                         ret.append(devUUID);
04928                     }
04929                 }
04930             }
04931         }
04932         return ret;
04933     }
04934     else {
04935         PRINT_ERROR(TQString("invalid internal network-manager settings proxy object"));
04936         return TQStringList();
04937     }
04938 }
04939 
04940 TDENetworkVPNTypeList TDENetworkConnectionManager_BackendNM::availableVPNTypes() {
04941     TDENetworkVPNTypeList ret;
04942 
04943     // Query NetworkManager to verify plugin availability before claiming support for a VPN type
04944     TQDir serviceDir(NM_PLUGIN_SERVICE_DIR, TQString(), TQDir::Name|TQDir::IgnoreCase, TQDir::Files);
04945     TQStringList services = serviceDir.entryList ().grep (".name", true);
04946 
04947     if (services.count () > 0) {
04948         // read in all available Services
04949         for (TQStringList::Iterator i = services.begin (); i != services.end (); ++i) {
04950             TQString service = NM_PLUGIN_SERVICE_DIR + TQString ("/") + *i;
04951             TDEConfig* tdeconfig = new TDEConfig (service, true, true, "config");
04952             tdeconfig->setGroup ("VPN Connection");
04953 
04954             TQString serviceName = tdeconfig->readEntry("name", TQString());
04955             serviceName = serviceName.lower();
04956 
04957             if (serviceName == "openvpn") {
04958                 ret.append(TDENetworkVPNType::OpenVPN);
04959             }
04960             if (serviceName == "pptp") {
04961                 ret.append(TDENetworkVPNType::PPTP);
04962             }
04963             if (serviceName == "strongswan") {
04964                 ret.append(TDENetworkVPNType::StrongSwan);
04965             }
04966             if (serviceName == "vpnc") {
04967                 ret.append(TDENetworkVPNType::VPNC);
04968             }
04969 
04970             delete tdeconfig;
04971         }
04972     }
04973 
04974     return ret;
04975 }
04976 
04977 TDENetworkConnectionStatus::TDENetworkConnectionStatus TDENetworkConnectionManager_BackendNM::deactivateConnection(TQString uuid) {
04978     TQT_DBusObjectPath existingConnection;
04979     TQT_DBusError error;
04980     bool ret;
04981     if ((d->m_networkManagerSettings) && (d->m_networkManagerProxy)) {
04982         existingConnection = getActiveConnectionPath(uuid);
04983         if (existingConnection.isValid()) {
04984             if (!m_networkDevice) {
04985                 d->m_dbusDeviceString = "/";
04986             }
04987             else {
04988                 d->m_dbusDeviceString = deviceInterfaceString(deviceNode());
04989             }
04990             if (d->m_dbusDeviceString.isEmpty()) {
04991                 PRINT_ERROR(TQString("Invalid empty DBUS device string"))
04992                 return TDENetworkConnectionStatus::Invalid;
04993             }
04994 #ifndef USE_ASYNC_DBUS_CONNECTION_COMMAND_CALLS
04995             ret = d->m_networkManagerProxy->DeactivateConnection(existingConnection, error);
04996             if (ret && error.isValid()) {
04997                 ret = 0;
04998                 PRINT_ERROR((error.name() + ": " + error.message()))
04999             }
05000             return checkConnectionStatus(uuid);
05001 #else // USE_ASYNC_DBUS_CONNECTION_COMMAND_CALLS
05002 #ifdef WAIT_FOR_OPERATION_BEFORE_RETURNING
05003             connect(d->m_networkManagerProxy, SIGNAL(DeactivateConnectionAsyncReply(int)), d, SLOT(processConnectionSettingsUpdateAsyncReply(int)));
05004 #endif // WAIT_FOR_OPERATION_BEFORE_RETURNING
05005             int asyncCallID;
05006             ret = d->m_networkManagerProxy->DeactivateConnectionAsync(asyncCallID, existingConnection, error);
05007             if (ret && error.isValid()) {
05008                 ret = 0;
05009                 PRINT_ERROR((error.name() + ": " + error.message()))
05010             }
05011 #ifdef WAIT_FOR_OPERATION_BEFORE_RETURNING
05012             if (ret) {
05013                 // Wait for the asynchronous call to return...
05014                 d->nmConnectionSettingsAsyncCallWaiting[asyncCallID] = true;
05015                 TQTimer nmCallTimeoutTimer;
05016                 nmCallTimeoutTimer.start(NM_ASYNC_TIMEOUT_MS, true);
05017                 while (d->nmConnectionSettingsAsyncCallWaiting[asyncCallID]) {
05018                     if (!nmCallTimeoutTimer.isActive()) {
05019                         PRINT_ERROR(TQString("DBUS asynchronous call timed out!"))
05020                         break;
05021                     }
05022                     tqApp->processEvents();
05023                 }
05024                 d->nmConnectionSettingsAsyncCallWaiting.remove(asyncCallID);
05025                 return checkConnectionStatus(uuid);
05026             }
05027             else {
05028                 // Error!
05029                 PRINT_ERROR((error.name() + ": " + error.message()))
05030                 return checkConnectionStatus(uuid);
05031             }
05032 #else
05033             return checkConnectionStatus(uuid);
05034 #endif
05035 #endif // USE_ASYNC_DBUS_CONNECTION_COMMAND_CALLS
05036         }
05037         else {
05038             PRINT_WARNING(TQString("connection for provided uuid '%1' was not found").arg(uuid));
05039             return TDENetworkConnectionStatus::Invalid;
05040         }
05041     }
05042     else {
05043         PRINT_ERROR(TQString("invalid internal network-manager settings proxy object"));
05044         return TDENetworkConnectionStatus::Invalid;
05045     }
05046 }
05047 
05048 TQStringList TDENetworkConnectionManager_BackendNM::validSettings() {
05049     TQStringList ret;
05050 
05051     ret.append("TDENetworkSingleIPConfiguration::ipAddress");
05052     ret.append("TDENetworkSingleIPConfiguration::networkMask");
05053     ret.append("TDENetworkSingleIPConfiguration::gateway");
05054 
05055     ret.append("TDENetworkSingleRouteConfiguration::ipAddress");
05056     ret.append("TDENetworkSingleRouteConfiguration::networkMask");
05057     ret.append("TDENetworkSingleRouteConfiguration::gateway");
05058 
05059     ret.append("TDENetworkIEEE8021xConfiguration::valid");
05060     ret.append("TDENetworkIEEE8021xConfiguration::allowedValid");
05061     ret.append("TDENetworkIEEE8021xConfiguration::secretsValid");
05062     ret.append("TDENetworkIEEE8021xConfiguration::type");
05063     ret.append("TDENetworkIEEE8021xConfiguration::userName");
05064     ret.append("TDENetworkIEEE8021xConfiguration::anonymousUserName");
05065     ret.append("TDENetworkIEEE8021xConfiguration::pacFileName");
05066     ret.append("TDENetworkIEEE8021xConfiguration::caCertificate");
05067     ret.append("TDENetworkIEEE8021xConfiguration::additionalCAFilesPath");
05068     ret.append("TDENetworkIEEE8021xConfiguration::authServerCertSubjectMatch");
05069     ret.append("TDENetworkIEEE8021xConfiguration::alternateAuthServerCertSubjectMatch");
05070     ret.append("TDENetworkIEEE8021xConfiguration::clientCertificate");
05071     ret.append("TDENetworkIEEE8021xConfiguration::forcePEAPVersion");
05072     ret.append("TDENetworkIEEE8021xConfiguration::forcePEAPLabel");
05073     ret.append("TDENetworkIEEE8021xConfiguration::fastProvisioningFlags");
05074     ret.append("TDENetworkIEEE8021xConfiguration::phase2NonEAPAuthMethod");
05075     ret.append("TDENetworkIEEE8021xConfiguration::phase2EAPAuthMethod");
05076     ret.append("TDENetworkIEEE8021xConfiguration::allowedPhase2NonEAPMethods");
05077     ret.append("TDENetworkIEEE8021xConfiguration::allowedPhase2EAPMethods");
05078     ret.append("TDENetworkIEEE8021xConfiguration::phase2CaCertificate");
05079     ret.append("TDENetworkIEEE8021xConfiguration::phase2CaFilesPath");
05080     ret.append("TDENetworkIEEE8021xConfiguration::phase2AuthServerCertSubjectMatch");
05081     ret.append("TDENetworkIEEE8021xConfiguration::phase2AlternateAuthServerCertSubjectMatch");
05082     ret.append("TDENetworkIEEE8021xConfiguration::phase2ClientCertificate");
05083     ret.append("TDENetworkIEEE8021xConfiguration::password");
05084     ret.append("TDENetworkIEEE8021xConfiguration::passwordFlags");
05085     ret.append("TDENetworkIEEE8021xConfiguration::binaryPassword");
05086     ret.append("TDENetworkIEEE8021xConfiguration::binaryPasswordFlags");
05087     ret.append("TDENetworkIEEE8021xConfiguration::privateKey");
05088     ret.append("TDENetworkIEEE8021xConfiguration::privateKeyPassword");
05089     ret.append("TDENetworkIEEE8021xConfiguration::privateKeyPasswordFlags");
05090     ret.append("TDENetworkIEEE8021xConfiguration::phase2PrivateKey");
05091     ret.append("TDENetworkIEEE8021xConfiguration::phase2PrivateKeyPassword");
05092     ret.append("TDENetworkIEEE8021xConfiguration::phase2PrivateKeyPasswordFlags");
05093     ret.append("TDENetworkIEEE8021xConfiguration::forceSystemCaCertificates");
05094 
05095     ret.append("TDENetworkPPPConfiguration::valid");
05096     ret.append("TDENetworkPPPConfiguration::requireServerAuthentication");
05097     ret.append("TDENetworkPPPConfiguration::flags");
05098     ret.append("TDENetworkPPPConfiguration::baudRate");
05099     ret.append("TDENetworkPPPConfiguration::mru");
05100     ret.append("TDENetworkPPPConfiguration::mtu");
05101     ret.append("TDENetworkPPPConfiguration::lcpEchoPingInterval");
05102     ret.append("TDENetworkPPPConfiguration::lcpEchoFailureThreshold");
05103 
05104     ret.append("TDENetworkPPPOEConfiguration::valid");
05105     ret.append("TDENetworkPPPOEConfiguration::secretsValid");
05106     ret.append("TDENetworkPPPOEConfiguration::networkServiceProvider");
05107     ret.append("TDENetworkPPPOEConfiguration::username");
05108     ret.append("TDENetworkPPPOEConfiguration::password");
05109     ret.append("TDENetworkPPPOEConfiguration::passwordFlags");
05110 
05111     ret.append("TDENetworkSerialConfiguration::valid");
05112     ret.append("TDENetworkSerialConfiguration::baudRate");
05113     ret.append("TDENetworkSerialConfiguration::byteWidth");
05114     ret.append("TDENetworkSerialConfiguration::parity");
05115     ret.append("TDENetworkSerialConfiguration::stopBits");
05116     ret.append("TDENetworkSerialConfiguration::txDelay");
05117 
05118     ret.append("TDENetworkCDMAConfiguration::valid");
05119     ret.append("TDENetworkCDMAConfiguration::secretsValid");
05120     ret.append("TDENetworkCDMAConfiguration::providerDataNumber");
05121     ret.append("TDENetworkCDMAConfiguration::username");
05122     ret.append("TDENetworkCDMAConfiguration::password");
05123     ret.append("TDENetworkCDMAConfiguration::passwordFlags");
05124 
05125     ret.append("TDENetworkGSMConfiguration::valid");
05126     ret.append("TDENetworkGSMConfiguration::secretsValid");
05127     ret.append("TDENetworkGSMConfiguration::providerDataNumber");
05128     ret.append("TDENetworkGSMConfiguration::username");
05129     ret.append("TDENetworkGSMConfiguration::password");
05130     ret.append("TDENetworkGSMConfiguration::passwordFlags");
05131     ret.append("TDENetworkGSMConfiguration::accessPointName");
05132     ret.append("TDENetworkGSMConfiguration::networkID");
05133     ret.append("TDENetworkGSMConfiguration::networkType");
05134     ret.append("TDENetworkGSMConfiguration::pin");
05135     ret.append("TDENetworkGSMConfiguration::pinFlags");
05136     ret.append("TDENetworkGSMConfiguration::allowedFrequencyBands");
05137     ret.append("TDENetworkGSMConfiguration::allowRoaming");
05138 
05139     ret.append("TDENetworkWiFiSecurityConfiguration::valid");
05140     ret.append("TDENetworkWiFiSecurityConfiguration::secretsValid");
05141     ret.append("TDENetworkWiFiSecurityConfiguration::keyType");
05142     ret.append("TDENetworkWiFiSecurityConfiguration::authType");
05143     ret.append("TDENetworkWiFiSecurityConfiguration::wpaVersion");
05144     ret.append("TDENetworkWiFiSecurityConfiguration::cipher");
05145     ret.append("TDENetworkWiFiSecurityConfiguration::wepKey0");
05146     ret.append("TDENetworkWiFiSecurityConfiguration::wepKey1");
05147     ret.append("TDENetworkWiFiSecurityConfiguration::wepKey2");
05148     ret.append("TDENetworkWiFiSecurityConfiguration::wepKey3");
05149     ret.append("TDENetworkWiFiSecurityConfiguration::wepKeyFlags");
05150     ret.append("TDENetworkWiFiSecurityConfiguration::wepKeyIndex");
05151     ret.append("TDENetworkWiFiSecurityConfiguration::wepKeyType");
05152     ret.append("TDENetworkWiFiSecurityConfiguration::allowedPairWiseCiphers");
05153     ret.append("TDENetworkWiFiSecurityConfiguration::allowedGroupWiseCiphers");
05154     ret.append("TDENetworkWiFiSecurityConfiguration::psk");
05155     ret.append("TDENetworkWiFiSecurityConfiguration::pskFlags");
05156     ret.append("TDENetworkWiFiSecurityConfiguration::leapUsername");
05157     ret.append("TDENetworkWiFiSecurityConfiguration::leapPassword");
05158     ret.append("TDENetworkWiFiSecurityConfiguration::leapPasswordFlags");
05159 
05160     ret.append("TDENetworkIPConfiguration::valid");
05161     ret.append("TDENetworkIPConfiguration::connectionFlags");
05162     ret.append("TDENetworkIPConfiguration::ipConfigurations");
05163     ret.append("TDENetworkIPConfiguration::routeConfigurations");
05164     ret.append("TDENetworkIPConfiguration::broadcast");
05165     ret.append("TDENetworkIPConfiguration::destination");
05166     ret.append("TDENetworkIPConfiguration::resolvers");
05167     ret.append("TDENetworkIPConfiguration::searchDomains");
05168     ret.append("TDENetworkIPConfiguration::dhcpClientIdentifier");
05169 
05170     ret.append("TDENetworkConnection::UUID");
05171     ret.append("TDENetworkConnection::friendlyName");
05172     ret.append("TDENetworkConnection::ipConfig");
05173     ret.append("TDENetworkConnection::lockedHWAddress");
05174     ret.append("TDENetworkConnection::manualHWAddress");
05175     ret.append("TDENetworkConnection::readOnly");
05176     ret.append("TDENetworkConnection::autoConnect");
05177     ret.append("TDENetworkConnection::fullDuplex");
05178     ret.append("TDENetworkConnection::requireIPV4");
05179     ret.append("TDENetworkConnection::requireIPV6");
05180     ret.append("TDENetworkConnection::mtu");
05181     ret.append("TDENetworkConnection::eapConfig");
05182     ret.append("TDENetworkConnection::pppConfig");
05183     ret.append("TDENetworkConnection::pppoeConfig");
05184     ret.append("TDENetworkConnection::serialConfig");
05185     ret.append("TDENetworkConnection::authorizedUsers");
05186     ret.append("TDENetworkConnection::masterConnectionUUID");
05187     ret.append("TDENetworkConnection::slaveType");
05188     ret.append("TDENetworkConnection::lastKnownConnection");
05189 
05190     ret.append("TDEWiFiConnection::SSID");
05191     ret.append("TDEWiFiConnection::operatingMode");
05192     ret.append("TDEWiFiConnection::bandRestriction");
05193     ret.append("TDEWiFiConnection::channelRestriction");
05194     ret.append("TDEWiFiConnection::bitRateRestriction");
05195     ret.append("TDEWiFiConnection::powerRestriction");
05196     ret.append("TDEWiFiConnection::accessPointRestriction");
05197     ret.append("TDEWiFiConnection::blacklistedBSSIDs");
05198     ret.append("TDEWiFiConnection::heardBSSIDs");
05199     ret.append("TDEWiFiConnection::isHiddenNetwork");
05200     ret.append("TDEWiFiConnection::securityRequired");
05201     ret.append("TDEWiFiConnection::securitySettings");
05202 
05203     ret.append("TDEWiredInfinibandConnection::transportMode");
05204 
05205     ret.append("TDEVPNConnection::vpnPluginID");
05206     ret.append("TDEVPNConnection::lockedUserName");
05207     ret.append("TDEVPNConnection::pluginData");
05208     ret.append("TDEVPNConnection::secretsValid");
05209     ret.append("TDEVPNConnection::pluginSecrets");
05210 
05211     ret.append("TDEWiMaxConnection::networkServiceProvider");
05212 
05213     ret.append("TDEVLANConnection::kernelName");
05214     ret.append("TDEVLANConnection::parentConnectionUUID");
05215     ret.append("TDEVLANConnection::vlanID");
05216     ret.append("TDEVLANConnection::vlanFlags");
05217     ret.append("TDEVLANConnection::ingressPriorityMap");
05218     ret.append("TDEVLANConnection::egressPriorityMap");
05219 
05220     ret.append("TDEOLPCMeshConnection::SSID");
05221     ret.append("TDEOLPCMeshConnection::channel");
05222     ret.append("TDEOLPCMeshConnection::anycastDHCPHWAddress");
05223 
05224     ret.append("TDEBluetoothConnection::type");
05225 
05226     ret.append("TDEModemConnection::type");
05227     ret.append("TDEModemConnection::cdmaConfig");
05228     ret.append("TDEModemConnection::gsmConfig");
05229 
05230     ret.append("TDEWiredInfinibandConnection::transportMode");
05231 
05232     return ret;
05233 }
05234 
05235 TDENetworkWiFiAPInfo* TDENetworkConnectionManager_BackendNM::getAccessPointDetails(TQString dbusPath) {
05236     if (dbusPath == "") {
05237         return NULL;
05238     }
05239 
05240     TDENetworkWiFiAPInfo* apInfo = new TDENetworkWiFiAPInfo;
05241     TQT_DBusError error;
05242     unsigned int index;
05243     DBus::AccessPointProxy accessPoint(NM_DBUS_SERVICE, dbusPath);
05244     accessPoint.setConnection(TQT_DBusConnection::systemBus());
05245 
05246     TQValueList<TQ_UINT8> nmSSID = accessPoint.getSsid(error);
05247     if (error.isValid()) {
05248         delete apInfo;
05249         return NULL;
05250     }
05251     TQValueList<TQ_UINT8>::iterator it;
05252     index = 0;
05253     for (it = nmSSID.begin(); it != nmSSID.end(); ++it) {
05254         apInfo->SSID.resize(index+1);
05255         apInfo->SSID[index] = (*it);
05256         index++;
05257     }
05258 
05259     apInfo->wpaFlags = nmAPSecFlagsToTDEAPSecFlags(accessPoint.getFlags(error), accessPoint.getWpaFlags(error));
05260     apInfo->rsnFlags = nmAPSecFlagsToTDEAPSecFlags(accessPoint.getFlags(error), accessPoint.getRsnFlags(error));
05261     apInfo->frequency = accessPoint.getFrequency(error);
05262     apInfo->BSSID.fromString(accessPoint.getHwAddress(error));
05263     apInfo->maxBitrate = accessPoint.getMaxBitrate(error);
05264     apInfo->signalQuality = (accessPoint.getStrength(error)/100.0);
05265 
05266     apInfo->valid = true;
05267 
05268     return apInfo;
05269 }
05270 
05271 TDENetworkHWNeighborList* TDENetworkConnectionManager_BackendNM::siteSurvey() {
05272     TQT_DBusError error;
05273     bool ret;
05274 
05275     TDENetworkDeviceType::TDENetworkDeviceType myDeviceType = deviceType();
05276     d->m_dbusDeviceString = deviceInterfaceString(deviceNode());
05277     clearTDENetworkHWNeighborList();
05278 
05279     if (myDeviceType == TDENetworkDeviceType::WiFi) {
05280         if (!d->m_dbusDeviceString.isEmpty()) {
05281             DBus::WiFiDeviceProxy wiFiDevice(NM_DBUS_SERVICE, d->m_dbusDeviceString);
05282             wiFiDevice.setConnection(TQT_DBusConnection::systemBus());
05283             // FIXME
05284             // Should call wiFiDevice.RequestScanAsync first to rescan all access points
05285             TQT_DBusObjectPathList accessPoints;
05286             ret = wiFiDevice.GetAccessPoints(accessPoints, error);
05287             if (ret) {
05288                 TQT_DBusObjectPathList::iterator it;
05289                 for (it = accessPoints.begin(); it != accessPoints.end(); ++it) {
05290                     TDENetworkWiFiAPInfo* apInfo = getAccessPointDetails(TQString(*it));
05291                     if (apInfo) {
05292                         m_hwNeighborList->append(apInfo);
05293                         // Ensure that this AP is monitored for changes
05294                         d->internalProcessWiFiAccessPointAdded(*it);
05295                     }
05296                 }
05297             }
05298         }
05299     }
05300 
05301     return m_hwNeighborList;
05302 }
05303 
05304 bool TDENetworkConnectionManager_BackendNM::networkingEnabled() {
05305     if (d->m_networkManagerProxy) {
05306         bool ret;
05307         TQT_DBusError error;
05308         ret = d->m_networkManagerProxy->getNetworkingEnabled(error);
05309         if (error.isValid()) {
05310             // Error!
05311             PRINT_ERROR((error.name() + ": " + error.message()))
05312             return false;
05313         }
05314         else {
05315             return ret;
05316         }
05317     }
05318     else {
05319         return false;
05320     }
05321 }
05322 
05323 bool TDENetworkConnectionManager_BackendNM::wiFiHardwareEnabled() {
05324     if (d->m_networkManagerProxy) {
05325         bool ret;
05326         TQT_DBusError error;
05327         ret = d->m_networkManagerProxy->getWirelessHardwareEnabled(error);
05328         if (error.isValid()) {
05329             // Error!
05330             PRINT_ERROR((error.name() + ": " + error.message()))
05331             return false;
05332         }
05333         else {
05334             return ret;
05335         }
05336     }
05337     else {
05338         return false;
05339     }
05340 }
05341 
05342 bool TDENetworkConnectionManager_BackendNM::enableNetworking(bool enable) {
05343     // FIXME
05344     // Yes, this abuses the Sleep command
05345     // Is there a better way to do it?
05346     if (d->m_networkManagerProxy) {
05347         int asynccallid;
05348         TQT_DBusError error;
05349         d->m_networkManagerProxy->SleepAsync(asynccallid, !enable, error);
05350         if (error.isValid()) {
05351             // Error!
05352             PRINT_ERROR((error.name() + ": " + error.message()))
05353             return false;
05354         }
05355         else {
05356             // FIXME
05357             // Wait for async reply before returning...
05358             return true;
05359         }
05360     }
05361     else {
05362         return false;
05363     }
05364 }
05365 
05366 bool TDENetworkConnectionManager_BackendNM::enableWiFi(bool enable) {
05367     if (d->m_networkManagerProxy) {
05368         TQT_DBusError error;
05369         d->m_networkManagerProxy->setWirelessEnabled(enable, error);
05370         if (error.isValid()) {
05371             // Error!
05372             PRINT_ERROR((error.name() + ": " + error.message()))
05373             return false;
05374         }
05375         else {
05376             return true;
05377         }
05378     }
05379     else {
05380         return false;
05381     }
05382 }
05383 
05384 bool TDENetworkConnectionManager_BackendNM::wiFiEnabled() {
05385     if (d->m_networkManagerProxy) {
05386         bool ret;
05387         TQT_DBusError error;
05388         ret = d->m_networkManagerProxy->getWirelessEnabled(error);
05389         if (error.isValid()) {
05390             // Error!
05391             PRINT_ERROR((error.name() + ": " + error.message()))
05392             return false;
05393         }
05394         else {
05395             return ret;
05396         }
05397     }
05398     else {
05399         return false;
05400     }
05401 }
05402 
05403 TQStringList TDENetworkConnectionManager_BackendNM::defaultNetworkDevices() {
05404     // Cycle through all available connections and see which one is default, then find all devices for that connection...
05405     TQStringList ret;
05406 
05407     TQT_DBusObjectPath existingConnection;
05408     TQT_DBusError error;
05409     if (d->m_networkManagerProxy) {
05410         TQT_DBusObjectPathList activeConnections = d->m_networkManagerProxy->getActiveConnections(error);
05411         TQT_DBusObjectPathList::iterator it;
05412         for (it = activeConnections.begin(); it != activeConnections.end(); ++it) {
05413             DBus::ActiveConnectionProxy activeConnection(NM_DBUS_SERVICE, (*it));
05414             activeConnection.setConnection(TQT_DBusConnection::systemBus());
05415             if (activeConnection.getDefault(error)) {
05416                 // This is the default ipv4 connection
05417                 TQString uuid = activeConnection.getUuid(error);
05418                 TQStringList devices = connectionPhysicalDeviceUUIDs(uuid);
05419                 for (TQStringList::Iterator it2 = devices.begin(); it2 != devices.end(); ++it2) {
05420                     ret.append(*it);
05421                 }
05422             }
05423             else if (activeConnection.getDefault6(error)) {
05424                 // This is the default ipv6 connection
05425                 TQString uuid = activeConnection.getUuid(error);
05426                 TQStringList devices = connectionPhysicalDeviceUUIDs(uuid);
05427                 for (TQStringList::Iterator it2 = devices.begin(); it2 != devices.end(); ++it2) {
05428                     ret.append(*it);
05429                 }
05430             }
05431         }
05432         return ret;
05433     }
05434     else {
05435         PRINT_ERROR(TQString("invalid internal network-manager settings proxy object"));
05436         return TQStringList();
05437     }
05438 }
05439 
05440 TDENetworkConnectionManager_BackendNMPrivate::TDENetworkConnectionManager_BackendNMPrivate(TDENetworkConnectionManager_BackendNM* parent) : m_networkManagerProxy(NULL), m_networkManagerSettings(NULL), m_networkDeviceProxy(NULL), m_wiFiDeviceProxy(NULL), m_vpnProxy(NULL), nonReentrantCallActive(false), vpn_service_error_notified(false), device_autoconnect_error_notified(false), m_parent(parent), m_prevDeviceState(-1) {
05441     // Set up global signal handler
05442     m_dbusSignalConnection = new TQT_DBusConnection(TQT_DBusConnection::systemBus());
05443     m_dbusSignalReceiver = new TDENetworkConnectionManager_BackendNM_DBusSignalReceiver(this);
05444     m_dbusSignalConnection->connect(m_dbusSignalReceiver, TQT_SLOT(dbusSignal(const TQT_DBusMessage&)));
05445 }
05446 
05447 TDENetworkConnectionManager_BackendNMPrivate::~TDENetworkConnectionManager_BackendNMPrivate() {
05448     // Destroy global signal handler
05449     if (m_dbusSignalConnection) delete m_dbusSignalConnection;
05450     if (m_dbusSignalReceiver) delete m_dbusSignalReceiver;
05451 
05452     // Destroy proxy objects
05453     TQMap<TQString, DBus::AccessPointProxy*>::iterator it;
05454     for (it = m_accessPointProxyList.begin(); it != m_accessPointProxyList.end(); ++it) {
05455         DBus::AccessPointProxy *apProxy = it.data();
05456         if (apProxy) {
05457             delete apProxy;
05458         }
05459     }
05460     m_accessPointProxyList.clear();
05461 }
05462 
05463 #include "network-manager.moc"
05464 #include "network-manager_p.moc"

tdecore

Skip menu "tdecore"
  • Main Page
  • Modules
  • Namespace List
  • Class Hierarchy
  • Alphabetical List
  • Class List
  • File List
  • Namespace Members
  • Class Members
  • Related Pages

tdecore

Skip menu "tdecore"
  • arts
  • dcop
  • dnssd
  • interfaces
  •   kspeech
  •     interface
  •     library
  •   tdetexteditor
  • kate
  • kded
  • kdoctools
  • kimgio
  • kjs
  • libtdemid
  • libtdescreensaver
  • tdeabc
  • tdecmshell
  • tdecore
  • tdefx
  • tdehtml
  • tdeinit
  • tdeio
  •   bookmarks
  •   httpfilter
  •   kpasswdserver
  •   kssl
  •   tdefile
  •   tdeio
  •   tdeioexec
  • tdeioslave
  •   http
  • tdemdi
  •   tdemdi
  • tdenewstuff
  • tdeparts
  • tdeprint
  • tderandr
  • tderesources
  • tdespell2
  • tdesu
  • tdeui
  • tdeunittest
  • tdeutils
  • tdewallet
Generated for tdecore by doxygen 1.7.6.1
This website is maintained by Timothy Pearson.