From decb6cbdb3529be7ff16f445c9c791133872203e Mon Sep 17 00:00:00 2001 From: Pekka Pessi Date: Wed, 26 Jan 2011 16:50:36 +0200 Subject: [PATCH] network: Add connman_network_clear_error() Clear the error on corresponding service (and set reconnect) in order to retry autoconnecting. --- include/network.h | 1 + src/connman.h | 1 + src/network.c | 16 ++++++++++++++++ src/service.c | 20 ++++++++++++++++++++ 4 files changed, 38 insertions(+) diff --git a/include/network.h b/include/network.h index a2b768b..0266b5e 100644 --- a/include/network.h +++ b/include/network.h @@ -83,6 +83,7 @@ int connman_network_set_associating(struct connman_network *network, connman_bool_t associating); void connman_network_set_error(struct connman_network *network, enum connman_network_error error); +void connman_network_clear_error(struct connman_network *network); int connman_network_set_connected(struct connman_network *network, connman_bool_t connected); connman_bool_t connman_network_get_connected(struct connman_network *network); diff --git a/src/connman.h b/src/connman.h index 24d5d2c..18c0140 100644 --- a/src/connman.h +++ b/src/connman.h @@ -487,6 +487,7 @@ int __connman_service_indicate_state(struct connman_service *service, enum connman_service_state state); int __connman_service_indicate_error(struct connman_service *service, enum connman_service_error error); +int __connman_service_clear_error(struct connman_service *service); int __connman_service_indicate_default(struct connman_service *service); int __connman_service_request_login(struct connman_service *service); diff --git a/src/network.c b/src/network.c index 612e923..bfbdad8 100644 --- a/src/network.c +++ b/src/network.c @@ -587,6 +587,22 @@ void connman_network_set_error(struct connman_network *network, } } +void connman_network_clear_error(struct connman_network *network) +{ + struct connman_service *service; + + DBG("network %p", network); + + if (network == NULL) + return; + + if (network->connecting == TRUE || network->associating == TRUE) + return; + + service = __connman_service_lookup_from_network(network); + __connman_service_clear_error(service); +} + static void set_configuration(struct connman_network *network) { struct connman_service *service; diff --git a/src/service.c b/src/service.c index 0ea1223..a3053b7 100644 --- a/src/service.c +++ b/src/service.c @@ -3206,6 +3206,26 @@ int __connman_service_indicate_error(struct connman_service *service, CONNMAN_SERVICE_STATE_FAILURE); } +int __connman_service_clear_error(struct connman_service *service) +{ + DBG("service %p", service); + + if (service == NULL) + return -EINVAL; + + if (service->state != CONNMAN_SERVICE_STATE_FAILURE) + return -EINVAL; + + service->state = CONNMAN_SERVICE_STATE_UNKNOWN; + service->error = CONNMAN_SERVICE_ERROR_UNKNOWN;; + + if (service->favorite == TRUE) + set_reconnect_state(service, TRUE); + + return __connman_service_indicate_state(service, + CONNMAN_SERVICE_STATE_IDLE); +} + int __connman_service_indicate_default(struct connman_service *service) { DBG("service %p", service); -- 2.7.4