session: Apply policy on ConnnectionType
authorDaniel Wagner <daniel.wagner@bmw-carit.de>
Thu, 20 Sep 2012 15:06:29 +0000 (17:06 +0200)
committerDaniel Wagner <daniel.wagner@bmw-carit.de>
Thu, 27 Sep 2012 08:28:28 +0000 (10:28 +0200)
src/session.c

index 30481d29c9b1005d43be203df16ac0c8f3abf66b..84f638686743e0c8628af979ba017eb529edfe43 100644 (file)
@@ -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;