Re: [vdagent-win PATCH v4 02/19] Reduce indentation returning earlier

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Acked-by: Jonathon Jongsma <jjongsma@xxxxxxxxxx>


On Mon, 2018-07-02 at 08:43 +0100, Frediano Ziglio wrote:
> Also add some comments.
> 
> Signed-off-by: Frediano Ziglio <fziglio@xxxxxxxxxx>
> ---
>  spice-protocol      |  2 +-
>  vdagent/vdagent.cpp | 45 ++++++++++++++++++++++++++-----------------
> --
>  2 files changed, 27 insertions(+), 20 deletions(-)
> 
> diff --git a/spice-protocol b/spice-protocol
> index 666b5c5..dca5931 160000
> --- a/spice-protocol
> +++ b/spice-protocol
> @@ -1 +1 @@
> -Subproject commit 666b5c5780acf3176a9cff61ad549d30bb1b9824
> +Subproject commit dca5931a3ac405139b8d05da68544cc43ae56d83
> diff --git a/vdagent/vdagent.cpp b/vdagent/vdagent.cpp
> index 78c42d1..cf492cc 100644
> --- a/vdagent/vdagent.cpp
> +++ b/vdagent/vdagent.cpp
> @@ -1393,6 +1393,7 @@ void VDAgent::handle_chunk(VDIChunk* chunk)
>  {
>      //FIXME: currently assumes that multi-part msg arrives only from
> client port
>      if (_in_msg_pos == 0 || chunk->hdr.port == VDP_SERVER_PORT) {
> +        // ignore the chunk if too short
>          if (chunk->hdr.size < sizeof(VDAgentMessage)) {
>              return;
>          }
> @@ -1404,28 +1405,34 @@ void VDAgent::handle_chunk(VDIChunk* chunk)
>          }
>          uint32_t msg_size = sizeof(VDAgentMessage) + msg->size;
>          if (chunk->hdr.size == msg_size) {
> +            // we got an entire message, handle it
>              dispatch_message(msg, chunk->hdr.port);
> -        } else {
> -            ASSERT(chunk->hdr.size < msg_size);
> -            _in_msg = (VDAgentMessage*)new uint8_t[msg_size];
> -            memcpy(_in_msg, chunk->data, chunk->hdr.size);
> -            _in_msg_pos = chunk->hdr.size;
> -        }
> -    } else {
> -        memcpy((uint8_t*)_in_msg + _in_msg_pos, chunk->data, chunk-
> >hdr.size);
> -        _in_msg_pos += chunk->hdr.size;
> -        // update clipboard tick on each clipboard chunk for timeout
> setting
> -        if (_in_msg->type == VD_AGENT_CLIPBOARD && _clipboard_tick)
> {
> -            _clipboard_tick = GetTickCount();
> +            return;
>          }
> -        if (_in_msg_pos == sizeof(VDAgentMessage) + _in_msg->size) {
> -            if (_in_msg->type == VD_AGENT_CLIPBOARD &&
> !_clipboard_tick) {
> -                vd_printf("Clipboard received but dropped due to
> timeout");
> -            } else {
> -                dispatch_message(_in_msg, 0);
> -            }
> -            cleanup_in_msg();
> +
> +        // got just the start, start to collapse all chunks into a
> +        // single buffer
> +        ASSERT(chunk->hdr.size < msg_size);
> +        _in_msg = (VDAgentMessage*)new uint8_t[msg_size];
> +        memcpy(_in_msg, chunk->data, chunk->hdr.size);
> +        _in_msg_pos = chunk->hdr.size;
> +        return;
> +    }
> +
> +    // the previous chunk was a partial message, so append this
> chunk to the previous chunk
> +    memcpy((uint8_t*)_in_msg + _in_msg_pos, chunk->data, chunk-
> >hdr.size);
> +    _in_msg_pos += chunk->hdr.size;
> +    // update clipboard tick on each clipboard chunk for timeout
> setting
> +    if (_in_msg->type == VD_AGENT_CLIPBOARD && _clipboard_tick) {
> +        _clipboard_tick = GetTickCount();
> +    }
> +    if (_in_msg_pos == sizeof(VDAgentMessage) + _in_msg->size) {
> +        if (_in_msg->type == VD_AGENT_CLIPBOARD && !_clipboard_tick)
> {
> +            vd_printf("Clipboard received but dropped due to
> timeout");
> +        } else {
> +            dispatch_message(_in_msg, 0);
>          }
> +        cleanup_in_msg();
>      }
>  }
>  
_______________________________________________
Spice-devel mailing list
Spice-devel@xxxxxxxxxxxxxxxxxxxxx
https://lists.freedesktop.org/mailman/listinfo/spice-devel




[Index of Archives]     [Linux Virtualization]     [Linux Virtualization]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux OMAP]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]     [Monitors]