summaryrefslogtreecommitdiff
path: root/client/agent.c
diff options
context:
space:
mode:
authorMarcel Holtmann <marcel@holtmann.org>2012-12-15 02:16:39 +0100
committerMarcel Holtmann <marcel@holtmann.org>2012-12-15 02:16:39 +0100
commitf3fcb85b20ceeee8b3491b719e65dad5c335b84e (patch)
tree43fdb597e86d7b70536fafe574dcaf01d79403bc /client/agent.c
parent8db6f6f955df1be3bb1d6ad35a3b5f49cffeaafb (diff)
downloadbluez-f3fcb85b20ceeee8b3491b719e65dad5c335b84e.tar.gz
client: Add support for registering agent handling
Diffstat (limited to 'client/agent.c')
-rw-r--r--client/agent.c82
1 files changed, 76 insertions, 6 deletions
diff --git a/client/agent.c b/client/agent.c
index 0deae1b5a..be2ab5779 100644
--- a/client/agent.c
+++ b/client/agent.c
@@ -52,6 +52,39 @@ static const GDBusMethodTable methods[] = {
{ }
};
+static void register_agent_setup(DBusMessageIter *iter, void *user_data)
+{
+ const char *path = AGENT_PATH;
+ const char *capability = "";
+
+ dbus_message_iter_append_basic(iter, DBUS_TYPE_OBJECT_PATH, &path);
+ dbus_message_iter_append_basic(iter, DBUS_TYPE_STRING, &capability);
+}
+
+static void register_agent_reply(DBusMessage *message, void *user_data)
+{
+ DBusConnection *conn = user_data;
+ DBusError error;
+
+ begin_message();
+
+ dbus_error_init(&error);
+
+ if (dbus_set_error_from_message(&error, message) == FALSE) {
+ agent_registered = TRUE;
+ printf("Agent registered\n");
+ } else {
+ printf("Failed to register agent: %s\n", error.name);
+ dbus_error_free(&error);
+
+ if (g_dbus_unregister_interface(conn, AGENT_PATH,
+ AGENT_INTERFACE) == FALSE)
+ printf("Failed to unregister agent object\n");
+ }
+
+ end_message();
+}
+
void agent_register(DBusConnection *conn, GDBusProxy *manager)
{
if (agent_registered == TRUE) {
@@ -66,7 +99,44 @@ void agent_register(DBusConnection *conn, GDBusProxy *manager)
return;
}
- agent_registered = TRUE;
+ if (g_dbus_proxy_method_call(manager, "RegisterAgent",
+ register_agent_setup,
+ register_agent_reply,
+ conn, NULL) == FALSE) {
+ printf("Failed to call register agent method\n");
+ return;
+ }
+}
+
+static void unregister_agent_setup(DBusMessageIter *iter, void *user_data)
+{
+ const char *path = AGENT_PATH;
+
+ dbus_message_iter_append_basic(iter, DBUS_TYPE_OBJECT_PATH, &path);
+}
+
+static void unregister_agent_reply(DBusMessage *message, void *user_data)
+{
+ DBusConnection *conn = user_data;
+ DBusError error;
+
+ begin_message();
+
+ dbus_error_init(&error);
+
+ if (dbus_set_error_from_message(&error, message) == FALSE) {
+ agent_registered = FALSE;
+ printf("Agent unregistered\n");
+
+ if (g_dbus_unregister_interface(conn, AGENT_PATH,
+ AGENT_INTERFACE) == FALSE)
+ printf("Failed to unregister agent object\n");
+ } else {
+ printf("Failed to unregister agent: %s\n", error.name);
+ dbus_error_free(&error);
+ }
+
+ end_message();
}
void agent_unregister(DBusConnection *conn, GDBusProxy *manager)
@@ -76,11 +146,11 @@ void agent_unregister(DBusConnection *conn, GDBusProxy *manager)
return;
}
- if (g_dbus_unregister_interface(conn, AGENT_PATH,
- AGENT_INTERFACE) == FALSE) {
- printf("Failed to unregister agent object\n");
+ if (g_dbus_proxy_method_call(manager, "UnregisterAgent",
+ unregister_agent_setup,
+ unregister_agent_reply,
+ conn, NULL) == FALSE) {
+ printf("Failed to call unregister agent method\n");
return;
}
-
- agent_registered = FALSE;
}