[Spice-devel] [PATCH spice v2 1/2] agent-filter: Differentiate xfer messages
Pavel Grunt
pgrunt at redhat.com
Tue Jan 10 13:19:18 UTC 2017
On Tue, 2017-01-10 at 06:47 -0500, Frediano Ziglio wrote:
> >
> > 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;
>
> I don't know why but I feel that the filter should just
> filter but looks like it starts classifying the messages
> too. It's not clear the responsibility of this filter code but
> if you ask me I would attempt to remove
> AGENT_MSG_FILTER_MONITORS_CONFIG
> instead of adding other classifications.
>
I did it to avoid checking twice for the message type as you suggested
in v1
It is true that it is more a classifier than a filter.
Pavel
> > 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;
>
> Frediano
More information about the Spice-devel
mailing list