[vdagent-win PATCH v3 01/10] Reduce indentation returning earlier

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

 



Also add some comments.

Signed-off-by: Frediano Ziglio <fziglio@xxxxxxxxxx>
---
 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

_______________________________________________
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]