diff options
Diffstat (limited to 'src/mcd-account.c')
-rw-r--r-- | src/mcd-account.c | 68 |
1 files changed, 48 insertions, 20 deletions
diff --git a/src/mcd-account.c b/src/mcd-account.c index 7cd78d99..2d2a5215 100644 --- a/src/mcd-account.c +++ b/src/mcd-account.c @@ -51,6 +51,7 @@ #include "mcd-misc.h" #include "mcd-signals-marshal.h" #include "mcd-manager.h" +#include "mcd-manager-priv.h" #include "mcd-master.h" #include "mcd-master-priv.h" #include "mcd-dbusprop.h" @@ -350,13 +351,14 @@ _migrate_secrets_get_cb (McdAccount *account, const GError *error, gpointer user_data) { - const gchar *name = user_data; + gchar *name = user_data; if (error != NULL || value == NULL) return; set_parameter (account, name, value, _migrate_secrets_set_cb, user_data); + g_free (name); } static void @@ -377,9 +379,10 @@ _mcd_account_migrate_secrets (McdAccount *account) { if (p->flags & TP_CONN_MGR_PARAM_FLAG_SECRET) { - get_parameter_from_file (account, p->name, _migrate_secrets_get_cb, - p->name); + gchar *name = g_strdup (p->name); + get_parameter_from_file (account, name, _migrate_secrets_get_cb, + name); } } } @@ -2122,12 +2125,20 @@ mcd_account_get_parameter (McdAccount *account, const gchar *name, typedef struct { McdAccount *account; + TpConnectionManagerProtocol *protocol; const TpConnectionManagerParam *param; CheckParametersCb callback; gpointer user_data; } CheckParameterData; static void +check_parameter_data_free (CheckParameterData *data) +{ + _mcd_manager_protocol_free (data->protocol); + g_slice_free (CheckParameterData, data); +} + +static void check_parameters_get_param_cb (McdAccount *account, const GValue *value, const GError *error, gpointer user_data) { @@ -2137,7 +2148,7 @@ check_parameters_get_param_cb (McdAccount *account, const GValue *value, if ((account != NULL && value == NULL) || error != NULL) { data->callback (data->account, FALSE, data->user_data); - g_slice_free (CheckParameterData, data); + check_parameter_data_free (data); } else { @@ -2156,7 +2167,7 @@ check_parameters_get_param_cb (McdAccount *account, const GValue *value, else { data->callback (data->account, TRUE, data->user_data); - g_slice_free (CheckParameterData, data); + check_parameter_data_free (data); } } } @@ -2167,21 +2178,24 @@ mcd_account_check_parameters (McdAccount *account, gpointer user_data) { McdAccountPrivate *priv = account->priv; - const TpConnectionManagerParam *param; + TpConnectionManagerProtocol *protocol; CheckParameterData *data; DEBUG ("called for %s", priv->unique_name); - param = mcd_manager_get_parameters (priv->manager, priv->protocol_name); - if (!param) + protocol = _mcd_manager_dup_protocol (priv->manager, priv->protocol_name); + + if (protocol == NULL) { if (callback != NULL) callback (account, FALSE, user_data); + return; } data = g_slice_new0 (CheckParameterData); data->account = account; - data->param = param; + data->protocol = protocol; + data->param = protocol->params; data->callback = callback; data->user_data = user_data; @@ -2229,6 +2243,7 @@ typedef struct GHashTableIter iter; gchar **unset; gchar **unset_iter; + TpConnectionManagerProtocol *protocol; const TpConnectionManagerParam *param; const GValue *new; guint n_params; @@ -2253,6 +2268,8 @@ set_parameters_data_free (SetParametersData *data) if (data->dbus_properties != NULL) g_slist_free (data->dbus_properties); + _mcd_manager_protocol_free (data->protocol); + g_slice_free (SetParametersData, data); } @@ -2493,12 +2510,12 @@ _mcd_account_set_parameters (McdAccount *account, GHashTable *params, gpointer user_data) { McdAccountPrivate *priv = account->priv; - const TpConnectionManagerParam *param; GSList *dbus_properties = NULL; GPtrArray *not_yet = NULL; SetParametersData *data; GError *error = NULL; guint unset_size; + TpConnectionManagerProtocol *protocol; DEBUG ("called"); if (G_UNLIKELY (!priv->manager && !load_manager (account))) @@ -2508,8 +2525,9 @@ _mcd_account_set_parameters (McdAccount *account, GHashTable *params, goto error; } - param = mcd_manager_get_parameters (priv->manager, priv->protocol_name); - if (G_UNLIKELY (!param)) + protocol = _mcd_manager_dup_protocol (priv->manager, priv->protocol_name); + + if (G_UNLIKELY (protocol == NULL)) { g_set_error (&error, TP_ERRORS, TP_ERROR_INVALID_ARGUMENT, "Protocol %s not found", priv->protocol_name); @@ -2524,9 +2542,10 @@ _mcd_account_set_parameters (McdAccount *account, GHashTable *params, data = g_slice_new0 (SetParametersData); data->account = g_object_ref (account); + data->protocol = protocol; data->params = hash_table_copy (params); data->unset = g_strdupv ((gchar **) unset); - data->param = param; + data->param = protocol->params; data->n_params = 0; data->dbus_properties = dbus_properties; data->not_yet = not_yet; @@ -3134,12 +3153,20 @@ mcd_account_get_object_path (McdAccount *account) typedef struct { GHashTable *params; + TpConnectionManagerProtocol *protocol; const TpConnectionManagerParam *param; McdAccountDupParametersCb callback; gpointer user_data; } DupParametersData; static void +dup_parameters_data_free (DupParametersData *data) +{ + _mcd_manager_protocol_free (data->protocol); + g_slice_free (DupParametersData, data); +} + +static void dup_parameters_get_parameter_cb (McdAccount *account, const GValue *value, const GError *error, @@ -3164,7 +3191,7 @@ dup_parameters_get_parameter_cb (McdAccount *account, { if (data->callback != NULL) data->callback (account, data->params, data->user_data); - g_slice_free (DupParametersData, data); + dup_parameters_data_free (data); } } @@ -3185,7 +3212,7 @@ _mcd_account_dup_parameters (McdAccount *account, { McdAccountPrivate *priv; DupParametersData *data; - const TpConnectionManagerParam *param; + TpConnectionManagerProtocol *protocol; g_return_if_fail (MCD_IS_ACCOUNT (account)); @@ -3198,17 +3225,18 @@ _mcd_account_dup_parameters (McdAccount *account, return; } - param = mcd_manager_get_parameters (priv->manager, - priv->protocol_name); + protocol = _mcd_manager_dup_protocol (priv->manager, + priv->protocol_name); - if (G_UNLIKELY (!param)) + if (G_UNLIKELY (protocol == NULL)) { callback (account, NULL, user_data); return; } data = g_slice_new0 (DupParametersData); - data->param = param; + data->protocol = protocol; + data->param = protocol->params; data->callback = callback; data->user_data = user_data; @@ -3216,7 +3244,7 @@ _mcd_account_dup_parameters (McdAccount *account, g_free, (GDestroyNotify) tp_g_value_slice_free); - mcd_account_get_parameter (account, param->name, + mcd_account_get_parameter (account, data->param->name, dup_parameters_get_parameter_cb, data); } |