To be able to inform the sender about the cancelled file transfer Related: https://bugzilla.redhat.com/show_bug.cgi?id=1373725 --- server/agent-msg-filter.c | 12 ++++++++++-- server/agent-msg-filter.h | 1 + server/reds.c | 6 ++++++ server/tests/test-agent-msg-filter.c | 10 ++++++++-- 4 files changed, 25 insertions(+), 4 deletions(-) diff --git a/server/agent-msg-filter.c b/server/agent-msg-filter.c index 17f8e889..a83dee97 100644 --- a/server/agent-msg-filter.c +++ b/server/agent-msg-filter.c @@ -80,7 +80,15 @@ data_to_read: } if (filter->discard_all) { - filter->result = AGENT_MSG_FILTER_DISCARD; + switch (msg_header.type) { + case VD_AGENT_FILE_XFER_START: + case VD_AGENT_FILE_XFER_STATUS: + case VD_AGENT_FILE_XFER_DATA: + filter->result = AGENT_MSG_FILTER_DISCARD_XFER; + break; + default: + filter->result = AGENT_MSG_FILTER_DISCARD; + } } else { switch (msg_header.type) { case VD_AGENT_CLIPBOARD: @@ -99,7 +107,7 @@ data_to_read: if (filter->file_xfer_enabled) { filter->result = AGENT_MSG_FILTER_OK; } else { - filter->result = AGENT_MSG_FILTER_DISCARD; + filter->result = AGENT_MSG_FILTER_DISCARD_XFER; } break; case VD_AGENT_MONITORS_CONFIG: diff --git a/server/agent-msg-filter.h b/server/agent-msg-filter.h index b4d8e720..acbeaaaf 100644 --- a/server/agent-msg-filter.h +++ b/server/agent-msg-filter.h @@ -28,6 +28,7 @@ typedef enum { AGENT_MSG_FILTER_OK, AGENT_MSG_FILTER_DISCARD, + AGENT_MSG_FILTER_DISCARD_XFER, AGENT_MSG_FILTER_PROTO_ERROR, AGENT_MSG_FILTER_MONITORS_CONFIG, } AgentMsgFilterResult; diff --git a/server/reds.c b/server/reds.c index 3b30928a..b9f13e2e 100644 --- a/server/reds.c +++ b/server/reds.c @@ -803,6 +803,8 @@ static RedPipeItem *vdi_port_read_one_msg_from_device(RedCharDevice *self, case AGENT_MSG_FILTER_MONITORS_CONFIG: /* fall through */ case AGENT_MSG_FILTER_DISCARD: + /* fall through */ + case AGENT_MSG_FILTER_DISCARD_XFER: red_pipe_item_unref(&dispatch_buf->base); } } @@ -1111,6 +1113,8 @@ 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 */ + case AGENT_MSG_FILTER_DISCARD_XFER: return; case AGENT_MSG_FILTER_MONITORS_CONFIG: reds_on_main_agent_monitors_config(reds, mcc, message, size); @@ -1198,6 +1202,8 @@ void reds_on_main_channel_migrate(RedsState *reds, MainChannelClient *mcc) case AGENT_MSG_FILTER_MONITORS_CONFIG: /* fall through */ case AGENT_MSG_FILTER_DISCARD: + /* fall through */ + case AGENT_MSG_FILTER_DISCARD_XFER: red_pipe_item_unref(&read_buf->base); } diff --git a/server/tests/test-agent-msg-filter.c b/server/tests/test-agent-msg-filter.c index 2f5568a6..ea8b9363 100644 --- a/server/tests/test-agent-msg-filter.c +++ b/server/tests/test-agent-msg-filter.c @@ -83,8 +83,12 @@ static void test_agent_msg_filter_run(void) msg.msg_header.protocol = VD_AGENT_PROTOCOL; for (type = VD_AGENT_MOUSE_STATE; type < VD_AGENT_END_MESSAGE; type++) { msg.msg_header.type = type; + AgentMsgFilterResult filter_result = AGENT_MSG_FILTER_DISCARD; + if (type >= VD_AGENT_FILE_XFER_START && type <= VD_AGENT_FILE_XFER_DATA) { + filter_result = AGENT_MSG_FILTER_DISCARD_XFER; + } g_assert_cmpint(agent_msg_filter_process_data(&filter, msg.data, len), ==, - AGENT_MSG_FILTER_DISCARD); + filter_result); } /* data exceeds size from header */ @@ -113,10 +117,12 @@ static void test_agent_msg_filter_run(void) case VD_AGENT_CLIPBOARD_GRAB: case VD_AGENT_CLIPBOARD_REQUEST: case VD_AGENT_CLIPBOARD_RELEASE: + result = AGENT_MSG_FILTER_DISCARD; + break; case VD_AGENT_FILE_XFER_START: case VD_AGENT_FILE_XFER_STATUS: case VD_AGENT_FILE_XFER_DATA: - result = AGENT_MSG_FILTER_DISCARD; + result = AGENT_MSG_FILTER_DISCARD_XFER; break; case VD_AGENT_MONITORS_CONFIG: result = AGENT_MSG_FILTER_MONITORS_CONFIG; -- 2.11.0 _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/spice-devel