Merge "[connman] Manage the MAX saved wireless profiles." into tizen
[platform/upstream/connman.git] / vpn / vpn-manager.c
old mode 100644 (file)
new mode 100755 (executable)
index 680f2fd..021d625
@@ -2,7 +2,7 @@
  *
  *  ConnMan VPN daemon
  *
- *  Copyright (C) 2012  Intel Corporation. All rights reserved.
+ *  Copyright (C) 2012-2013  Intel Corporation. All rights reserved.
  *
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License version 2 as
@@ -27,6 +27,7 @@
 
 #include <gdbus.h>
 #include <connman/log.h>
+#include <connman/agent.h>
 
 #include "../src/connman.h"
 
@@ -42,7 +43,7 @@ static DBusMessage *create(DBusConnection *conn, DBusMessage *msg, void *data)
 
        DBG("conn %p", conn);
 
-       err = __vpn_provider_create_and_connect(msg);
+       err = __vpn_provider_create(msg);
        if (err < 0) {
                if (err == -EINPROGRESS) {
                        connman_error("Invalid return code (%d) "
@@ -81,12 +82,52 @@ static DBusMessage *get_connections(DBusConnection *conn, DBusMessage *msg,
        DBG("conn %p", conn);
 
        reply = __vpn_provider_get_connections(msg);
-       if (reply == NULL)
-               return __connman_error_failed(msg, -EINVAL);
+       if (!reply)
+               return __connman_error_failed(msg, EINVAL);
 
        return reply;
 }
 
+static DBusMessage *register_agent(DBusConnection *conn,
+                                       DBusMessage *msg, void *data)
+{
+       const char *sender, *path;
+       int err;
+
+       DBG("conn %p", conn);
+
+       sender = dbus_message_get_sender(msg);
+
+       dbus_message_get_args(msg, NULL, DBUS_TYPE_OBJECT_PATH, &path,
+                                                       DBUS_TYPE_INVALID);
+
+       err = connman_agent_register(sender, path);
+       if (err < 0)
+               return __connman_error_failed(msg, -err);
+
+       return g_dbus_create_reply(msg, DBUS_TYPE_INVALID);
+}
+
+static DBusMessage *unregister_agent(DBusConnection *conn,
+                                       DBusMessage *msg, void *data)
+{
+       const char *sender, *path;
+       int err;
+
+       DBG("conn %p", conn);
+
+       sender = dbus_message_get_sender(msg);
+
+       dbus_message_get_args(msg, NULL, DBUS_TYPE_OBJECT_PATH, &path,
+                                                       DBUS_TYPE_INVALID);
+
+       err = connman_agent_unregister(sender, path);
+       if (err < 0)
+               return __connman_error_failed(msg, -err);
+
+       return g_dbus_create_reply(msg, DBUS_TYPE_INVALID);
+}
+
 static const GDBusMethodTable manager_methods[] = {
        { GDBUS_ASYNC_METHOD("Create",
                        GDBUS_ARGS({ "properties", "a{sv}" }),
@@ -98,6 +139,12 @@ static const GDBusMethodTable manager_methods[] = {
        { GDBUS_METHOD("GetConnections", NULL,
                        GDBUS_ARGS({ "connections", "a(oa{sv})" }),
                        get_connections) },
+       { GDBUS_METHOD("RegisterAgent",
+                       GDBUS_ARGS({ "path", "o" }), NULL,
+                       register_agent) },
+       { GDBUS_METHOD("UnregisterAgent",
+                       GDBUS_ARGS({ "path", "o" }), NULL,
+                       unregister_agent) },
        { },
 };
 
@@ -115,7 +162,7 @@ int __vpn_manager_init(void)
        DBG("");
 
        connection = connman_dbus_get_connection();
-       if (connection == NULL)
+       if (!connection)
                return -1;
 
        g_dbus_register_interface(connection, VPN_MANAGER_PATH,
@@ -132,7 +179,7 @@ void __vpn_manager_cleanup(void)
 {
        DBG("");
 
-       if (connection == NULL)
+       if (!connection)
                return;
 
        g_dbus_unregister_interface(connection, VPN_MANAGER_PATH,