summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Wagner <daniel.wagner@bmw-carit.de>2011-04-12 08:53:35 +0200
committerDaniel Wagner <daniel.wagner@bmw-carit.de>2011-04-12 15:27:43 +0200
commita4fa4668d6b2437817c23e7283a89a7ac1ac7f21 (patch)
tree84f102a32b0ae52fe8f91109e848ca5444b436be
parent8d222f87ce097abf1591e54bf93bb3466920804c (diff)
downloadconnman-a4fa4668d6b2437817c23e7283a89a7ac1ac7f21.tar.gz
connman-a4fa4668d6b2437817c23e7283a89a7ac1ac7f21.tar.bz2
connman-a4fa4668d6b2437817c23e7283a89a7ac1ac7f21.zip
notify: Add service_add()/remove()
-rw-r--r--include/notifier.h2
-rw-r--r--src/connman.h2
-rw-r--r--src/notifier.c24
-rw-r--r--src/service.c6
4 files changed, 34 insertions, 0 deletions
diff --git a/include/notifier.h b/include/notifier.h
index 5efae71b..7ac7c991 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 ac56ef22..8adf9096 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 846546bc..27e53a1d 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 f18cd33d..24996dad 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;
}