From 70b2b67cdbd30a63ac016e1314095342ab9f60b9 Mon Sep 17 00:00:00 2001 From: Mohamed Abbas Date: Wed, 9 Dec 2009 00:16:41 +0100 Subject: [PATCH] Add interfaces for connecting providers --- src/manager.c | 76 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) diff --git a/src/manager.c b/src/manager.c index 535f281..f64f98e 100644 --- a/src/manager.c +++ b/src/manager.c @@ -75,6 +75,31 @@ static void append_services(DBusMessageIter *dict) dbus_message_iter_close_container(dict, &entry); } + +static void append_providers(DBusMessageIter *dict) +{ + DBusMessageIter entry, value, iter; + const char *key = "Providers"; + + dbus_message_iter_open_container(dict, DBUS_TYPE_DICT_ENTRY, + NULL, &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_OBJECT_PATH_AS_STRING, + &value); + + dbus_message_iter_open_container(&value, DBUS_TYPE_ARRAY, + DBUS_TYPE_OBJECT_PATH_AS_STRING, &iter); + __connman_provider_list(&iter); + dbus_message_iter_close_container(&value, &iter); + + dbus_message_iter_close_container(&entry, &value); + + dbus_message_iter_close_container(dict, &entry); +} + static void append_devices(DBusMessageIter *dict) { DBusMessageIter entry, value, iter; @@ -251,6 +276,7 @@ static DBusMessage *get_properties(DBusConnection *conn, append_profiles(&dict); append_services(&dict); + append_providers(&dict); append_devices(&dict); @@ -393,6 +419,28 @@ static DBusMessage *remove_profile(DBusConnection *conn, return g_dbus_create_reply(msg, DBUS_TYPE_INVALID); } +static DBusMessage *remove_provider(DBusConnection *conn, + DBusMessage *msg, void *data) +{ + const char *path; + int err; + + DBG("conn %p", conn); + + dbus_message_get_args(msg, NULL, DBUS_TYPE_STRING, &path, + DBUS_TYPE_INVALID); + + if (__connman_security_check_privilege(msg, + CONNMAN_SECURITY_PRIVILEGE_MODIFY) < 0) + return __connman_error_permission_denied(msg); + + err = __connman_provider_remove(path); + if (err < 0) + return __connman_error_failed(msg, -err); + + return g_dbus_create_reply(msg, DBUS_TYPE_INVALID); +} + static DBusMessage *request_scan(DBusConnection *conn, DBusMessage *msg, void *data) { @@ -602,6 +650,31 @@ static DBusMessage *connect_service(DBusConnection *conn, return NULL; } + +static DBusMessage *connect_provider(DBusConnection *conn, + DBusMessage *msg, void *data) +{ + int err; + + DBG("conn %p", conn); + + if (__connman_security_check_privilege(msg, + CONNMAN_SECURITY_PRIVILEGE_MODIFY) < 0) + return __connman_error_permission_denied(msg); + + err = __connman_provider_create_and_connect(msg); + if (err < 0) { + if (err == -EINPROGRESS) { + connman_error("Invalid return code from connect"); + err = -EINVAL; + } + + return __connman_error_failed(msg, -err); + } + + return NULL; +} + static DBusMessage *register_agent(DBusConnection *conn, DBusMessage *msg, void *data) { @@ -648,6 +721,7 @@ static GDBusMethodTable manager_methods[] = { { "GetState", "", "s", get_state }, { "CreateProfile", "s", "o", create_profile }, { "RemoveProfile", "o", "", remove_profile }, + { "RemoveProvider", "s", "", remove_provider }, { "RequestScan", "s", "", request_scan }, { "EnableTechnology", "s", "", enable_technology, G_DBUS_METHOD_FLAG_ASYNC }, @@ -655,6 +729,8 @@ static GDBusMethodTable manager_methods[] = { G_DBUS_METHOD_FLAG_ASYNC }, { "ConnectService", "a{sv}", "o", connect_service, G_DBUS_METHOD_FLAG_ASYNC }, + { "ConnectProvider", "a{sv}", "o", connect_provider, + G_DBUS_METHOD_FLAG_ASYNC }, { "RegisterAgent", "o", "", register_agent }, { "UnregisterAgent", "o", "", unregister_agent }, { }, -- 2.7.4