network: support new AP-mode hotspot functionality
Recent NetworkManager can create AP-mode hotspots instead of Ad-Hoc mode ones, which are less compatible with mobile devices. Do that if NetworkManager and the device support it. https://bugzilla.gnome.org/show_bug.cgi?id=686732
This commit is contained in:
parent
7a0887e222
commit
fc6753e768
1 changed files with 18 additions and 3 deletions
|
@ -374,12 +374,18 @@ device_get_hotspot_security_details (NetDeviceWifi *device_wifi,
|
||||||
tmp_secret = NULL;
|
tmp_secret = NULL;
|
||||||
tmp_security = C_("Wifi security", "None");
|
tmp_security = C_("Wifi security", "None");
|
||||||
|
|
||||||
|
/* Key management values:
|
||||||
|
* "none" = WEP
|
||||||
|
* "wpa-none" = WPAv1 Ad-Hoc mode (not supported in NM >= 0.9.4)
|
||||||
|
* "wpa-psk" = WPAv2 Ad-Hoc mode (eg IBSS RSN) and AP-mode WPA v1 and v2
|
||||||
|
*/
|
||||||
key_mgmt = nm_setting_wireless_security_get_key_mgmt (sws);
|
key_mgmt = nm_setting_wireless_security_get_key_mgmt (sws);
|
||||||
if (strcmp (key_mgmt, "none") == 0) {
|
if (strcmp (key_mgmt, "none") == 0) {
|
||||||
tmp_secret = nm_setting_wireless_security_get_wep_key (sws, 0);
|
tmp_secret = nm_setting_wireless_security_get_wep_key (sws, 0);
|
||||||
tmp_security = _("WEP");
|
tmp_security = _("WEP");
|
||||||
}
|
}
|
||||||
else if (strcmp (key_mgmt, "wpa-none") == 0) {
|
else if (strcmp (key_mgmt, "wpa-none") == 0 ||
|
||||||
|
strcmp (key_mgmt, "wpa-psk") == 0) {
|
||||||
tmp_secret = nm_setting_wireless_security_get_psk (sws);
|
tmp_secret = nm_setting_wireless_security_get_psk (sws);
|
||||||
tmp_security = _("WPA");
|
tmp_security = _("WPA");
|
||||||
} else {
|
} else {
|
||||||
|
@ -893,7 +899,8 @@ is_hotspot_connection (NMConnection *connection)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
sw = nm_connection_get_setting_wireless (connection);
|
sw = nm_connection_get_setting_wireless (connection);
|
||||||
if (g_strcmp0 (nm_setting_wireless_get_mode (sw), "adhoc") != 0) {
|
if (g_strcmp0 (nm_setting_wireless_get_mode (sw), "adhoc") != 0 &&
|
||||||
|
g_strcmp0 (nm_setting_wireless_get_mode (sw), "ap") != 0) {
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
if (g_strcmp0 (nm_setting_wireless_get_security (sw), "802-11-wireless-security") != 0) {
|
if (g_strcmp0 (nm_setting_wireless_get_security (sw), "802-11-wireless-security") != 0) {
|
||||||
|
@ -970,6 +977,7 @@ start_shared_connection (NetDeviceWifi *device_wifi)
|
||||||
GSList *connections;
|
GSList *connections;
|
||||||
GSList *l;
|
GSList *l;
|
||||||
NMClient *client;
|
NMClient *client;
|
||||||
|
const char *mode;
|
||||||
|
|
||||||
device = net_device_get_nm_device (NET_DEVICE (device_wifi));
|
device = net_device_get_nm_device (NET_DEVICE (device_wifi));
|
||||||
g_assert (nm_device_get_device_type (device) == NM_DEVICE_TYPE_WIFI);
|
g_assert (nm_device_get_device_type (device) == NM_DEVICE_TYPE_WIFI);
|
||||||
|
@ -1009,8 +1017,15 @@ start_shared_connection (NetDeviceWifi *device_wifi)
|
||||||
nm_connection_add_setting (c, (NMSetting *)sc);
|
nm_connection_add_setting (c, (NMSetting *)sc);
|
||||||
|
|
||||||
sw = (NMSettingWireless *)nm_setting_wireless_new ();
|
sw = (NMSettingWireless *)nm_setting_wireless_new ();
|
||||||
|
|
||||||
|
/* Use real AP mode if the device supports it */
|
||||||
|
if (nm_device_wifi_get_capabilities (NM_DEVICE_WIFI (device)) & NM_WIFI_DEVICE_CAP_AP)
|
||||||
|
mode = NM_SETTING_WIRELESS_MODE_AP;
|
||||||
|
else
|
||||||
|
mode = NM_SETTING_WIRELESS_MODE_ADHOC;
|
||||||
|
|
||||||
g_object_set (sw,
|
g_object_set (sw,
|
||||||
"mode", "adhoc",
|
"mode", mode,
|
||||||
"security", "802-11-wireless-security",
|
"security", "802-11-wireless-security",
|
||||||
NULL);
|
NULL);
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue