diff --git a/src/agent.c b/src/agent.c
index b36738d..c0ff46e 100644
--- a/src/agent.c
+++ b/src/agent.c
return TRUE;
}
+
+static DBusMessage *register_agent(DBusConnection *conn,
+ DBusMessage *msg, void *user_data)
+{
+ return dbus_message_new_method_return(msg);
+}
+
+static DBusMessage *unregister_agent(DBusConnection *conn,
+ DBusMessage *msg, void *user_data)
+{
+ return dbus_message_new_method_return(msg);
+}
+
+static const GDBusMethodTable methods[] = {
+ { GDBUS_METHOD("RegisterAgent",
+ GDBUS_ARGS({ "agent", "o"}, { "capability", "s" }),
+ NULL, register_agent) },
+ { GDBUS_METHOD("UnregisterAgent", GDBUS_ARGS({ "agent", "o" }),
+ NULL, unregister_agent) },
+ { }
+};
+
+void btd_agent_init(void)
+{
+ g_dbus_register_interface(btd_get_dbus_connection(),
+ "/org/bluez", "org.bluez.AgentManager1",
+ methods, NULL, NULL, NULL, NULL);
+}
+
+void btd_agent_cleanup(void)
+{
+ g_dbus_unregister_interface(btd_get_dbus_connection(),
+ "/org/bluez", "org.bluez.AgentManager1");
+}
diff --git a/src/agent.h b/src/agent.h
index 3957317..f27459f 100644
--- a/src/agent.h
+++ b/src/agent.h
uint8_t agent_get_io_capability(struct agent *agent);
gboolean agent_matches(struct agent *agent, const char *name, const char *path);
+
+void btd_agent_init(void);
+void btd_agent_cleanup(void);
diff --git a/src/manager.c b/src/manager.c
index d3e1e45..1f4b831 100644
--- a/src/manager.c
+++ b/src/manager.c
#include "adapter.h"
#include "device.h"
#include "profile.h"
+#include "agent.h"
#include "error.h"
#include "manager.h"
bool manager_init(const char *path)
{
+ btd_agent_init();
btd_profile_init();
return true;
void manager_cleanup(const char *path)
{
btd_profile_cleanup();
+ btd_agent_cleanup();
while (adapters) {
struct btd_adapter *adapter = adapters->data;