diff options
author | Benjamin Berg <bberg@redhat.com> | 2020-10-12 18:39:37 +0200 |
---|---|---|
committer | Thomas Haller <thaller@redhat.com> | 2020-12-08 15:20:17 +0100 |
commit | 9adf2e17a5a07b4818cfe189d321579633a3e8d3 (patch) | |
tree | 08067e5906e59c69246e09485876d9e94081e348 | |
parent | 111c35b85682245efa83ad2fa2fd524d1a4a6cb3 (diff) | |
download | NetworkManager-9adf2e17a5a07b4818cfe189d321579633a3e8d3.tar.gz |
wifi: re-add code for tracking a peers groups
The code to track the property was accidentally removed in commit
21d4a2618868 ('core: remove code for unused NM_WIFI_P2P_PEER_GROUPS property')
causing all P2P connections to fail after 5 seconds.
Fixes: 21d4a2618868 ('core: remove code for unused NM_WIFI_P2P_PEER_GROUPS property')
https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/issues/551
https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/650
(cherry picked from commit dc54a946acb968c73f8d55e01c61efedb4ae6cc1)
(cherry picked from commit 9cd4968b7b5eee656fbd81fcdf30381fb985d473)
(cherry picked from commit b5310115d1b9ebecb12748dd0e51066d3f4d8152)
-rw-r--r-- | src/devices/wifi/nm-wifi-p2p-peer.c | 15 | ||||
-rw-r--r-- | src/supplicant/nm-supplicant-interface.c | 9 | ||||
-rw-r--r-- | src/supplicant/nm-supplicant-types.h | 2 |
3 files changed, 23 insertions, 3 deletions
diff --git a/src/devices/wifi/nm-wifi-p2p-peer.c b/src/devices/wifi/nm-wifi-p2p-peer.c index c58bd95e29..7a983e4015 100644 --- a/src/devices/wifi/nm-wifi-p2p-peer.c +++ b/src/devices/wifi/nm-wifi-p2p-peer.c @@ -48,7 +48,8 @@ struct _NMWifiP2PPeerPrivate { char * address; GBytes * wfd_ies; - char ** groups; + + const char ** groups; guint8 strength; @@ -282,7 +283,7 @@ nm_wifi_p2p_peer_get_groups (const NMWifiP2PPeer *peer) { g_return_val_if_fail (NM_IS_WIFI_P2P_PEER (peer), NULL); - return (const char *const*) NM_WIFI_P2P_PEER_GET_PRIVATE (peer)->groups; + return NM_WIFI_P2P_PEER_GET_PRIVATE (peer)->groups; } const char * @@ -410,6 +411,14 @@ nm_wifi_p2p_peer_update_from_properties (NMWifiP2PPeer *peer, changed |= nm_wifi_p2p_peer_set_wfd_ies (peer, peer_info->ies); changed |= nm_wifi_p2p_peer_set_last_seen (peer, peer_info->last_seen_msec / 1000u); + /* We currently only use the groups information internally to check if + * the peer is still joined. */ + if (!_nm_utils_strv_equal ((char **) priv->groups, (char **) peer_info->groups)) { + g_free (priv->groups); + priv->groups = nm_utils_strv_dup_packed (peer_info->groups, -1); + changed |= TRUE; + } + g_object_thaw_notify (G_OBJECT (peer)); return changed; @@ -574,7 +583,7 @@ finalize (GObject *object) g_free (priv->serial); g_free (priv->address); g_bytes_unref (priv->wfd_ies); - g_strfreev (priv->groups); + g_free (priv->groups); G_OBJECT_CLASS (nm_wifi_p2p_peer_parent_class)->finalize (object); } diff --git a/src/supplicant/nm-supplicant-interface.c b/src/supplicant/nm-supplicant-interface.c index 6ad52423ea..0fcfe53445 100644 --- a/src/supplicant/nm-supplicant-interface.c +++ b/src/supplicant/nm-supplicant-interface.c @@ -842,6 +842,7 @@ _peer_info_destroy (NMSupplicantPeerInfo *peer_info) g_free (peer_info->model); g_free (peer_info->model_number); g_free (peer_info->serial); + g_free (peer_info->groups); g_bytes_unref (peer_info->ies); nm_ref_string_unref (peer_info->peer_path); @@ -869,6 +870,7 @@ _peer_info_properties_changed (NMSupplicantInterface *self, { GVariant *v_v; const char *v_s; + const char **v_strv; gint32 v_i32; const guint8 *arr_data; gsize arr_len; @@ -893,6 +895,13 @@ _peer_info_properties_changed (NMSupplicantInterface *self, if (nm_g_variant_lookup (properties, "Serial", "&s", &v_s)) nm_utils_strdup_reset (&peer_info->serial, v_s); + if (nm_g_variant_lookup (properties, "Groups", "^a&o", &v_strv)) { + g_free (peer_info->groups); + peer_info->groups = nm_utils_strv_dup_packed (v_strv, -1); + + g_free (v_strv); + } + v_v = nm_g_variant_lookup_value (properties, "DeviceAddress", G_VARIANT_TYPE_BYTESTRING); if (v_v) { arr_data = g_variant_get_fixed_array (v_v, &arr_len, 1); diff --git a/src/supplicant/nm-supplicant-types.h b/src/supplicant/nm-supplicant-types.h index 734ff1562b..f573c03127 100644 --- a/src/supplicant/nm-supplicant-types.h +++ b/src/supplicant/nm-supplicant-types.h @@ -187,6 +187,8 @@ typedef struct _NMSupplicantPeerInfo{ char *model_number; char *serial; + const char **groups; + GBytes *ies; gint64 last_seen_msec; |