Only send the graphics device display info to agents that advertise the VD_AGENT_CAP_GRAPHICS_DEVICE_INFO capability
Signed-off-by: Jonathon Jongsma <jjong...@redhat.com> --- Changes in v2: - renamed member variable - moved variable to RedCharDeviceVDIPortPrivate - reset variable when agent disconnects - make sure the message is sent immediately when we receive the capabilities. NOTE: I did not change the function name as requested to filter_agent_capabilities because there is already a agent message filter which determines whether a message should be handled or discarded, etc. Adding another 'filter' concept would confuse things. I think "adjust_" seems fine to me. server/reds.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/server/reds.c b/server/reds.c index 63bfadb22..07562b555 100644 --- a/server/reds.c +++ b/server/reds.c @@ -234,6 +234,7 @@ struct RedCharDeviceVDIPortPrivate { gboolean agent_attached; uint32_t plug_generation; int client_agent_started; + bool agent_supports_graphics_device_info; /* write to agent */ RedCharDeviceWriteBuffer *recv_from_client_buf; @@ -486,6 +487,7 @@ static void reds_reset_vdp(RedsState *reds) dev->priv->write_filter.result = AGENT_MSG_FILTER_DISCARD; dev->priv->write_filter.discard_all = TRUE; dev->priv->client_agent_started = FALSE; + dev->priv->agent_supports_graphics_device_info = false; /* The client's tokens are set once when the main channel is initialized * and once upon agent's connection with SPICE_MSG_MAIN_AGENT_CONNECTED_TOKENS. @@ -813,6 +815,11 @@ static void reds_adjust_agent_capabilities(RedsState *reds, VDAgentMessage *mess if (!reds->config->agent_file_xfer) { VD_AGENT_SET_CAPABILITY(capabilities->caps, VD_AGENT_CAP_FILE_XFER_DISABLED); } + + size_t caps_size = VD_AGENT_CAPS_SIZE_FROM_MSG_SIZE(message->size); + reds->agent_dev->priv->agent_supports_graphics_device_info = + VD_AGENT_HAS_CAPABILITY(capabilities->caps, caps_size, VD_AGENT_CAP_GRAPHICS_DEVICE_INFO); + reds_send_device_display_info(reds); } /* reads from the device till completes reading a message that is addressed to the client, @@ -965,6 +972,10 @@ void reds_send_device_display_info(RedsState *reds) if (!reds->agent_dev->priv->agent_attached) { return; } + if (!reds->agent_dev->priv->agent_supports_graphics_device_info) { + return; + } + g_debug("Sending device display info to the agent:"); SpiceMarshaller *m = spice_marshaller_new(); -- 2.17.2 _______________________________________________ Spice-devel mailing list Spice-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/spice-devel