struct obc_transfer *transfer,
GError *err, void *user_data)
{
- struct map_data *map = user_data;
+ struct pending_request *request = user_data;
GMarkupParseContext *ctxt;
DBusMessage *reply;
DBusMessageIter iter, array;
int perr;
if (err != NULL) {
- reply = g_dbus_create_error(map->msg,
+ reply = g_dbus_create_error(request->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,
+ reply = g_dbus_create_error(request->msg,
ERROR_INTERFACE ".Failed",
"Error reading contents: %s",
strerror(-perr));
goto done;
}
- reply = dbus_message_new_method_return(map->msg);
+ reply = dbus_message_new_method_return(request->msg);
if (reply == NULL)
return;
done:
g_dbus_send_message(conn, reply);
- dbus_message_unref(map->msg);
+ pending_request_free(request);
}
static DBusMessage *get_folder_listing(struct map_data *map,
DBusMessage *message,
GObexApparam *apparam)
{
+ struct pending_request *request;
struct obc_transfer *transfer;
GError *err = NULL;
DBusMessage *reply;
obc_transfer_set_apparam(transfer, apparam);
- if (obc_session_queue(map->session, transfer, folder_listing_cb, map,
- &err)) {
- map->msg = dbus_message_ref(message);
- return NULL;
+ request = pending_request_new(map, message);
+
+ if (!obc_session_queue(map->session, transfer, folder_listing_cb,
+ request, &err)) {
+ pending_request_free(request);
+ goto fail;
}
+ return NULL;
+
fail:
reply = g_dbus_create_error(message, ERROR_INTERFACE ".Failed", "%s",
err->message);