summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2017-11-20 16:57:04 +0100
committerThomas Haller <thaller@redhat.com>2017-11-23 14:44:25 +0100
commit2be6515dd076af720635b1a9506ac43e4251ace0 (patch)
treebbcdc493fe8425ca9195414a658d7f6698c94362
parent0601b5d725b072bd3ce4ec60be867898a16f85cd (diff)
downloadNetworkManager-2be6515dd076af720635b1a9506ac43e4251ace0.tar.gz
libnm: add nm_setting_vpn_get_data_keys() and nm_setting_vpn_get_secret_keys() API
It's rather limiting that the only API to access *all* keys is nm_setting_vpn_foreach_data_item() and nm_setting_vpn_foreach_secret(). API like nm_setting_vpn_get_num_secrets() is not useful, at least as long as you cannot access the item by index.
-rw-r--r--libnm-core/nm-setting-vpn.c77
-rw-r--r--libnm-core/nm-setting-vpn.h8
-rw-r--r--libnm/libnm.ver2
3 files changed, 87 insertions, 0 deletions
diff --git a/libnm-core/nm-setting-vpn.c b/libnm-core/nm-setting-vpn.c
index 29312c297c..c13037b281 100644
--- a/libnm-core/nm-setting-vpn.c
+++ b/libnm-core/nm-setting-vpn.c
@@ -155,6 +155,39 @@ nm_setting_vpn_get_persistent (NMSettingVpn *setting)
return NM_SETTING_VPN_GET_PRIVATE (setting)->persistent;
}
+static const char **
+_get_keys (NMSettingVpn *setting,
+ gboolean is_secrets,
+ guint *out_length)
+{
+ NMSettingVpnPrivate *priv;
+ GHashTable *hash;
+ const char **keys;
+ guint len;
+
+ nm_assert (NM_IS_SETTING_VPN (setting));
+
+ priv = NM_SETTING_VPN_GET_PRIVATE (setting);
+
+ hash = is_secrets ? priv->secrets : priv->data;
+
+ if (!g_hash_table_size (hash)) {
+ NM_SET_OUT (out_length, 0);
+ return NULL;
+ }
+
+ keys = (const char **) g_hash_table_get_keys_as_array (hash, &len);
+ if (len > 1) {
+ g_qsort_with_data (keys,
+ len,
+ sizeof (const char *),
+ nm_strcmp_p_with_data,
+ NULL);
+ }
+ NM_SET_OUT (out_length, len);
+ return keys;
+}
+
/**
* nm_setting_vpn_get_num_data_items:
* @setting: the #NMSettingVpn
@@ -216,6 +249,28 @@ nm_setting_vpn_get_data_item (NMSettingVpn *setting, const char *key)
}
/**
+ * nm_setting_vpn_get_data_keys:
+ * @setting: the #NMSettingVpn
+ * @out_length: (allow-none): (out): the length of the returned array
+ *
+ * Retrieves every data key inside @setting, as an array.
+ *
+ * Returns: (array length=out_length) (transfer container): a
+ * %NULL-terminated array containing each data key or %NULL if
+ * there are no data items.
+ *
+ * Since: 1.12
+ */
+const char **
+nm_setting_vpn_get_data_keys (NMSettingVpn *setting,
+ guint *out_length)
+{
+ g_return_val_if_fail (NM_IS_SETTING_VPN (setting), NULL);
+
+ return _get_keys (setting, FALSE, out_length);
+}
+
+/**
* nm_setting_vpn_remove_data_item:
* @setting: the #NMSettingVpn
* @key: the name of the data item to remove
@@ -348,6 +403,28 @@ nm_setting_vpn_get_secret (NMSettingVpn *setting, const char *key)
}
/**
+ * nm_setting_vpn_get_secret_keys:
+ * @setting: the #NMSettingVpn
+ * @out_length: (allow-none): (out): the length of the returned array
+ *
+ * Retrieves every secret key inside @setting, as an array.
+ *
+ * Returns: (array length=out_length) (transfer container): a
+ * %NULL-terminated array containing each secret key or %NULL if
+ * there are no secrets.
+ *
+ * Since: 1.12
+ */
+const char **
+nm_setting_vpn_get_secret_keys (NMSettingVpn *setting,
+ guint *out_length)
+{
+ g_return_val_if_fail (NM_IS_SETTING_VPN (setting), NULL);
+
+ return _get_keys (setting, TRUE, out_length);
+}
+
+/**
* nm_setting_vpn_remove_secret:
* @setting: the #NMSettingVpn
* @key: the name of the secret to remove
diff --git a/libnm-core/nm-setting-vpn.h b/libnm-core/nm-setting-vpn.h
index 115aa8676e..1f1576fdfe 100644
--- a/libnm-core/nm-setting-vpn.h
+++ b/libnm-core/nm-setting-vpn.h
@@ -90,6 +90,9 @@ gboolean nm_setting_vpn_remove_data_item (NMSettingVpn *setting,
void nm_setting_vpn_foreach_data_item (NMSettingVpn *setting,
NMVpnIterFunc func,
gpointer user_data);
+NM_AVAILABLE_IN_1_12
+const char ** nm_setting_vpn_get_data_keys (NMSettingVpn *setting,
+ guint *out_length);
guint32 nm_setting_vpn_get_num_secrets (NMSettingVpn *setting);
void nm_setting_vpn_add_secret (NMSettingVpn *setting,
@@ -102,6 +105,11 @@ gboolean nm_setting_vpn_remove_secret (NMSettingVpn *setting,
void nm_setting_vpn_foreach_secret (NMSettingVpn *setting,
NMVpnIterFunc func,
gpointer user_data);
+NM_AVAILABLE_IN_1_12
+const char ** nm_setting_vpn_get_secret_keys (NMSettingVpn *setting,
+ guint *out_length);
+
+
NM_AVAILABLE_IN_1_2
guint32 nm_setting_vpn_get_timeout (NMSettingVpn *setting);
diff --git a/libnm/libnm.ver b/libnm/libnm.ver
index 5e9feaffc8..aad581698b 100644
--- a/libnm/libnm.ver
+++ b/libnm/libnm.ver
@@ -1258,4 +1258,6 @@ global:
nm_setting_team_port_get_lacp_key;
nm_setting_team_remove_runner_tx_hash;
nm_setting_team_remove_runner_tx_hash_by_value;
+ nm_setting_vpn_get_data_keys;
+ nm_setting_vpn_get_secret_keys;
} libnm_1_10_0;