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:
Dan Williams 2012-10-23 16:35:30 -05:00 committed by Dan Winship
parent 7a0887e222
commit fc6753e768

View file

@ -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);