diff options
| author | Michael Biebl <biebl@debian.org> | 2019-12-26 06:49:35 +0100 |
|---|---|---|
| committer | Michael Biebl <biebl@debian.org> | 2019-12-26 06:49:35 +0100 |
| commit | 724bcc5c7be3aed3646ed2b2989c34d438217176 (patch) | |
| tree | e46ca78149b3517bc5ebc9fd31d6d9d11a6561b6 /libnm | |
| parent | 28028b26b3371756811e95d894f709f4b1207c00 (diff) | |
New upstream version 1.22.2 upstream/1.22.2
Diffstat (limited to 'libnm')
| -rw-r--r-- | libnm/libnm.ver | 5 | ||||
| -rw-r--r-- | libnm/nm-client.c | 97 | ||||
| -rw-r--r-- | libnm/nm-client.h | 5 | ||||
| -rw-r--r-- | libnm/nm-libnm-utils.c | 1 |
4 files changed, 107 insertions, 1 deletions
diff --git a/libnm/libnm.ver b/libnm/libnm.ver index fb5a4f64..5e6dd230 100644 --- a/libnm/libnm.ver +++ b/libnm/libnm.ver @@ -1652,3 +1652,8 @@ global: nm_setting_gsm_get_auto_config; nm_setting_ip_config_get_dhcp_hostname_flags; } libnm_1_20_0; + +libnm_1_22_2 { +global: + nm_client_get_capabilities; +} libnm_1_22_0; diff --git a/libnm/nm-client.c b/libnm/nm-client.c index 1a1ed256..eabbe022 100644 --- a/libnm/nm-client.c +++ b/libnm/nm-client.c @@ -222,6 +222,7 @@ NM_GOBJECT_PROPERTIES_DEFINE (NMClient, PROP_DNS_RC_MANAGER, PROP_DNS_CONFIGURATION, PROP_CHECKPOINTS, + PROP_CAPABILITIES, ); enum { @@ -300,6 +301,8 @@ typedef struct { NMLDBusPropertyAO property_ao[_PROPERTY_AO_IDX_NM_NUM]; char *connectivity_check_uri; char *version; + guint32 *capabilities_arr; + gsize capabilities_len; guint32 connectivity; guint32 state; guint32 metered; @@ -6023,6 +6026,64 @@ _notify_update_prop_dns_manager_configuration (NMClient *self, return NML_DBUS_NOTIFY_UPDATE_PROP_FLAGS_NOTIFY; } +/** + * nm_client_get_capabilities: + * @client: the #NMClient instance + * @length: (out) (allow-none): the number of returned capabilities. + * + * Returns: (transfer none) (array length=length): the + * list of capabilities reported by the server or %NULL + * if the capabilities are unknown. + * The numeric values correspond to #NMCapability enum. + * The array is terminated by a numeric zero sentinel + * at position @length. + * + * Since: 1.24, 1.22.2 + */ +const guint32 * +nm_client_get_capabilities (NMClient *client, + gsize *length) +{ + NMClientPrivate *priv; + + g_return_val_if_fail (NM_IS_CLIENT (client), NULL); + g_return_val_if_fail (length, NULL); + + priv = NM_CLIENT_GET_PRIVATE (client); + + NM_SET_OUT (length, priv->nm.capabilities_len); + return priv->nm.capabilities_arr; +} + +static NMLDBusNotifyUpdatePropFlags +_notify_update_prop_nm_capabilities (NMClient *self, + NMLDBusObject *dbobj, + const NMLDBusMetaIface *meta_iface, + guint dbus_property_idx, + GVariant *value) +{ + NMClientPrivate *priv = NM_CLIENT_GET_PRIVATE (self); + + nm_assert (G_OBJECT (self) == dbobj->nmobj); + + nm_clear_g_free (&priv->nm.capabilities_arr); + priv->nm.capabilities_len = 0; + + if (value) { + const guint32 *arr; + gsize len; + + arr = g_variant_get_fixed_array (value, &len, sizeof (guint32)); + priv->nm.capabilities_len = len; + priv->nm.capabilities_arr = g_new (guint32, len + 1); + if (len > 0) + memcpy (priv->nm.capabilities_arr, arr, len * sizeof (guint32)); + priv->nm.capabilities_arr[len] = 0; + } + + return NML_DBUS_NOTIFY_UPDATE_PROP_FLAGS_NOTIFY; +} + /*****************************************************************************/ /** @@ -6896,6 +6957,8 @@ _init_start_bus_get_cb (GObject *source, GAsyncResult *result, gpointer user_dat priv->dbus_connection = dbus_connection; _init_start_with_bus (self); + + _notify (self, PROP_DBUS_CONNECTION); } static void @@ -7001,6 +7064,20 @@ get_property (GObject *object, guint prop_id, case PROP_CHECKPOINTS: g_value_take_boxed (value, _nm_utils_copy_object_array (nm_client_get_checkpoints (self))); break; + case PROP_CAPABILITIES: { + const guint32 *arr; + GArray *out; + gsize len; + + arr = nm_client_get_capabilities (self, &len); + if (arr) { + out = g_array_new (TRUE, FALSE, sizeof (guint32)); + g_array_append_vals (out, arr, len); + } else + out = NULL; + g_value_take_boxed (value, out); + } + break; /* Settings properties. */ case PROP_CONNECTIONS: @@ -7379,6 +7456,9 @@ dispose (GObject *object) g_clear_object (&priv->context_busy_watcher); nm_clear_g_free (&priv->name_owner); + + priv->nm.capabilities_len = 0; + nm_clear_g_free (&priv->nm.capabilities_arr); } const NMLDBusMetaIface _nml_dbus_meta_iface_nm_agentmanager = NML_DBUS_META_IFACE_INIT ( @@ -7395,7 +7475,7 @@ const NMLDBusMetaIface _nml_dbus_meta_iface_nm = NML_DBUS_META_IFACE_INIT_PROP ( NML_DBUS_META_PROPERTY_INIT_O_PROP ("ActivatingConnection", PROP_ACTIVATING_CONNECTION, NMClient, _priv.nm.property_o[PROPERTY_O_IDX_NM_ACTIVATING_CONNECTION], nm_active_connection_get_type ), NML_DBUS_META_PROPERTY_INIT_AO_PROP ("ActiveConnections", PROP_ACTIVE_CONNECTIONS, NMClient, _priv.nm.property_ao[PROPERTY_AO_IDX_ACTIVE_CONNECTIONS], nm_active_connection_get_type, .notify_changed_ao = _property_ao_notify_changed_active_connections_cb ), NML_DBUS_META_PROPERTY_INIT_AO_PROP ("AllDevices", PROP_ALL_DEVICES, NMClient, _priv.nm.property_ao[PROPERTY_AO_IDX_ALL_DEVICES], nm_device_get_type, .notify_changed_ao = _property_ao_notify_changed_all_devices_cb ), - NML_DBUS_META_PROPERTY_INIT_IGNORE ("Capabilities", "au" ), + NML_DBUS_META_PROPERTY_INIT_FCN ("Capabilities", PROP_CAPABILITIES, "au", _notify_update_prop_nm_capabilities, ), NML_DBUS_META_PROPERTY_INIT_AO_PROP ("Checkpoints", PROP_CHECKPOINTS, NMClient, _priv.nm.property_ao[PROPERTY_AO_IDX_CHECKPOINTS], nm_checkpoint_get_type ), NML_DBUS_META_PROPERTY_INIT_U ("Connectivity", PROP_CONNECTIVITY, NMClient, _priv.nm.connectivity ), NML_DBUS_META_PROPERTY_INIT_B ("ConnectivityCheckAvailable", PROP_CONNECTIVITY_CHECK_AVAILABLE, NMClient, _priv.nm.connectivity_check_available ), @@ -7832,6 +7912,21 @@ nm_client_class_init (NMClientClass *client_class) G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); + /** + * NMClient:capabilities: (type GArray(guint32)) + * + * The list of capabilities numbers as guint32 or %NULL if + * there are no capabitilies. The numeric value correspond + * to %NMCapability enum. + * + * Since: 1.24, 1.22.2 + */ + obj_properties[PROP_CAPABILITIES] = + g_param_spec_boxed (NM_CLIENT_CAPABILITIES, "", "", + G_TYPE_ARRAY, + G_PARAM_READABLE | + G_PARAM_STATIC_STRINGS); + _nml_dbus_meta_class_init_with_properties (object_class, &_nml_dbus_meta_iface_nm, &_nml_dbus_meta_iface_nm_settings, &_nml_dbus_meta_iface_nm_dnsmanager); diff --git a/libnm/nm-client.h b/libnm/nm-client.h index ad17bf38..8af956b4 100644 --- a/libnm/nm-client.h +++ b/libnm/nm-client.h @@ -63,6 +63,7 @@ _NM_DEPRECATED_SYNC_WRITABLE_PROPERTY #define NM_CLIENT_DNS_RC_MANAGER "dns-rc-manager" #define NM_CLIENT_DNS_CONFIGURATION "dns-configuration" #define NM_CLIENT_CHECKPOINTS "checkpoints" +#define NM_CLIENT_CAPABILITIES "capabilities" #define NM_CLIENT_DEVICE_ADDED "device-added" #define NM_CLIENT_DEVICE_REMOVED "device-removed" @@ -236,6 +237,10 @@ NMMetered nm_client_get_metered (NMClient *client); gboolean nm_client_networking_get_enabled (NMClient *client); +NM_AVAILABLE_IN_1_22_2 +const guint32 *nm_client_get_capabilities (NMClient *client, + gsize *length); + _NM_DEPRECATED_SYNC_METHOD gboolean nm_client_networking_set_enabled (NMClient *client, gboolean enabled, diff --git a/libnm/nm-libnm-utils.c b/libnm/nm-libnm-utils.c index 73de75e3..98c7e857 100644 --- a/libnm/nm-libnm-utils.c +++ b/libnm/nm-libnm-utils.c @@ -926,6 +926,7 @@ nm_utils_g_param_spec_is_default (const GParamSpec *pspec) return ((((GParamSpecString *) pspec)->default_value) == NULL); if (NM_IN_SET (pspec->value_type, G_TYPE_BYTES, G_TYPE_PTR_ARRAY, + G_TYPE_ARRAY, G_TYPE_HASH_TABLE, G_TYPE_STRV)) { /* boxed types have NULL default. */ |