notify: Add service_add()/remove()
authorDaniel Wagner <daniel.wagner@bmw-carit.de>
Tue, 12 Apr 2011 06:53:35 +0000 (08:53 +0200)
committerDaniel Wagner <daniel.wagner@bmw-carit.de>
Tue, 12 Apr 2011 13:27:43 +0000 (15:27 +0200)
include/notifier.h
src/connman.h
src/notifier.c
src/service.c

index 5efae71..7ac7c99 100644 (file)
@@ -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);
index ac56ef2..8adf909 100644 (file)
@@ -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);
index 846546b..27e53a1 100644 (file)
@@ -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;
index f18cd33..24996da 100644 (file)
@@ -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;
 }