From a4fa4668d6b2437817c23e7283a89a7ac1ac7f21 Mon Sep 17 00:00:00 2001 From: Daniel Wagner Date: Tue, 12 Apr 2011 08:53:35 +0200 Subject: [PATCH] notify: Add service_add()/remove() --- include/notifier.h | 2 ++ src/connman.h | 2 ++ src/notifier.c | 24 ++++++++++++++++++++++++ src/service.c | 6 ++++++ 4 files changed, 34 insertions(+) diff --git a/include/notifier.h b/include/notifier.h index 5efae71..7ac7c99 100644 --- a/include/notifier.h +++ b/include/notifier.h @@ -43,6 +43,8 @@ struct connman_notifier { const char *name; int priority; void (*default_changed) (struct connman_service *service); + void (*service_add) (struct connman_service *service); + void (*service_remove) (struct connman_service *service); void (*service_enabled) (enum connman_service_type type, connman_bool_t enabled); void (*offline_mode) (connman_bool_t enabled); diff --git a/src/connman.h b/src/connman.h index ac56ef2..8adf909 100644 --- a/src/connman.h +++ b/src/connman.h @@ -596,6 +596,8 @@ void __connman_notifier_list_connected(DBusMessageIter *iter, void *user_data); void __connman_notifier_register(enum connman_service_type type); void __connman_notifier_unregister(enum connman_service_type type); +void __connman_notifier_service_add(struct connman_service *service); +void __connman_notifier_service_remove(struct connman_service *service); void __connman_notifier_enable(enum connman_service_type type); void __connman_notifier_disable(enum connman_service_type type); void __connman_notifier_connect(enum connman_service_type type); diff --git a/src/notifier.c b/src/notifier.c index 846546b..27e53a1 100644 --- a/src/notifier.c +++ b/src/notifier.c @@ -385,6 +385,30 @@ void __connman_notifier_default_changed(struct connman_service *service) } } +void __connman_notifier_service_add(struct connman_service *service) +{ + GSList *list; + + for (list = notifier_list; list; list = list->next) { + struct connman_notifier *notifier = list->data; + + if (notifier->service_add) + notifier->service_add(service); + } +} + +void __connman_notifier_service_remove(struct connman_service *service) +{ + GSList *list; + + for (list = notifier_list; list; list = list->next) { + struct connman_notifier *notifier = list->data; + + if (notifier->service_remove) + notifier->service_remove(service); + } +} + void __connman_notifier_proxy_changed(struct connman_service *service) { GSList *list; diff --git a/src/service.c b/src/service.c index f18cd33..24996da 100644 --- a/src/service.c +++ b/src/service.c @@ -2938,6 +2938,8 @@ static void service_free(gpointer user_data) g_hash_table_remove(service_hash, service->identifier); + __connman_notifier_service_remove(service); + stats_stop(service); __connman_storage_save_service(service); @@ -4857,6 +4859,8 @@ struct connman_service * __connman_service_create_from_network(struct connman_ne __connman_service_auto_connect(); } + __connman_notifier_service_add(service); + return service; } @@ -5017,6 +5021,8 @@ __connman_service_create_from_provider(struct connman_provider *provider) service_register(service); + __connman_notifier_service_add(service); + return service; } -- 2.7.4