summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Wagner <daniel.wagner@bmw-carit.de>2011-03-31 10:02:33 +0200
committerSamuel Ortiz <sameo@linux.intel.com>2011-03-31 12:38:07 +0200
commita4682c5e09c0aebbc0ffd0689523228f9570ca95 (patch)
treeb4a631370c472120884e4f7b9c180e6a0c4c2f46
parent5eaec1228065876e49d988188f3057916fb7e9fa (diff)
downloadconnman-a4682c5e09c0aebbc0ffd0689523228f9570ca95.tar.gz
connman-a4682c5e09c0aebbc0ffd0689523228f9570ca95.tar.bz2
connman-a4682c5e09c0aebbc0ffd0689523228f9570ca95.zip
notify: Add service state notifiers
-rw-r--r--include/notifier.h2
-rw-r--r--src/connman.h2
-rw-r--r--src/notifier.c13
-rw-r--r--src/service.c8
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;