+const char *__connman_profile_active(void)
+{
+ DBG("");
+
+ return PROFILE_DEFAULT;
+}
+
+static void append_path(gpointer value, gpointer user_data)
+{
+ struct connman_group *group = value;
+ DBusMessageIter *iter = user_data;
+
+ dbus_message_iter_append_basic(iter, DBUS_TYPE_OBJECT_PATH,
+ &group->path);
+}
+
+void __connman_profile_list_services(DBusMessageIter *iter)
+{
+ DBG("");
+
+ g_sequence_foreach(groups, append_path, iter);
+}
+
+static void append_services(DBusMessageIter *entry)
+{
+ DBusMessageIter value, iter;
+ const char *key = "Services";
+
+ 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_profile_list_services(&iter);
+ dbus_message_iter_close_container(&value, &iter);
+
+ dbus_message_iter_close_container(entry, &value);
+}
+
+static void emit_services_signal(void)
+{
+ const char *path = __connman_profile_active();
+ DBusMessage *signal;
+ DBusMessageIter entry;
+
+ signal = dbus_message_new_signal(path,
+ CONNMAN_PROFILE_INTERFACE, "PropertyChanged");
+ if (signal == NULL)
+ return;
+
+ dbus_message_iter_init_append(signal, &entry);
+ append_services(&entry);
+ g_dbus_send_message(connection, signal);
+
+ signal = dbus_message_new_signal(CONNMAN_MANAGER_PATH,
+ CONNMAN_MANAGER_INTERFACE, "PropertyChanged");
+ if (signal == NULL)
+ return;
+
+ dbus_message_iter_init_append(signal, &entry);
+ append_services(&entry);
+ g_dbus_send_message(connection, signal);
+}
+