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> --- v2 (Frediano's review): - removed debug statement - avoided the extra check for the xfer message type (thanks to PATCH 1/2) --- server/reds.c | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/server/reds.c b/server/reds.c index b9f13e2e..870c7640 100644 --- a/server/reds.c +++ b/server/reds.c @@ -1101,6 +1101,31 @@ static void reds_on_main_agent_monitors_config(RedsState *reds, reds_client_monitors_config_cleanup(reds); } +static void agent_data_free(uint8_t *data, void *opaque G_GNUC_UNUSED) +{ + free(data); +} + +static void agent_xfer_error(MainChannelClient *mcc, const VDAgentMessage *message) +{ + VDAgentMessage *xfer_msg; + VDAgentFileXferStatusMessage *xfer_status; + size_t len = sizeof(VDAgentMessage) + sizeof(VDAgentFileXferStatusMessage); + + g_return_if_fail(message->type >= VD_AGENT_FILE_XFER_START && + message->type <= VD_AGENT_FILE_XFER_DATA); + + 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; + + 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, void *message, size_t size) { RedCharDeviceVDIPort *dev = reds->agent_dev; @@ -1113,8 +1138,9 @@ void reds_on_main_agent_data(RedsState *reds, MainChannelClient *mcc, void *mess case AGENT_MSG_FILTER_OK: break; case AGENT_MSG_FILTER_DISCARD: - /* fall through */ + return; case AGENT_MSG_FILTER_DISCARD_XFER: + agent_xfer_error(mcc, message); return; case AGENT_MSG_FILTER_MONITORS_CONFIG: reds_on_main_agent_monitors_config(reds, mcc, message, size); -- 2.11.0 _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/spice-devel