summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/manager-api.txt12
-rw-r--r--src/manager.c46
2 files changed, 58 insertions, 0 deletions
diff --git a/doc/manager-api.txt b/doc/manager-api.txt
index 7d13f01..71dde07 100644
--- a/doc/manager-api.txt
+++ b/doc/manager-api.txt
@@ -20,6 +20,18 @@ Methods dict GetProperties()
Possible Errors: org.neard.Error.DoesNotExist
org.neard.Error.InvalidArguments
+
+ void RegisterHandoverAgent(object path)
+
+ Register new handover agent.
+
+ Possible Errors: org.neard.Error.InvalidArguments
+
+ void UnregisterHandoverAgent(object path)
+
+ Unregister an existing handover agent.
+
+ Possible Errors: org.neard.Error.InvalidArguments
Signals PropertyChanged(string name, variant value)
diff --git a/src/manager.c b/src/manager.c
index cb62260..c1490cb 100644
--- a/src/manager.c
+++ b/src/manager.c
@@ -133,6 +133,46 @@ void __near_manager_adapter_remove(uint32_t idx)
NULL);
}
+static DBusMessage *register_handover_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 = __near_handover_agent_register(sender, path);
+ if (err < 0)
+ return __near_error_failed(msg, -err);
+
+ return g_dbus_create_reply(msg, DBUS_TYPE_INVALID);
+}
+
+static DBusMessage *unregister_handover_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 = __near_handover_agent_unregister(sender, path);
+ if (err < 0)
+ return __near_error_failed(msg, -err);
+
+ return g_dbus_create_reply(msg, DBUS_TYPE_INVALID);
+}
+
static const GDBusMethodTable manager_methods[] = {
{ GDBUS_METHOD("GetProperties",
NULL, GDBUS_ARGS({"properties", "a{sv}"}),
@@ -140,6 +180,12 @@ static const GDBusMethodTable manager_methods[] = {
{ GDBUS_METHOD("SetProperty",
GDBUS_ARGS({"name", "s"}, {"value", "v"}),
NULL, set_property) },
+ { GDBUS_METHOD("RegisterHandoverAgent",
+ GDBUS_ARGS({ "path", "o" }), NULL,
+ register_handover_agent) },
+ { GDBUS_METHOD("UnregisterHandoverAgent",
+ GDBUS_ARGS({ "path", "o" }), NULL,
+ unregister_handover_agent) },
{ },
};