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

tdecore

  • tdecore
  • tdehw
  • networkbackends
  • network-manager
network-manager.cpp
1 /* This file is part of the TDE libraries
2  Copyright (C) 2012 Timothy Pearson <kb9vqf@pearsoncomputing.net>
3 
4  This library is free software; you can redistribute it and/or
5  modify it under the terms of the GNU Library General Public
6  License version 2 as published by the Free Software Foundation.
7 
8  This library is distributed in the hope that it will be useful,
9  but WITHOUT ANY WARRANTY; without even the implied warranty of
10  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11  Library General Public License for more details.
12 
13  You should have received a copy of the GNU Library General Public License
14  along with this library; see the file COPYING.LIB. If not, write to
15  the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
16  Boston, MA 02110-1301, USA.
17 */
18 
19 #include <tqdir.h>
20 
21 #include <tqdbusmessage.h>
22 
23 #include "tdeconfig.h"
24 #include "tdehardwaredevices.h"
25 #include "tdenetworkdevice.h"
26 
27 #include "network-manager.h"
28 #include "network-manager_p.h"
29 
30 // #define DEBUG_NETWORK_MANAGER_COMMUNICATIONS
31 
32 #define PRINT_ERROR(x) printf("[TDE NM Backend ERROR] [%s:%d] %s\n", __FILE__, __LINE__, x.ascii());
33 
34 #ifdef DEBUG_NETWORK_MANAGER_COMMUNICATIONS
35 #define PRINT_WARNING(x) printf("[TDE NM Backend WARNING] [%s:%d] %s\n", __FILE__, __LINE__, x.ascii());
36 #else
37 #define PRINT_WARNING(x)
38 #endif
39 
40 #define UPDATE_STRING_SETTING_IF_VALID(string, key, settingsMap) \
41  if (!string.isNull()) { settingsMap[key] = (TQT_DBusData::fromString(string)).getAsVariantData(); } \
42  else { settingsMap.remove(key); }
43 
44 #define NM_ASYNC_TIMEOUT_MS 1000
45 // Give the user 5 minutes to authenticate to DBUS before timing out
46 #define NM_ASYNC_SECRETS_INTERACTION_TIMEOUT_MS (5*60*1000)
47 
48 // #define WAIT_FOR_OPERATION_BEFORE_RETURNING 1
49 #define USE_ASYNC_DBUS_CONNECTION_COMMAND_CALLS 1
50 
51 TQ_UINT32 reverseIPV4ByteOrder(TQ_UINT32 address) {
52  TQ_UINT32 ret;
53  unsigned char valuearray[4];
54  valuearray[0] = (address & 0xff000000) >> 24;
55  valuearray[1] = (address & 0x00ff0000) >> 16;
56  valuearray[2] = (address & 0x0000ff00) >> 8;
57  valuearray[3] = (address & 0x000000ff) >> 0;
58  ret = 0;
59  ret = ret | (valuearray[0] << 0);
60  ret = ret | (valuearray[1] << 8);
61  ret = ret | (valuearray[2] << 16);
62  ret = ret | (valuearray[3] << 24);
63  return ret;
64 }
65 
66 void printDBUSObjectStructure(TQT_DBusData object, int level=0, TQString mapKey=TQString::null) {
67  int i;
68  TQString levelIndent = "";
69  for (i=0; i<level; i++) {
70  levelIndent = levelIndent + " ";
71  }
72  TQCString signature = object.buildDBusSignature();
73 
74  if (object.type() == TQT_DBusData::String) {
75  printf("%s%s\t%s%s'%s'\n", levelIndent.ascii(), signature.data(), (mapKey.isNull())?"":mapKey.ascii(), (mapKey.isNull())?"":" = ", object.toString().ascii()); fflush(stdout);
76  }
77  else if (object.type() == TQT_DBusData::Bool) {
78  printf("%s%s\t%s%s'%s'\n", levelIndent.ascii(), signature.data(), (mapKey.isNull())?"":mapKey.ascii(), (mapKey.isNull())?"":" = ", (object.toBool())?"true":"false"); fflush(stdout);
79  }
80  else if (object.type() == TQT_DBusData::Byte) {
81  printf("%s%s\t%s%s'%d'\n", levelIndent.ascii(), signature.data(), (mapKey.isNull())?"":mapKey.ascii(), (mapKey.isNull())?"":" = ", object.toByte()); fflush(stdout);
82  }
83  else if (object.type() == TQT_DBusData::Int16) {
84  printf("%s%s\t%s%s'%d'\n", levelIndent.ascii(), signature.data(), (mapKey.isNull())?"":mapKey.ascii(), (mapKey.isNull())?"":" = ", object.toInt16()); fflush(stdout);
85  }
86  else if (object.type() == TQT_DBusData::UInt16) {
87  printf("%s%s\t%s%s'%d'\n", levelIndent.ascii(), signature.data(), (mapKey.isNull())?"":mapKey.ascii(), (mapKey.isNull())?"":" = ", object.toUInt16()); fflush(stdout);
88  }
89  else if (object.type() == TQT_DBusData::Int32) {
90  printf("%s%s\t%s%s'%d'\n", levelIndent.ascii(), signature.data(), (mapKey.isNull())?"":mapKey.ascii(), (mapKey.isNull())?"":" = ", object.toInt32()); fflush(stdout);
91  }
92  else if (object.type() == TQT_DBusData::UInt32) {
93  printf("%s%s\t%s%s'%d'\n", levelIndent.ascii(), signature.data(), (mapKey.isNull())?"":mapKey.ascii(), (mapKey.isNull())?"":" = ", object.toUInt32()); fflush(stdout);
94  }
95  else if (object.type() == TQT_DBusData::Int64) {
96  printf("%s%s\t%s%s'%lld'\n", levelIndent.ascii(), signature.data(), (mapKey.isNull())?"":mapKey.ascii(), (mapKey.isNull())?"":" = ", object.toInt64()); fflush(stdout);
97  }
98  else if (object.type() == TQT_DBusData::UInt64) {
99  printf("%s%s\t%s%s'%lld'\n", levelIndent.ascii(), signature.data(), (mapKey.isNull())?"":mapKey.ascii(), (mapKey.isNull())?"":" = ", object.toUInt64()); fflush(stdout);
100  }
101  else {
102  printf("%s%s\n", levelIndent.ascii(), signature.data()); fflush(stdout);
103  }
104 
105  if (object.type() == TQT_DBusData::Map) {
106  // HACK
107  // NetworkManager currently uses string key maps exclusively as far as I can tell, so this should be adequate for the time being
108  TQMap<TQString, TQT_DBusData> outerMap = object.toStringKeyMap().toTQMap();
109  TQMap<TQString, TQT_DBusData>::const_iterator it;
110  for (it = outerMap.begin(); it != outerMap.end(); ++it) {
111  printDBUSObjectStructure(*it, level+1, it.key());
112  }
113  }
114  else if (object.type() == TQT_DBusData::List) {
115  TQT_DBusDataValueList valueList = object.toTQValueList();
116  TQT_DBusDataValueList::const_iterator it;
117  for (it = valueList.begin(); it != valueList.end(); ++it) {
118  printDBUSObjectStructure(*it, level+1);
119  }
120  }
121  else if (object.type() == TQT_DBusData::Variant) {
122  TQT_DBusVariant dataValueVariant = object.toVariant();
123  TQT_DBusData dataValue = dataValueVariant.value;
124  printDBUSObjectStructure(dataValue, level+1, mapKey);
125  }
126 }
127 
128 TDENetworkGlobalManagerFlags::TDENetworkGlobalManagerFlags nmGlobalStateToTDEGlobalState(TQ_UINT32 nmType) {
129  TDENetworkGlobalManagerFlags::TDENetworkGlobalManagerFlags ret = TDENetworkGlobalManagerFlags::Unknown;
130 
131  if (nmType == NM_STATE_UNKNOWN) {
132  ret |= TDENetworkGlobalManagerFlags::Unknown;
133  }
134  else if (nmType == NM_STATE_ASLEEP) {
135  ret |= TDENetworkGlobalManagerFlags::Disconnected;
136  ret |= TDENetworkGlobalManagerFlags::Sleeping;
137  }
138  else if (nmType == NM_STATE_DISCONNECTED) {
139  ret |= TDENetworkGlobalManagerFlags::Disconnected;
140  }
141  else if (nmType == NM_STATE_DISCONNECTING) {
142  ret |= TDENetworkGlobalManagerFlags::Connected;
143  ret |= TDENetworkGlobalManagerFlags::DeactivatingLink;
144  }
145  else if (nmType == NM_STATE_CONNECTING) {
146  ret |= TDENetworkGlobalManagerFlags::Disconnected;
147  ret |= TDENetworkGlobalManagerFlags::EstablishingLink;
148  }
149  else if (nmType == NM_STATE_CONNECTED_LOCAL) {
150  ret |= TDENetworkGlobalManagerFlags::Connected;
151  ret |= TDENetworkGlobalManagerFlags::LinkLocalAccess;
152  }
153  else if (nmType == NM_STATE_CONNECTED_SITE) {
154  ret |= TDENetworkGlobalManagerFlags::Connected;
155  ret |= TDENetworkGlobalManagerFlags::SiteLocalAccess;
156  }
157  else if (nmType == NM_STATE_CONNECTED_GLOBAL) {
158  ret |= TDENetworkGlobalManagerFlags::Connected;
159  ret |= TDENetworkGlobalManagerFlags::GlobalAccess;
160  }
161 
162  return ret;
163 }
164 
165 TDENetworkGlobalManagerFlags::TDENetworkGlobalManagerFlags nmVPNStateToTDEGlobalState(TQ_UINT32 nmType) {
166  TDENetworkGlobalManagerFlags::TDENetworkGlobalManagerFlags ret = TDENetworkGlobalManagerFlags::Unknown;
167 
168  if (nmType == NM_VPN_STATE_UNKNOWN) {
169  ret |= TDENetworkGlobalManagerFlags::VPNUnknown;
170  }
171  else if (nmType == NM_VPN_STATE_PREPARE) {
172  ret |= TDENetworkGlobalManagerFlags::VPNDisconnected;
173  ret |= TDENetworkGlobalManagerFlags::VPNEstablishingLink;
174  }
175  else if (nmType == NM_VPN_STATE_NEED_AUTH) {
176  ret |= TDENetworkGlobalManagerFlags::VPNDisconnected;
177  ret |= TDENetworkGlobalManagerFlags::VPNNeedAuthorization;
178  }
179  else if (nmType == NM_VPN_STATE_CONNECT) {
180  ret |= TDENetworkGlobalManagerFlags::VPNDisconnected;
181  ret |= TDENetworkGlobalManagerFlags::VPNConfiguringProtocols;
182  }
183  else if (nmType == NM_VPN_STATE_IP_CONFIG_GET) {
184  ret |= TDENetworkGlobalManagerFlags::VPNDisconnected;
185  ret |= TDENetworkGlobalManagerFlags::VPNVerifyingProtocols;
186  }
187  else if (nmType == NM_VPN_STATE_ACTIVATED) {
188  ret |= TDENetworkGlobalManagerFlags::VPNConnected;
189  }
190  else if (nmType == NM_VPN_STATE_FAILED) {
191  ret |= TDENetworkGlobalManagerFlags::VPNDisconnected;
192  ret |= TDENetworkGlobalManagerFlags::VPNFailed;
193  }
194  else if (nmType == NM_VPN_STATE_DISCONNECTED) {
195  ret |= TDENetworkGlobalManagerFlags::VPNDisconnected;
196  }
197 
198  return ret;
199 }
200 
201 TDENetworkConnectionStatus::TDENetworkConnectionStatus nmDeviceStateToTDEDeviceState(TQ_UINT32 nmType) {
202  TDENetworkConnectionStatus::TDENetworkConnectionStatus ret = TDENetworkConnectionStatus::None;
203 
204  if (nmType == NM_DEVICE_STATE_UNKNOWN) {
205  ret |= TDENetworkConnectionStatus::Invalid;
206  }
207  else if (nmType == NM_DEVICE_STATE_UNMANAGED) {
208  ret |= TDENetworkConnectionStatus::UnManaged;
209  }
210  else if (nmType == NM_DEVICE_STATE_UNAVAILABLE) {
211  ret |= TDENetworkConnectionStatus::Disconnected;
212  ret |= TDENetworkConnectionStatus::LinkUnavailable;
213  }
214  else if (nmType == NM_DEVICE_STATE_DISCONNECTED) {
215  ret |= TDENetworkConnectionStatus::Disconnected;
216  }
217  else if (nmType == NM_DEVICE_STATE_PREPARE) {
218  ret |= TDENetworkConnectionStatus::Disconnected;
219  ret |= TDENetworkConnectionStatus::EstablishingLink;
220  }
221  else if (nmType == NM_DEVICE_STATE_CONFIG) {
222  ret |= TDENetworkConnectionStatus::Disconnected;
223  ret |= TDENetworkConnectionStatus::EstablishingLink;
224  }
225  else if (nmType == NM_DEVICE_STATE_NEED_AUTH) {
226  ret |= TDENetworkConnectionStatus::Disconnected;
227  ret |= TDENetworkConnectionStatus::NeedAuthorization;
228  }
229  else if (nmType == NM_DEVICE_STATE_IP_CONFIG) {
230  ret |= TDENetworkConnectionStatus::Disconnected;
231  ret |= TDENetworkConnectionStatus::ConfiguringProtocols;
232  }
233  else if (nmType == NM_DEVICE_STATE_IP_CHECK) {
234  ret |= TDENetworkConnectionStatus::Disconnected;
235  ret |= TDENetworkConnectionStatus::VerifyingProtocols;
236  }
237  else if (nmType == NM_DEVICE_STATE_SECONDARIES) {
238  ret |= TDENetworkConnectionStatus::Disconnected;
239  ret |= TDENetworkConnectionStatus::DependencyWait;
240  }
241  else if (nmType == NM_DEVICE_STATE_ACTIVATED) {
242  ret |= TDENetworkConnectionStatus::Connected;
243  }
244  else if (nmType == NM_DEVICE_STATE_DEACTIVATING) {
245  ret |= TDENetworkConnectionStatus::Connected;
246  ret |= TDENetworkConnectionStatus::DeactivatingLink;
247  }
248  else if (nmType == NM_DEVICE_STATE_FAILED) {
249  ret |= TDENetworkConnectionStatus::Disconnected;
250  ret |= TDENetworkConnectionStatus::Failed;
251  }
252 
253  return ret;
254 }
255 
256 TDENetworkDeviceType::TDENetworkDeviceType TDENetworkConnectionManager_BackendNM::nmDeviceTypeToTDEDeviceType(TQ_UINT32 nmType) {
257  TDENetworkDeviceType::TDENetworkDeviceType ret = TDENetworkDeviceType::Other;
258 
259  if (nmType == NM_DEVICE_TYPE_UNKNOWN) {
260  ret = TDENetworkDeviceType::Other;
261  }
262  else if (nmType == NM_DEVICE_TYPE_ETHERNET) {
263  ret = TDENetworkDeviceType::WiredEthernet;
264  }
265  else if (nmType == NM_DEVICE_TYPE_WIFI) {
266  ret = TDENetworkDeviceType::WiFi;
267  }
268  else if (nmType == NM_DEVICE_TYPE_UNUSED1) {
269  }
270  else if (nmType == NM_DEVICE_TYPE_UNUSED2) {
271  }
272  else if (nmType == NM_DEVICE_TYPE_BT) {
273  ret = TDENetworkDeviceType::Bluetooth;
274  }
275  else if (nmType == NM_DEVICE_TYPE_OLPC_MESH) {
276  ret = TDENetworkDeviceType::OLPCMesh;
277  }
278  else if (nmType == NM_DEVICE_TYPE_WIMAX) {
279  ret = TDENetworkDeviceType::WiMax;
280  }
281  else if (nmType == NM_DEVICE_TYPE_MODEM) {
282  ret = TDENetworkDeviceType::Modem;
283  }
284  else if (nmType == NM_DEVICE_TYPE_INFINIBAND) {
285  ret = TDENetworkDeviceType::Infiniband;
286  }
287  else if (nmType == NM_DEVICE_TYPE_BOND) {
288  ret = TDENetworkDeviceType::Bond;
289  }
290  else if (nmType == NM_DEVICE_TYPE_VLAN) {
291  ret = TDENetworkDeviceType::VLAN;
292  }
293  else if (nmType == NM_DEVICE_TYPE_ADSL) {
294  ret = TDENetworkDeviceType::ADSL;
295  }
296 
297  return ret;
298 }
299 
300 TDENetworkConnectionType::TDENetworkConnectionType nmConnectionTypeToTDEConnectionType(TQString nm) {
301  TDENetworkConnectionType::TDENetworkConnectionType ret = TDENetworkConnectionType::Other;
302 
303  if (nm.lower() == "802-3-ethernet") {
304  ret = TDENetworkConnectionType::WiredEthernet;
305  }
306  else if (nm.lower() == "infiniband") {
307  ret = TDENetworkConnectionType::Infiniband;
308  }
309  else if (nm.lower() == "802-11-wireless") {
310  ret = TDENetworkConnectionType::WiFi;
311  }
312  else if (nm.lower() == "vpn") {
313  ret = TDENetworkConnectionType::VPN;
314  }
315  else if (nm.lower() == "wimax") {
316  ret = TDENetworkConnectionType::WiMax;
317  }
318  else if (nm.lower() == "vlan") {
319  ret = TDENetworkConnectionType::VLAN;
320  }
321  else if (nm.lower() == "802-11-olpc-mesh") {
322  ret = TDENetworkConnectionType::OLPCMesh;
323  }
324  else if (nm.lower() == "bluetooth") {
325  ret = TDENetworkConnectionType::Bluetooth;
326  }
327  else if (nm.lower() == "cdma") {
328  ret = TDENetworkConnectionType::Modem;
329  }
330  else if (nm.lower() == "gsm") {
331  ret = TDENetworkConnectionType::Modem;
332  }
333 
334  return ret;
335 }
336 
337 TQString tdeConnectionTypeToNMConnectionType(TDENetworkConnectionType::TDENetworkConnectionType type, TDEModemConnectionType::TDEModemConnectionType modemType=TDEModemConnectionType::Other) {
338  TQString ret;
339 
340  if (type == TDENetworkConnectionType::WiredEthernet) {
341  ret = "802-3-ethernet";
342  }
343  else if (type == TDENetworkConnectionType::Infiniband) {
344  ret = "infiniband";
345  }
346  else if (type == TDENetworkConnectionType::WiFi) {
347  ret = "802-11-wireless";
348  }
349  else if (type == TDENetworkConnectionType::VPN) {
350  ret = "vpn";
351  }
352  else if (type == TDENetworkConnectionType::WiMax) {
353  ret = "wimax";
354  }
355  else if (type == TDENetworkConnectionType::VLAN) {
356  ret = "vlan";
357  }
358  else if (type == TDENetworkConnectionType::OLPCMesh) {
359  ret = "802-11-olpc-mesh";
360  }
361  else if (type == TDENetworkConnectionType::Bluetooth) {
362  ret = "bluetooth";
363  }
364  else if (type == TDENetworkConnectionType::Modem) {
365  if (modemType == TDEModemConnectionType::CDMA) {
366  ret = "cdma";
367  }
368  else if (modemType == TDEModemConnectionType::GSM) {
369  ret = "gsm";
370  }
371  }
372 
373  return ret;
374 }
375 
376 TDENetworkIEEE8021xType::TDENetworkIEEE8021xType nmEAPTypeToTDEEAPType(TQString nm) {
377  TDENetworkIEEE8021xType::TDENetworkIEEE8021xType ret = TDENetworkIEEE8021xType::None;
378 
379  if (nm.lower() == "") {
380  ret = TDENetworkIEEE8021xType::None;
381  }
382  else if (nm.lower() == "leap") {
383  ret = TDENetworkIEEE8021xType::LEAP;
384  }
385  else if (nm.lower() == "md5") {
386  ret = TDENetworkIEEE8021xType::MD5;
387  }
388  else if (nm.lower() == "pap") {
389  ret = TDENetworkIEEE8021xType::PAP;
390  }
391  else if (nm.lower() == "chap") {
392  ret = TDENetworkIEEE8021xType::CHAP;
393  }
394  else if (nm.lower() == "mschap") {
395  ret = TDENetworkIEEE8021xType::MSCHAP;
396  }
397  else if (nm.lower() == "mschapv2") {
398  ret = TDENetworkIEEE8021xType::MSCHAPV2;
399  }
400  else if (nm.lower() == "fast") {
401  ret = TDENetworkIEEE8021xType::Fast;
402  }
403  else if (nm.lower() == "psk") {
404  ret = TDENetworkIEEE8021xType::PSK;
405  }
406  else if (nm.lower() == "pax") {
407  ret = TDENetworkIEEE8021xType::PAX;
408  }
409  else if (nm.lower() == "sake") {
410  ret = TDENetworkIEEE8021xType::SAKE;
411  }
412  else if (nm.lower() == "gpsk") {
413  ret = TDENetworkIEEE8021xType::GPSK;
414  }
415  else if (nm.lower() == "tls") {
416  ret = TDENetworkIEEE8021xType::TLS;
417  }
418  else if (nm.lower() == "peap") {
419  ret = TDENetworkIEEE8021xType::PEAP;
420  }
421  else if (nm.lower() == "ttls") {
422  ret = TDENetworkIEEE8021xType::TTLS;
423  }
424  else if (nm.lower() == "sim") {
425  ret = TDENetworkIEEE8021xType::SIM;
426  }
427  else if (nm.lower() == "gtc") {
428  ret = TDENetworkIEEE8021xType::GTC;
429  }
430  else if (nm.lower() == "otp") {
431  ret = TDENetworkIEEE8021xType::OTP;
432  }
433  else {
434  PRINT_ERROR(TQString("unknown EAP type %s requested in existing connection").arg(nm.lower()))
435  }
436 
437  return ret;
438 }
439 
440 TQString tdeEAPTypeToNMEAPType(TDENetworkIEEE8021xType::TDENetworkIEEE8021xType eaptype) {
441  TQString ret = "";
442 
443  if (eaptype == TDENetworkIEEE8021xType::None) {
444  ret = "";
445  }
446  else if (eaptype == TDENetworkIEEE8021xType::LEAP) {
447  ret = "leap";
448  }
449  else if (eaptype == TDENetworkIEEE8021xType::MD5) {
450  ret = "md5";
451  }
452  else if (eaptype == TDENetworkIEEE8021xType::PAP) {
453  ret = "pap";
454  }
455  else if (eaptype == TDENetworkIEEE8021xType::CHAP) {
456  ret = "chap";
457  }
458  else if (eaptype == TDENetworkIEEE8021xType::MSCHAP) {
459  ret = "mschap";
460  }
461  else if (eaptype == TDENetworkIEEE8021xType::MSCHAPV2) {
462  ret = "mschapv2";
463  }
464  else if (eaptype == TDENetworkIEEE8021xType::Fast) {
465  ret = "fast";
466  }
467  else if (eaptype == TDENetworkIEEE8021xType::PSK) {
468  ret = "psk";
469  }
470  else if (eaptype == TDENetworkIEEE8021xType::PAX) {
471  ret = "pax";
472  }
473  else if (eaptype == TDENetworkIEEE8021xType::SAKE) {
474  ret = "sake";
475  }
476  else if (eaptype == TDENetworkIEEE8021xType::GPSK) {
477  ret = "gpsk";
478  }
479  else if (eaptype == TDENetworkIEEE8021xType::TLS) {
480  ret = "tls";
481  }
482  else if (eaptype == TDENetworkIEEE8021xType::PEAP) {
483  ret = "peap";
484  }
485  else if (eaptype == TDENetworkIEEE8021xType::TTLS) {
486  ret = "ttls";
487  }
488  else if (eaptype == TDENetworkIEEE8021xType::SIM) {
489  ret = "sim";
490  }
491  else if (eaptype == TDENetworkIEEE8021xType::GTC) {
492  ret = "gtc";
493  }
494  else if (eaptype == TDENetworkIEEE8021xType::OTP) {
495  ret = "otp";
496  }
497  else {
498  PRINT_ERROR(TQString("unknown TDE EAP type %d requested in new or updated connection").arg(eaptype))
499  }
500 
501  return ret;
502 }
503 
504 TDENetworkIEEE8021xFastFlags::TDENetworkIEEE8021xFastFlags nmEAPFastFlagsToTDEEAPFastFlags(TQString nm) {
505  TDENetworkIEEE8021xFastFlags::TDENetworkIEEE8021xFastFlags ret = TDENetworkIEEE8021xFastFlags::AllowUnauthenticated | TDENetworkIEEE8021xFastFlags::AllowAuthenticated;
506 
507  unsigned int nm_int = nm.toUInt();
508  if (nm_int == NM_EAP_FAST_PROVISIONING_DISABLED) {
509  ret = TDENetworkIEEE8021xFastFlags::None;
510  }
511  else if (nm_int == NM_EAP_FAST_PROVISIONING_UNAUTHONLY) {
512  ret = TDENetworkIEEE8021xFastFlags::AllowUnauthenticated;
513  }
514  else if (nm_int == NM_EAP_FAST_PROVISIONING_AUTHONLY) {
515  ret = TDENetworkIEEE8021xFastFlags::AllowAuthenticated;
516  }
517  else if (nm_int == NM_EAP_FAST_PROVISIONING_BOTH) {
518  ret = TDENetworkIEEE8021xFastFlags::AllowUnauthenticated | TDENetworkIEEE8021xFastFlags::AllowAuthenticated;
519  }
520  else {
521  PRINT_ERROR(TQString("unknown EAP fast flag %s requested in existing connection").arg(nm.lower()))
522  }
523 
524  return ret;
525 }
526 
527 TQString tdeEAPFastFlagsToNMEAPFastFlags(TDENetworkIEEE8021xFastFlags::TDENetworkIEEE8021xFastFlags eaptype) {
528  TQString ret = "";
529 
530  if ((eaptype & TDENetworkIEEE8021xFastFlags::AllowUnauthenticated) && (eaptype & TDENetworkIEEE8021xFastFlags::AllowAuthenticated)) {
531  ret = TQString("%1").arg(NM_EAP_FAST_PROVISIONING_BOTH);
532  }
533  else if (eaptype & TDENetworkIEEE8021xFastFlags::AllowAuthenticated) {
534  ret = TQString("%1").arg(NM_EAP_FAST_PROVISIONING_AUTHONLY);
535  }
536  else if (eaptype & TDENetworkIEEE8021xFastFlags::AllowUnauthenticated) {
537  ret = TQString("%1").arg(NM_EAP_FAST_PROVISIONING_UNAUTHONLY);
538  }
539  else {
540  ret = TQString("%1").arg(NM_EAP_FAST_PROVISIONING_DISABLED);
541  }
542 
543  return ret;
544 }
545 
546 TDEWiFiMode::TDEWiFiMode nmWiFiModeToTDEWiFiMode(TQString nm) {
547  TDEWiFiMode::TDEWiFiMode ret = TDEWiFiMode::Infrastructure;
548 
549  if (nm.lower() == "infrastructure") {
550  ret = TDEWiFiMode::Infrastructure;
551  }
552  else if (nm.lower() == "adhoc") {
553  ret = TDEWiFiMode::AdHoc;
554  }
555 
556  return ret;
557 }
558 
559 TQString tdeWiFiModeToNMWiFiMode(TDEWiFiMode::TDEWiFiMode mode) {
560  TQString ret;
561 
562  if (mode == TDEWiFiMode::Infrastructure) {
563  ret = "infrastructure";
564  }
565  else if (mode == TDEWiFiMode::AdHoc) {
566  ret = "adhoc";
567  }
568 
569  return ret;
570 }
571 
572 TDEWiFiMode::TDEWiFiMode nmWiFiModeToTDEWiFiMode(TQ_UINT32 nm) {
573  TDEWiFiMode::TDEWiFiMode ret = TDEWiFiMode::Infrastructure;
574 
575  if (nm == NM_802_11_MODE_INFRASTRUCTURE) {
576  ret = TDEWiFiMode::Infrastructure;
577  }
578  else if (nm == NM_802_11_MODE_ADHOC) {
579  ret = TDEWiFiMode::AdHoc;
580  }
581 
582  return ret;
583 }
584 
585 TDENetworkWiFiClientFlags::TDENetworkWiFiClientFlags tdeWiFiFlagsToNMWiFiFlags(TQ_UINT32 nm) {
586  TDENetworkWiFiClientFlags::TDENetworkWiFiClientFlags ret = TDENetworkWiFiClientFlags::None;
587 
588  if (nm & NM_802_11_DEVICE_CAP_CIPHER_WEP40) {
589  ret | TDENetworkWiFiClientFlags::CipherWEP40;
590  }
591  if (nm & NM_802_11_DEVICE_CAP_CIPHER_WEP104) {
592  ret | TDENetworkWiFiClientFlags::CipherWEP104;
593  }
594  if (nm & NM_802_11_DEVICE_CAP_CIPHER_TKIP) {
595  ret | TDENetworkWiFiClientFlags::CipherTKIP;
596  }
597  if (nm & NM_802_11_DEVICE_CAP_CIPHER_CCMP) {
598  ret | TDENetworkWiFiClientFlags::CipherCCMP;
599  }
600  if (nm & NM_802_11_DEVICE_CAP_WPA) {
601  ret | TDENetworkWiFiClientFlags::CipherWPA;
602  }
603  if (nm & NM_802_11_DEVICE_CAP_RSN) {
604  ret | TDENetworkWiFiClientFlags::CipherRSN;
605  }
606 
607  return ret;
608 }
609 
610 TDEBluetoothConnectionType::TDEBluetoothConnectionType nmBluetoothModeToTDEBluetoothMode(TQString nm) {
611  TDEBluetoothConnectionType::TDEBluetoothConnectionType ret = TDEBluetoothConnectionType::PAN;
612 
613  if (nm.lower() == "dun") {
614  ret = TDEBluetoothConnectionType::DUN;
615  }
616  else if (nm.lower() == "panu") {
617  ret = TDEBluetoothConnectionType::PAN;
618  }
619 
620  return ret;
621 }
622 
623 TQString tdeBluetoothModeToNMBluetoothMode(TDEBluetoothConnectionType::TDEBluetoothConnectionType type) {
624  TQString ret;
625 
626  if (type == TDEBluetoothConnectionType::DUN) {
627  ret = "dun";
628  }
629  else if (type == TDEBluetoothConnectionType::PAN) {
630  ret = "panu";
631  }
632 
633  return ret;
634 }
635 
636 TDEGSMNetworkType::TDEGSMNetworkType nmGSMModeToTDEGSMMode(TQ_INT32 nm) {
637  TDEGSMNetworkType::TDEGSMNetworkType ret = TDEGSMNetworkType::Any;
638 
639  if (nm == NM_GSM_3G_ONLY) {
640  ret = TDEGSMNetworkType::Only3G;
641  }
642  else if (nm == NM_GSM_GPRS_EDGE_ONLY) {
643  ret = TDEGSMNetworkType::GPRSEdge;
644  }
645  else if (nm == NM_GSM_PREFER_3G) {
646  ret = TDEGSMNetworkType::Prefer3G;
647  }
648  else if (nm == NM_GSM_PREFER_2G) {
649  ret = TDEGSMNetworkType::Prefer2G;
650  }
651 
652  return ret;
653 }
654 
655 TQ_INT32 tdeGSMModeToNMGSMMode(TDEGSMNetworkType::TDEGSMNetworkType type) {
656  TQ_INT32 ret = -1;
657 
658  if (type == TDEGSMNetworkType::Only3G) {
659  ret = NM_GSM_3G_ONLY;
660  }
661  else if (type == TDEGSMNetworkType::GPRSEdge) {
662  ret = NM_GSM_GPRS_EDGE_ONLY;
663  }
664  else if (type == TDEGSMNetworkType::Prefer3G) {
665  ret = NM_GSM_PREFER_3G;
666  }
667  else if (type == TDEGSMNetworkType::Prefer2G) {
668  ret = NM_GSM_PREFER_2G;
669  }
670 
671  return ret;
672 }
673 
674 TDEWiFiFrequencyBand::TDEWiFiFrequencyBand nmWiFiFrequencyBandToTDEWiFiFrequencyBand(TQString nm) {
675  TDEWiFiFrequencyBand::TDEWiFiFrequencyBand ret = TDEWiFiFrequencyBand::Other;
676 
677  if (nm.lower() == "") {
678  ret = TDEWiFiFrequencyBand::None;
679  }
680  else if (nm.lower() == "bg") {
681  ret = TDEWiFiFrequencyBand::Band2_4GHz;
682  }
683  else if (nm.lower() == "a") {
684  ret = TDEWiFiFrequencyBand::Band5GHz;
685  }
686 
687  return ret;
688 }
689 
690 TQString tdeWiFiFrequencyBandToNMWiFiFrequencyBand(TDEWiFiFrequencyBand::TDEWiFiFrequencyBand mode) {
691  TQString ret;
692 
693  if (mode == TDEWiFiFrequencyBand::None) {
694  ret = TQString::null;
695  }
696  else if (mode == TDEWiFiFrequencyBand::Band2_4GHz) {
697  ret = "bg";
698  }
699  else if (mode == TDEWiFiFrequencyBand::Band5GHz) {
700  ret = "a";
701  }
702 
703  return ret;
704 }
705 
706 TDENetworkWiFiKeyType::TDENetworkWiFiKeyType nmWiFiKeyTypeToTDEWiFiKeyType(TQString nm) {
707  TDENetworkWiFiKeyType::TDENetworkWiFiKeyType ret = TDENetworkWiFiKeyType::Other;
708 
709  if (nm.lower() == "none") {
710  ret = TDENetworkWiFiKeyType::WEP;
711  }
712  else if (nm.lower() == "ieee8021x") {
713  ret = TDENetworkWiFiKeyType::DynamicWEP;
714  }
715  else if (nm.lower() == "wpa-none") {
716  ret = TDENetworkWiFiKeyType::WPAAdHoc;
717  }
718  else if (nm.lower() == "wpa-psk") {
719  ret = TDENetworkWiFiKeyType::WPAInfrastructure;
720  }
721  else if (nm.lower() == "wpa-eap") {
722  ret = TDENetworkWiFiKeyType::WPAEnterprise;
723  }
724 
725  return ret;
726 }
727 
728 TQString tdeWiFiKeyTypeToNMWiFiKeyType(TDENetworkWiFiKeyType::TDENetworkWiFiKeyType type) {
729  TQString ret;
730 
731  if (type == TDENetworkWiFiKeyType::WEP) {
732  return "none";
733  }
734  else if (type == TDENetworkWiFiKeyType::DynamicWEP) {
735  return "ieee8021x";
736  }
737  else if (type == TDENetworkWiFiKeyType::WPAAdHoc) {
738  return "wpa-none";
739  }
740  else if (type == TDENetworkWiFiKeyType::WPAInfrastructure) {
741  return "wpa-psk";
742  }
743  else if (type == TDENetworkWiFiKeyType::WPAEnterprise) {
744  return "wpa-eap";
745  }
746 
747  return ret;
748 }
749 
750 TDENetworkWiFiAuthType::TDENetworkWiFiAuthType nmWiFiAuthTypeToTDEWiFiAuthType(TQString nm) {
751  TDENetworkWiFiAuthType::TDENetworkWiFiAuthType ret = TDENetworkWiFiAuthType::Other;
752 
753  if (nm.lower() == "open") {
754  ret = TDENetworkWiFiAuthType::Open;
755  }
756  else if (nm.lower() == "shared") {
757  ret = TDENetworkWiFiAuthType::Shared;
758  }
759  else if (nm.lower() == "leap") {
760  ret = TDENetworkWiFiAuthType::LEAP;
761  }
762 
763  return ret;
764 }
765 
766 TQString tdeWiFiAuthTypeToNMWiFiAuthType(TDENetworkWiFiAuthType::TDENetworkWiFiAuthType type) {
767  TQString ret;
768 
769  if (type == TDENetworkWiFiAuthType::Open) {
770  return "open";
771  }
772  else if (type == TDENetworkWiFiAuthType::Shared) {
773  return "shared";
774  }
775  else if (type == TDENetworkWiFiAuthType::LEAP) {
776  return "leap";
777  }
778 
779  return ret;
780 }
781 
782 TDENetworkWiFiWPAVersionFlags::TDENetworkWiFiWPAVersionFlags nmWiFiWPAVersionToTDEWiFiWPAVersion(TQStringList nm) {
783  TDENetworkWiFiWPAVersionFlags::TDENetworkWiFiWPAVersionFlags ret = TDENetworkWiFiWPAVersionFlags::None;
784 
785  if ((nm.contains("wpa") && nm.contains("rsn")) || (nm.count() < 1)) {
786  ret |= TDENetworkWiFiWPAVersionFlags::Any;
787  }
788  else if (nm.contains("wpa")) {
789  ret |= TDENetworkWiFiWPAVersionFlags::WPA;
790  }
791  else if (nm.contains("rsn")) {
792  ret |= TDENetworkWiFiWPAVersionFlags::RSN;
793  }
794 
795  return ret;
796 }
797 
798 TQStringList tdeWiFiWPAVersionToNMWiFiWPAVersion(TDENetworkWiFiWPAVersionFlags::TDENetworkWiFiWPAVersionFlags type) {
799  TQStringList ret;
800 
801  if (type & TDENetworkWiFiWPAVersionFlags::WPA) {
802  ret.append("wpa");
803  }
804  if (type & TDENetworkWiFiWPAVersionFlags::RSN) {
805  ret.append("rsn");
806  }
807 
808  return ret;
809 }
810 
811 TDENetworkWiFiConnectionCipher::TDENetworkWiFiConnectionCipher nmWiFiCipherToTDEWiFiCipher(TQString nm) {
812  TDENetworkWiFiConnectionCipher::TDENetworkWiFiConnectionCipher ret = TDENetworkWiFiConnectionCipher::None;
813 
814  if (nm.lower() == "wep40") {
815  ret = TDENetworkWiFiConnectionCipher::CipherWEP40;
816  }
817  else if (nm.lower() == "wep104") {
818  ret = TDENetworkWiFiConnectionCipher::CipherWEP104;
819  }
820  else if (nm.lower() == "tkip") {
821  ret = TDENetworkWiFiConnectionCipher::CipherTKIP;
822  }
823  else if (nm.lower() == "ccmp") {
824  ret = TDENetworkWiFiConnectionCipher::CipherCCMP;
825  }
826 
827  return ret;
828 }
829 
830 TQString tdeWiFiCipherToNMWiFiCipher(TDENetworkWiFiConnectionCipher::TDENetworkWiFiConnectionCipher cipher) {
831  TQString ret;
832 
833  if (cipher == TDENetworkWiFiConnectionCipher::CipherWEP40) {
834  ret = "wep40";
835  }
836  else if (cipher == TDENetworkWiFiConnectionCipher::CipherWEP104) {
837  ret = "wep104";
838  }
839  else if (cipher == TDENetworkWiFiConnectionCipher::CipherTKIP) {
840  ret = "tkip";
841  }
842  else if (cipher == TDENetworkWiFiConnectionCipher::CipherCCMP) {
843  ret = "ccmp";
844  }
845 
846  return ret;
847 }
848 
849 TDENetworkSlaveDeviceType::TDENetworkSlaveDeviceType nmSlaveTypeToTDESlaveType(TQString nm) {
850  TDENetworkSlaveDeviceType::TDENetworkSlaveDeviceType ret = TDENetworkSlaveDeviceType::None;
851 
852  if (nm.lower() == "bond") {
853  ret = TDENetworkSlaveDeviceType::Bond;
854  }
855 
856  return ret;
857 }
858 
859 TQString tdeSlaveTypeToNMSlaveType(TDENetworkSlaveDeviceType::TDENetworkSlaveDeviceType slavetype) {
860  TQString ret;
861 
862  if (slavetype == TDENetworkSlaveDeviceType::Bond) {
863  ret = "bond";
864  }
865 
866  return ret;
867 }
868 
869 TDENetworkPasswordHandlingFlags::TDENetworkPasswordHandlingFlags nmPasswordFlagsToTDEPasswordFlags(unsigned int nm) {
870  TDENetworkPasswordHandlingFlags::TDENetworkPasswordHandlingFlags ret = TDENetworkPasswordHandlingFlags::None;
871 
872  if (nm & NM_PASSWORD_SECRET_AGENTOWNED) {
873  ret |= TDENetworkPasswordHandlingFlags::ExternalStorage;
874  }
875  if (nm & NM_PASSWORD_SECRET_NOTSAVED) {
876  ret |= TDENetworkPasswordHandlingFlags::NoSave;
877  }
878  if (nm & NM_PASSWORD_SECRET_NOTREQUIRED) {
879  ret |= TDENetworkPasswordHandlingFlags::NoPrompt;
880  }
881 
882  return ret;
883 }
884 
885 unsigned int tdePasswordFlagsToNMPasswordFlags(TDENetworkPasswordHandlingFlags::TDENetworkPasswordHandlingFlags flags) {
886  unsigned int ret = 0;
887 
888  if (flags & TDENetworkPasswordHandlingFlags::ExternalStorage) {
889  ret |= NM_PASSWORD_SECRET_AGENTOWNED;
890  }
891  if (flags & TDENetworkPasswordHandlingFlags::NoSave) {
892  ret |= NM_PASSWORD_SECRET_NOTSAVED;
893  }
894  if (flags & TDENetworkPasswordHandlingFlags::NoPrompt) {
895  ret |= NM_PASSWORD_SECRET_NOTREQUIRED;
896  }
897 
898  return ret;
899 }
900 
901 TDENetworkVLANFlags::TDENetworkVLANFlags nmVLANFlagsToTDEVLANFlags(unsigned int nm) {
902  TDENetworkVLANFlags::TDENetworkVLANFlags ret = TDENetworkVLANFlags::None;
903 
904  if (nm & NM_VLAN_REORDER_PACKET_HEADERS) {
905  ret |= TDENetworkVLANFlags::ReorderPacketHeaders;
906  }
907  if (nm & NM_VLAN_USE_GVRP) {
908  ret |= TDENetworkVLANFlags::UseGVRP;
909  }
910  if (nm & NM_VLAN_LOOSE_BINDING) {
911  ret |= TDENetworkVLANFlags::LooseBinding;
912  }
913 
914  return ret;
915 }
916 
917 unsigned int tdeVLANFlagsToNMVLANFlags(TDENetworkVLANFlags::TDENetworkVLANFlags flags) {
918  unsigned int ret = 0;
919 
920  if (flags & TDENetworkVLANFlags::ReorderPacketHeaders) {
921  ret |= NM_VLAN_REORDER_PACKET_HEADERS;
922  }
923  if (flags & TDENetworkVLANFlags::UseGVRP) {
924  ret |= NM_VLAN_USE_GVRP;
925  }
926  if (flags & TDENetworkVLANFlags::LooseBinding) {
927  ret |= NM_VLAN_LOOSE_BINDING;
928  }
929 
930  return ret;
931 }
932 
933 TDENetworkParity::TDENetworkParity nmParityToTDEParity(char nm) {
934  TDENetworkParity::TDENetworkParity ret = TDENetworkParity::None;
935 
936  if (nm == 'E') {
937  ret = TDENetworkParity::Even;
938  }
939  else if (nm == 'o') {
940  ret = TDENetworkParity::Odd;
941  }
942 
943  return ret;
944 }
945 
946 char tdeParityToNMParity(TDENetworkParity::TDENetworkParity parity) {
947  char ret = 'n';
948 
949  if (parity == TDENetworkParity::Even) {
950  ret = 'E';
951  }
952  else if (parity == TDENetworkParity::Odd) {
953  ret = 'o';
954  }
955 
956  return ret;
957 }
958 
959 TDENetworkWepKeyType::TDENetworkWepKeyType nmWepKeyTypeToTDEWepKeyType(unsigned int nm, TQString key=TQString::null) {
960  TDENetworkWepKeyType::TDENetworkWepKeyType ret = TDENetworkWepKeyType::Hexadecimal;
961 
962  if (nm == NM_WEP_TYPE_HEXADECIMAL) {
963  if (key.isNull()) {
964  ret = TDENetworkWepKeyType::Hexadecimal;
965  }
966  else {
967  if ((key.length() == 10) || (key.length() == 26)) {
968  ret = TDENetworkWepKeyType::Hexadecimal;
969  }
970  else {
971  ret = TDENetworkWepKeyType::Ascii;
972  }
973  }
974  }
975  else if (nm == NM_WEP_TYPE_PASSPHRASE) {
976  ret = TDENetworkWepKeyType::Passphrase;
977  }
978 
979  return ret;
980 }
981 
982 unsigned int tdeWepKeyTypeToNMWepKeyType(TDENetworkWepKeyType::TDENetworkWepKeyType type) {
983  unsigned int ret = 0;
984 
985  if (type == TDENetworkWepKeyType::Hexadecimal) {
986  ret = NM_WEP_TYPE_HEXADECIMAL;
987  }
988  else if (type == TDENetworkWepKeyType::Ascii) {
989  ret = NM_WEP_TYPE_HEXADECIMAL;
990  }
991  else if (type == TDENetworkWepKeyType::Passphrase) {
992  ret = NM_WEP_TYPE_PASSPHRASE;
993  }
994 
995  return ret;
996 }
997 
998 TDENetworkDeviceCapabilityFlags::TDENetworkDeviceCapabilityFlags nmCapabilityFlagsToTDECapabilityFlags(unsigned int nm) {
999  TDENetworkDeviceCapabilityFlags::TDENetworkDeviceCapabilityFlags ret = TDENetworkDeviceCapabilityFlags::None;
1000 
1001  if (nm & NM_DEVICE_CAP_NM_SUPPORTED) {
1002  ret |= TDENetworkDeviceCapabilityFlags::Supported;
1003  }
1004  if (nm & NM_DEVICE_CAP_CARRIER_DETECT) {
1005  ret |= TDENetworkDeviceCapabilityFlags::CanDetectLink;
1006  }
1007 
1008  return ret;
1009 }
1010 
1011 unsigned int tdeCapabilityFlagsToNMCapabilityFlags(TDENetworkDeviceCapabilityFlags::TDENetworkDeviceCapabilityFlags flags) {
1012  unsigned int ret = 0;
1013 
1014  if (flags & TDENetworkDeviceCapabilityFlags::Supported) {
1015  ret |= NM_DEVICE_CAP_NM_SUPPORTED;
1016  }
1017  if (flags & TDENetworkDeviceCapabilityFlags::CanDetectLink) {
1018  ret |= NM_DEVICE_CAP_CARRIER_DETECT;
1019  }
1020 
1021  return ret;
1022 }
1023 
1024 TDENetworkWiFiAPFlags::TDENetworkWiFiAPFlags nmAPSecFlagsToTDEAPSecFlags(unsigned int genflags, unsigned int nm) {
1025  TDENetworkWiFiAPFlags::TDENetworkWiFiAPFlags ret = TDENetworkWiFiAPFlags::None;
1026 
1027  if (genflags & NM_ACCESS_POINT_CAP_PRIVACY) {
1028  ret |= TDENetworkWiFiAPFlags::PrivacySupport;
1029  }
1030 
1031  if (nm & NM_ACCESS_POINT_SEC_PAIR_WEP40) {
1032  ret |= TDENetworkWiFiAPFlags::PairWEP40;
1033  }
1034  if (nm & NM_ACCESS_POINT_SEC_PAIR_WEP104) {
1035  ret |= TDENetworkWiFiAPFlags::PairWEP104;
1036  }
1037  if (nm & NM_ACCESS_POINT_SEC_PAIR_TKIP) {
1038  ret |= TDENetworkWiFiAPFlags::PairTKIP;
1039  }
1040  if (nm & NM_ACCESS_POINT_SEC_PAIR_CCMP) {
1041  ret |= TDENetworkWiFiAPFlags::PairCCMP;
1042  }
1043  if (nm & NM_ACCESS_POINT_SEC_GROUP_WEP40) {
1044  ret |= TDENetworkWiFiAPFlags::GroupWEP40;
1045  }
1046  if (nm & NM_ACCESS_POINT_SEC_GROUP_WEP104) {
1047  ret |= TDENetworkWiFiAPFlags::GroupWEP104;
1048  }
1049  if (nm & NM_ACCESS_POINT_SEC_GROUP_TKIP) {
1050  ret |= TDENetworkWiFiAPFlags::GroupTKIP;
1051  }
1052  if (nm & NM_ACCESS_POINT_SEC_GROUP_CCMP) {
1053  ret |= TDENetworkWiFiAPFlags::GroupCCMP;
1054  }
1055  if (nm & NM_ACCESS_POINT_SEC_KEY_MGMT_PSK) {
1056  ret |= TDENetworkWiFiAPFlags::KeyManagementPSK;
1057  }
1058  if (nm & NM_ACCESS_POINT_SEC_KEY_MGMT_802_1X) {
1059  ret |= TDENetworkWiFiAPFlags::KeyManagement80211;
1060  }
1061 
1062  return ret;
1063 }
1064 
1065 unsigned int tdeAPSecFlagsToNMAPGenSecFlags(TDENetworkWiFiAPFlags::TDENetworkWiFiAPFlags flags) {
1066  unsigned int ret = 0;
1067 
1068  if (flags & TDENetworkWiFiAPFlags::PrivacySupport) {
1069  ret |= NM_ACCESS_POINT_CAP_PRIVACY;
1070  }
1071 
1072  return ret;
1073 }
1074 
1075 unsigned int tdeAPSecFlagsToNMAPSecFlags(TDENetworkWiFiAPFlags::TDENetworkWiFiAPFlags flags) {
1076  unsigned int ret = 0;
1077 
1078  if (flags & TDENetworkWiFiAPFlags::PairWEP40) {
1079  ret |= NM_ACCESS_POINT_SEC_PAIR_WEP40;
1080  }
1081  if (flags & TDENetworkWiFiAPFlags::PairWEP104) {
1082  ret |= NM_ACCESS_POINT_SEC_PAIR_WEP104;
1083  }
1084  if (flags & TDENetworkWiFiAPFlags::PairTKIP) {
1085  ret |= NM_ACCESS_POINT_SEC_PAIR_TKIP;
1086  }
1087  if (flags & TDENetworkWiFiAPFlags::PairCCMP) {
1088  ret |= NM_ACCESS_POINT_SEC_PAIR_CCMP;
1089  }
1090  if (flags & TDENetworkWiFiAPFlags::GroupWEP40) {
1091  ret |= NM_ACCESS_POINT_SEC_GROUP_WEP40;
1092  }
1093  if (flags & TDENetworkWiFiAPFlags::GroupWEP104) {
1094  ret |= NM_ACCESS_POINT_SEC_GROUP_WEP104;
1095  }
1096  if (flags & TDENetworkWiFiAPFlags::GroupTKIP) {
1097  ret |= NM_ACCESS_POINT_SEC_GROUP_TKIP;
1098  }
1099  if (flags & TDENetworkWiFiAPFlags::GroupCCMP) {
1100  ret |= NM_ACCESS_POINT_SEC_GROUP_CCMP;
1101  }
1102  if (flags & TDENetworkWiFiAPFlags::KeyManagementPSK) {
1103  ret |= NM_ACCESS_POINT_SEC_KEY_MGMT_PSK;
1104  }
1105  if (flags & TDENetworkWiFiAPFlags::KeyManagement80211) {
1106  ret |= NM_ACCESS_POINT_SEC_KEY_MGMT_802_1X;
1107  }
1108 
1109  return ret;
1110 }
1111 
1112 TDENetworkInfinibandTransportMode::TDENetworkInfinibandTransportMode nmIBTransportToTDEIBTransport(TQString nm) {
1113  TDENetworkInfinibandTransportMode::TDENetworkInfinibandTransportMode ret = TDENetworkInfinibandTransportMode::Other;
1114 
1115  if (nm.lower() == "datagram") {
1116  ret = TDENetworkInfinibandTransportMode::Datagram;
1117  }
1118  else if (nm.lower() == "connected") {
1119  ret = TDENetworkInfinibandTransportMode::Connected;
1120  }
1121 
1122  return ret;
1123 }
1124 
1125 TQString tdeIBTransportToNMIBTransport(TDENetworkInfinibandTransportMode::TDENetworkInfinibandTransportMode mode) {
1126  TQString ret;
1127 
1128  if (mode == TDENetworkInfinibandTransportMode::Datagram) {
1129  ret = "datagram";
1130  }
1131  else if (mode == TDENetworkInfinibandTransportMode::Connected) {
1132  ret = "connected";
1133  }
1134 
1135  return ret;
1136 }
1137 
1138 TQString TDENetworkConnectionManager_BackendNM::deviceInterfaceString(TQString deviceNode) {
1139  if (d->m_networkManagerProxy) {
1140  TQT_DBusObjectPathList devices;
1141  TQT_DBusError error;
1142  bool ret;
1143  ret = d->m_networkManagerProxy->GetDevices(devices, error);
1144  if (ret) {
1145  TQT_DBusObjectPathList::iterator it;
1146  for (it = devices.begin(); it != devices.end(); ++it) {
1147  DBus::DeviceProxy genericDevice(NM_DBUS_SERVICE, (*it));
1148  genericDevice.setConnection(TQT_DBusConnection::systemBus());
1149  TQString deviceInterface = genericDevice.getInterface(error);
1150  if (error.isValid()) {
1151  // Error!
1152  PRINT_ERROR((error.name() + ": " + error.message()))
1153  break;
1154  }
1155  else if (deviceInterface == deviceNode) {
1156  return (*it);
1157  }
1158  }
1159  return "";
1160  }
1161  else {
1162  // Error!
1163  PRINT_ERROR((error.name() + ": " + error.message()))
1164  return "";
1165  }
1166  }
1167  else {
1168  return "";
1169  }
1170 }
1171 
1172 TQString tdeDeviceUUIDForGenericDevice(TQT_DBusObjectPath path) {
1173  TQT_DBusError error;
1174  DBus::DeviceProxy genericDevice(NM_DBUS_SERVICE, path);
1175  genericDevice.setConnection(TQT_DBusConnection::systemBus());
1176  TQString deviceInterface = genericDevice.getInterface(error);
1177  if (error.isValid()) {
1178  return TQString::null;
1179  }
1180 
1181  TDEHardwareDevices *hwdevices = TDEGlobal::hardwareDevices();
1182  if (!hwdevices) {
1183  return TQString::null;
1184  }
1185 
1186  TDEGenericHardwareList devices = hwdevices->listByDeviceClass(TDEGenericDeviceType::Network);
1187  for (TDEGenericHardwareList::iterator it = devices.begin(); it != devices.end(); ++it) {
1188  TDENetworkDevice* dev = dynamic_cast<TDENetworkDevice*>(*it);
1189  if (dev) {
1190  if (deviceInterface == dev->deviceNode()) {
1191  return dev->uniqueID();
1192  }
1193  }
1194  }
1195 
1196  return TQString::null;
1197 }
1198 
1199 TDENetworkConnectionManager_BackendNM_DBusSignalReceiver::TDENetworkConnectionManager_BackendNM_DBusSignalReceiver(TDENetworkConnectionManager_BackendNMPrivate* parent) : m_parent(parent) {
1200  //
1201 }
1202 
1203 TDENetworkConnectionManager_BackendNM_DBusSignalReceiver::~TDENetworkConnectionManager_BackendNM_DBusSignalReceiver() {
1204  //
1205 }
1206 
1207 void TDENetworkConnectionManager_BackendNM_DBusSignalReceiver::dbusSignal(const TQT_DBusMessage& message) {
1208  if (message.type() == TQT_DBusMessage::SignalMessage) {
1209  TQString interface = message.interface();
1210  TQString sender = message.sender();
1211  TQString member = message.member();
1212  TQString path = message.path();
1213 
1214 // 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);
1215 
1216  if (interface == NM_VPN_DBUS_CONNECTION_SERVICE) {
1217  if (member == "VpnStateChanged") {
1218  // Demarshal data
1219  TQ_UINT32 state = message[0].toUInt32();
1220  TQ_UINT32 reason = message[1].toUInt32();
1221  if (state == NM_VPN_STATE_FAILED) {
1222  m_parent->internalProcessVPNFailure(reason);
1223  }
1224  }
1225  }
1226  else if (interface == NM_DBUS_DEVICE_SERVICE) {
1227  if (path == m_parent->m_dbusDeviceString) {
1228  if (member == "StateChanged") {
1229  // Demarshal data
1230  TQ_UINT32 new_state = message[0].toUInt32();
1231  TQ_UINT32 old_state = message[1].toUInt32();
1232  TQ_UINT32 reason = message[2].toUInt32();
1233  m_parent->internalProcessDeviceStateChanged(new_state, old_state, reason);
1234  }
1235  }
1236  }
1237  }
1238 }
1239 
1240 TDENetworkConnectionManager_BackendNM::TDENetworkConnectionManager_BackendNM(TDENetworkDevice* networkDevice) : TDENetworkConnectionManager(networkDevice) {
1241  d = new TDENetworkConnectionManager_BackendNMPrivate(this);
1242 
1243  // Set up proxy interfaces
1244  d->m_networkManagerProxy = new DBus::NetworkManagerProxy(NM_DBUS_SERVICE, NM_DBUS_PATH);
1245  d->m_networkManagerProxy->setConnection(TQT_DBusConnection::systemBus());
1246  d->m_networkManagerSettings = new DBus::SettingsInterface(NM_DBUS_SERVICE, NM_DBUS_PATH_SETTINGS);
1247  d->m_networkManagerSettings->setConnection(TQT_DBusConnection::systemBus());
1248  d->m_vpnProxy = new DBus::VPNPluginProxy(NM_VPN_DBUS_PLUGIN_SERVICE, NM_VPN_DBUS_PLUGIN_PATH);
1249  d->m_vpnProxy->setConnection(TQT_DBusConnection::systemBus());
1250 
1251  d->m_dbusDeviceString = deviceInterfaceString(deviceNode());
1252  if (d->m_dbusDeviceString != "") {
1253  d->m_networkDeviceProxy = new DBus::DeviceProxy(NM_DBUS_SERVICE, d->m_dbusDeviceString);
1254  d->m_networkDeviceProxy->setConnection(TQT_DBusConnection::systemBus());
1255  if (deviceType() == TDENetworkDeviceType::WiFi) {
1256  d->m_wiFiDeviceProxy = new DBus::WiFiDeviceProxy(NM_DBUS_SERVICE, d->m_dbusDeviceString);
1257  d->m_wiFiDeviceProxy->setConnection(TQT_DBusConnection::systemBus());
1258  }
1259  }
1260 
1261  // Connect global signals
1262  connect(d->m_networkManagerProxy, SIGNAL(StateChanged(TQ_UINT32)), d, SLOT(internalProcessGlobalStateChanged(TQ_UINT32)));
1263 
1264  // Connect VPN signals
1265  if (d->m_vpnProxy) {
1266  connect(d->m_vpnProxy, SIGNAL(StateChanged(TQ_UINT32)), d, SLOT(internalProcessVPNStateChanged(TQ_UINT32)));
1267  connect(d->m_vpnProxy, SIGNAL(LoginBanner(const TQString&)), d, SLOT(internalProcessVPNLoginBanner(const TQString&)));
1268  connect(d->m_vpnProxy, SIGNAL(Failure(TQ_UINT32)), d, SLOT(internalProcessVPNFailure(TQ_UINT32)));
1269  }
1270 
1271  // Connect local signals
1272  if (d->m_networkDeviceProxy) {
1273  connect(d->m_networkDeviceProxy, SIGNAL(StateChanged(TQ_UINT32, TQ_UINT32, TQ_UINT32)), d, SLOT(internalProcessDeviceStateChanged(TQ_UINT32, TQ_UINT32, TQ_UINT32)));
1274  }
1275  if (d->m_wiFiDeviceProxy) {
1276  connect(d->m_wiFiDeviceProxy, SIGNAL(AccessPointAdded(const TQT_DBusObjectPath&)), d, SLOT(internalProcessWiFiAccessPointAdded(const TQT_DBusObjectPath&)));
1277  connect(d->m_wiFiDeviceProxy, SIGNAL(AccessPointRemoved(const TQT_DBusObjectPath&)), d, SLOT(internalProcessWiFiAccessPointRemoved(const TQT_DBusObjectPath&)));
1278  connect(d->m_wiFiDeviceProxy, SIGNAL(PropertiesChanged(const TQMap<TQString, TQT_DBusVariant>&)), d, SLOT(internalProcessWiFiPropertiesChanged(const TQMap<TQString, TQT_DBusVariant>&)));
1279  }
1280 
1281  // Create public lists
1282  m_connectionList = new TDENetworkConnectionList;
1283  m_hwNeighborList = new TDENetworkHWNeighborList;
1284 
1285  // Run site survey to populate neighbor list with initial data
1286  siteSurvey();
1287 }
1288 
1289 TDENetworkConnectionManager_BackendNM::~TDENetworkConnectionManager_BackendNM() {
1290  // Destroy public lists
1291  clearTDENetworkConnectionList();
1292  delete m_connectionList;
1293  clearTDENetworkHWNeighborList();
1294  delete m_hwNeighborList;
1295 
1296  // Tear down proxy interfaces
1297  if (d->m_networkManagerProxy) delete d->m_networkManagerProxy;
1298  if (d->m_networkManagerSettings) delete d->m_networkManagerSettings;
1299  if (d->m_networkDeviceProxy) delete d->m_networkDeviceProxy;
1300 
1301  delete d;
1302 }
1303 
1304 void TDENetworkConnectionManager_BackendNMPrivate::internalProcessGlobalStateChanged(TQ_UINT32 state) {
1305  m_parent->internalNetworkConnectionStateChanged(m_parent->backendStatus());
1306 }
1307 
1308 void TDENetworkConnectionManager_BackendNMPrivate::internalProcessVPNStateChanged(TQ_UINT32 state) {
1309  m_parent->internalNetworkConnectionStateChanged(m_parent->backendStatus());
1310 }
1311 
1312 void TDENetworkConnectionManager_BackendNMPrivate::internalProcessVPNLoginBanner(const TQString& banner) {
1313  m_parent->internalVpnEvent(TDENetworkVPNEventType::LoginBanner, banner);
1314 }
1315 
1316 void TDENetworkConnectionManager_BackendNMPrivate::internalProcessVPNFailure(TQ_UINT32 reason) {
1317  // FIXME
1318  // This should provide a plain-text interpretation of the NetworkManager-specific error code
1319  m_parent->internalVpnEvent(TDENetworkVPNEventType::Failure, TQString("VPN connection attempt failed!<br>NetworkManager returned error %1.").arg(reason));
1320 }
1321 
1322 void TDENetworkConnectionManager_BackendNMPrivate::internalProcessDeviceStateChanged(TQ_UINT32 newState, TQ_UINT32 oldState, TQ_UINT32 reason) {
1323  Q_UNUSED(oldState)
1324 
1325  if (m_prevDeviceState == newState) return;
1326  m_prevDeviceState = newState;
1327 
1328  if (newState == NM_DEVICE_STATE_FAILED) {
1329  TQString errorString;
1330  if (reason == NM_DEVICE_STATE_REASON_NONE) {
1331  errorString = TQString("Connection attempt failed!");
1332  }
1333  else if (reason == NM_DEVICE_STATE_REASON_UNKNOWN) {
1334  errorString = TQString("Connection attempt failed!<br>Unknown error detected.");
1335  }
1336  else if (reason == NM_DEVICE_STATE_REASON_NOW_MANAGED) {
1337  errorString = TQString("Connection attempt failed!<br>Network device is now managed.");
1338  }
1339  else if (reason == NM_DEVICE_STATE_REASON_NOW_UNMANAGED) {
1340  errorString = TQString("Connection attempt failed!<br>Network device is now unmanaged.");
1341  }
1342  else if (reason == NM_DEVICE_STATE_REASON_CONFIG_FAILED) {
1343  errorString = TQString("Connection attempt failed!<br>Configuration failed.");
1344  }
1345  else if (reason == NM_DEVICE_STATE_REASON_IP_CONFIG_UNAVAILABLE) {
1346  errorString = TQString("Connection attempt failed!<br>IP configuration unavailable.");
1347  }
1348  else if (reason == NM_DEVICE_STATE_REASON_IP_CONFIG_EXPIRED) {
1349  errorString = TQString("Connection attempt failed!<br>IP configuration expired.");
1350  }
1351  else if (reason == NM_DEVICE_STATE_REASON_NO_SECRETS) {
1352  errorString = i18n("Connection attempt failed!<br>Secrets were required to establish a connection, but no secrets were available.");
1353  }
1354  else if (reason == NM_DEVICE_STATE_REASON_SUPPLICANT_DISCONNECT) {
1355  errorString = TQString("Connection attempt failed!<br>The supplicant was disconnected while attempting to establish a wireless connection.");
1356  }
1357  else if (reason == NM_DEVICE_STATE_REASON_SUPPLICANT_CONFIG_FAILED) {
1358  errorString = TQString("Connection attempt failed!<br>Supplicant configuration failed while attempting to establish a wireless connection.");
1359  }
1360  else if (reason == NM_DEVICE_STATE_REASON_SUPPLICANT_FAILED) {
1361  errorString = i18n("Connection attempt failed!<br>The supplicant failed while attempting to establish a wireless connection.");
1362  }
1363  else if (reason == NM_DEVICE_STATE_REASON_SUPPLICANT_TIMEOUT) {
1364  errorString = i18n("Connection attempt failed!<br>The supplicant timed out while attempting to establish a wireless connection.");
1365  }
1366  else if (reason == NM_DEVICE_STATE_REASON_PPP_START_FAILED) {
1367  errorString = i18n("Connection attempt failed!<br>The PPP client failed to start.");
1368  }
1369  else if (reason == NM_DEVICE_STATE_REASON_PPP_DISCONNECT) {
1370  errorString = i18n("Connection attempt failed!<br>The PPP client was disconnected.");
1371  }
1372  else if (reason == NM_DEVICE_STATE_REASON_PPP_FAILED) {
1373  errorString = i18n("Connection attempt failed!<br>Unknown PPP failure.");
1374  }
1375  else if (reason == NM_DEVICE_STATE_REASON_DHCP_START_FAILED) {
1376  errorString = i18n("Connection attempt failed!<br>The DHCP client failed to start.");
1377  }
1378  else if (reason == NM_DEVICE_STATE_REASON_DHCP_ERROR) {
1379  errorString = i18n("Connection attempt failed!<br>The DHCP client encountered an error.");
1380  }
1381  else if (reason == NM_DEVICE_STATE_REASON_DHCP_FAILED) {
1382  errorString = i18n("Connection attempt failed!<br>Uknown DHCP failure.");
1383  }
1384  else if (reason == NM_DEVICE_STATE_REASON_SHARED_START_FAILED) {
1385  errorString = i18n("Connection attempt failed!<br>The connection sharing service failed to start.");
1386  }
1387  else if (reason == NM_DEVICE_STATE_REASON_SHARED_FAILED) {
1388  errorString = i18n("Connection attempt failed!<br>The connection sharing service encountered an error.");
1389  }
1390  else if (reason == NM_DEVICE_STATE_REASON_AUTOIP_START_FAILED) {
1391  errorString = i18n("Connection attempt failed!<br>The AutoIP service failed to start.");
1392  }
1393  else if (reason == NM_DEVICE_STATE_REASON_AUTOIP_ERROR) {
1394  errorString = i18n("Connection attempt failed!<br>The AutoIP service encountered an error.");
1395  }
1396  else if (reason == NM_DEVICE_STATE_REASON_AUTOIP_FAILED) {
1397  errorString = i18n("Connection attempt failed!<br>Unknown AutoIP failure.");
1398  }
1399  else if (reason == NM_DEVICE_STATE_REASON_MODEM_BUSY) {
1400  errorString = i18n("Connection attempt failed!<br>Modem was busy.");
1401  }
1402  else if (reason == NM_DEVICE_STATE_REASON_MODEM_NO_DIAL_TONE) {
1403  errorString = i18n("Connection attempt failed!<br>No dial tone.");
1404  }
1405  else if (reason == NM_DEVICE_STATE_REASON_MODEM_NO_CARRIER) {
1406  errorString = i18n("Connection attempt failed!<br>No carrier detected.");
1407  }
1408  else if (reason == NM_DEVICE_STATE_REASON_MODEM_DIAL_TIMEOUT) {
1409  errorString = i18n("Connection attempt failed!<br>Modem timed out while dialing.");
1410  }
1411  else if (reason == NM_DEVICE_STATE_REASON_MODEM_DIAL_FAILED) {
1412  errorString = i18n("Connection attempt failed!<br>The modem failed to dial.");
1413  }
1414  else if (reason == NM_DEVICE_STATE_REASON_MODEM_INIT_FAILED) {
1415  errorString = i18n("Connection attempt failed!<br>Modem initialization failed.");
1416  }
1417  else if (reason == NM_DEVICE_STATE_REASON_GSM_APN_FAILED) {
1418  errorString = i18n("Connection attempt failed!<br>GSM APN failure.");
1419  }
1420  else if (reason == NM_DEVICE_STATE_REASON_GSM_REGISTRATION_NOT_SEARCHING) {
1421  errorString = i18n("Connection attempt failed!<br>GSM registration failed to search for networks.");
1422  }
1423  else if (reason == NM_DEVICE_STATE_REASON_GSM_REGISTRATION_DENIED) {
1424  errorString = i18n("Connection attempt failed!<br>GSM registration attempt was rejected.");
1425  }
1426  else if (reason == NM_DEVICE_STATE_REASON_GSM_REGISTRATION_TIMEOUT) {
1427  errorString = i18n("Connection attempt failed!<br>GSM registration attempt timed out.");
1428  }
1429  else if (reason == NM_DEVICE_STATE_REASON_GSM_REGISTRATION_FAILED) {
1430  errorString = i18n("Connection attempt failed!<br>GSM registration attempt failed.");
1431  }
1432  else if (reason == NM_DEVICE_STATE_REASON_GSM_PIN_CHECK_FAILED) {
1433  errorString = i18n("Connection attempt failed!<br>GSM PIN check failed.");
1434  }
1435  else if (reason == NM_DEVICE_STATE_REASON_FIRMWARE_MISSING) {
1436  errorString = i18n("Connection attempt failed!<br>Network device firmware is missing.");
1437  }
1438  else if (reason == NM_DEVICE_STATE_REASON_REMOVED) {
1439  errorString = i18n("Connection attempt failed!<br>Network device was removed.");
1440  }
1441  else if (reason == NM_DEVICE_STATE_REASON_SLEEPING) {
1442  errorString = i18n("Connection attempt failed!<br>Network device is sleeping.");
1443  }
1444  else if (reason == NM_DEVICE_STATE_REASON_CONNECTION_REMOVED) {
1445  errorString = i18n("Connection attempt failed!<br>Connection was removed.");
1446  }
1447  else if (reason == NM_DEVICE_STATE_REASON_USER_REQUESTED) {
1448  errorString = i18n("Connection attempt failed!<br>User requested device disconnection.");
1449  }
1450  else if (reason == NM_DEVICE_STATE_REASON_CARRIER) {
1451  errorString = i18n("Connection attempt failed!<br>Carrier or link status changed.");
1452  }
1453  else if (reason == NM_DEVICE_STATE_REASON_CONNECTION_ASSUMED) {
1454  errorString = i18n("Connection attempt failed!<br>Device and/or connection already active.");
1455  }
1456  else if (reason == NM_DEVICE_STATE_REASON_SUPPLICANT_AVAILABLE) {
1457  errorString = i18n("Connection attempt failed!<br>The supplicant is now available.");
1458  }
1459  else if (reason == NM_DEVICE_STATE_REASON_MODEM_NOT_FOUND) {
1460  errorString = i18n("Connection attempt failed!<br>Requested modem was not found.");
1461  }
1462  else if (reason == NM_DEVICE_STATE_REASON_BT_FAILED) {
1463  errorString = i18n("Connection attempt failed!<br>Bluetooth connection timeout.");
1464  }
1465  else if (reason == NM_DEVICE_STATE_REASON_GSM_SIM_NOT_INSERTED) {
1466  errorString = i18n("Connection attempt failed!<br>GSM SIM not inserted.");
1467  }
1468  else if (reason == NM_DEVICE_STATE_REASON_GSM_SIM_PIN_REQUIRED) {
1469  errorString = i18n("Connection attempt failed!<br>GSM PIN required.");
1470  }
1471  else if (reason == NM_DEVICE_STATE_REASON_GSM_SIM_PUK_REQUIRED) {
1472  errorString = i18n("Connection attempt failed!<br>GSM PUK required.");
1473  }
1474  else if (reason == NM_DEVICE_STATE_REASON_GSM_SIM_WRONG) {
1475  errorString = i18n("Connection attempt failed!<br>GSM SIM incorrect.");
1476  }
1477  else if (reason == NM_DEVICE_STATE_REASON_INFINIBAND_MODE) {
1478  errorString = i18n("Connection attempt failed!<br>Incorrect Infiniband mode.");
1479  }
1480  else if (reason == NM_DEVICE_STATE_REASON_DEPENDENCY_FAILED) {
1481  errorString = i18n("Connection attempt failed!<br>Dependency failure.");
1482  }
1483  else if (reason == NM_DEVICE_STATE_REASON_BR2684_FAILED) {
1484  errorString = i18n("Connection attempt failed!<br>Unknown bridge failure.");
1485  }
1486  else if (reason == NM_DEVICE_STATE_REASON_MODEM_MANAGER_UNAVAILABLE) {
1487  errorString = i18n("Connection attempt failed!<br>ModemManager not available.");
1488  }
1489  else if (reason == NM_DEVICE_STATE_REASON_SSID_NOT_FOUND) {
1490  errorString = i18n("Connection attempt failed!<br>SSID not found.");
1491  }
1492  else if (reason == NM_DEVICE_STATE_REASON_SECONDARY_CONNECTION_FAILED) {
1493  errorString = i18n("Connection attempt failed!<br>Secondary connection failure.");
1494  }
1495  else {
1496  // FIXME
1497  // This should provide a plain-text interpretation of the NetworkManager-specific error code
1498  errorString = TQString("Connection attempt failed!<br>NetworkManager returned error %1.").arg(reason);
1499  }
1500  m_parent->internalNetworkDeviceEvent(TDENetworkDeviceEventType::Failure, errorString);
1501  }
1502 
1503  m_parent->internalNetworkDeviceStateChanged(nmDeviceStateToTDEDeviceState(newState), m_parent->deviceNode());
1504 }
1505 
1506 void TDENetworkConnectionManager_BackendNMPrivate::internalProcessWiFiAccessPointAdded(const TQT_DBusObjectPath& dbuspath) {
1507  TDENetworkWiFiAPInfo* apInfo = m_parent->getAccessPointDetails(dbuspath);
1508  if (apInfo) {
1509  if (!m_accessPointProxyList.contains(dbuspath)) {
1510  // Set up monitoring object
1511  DBus::AccessPointProxy* apProxy = new DBus::AccessPointProxy(NM_DBUS_SERVICE, dbuspath);
1512  apProxy->setConnection(TQT_DBusConnection::systemBus());
1513  connect(apProxy, SIGNAL(PropertiesChanged(const TQMap<TQString, TQT_DBusVariant>&)), this, SLOT(internalProcessAPPropertiesChanged(const TQMap<TQString, TQT_DBusVariant>&)));
1514  m_accessPointProxyList[dbuspath] = (apProxy);
1515 
1516  // Notify client applications
1517  m_parent->internalAccessPointStatusChanged(apInfo->BSSID, TDENetworkAPEventType::Discovered);
1518  }
1519  delete apInfo;
1520  }
1521 }
1522 
1523 void TDENetworkConnectionManager_BackendNMPrivate::internalProcessWiFiAccessPointRemoved(const TQT_DBusObjectPath& dbuspath) {
1524  TDENetworkWiFiAPInfo* apInfo = m_parent->getAccessPointDetails(dbuspath);
1525  if (apInfo) {
1526  // Notify client applications
1527  m_parent->internalAccessPointStatusChanged(apInfo->BSSID, TDENetworkAPEventType::Lost);
1528  delete apInfo;
1529 
1530  // Destroy related monitoring object
1531  DBus::AccessPointProxy* apProxy = m_accessPointProxyList[dbuspath];
1532  m_accessPointProxyList.remove(dbuspath);
1533  if (apProxy) {
1534  delete apProxy;
1535  }
1536  }
1537 }
1538 
1539 void TDENetworkConnectionManager_BackendNMPrivate::internalProcessWiFiPropertiesChanged(const TQMap<TQString, TQT_DBusVariant>& props) {
1540  if (m_wiFiDeviceProxy) {
1541  if (props.contains("ActiveAccessPoint")) {
1542  TQT_DBusError error;
1543  TDENetworkWiFiAPInfo* apInfo = m_parent->getAccessPointDetails(m_wiFiDeviceProxy->getActiveAccessPoint(error));
1544  if (apInfo) {
1545  m_parent->internalAccessPointStatusChanged(apInfo->BSSID, TDENetworkAPEventType::AccessPointChanged);
1546  }
1547  }
1548  else if (props.contains("Bitrate")) {
1549  m_parent->internalNetworkDeviceEvent(TDENetworkDeviceEventType::BitRateChanged, TQString::null);
1550  }
1551  }
1552 }
1553 
1554 void TDENetworkConnectionManager_BackendNMPrivate::internalProcessAPPropertiesChanged(const TQMap<TQString, TQT_DBusVariant>& props) {
1555  const DBus::AccessPointProxy* apProxy = dynamic_cast<const DBus::AccessPointProxy*>(sender());
1556  if (apProxy) {
1557  TQT_DBusError error;
1558  TDEMACAddress BSSID;
1559  BSSID.fromString(apProxy->getHwAddress(error));
1560  if (props.contains("Strength")) {
1561  m_parent->internalAccessPointStatusChanged(BSSID, TDENetworkAPEventType::SignalStrengthChanged);
1562  }
1563  }
1564 }
1565 
1566 TDENetworkDeviceType::TDENetworkDeviceType TDENetworkConnectionManager_BackendNM::deviceType() {
1567  if (!m_networkDevice) {
1568  return TDENetworkDeviceType::BackendOnly;
1569  }
1570  else {
1571  if (d->m_dbusDeviceString != "") {
1572  // Query NM for the device type
1573  TQT_DBusError error;
1574  d->m_dbusDeviceString = deviceInterfaceString(deviceNode());
1575  DBus::DeviceProxy genericDevice(NM_DBUS_SERVICE, d->m_dbusDeviceString);
1576  genericDevice.setConnection(TQT_DBusConnection::systemBus());
1577  TDENetworkDeviceType::TDENetworkDeviceType ret = nmDeviceTypeToTDEDeviceType(genericDevice.getDeviceType(error));
1578  if (error.isValid()) {
1579  // Error!
1580  PRINT_ERROR((error.name() + ": " + error.message()))
1581  return TDENetworkDeviceType::Other;
1582  }
1583  else {
1584  return ret;
1585  }
1586  }
1587  else {
1588  // Error!
1589  PRINT_ERROR(TQString("Invalid DBUS device string '%1'").arg(d->m_dbusDeviceString))
1590  return TDENetworkDeviceType::Other;
1591  }
1592  }
1593 }
1594 
1595 TDENetworkConnectionType::TDENetworkConnectionType TDENetworkConnectionManager_BackendNM::connectionType(TQString dbusPath) {
1596  TDENetworkConnectionType::TDENetworkConnectionType connType = TDENetworkConnectionType::Other;
1597  TQ_UINT32 ret;
1598  TQT_DBusError error;
1599 
1600  // Obtain connection settings from the path specified
1601  DBus::ConnectionSettingsInterface connectionSettings(NM_DBUS_SERVICE, dbusPath);
1602  connectionSettings.setConnection(TQT_DBusConnection::systemBus());
1603  connect(&connectionSettings, SIGNAL(GetSettingsAsyncReply(int, const TQT_DBusDataMap<TQString>&)), d, SLOT(processConnectionSettingsAsyncReply(int, const TQT_DBusDataMap<TQString>&)));
1604  int asyncCallID;
1605  ret = connectionSettings.GetSettingsAsync(asyncCallID, error);
1606  if (ret && error.isValid()) {
1607  ret = 0;
1608  PRINT_ERROR((error.name() + ": " + error.message()))
1609  }
1610  if (ret) {
1611  // Wait for the asynchronous call to return...
1612  d->nmConnectionSettingsAsyncCallWaiting[asyncCallID] = true;
1613  TQTimer nmCallTimeoutTimer;
1614  nmCallTimeoutTimer.start(NM_ASYNC_TIMEOUT_MS, true);
1615  while (d->nmConnectionSettingsAsyncCallWaiting[asyncCallID]) {
1616  tqApp->processEvents();
1617  if (!nmCallTimeoutTimer.isActive()) {
1618  PRINT_ERROR(TQString("DBUS asynchronous call timed out!"))
1619  break;
1620  }
1621  }
1622  TQT_DBusTQStringDataMap connectionSettingsMap = d->nmConnectionSettingsAsyncSettingsResponse[asyncCallID];
1623  if (d->nmConnectionSettingsAsyncSettingsErrorResponse.contains(asyncCallID)) {
1624  PRINT_ERROR((d->nmConnectionSettingsAsyncSettingsErrorResponse[asyncCallID].name() + ": " + d->nmConnectionSettingsAsyncSettingsErrorResponse[asyncCallID].message()));
1625  d->nmConnectionSettingsAsyncSettingsErrorResponse.remove(asyncCallID);
1626  }
1627  d->nmConnectionSettingsAsyncCallWaiting.remove(asyncCallID);
1628  if (d->nmConnectionSettingsAsyncSettingsResponse.contains(asyncCallID)) {
1629  d->nmConnectionSettingsAsyncSettingsResponse.remove(asyncCallID);
1630  }
1631 
1632  // Parse settings to find connection type
1633  TQT_DBusTQStringDataMap::const_iterator it2;
1634  for (it2 = connectionSettingsMap.begin(); it2 != connectionSettingsMap.end(); ++it2) {
1635  TQString outerKeyValue = it2.key();
1636  TQT_DBusData dataValue = it2.data();
1637 
1638  TQT_DBusTQStringDataMap nestedConnectionSettingsMap = dataValue.toStringKeyMap();
1639  TQT_DBusTQStringDataMap::const_iterator it3;
1640  for (it3 = nestedConnectionSettingsMap.begin(); it3 != nestedConnectionSettingsMap.end(); ++it3) {
1641  TQString keyValue = it3.key();
1642  TQT_DBusData dataValue = it3.data();
1643  if (dataValue.type() == TQT_DBusData::Variant) {
1644  TQT_DBusVariant dataValueVariant = dataValue.toVariant();
1645  TQT_DBusData dataValue2 = dataValueVariant.value;
1646  if (dataValue2.type() != TQT_DBusData::Variant) {
1647  if (outerKeyValue.lower() == "connection") {
1648  if (keyValue.lower() == "type") {
1649  connType = nmConnectionTypeToTDEConnectionType(dataValue2.toString());
1650  }
1651  }
1652  }
1653  }
1654  }
1655  }
1656  }
1657 
1658  return connType;
1659 }
1660 
1661 TQString TDENetworkConnectionManager_BackendNM::backendName() {
1662  return i18n("NetworkManager");
1663 }
1664 
1665 TDENetworkGlobalManagerFlags::TDENetworkGlobalManagerFlags TDENetworkConnectionManager_BackendNM::backendStatus() {
1666  if (d->m_networkManagerProxy) {
1667  TQ_UINT32 ret;
1668  TQT_DBusError error;
1669  ret = d->m_networkManagerProxy->getState(error);
1670  if (error.isValid()) {
1671  // Error!
1672  PRINT_ERROR((error.name() + ": " + error.message()))
1673  return TDENetworkGlobalManagerFlags::BackendUnavailable;
1674  }
1675  else {
1676  TDENetworkGlobalManagerFlags::TDENetworkGlobalManagerFlags globalFlags = nmGlobalStateToTDEGlobalState(ret);
1677  TDENetworkGlobalManagerFlags::TDENetworkGlobalManagerFlags vpnFlags = TDENetworkGlobalManagerFlags::Unknown;
1678  if (d->m_vpnProxy) {
1679  ret = d->m_vpnProxy->getState(error);
1680  if (error.isValid()) {
1681  // Error!
1682  bool print_error = true;
1683  if (error.name() == "org.freedesktop.DBus.Error.ServiceUnknown") {
1684  if (d->vpn_service_error_notified) {
1685  print_error = false;
1686  }
1687  else {
1688  d->vpn_service_error_notified = true;
1689  }
1690  }
1691  if (print_error) {
1692  PRINT_ERROR(TQString("Attempting to access the network-manager VPN service returned: %1").arg(error.name() + ": " + error.message()))
1693  }
1694  vpnFlags = TDENetworkGlobalManagerFlags::VPNUnknown;
1695  }
1696  else {
1697  vpnFlags = nmVPNStateToTDEGlobalState(ret);
1698  }
1699  }
1700  return globalFlags | vpnFlags;
1701  }
1702  }
1703  else {
1704  return TDENetworkGlobalManagerFlags::BackendUnavailable;
1705  }
1706 }
1707 
1708 TDENetworkDeviceInformation TDENetworkConnectionManager_BackendNM::deviceInformation() {
1709  TQT_DBusError error;
1710  TDENetworkDeviceInformation ret;
1711 
1712  if (d->m_networkDeviceProxy) {
1713  ret.statusFlags = nmDeviceStateToTDEDeviceState(d->m_networkDeviceProxy->getState(error));
1714  ret.UUID = d->m_networkDeviceProxy->getUdi(error);
1715  ret.backendDriver = d->m_networkDeviceProxy->getDriver(error);
1716  ret.backendDriverVersion = d->m_networkDeviceProxy->getDriverVersion(error);
1717  ret.firmwareVersion = d->m_networkDeviceProxy->getFirmwareVersion(error);
1718  ret.capabilityFlags = nmCapabilityFlagsToTDECapabilityFlags(d->m_networkDeviceProxy->getCapabilities(error));
1719  // ipConfiguration is not filled in, as the TDE HW library provides complementary functionality and is more reliable/easier to use and maintain
1720  ret.managed = d->m_networkDeviceProxy->getManaged(error);
1721  ret.autoConnect = d->m_networkDeviceProxy->getAutoconnect(error);
1722  ret.firmwareMissing = d->m_networkDeviceProxy->getFirmwareMissing(error);
1723  ret.deviceType = nmDeviceTypeToTDEDeviceType(d->m_networkDeviceProxy->getDeviceType(error));
1724  if (error.isValid()) {
1725  // Error!
1726  bool print_error = true;
1727  if (error.name() == "org.freedesktop.DBus.Error.AccessDenied") {
1728  if (error.message().contains("org.freedesktop.NetworkManager.Device")) {
1729  // Unable to determine if device allows autoconnect
1730  // Assume true!
1731  ret.autoConnect = true;
1732  if (d->device_autoconnect_error_notified) {
1733  print_error = false;
1734  }
1735  else {
1736  d->device_autoconnect_error_notified = true;
1737  }
1738  }
1739  }
1740  if (print_error) {
1741  PRINT_ERROR((error.name() + ": " + error.message()))
1742  }
1743 
1744  // Reset error object to avoid spurious error messages on the command line
1745  error = TQT_DBusError();
1746  }
1747 
1748  // Populate wiFiInfo
1749  if ((deviceType() == TDENetworkDeviceType::WiFi) && (d->m_wiFiDeviceProxy)) {
1750  ret.wiFiInfo.valid = true;
1751  ret.wiFiInfo.hwAddress.fromString(d->m_wiFiDeviceProxy->getHwAddress(error));
1752  ret.wiFiInfo.permanentHWAddress.fromString(d->m_wiFiDeviceProxy->getPermHwAddress(error));
1753  ret.wiFiInfo.operatingMode = nmWiFiModeToTDEWiFiMode(d->m_wiFiDeviceProxy->getMode(error));
1754  ret.wiFiInfo.bitrate = d->m_wiFiDeviceProxy->getBitrate(error);
1755  TDENetworkWiFiAPInfo* apInfo = getAccessPointDetails(d->m_wiFiDeviceProxy->getActiveAccessPoint(error));
1756  if (error.isValid()) {
1757  PRINT_ERROR((error.name() + ": " + error.message()))
1758 
1759  // Reset error object to avoid spurious error messages on the command line
1760  error = TQT_DBusError();
1761  }
1762  if (apInfo) {
1763  ret.wiFiInfo.activeAccessPointBSSID = apInfo->BSSID;
1764  TDENetworkWiFiAPInfo* neighborListAPInfo = findAccessPointByBSSID(ret.wiFiInfo.activeAccessPointBSSID);
1765  if (neighborListAPInfo) {
1766  *neighborListAPInfo = *apInfo;
1767  }
1768  delete apInfo;
1769  }
1770  else {
1771  ret.wiFiInfo.activeAccessPointBSSID = TDEMACAddress();
1772  }
1773  ret.wiFiInfo.wirelessFlags = tdeWiFiFlagsToNMWiFiFlags(d->m_wiFiDeviceProxy->getWirelessCapabilities(error));
1774  }
1775  else {
1776  ret.wiFiInfo.valid = false;
1777  }
1778 
1779  // Get active connection UUID
1780  TQT_DBusObjectPath connectionPath = d->m_networkDeviceProxy->getActiveConnection(error);
1781  if (!error.isValid()) {
1782  DBus::ActiveConnectionProxy activeConnection(NM_DBUS_SERVICE, connectionPath);
1783  activeConnection.setConnection(TQT_DBusConnection::systemBus());
1784  ret.activeConnectionUUID = activeConnection.getUuid(error);
1785  if (error.isValid()) {
1786  ret.activeConnectionUUID = TQString::null;
1787  }
1788  }
1789 
1790  ret.valid = true;
1791  }
1792 
1793  return ret;
1794 }
1795 
1796 TDENetworkDeviceInformation TDENetworkConnectionManager_BackendNM::deviceStatus() {
1797  TQT_DBusError error;
1798  TDENetworkDeviceInformation ret;
1799 
1800  if (d->m_networkDeviceProxy) {
1801  ret.statusFlags = nmDeviceStateToTDEDeviceState(d->m_networkDeviceProxy->getState(error));
1802  ret.UUID = d->m_networkDeviceProxy->getUdi(error);
1803 
1804  // Get active connection UUID
1805  TQT_DBusObjectPath connectionPath = d->m_networkDeviceProxy->getActiveConnection(error);
1806  if (!error.isValid()) {
1807  DBus::ActiveConnectionProxy activeConnection(NM_DBUS_SERVICE, connectionPath);
1808  activeConnection.setConnection(TQT_DBusConnection::systemBus());
1809  ret.activeConnectionUUID = activeConnection.getUuid(error);
1810  if (error.isValid()) {
1811  ret.activeConnectionUUID = TQString::null;
1812  }
1813  }
1814 
1815  ret.valid = true;
1816  }
1817 
1818  return ret;
1819 }
1820 
1821 void TDENetworkConnectionManager_BackendNMPrivate::processConnectionSettingsAsyncReply(int asyncCallId, const TQT_DBusDataMap<TQString>& settings) {
1822  nmConnectionSettingsAsyncCallWaiting[asyncCallId] = false;
1823  nmConnectionSettingsAsyncSettingsResponse[asyncCallId] = settings;
1824 }
1825 
1826 void TDENetworkConnectionManager_BackendNMPrivate::processConnectionSettingsUpdateAsyncReply(int asyncCallId) {
1827  nmConnectionSettingsAsyncCallWaiting[asyncCallId] = false;
1828 }
1829 
1830 void TDENetworkConnectionManager_BackendNMPrivate::processAddConnectionAsyncReply(int asyncCallId, const TQT_DBusObjectPath& path) {
1831  nmConnectionSettingsAsyncCallWaiting[asyncCallId] = false;
1832  nmAddConnectionAsyncResponse[asyncCallId] = path;
1833 }
1834 
1835 void TDENetworkConnectionManager_BackendNMPrivate::processConnectionSettingsAsyncError(int asyncCallId, const TQT_DBusError error) {
1836  nmConnectionSettingsAsyncSettingsErrorResponse[asyncCallId] = error;
1837 }
1838 
1839 void TDENetworkConnectionManager_BackendNMPrivate::processConnectionSettingsUpdateAsyncError(int asyncCallId, const TQT_DBusError error) {
1840  nmConnectionSettingsUpdateAsyncSettingsErrorResponse[asyncCallId] = error;
1841 }
1842 
1843 void TDENetworkConnectionManager_BackendNMPrivate::processAddConnectionAsyncError(int asyncCallId, const TQT_DBusError error) {
1844  nmAddConnectionAsyncErrorResponse[asyncCallId] = error;
1845 }
1846 
1847 void TDENetworkConnectionManager_BackendNM::loadConnectionInformation() {
1848  if (d->nonReentrantCallActive) return;
1849 
1850  d->nonReentrantCallActive = true;
1851 
1852  TDEMACAddress deviceMACAddress;
1853  deviceMACAddress.fromString(this->deviceMACAddress());
1854 
1855  if (d->m_networkManagerSettings) {
1856  clearTDENetworkConnectionList();
1857  TQT_DBusObjectPathList connections;
1858  TQT_DBusError error;
1859  bool ret;
1860  int state;
1861  ret = d->m_networkManagerSettings->ListConnections(connections, error);
1862  if (ret) {
1863  TQT_DBusObjectPathList::iterator it;
1864  for (it = connections.begin(); it != connections.end(); ++it) {
1865  TDENetworkConnection* connection;
1866  TDEWiredEthernetConnection* ethernetConnection = NULL;
1867  TDEWiredInfinibandConnection* infinibandConnection = NULL;
1868  TDEWiFiConnection* wiFiConnection = NULL;
1869  TDEVPNConnection* vpnConnection = NULL;
1870  TDEWiMaxConnection* wiMaxConnection = NULL;
1871  TDEVLANConnection* vlanConnection = NULL;
1872  TDEOLPCMeshConnection* olpcMeshConnection = NULL;
1873  TDEBluetoothConnection* bluetoothConnection = NULL;
1874  TDEModemConnection* modemConnection = NULL;
1875  TDENetworkConnectionType::TDENetworkConnectionType connType = connectionType((*it));
1876  if (connType == TDENetworkConnectionType::WiredEthernet) {
1877  connection = ethernetConnection = new TDEWiredEthernetConnection;
1878  }
1879  else if (connType == TDENetworkConnectionType::Infiniband) {
1880  connection = infinibandConnection = new TDEWiredInfinibandConnection;
1881  }
1882  else if (connType == TDENetworkConnectionType::WiFi) {
1883  connection = wiFiConnection = new TDEWiFiConnection;
1884  }
1885  else if (connType == TDENetworkConnectionType::VPN) {
1886  connection = vpnConnection = new TDEVPNConnection;
1887  }
1888  else if (connType == TDENetworkConnectionType::WiMax) {
1889  connection = wiMaxConnection = new TDEWiMaxConnection;
1890  }
1891  else if (connType == TDENetworkConnectionType::VLAN) {
1892  connection = vlanConnection = new TDEVLANConnection;
1893  }
1894  else if (connType == TDENetworkConnectionType::OLPCMesh) {
1895  connection = olpcMeshConnection = new TDEOLPCMeshConnection;
1896  }
1897  else if (connType == TDENetworkConnectionType::Bluetooth) {
1898  connection = bluetoothConnection = new TDEBluetoothConnection;
1899  }
1900  else if (connType == TDENetworkConnectionType::Modem) {
1901  connection = modemConnection = new TDEModemConnection;
1902  }
1903  else {
1904  connection = new TDENetworkConnection;
1905  }
1906  // Set up defaults
1907  connection->ipConfig.connectionFlags = TDENetworkIPConfigurationFlags::IPV4DHCPIP | \
1908  TDENetworkIPConfigurationFlags::IPV4DHCPDNS | \
1909  TDENetworkIPConfigurationFlags::IPV4DHCPRoutes | \
1910  TDENetworkIPConfigurationFlags::IPV4MayUseAsDefaultRoute | \
1911  TDENetworkIPConfigurationFlags::IPV6DHCPIP | \
1912  TDENetworkIPConfigurationFlags::IPV6DHCPDNS | \
1913  TDENetworkIPConfigurationFlags::IPV6DHCPRoutes | \
1914  TDENetworkIPConfigurationFlags::IPV6MayUseAsDefaultRoute;
1915  // Set up NM-specific defaults
1916  // Keep in sync with latest NM default settings!
1917  // NM 0.9 setting descriptions and default values are available at:
1918  // http://projects.gnome.org/NetworkManager/developers/api/09/ref-settings.html
1919  connection->autoConnect = true;
1920 
1921  if (wiFiConnection) {
1922  wiFiConnection->securitySettings.authType = TDENetworkWiFiAuthType::Open;
1923  }
1924 
1925 #ifdef DEBUG_NETWORK_MANAGER_COMMUNICATIONS
1926  printf("[network-manager comm debug] %s\n", (*it).data()); fflush(stdout);
1927 #endif // DEBUG_NETWORK_MANAGER_COMMUNICATIONS
1928 
1929  // Obtain connection settings from the path specified
1930  DBus::ConnectionSettingsInterface connectionSettings(NM_DBUS_SERVICE, (*it));
1931  connectionSettings.setConnection(TQT_DBusConnection::systemBus());
1932  connect(&connectionSettings, SIGNAL(GetSettingsAsyncReply(int, const TQT_DBusDataMap<TQString>&)), d, SLOT(processConnectionSettingsAsyncReply(int, const TQT_DBusDataMap<TQString>&)));
1933  connect(&connectionSettings, SIGNAL(AsyncErrorResponseDetected(int, const TQT_DBusError)), d, SLOT(processConnectionSettingsAsyncError(int, const TQT_DBusError)));
1934  int asyncCallID;
1935  ret = connectionSettings.GetSettingsAsync(asyncCallID, error);
1936  if (ret && error.isValid()) {
1937  ret = 0;
1938  PRINT_ERROR((error.name() + ": " + error.message()))
1939  }
1940  if (ret) {
1941  // Wait for the asynchronous call to return...
1942  d->nmConnectionSettingsAsyncCallWaiting[asyncCallID] = true;
1943  TQTimer nmCallTimeoutTimer;
1944  nmCallTimeoutTimer.start(NM_ASYNC_TIMEOUT_MS, true);
1945  while (d->nmConnectionSettingsAsyncCallWaiting[asyncCallID]) {
1946  tqApp->processEvents();
1947  if (!nmCallTimeoutTimer.isActive()) {
1948  PRINT_ERROR(TQString("DBUS asynchronous call timed out!"))
1949  break;
1950  }
1951  }
1952  TQT_DBusTQStringDataMap connectionSettingsMap = d->nmConnectionSettingsAsyncSettingsResponse[asyncCallID];
1953  if (d->nmConnectionSettingsAsyncSettingsErrorResponse.contains(asyncCallID)) {
1954  PRINT_ERROR((d->nmConnectionSettingsAsyncSettingsErrorResponse[asyncCallID].name() + ": " + d->nmConnectionSettingsAsyncSettingsErrorResponse[asyncCallID].message()));
1955  d->nmConnectionSettingsAsyncSettingsErrorResponse.remove(asyncCallID);
1956  }
1957  d->nmConnectionSettingsAsyncCallWaiting.remove(asyncCallID);
1958  if (d->nmConnectionSettingsAsyncSettingsResponse.contains(asyncCallID)) {
1959  d->nmConnectionSettingsAsyncSettingsResponse.remove(asyncCallID);
1960  }
1961 
1962 #ifdef DEBUG_NETWORK_MANAGER_COMMUNICATIONS
1963  printf("[network-manager comm debug] received DBUS object structure map follows:\n"); fflush(stdout);
1964  printDBUSObjectStructure(TQT_DBusData::fromStringKeyMap(connectionSettingsMap));
1965 #endif // DEBUG_NETWORK_MANAGER_COMMUNICATIONS
1966 
1967  // Parse settings
1968  TQT_DBusTQStringDataMap::const_iterator it2;
1969  for (it2 = connectionSettingsMap.begin(); it2 != connectionSettingsMap.end(); ++it2) {
1970  TQString outerKeyValue = it2.key();
1971  TQT_DBusData dataValue = it2.data();
1972 #ifdef DEBUG_NETWORK_MANAGER_COMMUNICATIONS
1973  printf("[network-manager comm debug] [%s]\n", outerKeyValue.ascii()); fflush(stdout);
1974 #endif // DEBUG_NETWORK_MANAGER_COMMUNICATIONS
1975  TQT_DBusTQStringDataMap nestedConnectionSettingsMap = dataValue.toStringKeyMap();
1976  TQT_DBusTQStringDataMap::const_iterator it3;
1977  for (it3 = nestedConnectionSettingsMap.begin(); it3 != nestedConnectionSettingsMap.end(); ++it3) {
1978  TQString keyValue = it3.key();
1979  TQT_DBusData dataValue = it3.data();
1980  if (dataValue.type() != TQT_DBusData::Variant) {
1981 #ifdef DEBUG_NETWORK_MANAGER_COMMUNICATIONS
1982  printf("[network-manager comm debug] %s = %s (type %d(%s))\n", keyValue.ascii(), dataValue.toString().ascii(), dataValue.type(), dataValue.typeName()); fflush(stdout);
1983 #endif // DEBUG_NETWORK_MANAGER_COMMUNICATIONS
1984  // No NM settings are known which use this style
1985  }
1986  else {
1987  TQT_DBusVariant dataValueVariant = dataValue.toVariant();
1988  TQT_DBusData dataValue2 = dataValueVariant.value;
1989  if (dataValue2.type() != TQT_DBusData::Variant) {
1990 #ifdef DEBUG_NETWORK_MANAGER_COMMUNICATIONS
1991  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);
1992 #endif // DEBUG_NETWORK_MANAGER_COMMUNICATIONS
1993  // Most NM settings use this style
1994  if (outerKeyValue.lower() == "connection") {
1995  if (keyValue.lower() == "id") {
1996  connection->friendlyName = dataValue2.toString();
1997  }
1998  else if (keyValue.lower() == "uuid") {
1999  connection->UUID = dataValue2.toString().lower();
2000  }
2001  else if (keyValue.lower() == "permissions") {
2002  TQT_DBusDataValueList valueList = dataValue2.toTQValueList();
2003  TQT_DBusDataValueList::const_iterator it4;
2004  for (it4 = valueList.begin(); it4 != valueList.end(); ++it4) {
2005  TQT_DBusData innerDataValue = *it4;
2006  TQString authString = innerDataValue.toString();
2007  TQStringList pieces = TQStringList::split(":", authString);
2008  if (pieces[0].lower() == "user") {
2009  connection->authorizedUsers.append(pieces[1]);
2010  }
2011  }
2012  }
2013  else if (keyValue.lower() == "autoconnect") {
2014  connection->autoConnect = dataValue2.toBool();
2015  }
2016  else if (keyValue.lower() == "read-only") {
2017  connection->readOnly = dataValue2.toBool();
2018  }
2019  else if (keyValue.lower() == "master") {
2020  connection->masterConnectionUUID = dataValue2.toString().lower();
2021  }
2022  else if (keyValue.lower() == "slave-type") {
2023  connection->slaveType = nmSlaveTypeToTDESlaveType(dataValue2.toString());
2024  }
2025  else if (keyValue.lower() == "timestamp") {
2026  connection->lastKnownConnection.setTime_t(dataValue2.toUInt64());
2027  }
2028  }
2029  else if (outerKeyValue.lower() == "802-1x") {
2030  if (keyValue.lower() == "eap") {
2031  TQT_DBusDataValueList valueList = dataValue2.toTQValueList();
2032  TQT_DBusDataValueList::const_iterator it4;
2033  state = 0;
2034  for (it4 = valueList.begin(); it4 != valueList.end(); ++it4) {
2035  TQT_DBusData innerDataValue = *it4;
2036  if (state == 0) {
2037  // EAP type
2038  connection->eapConfig.type = nmEAPTypeToTDEEAPType(innerDataValue.toString());
2039  }
2040  state++;
2041  }
2042  }
2043  else if (keyValue.lower() == "identity") {
2044  connection->eapConfig.userName = dataValue2.toString();
2045  }
2046  else if (keyValue.lower() == "anonymous-identity") {
2047  connection->eapConfig.anonymousUserName = dataValue2.toString();
2048  }
2049  else if (keyValue.lower() == "pac-file") {
2050  connection->eapConfig.pacFileName = dataValue2.toString();
2051  }
2052  else if (keyValue.lower() == "ca-cert") {
2053  TQT_DBusDataValueList valueList = dataValue2.toTQValueList();
2054  TQT_DBusDataValueList::const_iterator it4;
2055  int count=0;
2056  for (it4 = valueList.begin(); it4 != valueList.end(); ++it4) {
2057  TQT_DBusData innerDataValue = *it4;
2058  count++;
2059  connection->eapConfig.caCertificate.resize(count+1);
2060  connection->eapConfig.caCertificate[count] = innerDataValue.toByte();
2061  }
2062  }
2063  else if (keyValue.lower() == "ca-path") {
2064  connection->eapConfig.additionalCAFilesPath = dataValue2.toString();
2065  }
2066  else if (keyValue.lower() == "subject-match") {
2067  connection->eapConfig.authServerCertSubjectMatch = dataValue2.toString();
2068  }
2069  else if (keyValue.lower() == "altsubject-matches") {
2070  TQT_DBusDataValueList valueList = dataValue2.toTQValueList();
2071  TQT_DBusDataValueList::const_iterator it4;
2072  for (it4 = valueList.begin(); it4 != valueList.end(); ++it4) {
2073  TQT_DBusData innerDataValue = *it4;
2074  connection->eapConfig.alternateAuthServerCertSubjectMatch.append(innerDataValue.toString());
2075  }
2076  }
2077  else if (keyValue.lower() == "client-cert") {
2078  TQT_DBusDataValueList valueList = dataValue2.toTQValueList();
2079  TQT_DBusDataValueList::const_iterator it4;
2080  int count=0;
2081  for (it4 = valueList.begin(); it4 != valueList.end(); ++it4) {
2082  TQT_DBusData innerDataValue = *it4;
2083  count++;
2084  connection->eapConfig.clientCertificate.resize(count+1);
2085  connection->eapConfig.clientCertificate[count] = innerDataValue.toByte();
2086  }
2087  }
2088  else if (keyValue.lower() == "phase1-peapver") {
2089  connection->eapConfig.forcePEAPVersion = dataValue2.toString();
2090  }
2091  else if (keyValue.lower() == "phase1-peaplabel") {
2092  connection->eapConfig.forcePEAPLabel = dataValue2.toString();
2093  }
2094  else if (keyValue.lower() == "phase1-fast-provisioning") {
2095  connection->eapConfig.fastProvisioningFlags = nmEAPFastFlagsToTDEEAPFastFlags(dataValue2.toString());
2096  }
2097  else if (keyValue.lower() == "phase2-auth") {
2098  connection->eapConfig.phase2NonEAPAuthMethod = nmEAPTypeToTDEEAPType(dataValue2.toString());
2099  }
2100  else if (keyValue.lower() == "phase2-autheap") {
2101  connection->eapConfig.phase2EAPAuthMethod = nmEAPTypeToTDEEAPType(dataValue2.toString());
2102  }
2103  else if (keyValue.lower() == "phase2-ca-cert") {
2104  TQT_DBusDataValueList valueList = dataValue2.toTQValueList();
2105  TQT_DBusDataValueList::const_iterator it4;
2106  int count=0;
2107  for (it4 = valueList.begin(); it4 != valueList.end(); ++it4) {
2108  TQT_DBusData innerDataValue = *it4;
2109  count++;
2110  connection->eapConfig.phase2CaCertificate.resize(count+1);
2111  connection->eapConfig.phase2CaCertificate[count] = innerDataValue.toByte();
2112  }
2113  }
2114  else if (keyValue.lower() == "phase2-ca-path") {
2115  connection->eapConfig.phase2CaFilesPath = dataValue2.toString();
2116  }
2117  else if (keyValue.lower() == "phase2-subject-match") {
2118  connection->eapConfig.phase2AuthServerCertSubjectMatch = dataValue2.toString();
2119  }
2120  else if (keyValue.lower() == "phase2-altsubject-matches") {
2121  TQT_DBusDataValueList valueList = dataValue2.toTQValueList();
2122  TQT_DBusDataValueList::const_iterator it4;
2123  for (it4 = valueList.begin(); it4 != valueList.end(); ++it4) {
2124  TQT_DBusData innerDataValue = *it4;
2125  connection->eapConfig.phase2AlternateAuthServerCertSubjectMatch.append(innerDataValue.toString());
2126  }
2127  }
2128  else if (keyValue.lower() == "phase2-client-cert") {
2129  TQT_DBusDataValueList valueList = dataValue2.toTQValueList();
2130  TQT_DBusDataValueList::const_iterator it4;
2131  int count=0;
2132  for (it4 = valueList.begin(); it4 != valueList.end(); ++it4) {
2133  TQT_DBusData innerDataValue = *it4;
2134  count++;
2135  connection->eapConfig.phase2ClientCertificate.resize(count+1);
2136  connection->eapConfig.phase2ClientCertificate[count] = innerDataValue.toByte();
2137  }
2138  }
2139  else if (keyValue.lower() == "password-flags") {
2140  connection->eapConfig.passwordFlags = nmPasswordFlagsToTDEPasswordFlags(dataValue2.toUInt32());
2141  }
2142  else if (keyValue.lower() == "password-raw-flags") {
2143  connection->eapConfig.binaryPasswordFlags = nmPasswordFlagsToTDEPasswordFlags(dataValue2.toUInt32());
2144  }
2145  else if (keyValue.lower() == "private-key") {
2146  TQT_DBusDataValueList valueList = dataValue2.toTQValueList();
2147  TQT_DBusDataValueList::const_iterator it4;
2148  int count=0;
2149  for (it4 = valueList.begin(); it4 != valueList.end(); ++it4) {
2150  TQT_DBusData innerDataValue = *it4;
2151  count++;
2152  connection->eapConfig.privateKey.resize(count+1);
2153  connection->eapConfig.privateKey[count] = innerDataValue.toByte();
2154  }
2155  }
2156  else if (keyValue.lower() == "private-key-password-flags") {
2157  connection->eapConfig.privateKeyPasswordFlags = nmPasswordFlagsToTDEPasswordFlags(dataValue2.toUInt32());
2158  }
2159  else if (keyValue.lower() == "phase2-private-key") {
2160  TQT_DBusDataValueList valueList = dataValue2.toTQValueList();
2161  TQT_DBusDataValueList::const_iterator it4;
2162  int count=0;
2163  for (it4 = valueList.begin(); it4 != valueList.end(); ++it4) {
2164  TQT_DBusData innerDataValue = *it4;
2165  count++;
2166  connection->eapConfig.phase2PrivateKey.resize(count+1);
2167  connection->eapConfig.phase2PrivateKey[count] = innerDataValue.toByte();
2168  }
2169  }
2170  else if (keyValue.lower() == "phase2-private-key-password-flags") {
2171  connection->eapConfig.phase2PrivateKeyPasswordFlags = nmPasswordFlagsToTDEPasswordFlags(dataValue2.toUInt32());
2172  }
2173  else if (keyValue.lower() == "system-ca-certs") {
2174  connection->eapConfig.forceSystemCaCertificates = dataValue2.toBool();
2175  }
2176  connection->eapConfig.valid = true;
2177  }
2178  else if (outerKeyValue.lower() == "802-3-ethernet") {
2179  if (keyValue.lower() == "duplex") {
2180  connection->fullDuplex = (dataValue2.toString().lower() == "full")?true:false;
2181  }
2182  else if (keyValue.lower() == "mac-address") {
2183  TQT_DBusDataValueList valueList = dataValue2.toTQValueList();
2184  TQT_DBusDataValueList::const_iterator it4;
2185  TDENetworkByteList macAddress;
2186  for (it4 = valueList.begin(); it4 != valueList.end(); ++it4) {
2187  TQT_DBusData innerDataValue = *it4;
2188  macAddress.append(innerDataValue.toByte());
2189  }
2190  connection->lockedHWAddress.setAddress(macAddress);
2191  }
2192  else if (keyValue.lower() == "cloned-mac-address") {
2193  TQT_DBusDataValueList valueList = dataValue2.toTQValueList();
2194  TQT_DBusDataValueList::const_iterator it4;
2195  TDENetworkByteList macAddress;
2196  for (it4 = valueList.begin(); it4 != valueList.end(); ++it4) {
2197  TQT_DBusData innerDataValue = *it4;
2198  macAddress.append(innerDataValue.toByte());
2199  }
2200  connection->manualHWAddress.setAddress(macAddress);
2201  }
2202  else if (keyValue.lower() == "mtu") {
2203  connection->mtu = dataValue2.toUInt32();
2204  }
2205  }
2206  else if (outerKeyValue.lower() == "infiniband") {
2207  if (keyValue.lower() == "mac-address") {
2208  TQT_DBusDataValueList valueList = dataValue2.toTQValueList();
2209  TQT_DBusDataValueList::const_iterator it4;
2210  TDENetworkByteList macAddress;
2211  for (it4 = valueList.begin(); it4 != valueList.end(); ++it4) {
2212  TQT_DBusData innerDataValue = *it4;
2213  macAddress.append(innerDataValue.toByte());
2214  }
2215  connection->lockedHWAddress.setAddress(macAddress);
2216  }
2217  else if (keyValue.lower() == "mtu") {
2218  connection->mtu = dataValue2.toUInt32();
2219  }
2220  else if (keyValue.lower() == "transport-mode") {
2221  infinibandConnection->transportMode = nmIBTransportToTDEIBTransport(dataValue2.toString());
2222  }
2223  }
2224  else if (outerKeyValue.lower() == "802-11-wireless") {
2225  if (keyValue.lower() == "ssid") {
2226  TQT_DBusDataValueList valueList = dataValue2.toTQValueList();
2227  TQT_DBusDataValueList::const_iterator it4;
2228  int count = 0;
2229  for (it4 = valueList.begin(); it4 != valueList.end(); ++it4) {
2230  TQT_DBusData innerDataValue = *it4;
2231  wiFiConnection->SSID.resize(count+1);
2232  wiFiConnection->SSID[count] = innerDataValue.toByte();
2233  count++;
2234  }
2235  }
2236  else if (keyValue.lower() == "mac-address") {
2237  TQT_DBusDataValueList valueList = dataValue2.toTQValueList();
2238  TQT_DBusDataValueList::const_iterator it4;
2239  TDENetworkByteList macAddress;
2240  for (it4 = valueList.begin(); it4 != valueList.end(); ++it4) {
2241  TQT_DBusData innerDataValue = *it4;
2242  macAddress.append(innerDataValue.toByte());
2243  }
2244  connection->lockedHWAddress.setAddress(macAddress);
2245  }
2246  else if (keyValue.lower() == "cloned-mac-address") {
2247  TQT_DBusDataValueList valueList = dataValue2.toTQValueList();
2248  TQT_DBusDataValueList::const_iterator it4;
2249  TDENetworkByteList macAddress;
2250  for (it4 = valueList.begin(); it4 != valueList.end(); ++it4) {
2251  TQT_DBusData innerDataValue = *it4;
2252  macAddress.append(innerDataValue.toByte());
2253  }
2254  connection->manualHWAddress.setAddress(macAddress);
2255  }
2256  else if (keyValue.lower() == "mtu") {
2257  connection->mtu = dataValue2.toUInt32();
2258  }
2259  else if (keyValue.lower() == "mode") {
2260  wiFiConnection->operatingMode = nmWiFiModeToTDEWiFiMode(dataValue2.toString());
2261  }
2262  else if (keyValue.lower() == "band") {
2263  wiFiConnection->bandRestriction = nmWiFiFrequencyBandToTDEWiFiFrequencyBand(dataValue2.toString());
2264  }
2265  else if (keyValue.lower() == "channel") {
2266  wiFiConnection->channelRestriction = dataValue2.toUInt32();
2267  if (wiFiConnection->channelRestriction == 0) wiFiConnection->channelRestriction = -1;
2268  }
2269  else if (keyValue.lower() == "rate") {
2270  wiFiConnection->bitRateRestriction = dataValue2.toUInt32()*1000;
2271  if (wiFiConnection->bitRateRestriction == 0) wiFiConnection->bitRateRestriction = -1;
2272  }
2273  else if (keyValue.lower() == "tx-power") {
2274  wiFiConnection->powerRestriction = dataValue2.toUInt32();
2275  if (wiFiConnection->powerRestriction == 0) wiFiConnection->powerRestriction = -1;
2276  }
2277  else if (keyValue.lower() == "bssid") {
2278  TQT_DBusDataValueList valueList = dataValue2.toTQValueList();
2279  TQT_DBusDataValueList::const_iterator it4;
2280  TDENetworkByteList macAddress;
2281  for (it4 = valueList.begin(); it4 != valueList.end(); ++it4) {
2282  TQT_DBusData innerDataValue = *it4;
2283  macAddress.append(innerDataValue.toByte());
2284  }
2285  wiFiConnection->accessPointRestriction.setAddress(macAddress);
2286  }
2287  else if (keyValue.lower() == "mac-address-blacklist") {
2288  TQT_DBusDataValueList valueList = dataValue2.toTQValueList();
2289  TQT_DBusDataValueList::const_iterator it4;
2290  for (it4 = valueList.begin(); it4 != valueList.end(); ++it4) {
2291  TQT_DBusData innerDataValue = *it4;
2292  TDEMACAddress hwAddress;
2293  hwAddress.fromString(innerDataValue.toString());
2294  wiFiConnection->blacklistedBSSIDs.append(hwAddress);
2295  }
2296  }
2297  else if (keyValue.lower() == "seen-bssids") {
2298  TQT_DBusDataValueList valueList = dataValue2.toTQValueList();
2299  TQT_DBusDataValueList::const_iterator it4;
2300  for (it4 = valueList.begin(); it4 != valueList.end(); ++it4) {
2301  TQT_DBusData innerDataValue = *it4;
2302  TDEMACAddress hwAddress;
2303  hwAddress.fromString(innerDataValue.toString());
2304  wiFiConnection->heardBSSIDs.append(hwAddress);
2305  }
2306  }
2307  else if (keyValue.lower() == "security") {
2308  TQString setting;
2309  if (setting.lower() == "802-11-wireless-security") {
2310  wiFiConnection->securityRequired = true;
2311  }
2312  else {
2313  wiFiConnection->securityRequired = false;
2314  }
2315  }
2316  else if (keyValue.lower() == "hidden") {
2317  wiFiConnection->isHiddenNetwork = dataValue2.toBool();
2318  }
2319  }
2320  else if ((outerKeyValue.lower() == "802-11-wireless-security") && (wiFiConnection)) {
2321  if (keyValue.lower() == "key-mgmt") {
2322  wiFiConnection->securitySettings.keyType = nmWiFiKeyTypeToTDEWiFiKeyType(dataValue2.toString());
2323  }
2324  else if (keyValue.lower() == "wep-tx-keyidx") {
2325  wiFiConnection->securitySettings.wepKeyIndex = dataValue2.toUInt32();
2326  }
2327  else if (keyValue.lower() == "auth-alg") {
2328  wiFiConnection->securitySettings.authType = nmWiFiAuthTypeToTDEWiFiAuthType(dataValue2.toString());
2329  }
2330  else if (keyValue.lower() == "proto") {
2331  TQT_DBusDataValueList valueList = dataValue2.toTQValueList();
2332  TQT_DBusDataValueList::const_iterator it4;
2333  TQStringList strings;
2334  for (it4 = valueList.begin(); it4 != valueList.end(); ++it4) {
2335  TQT_DBusData innerDataValue = *it4;
2336  strings.append(innerDataValue.toString());
2337  }
2338  wiFiConnection->securitySettings.wpaVersion = nmWiFiWPAVersionToTDEWiFiWPAVersion(strings);
2339  }
2340  else if (keyValue.lower() == "pairwise") {
2341  TQT_DBusDataValueList valueList = dataValue2.toTQValueList();
2342  TQT_DBusDataValueList::const_iterator it4;
2343  TQStringList strings;
2344  for (it4 = valueList.begin(); it4 != valueList.end(); ++it4) {
2345  TQT_DBusData innerDataValue = *it4;
2346  wiFiConnection->securitySettings.allowedPairWiseCiphers.append(nmWiFiCipherToTDEWiFiCipher(innerDataValue.toString()));
2347  }
2348  if ((wiFiConnection->securitySettings.allowedPairWiseCiphers.contains(TDENetworkWiFiConnectionCipher::CipherWEP40))
2349  || (wiFiConnection->securitySettings.allowedPairWiseCiphers.contains(TDENetworkWiFiConnectionCipher::CipherWEP104))
2350  || (wiFiConnection->securitySettings.allowedPairWiseCiphers.contains(TDENetworkWiFiConnectionCipher::CipherTKIP))
2351  || (wiFiConnection->securitySettings.allowedPairWiseCiphers.contains(TDENetworkWiFiConnectionCipher::CipherCCMP))) {
2352  wiFiConnection->securitySettings.allowedPairWiseCiphers.append(TDENetworkWiFiConnectionCipher::Any);
2353  }
2354  }
2355  else if (keyValue.lower() == "group") {
2356  TQT_DBusDataValueList valueList = dataValue2.toTQValueList();
2357  TQT_DBusDataValueList::const_iterator it4;
2358  TQStringList strings;
2359  for (it4 = valueList.begin(); it4 != valueList.end(); ++it4) {
2360  TQT_DBusData innerDataValue = *it4;
2361  wiFiConnection->securitySettings.allowedGroupWiseCiphers.append(nmWiFiCipherToTDEWiFiCipher(innerDataValue.toString()));
2362  }
2363  if ((wiFiConnection->securitySettings.allowedGroupWiseCiphers.contains(TDENetworkWiFiConnectionCipher::CipherWEP40))
2364  || (wiFiConnection->securitySettings.allowedGroupWiseCiphers.contains(TDENetworkWiFiConnectionCipher::CipherWEP104))
2365  || (wiFiConnection->securitySettings.allowedGroupWiseCiphers.contains(TDENetworkWiFiConnectionCipher::CipherTKIP))
2366  || (wiFiConnection->securitySettings.allowedGroupWiseCiphers.contains(TDENetworkWiFiConnectionCipher::CipherCCMP))) {
2367  wiFiConnection->securitySettings.allowedGroupWiseCiphers.append(TDENetworkWiFiConnectionCipher::Any);
2368  }
2369  }
2370  else if (keyValue.lower() == "leap-username") {
2371  wiFiConnection->securitySettings.leapUsername = dataValue2.toString();
2372  }
2373  else if (keyValue.lower() == "wep-key-flags") {
2374  wiFiConnection->securitySettings.wepKeyFlags = nmPasswordFlagsToTDEPasswordFlags(dataValue2.toUInt32());
2375  }
2376  else if (keyValue.lower() == "wep-key-type") {
2377  wiFiConnection->securitySettings.wepKeyType = nmWepKeyTypeToTDEWepKeyType(dataValue2.toUInt32());
2378  }
2379  else if (keyValue.lower() == "psk-flags") {
2380  wiFiConnection->securitySettings.pskFlags = nmPasswordFlagsToTDEPasswordFlags(dataValue2.toUInt32());
2381  }
2382  else if (keyValue.lower() == "leap-password-flags") {
2383  wiFiConnection->securitySettings.leapPasswordFlags = nmPasswordFlagsToTDEPasswordFlags(dataValue2.toUInt32());
2384  }
2385  wiFiConnection->securitySettings.valid = true;
2386  }
2387  else if (outerKeyValue.lower() == "vpn") {
2388  if (keyValue.lower() == "service-type") {
2389  TQString plugin = dataValue2.toString();
2390  plugin.replace("org.freedesktop.NetworkManager.", "");
2391  vpnConnection->vpnPluginID = plugin;
2392  }
2393  else if (keyValue.lower() == "user-name") {
2394  vpnConnection->lockedUserName = dataValue2.toString();
2395  }
2396  else if (keyValue.lower() == "data") {
2397  vpnConnection->pluginData.clear();
2398  TQT_DBusTQStringDataMap nestedConnectionSettingsMap = dataValue2.toStringKeyMap();
2399  TQT_DBusTQStringDataMap::const_iterator it4;
2400  for (it4 = nestedConnectionSettingsMap.begin(); it4 != nestedConnectionSettingsMap.end(); ++it4) {
2401  TQString keyValue4 = it4.key();
2402  TQT_DBusData dataValue4 = it4.data();
2403  if (dataValue4.type() == TQT_DBusData::String) {
2404  vpnConnection->pluginData[keyValue4] = dataValue4.toString();
2405  }
2406  }
2407  }
2408  }
2409  else if (outerKeyValue.lower() == "wimax") {
2410  if (keyValue.lower() == "mac-address") {
2411  TQT_DBusDataValueList valueList = dataValue2.toTQValueList();
2412  TQT_DBusDataValueList::const_iterator it4;
2413  TDENetworkByteList macAddress;
2414  for (it4 = valueList.begin(); it4 != valueList.end(); ++it4) {
2415  TQT_DBusData innerDataValue = *it4;
2416  macAddress.append(innerDataValue.toByte());
2417  }
2418  connection->lockedHWAddress.setAddress(macAddress);
2419  }
2420  else if (keyValue.lower() == "network-name") {
2421  wiMaxConnection->networkServiceProvider = dataValue2.toString();
2422  }
2423  }
2424  else if (outerKeyValue.lower() == "vlan") {
2425  if (keyValue.lower() == "interface-name") {
2426  vlanConnection->kernelName = dataValue2.toString();
2427  }
2428  else if (keyValue.lower() == "parent") {
2429  vlanConnection->parentConnectionUUID = dataValue2.toString();
2430  }
2431  else if (keyValue.lower() == "id") {
2432  vlanConnection->vlanID = dataValue2.toUInt32();
2433  }
2434  else if (keyValue.lower() == "flags") {
2435  vlanConnection->vlanFlags = nmVLANFlagsToTDEVLANFlags(dataValue2.toUInt32());
2436  }
2437  else if (keyValue.lower() == "ingress-priority-map") {
2438  TQT_DBusDataValueList valueList = dataValue2.toTQValueList();
2439  TQT_DBusDataValueList::const_iterator it4;
2440  for (it4 = valueList.begin(); it4 != valueList.end(); ++it4) {
2441  TQT_DBusData innerDataValue = *it4;
2442  TQStringList pieces = TQStringList::split(":", innerDataValue.toString(), true);
2443  vlanConnection->ingressPriorityMap[pieces[0].toUInt()] = pieces[1].toUInt();;
2444  }
2445  }
2446  else if (keyValue.lower() == "egress-priority-map") {
2447  TQT_DBusDataValueList valueList = dataValue2.toTQValueList();
2448  TQT_DBusDataValueList::const_iterator it4;
2449  for (it4 = valueList.begin(); it4 != valueList.end(); ++it4) {
2450  TQT_DBusData innerDataValue = *it4;
2451  TQStringList pieces = TQStringList::split(":", innerDataValue.toString(), true);
2452  vlanConnection->egressPriorityMap[pieces[0].toUInt()] = pieces[1].toUInt();;
2453  }
2454  }
2455  }
2456  else if (outerKeyValue.lower() == "serial") {
2457  if (keyValue.lower() == "baud") {
2458  connection->serialConfig.baudRate = dataValue2.toUInt32();
2459  }
2460  else if (keyValue.lower() == "bits") {
2461  connection->serialConfig.byteWidth = dataValue2.toUInt32();
2462  }
2463  else if (keyValue.lower() == "parity") {
2464  connection->serialConfig.parity = nmParityToTDEParity(dataValue2.toByte());
2465  }
2466  else if (keyValue.lower() == "stopbits") {
2467  connection->serialConfig.stopBits = dataValue2.toUInt32();
2468  }
2469  else if (keyValue.lower() == "send-delay") {
2470  connection->serialConfig.txDelay = dataValue2.toUInt64();
2471  }
2472  connection->serialConfig.valid = true;
2473  }
2474  else if (outerKeyValue.lower() == "ppp") {
2475  if (keyValue.lower() == "noauth") {
2476  connection->pppConfig.requireServerAuthentication = !(dataValue2.toBool());
2477  }
2478  else if (keyValue.lower() == "refuse-eap") {
2479  if (dataValue2.toBool()) connection->pppConfig.flags |= TDENetworkPPPFlags::DisableEAP;
2480  else connection->pppConfig.flags &= ~TDENetworkPPPFlags::DisableEAP;
2481  }
2482  else if (keyValue.lower() == "refuse-pap") {
2483  if (dataValue2.toBool()) connection->pppConfig.flags |= TDENetworkPPPFlags::DisablePAP;
2484  else connection->pppConfig.flags &= ~TDENetworkPPPFlags::DisablePAP;
2485  }
2486  else if (keyValue.lower() == "refuse-chap") {
2487  if (dataValue2.toBool()) connection->pppConfig.flags |= TDENetworkPPPFlags::DisableCHAP;
2488  else connection->pppConfig.flags &= ~TDENetworkPPPFlags::DisableCHAP;
2489  }
2490  else if (keyValue.lower() == "refuse-mschap") {
2491  if (dataValue2.toBool()) connection->pppConfig.flags |= TDENetworkPPPFlags::DisableMSCHAP;
2492  else connection->pppConfig.flags &= ~TDENetworkPPPFlags::DisableMSCHAP;
2493  }
2494  else if (keyValue.lower() == "refuse-mschapv2") {
2495  if (dataValue2.toBool()) connection->pppConfig.flags |= TDENetworkPPPFlags::DisableMSCHAPv2;
2496  else connection->pppConfig.flags &= ~TDENetworkPPPFlags::DisableMSCHAPv2;
2497  }
2498  else if (keyValue.lower() == "nobsdcomp") {
2499  if (dataValue2.toBool()) connection->pppConfig.flags &= ~TDENetworkPPPFlags::AllowBSDCompression;
2500  else connection->pppConfig.flags |= TDENetworkPPPFlags::AllowBSDCompression;
2501  }
2502  else if (keyValue.lower() == "nodeflate") {
2503  if (dataValue2.toBool()) connection->pppConfig.flags &= ~TDENetworkPPPFlags::AllowDeflateCompression;
2504  else connection->pppConfig.flags |= TDENetworkPPPFlags::AllowDeflateCompression;
2505  }
2506  else if (keyValue.lower() == "no-vj-comp") {
2507  if (dataValue2.toBool()) connection->pppConfig.flags &= ~TDENetworkPPPFlags::AllowVJCompression;
2508  else connection->pppConfig.flags |= TDENetworkPPPFlags::AllowVJCompression;
2509  }
2510  else if (keyValue.lower() == "require-mppe") {
2511  if (dataValue2.toBool()) connection->pppConfig.flags |= TDENetworkPPPFlags::RequireMPPE;
2512  else connection->pppConfig.flags &= ~TDENetworkPPPFlags::RequireMPPE;
2513  }
2514  else if (keyValue.lower() == "require-mppe-128") {
2515  if (dataValue2.toBool()) connection->pppConfig.flags |= TDENetworkPPPFlags::RequireMPPE128;
2516  else connection->pppConfig.flags &= ~TDENetworkPPPFlags::RequireMPPE128;
2517  }
2518  else if (keyValue.lower() == "mppe-stateful") {
2519  if (dataValue2.toBool()) connection->pppConfig.flags |= TDENetworkPPPFlags::StatefulMPPE;
2520  else connection->pppConfig.flags &= ~TDENetworkPPPFlags::StatefulMPPE;
2521  }
2522  else if (keyValue.lower() == "crtscts") {
2523  if (dataValue2.toBool()) connection->pppConfig.flags |= TDENetworkPPPFlags::UseHardwareFlowControl;
2524  else connection->pppConfig.flags &= ~TDENetworkPPPFlags::UseHardwareFlowControl;
2525  }
2526  else if (keyValue.lower() == "baud") {
2527  connection->pppConfig.baudRate = dataValue2.toUInt32();
2528  }
2529  else if (keyValue.lower() == "mru") {
2530  connection->pppConfig.mru = dataValue2.toUInt32();
2531  }
2532  else if (keyValue.lower() == "mtu") {
2533  connection->pppConfig.mtu = dataValue2.toUInt32();
2534  }
2535  else if (keyValue.lower() == "lcp-echo-interval") {
2536  connection->pppConfig.lcpEchoPingInterval = dataValue2.toUInt32();
2537  }
2538  else if (keyValue.lower() == "lcp-echo-failure") {
2539  connection->pppConfig.lcpEchoFailureThreshold = dataValue2.toUInt32();
2540  }
2541  connection->pppConfig.valid = true;
2542  }
2543  else if (outerKeyValue.lower() == "pppoe") {
2544  if (keyValue.lower() == "service") {
2545  connection->pppoeConfig.networkServiceProvider = dataValue2.toString();
2546  }
2547  else if (keyValue.lower() == "username") {
2548  connection->pppoeConfig.username = dataValue2.toString();
2549  }
2550  else if (keyValue.lower() == "password-flags") {
2551  connection->pppoeConfig.passwordFlags = nmPasswordFlagsToTDEPasswordFlags(dataValue2.toUInt32());
2552  }
2553  connection->pppoeConfig.secretsValid = true;
2554  }
2555  else if ((outerKeyValue.lower() == "802-11-olpc-mesh") && (olpcMeshConnection)) {
2556  if (keyValue.lower() == "ssid") {
2557  TQT_DBusDataValueList valueList = dataValue2.toTQValueList();
2558  TQT_DBusDataValueList::const_iterator it4;
2559  int count = 0;
2560  for (it4 = valueList.begin(); it4 != valueList.end(); ++it4) {
2561  TQT_DBusData innerDataValue = *it4;
2562  olpcMeshConnection->SSID.resize(count+1);
2563  olpcMeshConnection->SSID[count] = innerDataValue.toByte();
2564  count++;
2565  }
2566  }
2567  else if (keyValue.lower() == "channel") {
2568  olpcMeshConnection->channel = dataValue2.toUInt32();
2569  }
2570  else if (keyValue.lower() == "dhcp-anycast-address") {
2571  TQT_DBusDataValueList valueList = dataValue2.toTQValueList();
2572  TQT_DBusDataValueList::const_iterator it4;
2573  int count = 0;
2574  for (it4 = valueList.begin(); it4 != valueList.end(); ++it4) {
2575  TQT_DBusData innerDataValue = *it4;
2576  olpcMeshConnection->anycastDHCPHWAddress.resize(count+1);
2577  olpcMeshConnection->anycastDHCPHWAddress[count] = innerDataValue.toByte();
2578  count++;
2579  }
2580  }
2581  }
2582  else if ((outerKeyValue.lower() == "bluetooth") && (bluetoothConnection)) {
2583  if (keyValue.lower() == "bdaddr") {
2584  TQT_DBusDataValueList valueList = dataValue2.toTQValueList();
2585  TQT_DBusDataValueList::const_iterator it4;
2586  TDENetworkByteList macAddress;
2587  for (it4 = valueList.begin(); it4 != valueList.end(); ++it4) {
2588  TQT_DBusData innerDataValue = *it4;
2589  macAddress.append(innerDataValue.toByte());
2590  }
2591  connection->lockedHWAddress.setAddress(macAddress);
2592  }
2593  else if (keyValue.lower() == "type") {
2594  bluetoothConnection->type = nmBluetoothModeToTDEBluetoothMode(dataValue2.toString());
2595  }
2596  }
2597  else if ((outerKeyValue.lower() == "cdma") && (modemConnection)) {
2598  if (keyValue.lower() == "number") {
2599  modemConnection->cdmaConfig.providerDataNumber = dataValue2.toString();
2600  }
2601  else if (keyValue.lower() == "username") {
2602  modemConnection->cdmaConfig.username = dataValue2.toString();
2603  }
2604  else if (keyValue.lower() == "password-flags") {
2605  modemConnection->cdmaConfig.passwordFlags = nmPasswordFlagsToTDEPasswordFlags(dataValue2.toUInt32());
2606  }
2607  modemConnection->type = TDEModemConnectionType::CDMA;
2608  modemConnection->cdmaConfig.valid = true;
2609  }
2610  else if ((outerKeyValue.lower() == "gsm") && (modemConnection)) {
2611  if (keyValue.lower() == "number") {
2612  modemConnection->gsmConfig.providerDataNumber = dataValue2.toString();
2613  }
2614  else if (keyValue.lower() == "username") {
2615  modemConnection->gsmConfig.username = dataValue2.toString();
2616  }
2617  else if (keyValue.lower() == "password-flags") {
2618  modemConnection->gsmConfig.passwordFlags = nmPasswordFlagsToTDEPasswordFlags(dataValue2.toUInt32());
2619  }
2620  else if (keyValue.lower() == "apn") {
2621  modemConnection->gsmConfig.accessPointName = dataValue2.toString();
2622  }
2623  else if (keyValue.lower() == "network-id") {
2624  modemConnection->gsmConfig.networkID = dataValue2.toString();
2625  }
2626  else if (keyValue.lower() == "network-type") {
2627  modemConnection->gsmConfig.networkType = nmGSMModeToTDEGSMMode(dataValue2.toInt32());
2628  }
2629  else if (keyValue.lower() == "pin-flags") {
2630  modemConnection->gsmConfig.pinFlags = nmPasswordFlagsToTDEPasswordFlags(dataValue2.toUInt32());
2631  }
2632  else if (keyValue.lower() == "allowed-bands") {
2633  modemConnection->gsmConfig.allowedFrequencyBands = dataValue2.toUInt32();
2634  }
2635  else if (keyValue.lower() == "home-only") {
2636  modemConnection->gsmConfig.allowRoaming = !dataValue2.toBool();
2637  }
2638  modemConnection->type = TDEModemConnectionType::GSM;
2639  modemConnection->gsmConfig.valid = true;
2640  }
2641  else if (outerKeyValue.lower() == "ipv4") {
2642  if (keyValue.lower() == "addresses") {
2643  TQT_DBusDataValueList valueList = dataValue2.toTQValueList();
2644  TQT_DBusDataValueList::const_iterator it4;
2645  for (it4 = valueList.begin(); it4 != valueList.end(); ++it4) {
2646  TQT_DBusData innerDataValue = *it4;
2647  TQT_DBusDataValueList innerValueList = innerDataValue.toTQValueList();
2648  TQT_DBusDataValueList::const_iterator it5;
2649  state = 0;
2650  TDENetworkSingleIPConfiguration ipConfig;
2651  for (it5 = innerValueList.begin(); it5 != innerValueList.end(); ++it5) {
2652  TQT_DBusData innerMostDataValue = *it5;
2653  if (state == 0) {
2654  // Address
2655  ipConfig.ipAddress = TQHostAddress(reverseIPV4ByteOrder(innerMostDataValue.toUInt32()));
2656  }
2657  else if (state == 1) {
2658  // Network mask
2659  ipConfig.networkMask.fromCIDRMask(innerMostDataValue.toUInt32());
2660  }
2661  else if (state == 2) {
2662  // Gateway
2663  ipConfig.gateway = TQHostAddress(reverseIPV4ByteOrder(innerMostDataValue.toUInt32()));
2664  }
2665  state++;
2666  }
2667  ipConfig.valid = true;
2668  connection->ipConfig.ipConfigurations.append(ipConfig);
2669  }
2670  }
2671  else if (keyValue.lower() == "dhcp-client-id") {
2672  connection->ipConfig.dhcpClientIdentifier = dataValue2.toString();
2673  }
2674  else if (keyValue.lower() == "dns") {
2675  TQT_DBusDataValueList valueList = dataValue2.toTQValueList();
2676  TQT_DBusDataValueList::const_iterator it4;
2677  for (it4 = valueList.begin(); it4 != valueList.end(); ++it4) {
2678  TQT_DBusData innerDataValue = *it4;
2679  connection->ipConfig.resolvers.append(TQHostAddress(reverseIPV4ByteOrder(innerDataValue.toUInt32())));
2680  }
2681  }
2682  else if (keyValue.lower() == "dns-search") {
2683  TQT_DBusDataValueList valueList = dataValue2.toTQValueList();
2684  TQT_DBusDataValueList::const_iterator it4;
2685  for (it4 = valueList.begin(); it4 != valueList.end(); ++it4) {
2686  TQT_DBusData innerDataValue = *it4;
2687  connection->ipConfig.searchDomains.append(TDENetworkSearchDomain(innerDataValue.toString(), false));
2688  }
2689  }
2690  else if (keyValue.lower() == "ignore-auto-dns") {
2691  bool nm_static_dns = dataValue2.toBool();
2692  if (nm_static_dns) {
2693  connection->ipConfig.connectionFlags &= ~TDENetworkIPConfigurationFlags::IPV4DHCPDNS;
2694  }
2695  else {
2696  connection->ipConfig.connectionFlags |= TDENetworkIPConfigurationFlags::IPV4DHCPDNS;
2697  }
2698  }
2699  else if (keyValue.lower() == "may-fail") {
2700  bool nm_may_fail = dataValue2.toBool();
2701  connection->requireIPV4 = !nm_may_fail;
2702  }
2703  else if (keyValue.lower() == "method") {
2704  TQString nm_method = dataValue2.toString().lower();
2705  if (nm_method == "auto") {
2706  connection->ipConfig.connectionFlags |= TDENetworkIPConfigurationFlags::IPV4DHCPIP;
2707  }
2708  else if (nm_method == "manual") {
2709  connection->ipConfig.connectionFlags &= ~TDENetworkIPConfigurationFlags::IPV4DHCPIP;
2710  }
2711  else if (nm_method == "link-local") {
2712  connection->ipConfig.connectionFlags &= ~TDENetworkIPConfigurationFlags::IPV4LocalOnly;
2713  }
2714  else if (nm_method == "shared") {
2715  connection->ipConfig.connectionFlags &= ~TDENetworkIPConfigurationFlags::IPV4StartConnectionSharingServer;
2716  }
2717  else if (nm_method == "disabled") {
2718  connection->ipConfig.connectionFlags &= ~TDENetworkIPConfigurationFlags::IPV4Disabled;
2719  }
2720  }
2721  else if (keyValue.lower() == "ignore-auto-routes") {
2722  bool nm_static_routes = dataValue2.toBool();
2723  if (nm_static_routes) {
2724  connection->ipConfig.connectionFlags &= ~TDENetworkIPConfigurationFlags::IPV4DHCPRoutes;
2725  }
2726  else {
2727  connection->ipConfig.connectionFlags |= TDENetworkIPConfigurationFlags::IPV4DHCPRoutes;
2728  }
2729  }
2730  else if (keyValue.lower() == "never-default") {
2731  bool nm_can_default_route = !dataValue2.toBool();
2732  if (nm_can_default_route) {
2733  connection->ipConfig.connectionFlags |= TDENetworkIPConfigurationFlags::IPV4MayUseAsDefaultRoute;
2734  }
2735  else {
2736  connection->ipConfig.connectionFlags &= ~TDENetworkIPConfigurationFlags::IPV4MayUseAsDefaultRoute;
2737  }
2738  }
2739  else if (keyValue.lower() == "routes") {
2740  TQT_DBusDataValueList valueList = dataValue2.toTQValueList();
2741  TQT_DBusDataValueList::const_iterator it4;
2742  for (it4 = valueList.begin(); it4 != valueList.end(); ++it4) {
2743  TQT_DBusData innerDataValue = *it4;
2744  TQT_DBusDataValueList innerValueList = innerDataValue.toTQValueList();
2745  TQT_DBusDataValueList::const_iterator it5;
2746  state = 0;
2747  TDENetworkSingleRouteConfiguration routeConfig;
2748  for (it5 = innerValueList.begin(); it5 != innerValueList.end(); ++it5) {
2749  TQT_DBusData innerMostDataValue = *it5;
2750  if (state == 0) {
2751  // Address
2752  routeConfig.ipAddress = TQHostAddress(reverseIPV4ByteOrder(innerMostDataValue.toUInt32()));
2753  }
2754  else if (state == 1) {
2755  // Network mask
2756  routeConfig.networkMask.fromCIDRMask(innerMostDataValue.toUInt32());
2757  }
2758  else if (state == 2) {
2759  // Gateway
2760  routeConfig.gateway = TQHostAddress(reverseIPV4ByteOrder(innerMostDataValue.toUInt32()));
2761  }
2762  else if (state == 3) {
2763  // Metric
2764  routeConfig.metric = innerMostDataValue.toUInt32();
2765  }
2766  state++;
2767  }
2768  routeConfig.valid = true;
2769  connection->ipConfig.routeConfigurations.append(routeConfig);
2770  }
2771  }
2772  connection->ipConfig.valid = true;
2773  }
2774  else if (outerKeyValue.lower() == "ipv6") {
2775  if (keyValue.lower() == "addresses") {
2776  TQT_DBusDataValueList valueList = dataValue2.toTQValueList();
2777  TQT_DBusDataValueList::const_iterator it4;
2778  for (it4 = valueList.begin(); it4 != valueList.end(); ++it4) {
2779  TQT_DBusData innerDataValue = *it4;
2780  TQT_DBusDataValueList innerValueList = innerDataValue.toStruct();
2781  TQT_DBusDataValueList::const_iterator it5;
2782  TDENetworkSingleIPConfiguration ipConfig;
2783  // Address
2784  TQT_DBusDataValueList innerMostValueList;
2785  innerMostValueList = innerValueList[0].toTQValueList();
2786  TQ_UINT8 nm_v6address[16];
2787  unsigned char nm_addr_ptr = 0;
2788  memset(nm_v6address, 0, sizeof(TQ_UINT8)*16);
2789  for (it5 = innerMostValueList.begin(); it5 != innerMostValueList.end(); ++it5) {
2790  TQT_DBusData innerMostDataValue = *it5;
2791  if (nm_addr_ptr < 16) {
2792  nm_v6address[nm_addr_ptr] = innerMostDataValue.toByte();
2793  nm_addr_ptr++;
2794  }
2795  }
2796  ipConfig.ipAddress = TQHostAddress(nm_v6address);
2797 
2798  // Netmask
2799  ipConfig.networkMask.fromCIDRMask(innerValueList[1].toUInt32(), true);
2800 
2801  // Gateway
2802  memset(nm_v6address, 0, sizeof(TQ_UINT8)*16);
2803  for (it5 = innerMostValueList.begin(); it5 != innerMostValueList.end(); ++it5) {
2804  TQT_DBusData innerMostDataValue = *it5;
2805  if (nm_addr_ptr < 16) {
2806  nm_v6address[nm_addr_ptr] = innerMostDataValue.toByte();
2807  nm_addr_ptr++;
2808  }
2809  }
2810  ipConfig.gateway = TQHostAddress(nm_v6address);
2811 
2812  ipConfig.valid = true;
2813  connection->ipConfig.ipConfigurations.append(ipConfig);
2814  }
2815  }
2816  else if (keyValue.lower() == "dns") {
2817  TQT_DBusDataValueList valueList = dataValue2.toTQValueList();
2818  TQT_DBusDataValueList::const_iterator it4;
2819  for (it4 = valueList.begin(); it4 != valueList.end(); ++it4) {
2820  TQT_DBusData innerDataValue = *it4;
2821  TQT_DBusDataValueList innerValueList = innerDataValue.toTQValueList();
2822  TQT_DBusDataValueList::const_iterator it5;
2823  TQ_UINT8 nm_v6address[16];
2824  unsigned char nm_addr_ptr = 0;
2825  memset(nm_v6address, 0, sizeof(TQ_UINT8)*16);
2826  for (it5 = innerValueList.begin(); it5 != innerValueList.end(); ++it5) {
2827  TQT_DBusData innerMostDataValue = *it5;
2828  if (nm_addr_ptr < 16) {
2829  nm_v6address[nm_addr_ptr] = innerMostDataValue.toByte();
2830  nm_addr_ptr++;
2831  }
2832  }
2833  connection->ipConfig.resolvers.append(TQHostAddress(nm_v6address));
2834  }
2835  }
2836  else if (keyValue.lower() == "dns-search") {
2837  TQT_DBusDataValueList valueList = dataValue2.toTQValueList();
2838  TQT_DBusDataValueList::const_iterator it4;
2839  for (it4 = valueList.begin(); it4 != valueList.end(); ++it4) {
2840  TQT_DBusData innerDataValue = *it4;
2841  TQT_DBusDataValueList innerValueList = innerDataValue.toTQValueList();
2842  TQT_DBusDataValueList::const_iterator it5;
2843  connection->ipConfig.searchDomains.append(TDENetworkSearchDomain(innerDataValue.toString(), true));
2844  }
2845  }
2846  else if (keyValue.lower() == "ignore-auto-dns") {
2847  bool nm_static_dns = dataValue2.toBool();
2848  if (nm_static_dns) {
2849  connection->ipConfig.connectionFlags &= ~TDENetworkIPConfigurationFlags::IPV4DHCPDNS;
2850  }
2851  else {
2852  connection->ipConfig.connectionFlags |= TDENetworkIPConfigurationFlags::IPV4DHCPDNS;
2853  }
2854  }
2855  else if (keyValue.lower() == "may-fail") {
2856  bool nm_may_fail = dataValue2.toBool();
2857  connection->requireIPV6 = !nm_may_fail;
2858  }
2859  else if (keyValue.lower() == "method") {
2860  TQString nm_method = dataValue2.toString().lower();
2861  if (nm_method == "auto") {
2862  connection->ipConfig.connectionFlags |= TDENetworkIPConfigurationFlags::IPV6DHCPIP;
2863  }
2864  else if (nm_method == "manual") {
2865  connection->ipConfig.connectionFlags &= ~TDENetworkIPConfigurationFlags::IPV6DHCPIP;
2866  }
2867  else if (nm_method == "link-local") {
2868  connection->ipConfig.connectionFlags &= ~TDENetworkIPConfigurationFlags::IPV6LocalOnly;
2869  }
2870  else if (nm_method == "shared") {
2871  connection->ipConfig.connectionFlags &= ~TDENetworkIPConfigurationFlags::IPV6StartConnectionSharingServer;
2872  }
2873  else if (nm_method == "ignore") {
2874  connection->ipConfig.connectionFlags &= ~TDENetworkIPConfigurationFlags::IPV6Disabled;
2875  }
2876  }
2877  else if (keyValue.lower() == "ignore-auto-routes") {
2878  bool nm_static_routes = dataValue2.toBool();
2879  if (nm_static_routes) {
2880  connection->ipConfig.connectionFlags &= ~TDENetworkIPConfigurationFlags::IPV6DHCPRoutes;
2881  }
2882  else {
2883  connection->ipConfig.connectionFlags |= TDENetworkIPConfigurationFlags::IPV6DHCPRoutes;
2884  }
2885  }
2886  else if (keyValue.lower() == "never-default") {
2887  bool nm_can_default_route = !dataValue2.toBool();
2888  if (nm_can_default_route) {
2889  connection->ipConfig.connectionFlags |= TDENetworkIPConfigurationFlags::IPV6MayUseAsDefaultRoute;
2890  }
2891  else {
2892  connection->ipConfig.connectionFlags &= ~TDENetworkIPConfigurationFlags::IPV6MayUseAsDefaultRoute;
2893  }
2894  }
2895  else if (keyValue.lower() == "routes") {
2896  TQT_DBusDataValueList valueList = dataValue2.toTQValueList();
2897  TQT_DBusDataValueList::const_iterator it4;
2898  for (it4 = valueList.begin(); it4 != valueList.end(); ++it4) {
2899  TQT_DBusData innerDataValue = *it4;
2900  TQT_DBusDataValueList innerValueList = innerDataValue.toStruct();
2901  TQT_DBusDataValueList::const_iterator it5;
2902  TDENetworkSingleRouteConfiguration routeConfig;
2903  // Address
2904  TQT_DBusDataValueList innerMostValueList;
2905  innerMostValueList = innerValueList[0].toTQValueList();
2906  TQ_UINT8 nm_v6address[16];
2907  unsigned char nm_addr_ptr = 0;
2908  memset(nm_v6address, 0, sizeof(TQ_UINT8)*16);
2909  for (it5 = innerMostValueList.begin(); it5 != innerMostValueList.end(); ++it5) {
2910  TQT_DBusData innerMostDataValue = *it5;
2911  if (nm_addr_ptr < 16) {
2912  nm_v6address[nm_addr_ptr] = innerMostDataValue.toByte();
2913  nm_addr_ptr++;
2914  }
2915  }
2916  routeConfig.ipAddress = TQHostAddress(nm_v6address);
2917 
2918  // Netmask
2919  routeConfig.networkMask.fromCIDRMask(innerValueList[1].toUInt32(), true);
2920 
2921  // Gateway
2922  innerMostValueList = innerValueList[2].toTQValueList();
2923  nm_addr_ptr = 0;
2924  memset(nm_v6address, 0, sizeof(TQ_UINT8)*16);
2925  for (it5 = innerMostValueList.begin(); it5 != innerMostValueList.end(); ++it5) {
2926  TQT_DBusData innerMostDataValue = *it5;
2927  if (nm_addr_ptr < 16) {
2928  nm_v6address[nm_addr_ptr] = innerMostDataValue.toByte();
2929  nm_addr_ptr++;
2930  }
2931  }
2932  routeConfig.gateway = TQHostAddress(nm_v6address);
2933 
2934  // Metric
2935  routeConfig.metric = innerValueList[3].toUInt32();
2936 
2937  routeConfig.valid = true;
2938  connection->ipConfig.routeConfigurations.append(routeConfig);
2939  }
2940  }
2941  connection->ipConfig.valid = true;
2942  }
2943  }
2944  else {
2945  // FIXME
2946  // There are several advanced properties which appear to use string maps
2947  // For example, s390-options
2948  // Support should eventually be added for these, e.g. in a backend-specific Advanced tab somewhere
2949  }
2950  }
2951  }
2952  }
2953 
2954  // If the connection's MAC matches my MAC, or if the connection is not locked to any MAC address,
2955  // or if this manager object is not locked to a device, then add this connection to the list
2956  if ((deviceMACAddress == connection->lockedHWAddress) || (!connection->lockedHWAddress.isValid()) || (!deviceMACAddress.isValid())) {
2957  loadConnectionAllowedValues(connection);
2958  m_connectionList->append(connection);
2959  }
2960  }
2961  else {
2962  // Error!
2963  PRINT_ERROR((error.name() + ": " + error.message()))
2964  }
2965  }
2966  }
2967  else {
2968  // Error!
2969  PRINT_ERROR((error.name() + ": " + error.message()))
2970  }
2971  internalNetworkManagementEvent(TDENetworkGlobalEventType::ConnectionListChanged);
2972  }
2973 
2974  d->nonReentrantCallActive = false;
2975 }
2976 
2977 void TDENetworkConnectionManager_BackendNM::loadConnectionAllowedValues(TDENetworkConnection* connection) {
2978  if (connection) {
2979  // Insert all allowed EAP phase 2 methods
2980  connection->eapConfig.allowedPhase2NonEAPMethods.clear();
2981  connection->eapConfig.allowedPhase2NonEAPMethods.append(TDENetworkIEEE8021xType::MD5);
2982  connection->eapConfig.allowedPhase2NonEAPMethods.append(TDENetworkIEEE8021xType::MSCHAPV2);
2983  connection->eapConfig.allowedPhase2NonEAPMethods.append(TDENetworkIEEE8021xType::OTP);
2984  connection->eapConfig.allowedPhase2NonEAPMethods.append(TDENetworkIEEE8021xType::GTC);
2985  connection->eapConfig.allowedPhase2NonEAPMethods.append(TDENetworkIEEE8021xType::TLS);
2986 
2987  connection->eapConfig.allowedPhase2EAPMethods.clear();
2988  connection->eapConfig.allowedPhase2EAPMethods.append(TDENetworkIEEE8021xType::PAP);
2989  connection->eapConfig.allowedPhase2EAPMethods.append(TDENetworkIEEE8021xType::CHAP);
2990  connection->eapConfig.allowedPhase2EAPMethods.append(TDENetworkIEEE8021xType::MSCHAP);
2991  connection->eapConfig.allowedPhase2EAPMethods.append(TDENetworkIEEE8021xType::MSCHAPV2);
2992  connection->eapConfig.allowedPhase2EAPMethods.append(TDENetworkIEEE8021xType::OTP);
2993  connection->eapConfig.allowedPhase2EAPMethods.append(TDENetworkIEEE8021xType::GTC);
2994  connection->eapConfig.allowedPhase2EAPMethods.append(TDENetworkIEEE8021xType::TLS);
2995 
2996  connection->eapConfig.allowedValid = true;
2997  }
2998 }
2999 
3000 // NOTE
3001 // While this separate separate routine is needed to get the secrets, note that secrets must
3002 // be saved using the same connection map save routine that all other settings use above.
3003 bool TDENetworkConnectionManager_BackendNM::loadConnectionSecrets(TQString uuid) {
3004  TDENetworkConnection* connection = findConnectionByUUID(uuid);
3005  if (!connection) {
3006  PRINT_ERROR(TQString("Unable to locate connection with uuid '%1' in local database. Did you run loadConnectionInformation() first?"));
3007  return false;
3008  }
3009  //TDEWiredEthernetConnection* ethernetConnection = dynamic_cast<TDEWiredEthernetConnection*>(connection);
3010  //TDEWiredInfinibandConnection* infinibandConnection = dynamic_cast<TDEWiredInfinibandConnection*>(connection);
3011  TDEWiFiConnection* wiFiConnection = dynamic_cast<TDEWiFiConnection*>(connection);
3012  TDEVPNConnection* vpnConnection = dynamic_cast<TDEVPNConnection*>(connection);
3013  //TDEWiMaxConnection* wiMaxConnection = dynamic_cast<TDEWiMaxConnection*>(connection);
3014  //TDEVLANConnection* vlanConnection = dynamic_cast<TDEVLANConnection*>(connection);
3015  //TDEOLPCMeshConnection* olpcMeshConnection = dynamic_cast<TDEVLANConnection*>(connection);
3016  //TDEBluetoothConnection* bluetoothConnection = dynamic_cast<TDEBluetoothConnection*>(connection);
3017  TDEModemConnection* modemConnection = dynamic_cast<TDEModemConnection*>(connection);
3018 
3019  bool ret = true;
3020  ret = ret && loadConnectionSecretsForGroup(uuid, "802-1x");
3021  if (wiFiConnection) {
3022  ret = ret && loadConnectionSecretsForGroup(uuid, "802-11-wireless-security");
3023  }
3024  if (vpnConnection) {
3025  ret = ret && loadConnectionSecretsForGroup(uuid, "vpn");
3026  }
3027  ret = ret && loadConnectionSecretsForGroup(uuid, "pppoe");
3028  if (modemConnection) {
3029  ret = ret && loadConnectionSecretsForGroup(uuid, "cdma");
3030  ret = ret && loadConnectionSecretsForGroup(uuid, "gsm");
3031  }
3032  return ret;
3033 }
3034 
3035 bool TDENetworkConnectionManager_BackendNM::loadConnectionSecretsForGroup(TQString uuid, TQString group) {
3036  TDENetworkConnection* connection = findConnectionByUUID(uuid);
3037  if (!connection) {
3038  PRINT_ERROR(TQString("Unable to locate connection with uuid '%1' in local database. Did you run loadConnectionInformation() first?"));
3039  return false;
3040  }
3041  //TDEWiredEthernetConnection* ethernetConnection = dynamic_cast<TDEWiredEthernetConnection*>(connection);
3042  //TDEWiredInfinibandConnection* infinibandConnection = dynamic_cast<TDEWiredInfinibandConnection*>(connection);
3043  TDEWiFiConnection* wiFiConnection = dynamic_cast<TDEWiFiConnection*>(connection);
3044  TDEVPNConnection* vpnConnection = dynamic_cast<TDEVPNConnection*>(connection);
3045  //TDEWiMaxConnection* wiMaxConnection = dynamic_cast<TDEWiMaxConnection*>(connection);
3046  //TDEVLANConnection* vlanConnection = dynamic_cast<TDEVLANConnection*>(connection);
3047  //TDEOLPCMeshConnection* olpcMeshConnection = dynamic_cast<TDEVLANConnection*>(connection);
3048  //TDEBluetoothConnection* bluetoothConnection = dynamic_cast<TDEBluetoothConnection*>(connection);
3049  TDEModemConnection* modemConnection = dynamic_cast<TDEModemConnection*>(connection);
3050  TQT_DBusObjectPath existingConnection;
3051  TQT_DBusError error;
3052  bool ret;
3053  TQT_DBusTQStringDataMap connectionSecretsMap(TQT_DBusData::String);
3054  ret = d->m_networkManagerSettings->GetConnectionByUuid(uuid, existingConnection, error);
3055  if (ret) {
3056  // Obtain connection secrets from the path specified
3057  DBus::ConnectionSettingsInterface connectionSettings(NM_DBUS_SERVICE, existingConnection);
3058  connectionSettings.setConnection(TQT_DBusConnection::systemBus());
3059  connect(&connectionSettings, SIGNAL(GetSecretsAsyncReply(int, const TQT_DBusDataMap<TQString>&)), d, SLOT(processConnectionSettingsAsyncReply(int, const TQT_DBusDataMap<TQString>&)));
3060  int asyncCallID;
3061  ret = connectionSettings.GetSecretsAsync(asyncCallID, group, error);
3062  if (ret && error.isValid()) {
3063  ret = 0;
3064  PRINT_ERROR((error.name() + ": " + error.message()))
3065  }
3066  if (ret) {
3067  // Wait for the asynchronous call to return...
3068  d->nmConnectionSettingsAsyncCallWaiting[asyncCallID] = true;
3069  TQTimer nmCallTimeoutTimer;
3070  nmCallTimeoutTimer.start(NM_ASYNC_SECRETS_INTERACTION_TIMEOUT_MS, true);
3071  while (d->nmConnectionSettingsAsyncCallWaiting[asyncCallID]) {
3072  tqApp->processEvents();
3073  if (!nmCallTimeoutTimer.isActive()) {
3074  PRINT_ERROR(TQString("DBUS asynchronous call timed out!"))
3075  break;
3076  }
3077  }
3078  connectionSecretsMap = d->nmConnectionSettingsAsyncSettingsResponse[asyncCallID];
3079  if (d->nmConnectionSettingsAsyncSettingsErrorResponse.contains(asyncCallID)) {
3080  PRINT_ERROR((d->nmConnectionSettingsAsyncSettingsErrorResponse[asyncCallID].name() + ": " + d->nmConnectionSettingsAsyncSettingsErrorResponse[asyncCallID].message()));
3081  d->nmConnectionSettingsAsyncSettingsErrorResponse.remove(asyncCallID);
3082  }
3083  d->nmConnectionSettingsAsyncCallWaiting.remove(asyncCallID);
3084  if (d->nmConnectionSettingsAsyncSettingsResponse.contains(asyncCallID)) {
3085  d->nmConnectionSettingsAsyncSettingsResponse.remove(asyncCallID);
3086  }
3087 
3088 #ifdef DEBUG_NETWORK_MANAGER_COMMUNICATIONS
3089  printf("[network-manager comm debug] received DBUS object structure map follows:\n"); fflush(stdout);
3090  printDBUSObjectStructure(TQT_DBusData::fromStringKeyMap(connectionSecretsMap));
3091 #endif // DEBUG_NETWORK_MANAGER_COMMUNICATIONS
3092 
3093  // Parse settings
3094  TQT_DBusTQStringDataMap::const_iterator it2;
3095  for (it2 = connectionSecretsMap.begin(); it2 != connectionSecretsMap.end(); ++it2) {
3096  TQString outerKeyValue = it2.key();
3097  TQT_DBusData dataValue = it2.data();
3098 #ifdef DEBUG_NETWORK_MANAGER_COMMUNICATIONS
3099  printf("[network-manager comm debug] [%s]\n", outerKeyValue.ascii()); fflush(stdout);
3100 #endif // DEBUG_NETWORK_MANAGER_COMMUNICATIONS
3101  TQT_DBusTQStringDataMap nestedConnectionSettingsMap = dataValue.toStringKeyMap();
3102  TQT_DBusTQStringDataMap::const_iterator it3;
3103  for (it3 = nestedConnectionSettingsMap.begin(); it3 != nestedConnectionSettingsMap.end(); ++it3) {
3104  TQString keyValue = it3.key();
3105  TQT_DBusData dataValue = it3.data();
3106  if (dataValue.type() != TQT_DBusData::Variant) {
3107 #ifdef DEBUG_NETWORK_MANAGER_COMMUNICATIONS
3108  printf("[network-manager comm debug] %s = %s (type %d(%s))\n", keyValue.ascii(), dataValue.toString().ascii(), dataValue.type(), dataValue.typeName()); fflush(stdout);
3109 #endif // DEBUG_NETWORK_MANAGER_COMMUNICATIONS
3110  // No NM settings are known which use this style
3111  }
3112  else {
3113  TQT_DBusVariant dataValueVariant = dataValue.toVariant();
3114  TQT_DBusData dataValue2 = dataValueVariant.value;
3115  if (dataValue2.type() != TQT_DBusData::Variant) {
3116 #ifdef DEBUG_NETWORK_MANAGER_COMMUNICATIONS
3117  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);
3118 #endif // DEBUG_NETWORK_MANAGER_COMMUNICATIONS
3119  // Most NM settings use this style
3120  if (outerKeyValue.lower() == "802-1x") {
3121  if (keyValue.lower() == "password") {
3122  connection->eapConfig.password = dataValue2.toString();
3123  }
3124  else if (keyValue.lower() == "password-raw") {
3125  TQT_DBusDataValueList valueList = dataValue2.toTQValueList();
3126  TQT_DBusDataValueList::const_iterator it4;
3127  int count=0;
3128  for (it4 = valueList.begin(); it4 != valueList.end(); ++it4) {
3129  TQT_DBusData innerDataValue = *it4;
3130  count++;
3131  connection->eapConfig.binaryPassword.resize(count+1);
3132  connection->eapConfig.binaryPassword[count] = innerDataValue.toByte();
3133  }
3134  }
3135  else if (keyValue.lower() == "private-key-password") {
3136  connection->eapConfig.privateKeyPassword = dataValue2.toString();
3137  }
3138  else if (keyValue.lower() == "phase2-private-key-password") {
3139  connection->eapConfig.phase2PrivateKeyPassword = dataValue2.toString();
3140  }
3141  connection->eapConfig.secretsValid = true;
3142  }
3143  if ((outerKeyValue.lower() == "802-11-wireless-security") && (wiFiConnection)) {
3144  if (keyValue.lower() == "wep-key0") {
3145  wiFiConnection->securitySettings.wepKey0 = dataValue2.toString();
3146  wiFiConnection->securitySettings.wepKeyType = nmWepKeyTypeToTDEWepKeyType(tdeWepKeyTypeToNMWepKeyType(wiFiConnection->securitySettings.wepKeyType), wiFiConnection->securitySettings.wepKey0);
3147  }
3148  else if (keyValue.lower() == "wep-key1") {
3149  wiFiConnection->securitySettings.wepKey1 = dataValue2.toString();
3150  wiFiConnection->securitySettings.wepKeyType = nmWepKeyTypeToTDEWepKeyType(tdeWepKeyTypeToNMWepKeyType(wiFiConnection->securitySettings.wepKeyType), wiFiConnection->securitySettings.wepKey1);
3151  }
3152  else if (keyValue.lower() == "wep-key2") {
3153  wiFiConnection->securitySettings.wepKey2 = dataValue2.toString();
3154  wiFiConnection->securitySettings.wepKeyType = nmWepKeyTypeToTDEWepKeyType(tdeWepKeyTypeToNMWepKeyType(wiFiConnection->securitySettings.wepKeyType), wiFiConnection->securitySettings.wepKey2);
3155  }
3156  else if (keyValue.lower() == "wep-key3") {
3157  wiFiConnection->securitySettings.wepKey3 = dataValue2.toString();
3158  wiFiConnection->securitySettings.wepKeyType = nmWepKeyTypeToTDEWepKeyType(tdeWepKeyTypeToNMWepKeyType(wiFiConnection->securitySettings.wepKeyType), wiFiConnection->securitySettings.wepKey3);
3159  }
3160  else if (keyValue.lower() == "psk") {
3161  wiFiConnection->securitySettings.psk = dataValue2.toString();
3162  }
3163  else if (keyValue.lower() == "eap-password") {
3164  wiFiConnection->securitySettings.leapPassword = dataValue2.toString();
3165  }
3166  }
3167  if ((outerKeyValue.lower() == "vpn") && (vpnConnection)) {
3168  if (keyValue.lower() == "secrets") {
3169  TQT_DBusTQStringDataMap nestedConnectionSettingsMap = dataValue2.toStringKeyMap();
3170  TQT_DBusTQStringDataMap::const_iterator it4;
3171  for (it4 = nestedConnectionSettingsMap.begin(); it4 != nestedConnectionSettingsMap.end(); ++it4) {
3172  vpnConnection->pluginSecrets.clear();
3173  TQString keyValue4 = it4.key();
3174  TQT_DBusData dataValue4 = it4.data();
3175  if (dataValue4.type() == TQT_DBusData::String) {
3176  vpnConnection->pluginSecrets[keyValue4] = dataValue4.toString();
3177  }
3178  }
3179  vpnConnection->secretsValid = true;
3180  }
3181  }
3182  if (outerKeyValue.lower() == "pppoe") {
3183  if (keyValue.lower() == "password") {
3184  connection->pppoeConfig.password = dataValue2.toString();
3185  }
3186  connection->pppoeConfig.secretsValid = true;
3187  }
3188  if (outerKeyValue.lower() == "cdma") {
3189  if (keyValue.lower() == "password") {
3190  modemConnection->cdmaConfig.password = dataValue2.toString();
3191  }
3192  modemConnection->cdmaConfig.secretsValid = true;
3193  }
3194  if (outerKeyValue.lower() == "gsm") {
3195  if (keyValue.lower() == "password") {
3196  modemConnection->gsmConfig.password = dataValue2.toString();
3197  }
3198  else if (keyValue.lower() == "pin") {
3199  modemConnection->gsmConfig.pin = dataValue2.toString();
3200  }
3201  modemConnection->gsmConfig.secretsValid = true;
3202  }
3203  }
3204  }
3205  }
3206  }
3207  return true;
3208  }
3209  else {
3210  PRINT_ERROR(TQString("Unable to load secrets for connection with uuid '%1'").arg(uuid))
3211  return false;
3212  }
3213  }
3214  else {
3215  PRINT_WARNING(TQString("connection for provided uuid '%1' was not found").arg(uuid));
3216  return false;
3217  }
3218 }
3219 
3220 bool TDENetworkConnectionManager_BackendNM::saveConnection(TDENetworkConnection* connection) {
3221  bool timed_out = false;
3222  bool command_failed = false;
3223 
3224  if (!connection) {
3225  PRINT_ERROR(TQString("connection cannot be NULL!"));
3226  return false;
3227  }
3228 
3229  // If the UUID is blank, generate a new UUID for this connection and also guarantee that it it truly unique
3230  if (connection->UUID == "") {
3231  bool unique = false;
3232  while (!unique) {
3233  connection->UUID = TQUuid::createUuid().toString();
3234  connection->UUID.replace("{", "");
3235  connection->UUID.replace("}", "");
3236  if (!findConnectionByUUID(connection->UUID)) {
3237  unique = true;
3238  }
3239  }
3240  }
3241 
3242  // Find path for connection with specified UUID, if it exists
3243  // This is so that any settings that we are not aware of can be loaded now and preserved through the update operation
3244  TDEWiredEthernetConnection* ethernetConnection = dynamic_cast<TDEWiredEthernetConnection*>(connection);
3245  TDEWiredInfinibandConnection* infinibandConnection = dynamic_cast<TDEWiredInfinibandConnection*>(connection);
3246  TDEWiFiConnection* wiFiConnection = dynamic_cast<TDEWiFiConnection*>(connection);
3247  TDEVPNConnection* vpnConnection = dynamic_cast<TDEVPNConnection*>(connection);
3248  TDEWiMaxConnection* wiMaxConnection = dynamic_cast<TDEWiMaxConnection*>(connection);
3249  TDEVLANConnection* vlanConnection = dynamic_cast<TDEVLANConnection*>(connection);
3250  TDEOLPCMeshConnection* olpcMeshConnection = dynamic_cast<TDEOLPCMeshConnection*>(connection);
3251  TDEBluetoothConnection* bluetoothConnection = dynamic_cast<TDEBluetoothConnection*>(connection);
3252  TDEModemConnection* modemConnection = dynamic_cast<TDEModemConnection*>(connection);
3253  TQT_DBusObjectPath existingConnection;
3254  TQT_DBusError error;
3255  bool ret;
3256  bool existing;
3257  TQT_DBusTQStringDataMap connectionSettingsMap(TQT_DBusData::String);
3258  existing = false;
3259  ret = d->m_networkManagerSettings->GetConnectionByUuid(connection->UUID, existingConnection, error);
3260  if (ret) {
3261  // Obtain connection settings from the path specified
3262  DBus::ConnectionSettingsInterface connectionSettings(NM_DBUS_SERVICE, existingConnection);
3263  connectionSettings.setConnection(TQT_DBusConnection::systemBus());
3264  connect(&connectionSettings, SIGNAL(GetSettingsAsyncReply(int, const TQT_DBusDataMap<TQString>&)), d, SLOT(processConnectionSettingsAsyncReply(int, const TQT_DBusDataMap<TQString>&)));
3265  int asyncCallID;
3266  ret = connectionSettings.GetSettingsAsync(asyncCallID, error);
3267  if (ret && error.isValid()) {
3268  ret = 0;
3269  PRINT_ERROR((error.name() + ": " + error.message()))
3270  }
3271  if (ret) {
3272  // Wait for the asynchronous call to return...
3273  d->nmConnectionSettingsAsyncCallWaiting[asyncCallID] = true;
3274  TQTimer nmCallTimeoutTimer;
3275  nmCallTimeoutTimer.start(NM_ASYNC_TIMEOUT_MS, true);
3276  while (d->nmConnectionSettingsAsyncCallWaiting[asyncCallID]) {
3277  tqApp->processEvents();
3278  if (!nmCallTimeoutTimer.isActive()) {
3279  PRINT_ERROR(TQString("DBUS asynchronous call timed out!"))
3280  timed_out = true;
3281  break;
3282  }
3283  }
3284  connectionSettingsMap = d->nmConnectionSettingsAsyncSettingsResponse[asyncCallID];
3285  if (d->nmConnectionSettingsAsyncSettingsErrorResponse.contains(asyncCallID)) {
3286  PRINT_ERROR((d->nmConnectionSettingsAsyncSettingsErrorResponse[asyncCallID].name() + ": " + d->nmConnectionSettingsAsyncSettingsErrorResponse[asyncCallID].message()));
3287  d->nmConnectionSettingsAsyncSettingsErrorResponse.remove(asyncCallID);
3288  }
3289  d->nmConnectionSettingsAsyncCallWaiting.remove(asyncCallID);
3290  if (d->nmConnectionSettingsAsyncSettingsResponse.contains(asyncCallID)) {
3291  d->nmConnectionSettingsAsyncSettingsResponse.remove(asyncCallID);
3292  }
3293  existing = true;
3294  }
3295  }
3296 
3297  // Create and/or update settings map from provided connection information
3298  // We start at the outermost layer and work our way inwards, in a structure which should match the parser in loadConnectionInformation() very closely
3299  bool groupValid;
3300  TQT_DBusData dbusData;
3301  TQT_DBusData innerDbusData;
3302  TQMap<TQString, TQT_DBusData> outerMap = connectionSettingsMap.toTQMap();
3303  {
3304  groupValid = false;
3305  dbusData = outerMap["connection"];
3306  {
3307  TQMap<TQString, TQT_DBusData> settingsMap = dbusData.toStringKeyMap().toTQMap();
3308  {
3309  settingsMap["id"] = (TQT_DBusData::fromString(connection->friendlyName)).getAsVariantData();
3310  {
3311  TQString type;
3312  if (ethernetConnection) type = "802-3-ethernet";
3313  else if (infinibandConnection) type = "infiniband";
3314  else if (wiFiConnection) type = "802-11-wireless";
3315  else if (vpnConnection) type = "vpn";
3316  else if (wiMaxConnection) type = "wimax";
3317  else if (vlanConnection) type = "vlan";
3318  else if (olpcMeshConnection) type = "802-11-olpc-mesh";
3319  else if (bluetoothConnection) type = "bluetooth";
3320  else if (modemConnection) {
3321  if (modemConnection->type == TDEModemConnectionType::CDMA) {
3322  type = "cdma";
3323  }
3324  else if (modemConnection->type == TDEModemConnectionType::GSM) {
3325  type = "gsm";
3326  }
3327  }
3328  if (!type.isNull()) settingsMap["type"] = (TQT_DBusData::fromString(type)).getAsVariantData();
3329  }
3330  settingsMap["uuid"] = (TQT_DBusData::fromString(connection->UUID)).getAsVariantData();
3331  {
3332  TQT_DBusDataValueList valueList;
3333  {
3334  for (TQStringList::Iterator it = connection->authorizedUsers.begin(); it != connection->authorizedUsers.end(); ++it) {
3335  TQString assembledString = TQString("user:%1:").arg(*it);
3336  valueList.append(TQT_DBusData::fromString(assembledString));
3337  }
3338  }
3339  if (valueList.count() > 0) settingsMap["permissions"] = (TQT_DBusData::fromTQValueList(valueList)).getAsVariantData();
3340  else settingsMap.remove("permissions");
3341  }
3342  settingsMap["autoconnect"] = (TQT_DBusData::fromBool(connection->autoConnect)).getAsVariantData();
3343  settingsMap["read-only"] = (TQT_DBusData::fromBool(connection->readOnly)).getAsVariantData();
3344  UPDATE_STRING_SETTING_IF_VALID(connection->masterConnectionUUID, "master", settingsMap)
3345  {
3346  TQString slaveType = tdeSlaveTypeToNMSlaveType(connection->slaveType);
3347  if (slaveType != "") settingsMap["slave-type"] = (TQT_DBusData::fromString(slaveType)).getAsVariantData();
3348  else settingsMap.remove("slave-type");
3349  }
3350  // settingsMap["timestamp"] = (TQT_DBusData::fromUInt64(connection->lastKnownConnection.toTime_t())).getAsVariantData(); // Probably read-only to us
3351  }
3352  dbusData = TQT_DBusData::fromStringKeyMap(TQT_DBusDataMap<TQString>(settingsMap));
3353  groupValid = (settingsMap.count() > 0);
3354  }
3355  if (groupValid) outerMap.insert("connection", dbusData, true); else outerMap.remove("connection");
3356 
3357  groupValid = false;
3358  dbusData = outerMap["802-1x"];
3359  {
3360  TQMap<TQString, TQT_DBusData> settingsMap = dbusData.toStringKeyMap().toTQMap();
3361  {
3362  if (connection->eapConfig.valid) {
3363  TQT_DBusDataValueList valueList;
3364  {
3365  // WARNING: The exact order of the data in the list is critical, therefore extreme caution should be exercised when modifying the code below!
3366  // EAP type
3367  valueList.append(TQT_DBusData::fromString(tdeEAPTypeToNMEAPType(connection->eapConfig.type)));
3368  }
3369  settingsMap["eap"] = (TQT_DBusData::fromTQValueList(valueList)).getAsVariantData();
3370  }
3371  else {
3372  settingsMap.remove("eap");
3373  }
3374  if (connection->eapConfig.valid) {
3375  UPDATE_STRING_SETTING_IF_VALID(connection->eapConfig.userName, "identity", settingsMap)
3376  UPDATE_STRING_SETTING_IF_VALID(connection->eapConfig.anonymousUserName, "anonymous-identity", settingsMap)
3377  UPDATE_STRING_SETTING_IF_VALID(connection->eapConfig.pacFileName, "pac-file", settingsMap)
3378  }
3379  else {
3380  settingsMap.remove("identity");
3381  settingsMap.remove("anonymous-identity");
3382  settingsMap.remove("pac-file");
3383  }
3384  if (connection->eapConfig.valid) {
3385  TQT_DBusDataValueList valueList;
3386  {
3387  unsigned int count;
3388  for (count=0; count<connection->eapConfig.caCertificate.count(); count++) {
3389  valueList.append(TQT_DBusData::fromByte(connection->eapConfig.caCertificate[count]));
3390  }
3391  }
3392  if (valueList.count() > 0) settingsMap["ca-cert"] = (TQT_DBusData::fromTQValueList(valueList)).getAsVariantData();
3393  else settingsMap.remove("ca-cert");
3394  }
3395  else {
3396  settingsMap.remove("ca-cert");
3397  }
3398  if (connection->eapConfig.valid) {
3399  UPDATE_STRING_SETTING_IF_VALID(connection->eapConfig.additionalCAFilesPath, "ca-path", settingsMap)
3400  UPDATE_STRING_SETTING_IF_VALID(connection->eapConfig.authServerCertSubjectMatch, "subject-match", settingsMap)
3401  }
3402  else {
3403  settingsMap.remove("ca-path");
3404  settingsMap.remove("subject-match");
3405  }
3406  if (connection->eapConfig.valid) {
3407  TQT_DBusDataValueList valueList;
3408  {
3409  for (TQStringList::Iterator it = connection->eapConfig.alternateAuthServerCertSubjectMatch.begin(); it != connection->eapConfig.alternateAuthServerCertSubjectMatch.end(); ++it) {
3410  valueList.append(TQT_DBusData::fromString(*it));
3411  }
3412  }
3413  if (valueList.count() > 0) settingsMap["altsubject-matches"] = (TQT_DBusData::fromTQValueList(valueList)).getAsVariantData();
3414  else settingsMap.remove("altsubject-matches");
3415  }
3416  else {
3417  settingsMap.remove("altsubject-matches");
3418  }
3419  if (connection->eapConfig.valid) {
3420  TQT_DBusDataValueList valueList;
3421  {
3422  unsigned int count;
3423  for (count=0; count<connection->eapConfig.clientCertificate.count(); count++) {
3424  valueList.append(TQT_DBusData::fromByte(connection->eapConfig.clientCertificate[count]));
3425  }
3426  }
3427  if (valueList.count() > 0) settingsMap["client-cert"] = (TQT_DBusData::fromTQValueList(valueList)).getAsVariantData();
3428  else settingsMap.remove("client-cert");
3429  }
3430  else {
3431  settingsMap.remove("client-cert");
3432  }
3433  if (connection->eapConfig.valid) {
3434  UPDATE_STRING_SETTING_IF_VALID(connection->eapConfig.forcePEAPVersion, "phase1-peapver", settingsMap)
3435  UPDATE_STRING_SETTING_IF_VALID(connection->eapConfig.forcePEAPLabel, "phase1-peaplabel", settingsMap)
3436  UPDATE_STRING_SETTING_IF_VALID(tdeEAPFastFlagsToNMEAPFastFlags(connection->eapConfig.fastProvisioningFlags), "phase1-fast-provisioning", settingsMap)
3437  }
3438  else {
3439  settingsMap.remove("phase1-peapver");
3440  settingsMap.remove("phase1-peaplabel");
3441  settingsMap.remove("phase1-fast-provisioning");
3442  }
3443  if (connection->eapConfig.valid) {
3444  settingsMap["phase2-auth"] = (TQT_DBusData::fromString(tdeEAPTypeToNMEAPType(connection->eapConfig.phase2NonEAPAuthMethod))).getAsVariantData();
3445  settingsMap["phase2-autheap"] = (TQT_DBusData::fromString(tdeEAPTypeToNMEAPType(connection->eapConfig.phase2EAPAuthMethod))).getAsVariantData();
3446  }
3447  else {
3448  settingsMap.remove("phase2-auth");
3449  settingsMap.remove("phase2-autheap");
3450  }
3451  if (connection->eapConfig.valid) {
3452  TQT_DBusDataValueList valueList;
3453  {
3454  unsigned int count;
3455  for (count=0; count<connection->eapConfig.phase2CaCertificate.count(); count++) {
3456  valueList.append(TQT_DBusData::fromByte(connection->eapConfig.phase2CaCertificate[count]));
3457  }
3458  }
3459  if (valueList.count() > 0) settingsMap["phase2-ca-cert"] = (TQT_DBusData::fromTQValueList(valueList)).getAsVariantData();
3460  else settingsMap.remove("phase2-ca-cert");
3461  }
3462  else {
3463  settingsMap.remove("phase2-ca-cert");
3464  }
3465  if (connection->eapConfig.valid) {
3466  UPDATE_STRING_SETTING_IF_VALID(connection->eapConfig.phase2CaFilesPath, "phase2-ca-path", settingsMap)
3467  UPDATE_STRING_SETTING_IF_VALID(connection->eapConfig.phase2AuthServerCertSubjectMatch, "phase2-subject-match", settingsMap)
3468  }
3469  else {
3470  settingsMap.remove("phase2-ca-path");
3471  settingsMap.remove("phase2-subject-match");
3472  }
3473  if (connection->eapConfig.valid) {
3474  TQT_DBusDataValueList valueList;
3475  {
3476  for (TQStringList::Iterator it = connection->eapConfig.phase2AlternateAuthServerCertSubjectMatch.begin(); it != connection->eapConfig.phase2AlternateAuthServerCertSubjectMatch.end(); ++it) {
3477  valueList.append(TQT_DBusData::fromString(*it));
3478  }
3479  }
3480  if (valueList.count() > 0) settingsMap["phase2-altsubject-matches"] = (TQT_DBusData::fromTQValueList(valueList)).getAsVariantData();
3481  else settingsMap.remove("phase2-altsubject-matches");
3482  }
3483  else {
3484  settingsMap.remove("phase2-altsubject-matches");
3485  }
3486  if (connection->eapConfig.valid) {
3487  TQT_DBusDataValueList valueList;
3488  {
3489  unsigned int count;
3490  for (count=0; count<connection->eapConfig.phase2ClientCertificate.count(); count++) {
3491  valueList.append(TQT_DBusData::fromByte(connection->eapConfig.phase2ClientCertificate[count]));
3492  }
3493  }
3494  if (valueList.count() > 0) settingsMap["phase2-client-cert"] = (TQT_DBusData::fromTQValueList(valueList)).getAsVariantData();
3495  else settingsMap.remove("phase2-client-cert");
3496  }
3497  else {
3498  settingsMap.remove("phase2-client-cert");
3499  }
3500  if (connection->eapConfig.valid) {
3501  settingsMap["password-flags"] = (TQT_DBusData::fromUInt32(tdePasswordFlagsToNMPasswordFlags(connection->eapConfig.passwordFlags))).getAsVariantData();
3502  settingsMap["password-raw-flags"] = (TQT_DBusData::fromUInt32(tdePasswordFlagsToNMPasswordFlags(connection->eapConfig.binaryPasswordFlags))).getAsVariantData();
3503  }
3504  else {
3505  settingsMap.remove("password-flags");
3506  settingsMap.remove("password-raw-flags");
3507  }
3508  if (connection->eapConfig.valid) {
3509  TQT_DBusDataValueList valueList;
3510  {
3511  unsigned int count;
3512  for (count=0; count<connection->eapConfig.privateKey.count(); count++) {
3513  valueList.append(TQT_DBusData::fromByte(connection->eapConfig.privateKey[count]));
3514  }
3515  }
3516  if (valueList.count() > 0) settingsMap["private-key"] = (TQT_DBusData::fromTQValueList(valueList)).getAsVariantData();
3517  else settingsMap.remove("private-key");
3518  }
3519  else {
3520  settingsMap.remove("private-key");
3521  }
3522  if (connection->eapConfig.valid) {
3523  settingsMap["private-key-password-flags"] = (TQT_DBusData::fromUInt32(tdePasswordFlagsToNMPasswordFlags(connection->eapConfig.privateKeyPasswordFlags))).getAsVariantData();
3524  }
3525  else {
3526  settingsMap.remove("private-key-password-flags");
3527  }
3528  if (connection->eapConfig.valid) {
3529  TQT_DBusDataValueList valueList;
3530  {
3531  unsigned int count;
3532  for (count=0; count<connection->eapConfig.phase2PrivateKey.count(); count++) {
3533  valueList.append(TQT_DBusData::fromByte(connection->eapConfig.phase2PrivateKey[count]));
3534  }
3535  }
3536  if (valueList.count() > 0) settingsMap["phase2-private-key"] = (TQT_DBusData::fromTQValueList(valueList)).getAsVariantData();
3537  else settingsMap.remove("phase2-private-key");
3538  }
3539  else {
3540  settingsMap.remove("phase2-private-key");
3541  }
3542  if (connection->eapConfig.valid) {
3543  settingsMap["phase2-private-key-password-flags"] = (TQT_DBusData::fromUInt32(tdePasswordFlagsToNMPasswordFlags(connection->eapConfig.phase2PrivateKeyPasswordFlags))).getAsVariantData();
3544  }
3545  else {
3546  settingsMap.remove("phase2-private-key-password-flags");
3547  }
3548  if (connection->eapConfig.valid) {
3549  settingsMap["system-ca-certs"] = (TQT_DBusData::fromBool(connection->eapConfig.forceSystemCaCertificates)).getAsVariantData();
3550  }
3551  else {
3552  settingsMap.remove("system-ca-certs");
3553  }
3554  if (connection->eapConfig.secretsValid) {
3555  settingsMap["password"] = (TQT_DBusData::fromString(connection->eapConfig.password)).getAsVariantData();
3556  }
3557  else {
3558  settingsMap.remove("password");
3559  }
3560  if (connection->eapConfig.valid) {
3561  TQT_DBusDataValueList valueList;
3562  {
3563  unsigned int count;
3564  for (count=0; count<connection->eapConfig.binaryPassword.count(); count++) {
3565  valueList.append(TQT_DBusData::fromByte(connection->eapConfig.binaryPassword[count]));
3566  }
3567  }
3568  if (valueList.count() > 0) settingsMap["password-raw"] = (TQT_DBusData::fromTQValueList(valueList)).getAsVariantData();
3569  else settingsMap.remove("password-raw");
3570  }
3571  else {
3572  settingsMap.remove("password-raw");
3573  }
3574  if (connection->eapConfig.secretsValid) {
3575  settingsMap["private-key-password"] = (TQT_DBusData::fromString(connection->eapConfig.privateKeyPassword)).getAsVariantData();
3576  settingsMap["phase2-private-key-password"] = (TQT_DBusData::fromString(connection->eapConfig.phase2PrivateKeyPassword)).getAsVariantData();
3577  }
3578  else {
3579  settingsMap.remove("private-key-password");
3580  settingsMap.remove("phase2-private-key-password");
3581  }
3582  }
3583  dbusData = TQT_DBusData::fromStringKeyMap(TQT_DBusDataMap<TQString>(settingsMap));
3584  groupValid = (settingsMap.count() > 0);
3585  }
3586  if (groupValid) outerMap.insert("802-1x", dbusData, true); else outerMap.remove("802-1x");
3587 
3588  groupValid = false;
3589  dbusData = outerMap["802-3-ethernet"];
3590  if (ethernetConnection) {
3591  TQMap<TQString, TQT_DBusData> settingsMap = dbusData.toStringKeyMap().toTQMap();
3592  {
3593  settingsMap["duplex"] = (TQT_DBusData::fromString((connection->fullDuplex)?"full":"half")).getAsVariantData();
3594  if (connection->lockedHWAddress.isValid()) {
3595  TDENetworkByteList address = connection->lockedHWAddress.address();
3596  TQT_DBusDataValueList valueList;
3597  TDENetworkByteList::iterator it;
3598  for (it = address.begin(); it != address.end(); ++it) {
3599  TQT_DBusData innerDataValue = TQT_DBusData::fromByte(*it);
3600  valueList.append(innerDataValue);
3601  }
3602  TQT_DBusData nmHWAddress = TQT_DBusData::fromTQValueList(valueList);
3603  settingsMap["mac-address"] = (nmHWAddress).getAsVariantData();
3604  }
3605  else {
3606  settingsMap.remove("mac-address");
3607  }
3608  if (connection->manualHWAddress.isValid()) {
3609  TDENetworkByteList address = connection->manualHWAddress.address();
3610  TQT_DBusDataValueList valueList;
3611  TDENetworkByteList::iterator it;
3612  for (it = address.begin(); it != address.end(); ++it) {
3613  TQT_DBusData innerDataValue = TQT_DBusData::fromByte(*it);
3614  valueList.append(innerDataValue);
3615  }
3616  TQT_DBusData nmHWAddress = TQT_DBusData::fromTQValueList(valueList);
3617  settingsMap["cloned-mac-address"] = (nmHWAddress).getAsVariantData();
3618  }
3619  else {
3620  settingsMap.remove("cloned-mac-address");
3621  }
3622  if (connection->mtu > 0) {
3623  settingsMap["mtu"] = (TQT_DBusData::fromUInt32(connection->mtu)).getAsVariantData();
3624  }
3625  else {
3626  settingsMap.remove("mtu");
3627  }
3628  }
3629  dbusData = TQT_DBusData::fromStringKeyMap(TQT_DBusDataMap<TQString>(settingsMap));
3630  groupValid = (settingsMap.count() > 0);
3631  }
3632  if (groupValid) outerMap.insert("802-3-ethernet", dbusData, true); else outerMap.remove("802-3-ethernet");
3633 
3634  groupValid = false;
3635  dbusData = outerMap["infiniband"];
3636  if (infinibandConnection) {
3637  TQMap<TQString, TQT_DBusData> settingsMap = dbusData.toStringKeyMap().toTQMap();
3638  {
3639  if (connection->lockedHWAddress.isValid()) {
3640  TDENetworkByteList address = connection->lockedHWAddress.address();
3641  TQT_DBusDataValueList valueList;
3642  TDENetworkByteList::iterator it;
3643  for (it = address.begin(); it != address.end(); ++it) {
3644  TQT_DBusData innerDataValue = TQT_DBusData::fromByte(*it);
3645  valueList.append(innerDataValue);
3646  }
3647  TQT_DBusData nmHWAddress = TQT_DBusData::fromTQValueList(valueList);
3648  settingsMap["mac-address"] = (nmHWAddress).getAsVariantData();
3649  }
3650  else {
3651  settingsMap.remove("mac-address");
3652  }
3653  if (connection->mtu > 0) {
3654  settingsMap["mtu"] = (TQT_DBusData::fromUInt32(connection->mtu)).getAsVariantData();
3655  }
3656  else {
3657  settingsMap.remove("mtu");
3658  }
3659  UPDATE_STRING_SETTING_IF_VALID(tdeIBTransportToNMIBTransport(infinibandConnection->transportMode), "transport-mode", settingsMap)
3660  }
3661  dbusData = TQT_DBusData::fromStringKeyMap(TQT_DBusDataMap<TQString>(settingsMap));
3662  groupValid = (settingsMap.count() > 0);
3663  }
3664  if (groupValid) outerMap.insert("infiniband", dbusData, true); else outerMap.remove("infiniband");
3665 
3666  groupValid = false;
3667  dbusData = outerMap["802-11-wireless"];
3668  if (wiFiConnection) {
3669  TQMap<TQString, TQT_DBusData> settingsMap = dbusData.toStringKeyMap().toTQMap();
3670  {
3671  {
3672  unsigned int i;
3673  TQT_DBusDataValueList valueList;
3674  for (i=0; i<wiFiConnection->SSID.count(); i++) {
3675  TQT_DBusData innerDataValue = TQT_DBusData::fromByte(wiFiConnection->SSID[i]);
3676  valueList.append(innerDataValue);
3677  }
3678  settingsMap["ssid"] = (TQT_DBusData::fromTQValueList(valueList)).getAsVariantData();
3679  }
3680  if (connection->lockedHWAddress.isValid()) {
3681  TDENetworkByteList address = connection->lockedHWAddress.address();
3682  TQT_DBusDataValueList valueList;
3683  TDENetworkByteList::iterator it;
3684  for (it = address.begin(); it != address.end(); ++it) {
3685  TQT_DBusData innerDataValue = TQT_DBusData::fromByte(*it);
3686  valueList.append(innerDataValue);
3687  }
3688  TQT_DBusData nmHWAddress = TQT_DBusData::fromTQValueList(valueList);
3689  settingsMap["mac-address"] = (nmHWAddress).getAsVariantData();
3690  }
3691  else {
3692  settingsMap.remove("mac-address");
3693  }
3694  if (connection->manualHWAddress.isValid()) {
3695  TDENetworkByteList address = connection->manualHWAddress.address();
3696  TQT_DBusDataValueList valueList;
3697  TDENetworkByteList::iterator it;
3698  for (it = address.begin(); it != address.end(); ++it) {
3699  TQT_DBusData innerDataValue = TQT_DBusData::fromByte(*it);
3700  valueList.append(innerDataValue);
3701  }
3702  TQT_DBusData nmHWAddress = TQT_DBusData::fromTQValueList(valueList);
3703  settingsMap["cloned-mac-address"] = (nmHWAddress).getAsVariantData();
3704  }
3705  else {
3706  settingsMap.remove("cloned-mac-address");
3707  }
3708  if (connection->mtu > 0) {
3709  settingsMap["mtu"] = (TQT_DBusData::fromUInt32(connection->mtu)).getAsVariantData();
3710  }
3711  else {
3712  settingsMap.remove("mtu");
3713  }
3714  UPDATE_STRING_SETTING_IF_VALID(tdeWiFiModeToNMWiFiMode(wiFiConnection->operatingMode), "mode", settingsMap)
3715  UPDATE_STRING_SETTING_IF_VALID(tdeWiFiFrequencyBandToNMWiFiFrequencyBand(wiFiConnection->bandRestriction), "band", settingsMap)
3716  if (wiFiConnection->channelRestriction > 0) {
3717  settingsMap["channel"] = (TQT_DBusData::fromUInt32(wiFiConnection->channelRestriction)).getAsVariantData();
3718  }
3719  else {
3720  settingsMap.remove("channel");
3721  }
3722  if (wiFiConnection->bitRateRestriction > 0) {
3723  settingsMap["rate"] = (TQT_DBusData::fromUInt32(wiFiConnection->bitRateRestriction/1000)).getAsVariantData();
3724  }
3725  else {
3726  settingsMap.remove("rate");
3727  }
3728  if (wiFiConnection->powerRestriction > 0) {
3729  settingsMap["tx-power"] = (TQT_DBusData::fromUInt32(wiFiConnection->powerRestriction)).getAsVariantData();
3730  }
3731  else {
3732  settingsMap.remove("tx-power");
3733  }
3734  if (wiFiConnection->accessPointRestriction.isValid()) {
3735  TDENetworkByteList address = wiFiConnection->accessPointRestriction.address();
3736  TQT_DBusDataValueList valueList;
3737  TDENetworkByteList::iterator it;
3738  for (it = address.begin(); it != address.end(); ++it) {
3739  TQT_DBusData innerDataValue = TQT_DBusData::fromByte(*it);
3740  valueList.append(innerDataValue);
3741  }
3742  TQT_DBusData nmHWAddress = TQT_DBusData::fromTQValueList(valueList);
3743  settingsMap["bssid"] = (nmHWAddress).getAsVariantData();
3744  }
3745  else {
3746  settingsMap.remove("bssid");
3747  }
3748  {
3749  TQT_DBusDataValueList valueList;
3750  TDEMACAddressList::iterator it;
3751  for (it = wiFiConnection->blacklistedBSSIDs.begin(); it != wiFiConnection->blacklistedBSSIDs.end(); ++it) {
3752  valueList.append(TQT_DBusData::fromString((*it).toString()));
3753  }
3754  if (valueList.count() > 0) settingsMap["mac-address-blacklist"] = (TQT_DBusData::fromTQValueList(valueList)).getAsVariantData();
3755  }
3756  {
3757  TQT_DBusDataValueList valueList;
3758  TDEMACAddressList::iterator it;
3759  for (it = wiFiConnection->heardBSSIDs.begin(); it != wiFiConnection->heardBSSIDs.end(); ++it) {
3760  valueList.append(TQT_DBusData::fromString((*it).toString()));
3761  }
3762  if (valueList.count() > 0) settingsMap["seen-bssids"] = (TQT_DBusData::fromTQValueList(valueList)).getAsVariantData();
3763  }
3764  {
3765  if (wiFiConnection->securityRequired) {
3766  settingsMap["security"] = (TQT_DBusData::fromString("802-11-wireless-security")).getAsVariantData();
3767  }
3768  else {
3769  settingsMap.remove("security");
3770  }
3771  }
3772  {
3773  if (wiFiConnection->isHiddenNetwork) {
3774  settingsMap["hidden"] = (TQT_DBusData::fromBool(true)).getAsVariantData();
3775  }
3776  else {
3777  settingsMap.remove("hidden");
3778  }
3779  }
3780  }
3781  dbusData = TQT_DBusData::fromStringKeyMap(TQT_DBusDataMap<TQString>(settingsMap));
3782  groupValid = (settingsMap.count() > 0);
3783  }
3784  if (groupValid) outerMap.insert("802-11-wireless", dbusData, true); else outerMap.remove("802-11-wireless");
3785 
3786  groupValid = false;
3787  dbusData = outerMap["802-11-wireless-security"];
3788  if (wiFiConnection) {
3789  TQMap<TQString, TQT_DBusData> settingsMap = dbusData.toStringKeyMap().toTQMap();
3790  {
3791  if (wiFiConnection->securityRequired) {
3792  if (wiFiConnection->securityRequired) {
3793  settingsMap["key-mgmt"] = (TQT_DBusData::fromString(tdeWiFiKeyTypeToNMWiFiKeyType(wiFiConnection->securitySettings.keyType))).getAsVariantData();
3794  }
3795  if (wiFiConnection->securitySettings.wepKeyIndex > 0) {
3796  settingsMap["wep-tx-keyidx"] = (TQT_DBusData::fromUInt32(wiFiConnection->securitySettings.wepKeyIndex)).getAsVariantData();
3797  }
3798  else {
3799  settingsMap.remove("wep-tx-keyidx");
3800  }
3801  UPDATE_STRING_SETTING_IF_VALID(tdeWiFiAuthTypeToNMWiFiAuthType(wiFiConnection->securitySettings.authType), "auth-alg", settingsMap)
3802  {
3803  TQT_DBusDataValueList valueList;
3804  {
3805  TQStringList strings = tdeWiFiWPAVersionToNMWiFiWPAVersion(wiFiConnection->securitySettings.wpaVersion);
3806  for (TQStringList::Iterator it = strings.begin(); it != strings.end(); ++it) {
3807  valueList.append(TQT_DBusData::fromString(*it));
3808  }
3809  }
3810  if (valueList.count() > 0) settingsMap["proto"] = (TQT_DBusData::fromTQValueList(valueList)).getAsVariantData();
3811  else settingsMap.remove("proto");
3812  }
3813  {
3814  TQT_DBusDataValueList valueList;
3815  {
3816  if (wiFiConnection->securitySettings.allowedPairWiseCiphers.contains(TDENetworkWiFiConnectionCipher::Any)) {
3817  if (!wiFiConnection->securitySettings.allowedPairWiseCiphers.contains(TDENetworkWiFiConnectionCipher::CipherWEP40)) wiFiConnection->securitySettings.allowedPairWiseCiphers.append(TDENetworkWiFiConnectionCipher::CipherWEP40);
3818  if (!wiFiConnection->securitySettings.allowedPairWiseCiphers.contains(TDENetworkWiFiConnectionCipher::CipherWEP104)) wiFiConnection->securitySettings.allowedPairWiseCiphers.append(TDENetworkWiFiConnectionCipher::CipherWEP104);
3819  if (!wiFiConnection->securitySettings.allowedPairWiseCiphers.contains(TDENetworkWiFiConnectionCipher::CipherTKIP)) wiFiConnection->securitySettings.allowedPairWiseCiphers.append(TDENetworkWiFiConnectionCipher::CipherTKIP);
3820  if (!wiFiConnection->securitySettings.allowedPairWiseCiphers.contains(TDENetworkWiFiConnectionCipher::CipherCCMP)) wiFiConnection->securitySettings.allowedPairWiseCiphers.append(TDENetworkWiFiConnectionCipher::CipherCCMP);
3821  }
3822  for (TDENetworkWiFiConnectionCipherList::Iterator it = wiFiConnection->securitySettings.allowedPairWiseCiphers.begin(); it != wiFiConnection->securitySettings.allowedPairWiseCiphers.end(); ++it) {
3823  valueList.append(TQT_DBusData::fromString(tdeWiFiCipherToNMWiFiCipher(*it)));
3824  }
3825  }
3826  if (valueList.count() > 0) settingsMap["pairwise"] = (TQT_DBusData::fromTQValueList(valueList)).getAsVariantData();
3827  else settingsMap.remove("pairwise");
3828  }
3829  {
3830  TQT_DBusDataValueList valueList;
3831  {
3832  if (wiFiConnection->securitySettings.allowedGroupWiseCiphers.contains(TDENetworkWiFiConnectionCipher::Any)) {
3833  if (!wiFiConnection->securitySettings.allowedGroupWiseCiphers.contains(TDENetworkWiFiConnectionCipher::CipherWEP40)) wiFiConnection->securitySettings.allowedGroupWiseCiphers.append(TDENetworkWiFiConnectionCipher::CipherWEP40);
3834  if (!wiFiConnection->securitySettings.allowedGroupWiseCiphers.contains(TDENetworkWiFiConnectionCipher::CipherWEP104)) wiFiConnection->securitySettings.allowedGroupWiseCiphers.append(TDENetworkWiFiConnectionCipher::CipherWEP104);
3835  if (!wiFiConnection->securitySettings.allowedGroupWiseCiphers.contains(TDENetworkWiFiConnectionCipher::CipherTKIP)) wiFiConnection->securitySettings.allowedGroupWiseCiphers.append(TDENetworkWiFiConnectionCipher::CipherTKIP);
3836  if (!wiFiConnection->securitySettings.allowedGroupWiseCiphers.contains(TDENetworkWiFiConnectionCipher::CipherCCMP)) wiFiConnection->securitySettings.allowedGroupWiseCiphers.append(TDENetworkWiFiConnectionCipher::CipherCCMP);
3837  }
3838  for (TDENetworkWiFiConnectionCipherList::Iterator it = wiFiConnection->securitySettings.allowedGroupWiseCiphers.begin(); it != wiFiConnection->securitySettings.allowedGroupWiseCiphers.end(); ++it) {
3839  valueList.append(TQT_DBusData::fromString(tdeWiFiCipherToNMWiFiCipher(*it)));
3840  }
3841  }
3842  if (valueList.count() > 0) settingsMap["group"] = (TQT_DBusData::fromTQValueList(valueList)).getAsVariantData();
3843  else settingsMap.remove("group");
3844  }
3845  UPDATE_STRING_SETTING_IF_VALID(wiFiConnection->securitySettings.leapUsername, "leap-username", settingsMap)
3846  settingsMap["wep-key-flags"] = (TQT_DBusData::fromUInt32(tdePasswordFlagsToNMPasswordFlags(wiFiConnection->securitySettings.wepKeyFlags))).getAsVariantData();
3847  settingsMap["wep-key-type"] = (TQT_DBusData::fromUInt32(tdeWepKeyTypeToNMWepKeyType(wiFiConnection->securitySettings.wepKeyType))).getAsVariantData();
3848  settingsMap["psk-flags"] = (TQT_DBusData::fromUInt32(tdePasswordFlagsToNMPasswordFlags(wiFiConnection->securitySettings.pskFlags))).getAsVariantData();
3849  settingsMap["leap-password-flags"] = (TQT_DBusData::fromUInt32(tdePasswordFlagsToNMPasswordFlags(wiFiConnection->securitySettings.leapPasswordFlags))).getAsVariantData();
3850  if (wiFiConnection->securitySettings.secretsValid) {
3851  UPDATE_STRING_SETTING_IF_VALID(wiFiConnection->securitySettings.wepKey0, "wep-key0", settingsMap)
3852  UPDATE_STRING_SETTING_IF_VALID(wiFiConnection->securitySettings.wepKey1, "wep-key1", settingsMap)
3853  UPDATE_STRING_SETTING_IF_VALID(wiFiConnection->securitySettings.wepKey2, "wep-key2", settingsMap)
3854  UPDATE_STRING_SETTING_IF_VALID(wiFiConnection->securitySettings.wepKey3, "wep-key3", settingsMap)
3855  UPDATE_STRING_SETTING_IF_VALID(wiFiConnection->securitySettings.psk, "psk", settingsMap)
3856  UPDATE_STRING_SETTING_IF_VALID(wiFiConnection->securitySettings.leapPassword, "leap-password", settingsMap)
3857  }
3858  else {
3859  settingsMap.remove("wep-key0");
3860  settingsMap.remove("wep-key1");
3861  settingsMap.remove("wep-key2");
3862  settingsMap.remove("wep-key3");
3863  settingsMap.remove("psk");
3864  settingsMap.remove("leap-password");
3865  }
3866  }
3867  else {
3868  settingsMap.remove("key-mgmt");
3869  settingsMap.remove("wep-tx-keyidx");
3870  settingsMap.remove("auth-alg");
3871  settingsMap.remove("proto");
3872  settingsMap.remove("pairwise");
3873  settingsMap.remove("group");
3874  settingsMap.remove("leap-username");
3875  settingsMap.remove("wep-key-flags");
3876  settingsMap.remove("wep-key-type");
3877  settingsMap.remove("psk-flags");
3878  settingsMap.remove("leap-password-flags");
3879  settingsMap.remove("wep-key0");
3880  settingsMap.remove("wep-key1");
3881  settingsMap.remove("wep-key2");
3882  settingsMap.remove("wep-key3");
3883  settingsMap.remove("psk");
3884  settingsMap.remove("leap-password");
3885  }
3886  }
3887  dbusData = TQT_DBusData::fromStringKeyMap(TQT_DBusDataMap<TQString>(settingsMap));
3888  groupValid = (settingsMap.count() > 0);
3889  }
3890  if (groupValid) outerMap.insert("802-11-wireless-security", dbusData, true); else outerMap.remove("802-11-wireless-security");
3891 
3892  groupValid = false;
3893  dbusData = outerMap["vpn"];
3894  if (vpnConnection) {
3895  TQMap<TQString, TQT_DBusData> settingsMap = dbusData.toStringKeyMap().toTQMap();
3896  {
3897  {
3898  TQString pluginService = vpnConnection->vpnPluginID;
3899  if (pluginService != "") {
3900  pluginService = "org.freedesktop.NetworkManager." + pluginService;
3901  }
3902  UPDATE_STRING_SETTING_IF_VALID(pluginService, "service-type", settingsMap)
3903  }
3904  UPDATE_STRING_SETTING_IF_VALID(vpnConnection->lockedUserName, "user-name", settingsMap)
3905  {
3906  TQMap<TQString, TQT_DBusData> nestedConnectionSettingsMap;
3907  TDENetworkSettingsMap::const_iterator it;
3908  for (it = vpnConnection->pluginData.begin(); it != vpnConnection->pluginData.end(); ++it) {
3909  nestedConnectionSettingsMap[it.key()] = TQT_DBusData::fromString(it.data());
3910  }
3911  if (nestedConnectionSettingsMap.count() > 0) settingsMap["data"] = (TQT_DBusData::fromStringKeyMap(TQT_DBusDataMap<TQString>(nestedConnectionSettingsMap))).getAsVariantData();
3912  else settingsMap.remove("data");
3913  }
3914  if (vpnConnection->secretsValid) {
3915  TQMap<TQString, TQT_DBusData> nestedConnectionSettingsMap;
3916  TDENetworkSettingsMap::const_iterator it;
3917  for (it = vpnConnection->pluginSecrets.begin(); it != vpnConnection->pluginSecrets.end(); ++it) {
3918  nestedConnectionSettingsMap[it.key()] = TQT_DBusData::fromString(it.data());
3919  }
3920  if (nestedConnectionSettingsMap.count() > 0) settingsMap["secrets"] = (TQT_DBusData::fromStringKeyMap(TQT_DBusDataMap<TQString>(nestedConnectionSettingsMap))).getAsVariantData();
3921  else settingsMap.remove("secrets");
3922  }
3923  }
3924  dbusData = TQT_DBusData::fromStringKeyMap(TQT_DBusDataMap<TQString>(settingsMap));
3925  groupValid = (settingsMap.count() > 0);
3926  }
3927  if (groupValid) outerMap.insert("vpn", dbusData, true); else outerMap.remove("vpn");
3928 
3929  groupValid = false;
3930  dbusData = outerMap["wimax"];
3931  if (wiMaxConnection) {
3932  TQMap<TQString, TQT_DBusData> settingsMap = dbusData.toStringKeyMap().toTQMap();
3933  {
3934  if (connection->lockedHWAddress.isValid()) {
3935  TDENetworkByteList address = connection->lockedHWAddress.address();
3936  TQT_DBusDataValueList valueList;
3937  TDENetworkByteList::iterator it;
3938  for (it = address.begin(); it != address.end(); ++it) {
3939  TQT_DBusData innerDataValue = TQT_DBusData::fromByte(*it);
3940  valueList.append(innerDataValue);
3941  }
3942  TQT_DBusData nmHWAddress = TQT_DBusData::fromTQValueList(valueList);
3943  settingsMap["mac-address"] = (nmHWAddress).getAsVariantData();
3944  }
3945  else {
3946  settingsMap.remove("mac-address");
3947  }
3948  UPDATE_STRING_SETTING_IF_VALID(wiMaxConnection->networkServiceProvider, "network-name", settingsMap)
3949  }
3950  dbusData = TQT_DBusData::fromStringKeyMap(TQT_DBusDataMap<TQString>(settingsMap));
3951  groupValid = (settingsMap.count() > 0);
3952  }
3953  if (groupValid) outerMap.insert("wimax", dbusData, true); else outerMap.remove("wimax");
3954 
3955  groupValid = false;
3956  dbusData = outerMap["vlan"];
3957  if (vlanConnection) {
3958  TQMap<TQString, TQT_DBusData> settingsMap = dbusData.toStringKeyMap().toTQMap();
3959  {
3960  UPDATE_STRING_SETTING_IF_VALID(vlanConnection->kernelName, "interface-name", settingsMap)
3961  UPDATE_STRING_SETTING_IF_VALID(vlanConnection->parentConnectionUUID, "parent", settingsMap)
3962  settingsMap["id"] = (TQT_DBusData::fromUInt32(vlanConnection->vlanID)).getAsVariantData();
3963  settingsMap["flags"] = (TQT_DBusData::fromUInt32(tdeVLANFlagsToNMVLANFlags(vlanConnection->vlanFlags))).getAsVariantData();
3964  {
3965  TQT_DBusDataValueList valueList;
3966  TDENetworkPriorityMap::const_iterator it;
3967  for (it = vlanConnection->ingressPriorityMap.begin(); it != vlanConnection->ingressPriorityMap.end(); ++it) {
3968  valueList.append(TQT_DBusData::fromString(TQString("%1:%2").arg(it.key()).arg(it.data())));
3969  }
3970  if (valueList.count() > 0) settingsMap["ingress-priority-map"] = (TQT_DBusData::fromTQValueList(valueList)).getAsVariantData();
3971  }
3972  {
3973  TQT_DBusDataValueList valueList;
3974  TDENetworkPriorityMap::const_iterator it;
3975  for (it = vlanConnection->egressPriorityMap.begin(); it != vlanConnection->egressPriorityMap.end(); ++it) {
3976  valueList.append(TQT_DBusData::fromString(TQString("%1:%2").arg(it.key()).arg(it.data())));
3977  }
3978  if (valueList.count() > 0) settingsMap["egress-priority-map"] = (TQT_DBusData::fromTQValueList(valueList)).getAsVariantData();
3979  }
3980  }
3981  dbusData = TQT_DBusData::fromStringKeyMap(TQT_DBusDataMap<TQString>(settingsMap));
3982  groupValid = (settingsMap.count() > 0);
3983  }
3984  if (groupValid) outerMap.insert("vlan", dbusData, true); else outerMap.remove("vlan");
3985 
3986  groupValid = false;
3987  dbusData = outerMap["serial"];
3988  if (connection->serialConfig.valid) {
3989  TQMap<TQString, TQT_DBusData> settingsMap = dbusData.toStringKeyMap().toTQMap();
3990  {
3991  settingsMap["baud"] = (TQT_DBusData::fromUInt32(connection->serialConfig.baudRate)).getAsVariantData();
3992  settingsMap["bits"] = (TQT_DBusData::fromUInt32(connection->serialConfig.byteWidth)).getAsVariantData();
3993  settingsMap["parity"] = (TQT_DBusData::fromByte(tdeParityToNMParity(connection->serialConfig.parity))).getAsVariantData();
3994  settingsMap["stopbits"] = (TQT_DBusData::fromUInt32(connection->serialConfig.stopBits)).getAsVariantData();
3995  settingsMap["send-delay"] = (TQT_DBusData::fromUInt64(connection->serialConfig.txDelay)).getAsVariantData();
3996  }
3997  dbusData = TQT_DBusData::fromStringKeyMap(TQT_DBusDataMap<TQString>(settingsMap));
3998  groupValid = (settingsMap.count() > 0);
3999  }
4000  if (groupValid) outerMap.insert("serial", dbusData, true); else outerMap.remove("serial");
4001 
4002  groupValid = false;
4003  dbusData = outerMap["ppp"];
4004  if (connection->pppConfig.valid) {
4005  TQMap<TQString, TQT_DBusData> settingsMap = dbusData.toStringKeyMap().toTQMap();
4006  {
4007  settingsMap["noauth"] = (TQT_DBusData::fromBool(!(connection->pppConfig.requireServerAuthentication))).getAsVariantData();
4008  settingsMap["refuse-eap"] = (TQT_DBusData::fromBool(connection->pppConfig.flags & TDENetworkPPPFlags::DisableEAP)).getAsVariantData();
4009  settingsMap["refuse-pap"] = (TQT_DBusData::fromBool(connection->pppConfig.flags & TDENetworkPPPFlags::DisablePAP)).getAsVariantData();
4010  settingsMap["refuse-chap"] = (TQT_DBusData::fromBool(connection->pppConfig.flags & TDENetworkPPPFlags::DisableCHAP)).getAsVariantData();
4011  settingsMap["refuse-mschap"] = (TQT_DBusData::fromBool(connection->pppConfig.flags & TDENetworkPPPFlags::DisableMSCHAP)).getAsVariantData();
4012  settingsMap["refuse-mschapv2"] = (TQT_DBusData::fromBool(connection->pppConfig.flags & TDENetworkPPPFlags::DisableMSCHAPv2)).getAsVariantData();
4013  settingsMap["nobsdcomp"] = (TQT_DBusData::fromBool(!(connection->pppConfig.flags & TDENetworkPPPFlags::AllowBSDCompression))).getAsVariantData();
4014  settingsMap["nodeflate"] = (TQT_DBusData::fromBool(!(connection->pppConfig.flags & TDENetworkPPPFlags::AllowDeflateCompression))).getAsVariantData();
4015  settingsMap["no-vj-comp"] = (TQT_DBusData::fromBool(!(connection->pppConfig.flags & TDENetworkPPPFlags::AllowVJCompression))).getAsVariantData();
4016  settingsMap["require-mppe"] = (TQT_DBusData::fromBool(connection->pppConfig.flags & TDENetworkPPPFlags::RequireMPPE)).getAsVariantData();
4017  settingsMap["require-mppe-128"] = (TQT_DBusData::fromBool(connection->pppConfig.flags & TDENetworkPPPFlags::RequireMPPE128)).getAsVariantData();
4018  settingsMap["mppe-stateful"] = (TQT_DBusData::fromBool(connection->pppConfig.flags & TDENetworkPPPFlags::StatefulMPPE)).getAsVariantData();
4019  settingsMap["crtscts"] = (TQT_DBusData::fromBool(connection->pppConfig.flags & TDENetworkPPPFlags::UseHardwareFlowControl)).getAsVariantData();
4020  settingsMap["baud"] = (TQT_DBusData::fromUInt32(connection->pppConfig.baudRate)).getAsVariantData();
4021  if (connection->pppConfig.mru > 0) {
4022  settingsMap["mru"] = (TQT_DBusData::fromUInt32(connection->pppConfig.mru)).getAsVariantData();
4023  }
4024  else {
4025  settingsMap.remove("mru");
4026  }
4027  if (connection->pppConfig.mtu > 0) {
4028  settingsMap["mtu"] = (TQT_DBusData::fromUInt32(connection->pppConfig.mtu)).getAsVariantData();
4029  }
4030  else {
4031  settingsMap.remove("mtu");
4032  }
4033  if (connection->pppConfig.mtu > 0) {
4034  settingsMap["lcp-echo-interval"] = (TQT_DBusData::fromUInt32(connection->pppConfig.lcpEchoPingInterval)).getAsVariantData();
4035  }
4036  else {
4037  settingsMap.remove("lcp-echo-interval");
4038  }
4039  if (connection->pppConfig.mtu > 0) {
4040  settingsMap["lcp-echo-failure"] = (TQT_DBusData::fromUInt32(connection->pppConfig.lcpEchoFailureThreshold)).getAsVariantData();
4041  }
4042  else {
4043  settingsMap.remove("lcp-echo-failure");
4044  }
4045  }
4046  dbusData = TQT_DBusData::fromStringKeyMap(TQT_DBusDataMap<TQString>(settingsMap));
4047  groupValid = (settingsMap.count() > 0);
4048  }
4049  if (groupValid) outerMap.insert("ppp", dbusData, true); else outerMap.remove("ppp");
4050 
4051  groupValid = false;
4052  dbusData = outerMap["pppoe"];
4053  if (connection->pppoeConfig.valid) {
4054  TQMap<TQString, TQT_DBusData> settingsMap = dbusData.toStringKeyMap().toTQMap();
4055  {
4056  UPDATE_STRING_SETTING_IF_VALID(connection->pppoeConfig.networkServiceProvider, "service", settingsMap)
4057  UPDATE_STRING_SETTING_IF_VALID(connection->pppoeConfig.username, "username", settingsMap)
4058  if (connection->pppoeConfig.secretsValid) {
4059  UPDATE_STRING_SETTING_IF_VALID(connection->pppoeConfig.password, "password", settingsMap)
4060  }
4061  settingsMap["password-flags"] = (TQT_DBusData::fromUInt32(tdePasswordFlagsToNMPasswordFlags(connection->pppoeConfig.passwordFlags))).getAsVariantData();
4062  }
4063  dbusData = TQT_DBusData::fromStringKeyMap(TQT_DBusDataMap<TQString>(settingsMap));
4064  groupValid = (settingsMap.count() > 0);
4065  }
4066  if (groupValid) outerMap.insert("pppoe", dbusData, true); else outerMap.remove("pppoe");
4067 
4068  groupValid = false;
4069  dbusData = outerMap["802-11-olpc-mesh"];
4070  if (olpcMeshConnection) {
4071  TQMap<TQString, TQT_DBusData> settingsMap = dbusData.toStringKeyMap().toTQMap();
4072  {
4073  {
4074  unsigned int i;
4075  TQT_DBusDataValueList valueList;
4076  for (i=0; i<olpcMeshConnection->SSID.count(); i++) {
4077  TQT_DBusData innerDataValue = TQT_DBusData::fromByte(olpcMeshConnection->SSID[i]);
4078  valueList.append(innerDataValue);
4079  }
4080  settingsMap["ssid"] = (TQT_DBusData::fromTQValueList(valueList)).getAsVariantData();
4081  }
4082  settingsMap["channel"] = (TQT_DBusData::fromUInt32(olpcMeshConnection->channel)).getAsVariantData();
4083  {
4084  unsigned int i;
4085  TQT_DBusDataValueList valueList;
4086  for (i=0; i<olpcMeshConnection->anycastDHCPHWAddress.count(); i++) {
4087  TQT_DBusData innerDataValue = TQT_DBusData::fromByte(olpcMeshConnection->anycastDHCPHWAddress[i]);
4088  valueList.append(innerDataValue);
4089  }
4090  settingsMap["dhcp-anycast-address"] = (TQT_DBusData::fromTQValueList(valueList)).getAsVariantData();
4091  }
4092  }
4093  dbusData = TQT_DBusData::fromStringKeyMap(TQT_DBusDataMap<TQString>(settingsMap));
4094  groupValid = (settingsMap.count() > 0);
4095  }
4096  if (groupValid) outerMap.insert("802-11-olpc-mesh", dbusData, true); else outerMap.remove("802-11-olpc-mesh");
4097 
4098  groupValid = false;
4099  dbusData = outerMap["bluetooth"];
4100  if (bluetoothConnection) {
4101  TQMap<TQString, TQT_DBusData> settingsMap = dbusData.toStringKeyMap().toTQMap();
4102  {
4103  if (connection->lockedHWAddress.isValid()) {
4104  TDENetworkByteList address = connection->lockedHWAddress.address();
4105  TQT_DBusDataValueList valueList;
4106  TDENetworkByteList::iterator it;
4107  for (it = address.begin(); it != address.end(); ++it) {
4108  TQT_DBusData innerDataValue = TQT_DBusData::fromByte(*it);
4109  valueList.append(innerDataValue);
4110  }
4111  TQT_DBusData nmHWAddress = TQT_DBusData::fromTQValueList(valueList);
4112  settingsMap["bdaddr"] = (nmHWAddress).getAsVariantData();
4113  }
4114  else {
4115  settingsMap.remove("bdaddr");
4116  }
4117  UPDATE_STRING_SETTING_IF_VALID(tdeBluetoothModeToNMBluetoothMode(bluetoothConnection->type), "type", settingsMap)
4118  }
4119  dbusData = TQT_DBusData::fromStringKeyMap(TQT_DBusDataMap<TQString>(settingsMap));
4120  groupValid = (settingsMap.count() > 0);
4121  }
4122  if (groupValid) outerMap.insert("bluetooth", dbusData, true); else outerMap.remove("bluetooth");
4123 
4124  groupValid = false;
4125  dbusData = outerMap["cdma"];
4126  if ((modemConnection) && (modemConnection->type == TDEModemConnectionType::CDMA)) {
4127  TQMap<TQString, TQT_DBusData> settingsMap = dbusData.toStringKeyMap().toTQMap();
4128  {
4129  UPDATE_STRING_SETTING_IF_VALID(modemConnection->cdmaConfig.providerDataNumber, "number", settingsMap)
4130  UPDATE_STRING_SETTING_IF_VALID(modemConnection->cdmaConfig.username, "username", settingsMap)
4131  if (connection->pppoeConfig.secretsValid) {
4132  UPDATE_STRING_SETTING_IF_VALID(modemConnection->cdmaConfig.password, "password", settingsMap)
4133  }
4134  settingsMap["password-flags"] = (TQT_DBusData::fromUInt32(tdePasswordFlagsToNMPasswordFlags(modemConnection->cdmaConfig.passwordFlags))).getAsVariantData();
4135  }
4136  dbusData = TQT_DBusData::fromStringKeyMap(TQT_DBusDataMap<TQString>(settingsMap));
4137  groupValid = (settingsMap.count() > 0);
4138  }
4139  if (groupValid) outerMap.insert("cdma", dbusData, true); else outerMap.remove("cdma");
4140 
4141  groupValid = false;
4142  dbusData = outerMap["gsm"];
4143  if ((modemConnection) && (modemConnection->type == TDEModemConnectionType::GSM)) {
4144  TQMap<TQString, TQT_DBusData> settingsMap = dbusData.toStringKeyMap().toTQMap();
4145  {
4146  UPDATE_STRING_SETTING_IF_VALID(modemConnection->gsmConfig.providerDataNumber, "number", settingsMap)
4147  UPDATE_STRING_SETTING_IF_VALID(modemConnection->gsmConfig.username, "username", settingsMap)
4148  if (connection->pppoeConfig.secretsValid) {
4149  UPDATE_STRING_SETTING_IF_VALID(modemConnection->gsmConfig.password, "password", settingsMap)
4150  }
4151  settingsMap["password-flags"] = (TQT_DBusData::fromUInt32(tdePasswordFlagsToNMPasswordFlags(modemConnection->gsmConfig.passwordFlags))).getAsVariantData();
4152  UPDATE_STRING_SETTING_IF_VALID(modemConnection->gsmConfig.accessPointName, "apn", settingsMap)
4153  UPDATE_STRING_SETTING_IF_VALID(modemConnection->gsmConfig.networkID, "network-id", settingsMap)
4154  settingsMap["network-type"] = (TQT_DBusData::fromInt32(tdeGSMModeToNMGSMMode(modemConnection->gsmConfig.networkType))).getAsVariantData();
4155  if (connection->pppoeConfig.secretsValid) {
4156  UPDATE_STRING_SETTING_IF_VALID(modemConnection->gsmConfig.pin, "pin", settingsMap)
4157  }
4158  settingsMap["pin-flags"] = (TQT_DBusData::fromUInt32(tdePasswordFlagsToNMPasswordFlags(modemConnection->gsmConfig.pinFlags))).getAsVariantData();
4159  settingsMap["allowed-bands"] = (TQT_DBusData::fromUInt32(modemConnection->gsmConfig.allowedFrequencyBands)).getAsVariantData();
4160  settingsMap["home-only"] = (TQT_DBusData::fromBool(!(modemConnection->gsmConfig.allowRoaming))).getAsVariantData();
4161  }
4162  dbusData = TQT_DBusData::fromStringKeyMap(TQT_DBusDataMap<TQString>(settingsMap));
4163  groupValid = (settingsMap.count() > 0);
4164  }
4165  if (groupValid) outerMap.insert("gsm", dbusData, true); else outerMap.remove("gsm");
4166 
4167  groupValid = false;
4168  dbusData = outerMap["ipv4"];
4169  {
4170  TQMap<TQString, TQT_DBusData> settingsMap = dbusData.toStringKeyMap().toTQMap();
4171  {
4172  {
4173  TQT_DBusDataValueList valueList;
4174  TDENetworkSingleIPConfigurationList::iterator it;
4175  for (it = connection->ipConfig.ipConfigurations.begin(); it != connection->ipConfig.ipConfigurations.end(); ++it) {
4176  if ((*it).isIPv4()) {
4177  TQT_DBusDataValueList innerValueList;
4178  // WARNING: The exact order of the data in the list is critical, therefore extreme caution should be exercised when modifying the code below!
4179  // Address
4180  innerValueList.append(TQT_DBusData::fromUInt32(reverseIPV4ByteOrder((*it).ipAddress.toIPv4Address())));
4181  // Netmask
4182  innerValueList.append(TQT_DBusData::fromUInt32((*it).networkMask.toCIDRMask()));
4183  // Gateway
4184  innerValueList.append(TQT_DBusData::fromUInt32(reverseIPV4ByteOrder((*it).gateway.toIPv4Address())));
4185  valueList.append(TQT_DBusData::fromTQValueList(innerValueList));
4186  }
4187  }
4188  if (valueList.count() <= 0) {
4189  // Create an empty list with the correct DBUS type structure
4190  TQT_DBusData valueList;
4191  valueList = TQT_DBusData::fromList(TQT_DBusDataList(TQT_DBusData::UInt32));
4192  settingsMap["addresses"] = (TQT_DBusData::fromList(TQT_DBusDataList(valueList))).getAsVariantData();
4193  }
4194  else {
4195  settingsMap["addresses"] = (TQT_DBusData::fromTQValueList(valueList)).getAsVariantData();
4196  }
4197  }
4198  {
4199  if (!connection->ipConfig.dhcpClientIdentifier.isNull()) {
4200  settingsMap["dhcp-client-id"] = (TQT_DBusData::fromString(connection->ipConfig.dhcpClientIdentifier)).getAsVariantData();
4201  }
4202  }
4203  {
4204  TQT_DBusDataValueList valueList;
4205  TDENetworkAddressList::iterator it;
4206  for (it = connection->ipConfig.resolvers.begin(); it != connection->ipConfig.resolvers.end(); ++it) {
4207  if ((*it).isIPv4Address()) {
4208  valueList.append(TQT_DBusData::fromUInt32(reverseIPV4ByteOrder((*it).toIPv4Address())));
4209  }
4210  }
4211  if (valueList.count() <= 0) {
4212  // Create an empty list with the correct DBUS type structure
4213  settingsMap["dns"] = (TQT_DBusData::fromList(TQT_DBusDataList(TQT_DBusData::UInt32))).getAsVariantData();
4214  }
4215  else {
4216  settingsMap["dns"] = (TQT_DBusData::fromTQValueList(valueList)).getAsVariantData();
4217  }
4218  }
4219  {
4220  TQT_DBusDataValueList valueList;
4221  TDENetworkSearchDomainList::iterator it;
4222  for (it = connection->ipConfig.searchDomains.begin(); it != connection->ipConfig.searchDomains.end(); ++it) {
4223  if ((*it).isIPv4()) {
4224  valueList.append(TQT_DBusData::fromString((*it).searchDomain()));
4225  }
4226  }
4227  if (valueList.count() > 0) settingsMap["dns-search"] = (TQT_DBusData::fromTQValueList(valueList)).getAsVariantData();
4228  }
4229  {
4230  settingsMap["ignore-auto-dns"] = (TQT_DBusData::fromBool(!(connection->ipConfig.connectionFlags & TDENetworkIPConfigurationFlags::IPV4DHCPDNS))).getAsVariantData();
4231  }
4232  {
4233  settingsMap["may-fail"] = (TQT_DBusData::fromBool(!connection->requireIPV4)).getAsVariantData();
4234  }
4235  {
4236  TQString method;
4237  if (connection->ipConfig.connectionFlags & TDENetworkIPConfigurationFlags::IPV4DHCPIP) {
4238  method = "auto";
4239  }
4240  else if (connection->ipConfig.connectionFlags & TDENetworkIPConfigurationFlags::IPV4LocalOnly) {
4241  method = "link-local";
4242  }
4243  else if (connection->ipConfig.connectionFlags & TDENetworkIPConfigurationFlags::IPV4StartConnectionSharingServer) {
4244  method = "shared";
4245  }
4246  else if (connection->ipConfig.connectionFlags & TDENetworkIPConfigurationFlags::IPV4Disabled) {
4247  method = "disabled";
4248  }
4249  else {
4250  method = "manual";
4251  }
4252  if (!method.isNull())
4253  settingsMap["method"] = (TQT_DBusData::fromString(method)).getAsVariantData();
4254  }
4255  {
4256  settingsMap["ignore-auto-routes"] = (TQT_DBusData::fromBool(!(connection->ipConfig.connectionFlags & TDENetworkIPConfigurationFlags::IPV4DHCPRoutes))).getAsVariantData();
4257  }
4258  {
4259  settingsMap["never-default"] = (TQT_DBusData::fromBool(!(connection->ipConfig.connectionFlags & TDENetworkIPConfigurationFlags::IPV4MayUseAsDefaultRoute))).getAsVariantData();
4260  }
4261  {
4262  TQT_DBusDataValueList valueList;
4263  TDENetworkSingleRouteConfigurationList::iterator it;
4264  for (it = connection->ipConfig.routeConfigurations.begin(); it != connection->ipConfig.routeConfigurations.end(); ++it) {
4265  if ((*it).isIPv4()) {
4266  TQT_DBusDataValueList innerValueList;
4267  // WARNING: The exact order of the data in the list is critical, therefore extreme caution should be exercised when modifying the code below!
4268  // Address
4269  innerValueList.append(TQT_DBusData::fromUInt32(reverseIPV4ByteOrder((*it).ipAddress.toIPv4Address())));
4270  // Netmask
4271  innerValueList.append(TQT_DBusData::fromUInt32((*it).networkMask.toCIDRMask()));
4272  // Gateway
4273  innerValueList.append(TQT_DBusData::fromUInt32(reverseIPV4ByteOrder((*it).gateway.toIPv4Address())));
4274  // Metric
4275  innerValueList.append(TQT_DBusData::fromUInt32((*it).metric));
4276  valueList.append(TQT_DBusData::fromTQValueList(innerValueList));
4277  }
4278  }
4279  if (valueList.count() <= 0) {
4280  // Create an empty list with the correct DBUS type structure
4281  TQT_DBusData valueList;
4282  valueList = TQT_DBusData::fromList(TQT_DBusDataList(TQT_DBusData::UInt32));
4283  settingsMap["routes"] = (TQT_DBusData::fromList(TQT_DBusDataList(valueList))).getAsVariantData();
4284  }
4285  else {
4286  settingsMap["routes"] = (TQT_DBusData::fromTQValueList(valueList)).getAsVariantData();
4287  }
4288  }
4289  }
4290  dbusData = TQT_DBusData::fromStringKeyMap(TQT_DBusDataMap<TQString>(settingsMap));
4291  groupValid = (settingsMap.count() > 0);
4292  }
4293  if (groupValid) outerMap.insert("ipv4", dbusData, true); else outerMap.remove("ipv4");
4294 
4295  groupValid = false;
4296  dbusData = outerMap["ipv6"];
4297  {
4298  TQMap<TQString, TQT_DBusData> settingsMap = dbusData.toStringKeyMap().toTQMap();
4299  {
4300  {
4301  TQT_DBusDataValueList valueList;
4302  TDENetworkSingleIPConfigurationList::iterator it;
4303  for (it = connection->ipConfig.ipConfigurations.begin(); it != connection->ipConfig.ipConfigurations.end(); ++it) {
4304  if ((*it).isIPv6()) {
4305  int i;
4306  Q_IPV6ADDR v6address;
4307  TQT_DBusDataValueList innerValueList;
4308  TQT_DBusDataValueList innerMostValueList;
4309  // WARNING: The exact order of the data in the list is critical, therefore extreme caution should be exercised when modifying the code below!
4310  // Address
4311  innerMostValueList.clear();
4312  v6address = (*it).ipAddress.toIPv6Address();
4313  for (i=0; i<16; i++) {
4314  innerMostValueList.append(TQT_DBusData::fromByte(v6address.c[i]));
4315  }
4316  innerValueList.append(TQT_DBusData::fromTQValueList(innerMostValueList));
4317  // Netmask
4318  innerValueList.append(TQT_DBusData::fromUInt32((*it).networkMask.toCIDRMask()));
4319  // Gateway
4320  innerMostValueList.clear();
4321  v6address = (*it).gateway.toIPv6Address();
4322  for (i=0; i<16; i++) {
4323  innerMostValueList.append(TQT_DBusData::fromByte(v6address.c[i]));
4324  }
4325  innerValueList.append(TQT_DBusData::fromTQValueList(innerMostValueList));
4326  valueList.append(TQT_DBusData::fromStruct(innerValueList));
4327  }
4328  }
4329  if (valueList.count() <= 0) {
4330  // Create an empty list with the correct DBUS type structure
4331  TQT_DBusDataValueList innerValueList;
4332  TQT_DBusDataValueList innerMostValueList;
4333  // WARNING: The exact order of the data in the list is critical, therefore extreme caution should be exercised when modifying the code below!
4334  // Address
4335  innerMostValueList.clear();
4336  innerMostValueList.append(TQT_DBusData::fromByte(0));
4337  innerValueList.append(TQT_DBusData::fromTQValueList(innerMostValueList));
4338  // Netmask
4339  innerValueList.append(TQT_DBusData::fromUInt32(0));
4340  // Gateway
4341  innerMostValueList.clear();
4342  innerMostValueList.append(TQT_DBusData::fromByte(0));
4343  innerValueList.append(TQT_DBusData::fromTQValueList(innerMostValueList));
4344  settingsMap["addresses"] = (TQT_DBusData::fromList(TQT_DBusDataList(TQT_DBusData::fromStruct(innerValueList)))).getAsVariantData();
4345  }
4346  else {
4347  settingsMap["addresses"] = (TQT_DBusData::fromTQValueList(valueList)).getAsVariantData();
4348  }
4349  }
4350  {
4351  TQT_DBusDataValueList valueList;
4352  TDENetworkAddressList::iterator it;
4353  for (it = connection->ipConfig.resolvers.begin(); it != connection->ipConfig.resolvers.end(); ++it) {
4354  if ((*it).isIPv6Address()) {
4355  int i;
4356  Q_IPV6ADDR v6address;
4357  TQT_DBusDataValueList innerValueList;
4358  v6address = (*it).toIPv6Address();
4359  for (i=0; i<16; i++) {
4360  innerValueList.append(TQT_DBusData::fromByte(v6address.c[i]));
4361  }
4362  valueList.append(TQT_DBusData::fromTQValueList(innerValueList));
4363  }
4364  }
4365  if (valueList.count() <= 0) {
4366  // Create an empty list with the correct DBUS type structure
4367  TQT_DBusData valueList;
4368  valueList = TQT_DBusData::fromList(TQT_DBusDataList(TQT_DBusData::Byte));
4369  settingsMap["dns"] = (TQT_DBusData::fromList(TQT_DBusDataList(valueList))).getAsVariantData();
4370  }
4371  else {
4372  settingsMap["dns"] = (TQT_DBusData::fromTQValueList(valueList)).getAsVariantData();
4373  }
4374  }
4375  {
4376  TQT_DBusDataValueList valueList;
4377  TDENetworkSearchDomainList::iterator it;
4378  for (it = connection->ipConfig.searchDomains.begin(); it != connection->ipConfig.searchDomains.end(); ++it) {
4379  if ((*it).isIPv6()) {
4380  valueList.append(TQT_DBusData::fromString((*it).searchDomain()));
4381  }
4382  }
4383  if (valueList.count() > 0) settingsMap["dns-search"] = (TQT_DBusData::fromTQValueList(valueList)).getAsVariantData();
4384  }
4385  {
4386  settingsMap["ignore-auto-dns"] = (TQT_DBusData::fromBool(!(connection->ipConfig.connectionFlags & TDENetworkIPConfigurationFlags::IPV4DHCPDNS))).getAsVariantData();
4387  }
4388  {
4389  settingsMap["may-fail"] = (TQT_DBusData::fromBool(!connection->requireIPV6)).getAsVariantData();
4390  }
4391  {
4392  TQString method;
4393  if (connection->ipConfig.connectionFlags & TDENetworkIPConfigurationFlags::IPV6DHCPIP) {
4394  method = "auto";
4395  }
4396  else if (connection->ipConfig.connectionFlags & TDENetworkIPConfigurationFlags::IPV6LocalOnly) {
4397  method = "link-local";
4398  }
4399  else if (connection->ipConfig.connectionFlags & TDENetworkIPConfigurationFlags::IPV6StartConnectionSharingServer) {
4400  method = "shared";
4401  }
4402  else if (connection->ipConfig.connectionFlags & TDENetworkIPConfigurationFlags::IPV6Disabled) {
4403  method = "ignore";
4404  }
4405  else {
4406  method = "manual";
4407  }
4408  if (!method.isNull())
4409  settingsMap["method"] = (TQT_DBusData::fromString(method)).getAsVariantData();
4410  }
4411  {
4412  settingsMap["ignore-auto-routes"] = (TQT_DBusData::fromBool(!(connection->ipConfig.connectionFlags & TDENetworkIPConfigurationFlags::IPV6DHCPRoutes))).getAsVariantData();
4413  }
4414  {
4415  settingsMap["never-default"] = (TQT_DBusData::fromBool(!(connection->ipConfig.connectionFlags & TDENetworkIPConfigurationFlags::IPV6MayUseAsDefaultRoute))).getAsVariantData();
4416  }
4417  {
4418  TQT_DBusDataValueList valueList;
4419  TDENetworkSingleRouteConfigurationList::iterator it;
4420  for (it = connection->ipConfig.routeConfigurations.begin(); it != connection->ipConfig.routeConfigurations.end(); ++it) {
4421  if ((*it).isIPv6()) {
4422  int i;
4423  Q_IPV6ADDR v6address;
4424  TQT_DBusDataValueList innerValueList;
4425  TQT_DBusDataValueList innerMostValueList;
4426  // WARNING: The exact order of the data in the list is critical, therefore extreme caution should be exercised when modifying the code below!
4427  // Address
4428  innerMostValueList.clear();
4429  v6address = (*it).ipAddress.toIPv6Address();
4430  for (i=0; i<16; i++) {
4431  innerMostValueList.append(TQT_DBusData::fromByte(v6address.c[i]));
4432  }
4433  innerValueList.append(TQT_DBusData::fromTQValueList(innerMostValueList));
4434  // Netmask
4435  innerValueList.append(TQT_DBusData::fromUInt32((*it).networkMask.toCIDRMask()));
4436  // Gateway
4437  innerMostValueList.clear();
4438  v6address = (*it).gateway.toIPv6Address();
4439  for (i=0; i<16; i++) {
4440  innerMostValueList.append(TQT_DBusData::fromByte(v6address.c[i]));
4441  }
4442  innerValueList.append(TQT_DBusData::fromTQValueList(innerMostValueList));
4443  // Metric
4444  innerValueList.append(TQT_DBusData::fromUInt32((*it).metric));
4445  valueList.append(TQT_DBusData::fromStruct(innerValueList));
4446  }
4447  }
4448  if (valueList.count() <= 0) {
4449  // Create an empty list with the correct DBUS type structure
4450  TQT_DBusDataValueList innerValueList;
4451  TQT_DBusDataValueList innerMostValueList;
4452  // WARNING: The exact order of the data in the list is critical, therefore extreme caution should be exercised when modifying the code below!
4453  // Address
4454  innerMostValueList.clear();
4455  innerMostValueList.append(TQT_DBusData::fromByte(0));
4456  innerValueList.append(TQT_DBusData::fromTQValueList(innerMostValueList));
4457  // Netmask
4458  innerValueList.append(TQT_DBusData::fromUInt32(0));
4459  // Gateway
4460  innerMostValueList.clear();
4461  innerMostValueList.append(TQT_DBusData::fromByte(0));
4462  innerValueList.append(TQT_DBusData::fromTQValueList(innerMostValueList));
4463  // Metric
4464  innerValueList.append(TQT_DBusData::fromUInt32(0));
4465  settingsMap["routes"] = (TQT_DBusData::fromList(TQT_DBusDataList(TQT_DBusData::fromStruct(innerValueList)))).getAsVariantData();
4466  }
4467  else {
4468  settingsMap["routes"] = (TQT_DBusData::fromTQValueList(valueList)).getAsVariantData();
4469  }
4470  }
4471  }
4472  dbusData = TQT_DBusData::fromStringKeyMap(TQT_DBusDataMap<TQString>(settingsMap));
4473  groupValid = (settingsMap.count() > 0);
4474  }
4475  if (groupValid) outerMap.insert("ipv6", dbusData, true); else outerMap.remove("ipv6");
4476  }
4477  connectionSettingsMap = TQT_DBusDataMap<TQString>(outerMap);
4478 
4479  // If existing==true, a connection already existed and simply needs to be updated
4480  // If existing==false, a new connection must be created
4481  // 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);'
4482  // To create new: Use 'd->m_networkManagerSettings' and call 'virtual bool AddConnectionAsync(int& asyncCallId, const TQT_DBusDataMap<TQString>& connection, TQT_DBusError& error);'
4483 
4484 #ifdef DEBUG_NETWORK_MANAGER_COMMUNICATIONS
4485  printf("[network-manager comm debug] uploaded DBUS object structure map follows:\n"); fflush(stdout);
4486  printDBUSObjectStructure(TQT_DBusData::fromStringKeyMap(connectionSettingsMap));
4487 #endif // DEBUG_NETWORK_MANAGER_COMMUNICATIONS
4488 
4489  if (existing) {
4490 #ifdef DEBUG_NETWORK_MANAGER_COMMUNICATIONS
4491  printf("[network-manager comm debug] Updating existing connection\n"); fflush(stdout);
4492 #endif // DEBUG_NETWORK_MANAGER_COMMUNICATIONS
4493  // Save connection settings to the path specified
4494  DBus::ConnectionSettingsInterface connectionSettings(NM_DBUS_SERVICE, existingConnection);
4495  connectionSettings.setConnection(TQT_DBusConnection::systemBus());
4496  connect(&connectionSettings, SIGNAL(UpdateAsyncReply(int)), d, SLOT(processConnectionSettingsUpdateAsyncReply(int)));
4497  int asyncCallID;
4498  ret = connectionSettings.UpdateAsync(asyncCallID, connectionSettingsMap, error);
4499  if (ret && error.isValid()) {
4500  ret = 0;
4501  PRINT_ERROR((error.name() + ": " + error.message()))
4502  }
4503  if (ret) {
4504  // Wait for the asynchronous call to return...
4505  d->nmConnectionSettingsAsyncCallWaiting[asyncCallID] = true;
4506  TQTimer nmCallTimeoutTimer;
4507  nmCallTimeoutTimer.start(NM_ASYNC_TIMEOUT_MS, true);
4508  while (d->nmConnectionSettingsAsyncCallWaiting[asyncCallID]) {
4509  tqApp->processEvents();
4510  if (!nmCallTimeoutTimer.isActive()) {
4511  PRINT_ERROR(TQString("DBUS asynchronous call timed out!"))
4512  timed_out = true;
4513  break;
4514  }
4515  }
4516  d->nmConnectionSettingsAsyncCallWaiting.remove(asyncCallID);
4517  return !timed_out;
4518  }
4519  else {
4520  // Error!
4521  PRINT_ERROR((error.name() + ": " + error.message()))
4522  return false;
4523  }
4524  }
4525  else {
4526 #ifdef DEBUG_NETWORK_MANAGER_COMMUNICATIONS
4527  printf("[network-manager comm debug] Creating new connection\n"); fflush(stdout);
4528 #endif // DEBUG_NETWORK_MANAGER_COMMUNICATIONS
4529  // Create new connection
4530  connect(d->m_networkManagerSettings, SIGNAL(AddConnectionAsyncReply(int, const TQT_DBusObjectPath&)), d, SLOT(processAddConnectionAsyncReply(int, const TQT_DBusObjectPath&)));
4531  connect(d->m_networkManagerSettings, SIGNAL(AsyncErrorResponseDetected(int, const TQT_DBusError)), d, SLOT(processAddConnectionAsyncError(int, const TQT_DBusError)));
4532  int asyncCallID;
4533  ret = d->m_networkManagerSettings->AddConnectionAsync(asyncCallID, connectionSettingsMap, error);
4534  if (ret && error.isValid()) {
4535  ret = 0;
4536  PRINT_ERROR((error.name() + ": " + error.message()))
4537  }
4538  if (ret) {
4539  // Wait for the asynchronous call to return...
4540  d->nmConnectionSettingsAsyncCallWaiting[asyncCallID] = true;
4541  TQTimer nmCallTimeoutTimer;
4542  nmCallTimeoutTimer.start(NM_ASYNC_TIMEOUT_MS, true);
4543  while (d->nmConnectionSettingsAsyncCallWaiting[asyncCallID]) {
4544  if (!nmCallTimeoutTimer.isActive()) {
4545  PRINT_ERROR(TQString("DBUS asynchronous call timed out!"))
4546  timed_out = true;
4547  break;
4548  }
4549  tqApp->processEvents();
4550  }
4551  if (d->nmAddConnectionAsyncErrorResponse.contains(asyncCallID)) {
4552  PRINT_ERROR((d->nmAddConnectionAsyncErrorResponse[asyncCallID].name() + ": " + d->nmAddConnectionAsyncErrorResponse[asyncCallID].message()));
4553  d->nmAddConnectionAsyncErrorResponse.remove(asyncCallID);
4554  }
4555  if (!d->nmAddConnectionAsyncResponse[asyncCallID].ascii()) {
4556  PRINT_ERROR(TQString("NetworkManager did not return a new connection object!"))
4557  command_failed = true;
4558  }
4559  d->nmConnectionSettingsAsyncCallWaiting.remove(asyncCallID);
4560  if (d->nmAddConnectionAsyncResponse.contains(asyncCallID)) {
4561  d->nmAddConnectionAsyncResponse.remove(asyncCallID);
4562  }
4563  return ((!timed_out) && (!command_failed));
4564  }
4565  else {
4566  // Error!
4567  PRINT_ERROR((error.name() + ": " + error.message()))
4568  return false;
4569  }
4570  }
4571 }
4572 
4573 bool TDENetworkConnectionManager_BackendNM::deleteConnection(TQString uuid) {
4574  TQT_DBusObjectPath existingConnection;
4575  TQT_DBusError error;
4576  bool timed_out = false;
4577  bool ret;
4578  if (d->m_networkManagerSettings) {
4579  ret = d->m_networkManagerSettings->GetConnectionByUuid(uuid, existingConnection, error);
4580  if (ret) {
4581  // Obtain connection secrets from the path specified
4582  DBus::ConnectionSettingsInterface connectionSettings(NM_DBUS_SERVICE, existingConnection);
4583  connectionSettings.setConnection(TQT_DBusConnection::systemBus());
4584  connect(&connectionSettings, SIGNAL(DeleteAsyncReply(int)), d, SLOT(processConnectionSettingsUpdateAsyncReply(int)));
4585  int asyncCallID;
4586  ret = connectionSettings.DeleteAsync(asyncCallID, error);
4587  if (ret && error.isValid()) {
4588  ret = 0;
4589  PRINT_ERROR((error.name() + ": " + error.message()))
4590  }
4591  if (ret) {
4592  // Wait for the asynchronous call to return...
4593  d->nmConnectionSettingsAsyncCallWaiting[asyncCallID] = true;
4594  TQTimer nmCallTimeoutTimer;
4595  nmCallTimeoutTimer.start(NM_ASYNC_TIMEOUT_MS, true);
4596  while (d->nmConnectionSettingsAsyncCallWaiting[asyncCallID]) {
4597  tqApp->processEvents();
4598  if (!nmCallTimeoutTimer.isActive()) {
4599  PRINT_ERROR(TQString("DBUS asynchronous call timed out!"))
4600  timed_out = true;
4601  break;
4602  }
4603  }
4604  d->nmConnectionSettingsAsyncCallWaiting.remove(asyncCallID);
4605  return !timed_out;
4606  }
4607  else {
4608  PRINT_ERROR(TQString("Unable to remove connection with uuid '%1'").arg(uuid))
4609  return false;
4610  }
4611  }
4612  else {
4613  PRINT_WARNING(TQString("connection for provided uuid '%1' was not found").arg(uuid));
4614  return false;
4615  }
4616  }
4617  else {
4618  PRINT_ERROR(TQString("invalid internal network-manager settings proxy object"));
4619  return false;
4620  }
4621 }
4622 
4623 bool TDENetworkConnectionManager_BackendNM::verifyConnectionSettings(TDENetworkConnection* connection, TDENetworkConnectionErrorFlags::TDENetworkConnectionErrorFlags* type, TDENetworkErrorStringMap* reason) {
4624  // FIXME
4625  // This should actually attempt to validate all the settings!
4626 
4627  if (!connection) {
4628  return false;
4629  }
4630 
4631  if (connection->friendlyName == "") {
4632  if (reason) (*reason)[TDENetworkConnectionErrorFlags::InvalidConnectionSetting] = i18n("Connection name is invalid");
4633  if (type) *type |= TDENetworkConnectionErrorFlags::InvalidConnectionSetting;
4634  return false;
4635  }
4636 
4637  if (connection->ipConfig.valid) {
4638  // Iterate over all addresses
4639  TDENetworkSingleIPConfigurationList::iterator it;
4640  for (it = connection->ipConfig.ipConfigurations.begin(); it != connection->ipConfig.ipConfigurations.end(); ++it) {
4641  if ((*it).isIPv4()) {
4642  if (!(connection->ipConfig.connectionFlags & TDENetworkIPConfigurationFlags::IPV4DHCPIP)) {
4643  if (!TDENetworkConnectionManager::validateIPAddress((*it).ipAddress)) {
4644  if (reason) (*reason)[TDENetworkConnectionErrorFlags::InvalidIPv4Setting] = i18n("IPv4 address is invalid");
4645  if (type) *type |= TDENetworkConnectionErrorFlags::InvalidIPv4Setting;
4646  return false;
4647  }
4648  }
4649  }
4650  else if ((*it).isIPv6()) {
4651  if (!(connection->ipConfig.connectionFlags & TDENetworkIPConfigurationFlags::IPV6DHCPIP)) {
4652  if (!TDENetworkConnectionManager::validateIPAddress((*it).ipAddress)) {
4653  if (reason) (*reason)[TDENetworkConnectionErrorFlags::InvalidIPv6Setting] = i18n("IPv6 address is invalid");
4654  if (type) *type |= TDENetworkConnectionErrorFlags::InvalidIPv6Setting;
4655  return false;
4656  }
4657  }
4658  }
4659  }
4660  }
4661 
4662  TDEWiFiConnection* wiFiConnection = dynamic_cast<TDEWiFiConnection*>(connection);
4663  if (wiFiConnection) {
4664  if (wiFiConnection->SSID.count() < 1) {
4665  if (reason) (*reason)[TDENetworkConnectionErrorFlags::InvalidWirelessSetting] = i18n("No SSID provided");
4666  if (type) *type |= TDENetworkConnectionErrorFlags::InvalidWirelessSetting;
4667  return false;
4668  }
4669  if (wiFiConnection->securityRequired) {
4670  if (wiFiConnection->securitySettings.secretsValid) {
4671  if ((wiFiConnection->securitySettings.keyType == TDENetworkWiFiKeyType::WEP) || ((wiFiConnection->securitySettings.keyType == TDENetworkWiFiKeyType::DynamicWEP) && ((wiFiConnection->securitySettings.authType == TDENetworkWiFiAuthType::Open) || (wiFiConnection->securitySettings.authType == TDENetworkWiFiAuthType::Shared)))) {
4672  if (wiFiConnection->securitySettings.wepKeyType == TDENetworkWepKeyType::Hexadecimal) {
4673  if (wiFiConnection->securitySettings.wepKey0 != "") {
4674  if ((wiFiConnection->securitySettings.wepKey0.length() != 10) && (wiFiConnection->securitySettings.wepKey0.length() != 26)) {
4675  if (reason) (*reason)[TDENetworkConnectionErrorFlags::InvalidWirelessKey] = i18n("WEP key 0 has invalid length");
4676  if (type) *type |= TDENetworkConnectionErrorFlags::InvalidWirelessKey;
4677  return false;
4678  }
4679  }
4680  if (wiFiConnection->securitySettings.wepKey1 != "") {
4681  if ((wiFiConnection->securitySettings.wepKey1.length() != 10) && (wiFiConnection->securitySettings.wepKey1.length() != 26)) {
4682  if (reason) (*reason)[TDENetworkConnectionErrorFlags::InvalidWirelessKey] = i18n("WEP key 1 has invalid length");
4683  if (type) *type |= TDENetworkConnectionErrorFlags::InvalidWirelessKey;
4684  return false;
4685  }
4686  }
4687  if (wiFiConnection->securitySettings.wepKey2 != "") {
4688  if ((wiFiConnection->securitySettings.wepKey2.length() != 10) && (wiFiConnection->securitySettings.wepKey2.length() != 26)) {
4689  if (reason) (*reason)[TDENetworkConnectionErrorFlags::InvalidWirelessKey] = i18n("WEP key 2 has invalid length");
4690  if (type) *type |= TDENetworkConnectionErrorFlags::InvalidWirelessKey;
4691  return false;
4692  }
4693  }
4694  if (wiFiConnection->securitySettings.wepKey3 != "") {
4695  if ((wiFiConnection->securitySettings.wepKey3.length() != 10) && (wiFiConnection->securitySettings.wepKey3.length() != 26)) {
4696  if (reason) (*reason)[TDENetworkConnectionErrorFlags::InvalidWirelessKey] = i18n("WEP key 3 has invalid length");
4697  if (type) *type |= TDENetworkConnectionErrorFlags::InvalidWirelessKey;
4698  return false;
4699  }
4700  }
4701  if ((wiFiConnection->securitySettings.wepKey0 == "") && (wiFiConnection->securitySettings.wepKey1 == "") && (wiFiConnection->securitySettings.wepKey2 == "") && (wiFiConnection->securitySettings.wepKey3 == "")) {
4702  if (reason) (*reason)[TDENetworkConnectionErrorFlags::InvalidWirelessKey] = i18n("No WEP key(s) provided");
4703  if (type) *type |= TDENetworkConnectionErrorFlags::InvalidWirelessKey;
4704  return false;
4705  }
4706  }
4707  else if (wiFiConnection->securitySettings.wepKeyType == TDENetworkWepKeyType::Ascii) {
4708  if (wiFiConnection->securitySettings.wepKey0 != "") {
4709  if ((wiFiConnection->securitySettings.wepKey0.length() != 5) && (wiFiConnection->securitySettings.wepKey0.length() != 13)) {
4710  if (reason) (*reason)[TDENetworkConnectionErrorFlags::InvalidWirelessKey] = i18n("WEP key 0 has invalid length");
4711  if (type) *type |= TDENetworkConnectionErrorFlags::InvalidWirelessKey;
4712  return false;
4713  }
4714  }
4715  if (wiFiConnection->securitySettings.wepKey1 != "") {
4716  if ((wiFiConnection->securitySettings.wepKey1.length() != 5) && (wiFiConnection->securitySettings.wepKey1.length() != 13)) {
4717  if (reason) (*reason)[TDENetworkConnectionErrorFlags::InvalidWirelessKey] = i18n("WEP key 1 has invalid length");
4718  if (type) *type |= TDENetworkConnectionErrorFlags::InvalidWirelessKey;
4719  return false;
4720  }
4721  }
4722  if (wiFiConnection->securitySettings.wepKey2 != "") {
4723  if ((wiFiConnection->securitySettings.wepKey2.length() != 5) && (wiFiConnection->securitySettings.wepKey2.length() != 13)) {
4724  if (reason) (*reason)[TDENetworkConnectionErrorFlags::InvalidWirelessKey] = i18n("WEP key 2 has invalid length");
4725  if (type) *type |= TDENetworkConnectionErrorFlags::InvalidWirelessKey;
4726  return false;
4727  }
4728  }
4729  if (wiFiConnection->securitySettings.wepKey3 != "") {
4730  if ((wiFiConnection->securitySettings.wepKey3.length() != 5) && (wiFiConnection->securitySettings.wepKey3.length() != 13)) {
4731  if (reason) (*reason)[TDENetworkConnectionErrorFlags::InvalidWirelessKey] = i18n("WEP key 3 has invalid length");
4732  if (type) *type |= TDENetworkConnectionErrorFlags::InvalidWirelessKey;
4733  return false;
4734  }
4735  }
4736  if ((wiFiConnection->securitySettings.wepKey0 == "") && (wiFiConnection->securitySettings.wepKey1 == "") && (wiFiConnection->securitySettings.wepKey2 == "") && (wiFiConnection->securitySettings.wepKey3 == "")) {
4737  if (reason) (*reason)[TDENetworkConnectionErrorFlags::InvalidWirelessKey] = i18n("No WEP key(s) provided");
4738  if (type) *type |= TDENetworkConnectionErrorFlags::InvalidWirelessKey;
4739  return false;
4740  }
4741  }
4742  else if (wiFiConnection->securitySettings.wepKeyType == TDENetworkWepKeyType::Ascii) {
4743  if ((wiFiConnection->securitySettings.wepKey0 == "") && (wiFiConnection->securitySettings.wepKey1 == "") && (wiFiConnection->securitySettings.wepKey2 == "") && (wiFiConnection->securitySettings.wepKey3 == "")) {
4744  if (reason) (*reason)[TDENetworkConnectionErrorFlags::InvalidWirelessKey] = i18n("No WEP key(s) provided");
4745  if (type) *type |= TDENetworkConnectionErrorFlags::InvalidWirelessKey;
4746  return false;
4747  }
4748  }
4749  }
4750  else if ((wiFiConnection->securitySettings.keyType == TDENetworkWiFiKeyType::DynamicWEP) && (wiFiConnection->securitySettings.authType == TDENetworkWiFiAuthType::LEAP)) {
4751  if ((wiFiConnection->securitySettings.leapUsername.length() < 1) || (wiFiConnection->securitySettings.leapPassword.length() < 1)) {
4752  if (reason) (*reason)[TDENetworkConnectionErrorFlags::InvalidWirelessKey] = i18n("LEAP username and/or password not provided");
4753  if (type) *type |= TDENetworkConnectionErrorFlags::InvalidWirelessKey;
4754  return false;
4755  }
4756  }
4757  else if ((wiFiConnection->securitySettings.keyType == TDENetworkWiFiKeyType::WPAAdHoc) || (wiFiConnection->securitySettings.keyType == TDENetworkWiFiKeyType::WPAInfrastructure) || (wiFiConnection->securitySettings.keyType == TDENetworkWiFiKeyType::WPAEnterprise)) {
4758  if (wiFiConnection->securitySettings.psk.length() == 64) {
4759  // Verify that only hex characters are present in the string
4760  bool ok;
4761  wiFiConnection->securitySettings.psk.toULongLong(&ok, 16);
4762  if (!ok) {
4763  if (reason) (*reason)[TDENetworkConnectionErrorFlags::InvalidWirelessKey] = i18n("Hexadecimal length PSK contains non-hexadecimal characters");
4764  if (type) *type |= TDENetworkConnectionErrorFlags::InvalidWirelessKey;
4765  return false;
4766  }
4767  }
4768  else if ((wiFiConnection->securitySettings.psk.length() < 8) || (wiFiConnection->securitySettings.psk.length() > 63)) {
4769  if (reason) (*reason)[TDENetworkConnectionErrorFlags::InvalidWirelessKey] = i18n("No PSK provided");
4770  if (type) *type |= TDENetworkConnectionErrorFlags::InvalidWirelessKey;
4771  return false;
4772  }
4773  }
4774  }
4775  }
4776  }
4777 
4778  return true;
4779 }
4780 
4781 TDENetworkConnectionStatus::TDENetworkConnectionStatus TDENetworkConnectionManager_BackendNM::initiateConnection(TQString uuid) {
4782  TQT_DBusObjectPath existingConnection;
4783  TQT_DBusError error;
4784  bool ret;
4785  if ((d->m_networkManagerSettings) && (d->m_networkManagerProxy)) {
4786  ret = d->m_networkManagerSettings->GetConnectionByUuid(uuid, existingConnection, error);
4787  if (ret) {
4788  if (!m_networkDevice) {
4789  d->m_dbusDeviceString = "/";
4790  }
4791  else {
4792  d->m_dbusDeviceString = deviceInterfaceString(deviceNode());
4793  }
4794 #ifndef USE_ASYNC_DBUS_CONNECTION_COMMAND_CALLS
4795  TQT_DBusObjectPath active_connection;
4796  ret = d->m_networkManagerProxy->ActivateConnection(existingConnection, TQT_DBusObjectPath(d->m_dbusDeviceString.ascii()), TQT_DBusObjectPath("/"), active_connection, error);
4797  if (ret && error.isValid()) {
4798  ret = 0;
4799  PRINT_ERROR((error.name() + ": " + error.message()))
4800  }
4801  return checkConnectionStatus(uuid);
4802 #else // USE_ASYNC_DBUS_CONNECTION_COMMAND_CALLS
4803 #ifdef WAIT_FOR_OPERATION_BEFORE_RETURNING
4804  connect(d->m_networkManagerProxy, SIGNAL(ActivateConnectionAsyncReply(int, const TQT_DBusObjectPath&)), d, SLOT(processAddConnectionAsyncReply(int, const TQT_DBusObjectPath&)));
4805  connect(d->m_networkManagerProxy, SIGNAL(AsyncErrorResponseDetected(int, const TQT_DBusError)), d, SLOT(processAddConnectionAsyncError(int, const TQT_DBusError)));
4806 #endif // WAIT_FOR_OPERATION_BEFORE_RETURNING
4807  int asyncCallID;
4808  ret = d->m_networkManagerProxy->ActivateConnectionAsync(asyncCallID, existingConnection, TQT_DBusObjectPath(d->m_dbusDeviceString.ascii()), TQT_DBusObjectPath("/"), error);
4809  if (ret && error.isValid()) {
4810  ret = 0;
4811  PRINT_ERROR((error.name() + ": " + error.message()))
4812  }
4813 #ifdef WAIT_FOR_OPERATION_BEFORE_RETURNING
4814  if (ret) {
4815  // Wait for the asynchronous call to return...
4816  d->nmConnectionSettingsAsyncCallWaiting[asyncCallID] = true;
4817  TQTimer nmCallTimeoutTimer;
4818  nmCallTimeoutTimer.start(NM_ASYNC_TIMEOUT_MS, true);
4819  while (d->nmConnectionSettingsAsyncCallWaiting[asyncCallID]) {
4820  if (!nmCallTimeoutTimer.isActive()) {
4821  PRINT_ERROR(TQString("DBUS asynchronous call timed out!"))
4822  break;
4823  }
4824  tqApp->processEvents();
4825  }
4826  d->nmConnectionSettingsAsyncCallWaiting.remove(asyncCallID);
4827  if (d->nmAddConnectionAsyncErrorResponse.contains(asyncCallID)) {
4828  PRINT_ERROR((d->nmAddConnectionAsyncErrorResponse[asyncCallID].name() + ": " + d->nmAddConnectionAsyncErrorResponse[asyncCallID].message()));
4829  d->nmAddConnectionAsyncErrorResponse.remove(asyncCallID);
4830  }
4831  if (!d->nmAddConnectionAsyncResponse[asyncCallID].ascii()) {
4832  PRINT_ERROR(TQString("NetworkManager did not return a new connection object!"))
4833  }
4834  if (d->nmAddConnectionAsyncResponse.contains(asyncCallID)) {
4835  d->nmAddConnectionAsyncResponse.remove(asyncCallID);
4836  }
4837  return checkConnectionStatus(uuid);
4838  }
4839  else {
4840  // Error!
4841  PRINT_ERROR((error.name() + ": " + error.message()))
4842  return checkConnectionStatus(uuid);
4843  }
4844 #else
4845  return checkConnectionStatus(uuid);
4846 #endif
4847 #endif // USE_ASYNC_DBUS_CONNECTION_COMMAND_CALLS
4848  }
4849  else {
4850  PRINT_WARNING(TQString("connection for provided uuid '%1' was not found").arg(uuid));
4851  return TDENetworkConnectionStatus::Invalid;
4852  }
4853  }
4854  else {
4855  PRINT_ERROR(TQString("invalid internal network-manager settings proxy object"));
4856  return TDENetworkConnectionStatus::Invalid;
4857  }
4858 }
4859 
4860 TDENetworkConnectionStatus::TDENetworkConnectionStatus TDENetworkConnectionManager_BackendNM::checkConnectionStatus(TQString uuid) {
4861  TQT_DBusObjectPath existingConnection;
4862  TQT_DBusError error;
4863  if (d->m_networkManagerProxy) {
4864  TQT_DBusObjectPathList activeConnections = d->m_networkManagerProxy->getActiveConnections(error);
4865  TQT_DBusObjectPathList::iterator it;
4866  for (it = activeConnections.begin(); it != activeConnections.end(); ++it) {
4867  DBus::ActiveConnectionProxy activeConnection(NM_DBUS_SERVICE, (*it));
4868  activeConnection.setConnection(TQT_DBusConnection::systemBus());
4869  if (activeConnection.getUuid(error) == uuid) {
4870  return nmDeviceStateToTDEDeviceState(activeConnection.getState(error));
4871  }
4872  }
4873  PRINT_WARNING(TQString("active connection for provided uuid '%1' was not found").arg(uuid));
4874  return TDENetworkConnectionStatus::Invalid;
4875  }
4876  else {
4877  PRINT_ERROR(TQString("invalid internal network-manager settings proxy object"));
4878  return TDENetworkConnectionStatus::Invalid;
4879  }
4880 }
4881 
4882 TQT_DBusObjectPath TDENetworkConnectionManager_BackendNM::getActiveConnectionPath(TQString uuid) {
4883  TQT_DBusObjectPath existingConnection;
4884  TQT_DBusError error;
4885  if (d->m_networkManagerProxy) {
4886  TQT_DBusObjectPathList activeConnections = d->m_networkManagerProxy->getActiveConnections(error);
4887  TQT_DBusObjectPathList::iterator it;
4888  for (it = activeConnections.begin(); it != activeConnections.end(); ++it) {
4889  DBus::ActiveConnectionProxy activeConnection(NM_DBUS_SERVICE, (*it));
4890  activeConnection.setConnection(TQT_DBusConnection::systemBus());
4891  if (activeConnection.getUuid(error) == uuid) {
4892  return (*it);
4893  }
4894  }
4895  PRINT_WARNING(TQString("active connection for provided uuid '%1' was not found").arg(uuid));
4896  return TQT_DBusObjectPath();
4897  }
4898  else {
4899  PRINT_ERROR(TQString("invalid internal network-manager settings proxy object"));
4900  return TQT_DBusObjectPath();
4901  }
4902 }
4903 
4904 TQStringList TDENetworkConnectionManager_BackendNM::connectionPhysicalDeviceUUIDs(TQString uuid) {
4905  if (deviceType() == TDENetworkDeviceType::BackendOnly) {
4906  return TQStringList();
4907  }
4908 
4909  TQT_DBusObjectPath existingConnection;
4910  TQT_DBusError error;
4911  if (d->m_networkManagerProxy) {
4912  TQT_DBusObjectPathList activeConnections = d->m_networkManagerProxy->getActiveConnections(error);
4913  TQT_DBusObjectPathList::iterator it;
4914  TQStringList ret;
4915  for (it = activeConnections.begin(); it != activeConnections.end(); ++it) {
4916  DBus::ActiveConnectionProxy activeConnection(NM_DBUS_SERVICE, (*it));
4917  activeConnection.setConnection(TQT_DBusConnection::systemBus());
4918  if (activeConnection.getUuid(error) == uuid) {
4919  TQValueList<TQT_DBusObjectPath> deviceList = activeConnection.getDevices(error);
4920  TQT_DBusObjectPathList::iterator it2;
4921  for (it2 = deviceList.begin(); it2 != deviceList.end(); ++it2) {
4922  TQString devUUID = tdeDeviceUUIDForGenericDevice(*it2);
4923  if (devUUID != "") {
4924  ret.append(devUUID);
4925  }
4926  }
4927  }
4928  }
4929  return ret;
4930  }
4931  else {
4932  PRINT_ERROR(TQString("invalid internal network-manager settings proxy object"));
4933  return TQStringList();
4934  }
4935 }
4936 
4937 TDENetworkVPNTypeList TDENetworkConnectionManager_BackendNM::availableVPNTypes() {
4938  TDENetworkVPNTypeList ret;
4939 
4940  // Query NetworkManager to verify plugin availability before claiming support for a VPN type
4941  TQDir serviceDir(NM_PLUGIN_SERVICE_DIR, TQString(), TQDir::Name|TQDir::IgnoreCase, TQDir::Files);
4942  TQStringList services = serviceDir.entryList ().grep (".name", true);
4943 
4944  if (services.count () > 0) {
4945  // read in all available Services
4946  for (TQStringList::Iterator i = services.begin (); i != services.end (); ++i) {
4947  TQString service = NM_PLUGIN_SERVICE_DIR + TQString ("/") + *i;
4948  TDEConfig* tdeconfig = new TDEConfig (service, true, true, "config");
4949  tdeconfig->setGroup ("VPN Connection");
4950 
4951  TQString serviceName = tdeconfig->readEntry("name", TQString());
4952  serviceName = serviceName.lower();
4953 
4954  if (serviceName == "openvpn") {
4955  ret.append(TDENetworkVPNType::OpenVPN);
4956  }
4957  if (serviceName == "pptp") {
4958  ret.append(TDENetworkVPNType::PPTP);
4959  }
4960  if (serviceName == "strongswan") {
4961  ret.append(TDENetworkVPNType::StrongSwan);
4962  }
4963  if (serviceName == "vpnc") {
4964  ret.append(TDENetworkVPNType::VPNC);
4965  }
4966 
4967  delete tdeconfig;
4968  }
4969  }
4970 
4971  return ret;
4972 }
4973 
4974 TDENetworkConnectionStatus::TDENetworkConnectionStatus TDENetworkConnectionManager_BackendNM::deactivateConnection(TQString uuid) {
4975  TQT_DBusObjectPath existingConnection;
4976  TQT_DBusError error;
4977  bool ret;
4978  if ((d->m_networkManagerSettings) && (d->m_networkManagerProxy)) {
4979  existingConnection = getActiveConnectionPath(uuid);
4980  if (existingConnection.isValid()) {
4981  if (!m_networkDevice) {
4982  d->m_dbusDeviceString = "/";
4983  }
4984  else {
4985  d->m_dbusDeviceString = deviceInterfaceString(deviceNode());
4986  }
4987 #ifndef USE_ASYNC_DBUS_CONNECTION_COMMAND_CALLS
4988  ret = d->m_networkManagerProxy->DeactivateConnection(existingConnection, error);
4989  if (ret && error.isValid()) {
4990  ret = 0;
4991  PRINT_ERROR((error.name() + ": " + error.message()))
4992  }
4993  return checkConnectionStatus(uuid);
4994 #else // USE_ASYNC_DBUS_CONNECTION_COMMAND_CALLS
4995 #ifdef WAIT_FOR_OPERATION_BEFORE_RETURNING
4996  connect(d->m_networkManagerProxy, SIGNAL(DeactivateConnectionAsyncReply(int)), d, SLOT(processConnectionSettingsUpdateAsyncReply(int)));
4997 #endif // WAIT_FOR_OPERATION_BEFORE_RETURNING
4998  int asyncCallID;
4999  ret = d->m_networkManagerProxy->DeactivateConnectionAsync(asyncCallID, existingConnection, error);
5000  if (ret && error.isValid()) {
5001  ret = 0;
5002  PRINT_ERROR((error.name() + ": " + error.message()))
5003  }
5004 #ifdef WAIT_FOR_OPERATION_BEFORE_RETURNING
5005  if (ret) {
5006  // Wait for the asynchronous call to return...
5007  d->nmConnectionSettingsAsyncCallWaiting[asyncCallID] = true;
5008  TQTimer nmCallTimeoutTimer;
5009  nmCallTimeoutTimer.start(NM_ASYNC_TIMEOUT_MS, true);
5010  while (d->nmConnectionSettingsAsyncCallWaiting[asyncCallID]) {
5011  if (!nmCallTimeoutTimer.isActive()) {
5012  PRINT_ERROR(TQString("DBUS asynchronous call timed out!"))
5013  break;
5014  }
5015  tqApp->processEvents();
5016  }
5017  d->nmConnectionSettingsAsyncCallWaiting.remove(asyncCallID);
5018  return checkConnectionStatus(uuid);
5019  }
5020  else {
5021  // Error!
5022  PRINT_ERROR((error.name() + ": " + error.message()))
5023  return checkConnectionStatus(uuid);
5024  }
5025 #else
5026  return checkConnectionStatus(uuid);
5027 #endif
5028 #endif // USE_ASYNC_DBUS_CONNECTION_COMMAND_CALLS
5029  }
5030  else {
5031  PRINT_WARNING(TQString("connection for provided uuid '%1' was not found").arg(uuid));
5032  return TDENetworkConnectionStatus::Invalid;
5033  }
5034  }
5035  else {
5036  PRINT_ERROR(TQString("invalid internal network-manager settings proxy object"));
5037  return TDENetworkConnectionStatus::Invalid;
5038  }
5039 }
5040 
5041 TQStringList TDENetworkConnectionManager_BackendNM::validSettings() {
5042  TQStringList ret;
5043 
5044  ret.append("TDENetworkSingleIPConfiguration::ipAddress");
5045  ret.append("TDENetworkSingleIPConfiguration::networkMask");
5046  ret.append("TDENetworkSingleIPConfiguration::gateway");
5047 
5048  ret.append("TDENetworkSingleRouteConfiguration::ipAddress");
5049  ret.append("TDENetworkSingleRouteConfiguration::networkMask");
5050  ret.append("TDENetworkSingleRouteConfiguration::gateway");
5051 
5052  ret.append("TDENetworkIEEE8021xConfiguration::valid");
5053  ret.append("TDENetworkIEEE8021xConfiguration::allowedValid");
5054  ret.append("TDENetworkIEEE8021xConfiguration::secretsValid");
5055  ret.append("TDENetworkIEEE8021xConfiguration::type");
5056  ret.append("TDENetworkIEEE8021xConfiguration::userName");
5057  ret.append("TDENetworkIEEE8021xConfiguration::anonymousUserName");
5058  ret.append("TDENetworkIEEE8021xConfiguration::pacFileName");
5059  ret.append("TDENetworkIEEE8021xConfiguration::caCertificate");
5060  ret.append("TDENetworkIEEE8021xConfiguration::additionalCAFilesPath");
5061  ret.append("TDENetworkIEEE8021xConfiguration::authServerCertSubjectMatch");
5062  ret.append("TDENetworkIEEE8021xConfiguration::alternateAuthServerCertSubjectMatch");
5063  ret.append("TDENetworkIEEE8021xConfiguration::clientCertificate");
5064  ret.append("TDENetworkIEEE8021xConfiguration::forcePEAPVersion");
5065  ret.append("TDENetworkIEEE8021xConfiguration::forcePEAPLabel");
5066  ret.append("TDENetworkIEEE8021xConfiguration::fastProvisioningFlags");
5067  ret.append("TDENetworkIEEE8021xConfiguration::phase2NonEAPAuthMethod");
5068  ret.append("TDENetworkIEEE8021xConfiguration::phase2EAPAuthMethod");
5069  ret.append("TDENetworkIEEE8021xConfiguration::allowedPhase2NonEAPMethods");
5070  ret.append("TDENetworkIEEE8021xConfiguration::allowedPhase2EAPMethods");
5071  ret.append("TDENetworkIEEE8021xConfiguration::phase2CaCertificate");
5072  ret.append("TDENetworkIEEE8021xConfiguration::phase2CaFilesPath");
5073  ret.append("TDENetworkIEEE8021xConfiguration::phase2AuthServerCertSubjectMatch");
5074  ret.append("TDENetworkIEEE8021xConfiguration::phase2AlternateAuthServerCertSubjectMatch");
5075  ret.append("TDENetworkIEEE8021xConfiguration::phase2ClientCertificate");
5076  ret.append("TDENetworkIEEE8021xConfiguration::password");
5077  ret.append("TDENetworkIEEE8021xConfiguration::passwordFlags");
5078  ret.append("TDENetworkIEEE8021xConfiguration::binaryPassword");
5079  ret.append("TDENetworkIEEE8021xConfiguration::binaryPasswordFlags");
5080  ret.append("TDENetworkIEEE8021xConfiguration::privateKey");
5081  ret.append("TDENetworkIEEE8021xConfiguration::privateKeyPassword");
5082  ret.append("TDENetworkIEEE8021xConfiguration::privateKeyPasswordFlags");
5083  ret.append("TDENetworkIEEE8021xConfiguration::phase2PrivateKey");
5084  ret.append("TDENetworkIEEE8021xConfiguration::phase2PrivateKeyPassword");
5085  ret.append("TDENetworkIEEE8021xConfiguration::phase2PrivateKeyPasswordFlags");
5086  ret.append("TDENetworkIEEE8021xConfiguration::forceSystemCaCertificates");
5087 
5088  ret.append("TDENetworkPPPConfiguration::valid");
5089  ret.append("TDENetworkPPPConfiguration::requireServerAuthentication");
5090  ret.append("TDENetworkPPPConfiguration::flags");
5091  ret.append("TDENetworkPPPConfiguration::baudRate");
5092  ret.append("TDENetworkPPPConfiguration::mru");
5093  ret.append("TDENetworkPPPConfiguration::mtu");
5094  ret.append("TDENetworkPPPConfiguration::lcpEchoPingInterval");
5095  ret.append("TDENetworkPPPConfiguration::lcpEchoFailureThreshold");
5096 
5097  ret.append("TDENetworkPPPOEConfiguration::valid");
5098  ret.append("TDENetworkPPPOEConfiguration::secretsValid");
5099  ret.append("TDENetworkPPPOEConfiguration::networkServiceProvider");
5100  ret.append("TDENetworkPPPOEConfiguration::username");
5101  ret.append("TDENetworkPPPOEConfiguration::password");
5102  ret.append("TDENetworkPPPOEConfiguration::passwordFlags");
5103 
5104  ret.append("TDENetworkSerialConfiguration::valid");
5105  ret.append("TDENetworkSerialConfiguration::baudRate");
5106  ret.append("TDENetworkSerialConfiguration::byteWidth");
5107  ret.append("TDENetworkSerialConfiguration::parity");
5108  ret.append("TDENetworkSerialConfiguration::stopBits");
5109  ret.append("TDENetworkSerialConfiguration::txDelay");
5110 
5111  ret.append("TDENetworkCDMAConfiguration::valid");
5112  ret.append("TDENetworkCDMAConfiguration::secretsValid");
5113  ret.append("TDENetworkCDMAConfiguration::providerDataNumber");
5114  ret.append("TDENetworkCDMAConfiguration::username");
5115  ret.append("TDENetworkCDMAConfiguration::password");
5116  ret.append("TDENetworkCDMAConfiguration::passwordFlags");
5117 
5118  ret.append("TDENetworkGSMConfiguration::valid");
5119  ret.append("TDENetworkGSMConfiguration::secretsValid");
5120  ret.append("TDENetworkGSMConfiguration::providerDataNumber");
5121  ret.append("TDENetworkGSMConfiguration::username");
5122  ret.append("TDENetworkGSMConfiguration::password");
5123  ret.append("TDENetworkGSMConfiguration::passwordFlags");
5124  ret.append("TDENetworkGSMConfiguration::accessPointName");
5125  ret.append("TDENetworkGSMConfiguration::networkID");
5126  ret.append("TDENetworkGSMConfiguration::networkType");
5127  ret.append("TDENetworkGSMConfiguration::pin");
5128  ret.append("TDENetworkGSMConfiguration::pinFlags");
5129  ret.append("TDENetworkGSMConfiguration::allowedFrequencyBands");
5130  ret.append("TDENetworkGSMConfiguration::allowRoaming");
5131 
5132  ret.append("TDENetworkWiFiSecurityConfiguration::valid");
5133  ret.append("TDENetworkWiFiSecurityConfiguration::secretsValid");
5134  ret.append("TDENetworkWiFiSecurityConfiguration::keyType");
5135  ret.append("TDENetworkWiFiSecurityConfiguration::authType");
5136  ret.append("TDENetworkWiFiSecurityConfiguration::wpaVersion");
5137  ret.append("TDENetworkWiFiSecurityConfiguration::cipher");
5138  ret.append("TDENetworkWiFiSecurityConfiguration::wepKey0");
5139  ret.append("TDENetworkWiFiSecurityConfiguration::wepKey1");
5140  ret.append("TDENetworkWiFiSecurityConfiguration::wepKey2");
5141  ret.append("TDENetworkWiFiSecurityConfiguration::wepKey3");
5142  ret.append("TDENetworkWiFiSecurityConfiguration::wepKeyFlags");
5143  ret.append("TDENetworkWiFiSecurityConfiguration::wepKeyIndex");
5144  ret.append("TDENetworkWiFiSecurityConfiguration::wepKeyType");
5145  ret.append("TDENetworkWiFiSecurityConfiguration::allowedPairWiseCiphers");
5146  ret.append("TDENetworkWiFiSecurityConfiguration::allowedGroupWiseCiphers");
5147  ret.append("TDENetworkWiFiSecurityConfiguration::psk");
5148  ret.append("TDENetworkWiFiSecurityConfiguration::pskFlags");
5149  ret.append("TDENetworkWiFiSecurityConfiguration::leapUsername");
5150  ret.append("TDENetworkWiFiSecurityConfiguration::leapPassword");
5151  ret.append("TDENetworkWiFiSecurityConfiguration::leapPasswordFlags");
5152 
5153  ret.append("TDENetworkIPConfiguration::valid");
5154  ret.append("TDENetworkIPConfiguration::connectionFlags");
5155  ret.append("TDENetworkIPConfiguration::ipConfigurations");
5156  ret.append("TDENetworkIPConfiguration::routeConfigurations");
5157  ret.append("TDENetworkIPConfiguration::broadcast");
5158  ret.append("TDENetworkIPConfiguration::destination");
5159  ret.append("TDENetworkIPConfiguration::resolvers");
5160  ret.append("TDENetworkIPConfiguration::searchDomains");
5161  ret.append("TDENetworkIPConfiguration::dhcpClientIdentifier");
5162 
5163  ret.append("TDENetworkConnection::UUID");
5164  ret.append("TDENetworkConnection::friendlyName");
5165  ret.append("TDENetworkConnection::ipConfig");
5166  ret.append("TDENetworkConnection::lockedHWAddress");
5167  ret.append("TDENetworkConnection::manualHWAddress");
5168  ret.append("TDENetworkConnection::readOnly");
5169  ret.append("TDENetworkConnection::autoConnect");
5170  ret.append("TDENetworkConnection::fullDuplex");
5171  ret.append("TDENetworkConnection::requireIPV4");
5172  ret.append("TDENetworkConnection::requireIPV6");
5173  ret.append("TDENetworkConnection::mtu");
5174  ret.append("TDENetworkConnection::eapConfig");
5175  ret.append("TDENetworkConnection::pppConfig");
5176  ret.append("TDENetworkConnection::pppoeConfig");
5177  ret.append("TDENetworkConnection::serialConfig");
5178  ret.append("TDENetworkConnection::authorizedUsers");
5179  ret.append("TDENetworkConnection::masterConnectionUUID");
5180  ret.append("TDENetworkConnection::slaveType");
5181  ret.append("TDENetworkConnection::lastKnownConnection");
5182 
5183  ret.append("TDEWiFiConnection::SSID");
5184  ret.append("TDEWiFiConnection::operatingMode");
5185  ret.append("TDEWiFiConnection::bandRestriction");
5186  ret.append("TDEWiFiConnection::channelRestriction");
5187  ret.append("TDEWiFiConnection::bitRateRestriction");
5188  ret.append("TDEWiFiConnection::powerRestriction");
5189  ret.append("TDEWiFiConnection::accessPointRestriction");
5190  ret.append("TDEWiFiConnection::blacklistedBSSIDs");
5191  ret.append("TDEWiFiConnection::heardBSSIDs");
5192  ret.append("TDEWiFiConnection::isHiddenNetwork");
5193  ret.append("TDEWiFiConnection::securityRequired");
5194  ret.append("TDEWiFiConnection::securitySettings");
5195 
5196  ret.append("TDEWiredInfinibandConnection::transportMode");
5197 
5198  ret.append("TDEVPNConnection::vpnPluginID");
5199  ret.append("TDEVPNConnection::lockedUserName");
5200  ret.append("TDEVPNConnection::pluginData");
5201  ret.append("TDEVPNConnection::secretsValid");
5202  ret.append("TDEVPNConnection::pluginSecrets");
5203 
5204  ret.append("TDEWiMaxConnection::networkServiceProvider");
5205 
5206  ret.append("TDEVLANConnection::kernelName");
5207  ret.append("TDEVLANConnection::parentConnectionUUID");
5208  ret.append("TDEVLANConnection::vlanID");
5209  ret.append("TDEVLANConnection::vlanFlags");
5210  ret.append("TDEVLANConnection::ingressPriorityMap");
5211  ret.append("TDEVLANConnection::egressPriorityMap");
5212 
5213  ret.append("TDEOLPCMeshConnection::SSID");
5214  ret.append("TDEOLPCMeshConnection::channel");
5215  ret.append("TDEOLPCMeshConnection::anycastDHCPHWAddress");
5216 
5217  ret.append("TDEBluetoothConnection::type");
5218 
5219  ret.append("TDEModemConnection::type");
5220  ret.append("TDEModemConnection::cdmaConfig");
5221  ret.append("TDEModemConnection::gsmConfig");
5222 
5223  ret.append("TDEWiredInfinibandConnection::transportMode");
5224 
5225  return ret;
5226 }
5227 
5228 TDENetworkWiFiAPInfo* TDENetworkConnectionManager_BackendNM::getAccessPointDetails(TQString dbusPath) {
5229  if (dbusPath == "") {
5230  return NULL;
5231  }
5232 
5233  TDENetworkWiFiAPInfo* apInfo = new TDENetworkWiFiAPInfo;
5234  TQT_DBusError error;
5235  unsigned int index;
5236  DBus::AccessPointProxy accessPoint(NM_DBUS_SERVICE, dbusPath);
5237  accessPoint.setConnection(TQT_DBusConnection::systemBus());
5238 
5239  TQValueList<TQ_UINT8> nmSSID = accessPoint.getSsid(error);
5240  if (error.isValid()) {
5241  delete apInfo;
5242  return NULL;
5243  }
5244  TQValueList<TQ_UINT8>::iterator it;
5245  index = 0;
5246  for (it = nmSSID.begin(); it != nmSSID.end(); ++it) {
5247  apInfo->SSID.resize(index+1);
5248  apInfo->SSID[index] = (*it);
5249  index++;
5250  }
5251 
5252  apInfo->wpaFlags = nmAPSecFlagsToTDEAPSecFlags(accessPoint.getFlags(error), accessPoint.getWpaFlags(error));
5253  apInfo->rsnFlags = nmAPSecFlagsToTDEAPSecFlags(accessPoint.getFlags(error), accessPoint.getRsnFlags(error));
5254  apInfo->frequency = accessPoint.getFrequency(error);
5255  apInfo->BSSID.fromString(accessPoint.getHwAddress(error));
5256  apInfo->maxBitrate = accessPoint.getMaxBitrate(error);
5257  apInfo->signalQuality = (accessPoint.getStrength(error)/100.0);
5258 
5259  apInfo->valid = true;
5260 
5261  return apInfo;
5262 }
5263 
5264 TDENetworkHWNeighborList* TDENetworkConnectionManager_BackendNM::siteSurvey() {
5265  TQT_DBusError error;
5266  bool ret;
5267 
5268  TDENetworkDeviceType::TDENetworkDeviceType myDeviceType = deviceType();
5269  d->m_dbusDeviceString = deviceInterfaceString(deviceNode());
5270  clearTDENetworkHWNeighborList();
5271 
5272  if (myDeviceType == TDENetworkDeviceType::WiFi) {
5273  DBus::WiFiDeviceProxy wiFiDevice(NM_DBUS_SERVICE, d->m_dbusDeviceString);
5274  wiFiDevice.setConnection(TQT_DBusConnection::systemBus());
5275  // FIXME
5276  // Should call wiFiDevice.RequestScanAsync first to rescan all access points
5277  TQT_DBusObjectPathList accessPoints;
5278  ret = wiFiDevice.GetAccessPoints(accessPoints, error);
5279  if (ret) {
5280  TQT_DBusObjectPathList::iterator it;
5281  for (it = accessPoints.begin(); it != accessPoints.end(); ++it) {
5282  TDENetworkWiFiAPInfo* apInfo = getAccessPointDetails(TQString(*it));
5283  if (apInfo) {
5284  m_hwNeighborList->append(apInfo);
5285  // Ensure that this AP is monitored for changes
5286  d->internalProcessWiFiAccessPointAdded(*it);
5287  }
5288  }
5289  }
5290  }
5291 
5292  return m_hwNeighborList;
5293 }
5294 
5295 bool TDENetworkConnectionManager_BackendNM::networkingEnabled() {
5296  if (d->m_networkManagerProxy) {
5297  bool ret;
5298  TQT_DBusError error;
5299  ret = d->m_networkManagerProxy->getNetworkingEnabled(error);
5300  if (error.isValid()) {
5301  // Error!
5302  PRINT_ERROR((error.name() + ": " + error.message()))
5303  return false;
5304  }
5305  else {
5306  return ret;
5307  }
5308  }
5309  else {
5310  return false;
5311  }
5312 }
5313 
5314 bool TDENetworkConnectionManager_BackendNM::wiFiHardwareEnabled() {
5315  if (d->m_networkManagerProxy) {
5316  bool ret;
5317  TQT_DBusError error;
5318  ret = d->m_networkManagerProxy->getWirelessHardwareEnabled(error);
5319  if (error.isValid()) {
5320  // Error!
5321  PRINT_ERROR((error.name() + ": " + error.message()))
5322  return false;
5323  }
5324  else {
5325  return ret;
5326  }
5327  }
5328  else {
5329  return false;
5330  }
5331 }
5332 
5333 bool TDENetworkConnectionManager_BackendNM::enableNetworking(bool enable) {
5334  // FIXME
5335  // Yes, this abuses the Sleep command
5336  // Is there a better way to do it?
5337  if (d->m_networkManagerProxy) {
5338  int asynccallid;
5339  TQT_DBusError error;
5340  d->m_networkManagerProxy->SleepAsync(asynccallid, !enable, error);
5341  if (error.isValid()) {
5342  // Error!
5343  PRINT_ERROR((error.name() + ": " + error.message()))
5344  return false;
5345  }
5346  else {
5347  // FIXME
5348  // Wait for async reply before returning...
5349  return true;
5350  }
5351  }
5352  else {
5353  return false;
5354  }
5355 }
5356 
5357 bool TDENetworkConnectionManager_BackendNM::enableWiFi(bool enable) {
5358  if (d->m_networkManagerProxy) {
5359  TQT_DBusError error;
5360  d->m_networkManagerProxy->setWirelessEnabled(enable, error);
5361  if (error.isValid()) {
5362  // Error!
5363  PRINT_ERROR((error.name() + ": " + error.message()))
5364  return false;
5365  }
5366  else {
5367  return true;
5368  }
5369  }
5370  else {
5371  return false;
5372  }
5373 }
5374 
5375 bool TDENetworkConnectionManager_BackendNM::wiFiEnabled() {
5376  if (d->m_networkManagerProxy) {
5377  bool ret;
5378  TQT_DBusError error;
5379  ret = d->m_networkManagerProxy->getWirelessEnabled(error);
5380  if (error.isValid()) {
5381  // Error!
5382  PRINT_ERROR((error.name() + ": " + error.message()))
5383  return false;
5384  }
5385  else {
5386  return ret;
5387  }
5388  }
5389  else {
5390  return false;
5391  }
5392 }
5393 
5394 TQStringList TDENetworkConnectionManager_BackendNM::defaultNetworkDevices() {
5395  // Cycle through all available connections and see which one is default, then find all devices for that connection...
5396  TQStringList ret;
5397 
5398  TQT_DBusObjectPath existingConnection;
5399  TQT_DBusError error;
5400  if (d->m_networkManagerProxy) {
5401  TQT_DBusObjectPathList activeConnections = d->m_networkManagerProxy->getActiveConnections(error);
5402  TQT_DBusObjectPathList::iterator it;
5403  for (it = activeConnections.begin(); it != activeConnections.end(); ++it) {
5404  DBus::ActiveConnectionProxy activeConnection(NM_DBUS_SERVICE, (*it));
5405  activeConnection.setConnection(TQT_DBusConnection::systemBus());
5406  if (activeConnection.getDefault(error)) {
5407  // This is the default ipv4 connection
5408  TQString uuid = activeConnection.getUuid(error);
5409  TQStringList devices = connectionPhysicalDeviceUUIDs(uuid);
5410  for (TQStringList::Iterator it2 = devices.begin(); it2 != devices.end(); ++it2) {
5411  ret.append(*it);
5412  }
5413  }
5414  else if (activeConnection.getDefault6(error)) {
5415  // This is the default ipv6 connection
5416  TQString uuid = activeConnection.getUuid(error);
5417  TQStringList devices = connectionPhysicalDeviceUUIDs(uuid);
5418  for (TQStringList::Iterator it2 = devices.begin(); it2 != devices.end(); ++it2) {
5419  ret.append(*it);
5420  }
5421  }
5422  }
5423  return ret;
5424  }
5425  else {
5426  PRINT_ERROR(TQString("invalid internal network-manager settings proxy object"));
5427  return TQStringList();
5428  }
5429 }
5430 
5431 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) {
5432  // Set up global signal handler
5433  m_dbusSignalConnection = new TQT_DBusConnection(TQT_DBusConnection::systemBus());
5434  m_dbusSignalReceiver = new TDENetworkConnectionManager_BackendNM_DBusSignalReceiver(this);
5435  m_dbusSignalConnection->connect(m_dbusSignalReceiver, TQT_SLOT(dbusSignal(const TQT_DBusMessage&)));
5436 }
5437 
5438 TDENetworkConnectionManager_BackendNMPrivate::~TDENetworkConnectionManager_BackendNMPrivate() {
5439  // Destroy global signal handler
5440  if (m_dbusSignalConnection) delete m_dbusSignalConnection;
5441  if (m_dbusSignalReceiver) delete m_dbusSignalReceiver;
5442 
5443  // Destroy proxy objects
5444  TQMap<TQString, DBus::AccessPointProxy*>::iterator it;
5445  for (it = m_accessPointProxyList.begin(); it != m_accessPointProxyList.end(); ++it) {
5446  DBus::AccessPointProxy *apProxy = it.data();
5447  if (apProxy) {
5448  delete apProxy;
5449  }
5450  }
5451  m_accessPointProxyList.clear();
5452 }
5453 
5454 #include "network-manager.moc"
5455 #include "network-manager_p.moc"
TDEConfig
Access KDE Configuration entries.
Definition: tdeconfig.h:43
TDENetworkGlobalManagerFlags
Definition: tdenetworkconnections.h:233
TDENetworkConnectionType
Definition: tdenetworkconnections.h:84
TDEStdAccel::key
int key(StdAccel id)
Definition: tdestdaccel.cpp:383
TDEConfigBase::setGroup
void setGroup(const TQString &group)
Specifies the group in which keys will be read and written.
Definition: tdeconfigbase.cpp:80
TDENetworkDeviceType
Definition: tdenetworkconnections.h:66
TDEConfigBase::readEntry
TQString readEntry(const TQString &pKey, const TQString &aDefault=TQString::null) const
Reads the value of an entry specified by pKey in the current group.
Definition: tdeconfigbase.cpp:222
TDENetworkIPConfigurationFlags
Definition: tdenetworkconnections.h:476

tdecore

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

tdecore

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