diff options
-rw-r--r-- | libnm-core/nm-setting-vpn.c | 77 | ||||
-rw-r--r-- | libnm-core/nm-setting-vpn.h | 8 | ||||
-rw-r--r-- | libnm/libnm.ver | 2 |
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; |