diff options
author | Daniel Wagner <daniel.wagner@bmw-carit.de> | 2012-09-20 17:06:29 +0200 |
---|---|---|
committer | Daniel Wagner <daniel.wagner@bmw-carit.de> | 2012-09-27 10:28:28 +0200 |
commit | 9ecab17d611ed6c932f50b887d9b495a5bc1212a (patch) | |
tree | 89611a3a0d19574b9a00c7516da1576c4cb867b9 | |
parent | 0bfe7c0ba4b1d297f03c4e3d31d5335f84f3942b (diff) | |
download | connman-9ecab17d611ed6c932f50b887d9b495a5bc1212a.tar.gz connman-9ecab17d611ed6c932f50b887d9b495a5bc1212a.tar.bz2 connman-9ecab17d611ed6c932f50b887d9b495a5bc1212a.zip |
session: Apply policy on ConnnectionType
-rw-r--r-- | src/session.c | 24 |
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; |