summaryrefslogtreecommitdiff
path: root/src/notifier.c
diff options
context:
space:
mode:
authorMarcel Holtmann <marcel@holtmann.org>2009-07-17 01:33:49 +0200
committerMarcel Holtmann <marcel@holtmann.org>2009-07-17 01:33:49 +0200
commitbda94bdcfec5598c53fc45f7946399e27f6329f4 (patch)
tree48df691b71ecaf00613877bded4b51bce757b2f1 /src/notifier.c
parentf69628b56b92b6e3d2bc7dbead9afcdce8c762cc (diff)
downloadconnman-bda94bdcfec5598c53fc45f7946399e27f6329f4.tar.gz
connman-bda94bdcfec5598c53fc45f7946399e27f6329f4.tar.bz2
connman-bda94bdcfec5598c53fc45f7946399e27f6329f4.zip
Don't forget to send signals for technology changes
Diffstat (limited to 'src/notifier.c')
-rw-r--r--src/notifier.c60
1 files changed, 60 insertions, 0 deletions
diff --git a/src/notifier.c b/src/notifier.c
index 03367d4e..1ece8a17 100644
--- a/src/notifier.c
+++ b/src/notifier.c
@@ -23,8 +23,12 @@
#include <config.h>
#endif
+#include <gdbus.h>
+
#include "connman.h"
+static DBusConnection *connection = NULL;
+
static GSList *notifier_list = NULL;
static gint compare_priority(gconstpointer a, gconstpointer b)
@@ -70,9 +74,35 @@ static void device_enabled(enum connman_device_type type,
connman_bool_t enabled)
{
GSList *list;
+ DBusMessage *signal;
+ DBusMessageIter entry, value, iter;
+ const char *key = "EnabledTechnologies";
DBG("type %d enabled %d", type, enabled);
+ signal = dbus_message_new_signal(CONNMAN_MANAGER_PATH,
+ CONNMAN_MANAGER_INTERFACE, "PropertyChanged");
+ if (signal == NULL)
+ goto done;
+
+ dbus_message_iter_init_append(signal, &entry);
+
+ dbus_message_iter_append_basic(&entry, DBUS_TYPE_STRING, &key);
+
+ dbus_message_iter_open_container(&entry, DBUS_TYPE_VARIANT,
+ DBUS_TYPE_ARRAY_AS_STRING DBUS_TYPE_STRING_AS_STRING,
+ &value);
+
+ dbus_message_iter_open_container(&value, DBUS_TYPE_ARRAY,
+ DBUS_TYPE_STRING_AS_STRING, &iter);
+ __connman_notifier_device_type_list(TRUE, &iter);
+ dbus_message_iter_close_container(&value, &iter);
+
+ dbus_message_iter_close_container(&entry, &value);
+
+ g_dbus_send_message(connection, signal);
+
+done:
for (list = notifier_list; list; list = list->next) {
struct connman_notifier *notifier = list->data;
@@ -84,7 +114,33 @@ static void device_enabled(enum connman_device_type type,
static void device_registered(enum connman_device_type type,
connman_bool_t registered)
{
+ DBusMessage *signal;
+ DBusMessageIter entry, value, iter;
+ const char *key = "Technologies";
+
DBG("type %d registered %d", type, registered);
+
+ signal = dbus_message_new_signal(CONNMAN_MANAGER_PATH,
+ CONNMAN_MANAGER_INTERFACE, "PropertyChanged");
+ if (signal == NULL)
+ return;
+
+ dbus_message_iter_init_append(signal, &entry);
+
+ dbus_message_iter_append_basic(&entry, DBUS_TYPE_STRING, &key);
+
+ dbus_message_iter_open_container(&entry, DBUS_TYPE_VARIANT,
+ DBUS_TYPE_ARRAY_AS_STRING DBUS_TYPE_STRING_AS_STRING,
+ &value);
+
+ dbus_message_iter_open_container(&value, DBUS_TYPE_ARRAY,
+ DBUS_TYPE_STRING_AS_STRING, &iter);
+ __connman_notifier_device_type_list(FALSE, &iter);
+ dbus_message_iter_close_container(&value, &iter);
+
+ dbus_message_iter_close_container(&entry, &value);
+
+ g_dbus_send_message(connection, signal);
}
static const char *type2string(enum connman_device_type type)
@@ -255,10 +311,14 @@ int __connman_notifier_init(void)
{
DBG("");
+ connection = connman_dbus_get_connection();
+
return 0;
}
void __connman_notifier_cleanup(void)
{
DBG("");
+
+ dbus_connection_unref(connection);
}