|  |  | @ -40,14 +40,14 @@ const int state_need_auth = 60; | 
			
		
	
		
		
			
				
					
					|  |  |  | const int reason_wrong_password = 8; |  |  |  | const int reason_wrong_password = 8; | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | template <typename T> |  |  |  | template <typename T> | 
			
		
	
		
		
			
				
					
					|  |  |  | T get_response(QDBusMessage response){ |  |  |  | T get_response(QDBusMessage response) { | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |   QVariant first =  response.arguments().at(0); |  |  |  |   QVariant first =  response.arguments().at(0); | 
			
		
	
		
		
			
				
					
					|  |  |  |   QDBusVariant dbvFirst = first.value<QDBusVariant>(); |  |  |  |   QDBusVariant dbvFirst = first.value<QDBusVariant>(); | 
			
		
	
		
		
			
				
					
					|  |  |  |   QVariant vFirst = dbvFirst.variant(); |  |  |  |   QVariant vFirst = dbvFirst.variant(); | 
			
		
	
		
		
			
				
					
					|  |  |  |   return vFirst.value<T>(); |  |  |  |   return vFirst.value<T>(); | 
			
		
	
		
		
			
				
					
					|  |  |  | } |  |  |  | } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | bool compare_by_strength(const Network &a, const Network &b){ |  |  |  | bool compare_by_strength(const Network &a, const Network &b) { | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |   if (a.connected == ConnectedType::CONNECTED) return true; |  |  |  |   if (a.connected == ConnectedType::CONNECTED) return true; | 
			
		
	
		
		
			
				
					
					|  |  |  |   if (b.connected == ConnectedType::CONNECTED) return false; |  |  |  |   if (b.connected == ConnectedType::CONNECTED) return false; | 
			
		
	
		
		
			
				
					
					|  |  |  |   if (a.connected == ConnectedType::CONNECTING) return true; |  |  |  |   if (a.connected == ConnectedType::CONNECTING) return true; | 
			
		
	
	
		
		
			
				
					|  |  | @ -56,13 +56,13 @@ bool compare_by_strength(const Network &a, const Network &b){ | 
			
		
	
		
		
			
				
					
					|  |  |  | } |  |  |  | } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | WifiManager::WifiManager(){ |  |  |  | WifiManager::WifiManager() { | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |   qDBusRegisterMetaType<Connection>(); |  |  |  |   qDBusRegisterMetaType<Connection>(); | 
			
		
	
		
		
			
				
					
					|  |  |  |   qDBusRegisterMetaType<IpConfig>(); |  |  |  |   qDBusRegisterMetaType<IpConfig>(); | 
			
		
	
		
		
			
				
					
					|  |  |  |   connecting_to_network = ""; |  |  |  |   connecting_to_network = ""; | 
			
		
	
		
		
			
				
					
					|  |  |  |   adapter = get_adapter(); |  |  |  |   adapter = get_adapter(); | 
			
		
	
		
		
			
				
					
					|  |  |  |   has_adapter = adapter != ""; |  |  |  |   has_adapter = adapter != ""; | 
			
		
	
		
		
			
				
					
					|  |  |  |   if (has_adapter){ |  |  |  |   if (has_adapter) { | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |     QDBusInterface nm(nm_service, adapter, device_iface, bus); |  |  |  |     QDBusInterface nm(nm_service, adapter, device_iface, bus); | 
			
		
	
		
		
			
				
					
					|  |  |  |     bus.connect(nm_service, adapter, device_iface, "StateChanged", this, SLOT(change(unsigned int, unsigned int, unsigned int))); |  |  |  |     bus.connect(nm_service, adapter, device_iface, "StateChanged", this, SLOT(change(unsigned int, unsigned int, unsigned int))); | 
			
		
	
		
		
			
				
					
					|  |  |  |     
 |  |  |  |     
 | 
			
		
	
	
		
		
			
				
					|  |  | @ -75,20 +75,20 @@ WifiManager::WifiManager(){ | 
			
		
	
		
		
			
				
					
					|  |  |  |   // Compute tethering ssid as "Weedle" + first 4 characters of a dongle id
 |  |  |  |   // Compute tethering ssid as "Weedle" + first 4 characters of a dongle id
 | 
			
		
	
		
		
			
				
					
					|  |  |  |   tethering_ssid = "weedle"; |  |  |  |   tethering_ssid = "weedle"; | 
			
		
	
		
		
			
				
					
					|  |  |  |   std::string bytes = Params().get("DongleId"); |  |  |  |   std::string bytes = Params().get("DongleId"); | 
			
		
	
		
		
			
				
					
					|  |  |  |   if (bytes.length() >= 4){ |  |  |  |   if (bytes.length() >= 4) { | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |     tethering_ssid+="-"+QString::fromStdString(bytes.substr(0,4)); |  |  |  |     tethering_ssid+="-"+QString::fromStdString(bytes.substr(0,4)); | 
			
		
	
		
		
			
				
					
					|  |  |  |   } |  |  |  |   } | 
			
		
	
		
		
			
				
					
					|  |  |  | } |  |  |  | } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | void WifiManager::refreshNetworks(){ |  |  |  | void WifiManager::refreshNetworks() { | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |   if (!has_adapter) return; |  |  |  |   if (!has_adapter) return; | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |   bus = QDBusConnection::systemBus(); |  |  |  |   bus = QDBusConnection::systemBus(); | 
			
		
	
		
		
			
				
					
					|  |  |  |   seen_networks.clear(); |  |  |  |   seen_networks.clear(); | 
			
		
	
		
		
			
				
					
					|  |  |  |   seen_ssids.clear(); |  |  |  |   seen_ssids.clear(); | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |   for (Network &network : get_networks()){ |  |  |  |   for (Network &network : get_networks()) { | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |     if (seen_ssids.count(network.ssid)){ |  |  |  |     if (seen_ssids.count(network.ssid)) { | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  |       continue; |  |  |  |       continue; | 
			
		
	
		
		
			
				
					
					|  |  |  |     } |  |  |  |     } | 
			
		
	
		
		
			
				
					
					|  |  |  |     seen_ssids.push_back(network.ssid); |  |  |  |     seen_ssids.push_back(network.ssid); | 
			
		
	
	
		
		
			
				
					|  |  | @ -96,7 +96,7 @@ void WifiManager::refreshNetworks(){ | 
			
		
	
		
		
			
				
					
					|  |  |  |   } |  |  |  |   } | 
			
		
	
		
		
			
				
					
					|  |  |  | } |  |  |  | } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | QList<Network> WifiManager::get_networks(){ |  |  |  | QList<Network> WifiManager::get_networks() { | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |   QList<Network> r; |  |  |  |   QList<Network> r; | 
			
		
	
		
		
			
				
					
					|  |  |  |   QDBusInterface nm(nm_service, adapter, wireless_device_iface, bus); |  |  |  |   QDBusInterface nm(nm_service, adapter, wireless_device_iface, bus); | 
			
		
	
		
		
			
				
					
					|  |  |  |   QDBusMessage response = nm.call("GetAllAccessPoints"); |  |  |  |   QDBusMessage response = nm.call("GetAllAccessPoints"); | 
			
		
	
	
		
		
			
				
					|  |  | @ -113,18 +113,18 @@ QList<Network> WifiManager::get_networks(){ | 
			
		
	
		
		
			
				
					
					|  |  |  |     unsigned int strength = get_ap_strength(path.path()); |  |  |  |     unsigned int strength = get_ap_strength(path.path()); | 
			
		
	
		
		
			
				
					
					|  |  |  |     SecurityType security = getSecurityType(path.path()); |  |  |  |     SecurityType security = getSecurityType(path.path()); | 
			
		
	
		
		
			
				
					
					|  |  |  |     ConnectedType ctype; |  |  |  |     ConnectedType ctype; | 
			
		
	
		
		
			
				
					
					|  |  |  |     if (path.path() != active_ap){ |  |  |  |     if (path.path() != active_ap) { | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |       ctype = ConnectedType::DISCONNECTED; |  |  |  |       ctype = ConnectedType::DISCONNECTED; | 
			
		
	
		
		
			
				
					
					|  |  |  |     }else { |  |  |  |     } else { | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |       if (ssid == connecting_to_network){ |  |  |  |       if (ssid == connecting_to_network) { | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  |         ctype = ConnectedType::CONNECTING; |  |  |  |         ctype = ConnectedType::CONNECTING; | 
			
		
	
		
		
			
				
					
					|  |  |  |       }else { |  |  |  |       } else { | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |         ctype = ConnectedType::CONNECTED; |  |  |  |         ctype = ConnectedType::CONNECTED; | 
			
		
	
		
		
			
				
					
					|  |  |  |       } |  |  |  |       } | 
			
		
	
		
		
			
				
					
					|  |  |  |     } |  |  |  |     } | 
			
		
	
		
		
			
				
					
					|  |  |  |     Network network = {path.path(), ssid, strength, ctype, security}; |  |  |  |     Network network = {path.path(), ssid, strength, ctype, security}; | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     if (ssid.length()){ |  |  |  |     if (ssid.length()) { | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |       r.push_back(network); |  |  |  |       r.push_back(network); | 
			
		
	
		
		
			
				
					
					|  |  |  |     } |  |  |  |     } | 
			
		
	
		
		
			
				
					
					|  |  |  |   } |  |  |  |   } | 
			
		
	
	
		
		
			
				
					|  |  | @ -134,7 +134,7 @@ QList<Network> WifiManager::get_networks(){ | 
			
		
	
		
		
			
				
					
					|  |  |  |   return r; |  |  |  |   return r; | 
			
		
	
		
		
			
				
					
					|  |  |  | } |  |  |  | } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | SecurityType WifiManager::getSecurityType(QString path){ |  |  |  | SecurityType WifiManager::getSecurityType(QString path) { | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |   int sflag = get_property(path, "Flags").toInt(); |  |  |  |   int sflag = get_property(path, "Flags").toInt(); | 
			
		
	
		
		
			
				
					
					|  |  |  |   int wpaflag = get_property(path, "WpaFlags").toInt(); |  |  |  |   int wpaflag = get_property(path, "WpaFlags").toInt(); | 
			
		
	
		
		
			
				
					
					|  |  |  |   int rsnflag = get_property(path, "RsnFlags").toInt(); |  |  |  |   int rsnflag = get_property(path, "RsnFlags").toInt(); | 
			
		
	
	
		
		
			
				
					|  |  | @ -143,7 +143,7 @@ SecurityType WifiManager::getSecurityType(QString path){ | 
			
		
	
		
		
			
				
					
					|  |  |  |   // obtained by looking at flags of networks in the office as reported by an Android phone
 |  |  |  |   // obtained by looking at flags of networks in the office as reported by an Android phone
 | 
			
		
	
		
		
			
				
					
					|  |  |  |   const int supports_wpa = NM_802_11_AP_SEC_PAIR_WEP40 | NM_802_11_AP_SEC_PAIR_WEP104 | NM_802_11_AP_SEC_GROUP_WEP40 | NM_802_11_AP_SEC_GROUP_WEP104 | NM_802_11_AP_SEC_KEY_MGMT_PSK; |  |  |  |   const int supports_wpa = NM_802_11_AP_SEC_PAIR_WEP40 | NM_802_11_AP_SEC_PAIR_WEP104 | NM_802_11_AP_SEC_GROUP_WEP40 | NM_802_11_AP_SEC_GROUP_WEP104 | NM_802_11_AP_SEC_KEY_MGMT_PSK; | 
			
		
	
		
		
			
				
					
					|  |  |  |   
 |  |  |  |   
 | 
			
		
	
		
		
			
				
					
					|  |  |  |   if (sflag == 0){ |  |  |  |   if (sflag == 0) { | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |     return SecurityType::OPEN; |  |  |  |     return SecurityType::OPEN; | 
			
		
	
		
		
			
				
					
					|  |  |  |   } else if ((sflag & NM_802_11_AP_FLAGS_PRIVACY) && (wpa_props & supports_wpa) && !(wpa_props & NM_802_11_AP_SEC_KEY_MGMT_802_1X)) { |  |  |  |   } else if ((sflag & NM_802_11_AP_FLAGS_PRIVACY) && (wpa_props & supports_wpa) && !(wpa_props & NM_802_11_AP_SEC_KEY_MGMT_802_1X)) { | 
			
		
	
		
		
			
				
					
					|  |  |  |     return SecurityType::WPA; |  |  |  |     return SecurityType::WPA; | 
			
		
	
	
		
		
			
				
					|  |  | @ -152,22 +152,22 @@ SecurityType WifiManager::getSecurityType(QString path){ | 
			
		
	
		
		
			
				
					
					|  |  |  |   } |  |  |  |   } | 
			
		
	
		
		
			
				
					
					|  |  |  | } |  |  |  | } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | void WifiManager::connect(Network n){ |  |  |  | void WifiManager::connect(Network n) { | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |   return connect(n, "", ""); |  |  |  |   return connect(n, "", ""); | 
			
		
	
		
		
			
				
					
					|  |  |  | } |  |  |  | } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | void WifiManager::connect(Network n, QString password){ |  |  |  | void WifiManager::connect(Network n, QString password) { | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |   return connect(n, "", password); |  |  |  |   return connect(n, "", password); | 
			
		
	
		
		
			
				
					
					|  |  |  | } |  |  |  | } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | void WifiManager::connect(Network n, QString username, QString password){ |  |  |  | void WifiManager::connect(Network n, QString username, QString password) { | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |   connecting_to_network = n.ssid; |  |  |  |   connecting_to_network = n.ssid; | 
			
		
	
		
		
			
				
					
					|  |  |  |   disconnect(); |  |  |  |   disconnect(); | 
			
		
	
		
		
			
				
					
					|  |  |  |   clear_connections(n.ssid); //Clear all connections that may already exist to the network we are connecting
 |  |  |  |   clear_connections(n.ssid); //Clear all connections that may already exist to the network we are connecting
 | 
			
		
	
		
		
			
				
					
					|  |  |  |   connect(n.ssid, username, password, n.security_type); |  |  |  |   connect(n.ssid, username, password, n.security_type); | 
			
		
	
		
		
			
				
					
					|  |  |  | } |  |  |  | } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | void WifiManager::connect(QByteArray ssid, QString username, QString password, SecurityType security_type){ |  |  |  | void WifiManager::connect(QByteArray ssid, QString username, QString password, SecurityType security_type) { | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |   Connection connection; |  |  |  |   Connection connection; | 
			
		
	
		
		
			
				
					
					|  |  |  |   connection["connection"]["type"] = "802-11-wireless"; |  |  |  |   connection["connection"]["type"] = "802-11-wireless"; | 
			
		
	
		
		
			
				
					
					|  |  |  |   connection["connection"]["uuid"] = QUuid::createUuid().toString().remove('{').remove('}'); |  |  |  |   connection["connection"]["uuid"] = QUuid::createUuid().toString().remove('{').remove('}'); | 
			
		
	
	
		
		
			
				
					|  |  | @ -177,7 +177,7 @@ void WifiManager::connect(QByteArray ssid, QString username, QString password, S | 
			
		
	
		
		
			
				
					
					|  |  |  |   connection["802-11-wireless"]["ssid"] = ssid; |  |  |  |   connection["802-11-wireless"]["ssid"] = ssid; | 
			
		
	
		
		
			
				
					
					|  |  |  |   connection["802-11-wireless"]["mode"] = "infrastructure"; |  |  |  |   connection["802-11-wireless"]["mode"] = "infrastructure"; | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |   if (security_type == SecurityType::WPA){ |  |  |  |   if (security_type == SecurityType::WPA) { | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |     connection["802-11-wireless-security"]["key-mgmt"] = "wpa-psk"; |  |  |  |     connection["802-11-wireless-security"]["key-mgmt"] = "wpa-psk"; | 
			
		
	
		
		
			
				
					
					|  |  |  |     connection["802-11-wireless-security"]["auth-alg"] = "open"; |  |  |  |     connection["802-11-wireless-security"]["auth-alg"] = "open"; | 
			
		
	
		
		
			
				
					
					|  |  |  |     connection["802-11-wireless-security"]["psk"] = password; |  |  |  |     connection["802-11-wireless-security"]["psk"] = password; | 
			
		
	
	
		
		
			
				
					|  |  | @ -190,20 +190,20 @@ void WifiManager::connect(QByteArray ssid, QString username, QString password, S | 
			
		
	
		
		
			
				
					
					|  |  |  |   nm_settings.call("AddConnection", QVariant::fromValue(connection)); |  |  |  |   nm_settings.call("AddConnection", QVariant::fromValue(connection)); | 
			
		
	
		
		
			
				
					
					|  |  |  | } |  |  |  | } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | void WifiManager::deactivate_connections(QString ssid){ |  |  |  | void WifiManager::deactivate_connections(QString ssid) { | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |   for (QDBusObjectPath active_connection_raw : get_active_connections()){ |  |  |  |   for (QDBusObjectPath active_connection_raw : get_active_connections()) { | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  |     QString active_connection = active_connection_raw.path(); |  |  |  |     QString active_connection = active_connection_raw.path(); | 
			
		
	
		
		
			
				
					
					|  |  |  |     QDBusInterface nm(nm_service, active_connection, props_iface, bus); |  |  |  |     QDBusInterface nm(nm_service, active_connection, props_iface, bus); | 
			
		
	
		
		
			
				
					
					|  |  |  |     QDBusObjectPath pth = get_response<QDBusObjectPath>(nm.call("Get", connection_iface, "SpecificObject")); |  |  |  |     QDBusObjectPath pth = get_response<QDBusObjectPath>(nm.call("Get", connection_iface, "SpecificObject")); | 
			
		
	
		
		
			
				
					
					|  |  |  |     QString Ssid = get_property(pth.path(), "Ssid"); |  |  |  |     QString Ssid = get_property(pth.path(), "Ssid"); | 
			
		
	
		
		
			
				
					
					|  |  |  |     if (Ssid == ssid){ |  |  |  |     if (Ssid == ssid) { | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |       QDBusInterface nm2(nm_service, nm_path, nm_iface, bus); |  |  |  |       QDBusInterface nm2(nm_service, nm_path, nm_iface, bus); | 
			
		
	
		
		
			
				
					
					|  |  |  |       nm2.call("DeactivateConnection", QVariant::fromValue(active_connection_raw)); |  |  |  |       nm2.call("DeactivateConnection", QVariant::fromValue(active_connection_raw)); | 
			
		
	
		
		
			
				
					
					|  |  |  |     } |  |  |  |     } | 
			
		
	
		
		
			
				
					
					|  |  |  |   } |  |  |  |   } | 
			
		
	
		
		
			
				
					
					|  |  |  | } |  |  |  | } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | QVector<QDBusObjectPath> WifiManager::get_active_connections(){ |  |  |  | QVector<QDBusObjectPath> WifiManager::get_active_connections() { | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |   QDBusInterface nm(nm_service, nm_path, props_iface, bus); |  |  |  |   QDBusInterface nm(nm_service, nm_path, props_iface, bus); | 
			
		
	
		
		
			
				
					
					|  |  |  |   QDBusMessage response = nm.call("Get", nm_iface, "ActiveConnections"); |  |  |  |   QDBusMessage response = nm.call("Get", nm_iface, "ActiveConnections"); | 
			
		
	
		
		
			
				
					
					|  |  |  |   QDBusArgument arr = get_response<QDBusArgument>(response); |  |  |  |   QDBusArgument arr = get_response<QDBusArgument>(response); | 
			
		
	
	
		
		
			
				
					|  |  | @ -211,14 +211,14 @@ QVector<QDBusObjectPath> WifiManager::get_active_connections(){ | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |   QDBusObjectPath path; |  |  |  |   QDBusObjectPath path; | 
			
		
	
		
		
			
				
					
					|  |  |  |   arr.beginArray(); |  |  |  |   arr.beginArray(); | 
			
		
	
		
		
			
				
					
					|  |  |  |   while (!arr.atEnd()){ |  |  |  |   while (!arr.atEnd()) { | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |     arr >> path; |  |  |  |     arr >> path; | 
			
		
	
		
		
			
				
					
					|  |  |  |     conns.push_back(path); |  |  |  |     conns.push_back(path); | 
			
		
	
		
		
			
				
					
					|  |  |  |   } |  |  |  |   } | 
			
		
	
		
		
			
				
					
					|  |  |  |   return conns; |  |  |  |   return conns; | 
			
		
	
		
		
			
				
					
					|  |  |  | } |  |  |  | } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | void WifiManager::clear_connections(QString ssid){ |  |  |  | void WifiManager::clear_connections(QString ssid) { | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |   QDBusInterface nm(nm_service, nm_settings_path, nm_settings_iface, bus); |  |  |  |   QDBusInterface nm(nm_service, nm_settings_path, nm_settings_iface, bus); | 
			
		
	
		
		
			
				
					
					|  |  |  |   QDBusMessage response = nm.call("ListConnections"); |  |  |  |   QDBusMessage response = nm.call("ListConnections"); | 
			
		
	
		
		
			
				
					
					|  |  |  |   QVariant first =  response.arguments().at(0); |  |  |  |   QVariant first =  response.arguments().at(0); | 
			
		
	
	
		
		
			
				
					|  |  | @ -237,9 +237,9 @@ void WifiManager::clear_connections(QString ssid){ | 
			
		
	
		
		
			
				
					
					|  |  |  |     for (QString outer_key : map.keys()) { |  |  |  |     for (QString outer_key : map.keys()) { | 
			
		
	
		
		
			
				
					
					|  |  |  |       QMap<QString,QVariant> innerMap = map.value(outer_key); |  |  |  |       QMap<QString,QVariant> innerMap = map.value(outer_key); | 
			
		
	
		
		
			
				
					
					|  |  |  |       for (QString inner_key : innerMap.keys()) { |  |  |  |       for (QString inner_key : innerMap.keys()) { | 
			
		
	
		
		
			
				
					
					|  |  |  |         if (inner_key == "ssid"){ |  |  |  |         if (inner_key == "ssid") { | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |           QString value = innerMap.value(inner_key).value<QString>(); |  |  |  |           QString value = innerMap.value(inner_key).value<QString>(); | 
			
		
	
		
		
			
				
					
					|  |  |  |           if (value == ssid){ |  |  |  |           if (value == ssid) { | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |             nm2.call("Delete"); |  |  |  |             nm2.call("Delete"); | 
			
		
	
		
		
			
				
					
					|  |  |  |           } |  |  |  |           } | 
			
		
	
		
		
			
				
					
					|  |  |  |         } |  |  |  |         } | 
			
		
	
	
		
		
			
				
					|  |  | @ -248,40 +248,40 @@ void WifiManager::clear_connections(QString ssid){ | 
			
		
	
		
		
			
				
					
					|  |  |  |   } |  |  |  |   } | 
			
		
	
		
		
			
				
					
					|  |  |  | } |  |  |  | } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | void WifiManager::request_scan(){ |  |  |  | void WifiManager::request_scan() { | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |   if (!has_adapter) return; |  |  |  |   if (!has_adapter) return; | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |   QDBusInterface nm(nm_service, adapter, wireless_device_iface, bus); |  |  |  |   QDBusInterface nm(nm_service, adapter, wireless_device_iface, bus); | 
			
		
	
		
		
			
				
					
					|  |  |  |   nm.call("RequestScan",  QVariantMap()); |  |  |  |   nm.call("RequestScan",  QVariantMap()); | 
			
		
	
		
		
			
				
					
					|  |  |  | } |  |  |  | } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | uint WifiManager::get_wifi_device_state(){ |  |  |  | uint WifiManager::get_wifi_device_state() { | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |   QDBusInterface device_props(nm_service, adapter, props_iface, bus); |  |  |  |   QDBusInterface device_props(nm_service, adapter, props_iface, bus); | 
			
		
	
		
		
			
				
					
					|  |  |  |   QDBusMessage response = device_props.call("Get", device_iface, "State"); |  |  |  |   QDBusMessage response = device_props.call("Get", device_iface, "State"); | 
			
		
	
		
		
			
				
					
					|  |  |  |   uint resp = get_response<uint>(response); |  |  |  |   uint resp = get_response<uint>(response); | 
			
		
	
		
		
			
				
					
					|  |  |  |   return resp; |  |  |  |   return resp; | 
			
		
	
		
		
			
				
					
					|  |  |  | } |  |  |  | } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | QString WifiManager::get_active_ap(){ |  |  |  | QString WifiManager::get_active_ap() { | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |   QDBusInterface device_props(nm_service, adapter, props_iface, bus); |  |  |  |   QDBusInterface device_props(nm_service, adapter, props_iface, bus); | 
			
		
	
		
		
			
				
					
					|  |  |  |   QDBusMessage response = device_props.call("Get", wireless_device_iface, "ActiveAccessPoint"); |  |  |  |   QDBusMessage response = device_props.call("Get", wireless_device_iface, "ActiveAccessPoint"); | 
			
		
	
		
		
			
				
					
					|  |  |  |   QDBusObjectPath r = get_response<QDBusObjectPath>(response); |  |  |  |   QDBusObjectPath r = get_response<QDBusObjectPath>(response); | 
			
		
	
		
		
			
				
					
					|  |  |  |   return r.path(); |  |  |  |   return r.path(); | 
			
		
	
		
		
			
				
					
					|  |  |  | } |  |  |  | } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | QByteArray WifiManager::get_property(QString network_path ,QString property){ |  |  |  | QByteArray WifiManager::get_property(QString network_path ,QString property) { | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |   QDBusInterface device_props(nm_service, network_path, props_iface, bus); |  |  |  |   QDBusInterface device_props(nm_service, network_path, props_iface, bus); | 
			
		
	
		
		
			
				
					
					|  |  |  |   QDBusMessage response = device_props.call("Get", ap_iface, property); |  |  |  |   QDBusMessage response = device_props.call("Get", ap_iface, property); | 
			
		
	
		
		
			
				
					
					|  |  |  |   return get_response<QByteArray>(response); |  |  |  |   return get_response<QByteArray>(response); | 
			
		
	
		
		
			
				
					
					|  |  |  | } |  |  |  | } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | unsigned int WifiManager::get_ap_strength(QString network_path){ |  |  |  | unsigned int WifiManager::get_ap_strength(QString network_path) { | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |   QDBusInterface device_props(nm_service, network_path, props_iface, bus); |  |  |  |   QDBusInterface device_props(nm_service, network_path, props_iface, bus); | 
			
		
	
		
		
			
				
					
					|  |  |  |   QDBusMessage response = device_props.call("Get", ap_iface, "Strength"); |  |  |  |   QDBusMessage response = device_props.call("Get", ap_iface, "Strength"); | 
			
		
	
		
		
			
				
					
					|  |  |  |   return get_response<unsigned int>(response); |  |  |  |   return get_response<unsigned int>(response); | 
			
		
	
		
		
			
				
					
					|  |  |  | } |  |  |  | } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | QString WifiManager::get_adapter(){ |  |  |  | QString WifiManager::get_adapter() { | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |   QDBusInterface nm(nm_service, nm_path, nm_iface, bus); |  |  |  |   QDBusInterface nm(nm_service, nm_path, nm_iface, bus); | 
			
		
	
		
		
			
				
					
					|  |  |  |   QDBusMessage response = nm.call("GetDevices"); |  |  |  |   QDBusMessage response = nm.call("GetDevices"); | 
			
		
	
	
		
		
			
				
					|  |  | @ -310,25 +310,25 @@ QString WifiManager::get_adapter(){ | 
			
		
	
		
		
			
				
					
					|  |  |  |   return adapter_path; |  |  |  |   return adapter_path; | 
			
		
	
		
		
			
				
					
					|  |  |  | } |  |  |  | } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | void WifiManager::change(unsigned int new_state,unsigned int previous_state,unsigned int change_reason){ |  |  |  | void WifiManager::change(unsigned int new_state,unsigned int previous_state,unsigned int change_reason) { | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |   raw_adapter_state = new_state; |  |  |  |   raw_adapter_state = new_state; | 
			
		
	
		
		
			
				
					
					|  |  |  |   if (new_state == state_need_auth && change_reason == reason_wrong_password){ |  |  |  |   if (new_state == state_need_auth && change_reason == reason_wrong_password) { | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |     emit wrongPassword(connecting_to_network); |  |  |  |     emit wrongPassword(connecting_to_network); | 
			
		
	
		
		
			
				
					
					|  |  |  |   }else if (new_state == state_connected){ |  |  |  |   } else if (new_state == state_connected) { | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |     connecting_to_network = ""; |  |  |  |     connecting_to_network = ""; | 
			
		
	
		
		
			
				
					
					|  |  |  |   } |  |  |  |   } | 
			
		
	
		
		
			
				
					
					|  |  |  | } |  |  |  | } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | void WifiManager::disconnect(){ |  |  |  | void WifiManager::disconnect() { | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |   QString active_ap = get_active_ap(); |  |  |  |   QString active_ap = get_active_ap(); | 
			
		
	
		
		
			
				
					
					|  |  |  |   if (active_ap!="" && active_ap!="/"){ |  |  |  |   if (active_ap!="" && active_ap!="/") { | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |     deactivate_connections(get_property(active_ap, "Ssid")); |  |  |  |     deactivate_connections(get_property(active_ap, "Ssid")); | 
			
		
	
		
		
			
				
					
					|  |  |  |   } |  |  |  |   } | 
			
		
	
		
		
			
				
					
					|  |  |  | } |  |  |  | } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | //Functions for tethering 
 |  |  |  | //Functions for tethering 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | void WifiManager::enableTethering(){ |  |  |  | void WifiManager::enableTethering() { | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |   disconnect(); |  |  |  |   disconnect(); | 
			
		
	
		
		
			
				
					
					|  |  |  |   Connection connection; |  |  |  |   Connection connection; | 
			
		
	
		
		
			
				
					
					|  |  |  |   connection["connection"]["id"] = "Hotspot"; |  |  |  |   connection["connection"]["id"] = "Hotspot"; | 
			
		
	
	
		
		
			
				
					|  |  | @ -359,11 +359,11 @@ void WifiManager::enableTethering(){ | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | } |  |  |  | } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | void WifiManager::disableTethering(){ |  |  |  | void WifiManager::disableTethering() { | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |   clear_connections(tethering_ssid); |  |  |  |   clear_connections(tethering_ssid); | 
			
		
	
		
		
			
				
					
					|  |  |  | } |  |  |  | } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | bool WifiManager::tetheringEnabled(){ |  |  |  | bool WifiManager::tetheringEnabled() { | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |   QString active_ap = get_active_ap(); |  |  |  |   QString active_ap = get_active_ap(); | 
			
		
	
		
		
			
				
					
					|  |  |  |   return get_property(active_ap, "Ssid") == tethering_ssid; |  |  |  |   return get_property(active_ap, "Ssid") == tethering_ssid; | 
			
		
	
		
		
			
				
					
					|  |  |  | } |  |  |  | } | 
			
		
	
	
		
		
			
				
					|  |  | 
 |