diff options
author | Mikel Astiz <mikel.astiz@bmw-carit.de> | 2012-05-21 11:07:11 +0200 |
---|---|---|
committer | Luiz Augusto von Dentz <luiz.von.dentz@intel.com> | 2012-05-23 11:30:46 +0300 |
commit | 14f84c3a80f716829e9798610969040a5727b88f (patch) | |
tree | 08f38e159db1a7dc4653bd0b33b805072335f23f /client/session.c | |
parent | 85400904a2fd2b33176c04a3c9929b3b14f97b9b (diff) | |
download | obexd-14f84c3a80f716829e9798610969040a5727b88f.tar.gz |
client: Move GetCapabilities to session API
Diffstat (limited to 'client/session.c')
-rw-r--r-- | client/session.c | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/client/session.c b/client/session.c index d4ec55d..1c5e452 100644 --- a/client/session.c +++ b/client/session.c @@ -648,6 +648,71 @@ static DBusMessage *session_get_properties(DBusConnection *connection, return reply; } +static void capabilities_complete_callback(struct obc_session *session, + struct obc_transfer *transfer, + GError *err, void *user_data) +{ + DBusMessage *message = user_data; + char *contents; + size_t size; + int perr; + + if (err != NULL) { + DBusMessage *error = g_dbus_create_error(message, + "org.openobex.Error.Failed", + "%s", err->message); + g_dbus_send_message(session->conn, error); + goto done; + } + + perr = obc_transfer_get_contents(transfer, &contents, &size); + if (perr < 0) { + DBusMessage *error = g_dbus_create_error(message, + "org.openobex.Error.Failed", + "Error reading contents: %s", + strerror(-perr)); + g_dbus_send_message(session->conn, error); + goto done; + } + + g_dbus_send_reply(session->conn, message, + DBUS_TYPE_STRING, &contents, + DBUS_TYPE_INVALID); + g_free(contents); + +done: + dbus_message_unref(message); +} + +static DBusMessage *get_capabilities(DBusConnection *connection, + DBusMessage *message, void *user_data) +{ + struct obc_session *session = user_data; + struct obc_transfer *pull; + DBusMessage *reply; + GError *gerr = NULL; + + pull = obc_transfer_get("x-obex/capability", NULL, NULL, &gerr); + if (pull == NULL) + goto fail; + + if (!obc_session_queue(session, pull, capabilities_complete_callback, + message, &gerr)) + goto fail; + + dbus_message_ref(message); + + return NULL; + +fail: + reply = g_dbus_create_error(message, + "org.openobex.Error.Failed", + "%s", gerr->message); + g_error_free(gerr); + return reply; + +} + static const GDBusMethodTable session_methods[] = { { GDBUS_METHOD("GetProperties", NULL, GDBUS_ARGS({ "properties", "a{sv}" }), @@ -658,6 +723,9 @@ static const GDBusMethodTable session_methods[] = { { GDBUS_METHOD("ReleaseAgent", GDBUS_ARGS({ "agent", "o" }), NULL, release_agent) }, + { GDBUS_ASYNC_METHOD("GetCapabilities", + NULL, GDBUS_ARGS({ "capabilities", "s" }), + get_capabilities) }, { } }; |