guint obc_session_queue(struct obc_session *session, struct obc_transfer *transfer, session_callback_t func, void *user_data, GError **err) { struct pending_request *p; if (session->obex == NULL) { obc_transfer_unregister(transfer); g_set_error(err, OBEX_IO_ERROR, -ENOTCONN, "Session not connected"); return 0; } if (!obc_transfer_register(transfer, session->conn, session->owner, err)) { obc_transfer_unregister(transfer); return 0; } obc_transfer_set_callback(transfer, transfer_complete, session); p = pending_request_new(session, transfer, func, user_data); g_queue_push_tail(session->queue, p); if (session->queue_complete_id == 0) session->queue_complete_id = g_idle_add( session_queue_complete, session); return p->id; }
{ struct obc_transfer *transfer; struct obc_transfer_params *params = NULL; int err; if (session->obex == NULL) return -ENOTCONN; if (apparam != NULL) { params = g_new0(struct obc_transfer_params, 1); params->data = g_new(guint8, apparam_size); memcpy(params->data, apparam, apparam_size); params->size = apparam_size; } transfer = obc_transfer_register(session->conn, filename, targetname, type, params, session); if (transfer == NULL) { if (params != NULL) { g_free(params->data); g_free(params); } return -EIO; } if (func != NULL) { struct session_callback *callback; callback = g_new0(struct session_callback, 1); callback->func = func; callback->data = user_data; session->callback = callback; }