summaryrefslogtreecommitdiff
path: root/src/session.c
diff options
context:
space:
mode:
authorDaniel Wagner <daniel.wagner@bmw-carit.de>2012-09-20 17:06:29 +0200
committerDaniel Wagner <daniel.wagner@bmw-carit.de>2012-09-27 10:28:28 +0200
commit9ecab17d611ed6c932f50b887d9b495a5bc1212a (patch)
tree89611a3a0d19574b9a00c7516da1576c4cb867b9 /src/session.c
parent0bfe7c0ba4b1d297f03c4e3d31d5335f84f3942b (diff)
downloadconnman-9ecab17d611ed6c932f50b887d9b495a5bc1212a.tar.gz
connman-9ecab17d611ed6c932f50b887d9b495a5bc1212a.tar.bz2
connman-9ecab17d611ed6c932f50b887d9b495a5bc1212a.zip
session: Apply policy on ConnnectionType
Diffstat (limited to 'src/session.c')
-rw-r--r--src/session.c24
1 files changed, 22 insertions, 2 deletions
diff --git a/src/session.c b/src/session.c
index 30481d29..84f63868 100644
--- a/src/session.c
+++ b/src/session.c
@@ -326,6 +326,22 @@ void connman_session_policy_unregister(struct connman_session_policy *policy)
remove_policy(policy);
}
+static enum connman_session_type apply_policy_on_type(
+ enum connman_session_type policy,
+ enum connman_session_type type)
+{
+ if (type == CONNMAN_SESSION_TYPE_UNKNOWN)
+ return CONNMAN_SESSION_TYPE_UNKNOWN;
+
+ if (policy == CONNMAN_SESSION_TYPE_ANY)
+ return type;
+
+ if (policy == CONNMAN_SESSION_TYPE_LOCAL)
+ return CONNMAN_SESSION_TYPE_LOCAL;
+
+ return CONNMAN_SESSION_TYPE_INTERNET;
+}
+
static void cleanup_bearer(gpointer data)
{
struct connman_session_bearer *bearer = data;
@@ -1343,7 +1359,9 @@ static DBusMessage *change_session(DBusConnection *conn,
case DBUS_TYPE_STRING:
if (g_str_equal(name, "ConnectionType") == TRUE) {
dbus_message_iter_get_basic(&value, &val);
- info->config.type = string2type(val);
+ info->config.type = apply_policy_on_type(
+ session->policy_config->type,
+ string2type(val));
} else {
goto err;
}
@@ -1563,7 +1581,9 @@ int __connman_session_create(DBusMessage *msg)
info->state = CONNMAN_SESSION_STATE_DISCONNECTED;
if (type_valid == FALSE)
type = CONNMAN_SESSION_TYPE_ANY;
- info->config.type = type;
+ info->config.type = apply_policy_on_type(
+ session->policy_config->type,
+ type);
info->config.priority = session->policy_config->priority;
info->config.roaming_policy = session->policy_config->roaming_policy;
info->entry = NULL;