Merge "enable support for frames > 64k" am: 5779be9ce7

Original change: https://android-review.googlesource.com/c/device/generic/goldfish/+/2154629

Change-Id: I42d003f31f0d81277e515dac57360773ef754bfe
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
diff --git a/qemud/qemud.cpp b/qemud/qemud.cpp
index 9d4cb1e..13a2413 100644
--- a/qemud/qemud.cpp
+++ b/qemud/qemud.cpp
@@ -23,6 +23,8 @@
 #include <qemu_pipe_bp.h>
 #include <unistd.h>
 
+#include <arpa/inet.h>
+
 int qemud_channel_open(const char*  name) {
     return qemu_pipe_open_ns("qemud", name, O_RDWR);
 }
@@ -36,7 +38,13 @@
     if (size == 0)
         return 0;
 
-    snprintf(header, sizeof(header), "%04x", size);
+    if(size >= 64 * 1024) { // use binary encoding
+        uint32_t length32be = htonl(size | (1U << 31));
+        memcpy(header, &length32be, 4);
+    } else { // use hex digit encoding
+        snprintf(header, sizeof(header), "%04x", size);
+    }
+
     if (qemu_pipe_write_fully(pipe, header, 4)) {
         return -1;
     }