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