From: Daniel Wagner <daniel.wag...@bmw-carit.de>

Let's ask the plugin for the default configuration. AllowedBearers
and ConnectionType are not yet taken fromt the plugin. Instead
the user configuration will be taken.
---
 src/session.c | 80 ++++++++++++++++++++++-------------------------------------
 1 file changed, 29 insertions(+), 51 deletions(-)

diff --git a/src/session.c b/src/session.c
index 0900952..b6ba1dc 100644
--- a/src/session.c
+++ b/src/session.c
@@ -88,6 +88,7 @@ struct connman_session {
        connman_bool_t append_all;
        struct session_info *info;
        struct session_info *info_last;
+       struct connman_session_config *policy_config;
 
        connman_bool_t ecall;
 
@@ -167,22 +168,6 @@ static enum connman_session_type string2type(const char 
*type)
        return CONNMAN_SESSION_TYPE_ANY;
 }
 
-static enum connman_session_roaming_policy string2roamingpolicy(const char 
*policy)
-{
-       if (g_strcmp0(policy, "default") == 0)
-               return CONNMAN_SESSION_ROAMING_POLICY_DEFAULT;
-       else if (g_strcmp0(policy, "always") == 0)
-               return CONNMAN_SESSION_ROAMING_POLICY_ALWAYS;
-       else if (g_strcmp0(policy, "forbidden") == 0)
-               return CONNMAN_SESSION_ROAMING_POLICY_FORBIDDEN;
-       else if (g_strcmp0(policy, "national") == 0)
-               return CONNMAN_SESSION_ROAMING_POLICY_NATIONAL;
-       else if (g_strcmp0(policy, "international") == 0)
-               return CONNMAN_SESSION_ROAMING_POLICY_INTERNATIONAL;
-       else
-               return CONNMAN_SESSION_ROAMING_POLICY_UNKNOWN;
-}
-
 static enum connman_service_type bearer2service(const char *bearer)
 {
        if (bearer == NULL)
@@ -229,28 +214,6 @@ static char *service2bearer(enum connman_service_type type)
        return "";
 }
 
-static int config_get_bool(struct connman_session *session, const char *id,
-                               const char *key, connman_bool_t *val)
-{
-       if (session->policy == NULL) {
-               *val = FALSE;
-               return -EINVAL;
-       }
-
-       return (*session->policy->get_bool)(session, key, val);
-}
-
-static int config_get_string(struct connman_session *session, const char *id,
-                               const char *key, char **val)
-{
-       if (session->policy == NULL) {
-               *val = NULL;
-               return -EINVAL;
-       }
-
-       return (*session->policy->get_string)(session, key, val);
-}
-
 static int assign_policy_plugin(struct connman_session *session)
 {
        GSList *list;
@@ -269,6 +232,24 @@ static int assign_policy_plugin(struct connman_session 
*session)
        return 0;
 }
 
+static int create_policy_config(struct connman_session *session)
+{
+       struct connman_session_config *config;
+
+       config = (*session->policy->create)(session);
+       if (config == NULL)
+               return -ENOMEM;
+
+       session->policy_config = config;
+
+       return 0;
+}
+
+static void destroy_policy_config(struct connman_session *session)
+{
+       (*session->policy->destroy)(session);
+}
+
 static void probe_policy(struct connman_session_policy *policy)
 {
 
@@ -803,6 +784,7 @@ static void cleanup_session(gpointer user_data)
                __connman_service_disconnect(info->entry->service);
        }
 
+       destroy_policy_config(session);
        g_slist_foreach(info->config.allowed_bearers,
                                cleanup_connman_session_bearer, NULL);
        g_slist_free(info->config.allowed_bearers);
@@ -1494,10 +1476,6 @@ int __connman_session_create(DBusMessage *msg)
        struct connman_session *session = NULL;
        struct session_info *info, *info_last;
        enum connman_session_type type = CONNMAN_SESSION_TYPE_ANY;
-       connman_bool_t priority;
-       connman_bool_t ecall_app;
-       enum connman_session_roaming_policy roaming_policy;
-       char *roaming_policy_str;
        GSList *allowed_bearers = NULL;
        int err;
 
@@ -1589,12 +1567,12 @@ int __connman_session_create(DBusMessage *msg)
        info = session->info;
        info_last = session->info_last;
 
-       assign_policy_plugin(session);
-
-       config_get_bool(session, owner, "Priority", &priority);
-       config_get_bool(session, owner, "EmergencyCall", &ecall_app);
-       config_get_string(session, owner, "RoamingPolicy", &roaming_policy_str);
-       roaming_policy = string2roamingpolicy(roaming_policy_str);
+       err = assign_policy_plugin(session);
+       if (err < 0)
+               goto err;
+       err = create_policy_config(session);
+       if (err < 0)
+               goto err;
 
        session->owner = g_strdup(owner);
        session->session_path = session_path;
@@ -1602,13 +1580,13 @@ int __connman_session_create(DBusMessage *msg)
        session->notify_watch =
                g_dbus_add_disconnect_watch(connection, session->owner,
                                        owner_disconnect, session, NULL);
-       if (ecall_app == TRUE)
+       if (session->policy_config->ecall == TRUE)
                ecall_session = session;
 
        info->state = CONNMAN_SESSION_STATE_DISCONNECTED;
        info->config.type = type;
-       info->config.priority = priority;
-       info->config.roaming_policy = roaming_policy;
+       info->config.priority = session->policy_config->priority;
+       info->config.roaming_policy = session->policy_config->roaming_policy;
        info->entry = NULL;
 
        if (allowed_bearers == NULL) {
-- 
1.7.12.315.g682ce8b

_______________________________________________
connman mailing list
connman@connman.net
http://lists.connman.net/listinfo/connman

Reply via email to