Inform client that transfer will not work, instead of only dropping the agent messages. The file transfer messages can be disabled using qemu cli option: "disable-agent-file-xfer" Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1373725 Signed-off-by: Pavel Grunt <pgrunt@xxxxxxxxxx> --- Can be extended to use a detailed status message introduced recently in protocol --- server/reds.c | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/server/reds.c b/server/reds.c index 8abeb3fbd..38d34c827 100644 --- a/server/reds.c +++ b/server/reds.c @@ -1110,6 +1110,39 @@ static void reds_on_main_agent_monitors_config(RedsState *reds, const void *mess reds_client_monitors_config_cleanup(reds); } +static void agent_data_free(uint8_t *data, void *opaque G_GNUC_UNUSED) +{ + free(data); +} + +/* + * Inform client about discarded file transfer + * https://bugzilla.redhat.com/show_bug.cgi?id=1373725 + */ +static void agent_xfer_error(MainChannelClient *mcc, const VDAgentMessage *message) +{ + VDAgentMessage *xfer_msg; + VDAgentFileXferStatusMessage *xfer_status; + size_t len; + + if (message->type < VD_AGENT_FILE_XFER_START || message->type > VD_AGENT_FILE_XFER_DATA) { + return; + } + + len = sizeof(VDAgentMessage) + sizeof(VDAgentFileXferStatusMessage); + xfer_msg = spice_malloc0(len); + xfer_msg->protocol = VD_AGENT_PROTOCOL; + xfer_msg->type = VD_AGENT_FILE_XFER_STATUS; + xfer_msg->size = sizeof(VDAgentFileXferStatusMessage); + xfer_status = (VDAgentFileXferStatusMessage *) xfer_msg->data; + xfer_status->id = *((uint32_t *) message->data); + xfer_status->result = VD_AGENT_FILE_XFER_STATUS_ERROR; + + spice_debug("canceling file transfer %u", xfer_status->id); + + main_channel_client_push_agent_data(mcc, (uint8_t *) xfer_msg, len, agent_data_free, NULL); +} + void reds_on_main_agent_data(RedsState *reds, MainChannelClient *mcc, const void *message, size_t size) { @@ -1123,6 +1156,7 @@ void reds_on_main_agent_data(RedsState *reds, MainChannelClient *mcc, const void case AGENT_MSG_FILTER_OK: break; case AGENT_MSG_FILTER_DISCARD: + agent_xfer_error(mcc, message); return; case AGENT_MSG_FILTER_MONITORS_CONFIG: reds_on_main_agent_monitors_config(reds, message, size); -- 2.13.0 _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/spice-devel