From: Daniel Wagner <[email protected]>
---
src/session.c | 50 ++++++++++++++++++++++++++++++++++----------------
1 file changed, 34 insertions(+), 16 deletions(-)
diff --git a/src/session.c b/src/session.c
index 8957c71..f5d3a6d 100644
--- a/src/session.c
+++ b/src/session.c
@@ -1543,6 +1543,14 @@ static const GDBusMethodTable session_methods[] = {
{ },
};
+struct user_config {
+ enum connman_session_type type;
+ connman_bool_t type_valid;
+
+ GSList *allowed_bearers;
+ connman_bool_t allowed_bearers_valid;
+};
+
static void session_create_cb(struct connman_session *session,
struct connman_session_config *config,
void *user_data)
@@ -1559,10 +1567,7 @@ int __connman_session_create(DBusMessage *msg)
DBusMessageIter iter, array;
struct connman_session *session = NULL;
struct session_info *info, *info_last;
- enum connman_session_type type = CONNMAN_SESSION_TYPE_ANY;
- GSList *allowed_bearers = NULL;
- connman_bool_t allowed_bearers_valid = FALSE;
- connman_bool_t type_valid = FALSE;
+ struct user_config *config;
int err;
owner = dbus_message_get_sender(msg);
@@ -1578,6 +1583,14 @@ int __connman_session_create(DBusMessage *msg)
goto err;
}
+ config = g_try_new0(struct user_config, 1);
+ if (config == NULL) {
+ err = -ENOMEM;
+ goto err;
+ }
+
+ config->type = CONNMAN_SESSION_TYPE_ANY;
+
dbus_message_iter_init(msg, &iter);
dbus_message_iter_recurse(&iter, &array);
@@ -1595,11 +1608,11 @@ int __connman_session_create(DBusMessage *msg)
case DBUS_TYPE_ARRAY:
if (g_str_equal(key, "AllowedBearers") == TRUE) {
err = session_parse_allowed_bearers(&value,
- &allowed_bearers);
+ &config->allowed_bearers);
if (err < 0)
goto err;
- allowed_bearers_valid = TRUE;
+ config->allowed_bearers_valid = TRUE;
} else {
return -EINVAL;
}
@@ -1607,8 +1620,8 @@ int __connman_session_create(DBusMessage *msg)
case DBUS_TYPE_STRING:
if (g_str_equal(key, "ConnectionType") == TRUE) {
dbus_message_iter_get_basic(&value, &val);
- type = string2type(val);
- type_valid = TRUE;
+ config->type = string2type(val);
+ config->type_valid = TRUE;
} else {
return -EINVAL;
}
@@ -1676,18 +1689,18 @@ int __connman_session_create(DBusMessage *msg)
ecall_session = session;
info->state = CONNMAN_SESSION_STATE_DISCONNECTED;
- if (type_valid == FALSE)
- type = CONNMAN_SESSION_TYPE_ANY;
+ if (config->type_valid == FALSE)
+ config->type = CONNMAN_SESSION_TYPE_ANY;
info->config.type = apply_policy_on_type(
session->policy_config->type,
- type);
+ config->type);
info->config.priority = session->policy_config->priority;
info->config.roaming_policy = session->policy_config->roaming_policy;
info->entry = NULL;
- if (allowed_bearers_valid == FALSE) {
- allowed_bearers = connman_session_allowed_bearers_any();
- if (allowed_bearers == NULL) {
+ if (config->allowed_bearers_valid == FALSE) {
+ config->allowed_bearers = connman_session_allowed_bearers_any();
+ if (config->allowed_bearers == NULL) {
err = -ENOMEM;
goto err;
}
@@ -1695,11 +1708,14 @@ int __connman_session_create(DBusMessage *msg)
err = apply_policy_on_bearers(
session->policy_config->allowed_bearers,
- allowed_bearers,
+ config->allowed_bearers,
&info->config.allowed_bearers);
if (err < 0)
goto err;
+ connman_session_free_bearers(config->allowed_bearers);
+ g_free(config);
+
g_hash_table_replace(session_hash, session->session_path, session);
DBG("add %s", session->session_path);
@@ -1748,7 +1764,9 @@ err:
g_free(session_path);
- connman_session_free_bearers(allowed_bearers);
+ if (config != NULL)
+ connman_session_free_bearers(config->allowed_bearers);
+ g_free(config);
return err;
}
--
1.7.12.1.382.gb0576a6
_______________________________________________
connman mailing list
[email protected]
http://lists.connman.net/listinfo/connman