session: Handle configure state
authorDaniel Wagner <daniel.wagner@bmw-carit.de>
Thu, 11 Aug 2011 14:56:17 +0000 (16:56 +0200)
committerDaniel Wagner <daniel.wagner@bmw-carit.de>
Thu, 11 Aug 2011 15:40:52 +0000 (17:40 +0200)
We should ignore service state (ASSOCIATION, CONFIGURATION) updates
for connecting services (CONNMAN_SESSION_REASON_CONNECT). info->online
will still be false for those services. So don't set the info->reason
CONNMAN_SESSION_REASAON_FREE_RIDE.

src/session.c

index fb12d3c..6126a91 100644 (file)
@@ -752,6 +752,25 @@ static connman_bool_t is_connected(enum connman_service_state state)
        return FALSE;
 }
 
+static connman_bool_t is_connecting(enum connman_service_state state)
+{
+       switch (state) {
+       case CONNMAN_SERVICE_STATE_UNKNOWN:
+       case CONNMAN_SERVICE_STATE_IDLE:
+               break;
+       case CONNMAN_SERVICE_STATE_ASSOCIATION:
+       case CONNMAN_SERVICE_STATE_CONFIGURATION:
+               return TRUE;
+       case CONNMAN_SERVICE_STATE_DISCONNECT:
+       case CONNMAN_SERVICE_STATE_FAILURE:
+       case CONNMAN_SERVICE_STATE_READY:
+       case CONNMAN_SERVICE_STATE_ONLINE:
+               break;
+       }
+
+       return FALSE;
+}
+
 static connman_bool_t explicit_connect(enum connman_session_reason reason)
 {
        switch (reason) {
@@ -922,6 +941,11 @@ static void session_changed(struct connman_session *session,
                if (info->online == TRUE)
                        break;
 
+               if (info->entry != NULL &&
+                               is_connecting(info->entry->state) == TRUE) {
+                       break;
+               }
+
                if (info->stay_connected == TRUE) {
                        DBG("StayConnected");
                        select_and_connect(session,