summaryrefslogtreecommitdiff
path: root/src/core/devices
diff options
context:
space:
mode:
authorAndrew Zaborowski <andrew.zaborowski@intel.com>2021-11-09 02:39:11 +0100
committerThomas Haller <thaller@redhat.com>2022-01-21 11:13:58 +0100
commit932712d73c05890960e0d197080b0832061f939a (patch)
tree7f3e49c8af17d20711afb04365f3b1054ef8dcf7 /src/core/devices
parente6e3fad4e444ed9ac41053cb620634282fea54e4 (diff)
downloadNetworkManager-932712d73c05890960e0d197080b0832061f939a.tar.gz
wifi: Add IWD-specific NMWifiP2PPeer constructors
[thaller@redhat.com: modify original patch to use nm_g_variant_unref() and add missing #define]
Diffstat (limited to 'src/core/devices')
-rw-r--r--src/core/devices/wifi/nm-iwd-manager.h1
-rw-r--r--src/core/devices/wifi/nm-wifi-p2p-peer.c54
-rw-r--r--src/core/devices/wifi/nm-wifi-p2p-peer.h2
3 files changed, 57 insertions, 0 deletions
diff --git a/src/core/devices/wifi/nm-iwd-manager.h b/src/core/devices/wifi/nm-iwd-manager.h
index 3653022671..b0298259b2 100644
--- a/src/core/devices/wifi/nm-iwd-manager.h
+++ b/src/core/devices/wifi/nm-iwd-manager.h
@@ -25,6 +25,7 @@
#define NM_IWD_AP_INTERFACE "net.connman.iwd.AccessPoint"
#define NM_IWD_ADHOC_INTERFACE "net.connman.iwd.AdHoc"
#define NM_IWD_STATION_INTERFACE "net.connman.iwd.Station"
+#define NM_IWD_P2P_PEER_INTERFACE "net.connman.iwd.p2p.Peer"
#define NM_TYPE_IWD_MANAGER (nm_iwd_manager_get_type())
#define NM_IWD_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), NM_TYPE_IWD_MANAGER, NMIwdManager))
diff --git a/src/core/devices/wifi/nm-wifi-p2p-peer.c b/src/core/devices/wifi/nm-wifi-p2p-peer.c
index 0c8f9ba776..103d21d311 100644
--- a/src/core/devices/wifi/nm-wifi-p2p-peer.c
+++ b/src/core/devices/wifi/nm-wifi-p2p-peer.c
@@ -18,6 +18,7 @@
#include "nm-setting-wireless.h"
#include "nm-utils.h"
#include "nm-wifi-utils.h"
+#include "nm-iwd-manager.h"
#include "libnm-platform/nm-platform.h"
#include "supplicant/nm-supplicant-types.h"
@@ -419,6 +420,48 @@ nm_wifi_p2p_peer_update_from_properties(NMWifiP2PPeer *peer, const NMSupplicantP
return changed;
}
+gboolean
+nm_wifi_p2p_peer_update_from_iwd_object(NMWifiP2PPeer *peer, GDBusObject *obj)
+{
+ NMWifiP2PPeerPrivate *priv;
+ gboolean changed = FALSE;
+ nm_auto_ref_string NMRefString *peer_path = NULL;
+ gs_unref_object GDBusProxy *peer_proxy = NULL;
+ GVariant *value;
+
+ g_return_val_if_fail(NM_IS_WIFI_P2P_PEER(peer), FALSE);
+
+ peer_proxy = G_DBUS_PROXY(g_dbus_object_get_interface(obj, NM_IWD_P2P_PEER_INTERFACE));
+ g_return_val_if_fail(peer_proxy, FALSE);
+
+ peer_path = nm_ref_string_new(g_dbus_object_get_object_path(obj));
+ priv = NM_WIFI_P2P_PEER_GET_PRIVATE(peer);
+ nm_assert(!priv->supplicant_path || priv->supplicant_path == peer_path);
+
+ g_object_freeze_notify(G_OBJECT(peer));
+
+ if (!priv->supplicant_path) {
+ priv->supplicant_path = g_steal_pointer(&peer_path);
+ changed = TRUE;
+ }
+
+ value = g_dbus_proxy_get_cached_property(peer_proxy, "Name");
+ if (value && g_variant_is_of_type(value, G_VARIANT_TYPE_STRING))
+ changed |= nm_wifi_p2p_peer_set_name(peer, g_variant_get_string(value, NULL));
+ else
+ changed |= nm_wifi_p2p_peer_set_name(peer, "");
+ nm_g_variant_unref(value);
+
+ value = g_dbus_proxy_get_cached_property(peer_proxy, "Address");
+ if (value && g_variant_is_of_type(value, G_VARIANT_TYPE_STRING))
+ changed |= nm_wifi_p2p_peer_set_address(peer, g_variant_get_string(value, NULL));
+ nm_g_variant_unref(value);
+
+ g_object_thaw_notify(G_OBJECT(peer));
+
+ return changed;
+}
+
const char *
nm_wifi_p2p_peer_to_string(const NMWifiP2PPeer *self, char *str_buf, gsize buf_len, gint32 now_s)
{
@@ -559,6 +602,17 @@ nm_wifi_p2p_peer_new_from_properties(const NMSupplicantPeerInfo *peer_info)
return peer;
}
+NMWifiP2PPeer *
+nm_wifi_p2p_peer_new_from_iwd_object(GDBusObject *obj)
+{
+ NMWifiP2PPeer *peer;
+
+ /* TODO: Set the flags here */
+ peer = g_object_new(NM_TYPE_WIFI_P2P_PEER, NULL);
+ nm_wifi_p2p_peer_update_from_iwd_object(peer, obj);
+ return peer;
+}
+
static void
finalize(GObject *object)
{
diff --git a/src/core/devices/wifi/nm-wifi-p2p-peer.h b/src/core/devices/wifi/nm-wifi-p2p-peer.h
index f8a2890dff..f7ffbf385d 100644
--- a/src/core/devices/wifi/nm-wifi-p2p-peer.h
+++ b/src/core/devices/wifi/nm-wifi-p2p-peer.h
@@ -45,9 +45,11 @@ struct _NMSupplicantPeerInfo;
GType nm_wifi_p2p_peer_get_type(void);
NMWifiP2PPeer *nm_wifi_p2p_peer_new_from_properties(const struct _NMSupplicantPeerInfo *peer_info);
+NMWifiP2PPeer *nm_wifi_p2p_peer_new_from_iwd_object(GDBusObject *obj);
gboolean nm_wifi_p2p_peer_update_from_properties(NMWifiP2PPeer *peer,
const struct _NMSupplicantPeerInfo *peer_info);
+gboolean nm_wifi_p2p_peer_update_from_iwd_object(NMWifiP2PPeer *peer, GDBusObject *obj);
gboolean nm_wifi_p2p_peer_check_compatible(NMWifiP2PPeer *self, NMConnection *connection);