diff options
author | Daniel Wagner <daniel.wagner@bmw-carit.de> | 2011-03-31 10:02:33 +0200 |
---|---|---|
committer | Samuel Ortiz <sameo@linux.intel.com> | 2011-03-31 12:38:07 +0200 |
commit | a4682c5e09c0aebbc0ffd0689523228f9570ca95 (patch) | |
tree | b4a631370c472120884e4f7b9c180e6a0c4c2f46 | |
parent | 5eaec1228065876e49d988188f3057916fb7e9fa (diff) | |
download | connman-a4682c5e09c0aebbc0ffd0689523228f9570ca95.tar.gz connman-a4682c5e09c0aebbc0ffd0689523228f9570ca95.tar.bz2 connman-a4682c5e09c0aebbc0ffd0689523228f9570ca95.zip |
notify: Add service state notifiers
-rw-r--r-- | include/notifier.h | 2 | ||||
-rw-r--r-- | src/connman.h | 2 | ||||
-rw-r--r-- | src/notifier.c | 13 | ||||
-rw-r--r-- | src/service.c | 8 |
4 files changed, 23 insertions, 2 deletions
diff --git a/include/notifier.h b/include/notifier.h index db2ea5cd..4349f839 100644 --- a/include/notifier.h +++ b/include/notifier.h @@ -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); diff --git a/src/connman.h b/src/connman.h index c16059c4..a030a42f 100644 --- a/src/connman.h +++ b/src/connman.h @@ -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); diff --git a/src/notifier.c b/src/notifier.c index 23774ef7..f02f2dac 100644 --- a/src/notifier.c +++ b/src/notifier.c @@ -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) { diff --git a/src/service.c b/src/service.c index 91e0a617..4d5d78cd 100644 --- a/src/service.c +++ b/src/service.c @@ -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; |