notify: Add service state notifiers
authorDaniel Wagner <daniel.wagner@bmw-carit.de>
Thu, 31 Mar 2011 08:02:33 +0000 (10:02 +0200)
committerSamuel Ortiz <sameo@linux.intel.com>
Thu, 31 Mar 2011 10:38:07 +0000 (12:38 +0200)
include/notifier.h
src/connman.h
src/notifier.c
src/service.c

index db2ea5c..4349f83 100644 (file)
@@ -46,6 +46,8 @@ struct connman_notifier {
                                                connman_bool_t enabled);
        void (*offline_mode) (connman_bool_t enabled);
        void (*proxy_changed) (struct connman_service *service);
+       void (*service_state_changed) (struct connman_service *service,
+                                       enum connman_service_state state);
 };
 
 int connman_notifier_register(struct connman_notifier *notifier);
index c16059c..a030a42 100644 (file)
@@ -602,6 +602,8 @@ void __connman_notifier_disconnect(enum connman_service_type type);
 void __connman_notifier_offlinemode(connman_bool_t enabled);
 void __connman_notifier_default_changed(struct connman_service *service);
 void __connman_notifier_proxy_changed(struct connman_service *service);
+void __connman_notifier_service_state_changed(struct connman_service *service,
+                                       enum connman_service_state state);
 
 connman_bool_t __connman_notifier_is_registered(enum connman_service_type type);
 connman_bool_t __connman_notifier_is_enabled(enum connman_service_type type);
index 23774ef..f02f2da 100644 (file)
@@ -424,6 +424,19 @@ void __connman_notifier_offlinemode(connman_bool_t enabled)
        }
 }
 
+void __connman_notifier_service_state_changed(struct connman_service *service,
+                                       enum connman_service_state state)
+{
+       GSList *list;
+
+       for (list = notifier_list; list; list = list->next) {
+               struct connman_notifier *notifier = list->data;
+
+               if (notifier->service_state_changed)
+                       notifier->service_state_changed(service, state);
+       }
+}
+
 static connman_bool_t technology_supported(enum connman_service_type type)
 {
        switch (type) {
index 91e0a61..4d5d78c 100644 (file)
@@ -835,10 +835,14 @@ static void mode_changed(struct connman_service *service)
 
 static void state_changed(struct connman_service *service)
 {
+       enum connman_service_state state;
        const char *str;
 
-       str = state2string(combine_state(service->state_ipv4,
-                                                       service->state_ipv6));
+       state = combine_state(service->state_ipv4, service->state_ipv6);
+
+       __connman_notifier_service_state_changed(service, state);
+
+       str = state2string(state);
        if (str == NULL)
                return;