summaryrefslogtreecommitdiff
path: root/src/manager.c
diff options
context:
space:
mode:
authorMohamed Abbas <mohamed.abbas@intel.com>2009-12-09 00:16:41 +0100
committerMarcel Holtmann <marcel@holtmann.org>2009-12-09 00:17:51 +0100
commit70b2b67cdbd30a63ac016e1314095342ab9f60b9 (patch)
tree082be9c0668675cd36fb9661cab899c54b4c9e6d /src/manager.c
parentcc3921c058080b2b9f6935ebb58f808e3fec261c (diff)
downloadconnman-70b2b67cdbd30a63ac016e1314095342ab9f60b9.tar.gz
connman-70b2b67cdbd30a63ac016e1314095342ab9f60b9.tar.bz2
connman-70b2b67cdbd30a63ac016e1314095342ab9f60b9.zip
Add interfaces for connecting providers
Diffstat (limited to 'src/manager.c')
-rw-r--r--src/manager.c76
1 files changed, 76 insertions, 0 deletions
diff --git a/src/manager.c b/src/manager.c
index 535f2817..f64f98e4 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 },
{ },