network: Add connman_network_clear_error()
authorPekka Pessi <Pekka.Pessi@nokia.com>
Wed, 26 Jan 2011 14:50:36 +0000 (16:50 +0200)
committerSamuel Ortiz <sameo@linux.intel.com>
Thu, 27 Jan 2011 10:07:55 +0000 (11:07 +0100)
Clear the error on corresponding service (and set reconnect) in order to
retry autoconnecting.

include/network.h
src/connman.h
src/network.c
src/service.c

index a2b768b..0266b5e 100644 (file)
@@ -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);
index 24d5d2c..18c0140 100644 (file)
@@ -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);
 
index 612e923..bfbdad8 100644 (file)
@@ -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;
index 0ea1223..a3053b7 100644 (file)
@@ -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);