Add function for more detailed error reporting
authorMarcel Holtmann <marcel@holtmann.org>
Mon, 29 Jun 2009 21:45:12 +0000 (23:45 +0200)
committerMarcel Holtmann <marcel@holtmann.org>
Mon, 29 Jun 2009 21:45:12 +0000 (23:45 +0200)
include/service.h
src/connman.h
src/service.c

index 5e5faa9..c173a91 100644 (file)
@@ -66,6 +66,10 @@ enum connman_service_state {
        CONNMAN_SERVICE_STATE_FAILURE       = 7,
 };
 
+enum connman_service_error {
+       CONNMAN_SERVICE_ERROR_UNKNOWN = 0,
+};
+
 struct connman_service;
 
 struct connman_service *connman_service_create(void);
index d170a90..0af5814 100644 (file)
@@ -266,6 +266,8 @@ int __connman_service_set_carrier(struct connman_service *service,
                                                connman_bool_t carrier);
 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_indicate_default(struct connman_service *service);
 
 #include <connman/notifier.h>
index 002bc84..4a6efae 100644 (file)
@@ -40,6 +40,7 @@ struct connman_service {
        enum connman_service_mode mode;
        enum connman_service_security security;
        enum connman_service_state state;
+       enum connman_service_error error;
        connman_uint8_t strength;
        connman_bool_t favorite;
        connman_bool_t hidden;
@@ -873,7 +874,8 @@ int __connman_service_indicate_state(struct connman_service *service,
 
                service->state = CONNMAN_SERVICE_STATE_IDLE;
                state_changed(service);
-       }
+       } else
+               service->error = CONNMAN_SERVICE_ERROR_UNKNOWN;
 
        iter = g_hash_table_lookup(service_hash, service->identifier);
        if (iter != NULL)
@@ -884,6 +886,20 @@ int __connman_service_indicate_state(struct connman_service *service,
        return 0;
 }
 
+int __connman_service_indicate_error(struct connman_service *service,
+                                       enum connman_service_error error)
+{
+       DBG("service %p error %d", service, error);
+
+       if (service == NULL)
+               return -EINVAL;
+
+       service->error = error;
+
+       return __connman_service_indicate_state(service,
+                                       CONNMAN_SERVICE_STATE_FAILURE);
+}
+
 int __connman_service_indicate_default(struct connman_service *service)
 {
        DBG("service %p", service);