From: Filippo Giunchedi <filippo@esaurito.net>
To: linux-bluetooth@vger.kernel.org
Subject: [PATCH] test/agent.c: update dbus API usage
Date: Sun, 7 Jun 2009 12:14:33 +0200 [thread overview]
Message-ID: <20090607101433.GA1297@esaurito.net> (raw)
In-Reply-To: <1244364150.23850.80.camel@localhost.localdomain>
This patch implements and updates some parts of dbus API missing from
test/agent.c, namely Authorize, RequestPinCode and RequestPasskey.
---
test/agent.c | 111 ++++++++++++++++++++++++++++++++++++++++++++++++++-------
1 files changed, 97 insertions(+), 14 deletions(-)
diff --git a/test/agent.c b/test/agent.c
index 7cd4b6e..4796e90 100644
--- a/test/agent.c
+++ b/test/agent.c
@@ -70,20 +70,18 @@ static DBusHandlerResult agent_filter(DBusConnection *conn,
return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
}
-static DBusHandlerResult request_message(DBusConnection *conn,
+static DBusHandlerResult request_pincode_message(DBusConnection *conn,
DBusMessage *msg, void *data)
{
DBusMessage *reply;
- const char *path, *address;
- dbus_bool_t numeric;
+ const char *path;
if (!passkey)
return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
if (!dbus_message_get_args(msg, NULL,
- DBUS_TYPE_STRING, &path, DBUS_TYPE_STRING, &address,
- DBUS_TYPE_BOOLEAN, &numeric, DBUS_TYPE_INVALID)) {
- fprintf(stderr, "Invalid arguments for passkey Request method");
+ DBUS_TYPE_OBJECT_PATH, &path, DBUS_TYPE_INVALID)) {
+ fprintf(stderr, "Invalid arguments for RequestPinCode method");
return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
}
@@ -99,7 +97,7 @@ static DBusHandlerResult request_message(DBusConnection *conn,
return DBUS_HANDLER_RESULT_NEED_MEMORY;
}
- printf("Passkey request for device %s\n", address);
+ printf("Pincode request for device %s\n", path);
dbus_message_append_args(reply, DBUS_TYPE_STRING, &passkey,
DBUS_TYPE_INVALID);
@@ -114,20 +112,63 @@ send:
return DBUS_HANDLER_RESULT_HANDLED;
}
-static DBusHandlerResult cancel_message(DBusConnection *conn,
+static DBusHandlerResult request_passkey_message(DBusConnection *conn,
DBusMessage *msg, void *data)
{
DBusMessage *reply;
- const char *path, *address;
+ const char *path;
+ unsigned int int_passkey;
+
+ if (!passkey)
+ return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
+
if (!dbus_message_get_args(msg, NULL,
- DBUS_TYPE_STRING, &path, DBUS_TYPE_STRING, &address,
- DBUS_TYPE_INVALID)) {
+ DBUS_TYPE_OBJECT_PATH, &path, DBUS_TYPE_INVALID)) {
+ fprintf(stderr, "Invalid arguments for RequestPasskey method");
+ return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
+ }
+
+ if (do_reject) {
+ reply = dbus_message_new_error(msg,
+ "org.bluez.Error.Rejected", "");
+ goto send;
+ }
+
+ reply = dbus_message_new_method_return(msg);
+ if (!reply) {
+ fprintf(stderr, "Can't create reply message\n");
+ return DBUS_HANDLER_RESULT_NEED_MEMORY;
+ }
+
+ printf("Passkey request for device %s\n", path);
+
+ int_passkey = strtoul(passkey, NULL, 10);
+
+ dbus_message_append_args(reply, DBUS_TYPE_UINT32, &int_passkey,
+ DBUS_TYPE_INVALID);
+
+send:
+ dbus_connection_send(conn, reply, NULL);
+
+ dbus_connection_flush(conn);
+
+ dbus_message_unref(reply);
+
+ return DBUS_HANDLER_RESULT_HANDLED;
+}
+
+static DBusHandlerResult cancel_message(DBusConnection *conn,
+ DBusMessage *msg, void *data)
+{
+ DBusMessage *reply;
+
+ if (!dbus_message_get_args(msg, NULL, DBUS_TYPE_INVALID)) {
fprintf(stderr, "Invalid arguments for passkey Confirm method");
return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
}
- printf("Request canceled for device %s\n", address);
+ printf("Request canceled\n");
reply = dbus_message_new_method_return(msg);
if (!reply) {
@@ -174,11 +215,50 @@ static DBusHandlerResult release_message(DBusConnection *conn,
return DBUS_HANDLER_RESULT_HANDLED;
}
+static DBusHandlerResult authorize_message(DBusConnection *conn,
+ DBusMessage *msg, void *data)
+{
+ DBusMessage *reply;
+ const char *path, *uuid;
+
+ if (!dbus_message_get_args(msg, NULL, DBUS_TYPE_OBJECT_PATH, &path,
+ DBUS_TYPE_STRING, &uuid, DBUS_TYPE_INVALID)) {
+ fprintf(stderr, "Invalid arguments for Authorize method");
+ return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
+ }
+
+ if (do_reject) {
+ reply = dbus_message_new_error(msg,
+ "org.bluez.Error.Rejected", "");
+ goto send;
+ }
+
+ reply = dbus_message_new_method_return(msg);
+ if (!reply) {
+ fprintf(stderr, "Can't create reply message\n");
+ return DBUS_HANDLER_RESULT_NEED_MEMORY;
+ }
+
+ printf("Authorizing request for %s\n", path);
+
+send:
+ dbus_connection_send(conn, reply, NULL);
+
+ dbus_connection_flush(conn);
+
+ dbus_message_unref(reply);
+
+ return DBUS_HANDLER_RESULT_HANDLED;
+}
+
static DBusHandlerResult agent_message(DBusConnection *conn,
DBusMessage *msg, void *data)
{
- if (dbus_message_is_method_call(msg, "org.bluez.Agent", "Request"))
- return request_message(conn, msg, data);
+ if (dbus_message_is_method_call(msg, "org.bluez.Agent", "RequestPinCode"))
+ return request_pincode_message(conn, msg, data);
+
+ if (dbus_message_is_method_call(msg, "org.bluez.Agent", "RequestPasskey"))
+ return request_passkey_message(conn, msg, data);
if (dbus_message_is_method_call(msg, "org.bluez.Agent", "Cancel"))
return cancel_message(conn, msg, data);
@@ -186,6 +266,9 @@ static DBusHandlerResult agent_message(DBusConnection *conn,
if (dbus_message_is_method_call(msg, "org.bluez.Agent", "Release"))
return release_message(conn, msg, data);
+ if (dbus_message_is_method_call(msg, "org.bluez.Agent", "Authorize"))
+ return authorize_message(conn, msg, data);
+
return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
}
--
1.6.3.1
prev parent reply other threads:[~2009-06-07 10:14 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-06-06 20:34 [PATCH] update test/agent.c API usage Filippo Giunchedi
2009-06-06 23:18 ` Marcel Holtmann
2009-06-07 8:11 ` [PATCH] make test/agent.c use new API Filippo Giunchedi
2009-06-07 8:42 ` Marcel Holtmann
2009-06-07 10:14 ` Filippo Giunchedi [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20090607101433.GA1297@esaurito.net \
--to=filippo@esaurito.net \
--cc=linux-bluetooth@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox