From: Daniel Wagner <[email protected]>

---
 include/notifier.h |    2 ++
 src/connman.h      |    2 ++
 src/notifier.c     |   24 ++++++++++++++++++++++++
 src/service.c      |    6 ++++++
 4 files changed, 34 insertions(+), 0 deletions(-)

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;
 }
 
-- 
1.7.4.2

_______________________________________________
connman mailing list
[email protected]
http://lists.connman.net/listinfo/connman

Reply via email to