Diff between 83f25e00dca5b5c8c95b61cae2c4c665db7350cd and 85e83446ad94f1b19025b2976f8fe1e7463f2833

Changed Files

File Additions Deletions Status
src/agent.c +34 -0 modified
src/agent.h +3 -0 modified
src/manager.c +3 -0 modified

Full Patch

diff --git a/src/agent.c b/src/agent.c
index b36738d..c0ff46e 100644
--- a/src/agent.c
+++ b/src/agent.c
@@ -831,3 +831,37 @@ gboolean agent_is_busy(struct agent *agent, void *user_data)
 
 	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
@@ -75,3 +75,6 @@ gboolean agent_is_busy(struct agent *agent, void *user_data);
 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
@@ -51,6 +51,7 @@
 #include "adapter.h"
 #include "device.h"
 #include "profile.h"
+#include "agent.h"
 #include "error.h"
 #include "manager.h"
 
@@ -59,6 +60,7 @@ static GSList *adapters = NULL;
 
 bool manager_init(const char *path)
 {
+	btd_agent_init();
 	btd_profile_init();
 
 	return true;
@@ -93,6 +95,7 @@ static void manager_remove_adapter(struct btd_adapter *adapter)
 void manager_cleanup(const char *path)
 {
 	btd_profile_cleanup();
+	btd_agent_cleanup();
 
 	while (adapters) {
 		struct btd_adapter *adapter = adapters->data;