return offlinemode;
}
-static DBusMessage *get_properties(DBusConnection *conn,
- DBusMessage *message, void *user_data)
+static void append_properties(DBusMessageIter *iter,
+ struct connman_technology *technology)
{
- struct connman_technology *technology = user_data;
- DBusMessage *reply;
- DBusMessageIter array, dict;
+ DBusMessageIter dict;
const char *str;
- reply = dbus_message_new_method_return(message);
- if (reply == NULL)
- return NULL;
-
- dbus_message_iter_init_append(reply, &array);
-
- connman_dbus_dict_open(&array, &dict);
+ connman_dbus_dict_open(iter, &dict);
str = state2string(technology->state);
if (str != NULL)
DBUS_TYPE_STRING,
&technology->tethering_passphrase);
- connman_dbus_dict_close(&array, &dict);
+ connman_dbus_dict_close(iter, &dict);
+}
+
+static void technology_added_signal(struct connman_technology *technology)
+{
+ DBusMessage *signal;
+ DBusMessageIter iter;
+
+ signal = dbus_message_new_signal(CONNMAN_MANAGER_PATH,
+ CONNMAN_MANAGER_INTERFACE, "TechnologyAdded");
+ if (signal == NULL)
+ return;
+
+ dbus_message_iter_init_append(signal, &iter);
+ append_properties(&iter, technology);
+
+ dbus_connection_send(connection, signal, NULL);
+ dbus_message_unref(signal);
+}
+
+static void technology_removed_signal(struct connman_technology *technology)
+{
+ g_dbus_emit_signal(connection, CONNMAN_MANAGER_PATH,
+ CONNMAN_MANAGER_INTERFACE, "TechnologyRemoved",
+ DBUS_TYPE_OBJECT_PATH, technology->path);
+}
+
+static DBusMessage *get_properties(DBusConnection *conn,
+ DBusMessage *message, void *user_data)
+{
+ struct connman_technology *technology = user_data;
+ DBusMessage *reply;
+ DBusMessageIter iter;
+
+ reply = dbus_message_new_method_return(message);
+ if (reply == NULL)
+ return NULL;
+
+ dbus_message_iter_init_append(reply, &iter);
+ append_properties(&iter, technology);
return reply;
}
technology_list = g_slist_append(technology_list, technology);
technologies_changed();
+ technology_added_signal(technology);
if (technology->driver != NULL)
goto done;
technology_list = g_slist_remove(technology_list, technology);
technologies_changed();
+ technology_removed_signal(technology);
g_dbus_unregister_interface(connection, technology->path,
CONNMAN_TECHNOLOGY_INTERFACE);