static void message_listing_cb(struct obc_session *session, struct obc_transfer *transfer, GError *err, void *user_data) { struct map_data *map = user_data; struct map_parser *parser; GMarkupParseContext *ctxt; DBusMessage *reply; DBusMessageIter iter, array; char *contents; size_t size; int perr; if (err != NULL) { reply = g_dbus_create_error(map->msg, ERROR_INTERFACE ".Failed", "%s", err->message); goto done; } perr = obc_transfer_get_contents(transfer, &contents, &size); if (perr < 0) { reply = g_dbus_create_error(map->msg, ERROR_INTERFACE ".Failed", "Error reading contents: %s", strerror(-perr)); goto done; } reply = dbus_message_new_method_return(map->msg); if (reply == NULL) return; dbus_message_iter_init_append(reply, &iter); dbus_message_iter_open_container(&iter, DBUS_TYPE_ARRAY, DBUS_DICT_ENTRY_BEGIN_CHAR_AS_STRING DBUS_TYPE_OBJECT_PATH_AS_STRING DBUS_TYPE_ARRAY_AS_STRING DBUS_DICT_ENTRY_BEGIN_CHAR_AS_STRING DBUS_TYPE_STRING_AS_STRING DBUS_TYPE_VARIANT_AS_STRING DBUS_DICT_ENTRY_END_CHAR_AS_STRING DBUS_DICT_ENTRY_END_CHAR_AS_STRING, &array); parser = g_new(struct map_parser, 1); parser->data = map; parser->iter = &array; ctxt = g_markup_parse_context_new(&msg_parser, 0, parser, NULL); g_markup_parse_context_parse(ctxt, contents, size, NULL); g_markup_parse_context_free(ctxt); dbus_message_iter_close_container(&iter, &array); g_free(contents); g_free(parser); done: g_dbus_send_message(conn, reply); dbus_message_unref(map->msg); }
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 void buffer_cb(struct obc_session *session, struct obc_transfer *transfer, GError *err, void *user_data) { struct map_data *map = user_data; DBusMessage *reply; char *contents; size_t size; int perr; if (err != NULL) { reply = g_dbus_create_error(map->msg, "org.openobex.Error.Failed", "%s", err->message); goto done; } perr = obc_transfer_get_contents(transfer, &contents, &size); if (perr < 0) { reply = g_dbus_create_error(map->msg, "org.openobex.Error.Failed", "Error reading contents: %s", strerror(-perr)); goto done; } reply = g_dbus_create_reply(map->msg, DBUS_TYPE_STRING, &contents, DBUS_TYPE_INVALID); g_free(contents); done: g_dbus_send_message(conn, reply); dbus_message_unref(map->msg); }