summaryrefslogtreecommitdiff
path: root/src/session.c
diff options
context:
space:
mode:
authorDaniel Wagner <daniel.wagner@bmw-carit.de>2011-08-11 16:56:17 +0200
committerDaniel Wagner <daniel.wagner@bmw-carit.de>2011-08-11 17:40:52 +0200
commit23f91fd55e6519e9580ac86c70215969de28e4e9 (patch)
treecefa14c0b19f2179a21e826fa13d55641b3dcf92 /src/session.c
parentdb53a66b3b24ca96f9ee49ada9468a5c34939cfe (diff)
downloadconnman-23f91fd55e6519e9580ac86c70215969de28e4e9.tar.gz
connman-23f91fd55e6519e9580ac86c70215969de28e4e9.tar.bz2
connman-23f91fd55e6519e9580ac86c70215969de28e4e9.zip
session: Handle configure state
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.
Diffstat (limited to 'src/session.c')
-rw-r--r--src/session.c24
1 files changed, 24 insertions, 0 deletions
diff --git a/src/session.c b/src/session.c
index fb12d3c4..6126a913 100644
--- a/src/session.c
+++ b/src/session.c
@@ -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,