You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
			
				
					70 lines
				
				2.4 KiB
			
		
		
			
		
	
	
					70 lines
				
				2.4 KiB
			| 
								 
											5 years ago
										 
									 | 
							
								#include <QtDBus>
							 | 
						||
| 
								 | 
							
								#include <QDebug>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								typedef QMap<QString, QMap<QString, QVariant> > Connection;
							 | 
						||
| 
								 | 
							
								Q_DECLARE_METATYPE(Connection)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void wifi_stuff(){
							 | 
						||
| 
								 | 
							
								  qDBusRegisterMetaType<Connection>();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  QString nm_path = "/org/freedesktop/NetworkManager";
							 | 
						||
| 
								 | 
							
								  QString nm_settings_path = "/org/freedesktop/NetworkManager/Settings";
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  QString nm_iface = "org.freedesktop.NetworkManager";
							 | 
						||
| 
								 | 
							
								  QString props_iface = "org.freedesktop.DBus.Properties";
							 | 
						||
| 
								 | 
							
								  QString nm_settings_iface = "org.freedesktop.NetworkManager.Settings";
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  QString nm_service = "org.freedesktop.NetworkManager";
							 | 
						||
| 
								 | 
							
								  QString device_service = "org.freedesktop.NetworkManager.Device";
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  QDBusConnection bus = QDBusConnection::systemBus();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  // Get devices
							 | 
						||
| 
								 | 
							
								  QDBusInterface nm(nm_service, nm_path, nm_iface, bus);
							 | 
						||
| 
								 | 
							
								  QDBusMessage response = nm.call("GetDevices");
							 | 
						||
| 
								 | 
							
								  QVariant first =  response.arguments().at(0);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  const QDBusArgument &args = first.value<QDBusArgument>();
							 | 
						||
| 
								 | 
							
								  args.beginArray();
							 | 
						||
| 
								 | 
							
								  while (!args.atEnd()) {
							 | 
						||
| 
								 | 
							
								    QDBusObjectPath path;
							 | 
						||
| 
								 | 
							
								    args >> path;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    // Get device type
							 | 
						||
| 
								 | 
							
								    QDBusInterface device_props(nm_service, path.path(), props_iface, bus);
							 | 
						||
| 
								 | 
							
								    QDBusMessage response = device_props.call("Get", device_service, "DeviceType");
							 | 
						||
| 
								 | 
							
								    QVariant first =  response.arguments().at(0);
							 | 
						||
| 
								 | 
							
								    QDBusVariant dbvFirst = first.value<QDBusVariant>();
							 | 
						||
| 
								 | 
							
								    QVariant vFirst = dbvFirst.variant();
							 | 
						||
| 
								 | 
							
								    uint device_type = vFirst.value<uint>();
							 | 
						||
| 
								 | 
							
								    qDebug() << path.path() << device_type;
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								  args.endArray();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  // Add connection
							 | 
						||
| 
								 | 
							
								  Connection connection;
							 | 
						||
| 
								 | 
							
								  connection["connection"]["type"] = "802-11-wireless";
							 | 
						||
| 
								 | 
							
								  connection["connection"]["uuid"] = QUuid::createUuid().toString().remove('{').remove('}');
							 | 
						||
| 
								 | 
							
								  connection["connection"]["id"] = "Connection 1";
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  connection["802-11-wireless"]["ssid"] = QByteArray("<ssid>");
							 | 
						||
| 
								 | 
							
								  connection["802-11-wireless"]["mode"] = "infrastructure";
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  connection["802-11-wireless-security"]["key-mgmt"] = "wpa-psk";
							 | 
						||
| 
								 | 
							
								  connection["802-11-wireless-security"]["auth-alg"] = "open";
							 | 
						||
| 
								 | 
							
								  connection["802-11-wireless-security"]["psk"] = "<password>";
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  connection["ipv4"]["method"] = "auto";
							 | 
						||
| 
								 | 
							
								  connection["ipv6"]["method"] = "ignore";
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  QDBusInterface nm_settings(nm_service, nm_settings_path, nm_settings_iface, bus);
							 | 
						||
| 
								 | 
							
								  QDBusReply<QDBusObjectPath> result = nm_settings.call("AddConnection", QVariant::fromValue(connection));
							 | 
						||
| 
								 | 
							
								  if (!result.isValid()) {
							 | 
						||
| 
								 | 
							
								    qDebug() << result.error().name() << result.error().message();
							 | 
						||
| 
								 | 
							
								  } else {
							 | 
						||
| 
								 | 
							
								    qDebug() << result.value().path();
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								}
							 |