From: Daniel Wagner <[email protected]>

---
 include/session.h |  4 +++
 src/session.c     | 76 +++++++++++++++++++++++++++++++++++++------------------
 2 files changed, 56 insertions(+), 24 deletions(-)

diff --git a/include/session.h b/include/session.h
index 7bd8ce7..8299205 100644
--- a/include/session.h
+++ b/include/session.h
@@ -86,6 +86,10 @@ void connman_session_config_update(struct connman_session 
*session);
 GSList *connman_session_allowed_bearers_any(void);
 void connman_session_free_bearers(GSList *bearers);
 
+enum connman_session_roaming_policy connman_session_parse_roaming_policy(const 
char *policy);
+enum connman_session_type connman_session_parse_connection_type(const char 
*type);
+int connman_session_parse_allowed_bearers(const char *token, GSList **list);
+
 const char *connman_session_get_owner(struct connman_session *session);
 
 #ifdef __cplusplus
diff --git a/src/session.c b/src/session.c
index 1f109f8..90163df 100644
--- a/src/session.c
+++ b/src/session.c
@@ -160,7 +160,23 @@ static const char *type2string(enum connman_session_type 
type)
        return NULL;
 }
 
-static enum connman_session_type string2type(const char *type)
+enum connman_session_roaming_policy connman_session_parse_roaming_policy(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;
+}
+
+enum connman_session_type connman_session_parse_connection_type(const char 
*type)
 {
        if (g_strcmp0(type, "any") == 0)
                return CONNMAN_SESSION_TYPE_ANY;
@@ -352,38 +368,49 @@ void connman_session_free_bearers(GSList *bearers)
        g_slist_free_full(bearers, cleanup_bearer);
 }
 
+int connman_session_parse_allowed_bearers(const char *token, GSList **list)
+{
+       struct connman_session_bearer *info;
+
+       info = g_try_new0(struct connman_session_bearer, 1);
+       if (info == NULL) {
+               connman_session_free_bearers(*list);
+               *list = NULL;
+               return -ENOMEM;
+       }
+
+       info->name = g_strdup(token);
+       info->service_type = bearer2service(info->name);
+
+       if (info->service_type == CONNMAN_SERVICE_TYPE_UNKNOWN &&
+               g_strcmp0(info->name, "*") == 0) {
+               info->match_all = TRUE;
+       } else {
+               info->match_all = FALSE;
+       }
+
+       *list = g_slist_append(*list, info);
+
+       return 0;
+}
+
 static int session_parse_allowed_bearers(DBusMessageIter *iter, GSList **list)
 {
-       struct connman_session_bearer *bearer;
        DBusMessageIter array;
+       int err;
 
        dbus_message_iter_recurse(iter, &array);
 
        *list = NULL;
 
        while (dbus_message_iter_get_arg_type(&array) == DBUS_TYPE_STRING) {
-               char *bearer_name = NULL;
-
-               dbus_message_iter_get_basic(&array, &bearer_name);
+               char *bearer = NULL;
 
-               bearer = g_try_new0(struct connman_session_bearer, 1);
-               if (bearer == NULL) {
-                       connman_session_free_bearers(*list);
-                       *list = NULL;
-                       return -ENOMEM;
-               }
+               dbus_message_iter_get_basic(&array, &bearer);
 
-               bearer->name = g_strdup(bearer_name);
-               bearer->service_type = bearer2service(bearer->name);
-
-               if (bearer->service_type == CONNMAN_SERVICE_TYPE_UNKNOWN &&
-                               g_strcmp0(bearer->name, "*") == 0) {
-                       bearer->match_all = TRUE;
-               } else {
-                       bearer->match_all = FALSE;
-               }
-
-               *list = g_slist_append(*list, bearer);
+               err = connman_session_parse_allowed_bearers(bearer, list);
+               if (err < 0)
+                       return err;
 
                dbus_message_iter_next(&array);
        }
@@ -1499,7 +1526,7 @@ static DBusMessage *change_session(DBusConnection *conn,
                        dbus_message_iter_get_basic(&value, &val);
                        info->config.type = apply_policy_on_type(
                                session->policy_config->type,
-                               string2type(val));
+                               connman_session_parse_connection_type(val));
                } else {
                        goto err;
                }
@@ -1758,7 +1785,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);
-                               config->type = string2type(val);
+                               config->type =
+                                       
connman_session_parse_connection_type(val);
                                config->type_valid = TRUE;
                        } else {
                                err = -EINVAL;
-- 
1.7.12.1.382.gb0576a6

_______________________________________________
connman mailing list
[email protected]
http://lists.connman.net/listinfo/connman

Reply via email to