vpn: Add preliminary agent support
authorJukka Rissanen <jukka.rissanen@linux.intel.com>
Mon, 12 Nov 2012 12:07:37 +0000 (14:07 +0200)
committerPatrik Flykt <patrik.flykt@linux.intel.com>
Fri, 23 Nov 2012 10:58:51 +0000 (12:58 +0200)
include/vpn-dbus.h
vpn/main.c
vpn/vpn-manager.c

index fec925b..01780cb 100644 (file)
@@ -37,6 +37,7 @@ extern "C" {
 #define VPN_MANAGER_PATH               "/"
 
 #define VPN_CONNECTION_INTERFACE       VPN_SERVICE ".Connection"
+#define VPN_AGENT_INTERFACE            VPN_SERVICE ".Agent"
 #define VPN_TASK_INTERFACE             VPN_SERVICE ".Task"
 
 #define VPN_PRIVILEGE_MODIFY           1
index eb074d4..732bd4b 100644 (file)
@@ -308,6 +308,7 @@ int main(int argc, char *argv[])
        else
                config_init(option_config);
 
+       __connman_agent_init();
        __vpn_provider_init(option_routes);
        __vpn_manager_init();
        __vpn_ipconfig_init();
@@ -329,6 +330,7 @@ int main(int argc, char *argv[])
        __vpn_ipconfig_cleanup();
        __vpn_manager_cleanup();
        __vpn_provider_cleanup();
+       __connman_agent_cleanup();
        __connman_dbus_cleanup();
        __connman_log_cleanup(FALSE);
 
index 680f2fd..cd85165 100644 (file)
@@ -27,6 +27,7 @@
 
 #include <gdbus.h>
 #include <connman/log.h>
+#include <connman/agent.h>
 
 #include "../src/connman.h"
 
@@ -87,6 +88,46 @@ static DBusMessage *get_connections(DBusConnection *conn, DBusMessage *msg,
        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) },
        { },
 };