From: Daniel Wagner Date: Thu, 31 Mar 2011 08:02:32 +0000 (+0200) Subject: service: Add __connman_service_connect_session() X-Git-Tag: accepted/2.0alpha-wayland/20121110.002834~1618 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=5eaec1228065876e49d988188f3057916fb7e9fa;p=profile%2Fivi%2Fconnman.git service: Add __connman_service_connect_session() --- diff --git a/src/connman.h b/src/connman.h index 893475d..c16059c 100644 --- a/src/connman.h +++ b/src/connman.h @@ -520,6 +520,8 @@ int __connman_service_disconnect(struct connman_service *service); int __connman_service_disconnect_all(void); int __connman_service_create_and_connect(DBusMessage *msg); void __connman_service_auto_connect(void); +int __connman_service_session_connect(GSequence *service_list, + struct connman_service **service); const char *__connman_service_type2string(enum connman_service_type type); diff --git a/src/service.c b/src/service.c index 63b5df9..91e0a61 100644 --- a/src/service.c +++ b/src/service.c @@ -2562,6 +2562,57 @@ void __connman_service_auto_connect(void) } } +static connman_bool_t session_is_ignore(struct connman_service *service) +{ + if (combine_state(service->state_ipv4, service->state_ipv6) == + CONNMAN_SERVICE_STATE_FAILURE) + return TRUE; + + return FALSE; +} + +int __connman_service_session_connect(GSequence *list, + struct connman_service **ret_service) +{ + struct connman_service *service; + GSequenceIter *iter; + + DBG("list %p", list); + + iter = g_sequence_get_begin_iter(list); + + while (g_sequence_iter_is_end(iter) == FALSE) { + service = g_sequence_get(iter); + + if (service->pending != NULL) + return -EINPROGRESS; + + if (is_connected(service) == TRUE) + return -EISCONN; + + if (is_connecting(service) == TRUE) + return -EALREADY; + + if (session_is_ignore(service) == FALSE && + combine_state(service->state_ipv4, + service->state_ipv6) == + CONNMAN_SERVICE_STATE_IDLE) + break; + + service = NULL; + + iter = g_sequence_iter_next(iter); + } + + if (service == NULL) + return -EINVAL; + + + *ret_service = service; + + return __connman_service_connect(service); +} + static void remove_timeout(struct connman_service *service) { if (service->timeout > 0) {