mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git
synced 2025-12-26 04:10:14 +01:00
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.
This commit is contained in:
parent
0601b5d725
commit
2be6515dd0
3 changed files with 87 additions and 0 deletions
|
|
@ -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
|
||||
|
|
@ -215,6 +248,28 @@ nm_setting_vpn_get_data_item (NMSettingVpn *setting, const char *key)
|
|||
return (const char *) g_hash_table_lookup (NM_SETTING_VPN_GET_PRIVATE (setting)->data, 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
|
||||
|
|
@ -347,6 +402,28 @@ nm_setting_vpn_get_secret (NMSettingVpn *setting, const char *key)
|
|||
return (const char *) g_hash_table_lookup (NM_SETTING_VPN_GET_PRIVATE (setting)->secrets, 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
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue