From: Daniel Wagner <[email protected]>
During the creation period we need to keep track of data
which is only needed during this period. Let's rename user_config
to creation_data and store all the necessary data there. This includes
the session pointer so that we don't have to pass two void pointers
around in the callbacks which we will intrudoce soon.
---
src/session.c | 72 +++++++++++++++++++++++++++++------------------------------
1 file changed, 36 insertions(+), 36 deletions(-)
diff --git a/src/session.c b/src/session.c
index dd31e78..82bfbc4 100644
--- a/src/session.c
+++ b/src/session.c
@@ -293,43 +293,46 @@ static int assign_policy_plugin(struct connman_session
*session)
return 0;
}
-struct user_config {
+struct creation_data {
+ struct connman_session *session;
DBusMessage *pending;
+ /* user config */
enum connman_session_type type;
GSList *allowed_bearers;
};
-static void cleanup_user_config(struct user_config *user_config)
+static void cleanup_creation_data(struct creation_data *creation_data)
{
- if (user_config == NULL)
+ if (creation_data == NULL)
return;
- if (user_config->pending != NULL)
- dbus_message_unref(user_config->pending);
+ if (creation_data->pending != NULL)
+ dbus_message_unref(creation_data->pending);
+
+ free_session(creation_data->session);
- g_slist_free(user_config->allowed_bearers);
- g_free(user_config);
+ g_slist_free(creation_data->allowed_bearers);
+ g_free(creation_data);
}
static int create_policy_config(struct connman_session *session,
connman_session_config_cb_t cb,
- struct user_config *user_config)
+ struct creation_data *creation_data)
{
struct connman_session_config *config;
if (session->policy == NULL) {
config = connman_session_create_default_config();
if (config == NULL) {
- free_session(session);
- cleanup_user_config(user_config);
+ cleanup_creation_data(creation_data);
return -ENOMEM;
}
- return cb(0, session, config, user_config);
+ return cb(0, session, config, creation_data);
}
- return (*session->policy->create)(session, cb, user_config);
+ return (*session->policy->create)(session, cb, creation_data);
}
static void probe_policy(struct connman_session_policy *policy)
@@ -1623,8 +1626,8 @@ static int session_config_cb(int err, struct
connman_session *session,
struct connman_session_config *config,
void *user_data)
{
+ struct creation_data *creation_data = user_data;
DBusMessage *reply;
- struct user_config *user_config = user_data;
struct session_info *info, *info_last;
DBG("session %p config %p", session, config);
@@ -1643,13 +1646,13 @@ static int session_config_cb(int err, struct
connman_session *session,
info->state = CONNMAN_SESSION_STATE_DISCONNECTED;
info->config.type = apply_policy_on_type(
session->policy_config->type,
- user_config->type);
+ creation_data->type);
info->config.priority = session->policy_config->priority;
info->config.roaming_policy = session->policy_config->roaming_policy;
info->entry = NULL;
- session->user_allowed_bearers = user_config->allowed_bearers;
- user_config->allowed_bearers = NULL;
+ session->user_allowed_bearers = creation_data->allowed_bearers;
+ creation_data->allowed_bearers = NULL;
err = apply_policy_on_bearers(
session->policy_config->allowed_bearers,
@@ -1659,6 +1662,7 @@ static int session_config_cb(int err, struct
connman_session *session,
goto out;
g_hash_table_replace(session_hash, session->session_path, session);
+ creation_data->session = NULL;
DBG("add %s", session->session_path);
@@ -1672,11 +1676,11 @@ static int session_config_cb(int err, struct
connman_session *session,
goto out;
}
- reply = g_dbus_create_reply(user_config->pending,
+ reply = g_dbus_create_reply(creation_data->pending,
DBUS_TYPE_OBJECT_PATH, &session->session_path,
DBUS_TYPE_INVALID);
g_dbus_send_message(connection, reply);
- user_config->pending = NULL;
+ creation_data->pending = NULL;
populate_service_list(session);
@@ -1692,13 +1696,11 @@ static int session_config_cb(int err, struct
connman_session *session,
out:
if (err < 0) {
- reply = __connman_error_failed(user_config->pending, -err);
+ reply = __connman_error_failed(creation_data->pending, -err);
g_dbus_send_message(connection, reply);
-
- free_session(session);
}
- cleanup_user_config(user_config);
+ cleanup_creation_data(creation_data);
return err;
}
@@ -1709,7 +1711,7 @@ int __connman_session_create(DBusMessage *msg)
char *session_path = NULL;
DBusMessageIter iter, array;
struct connman_session *session = NULL;
- struct user_config *user_config = NULL;
+ struct creation_data *creation_data = NULL;
connman_bool_t user_allowed_bearers = FALSE;
connman_bool_t user_connection_type = FALSE;
int err;
@@ -1727,13 +1729,13 @@ int __connman_session_create(DBusMessage *msg)
goto err;
}
- user_config = g_try_new0(struct user_config, 1);
- if (user_config == NULL) {
+ creation_data = g_try_new0(struct creation_data, 1);
+ if (creation_data == NULL) {
err = -ENOMEM;
goto err;
}
- user_config->pending = dbus_message_ref(msg);
+ creation_data->pending = dbus_message_ref(msg);
dbus_message_iter_init(msg, &iter);
dbus_message_iter_recurse(&iter, &array);
@@ -1752,7 +1754,7 @@ int __connman_session_create(DBusMessage *msg)
case DBUS_TYPE_ARRAY:
if (g_str_equal(key, "AllowedBearers") == TRUE) {
err = parse_bearers(&value,
- &user_config->allowed_bearers);
+
&creation_data->allowed_bearers);
if (err < 0)
goto err;
@@ -1765,7 +1767,7 @@ int __connman_session_create(DBusMessage *msg)
case DBUS_TYPE_STRING:
if (g_str_equal(key, "ConnectionType") == TRUE) {
dbus_message_iter_get_basic(&value, &val);
- user_config->type =
+ creation_data->type =
connman_session_parse_connection_type(val);
user_connection_type = TRUE;
@@ -1784,10 +1786,10 @@ int __connman_session_create(DBusMessage *msg)
* For AllowedBearers this is '*', ...
*/
if (user_allowed_bearers == FALSE) {
- user_config->allowed_bearers =
+ creation_data->allowed_bearers =
g_slist_append(NULL,
GINT_TO_POINTER(CONNMAN_SERVICE_TYPE_UNKNOWN));
- if (user_config->allowed_bearers == NULL) {
+ if (creation_data->allowed_bearers == NULL) {
err = -ENOMEM;
goto err;
}
@@ -1795,7 +1797,7 @@ int __connman_session_create(DBusMessage *msg)
/* ... and for ConnectionType it is 'any'. */
if (user_connection_type == FALSE)
- user_config->type = CONNMAN_SESSION_TYPE_ANY;
+ creation_data->type = CONNMAN_SESSION_TYPE_ANY;
dbus_message_iter_next(&iter);
dbus_message_iter_get_basic(&iter, ¬ify_path);
@@ -1820,8 +1822,8 @@ int __connman_session_create(DBusMessage *msg)
}
session = g_try_new0(struct connman_session, 1);
+ creation_data->session = session;
if (session == NULL) {
- g_free(session_path);
err = -ENOMEM;
goto err;
}
@@ -1850,7 +1852,7 @@ int __connman_session_create(DBusMessage *msg)
if (err < 0)
goto err;
- err = create_policy_config(session, session_config_cb, user_config);
+ err = create_policy_config(session, session_config_cb, creation_data);
if (err < 0 && err != -EINPROGRESS)
return err;
@@ -1859,9 +1861,7 @@ int __connman_session_create(DBusMessage *msg)
err:
connman_error("Failed to create session");
- free_session(session);
-
- cleanup_user_config(user_config);
+ cleanup_creation_data(creation_data);
return err;
}
--
1.8.2.rc3.16.gce432ca
_______________________________________________
connman mailing list
[email protected]
http://lists.connman.net/listinfo/connman