[Spice-devel] [spice-gtk v4 08/24] main: let channel-main handle file-xfer messages
Jonathon Jongsma
jjongsma at redhat.com
Fri Jun 24 19:23:08 UTC 2016
On Thu, 2016-06-23 at 19:37 +0200, Victor Toso wrote:
> By separating SpiceFileTransferTask from channel-main, we could choose
> where to put the handler for messages. With the approach based on
> spice_file_transfer_task_read_async(), we cannot have it under
> spice-file-transfer-task.c due the need of callback and userdata on
> _read_async.
>
> It is much easier to keep this in channel-main and do not move any
> VDAgent.
>
> This patch reverts 349a52ca2d6af4b31a4f51c38a3292c04460953c changes
> but renaming variable task to xfer_task.
> ---
> src/channel-main.c | 29 ++++++++++++-----------------
> 1 file changed, 12 insertions(+), 17 deletions(-)
>
> diff --git a/src/channel-main.c b/src/channel-main.c
> index 4b728fe..be5a454 100644
> --- a/src/channel-main.c
> +++ b/src/channel-main.c
> @@ -1983,17 +1983,22 @@ static void file_xfer_read_async_cb(GObject
> *source_object,
> }
>
> /* coroutine context */
> -static void spice_file_transfer_task_handle_status(SpiceFileTransferTask
> *task,
> - VDAgentFileXferStatusMessa
> ge *msg)
> +static void file_xfer_handle_status(SpiceMainChannel *channel,
> + VDAgentFileXferStatusMessage *msg)
since it's moving back to a channel function. perhaps a name like
main_channel_handle_xfer_status()??
> {
> + SpiceFileTransferTask *xfer_task;
> + SpiceMainChannelPrivate *c;
> GError *error = NULL;
> - g_return_if_fail(task != NULL);
>
> - SPICE_DEBUG("task %u received response %u", msg->id, msg->result);
> + c = channel->priv;
> + xfer_task = g_hash_table_lookup(c->file_xfer_tasks, GUINT_TO_POINTER(msg-
> >id));
> + g_return_if_fail(xfer_task != NULL);
> +
> + SPICE_DEBUG("xfer-task %u received response %u", msg->id, msg->result);
>
> switch (msg->result) {
> case VD_AGENT_FILE_XFER_STATUS_CAN_SEND_DATA:
> - spice_file_transfer_task_read_async(task, file_xfer_read_async_cb,
> NULL);
> + spice_file_transfer_task_read_async(xfer_task,
> file_xfer_read_async_cb, NULL);
> return;
> case VD_AGENT_FILE_XFER_STATUS_CANCELLED:
> error = g_error_new(SPICE_CLIENT_ERROR, SPICE_CLIENT_ERROR_FAILED,
> @@ -2012,7 +2017,7 @@ static void
> spice_file_transfer_task_handle_status(SpiceFileTransferTask *task,
> break;
> }
>
> - spice_file_transfer_task_completed(task, error);
> + spice_file_transfer_task_completed(xfer_task, error);
> }
>
> /* any context: the message is not flushed immediately,
> @@ -2156,18 +2161,8 @@ static void main_agent_handle_msg(SpiceChannel
> *channel,
> break;
> }
> case VD_AGENT_FILE_XFER_STATUS:
> - {
> - SpiceFileTransferTask *task;
> - VDAgentFileXferStatusMessage *msg = payload;
> -
> - task = g_hash_table_lookup(c->file_xfer_tasks, GUINT_TO_POINTER(msg-
> >id));
> - if (task != NULL) {
> - spice_file_transfer_task_handle_status(task, msg);
> - } else {
> - SPICE_DEBUG("cannot find task %u", msg->id);
> - }
> + file_xfer_handle_status(self, payload);
> break;
> - }
> default:
> g_warning("unhandled agent message type: %u (%s), size %u",
> msg->type, NAME(agent_msg_types, msg->type), msg->size);
Acked-by: Jonathon Jongsma <jjongsma at redhat.com>
More information about the Spice-devel
mailing list