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"
Trinity API Reference