summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMarcel Holtmann <marcel@holtmann.org>2009-01-06 01:26:34 +0100
committerMarcel Holtmann <marcel@holtmann.org>2009-01-06 01:26:34 +0100
commit301a728a5e1ba1f7d70d9430e75376de7867b5d7 (patch)
treebcb6b205ad5bcb3ba84a39b61f56ac59acbedb29 /src
parent839885f14c8b7bc9957b944e5c450bf921d47fe8 (diff)
downloadconnman-301a728a5e1ba1f7d70d9430e75376de7867b5d7.tar.gz
connman-301a728a5e1ba1f7d70d9430e75376de7867b5d7.tar.bz2
connman-301a728a5e1ba1f7d70d9430e75376de7867b5d7.zip
Fix signal emission for network creation and removal
Diffstat (limited to 'src')
-rw-r--r--src/network.c40
1 files changed, 37 insertions, 3 deletions
diff --git a/src/network.c b/src/network.c
index c60cfa44..99bb40b8 100644
--- a/src/network.c
+++ b/src/network.c
@@ -236,8 +236,42 @@ static GDBusSignalTable network_signals[] = {
static DBusConnection *connection;
-static void emit_networks_signal(void)
+static void append_networks(struct connman_device *device,
+ DBusMessageIter *entry)
{
+ DBusMessageIter value, iter;
+ const char *key = "Networks";
+
+ 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_OBJECT_PATH_AS_STRING,
+ &value);
+
+ dbus_message_iter_open_container(&value, DBUS_TYPE_ARRAY,
+ DBUS_TYPE_OBJECT_PATH_AS_STRING, &iter);
+ __connman_element_list((struct connman_element *) device,
+ CONNMAN_ELEMENT_TYPE_NETWORK, &iter);
+ dbus_message_iter_close_container(&value, &iter);
+
+ dbus_message_iter_close_container(entry, &value);
+}
+
+static void emit_networks_signal(struct connman_device *device)
+{
+ DBusMessage *signal;
+ DBusMessageIter entry;
+
+ signal = dbus_message_new_signal(CONNMAN_MANAGER_PATH,
+ CONNMAN_MANAGER_INTERFACE, "PropertyChanged");
+ if (signal == NULL)
+ return;
+
+ dbus_message_iter_init_append(signal, &entry);
+
+ append_networks(device, &entry);
+
+ g_dbus_send_message(connection, signal);
}
static int register_interface(struct connman_element *element)
@@ -256,7 +290,7 @@ static int register_interface(struct connman_element *element)
network->registered = TRUE;
- emit_networks_signal();
+ emit_networks_signal(network->device);
return 0;
}
@@ -269,7 +303,7 @@ static void unregister_interface(struct connman_element *element)
network->registered = FALSE;
- emit_networks_signal();
+ emit_networks_signal(network->device);
g_dbus_unregister_interface(connection, element->path,
CONNMAN_NETWORK_INTERFACE);