hewei.it %!s(int64=4) %!d(string=hai) anos
pai
achega
fc8299de73
Modificáronse 2 ficheiros con 13 adicións e 3 borrados
  1. 11 1
      event/hloop.h
  2. 2 2
      event/unpack.c

+ 11 - 1
event/hloop.h

@@ -411,10 +411,19 @@ typedef struct unpack_setting_s {
     unsigned char   delimiter[PACKAGE_MAX_DELIMITER_BYTES];
     unsigned short  delimiter_bytes;
     // UNPACK_BY_LENGTH_FIELD
-    unsigned short  body_offset; // real_body_offset = body_offset + varint_bytes - length_field_bytes
+    /* package_len = head_len + body_len + length_adjustment
+     *
+     * if (length_field_coding == ENCODE_BY_VARINT) head_len = body_offset + varint_bytes - length_field_bytes;
+     * else head_len = body_offset;
+     *
+     * body_len calc by length_field
+     *
+     */
+    unsigned short  body_offset;
     unsigned short  length_field_offset;
     unsigned short  length_field_bytes;
     unpack_coding_e length_field_coding;
+    int             length_adjustment;
 #ifdef __cplusplus
     unpack_setting_s() {
         // Recommended setting:
@@ -427,6 +436,7 @@ typedef struct unpack_setting_s {
         length_field_offset = 1;
         length_field_bytes = 4;
         length_field_coding = ENCODE_BY_BIG_ENDIAN;
+        length_adjustment = 0;
     }
 #endif
 } unpack_setting_t;

+ 2 - 2
event/unpack.c

@@ -115,7 +115,7 @@ int hio_unpack_by_length_field(hio_t* io, void* buf, int readbytes) {
     int handled = 0;
     unsigned int head_len = setting->body_offset;
     unsigned int body_len = 0;
-    unsigned int package_len = head_len + body_len;
+    unsigned int package_len = head_len;
     const unsigned char* lp = NULL;
     while (remain >= setting->body_offset) {
         body_len = 0;
@@ -142,7 +142,7 @@ int hio_unpack_by_length_field(hio_t* io, void* buf, int readbytes) {
             }
             head_len = setting->body_offset + varint_bytes - setting->length_field_bytes;
         }
-        package_len = head_len + body_len;
+        package_len = head_len + body_len + setting->length_adjustment;
         if (remain >= package_len) {
             hio_read_cb(io, (void*)p, package_len);
             handled += package_len;