Add interfaces for connecting providers
authorMohamed Abbas <mohamed.abbas@intel.com>
Tue, 8 Dec 2009 23:16:41 +0000 (00:16 +0100)
committerMarcel Holtmann <marcel@holtmann.org>
Tue, 8 Dec 2009 23:17:51 +0000 (00:17 +0100)
src/manager.c

index 535f281..f64f98e 100644 (file)
@@ -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   },
        { },