Move code handling VDAGENTD_FILE_XFER_STATUS messages from agent_read_complete() to a separate function to make the switch statement less cluttered. Improve formatting a bit. Signed-off-by: Jakub Janků <jjanku@xxxxxxxxxx> --- src/vdagentd/vdagentd.c | 61 +++++++++++++++++++++++++---------------- 1 file changed, 37 insertions(+), 24 deletions(-) diff --git a/src/vdagentd/vdagentd.c b/src/vdagentd/vdagentd.c index a1962be..5ead54c 100644 --- a/src/vdagentd/vdagentd.c +++ b/src/vdagentd/vdagentd.c @@ -893,6 +893,41 @@ static void do_agent_xorg_resolution(struct udscs_connection **connp, check_xorg_resolution(); } +static void do_agent_file_xfer_status(struct udscs_connection **connp, + struct udscs_message_header *header, + guint8 *data) +{ + gpointer task_id = GUINT_TO_POINTER(GUINT32_TO_LE(header->arg1)); + + /* header->arg1 = file xfer task id, header->arg2 = file xfer status */ + switch (header->arg2) { + case VD_AGENT_FILE_XFER_STATUS_NOT_ENOUGH_SPACE: { + uint64_t free_space = GUINT64_TO_LE(*((uint64_t*)data)); + send_file_xfer_status(virtio_port, + "Not enough free space. Cancelling file-xfer %u", + header->arg1, header->arg2, + (uint8_t*)&free_space, sizeof(uint64_t)); + break; + } + case VD_AGENT_FILE_XFER_STATUS_DISABLED: + send_file_xfer_status(virtio_port, + "File-xfer is disabled. Cancelling file-xfer %u", + header->arg1, header->arg2, + NULL, 0); + break; + default: + send_file_xfer_status(virtio_port, + NULL, + header->arg1, header->arg2, + NULL, 0); + } + + if (header->arg2 == VD_AGENT_FILE_XFER_STATUS_CAN_SEND_DATA) + g_hash_table_insert(active_xfers, task_id, *connp); + else + g_hash_table_remove(active_xfers, task_id); +} + static void agent_read_complete(struct udscs_connection **connp, struct udscs_message_header *header, uint8_t *data) { @@ -909,31 +944,9 @@ static void agent_read_complete(struct udscs_connection **connp, return; } break; - case VDAGENTD_FILE_XFER_STATUS:{ - /* header->arg1 = file xfer task id, header->arg2 = file xfer status */ - switch (header->arg2) { - case VD_AGENT_FILE_XFER_STATUS_NOT_ENOUGH_SPACE: { - uint64_t free_space = GUINT64_TO_LE(*((uint64_t*)data)); - send_file_xfer_status(virtio_port, "Not enough free space. Cancelling file-xfer %u", - header->arg1, header->arg2, - (uint8_t*)&free_space, sizeof(uint64_t)); - break; - } - case VD_AGENT_FILE_XFER_STATUS_DISABLED: - send_file_xfer_status(virtio_port, "File-xfer is disabled, cancelling", - header->arg1, header->arg2, NULL, 0); - break; - default: - send_file_xfer_status(virtio_port, NULL, header->arg1, header->arg2, NULL, 0); - } - - if (header->arg2 == VD_AGENT_FILE_XFER_STATUS_CAN_SEND_DATA) - g_hash_table_insert(active_xfers, GUINT_TO_POINTER(GUINT32_TO_LE(header->arg1)), - *connp); - else - g_hash_table_remove(active_xfers, GUINT_TO_POINTER(GUINT32_TO_LE(header->arg1))); + case VDAGENTD_FILE_XFER_STATUS: + do_agent_file_xfer_status(connp, header, data); break; - } default: syslog(LOG_ERR, "unknown message from vdagent: %u, ignoring", -- 2.17.1 _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/spice-devel