summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/network.h1
-rw-r--r--src/connman.h1
-rw-r--r--src/network.c16
-rw-r--r--src/service.c20
4 files changed, 38 insertions, 0 deletions
diff --git a/include/network.h b/include/network.h
index a2b768b4..0266b5e9 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 24d5d2c7..18c01405 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 612e9238..bfbdad8b 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 0ea1223d..a3053b73 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);