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

---
 src/session.c | 24 ++++++++++++++++++++++--
 1 file changed, 22 insertions(+), 2 deletions(-)

diff --git a/src/session.c b/src/session.c
index 2e6355d..8930a0a 100644
--- a/src/session.c
+++ b/src/session.c
@@ -325,6 +325,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, gpointer user_data)
 {
        struct connman_session_bearer *bearer = data;
@@ -1434,7 +1450,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;
                }
@@ -1653,7 +1671,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;
-- 
1.7.12.315.g682ce8b

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

Reply via email to