[Spice-devel] [vdagent-win PATCH v3 01/10] Reduce indentation returning earlier
Frediano Ziglio
fziglio at redhat.com
Fri Jun 29 07:11:41 UTC 2018
Also add some comments.
Signed-off-by: Frediano Ziglio <fziglio at redhat.com>
---
vdagent/vdagent.cpp | 45 ++++++++++++++++++++++++++-------------------
1 file changed, 26 insertions(+), 19 deletions(-)
diff --git a/vdagent/vdagent.cpp b/vdagent/vdagent.cpp
index e22687c..7318725 100644
--- a/vdagent/vdagent.cpp
+++ b/vdagent/vdagent.cpp
@@ -1339,6 +1339,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) {
+ // wait for the full header
if (chunk->hdr.size < sizeof(VDAgentMessage)) {
return;
}
@@ -1349,29 +1350,35 @@ void VDAgent::handle_chunk(VDIChunk* chunk)
return;
}
uint32_t msg_size = sizeof(VDAgentMessage) + msg->size;
+ // we got an entire message, handle it
if (chunk->hdr.size == msg_size) {
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, starts 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;
+ }
+
+ // append chunk to partial message
+ 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();
}
}
--
2.17.1
More information about the Spice-devel
mailing list