[Spice-devel] [PATCH 3/3] Add VD_AGENT_CAP_MAX_CLIPBOARD support
Alon Levy
alevy at redhat.com
Sun Jan 12 02:45:02 PST 2014
On 01/07/2014 01:28 AM, Marc-André Lureau wrote:
> ping
Looks good to me.
>
> On Thu, Nov 14, 2013 at 5:03 PM, Marc-André Lureau
> <marcandre.lureau at gmail.com> wrote:
>> From: Marc-André Lureau <marcandre.lureau at gmail.com>
>>
>> Do not send clipboard data bigger than last received
>> VDAgentMaxClipboard.
>>
>> There is no need to further limit at the session agent, since it is
>> already OOM safe, and since marhsalling/sending is local, that shouldn't
>> make any stability or speed difference that deserves the added
>> complexity.
>> ---
>> src/vdagentd.c | 15 +++++++++++++++
>> 1 file changed, 15 insertions(+)
>>
>> diff --git a/src/vdagentd.c b/src/vdagentd.c
>> index 2eb97cb..1098fb6 100644
>> --- a/src/vdagentd.c
>> +++ b/src/vdagentd.c
>> @@ -74,6 +74,7 @@ static int agent_owns_clipboard[256] = { 0, };
>> static int quit = 0;
>> static int retval = 0;
>> static int client_connected = 0;
>> +static int max_clipboard = -1;
>>
>> /* utility functions */
>> /* vdagentd <-> spice-client communication handling */
>> @@ -98,6 +99,7 @@ static void send_capabilities(struct vdagent_virtio_port *vport,
>> VD_AGENT_SET_CAPABILITY(caps->caps, VD_AGENT_CAP_CLIPBOARD_SELECTION);
>> VD_AGENT_SET_CAPABILITY(caps->caps, VD_AGENT_CAP_SPARSE_MONITORS_CONFIG);
>> VD_AGENT_SET_CAPABILITY(caps->caps, VD_AGENT_CAP_GUEST_LINEEND_LF);
>> + VD_AGENT_SET_CAPABILITY(caps->caps, VD_AGENT_CAP_MAX_CLIPBOARD);
>>
>> vdagent_virtio_port_write(vport, VDP_CLIENT_PORT,
>> VD_AGENT_ANNOUNCE_CAPABILITIES, 0,
>> @@ -369,6 +371,13 @@ int virtio_port_read_complete(
>> vdagent_virtio_port_reset(vport, VDP_CLIENT_PORT);
>> do_client_disconnect();
>> break;
>> + case VD_AGENT_MAX_CLIPBOARD:
>> + if (message_header->size != sizeof(VDAgentMaxClipboard))
>> + goto size_error;
>> + VDAgentMaxClipboard *msg = (VDAgentMaxClipboard *)data;
>> + syslog(LOG_DEBUG, "Set max clipboard: %d", msg->max);
>> + max_clipboard = msg->max;
>> + break;
>> default:
>> syslog(LOG_WARNING, "unknown message type %d, ignoring",
>> message_header->type);
>> @@ -453,6 +462,12 @@ int do_agent_clipboard(struct udscs_connection *conn,
>> case VDAGENTD_CLIPBOARD_DATA:
>> msg_type = VD_AGENT_CLIPBOARD;
>> data_type = header->arg2;
>> + if (max_clipboard != -1 && size > max_clipboard) {
>> + syslog(LOG_WARNING, "clipboard is too large (%d > %d), discarding",
>> + size, max_clipboard);
>> + virtio_write_clipboard(selection, msg_type, data_type, NULL, 0);
>> + return 0;
>> + }
>> break;
>> case VDAGENTD_CLIPBOARD_RELEASE:
>> msg_type = VD_AGENT_CLIPBOARD_RELEASE;
>> --
>> 1.8.3.1
>>
>
>
>
More information about the Spice-devel
mailing list