[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