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

Up to now an empty or wrong ConnectionType was interpreted as 'any'.
If the ConnectionType is either wrong ignore it. If no ConnectionType
setting is passed in during creation of the session choose 'any'.
---
 include/session.h |  7 ++++---
 src/session.c     | 16 +++++++++++++---
 2 files changed, 17 insertions(+), 6 deletions(-)

diff --git a/include/session.h b/include/session.h
index 0e47b55..7e45276 100644
--- a/include/session.h
+++ b/include/session.h
@@ -43,9 +43,10 @@ enum connman_session_roaming_policy {
 };
 
 enum connman_session_type {
-       CONNMAN_SESSION_TYPE_ANY      = 0,
-       CONNMAN_SESSION_TYPE_LOCAL    = 1,
-       CONNMAN_SESSION_TYPE_INTERNET = 2,
+       CONNMAN_SESSION_TYPE_UNKNOWN  = 0,
+       CONNMAN_SESSION_TYPE_ANY      = 1,
+       CONNMAN_SESSION_TYPE_LOCAL    = 2,
+       CONNMAN_SESSION_TYPE_INTERNET = 3,
 };
 
 struct connman_session;
diff --git a/src/session.c b/src/session.c
index 7f73131..dad367a 100644
--- a/src/session.c
+++ b/src/session.c
@@ -147,8 +147,10 @@ static const char *state2string(enum connman_session_state 
state)
 static const char *type2string(enum connman_session_type type)
 {
        switch (type) {
-       case CONNMAN_SESSION_TYPE_ANY:
+       case CONNMAN_SESSION_TYPE_UNKNOWN:
                return "";
+       case CONNMAN_SESSION_TYPE_ANY:
+               return "any";
        case CONNMAN_SESSION_TYPE_LOCAL:
                return "local";
        case CONNMAN_SESSION_TYPE_INTERNET:
@@ -160,12 +162,14 @@ static const char *type2string(enum connman_session_type 
type)
 
 static enum connman_session_type string2type(const char *type)
 {
+       if (g_strcmp0(type, "any") == 0)
+               return CONNMAN_SESSION_TYPE_ANY;
        if (g_strcmp0(type, "local") == 0)
                return CONNMAN_SESSION_TYPE_LOCAL;
        else if (g_strcmp0(type, "internet") == 0)
                return CONNMAN_SESSION_TYPE_INTERNET;
 
-       return CONNMAN_SESSION_TYPE_ANY;
+       return CONNMAN_SESSION_TYPE_UNKNOWN;
 }
 
 static enum connman_service_type bearer2service(const char *bearer)
@@ -528,6 +532,8 @@ static connman_bool_t is_type_matching_state(enum 
connman_session_state *state,
                                                enum connman_session_type type)
 {
        switch (type) {
+       case CONNMAN_SESSION_TYPE_UNKNOWN:
+               return FALSE;
        case CONNMAN_SESSION_TYPE_ANY:
                return TRUE;
        case CONNMAN_SESSION_TYPE_LOCAL:
@@ -1438,9 +1444,10 @@ int __connman_session_create(DBusMessage *msg)
        DBusMessageIter iter, array;
        struct connman_session *session = NULL;
        struct session_info *info, *info_last;
-       enum connman_session_type type = CONNMAN_SESSION_TYPE_ANY;
+       enum connman_session_type type;
        GSList *allowed_bearers;
        connman_bool_t allowed_bearers_valid = FALSE;
+       connman_bool_t type_valid = FALSE;
        int err;
 
        owner = dbus_message_get_sender(msg);
@@ -1486,6 +1493,7 @@ int __connman_session_create(DBusMessage *msg)
                        if (g_str_equal(key, "ConnectionType") == TRUE) {
                                dbus_message_iter_get_basic(&value, &val);
                                type = string2type(val);
+                               type_valid = TRUE;
                        } else {
                                return -EINVAL;
                        }
@@ -1552,6 +1560,8 @@ int __connman_session_create(DBusMessage *msg)
                ecall_session = session;
 
        info->state = CONNMAN_SESSION_STATE_DISCONNECTED;
+       if (type_valid == FALSE)
+               type = CONNMAN_SESSION_TYPE_ANY;
        info->config.type = type;
        info->config.priority = session->policy_config->priority;
        info->config.roaming_policy = session->policy_config->roaming_policy;
-- 
1.7.12.315.g682ce8b

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

Reply via email to