diff options
author | Frediano Ziglio <fziglio@redhat.com> | 2018-06-29 07:50:44 +0100 |
---|---|---|
committer | Frediano Ziglio <fziglio@redhat.com> | 2018-07-04 05:33:22 +0100 |
commit | 873464cecceb1895a620ca3606004f7c856cfd79 (patch) | |
tree | a3f6ee5ae8e9505ce22f06cee2bfd2779ce376e4 /vdagent | |
parent | bc3384f359765fe84aa8e53e0330886d5b6e42f3 (diff) |
Reduce indentation returning earlier
Also add some comments.
Signed-off-by: Frediano Ziglio <fziglio@redhat.com>
Acked-by: Jonathon Jongsma <jjongsma@redhat.com>
Diffstat (limited to 'vdagent')
-rw-r--r-- | vdagent/vdagent.cpp | 45 |
1 files changed, 26 insertions, 19 deletions
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(); } } |