#include "connman.h"
+#define PROFILE_DEFAULT_IDENT "default"
+
+static DBusConnection *connection = NULL;
+
+const char *__connman_profile_active_ident(void)
+{
+ DBG("");
+
+ return PROFILE_DEFAULT_IDENT;
+}
+
+const char *__connman_profile_active_path(void)
+{
+ DBG("");
+
+ return "/profile/" PROFILE_DEFAULT_IDENT;
+}
+
+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_service_list(&iter);
+ dbus_message_iter_close_container(&value, &iter);
+
+ dbus_message_iter_close_container(entry, &value);
+}
+
+void __connman_profile_changed(void)
+{
+ const char *path = __connman_profile_active_path();
+ 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);
+}
+
int __connman_profile_add_device(struct connman_device *device)
{
+ struct connman_service *service;
+
DBG("device %p", device);
+ service = __connman_service_create_from_device(device);
+ if (service == NULL)
+ return -EINVAL;
+
return 0;
}
int __connman_profile_remove_device(struct connman_device *device)
{
+ struct connman_service *service;
+
DBG("device %p", device);
+ service = __connman_service_lookup_from_device(device);
+ if (service == NULL)
+ return -EINVAL;
+
+ __connman_service_put(service);
+
return 0;
}
int __connman_profile_add_network(struct connman_network *network)
{
+ struct connman_service *service;
+
DBG("network %p", network);
+ service = __connman_service_create_from_network(network);
+ if (service == NULL)
+ return -EINVAL;
+
return 0;
}
int __connman_profile_remove_network(struct connman_network *network)
{
+ struct connman_service *service;
+
DBG("network %p", network);
- return 0;
-}
+ service = __connman_service_lookup_from_network(network);
+ if (service == NULL)
+ return -EINVAL;
-const char *__connman_profile_active(void)
-{
- DBG("");
+ __connman_service_put(service);
- return "/profile/default";
+ return 0;
}
void __connman_profile_list(DBusMessageIter *iter)
{
- const char *path = __connman_profile_active();
+ const char *path = __connman_profile_active_path();
DBG("");
dbus_message_iter_append_basic(iter, DBUS_TYPE_OBJECT_PATH, &path);
}
-void __connman_profile_list_services(DBusMessageIter *iter)
-{
- DBG("");
-}
-
static DBusMessage *get_properties(DBusConnection *conn,
DBusMessage *msg, void *data)
{
const char *name = "Default";
DBusMessage *reply;
- DBusMessageIter array, dict;
+ DBusMessageIter array, dict, entry;
DBG("conn %p", conn);
connman_dbus_dict_append_variant(&dict, "Name",
DBUS_TYPE_STRING, &name);
+ dbus_message_iter_open_container(&dict, DBUS_TYPE_DICT_ENTRY,
+ NULL, &entry);
+ append_services(&entry);
+ dbus_message_iter_close_container(&dict, &entry);
+
dbus_message_iter_close_container(&array, &dict);
return reply;
{ },
};
-static DBusConnection *connection = NULL;
+static GDBusSignalTable profile_signals[] = {
+ { "PropertyChanged", "sv" },
+ { },
+};
int __connman_profile_init(DBusConnection *conn)
{
+ const char *path = __connman_profile_active_path();
+
DBG("conn %p", conn);
connection = dbus_connection_ref(conn);
if (connection == NULL)
return -1;
- g_dbus_register_interface(connection, "/profile/default",
- CONNMAN_PROFILE_INTERFACE,
- profile_methods,
- NULL, NULL, NULL, NULL);
+ g_dbus_register_interface(connection, path,
+ CONNMAN_PROFILE_INTERFACE,
+ profile_methods, profile_signals,
+ NULL, NULL, NULL);
return 0;
}
void __connman_profile_cleanup(void)
{
+ const char *path = __connman_profile_active_path();
+
DBG("conn %p", connection);
- g_dbus_unregister_interface(connection, "/profile/default",
+ g_dbus_unregister_interface(connection, path,
CONNMAN_PROFILE_INTERFACE);
if (connection == NULL)