summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorliuwentan <[email protected]>2024-02-02 10:47:22 +0800
committerliuwentan <[email protected]>2024-02-02 10:47:22 +0800
commitc530e0bbf18e595eb074a99b1f10f58ce993a4b9 (patch)
tree98cbe6f2cd0b583a3dbe038ee425636048af8ff2
parent06af77fb35a55754768f91fbf1363e2dd7906683 (diff)
[HTTP_DECODER]bugfix for http header truncated
-rw-r--r--src/http_decoder/http_decoder.c133
-rw-r--r--src/http_decoder/http_decoder_half.c76
-rw-r--r--src/http_decoder/http_decoder_half.h2
-rw-r--r--src/http_decoder/http_decoder_inc.h9
-rw-r--r--src/http_decoder/http_decoder_result_queue.c14
-rw-r--r--src/http_decoder/http_decoder_result_queue.h4
-rw-r--r--src/http_decoder/http_decoder_table.c110
-rw-r--r--src/http_decoder/http_decoder_table.h23
-rw-r--r--test/http_decoder/CMakeLists.txt18
-rw-r--r--test/http_decoder/http_decoder_gtest.cpp1
-rw-r--r--test/http_decoder/http_pcap/http_hdr_truncated_after_kv.pcapbin0 -> 155839 bytes
-rw-r--r--test/http_decoder/http_pcap/http_hdr_truncated_in_kv.pcapbin0 -> 134675 bytes
-rw-r--r--test/http_decoder/http_pcap/http_hdr_value_empty.pcap (renamed from test/http_decoder/http_pcap/http_header_value_empty.pcap)bin2129 -> 2129 bytes
-rw-r--r--test/http_decoder/http_pcap/http_hdrs_exceed_maximum.pcap (renamed from test/http_decoder/http_pcap/http_headers_exceed_maximum.pcap)bin5029 -> 5029 bytes
-rw-r--r--test/http_decoder/test_result_json/http_get_long_cookie.json2
-rw-r--r--test/http_decoder/test_result_json/http_hdr_truncated_after_kv.json331
-rw-r--r--test/http_decoder/test_result_json/http_hdr_truncated_in_kv.json749
-rw-r--r--test/http_decoder/test_result_json/http_hdr_value_empty.json (renamed from test/http_decoder/test_result_json/http_header_value_empty.json)0
-rw-r--r--test/http_decoder/test_result_json/http_hdrs_exceed_maximum.json (renamed from test/http_decoder/test_result_json/http_headers_exceed_maximum.json)2
19 files changed, 1391 insertions, 83 deletions
diff --git a/src/http_decoder/http_decoder.c b/src/http_decoder/http_decoder.c
index 1ce4b86..8a663ab 100644
--- a/src/http_decoder/http_decoder.c
+++ b/src/http_decoder/http_decoder.c
@@ -35,7 +35,8 @@ const char *fs_file_name = "http_decoder.fs";
*/
struct http_message {
enum http_message_type type;
- struct http_decoder_half_data *data;
+ struct http_decoder_result_queue *ref_queue;
+ size_t queue_index;
};
struct http_decoder {
@@ -61,12 +62,15 @@ struct http_decoder_context {
};
struct http_message *
-http_message_new(enum http_message_type type, void *data)
+http_message_new(enum http_message_type type,
+ struct http_decoder_result_queue *queue,
+ int queue_index)
{
struct http_message *msg = CALLOC(struct http_message, 1);
msg->type = type;
- msg->data = data;
+ msg->ref_queue = queue;
+ msg->queue_index = queue_index;
return msg;
}
@@ -86,6 +90,7 @@ static void http_event_handler(enum http_event event,
{
assert(ev_ctx);
+ size_t queue_idx = 0;
struct http_decoder_result_queue *queue = ev_ctx->ref_queue;
struct http_message *msg = NULL;
struct http_decoder_half_data *half_data = NULL;
@@ -115,17 +120,25 @@ static void http_event_handler(enum http_event event,
*data = half_data;
break;
case HTTP_EVENT_REQ_LINE:
- msg = http_message_new(HTTP_MESSAGE_REQ_LINE, *data);
+ queue_idx = http_decoder_result_queue_req_index(queue);
+ msg = http_message_new(HTTP_MESSAGE_REQ_LINE, queue, queue_idx);
session_mq_publish_message(ev_ctx->ref_session, ev_ctx->topic_id, msg);
break;
case HTTP_EVENT_REQ_HDR_END:
- msg = http_message_new(HTTP_MESSAGE_REQ_HEADER, *data);
+ ret = http_decoder_half_data_has_parsed_header(*data);
+ if (0 == ret) {
+ break;
+ }
+
+ queue_idx = http_decoder_result_queue_req_index(queue);
+ msg = http_message_new(HTTP_MESSAGE_REQ_HEADER, queue, queue_idx);
session_mq_publish_message(ev_ctx->ref_session, ev_ctx->topic_id, msg);
break;
case HTTP_EVENT_REQ_BODY_BEGIN:
break;
case HTTP_EVENT_REQ_BODY_DATA:
- msg = http_message_new(HTTP_MESSAGE_REQ_BODY, *data);
+ queue_idx = http_decoder_result_queue_req_index(queue);
+ msg = http_message_new(HTTP_MESSAGE_REQ_BODY, queue, queue_idx);
session_mq_publish_message(ev_ctx->ref_session, ev_ctx->topic_id, msg);
break;
case HTTP_EVENT_REQ_BODY_END:
@@ -161,19 +174,27 @@ static void http_event_handler(enum http_event event,
*data = half_data;
break;
case HTTP_EVENT_RES_LINE:
- msg = http_message_new(HTTP_MESSAGE_RES_LINE, *data);
+ queue_idx = http_decoder_result_queue_res_index(queue);
+ msg = http_message_new(HTTP_MESSAGE_RES_LINE, queue, queue_idx);
session_mq_publish_message(ev_ctx->ref_session, ev_ctx->topic_id, msg);
break;
case HTTP_EVENT_RES_HDR:
break;
case HTTP_EVENT_RES_HDR_END:
- msg = http_message_new(HTTP_MESSAGE_RES_HEADER, *data);
+ ret = http_decoder_half_data_has_parsed_header(*data);
+ if (0 == ret) {
+ break;
+ }
+
+ queue_idx = http_decoder_result_queue_res_index(queue);
+ msg = http_message_new(HTTP_MESSAGE_RES_HEADER, queue, queue_idx);
session_mq_publish_message(ev_ctx->ref_session, ev_ctx->topic_id, msg);
break;
case HTTP_EVENT_RES_BODY_BEGIN:
break;
case HTTP_EVENT_RES_BODY_DATA:
- msg = http_message_new(HTTP_MESSAGE_RES_BODY, *data);
+ queue_idx = http_decoder_result_queue_res_index(queue);
+ msg = http_message_new(HTTP_MESSAGE_RES_BODY, queue, queue_idx);
session_mq_publish_message(ev_ctx->ref_session, ev_ctx->topic_id, msg);
break;
case HTTP_EVENT_RES_BODY_END:
@@ -338,7 +359,13 @@ int http_decoder_entry(struct session *sess, int events,
cur_half = ex_data->decoder->s2c_half;
}
- http_decoder_half_reinit(cur_half, decoder_ctx->topic_id, ex_data->queue, sess);
+ // printf("<before parse> queue:%p req_index:%zu req:%p res_index:%zu, res:%p\n",
+ // ex_data->queue, ex_data->queue->req_index,
+ // ex_data->queue->array[ex_data->queue->req_index].req_data,
+ // ex_data->queue->res_index,
+ // ex_data->queue->array[ex_data->queue->res_index].res_data);
+ http_decoder_half_reinit(cur_half, decoder_ctx->topic_id, ex_data->queue,
+ sess);
ret = http_decoder_half_parse(cur_half, payload, payload_len);
if (ret < 0) {
// fieldstat_easy_counter_incrby(decoder_ctx->fse, thread_id,
@@ -359,6 +386,12 @@ int http_decoder_entry(struct session *sess, int events,
// decoder_ctx->fs_incoming_trans_id,
// NULL, 0, trans_cnt);
+ // printf("<after parse> queue:%p req_index:%zu req:%p res_index:%zu, res:%p, counter:%d\n",
+ // ex_data->queue, ex_data->queue->req_index,
+ // ex_data->queue->array[ex_data->queue->req_index].req_data,
+ // ex_data->queue->res_index,
+ // ex_data->queue->array[ex_data->queue->res_index].res_data,
+ // decoder_ctx->counter);
return 0;
}
@@ -510,7 +543,13 @@ int http_message_get_request_line(struct http_message *msg,
return -1;
}
- return http_decoder_half_data_get_request_line(msg->data, line);
+ assert(msg->ref_queue);
+ assert(msg->queue_index < HD_RESULT_QUEUE_SIZE);
+
+ struct http_decoder_half_data *req_data =
+ msg->ref_queue->array[msg->queue_index].req_data;
+
+ return http_decoder_half_data_get_request_line(req_data, line);
}
int http_message_get_response_line(struct http_message *msg,
@@ -521,7 +560,13 @@ int http_message_get_response_line(struct http_message *msg,
return -1;
}
- return http_decoder_half_data_get_response_line(msg->data, line);
+ assert(msg->ref_queue);
+ assert(msg->queue_index < HD_RESULT_QUEUE_SIZE);
+
+ struct http_decoder_half_data *res_data =
+ msg->ref_queue->array[msg->queue_index].res_data;
+
+ return http_decoder_half_data_get_response_line(res_data, line);
}
int http_message_get_request_header(struct http_message *msg, struct hstring *key,
@@ -532,7 +577,13 @@ int http_message_get_request_header(struct http_message *msg, struct hstring *ke
return -1;
}
- return http_decoder_half_data_get_header(msg->data, key, hdr_array, array_size);
+ assert(msg->ref_queue);
+ assert(msg->queue_index < HD_RESULT_QUEUE_SIZE);
+
+ struct http_decoder_half_data *req_data =
+ msg->ref_queue->array[msg->queue_index].req_data;
+
+ return http_decoder_half_data_get_header(req_data, key, hdr_array, array_size);
}
int http_message_get_response_header(struct http_message *msg, struct hstring *key,
@@ -543,7 +594,13 @@ int http_message_get_response_header(struct http_message *msg, struct hstring *k
return -1;
}
- return http_decoder_half_data_get_header(msg->data, key, hdr_array, array_size);
+ assert(msg->ref_queue);
+ assert(msg->queue_index < HD_RESULT_QUEUE_SIZE);
+
+ struct http_decoder_half_data *res_data =
+ msg->ref_queue->array[msg->queue_index].res_data;
+
+ return http_decoder_half_data_get_header(res_data, key, hdr_array, array_size);
}
int http_message_request_header_next(struct http_message *msg,
@@ -554,7 +611,13 @@ int http_message_request_header_next(struct http_message *msg,
return -1;
}
- return http_decoder_half_data_iter_header(msg->data, hdr);
+ assert(msg->ref_queue);
+ assert(msg->queue_index < HD_RESULT_QUEUE_SIZE);
+
+ struct http_decoder_half_data *req_data =
+ msg->ref_queue->array[msg->queue_index].req_data;
+
+ return http_decoder_half_data_iter_header(req_data, hdr);
}
int http_message_response_header_next(struct http_message *msg,
@@ -565,7 +628,13 @@ int http_message_response_header_next(struct http_message *msg,
return -1;
}
- return http_decoder_half_data_iter_header(msg->data, hdr);
+ assert(msg->ref_queue);
+ assert(msg->queue_index < HD_RESULT_QUEUE_SIZE);
+
+ struct http_decoder_half_data *res_data =
+ msg->ref_queue->array[msg->queue_index].res_data;
+
+ return http_decoder_half_data_iter_header(res_data, hdr);
}
int http_message_get_request_raw_body(struct http_message *msg,
@@ -576,7 +645,13 @@ int http_message_get_request_raw_body(struct http_message *msg,
return -1;
}
- return http_decoder_half_data_get_raw_body(msg->data, body);
+ assert(msg->ref_queue);
+ assert(msg->queue_index < HD_RESULT_QUEUE_SIZE);
+
+ struct http_decoder_half_data *req_data =
+ msg->ref_queue->array[msg->queue_index].req_data;
+
+ return http_decoder_half_data_get_raw_body(req_data, body);
}
int http_message_get_response_raw_body(struct http_message *msg,
@@ -587,7 +662,13 @@ int http_message_get_response_raw_body(struct http_message *msg,
return -1;
}
- return http_decoder_half_data_get_raw_body(msg->data, body);
+ assert(msg->ref_queue);
+ assert(msg->queue_index < HD_RESULT_QUEUE_SIZE);
+
+ struct http_decoder_half_data *res_data =
+ msg->ref_queue->array[msg->queue_index].res_data;
+
+ return http_decoder_half_data_get_raw_body(res_data, body);
}
int http_message_get_request_decompress_body(struct http_message *msg,
@@ -598,7 +679,13 @@ int http_message_get_request_decompress_body(struct http_message *msg,
return -1;
}
- return http_decoder_half_data_get_decompress_body(msg->data, body);
+ assert(msg->ref_queue);
+ assert(msg->queue_index < HD_RESULT_QUEUE_SIZE);
+
+ struct http_decoder_half_data *req_data =
+ msg->ref_queue->array[msg->queue_index].req_data;
+
+ return http_decoder_half_data_get_decompress_body(req_data, body);
}
int http_message_get_response_decompress_body(struct http_message *msg,
@@ -609,5 +696,11 @@ int http_message_get_response_decompress_body(struct http_message *msg,
return -1;
}
- return http_decoder_half_data_get_decompress_body(msg->data, body);
+ assert(msg->ref_queue);
+ assert(msg->queue_index < HD_RESULT_QUEUE_SIZE);
+
+ struct http_decoder_half_data *res_data =
+ msg->ref_queue->array[msg->queue_index].res_data;
+
+ return http_decoder_half_data_get_decompress_body(res_data, body);
} \ No newline at end of file
diff --git a/src/http_decoder/http_decoder_half.c b/src/http_decoder/http_decoder_half.c
index cc13d8e..2a8126f 100644
--- a/src/http_decoder/http_decoder_half.c
+++ b/src/http_decoder/http_decoder_half.c
@@ -364,6 +364,7 @@ static int on_header_value(llhttp_t *http, const char *at, size_t length)
return 0;
}
+#define MAX_ENCODING_STR_LEN 8
/* Information-only callbacks, return value is ignored */
static int on_header_value_complete(llhttp_t *http)
{
@@ -386,8 +387,12 @@ static int on_header_value_complete(llhttp_t *http)
if (http_decoder_table_get_header(half->ref_data->table, &key,
&http_hdr, 1) == 1) {
- char encoding_str[16] = {0};
- memcpy(encoding_str, http_hdr.val.str, http_hdr.val.str_len);
+ char encoding_str[MAX_ENCODING_STR_LEN + 1] = {0};
+ size_t str_len = http_hdr.val.str_len;
+ if (str_len > MAX_ENCODING_STR_LEN) {
+ str_len = MAX_ENCODING_STR_LEN;
+ }
+ memcpy(encoding_str, http_hdr.val.str, str_len);
half->ref_data->content_encoding = http_content_encoding_str2int(encoding_str);
}
}
@@ -430,6 +435,9 @@ static int on_headers_complete(llhttp_t *http)
struct http_decoder_half *half =
container_of(http, struct http_decoder_half, parser);
assert(half);
+ assert(half->ref_data);
+
+ http_decoder_table_set_header_complete(half->ref_data->table);
if (half->parser.type == HTTP_REQUEST) {
half->event = HTTP_EVENT_REQ_HDR_END;
@@ -595,19 +603,28 @@ void http_decoder_half_reinit(struct http_decoder_half *half, int topic_id,
static void publish_message_for_parsed_header(struct http_decoder_half *half)
{
- if (http_decoder_table_has_parsed_header(half->ref_data->table) <= 0) {
+ if (0 == http_decoder_table_has_parsed_header(half->ref_data->table)) {
return;
}
// publish complete kv-header message
struct http_message *msg = NULL;
+ size_t queue_idx = 0;
+ struct http_decoder_result_queue *queue = half->http_ev_ctx->ref_queue;
+
if (half->parser.type == HTTP_REQUEST) {
- msg = http_message_new(HTTP_MESSAGE_REQ_HEADER, half->ref_data);
+ queue_idx = http_decoder_result_queue_req_index(queue);
+
+ msg = http_message_new(HTTP_MESSAGE_REQ_HEADER, queue, queue_idx);
+
session_mq_publish_message(half->http_ev_ctx->ref_session,
half->http_ev_ctx->topic_id, msg);
} else {
// http response
- msg = http_message_new(HTTP_MESSAGE_RES_HEADER, half->ref_data);
+ queue_idx = http_decoder_result_queue_res_index(queue);
+
+ msg = http_message_new(HTTP_MESSAGE_RES_HEADER, queue, queue_idx);
+
session_mq_publish_message(half->http_ev_ctx->ref_session,
half->http_ev_ctx->topic_id, msg);
}
@@ -671,16 +688,42 @@ int http_decoder_half_parse(struct http_decoder_half *half,
http_decoder_table_cache(half->ref_data->table, HTTP_ITEM_VERSION);
}
- if (http_decoder_table_state(half->ref_data->table, HTTP_ITEM_HDRKEY)
- == STRING_STATE_REFER) {
+ if (http_decoder_table_header_complete(half->ref_data->table)) {
+ http_decoder_table_reset_header_complete(half->ref_data->table);
+ } else {
publish_message_for_parsed_header(half);
+ }
+
+ enum string_state hdr_key_state =
+ http_decoder_table_state(half->ref_data->table, HTTP_ITEM_HDRKEY);
+ enum string_state hdr_val_state =
+ http_decoder_table_state(half->ref_data->table, HTTP_ITEM_HDRVAL);
+
+ /* Truncated in http header key
+ For example http header k-v => User-Agent: Chrome
+ case1:
+ packet1: User- hdr_key_state == STRING_STATE_REFER
+ packet2: Agent: Chrome
+
+ case2:
+ packet1: User-Agent: hdr_key_state == STRING_STATE_COMMIT
+ hdr_val_state == STRING_STATE_INIT
+ packet2: Chrome
+ */
+ if (hdr_key_state == STRING_STATE_REFER ||
+ (hdr_key_state == STRING_STATE_COMMIT && hdr_val_state == STRING_STATE_INIT)) {
http_decoder_table_cache(half->ref_data->table, HTTP_ITEM_HDRKEY);
}
+ /* Truncated in http header value
+ For example http header k-v => User-Agent: Chrome
+ packet1: User-Agent: Ch hdr_key_state == STRING_STATE_COMMIT
+ hdr_val_state == STRING_STATE_REFER
+
+ packet2: rome
+ */
if (http_decoder_table_state(half->ref_data->table, HTTP_ITEM_HDRVAL)
== STRING_STATE_REFER) {
- publish_message_for_parsed_header(half);
-
/* Header key should have been committed
If it's not cached, cache it for next packet to use
*/
@@ -783,10 +826,12 @@ int http_decoder_half_data_get_response_line(struct http_decoder_half_data *data
}
int http_decoder_half_data_get_header(struct http_decoder_half_data *data,
- struct hstring *key, struct http_header *hdr_array,
+ struct hstring *key,
+ struct http_header *hdr_array,
size_t array_size)
{
- if (NULL == data) {
+ if (NULL == data || NULL == key ||
+ NULL == hdr_array || 0 == array_size) {
return -1;
}
@@ -803,6 +848,15 @@ int http_decoder_half_data_iter_header(struct http_decoder_half_data *data,
return http_decoder_table_iter_header(data->table, header);
}
+int http_decoder_half_data_has_parsed_header(struct http_decoder_half_data *data)
+{
+ if (NULL == data) {
+ return 0;
+ }
+
+ return http_decoder_table_has_parsed_header(data->table);
+}
+
int http_decoder_half_data_get_raw_body(struct http_decoder_half_data *data,
struct hstring *body)
{
diff --git a/src/http_decoder/http_decoder_half.h b/src/http_decoder/http_decoder_half.h
index 99cc260..f77cbd1 100644
--- a/src/http_decoder/http_decoder_half.h
+++ b/src/http_decoder/http_decoder_half.h
@@ -89,6 +89,8 @@ int http_decoder_half_data_get_header(struct http_decoder_half_data *data,
int http_decoder_half_data_iter_header(struct http_decoder_half_data *data,
struct http_header *header);
+int http_decoder_half_data_has_parsed_header(struct http_decoder_half_data *data);
+
int http_decoder_half_data_get_raw_body(struct http_decoder_half_data *data,
struct hstring *body);
diff --git a/src/http_decoder/http_decoder_inc.h b/src/http_decoder/http_decoder_inc.h
index fd39d6e..21688da 100644
--- a/src/http_decoder/http_decoder_inc.h
+++ b/src/http_decoder/http_decoder_inc.h
@@ -16,8 +16,15 @@ extern "C"
{
#endif
+#include "http_decoder.h"
+#include "http_decoder_result_queue.h"
+
struct http_message;
-struct http_message *http_message_new(enum http_message_type type, void *data);
+
+struct http_message *
+http_message_new(enum http_message_type type,
+ struct http_decoder_result_queue *queue,
+ int queue_index);
#ifdef __cplusplus
}
diff --git a/src/http_decoder/http_decoder_result_queue.c b/src/http_decoder/http_decoder_result_queue.c
index eb7b2d1..dd2a13a 100644
--- a/src/http_decoder/http_decoder_result_queue.c
+++ b/src/http_decoder/http_decoder_result_queue.c
@@ -72,6 +72,20 @@ void http_decoder_result_queue_inc_res_index(struct http_decoder_result_queue *q
queue->res_index = queue->res_index % queue->queue_size;
}
+size_t http_decoder_result_queue_req_index(struct http_decoder_result_queue *queue)
+{
+ assert(queue);
+
+ return queue->req_index;
+}
+
+size_t http_decoder_result_queue_res_index(struct http_decoder_result_queue *queue)
+{
+ assert(queue);
+
+ return queue->res_index;
+}
+
int http_decoder_result_queue_push_req(struct http_decoder_result_queue *queue,
struct http_decoder_half_data *req_data)
{
diff --git a/src/http_decoder/http_decoder_result_queue.h b/src/http_decoder/http_decoder_result_queue.h
index eef68ba..7aa4790 100644
--- a/src/http_decoder/http_decoder_result_queue.h
+++ b/src/http_decoder/http_decoder_result_queue.h
@@ -42,6 +42,10 @@ void http_decoder_result_queue_inc_req_index(struct http_decoder_result_queue *q
void http_decoder_result_queue_inc_res_index(struct http_decoder_result_queue *queue);
+size_t http_decoder_result_queue_req_index(struct http_decoder_result_queue *queue);
+
+size_t http_decoder_result_queue_res_index(struct http_decoder_result_queue *queue);
+
struct http_decoder_half_data *
http_decoder_result_queue_pop_req(struct http_decoder_result_queue *queue);
diff --git a/src/http_decoder/http_decoder_table.c b/src/http_decoder/http_decoder_table.c
index ac12296..ca077d5 100644
--- a/src/http_decoder/http_decoder_table.c
+++ b/src/http_decoder/http_decoder_table.c
@@ -18,13 +18,13 @@
#include "http_decoder_string.h"
#include "stellar/utils.h"
-#define MAX_HEADER_SIZE 16
-#define MAX_URI_CACHE_SIZE 1024
+#define INIT_HEADER_CNT 16
+#define MAX_URI_CACHE_SIZE 2048
#define MAX_STATUS_CACHE_SIZE 32
#define MAX_METHOD_CACHE_SIZE 8
#define MAX_VERSION_CACHE_SIZE 4
-#define MAX_HEADER_KEY_CACHE_SIZE 128
-#define MAX_HEADER_VALUE_CACHE_SIZE 1024
+#define MAX_HEADER_KEY_CACHE_SIZE 4096
+#define MAX_HEADER_VALUE_CACHE_SIZE 4096
struct http_decoder_header {
struct http_decoder_string key;
@@ -38,7 +38,8 @@ struct http_decoder_table {
struct http_decoder_string version;
struct http_decoder_string body;
- size_t header_size;
+ int header_complete; //flag for all headers parsed completely
+ size_t header_cnt;
size_t header_index;
size_t header_iter;
struct http_decoder_header *headers;
@@ -58,7 +59,7 @@ static void http_decoder_table_init(struct http_decoder_table *table)
http_decoder_string_init(&table->method, MAX_METHOD_CACHE_SIZE);
http_decoder_string_init(&table->version, MAX_METHOD_CACHE_SIZE);
- for (size_t i = 0; i < table->header_size; i++) {
+ for (size_t i = 0; i < table->header_cnt; i++) {
header = &table->headers[i];
http_decoder_string_init(&header->key, MAX_HEADER_KEY_CACHE_SIZE);
http_decoder_string_init(&header->val, MAX_HEADER_VALUE_CACHE_SIZE);
@@ -72,8 +73,8 @@ struct http_decoder_table *http_decoder_table_new()
struct http_decoder_table *table = CALLOC(struct http_decoder_table, 1);
assert(table);
- table->header_size = MAX_HEADER_SIZE;
- table->headers = CALLOC(struct http_decoder_header, table->header_size);
+ table->header_cnt = INIT_HEADER_CNT;
+ table->headers = CALLOC(struct http_decoder_header, table->header_cnt);
http_decoder_table_init(table);
@@ -107,7 +108,7 @@ void http_decoder_table_free(struct http_decoder_table *table)
}
if (table->headers != NULL) {
- for (size_t i = 0; i < table->header_size; i++) {
+ for (size_t i = 0; i < table->header_cnt; i++) {
if (table->headers[i].key.cache.str != NULL) {
FREE(table->headers[i].key.cache.str);
}
@@ -148,12 +149,12 @@ http_decoder_table_state(struct http_decoder_table *table, enum http_item type)
state = http_decoder_string_state(&table->version);
break;
case HTTP_ITEM_HDRKEY:
- assert(table->header_index < table->header_size);
+ assert(table->header_index < table->header_cnt);
header = &table->headers[table->header_index];
state = http_decoder_string_state(&header->key);
break;
case HTTP_ITEM_HDRVAL:
- assert(table->header_index < table->header_size);
+ assert(table->header_index < table->header_cnt);
header = &table->headers[table->header_index];
state = http_decoder_string_state(&header->val);
break;
@@ -192,12 +193,12 @@ void http_decoder_table_refer(struct http_decoder_table *table, enum http_item t
http_decoder_string_refer(&table->version, at, len);
break;
case HTTP_ITEM_HDRKEY:
- assert(table->header_index < table->header_size);
+ assert(table->header_index < table->header_cnt);
header = &table->headers[table->header_index];
http_decoder_string_refer(&header->key, at, len);
break;
case HTTP_ITEM_HDRVAL:
- assert(table->header_index < table->header_size);
+ assert(table->header_index < table->header_cnt);
header = &table->headers[table->header_index];
http_decoder_string_refer(&header->val, at, len);
break;
@@ -233,12 +234,12 @@ void http_decoder_table_cache(struct http_decoder_table *table, enum http_item t
http_decoder_string_cache(&table->version);
break;
case HTTP_ITEM_HDRKEY:
- assert(table->header_index < table->header_size);
+ assert(table->header_index < table->header_cnt);
header = &table->headers[table->header_index];
http_decoder_string_cache(&header->key);
break;
case HTTP_ITEM_HDRVAL:
- assert(table->header_index < table->header_size);
+ assert(table->header_index < table->header_cnt);
header = &table->headers[table->header_index];
http_decoder_string_cache(&header->val);
break;
@@ -274,7 +275,7 @@ void http_decoder_table_commit(struct http_decoder_table *table, enum http_item
http_decoder_string_commit(&table->version);
break;
case HTTP_ITEM_HDRKEY:
- assert(table->header_index < table->header_size);
+ assert(table->header_index < table->header_cnt);
header = &table->headers[table->header_index];
http_decoder_string_commit(&header->key);
break;
@@ -282,13 +283,15 @@ void http_decoder_table_commit(struct http_decoder_table *table, enum http_item
header = &table->headers[table->header_index];
http_decoder_string_commit(&header->val);
// inc index
- if ((table->header_index + 1) >= table->header_size) {
+ if ((table->header_index + 1) >= table->header_cnt) {
table->headers = REALLOC(struct http_decoder_header, table->headers,
- table->header_size * 2);
- table->header_size *= 2;
- for (size_t i = table->header_index + 1; i < table->header_size; i++) {
+ table->header_cnt * 2);
+ table->header_cnt *= 2;
+ for (size_t i = table->header_index + 1; i < table->header_cnt; i++) {
header = &table->headers[i];
memset(header, 0, sizeof(struct http_decoder_header));
+ http_decoder_string_init(&header->key, MAX_HEADER_KEY_CACHE_SIZE);
+ http_decoder_string_init(&header->val, MAX_HEADER_VALUE_CACHE_SIZE);
}
}
table->header_index++;
@@ -375,7 +378,7 @@ void http_decoder_table_dump(struct http_decoder_table *table)
http_decoder_string_dump(&table->version, "version");
http_decoder_string_dump(&table->body, "body");
- for (size_t i = 0; i < table->header_size; i++) {
+ for (size_t i = 0; i < table->header_cnt; i++) {
struct http_decoder_header *header = &table->headers[i];
if (NULL == header) {
continue;
@@ -431,21 +434,6 @@ int http_decoder_table_get_body(struct http_decoder_table *table, struct hstring
return http_decoder_string_get(&table->body, out);
}
-int http_decoder_table_has_parsed_header(struct http_decoder_table *table)
-{
- if (NULL == table) {
- return 0;
- }
-
- struct http_decoder_header *tmp_header = &table->headers[table->header_iter];
- if (http_decoder_string_state(&tmp_header->key) == STRING_STATE_COMMIT &&
- http_decoder_string_state(&tmp_header->val) == STRING_STATE_COMMIT) {
- return 1;
- }
-
- return 0;
-}
-
int http_decoder_table_get_header(struct http_decoder_table *table, struct hstring *key,
struct http_header *hdr_array, size_t array_size)
{
@@ -454,7 +442,7 @@ int http_decoder_table_get_header(struct http_decoder_table *table, struct hstri
}
int header_cnt = 0;
- for (int i = 0; i < table->header_size && header_cnt < array_size; i++) {
+ for (size_t i = 0; i < table->header_cnt && header_cnt < array_size; i++) {
struct http_decoder_header *tmp_header = &table->headers[i];
if (tmp_header->key.commit.str_len != key->str_len) {
continue;
@@ -465,8 +453,8 @@ int http_decoder_table_get_header(struct http_decoder_table *table, struct hstri
struct hstring tmp_key;
http_decoder_string_get(&tmp_header->key, &tmp_key);
- if (tmp_key.str_len == key->str_len
- && (0 == strncasecmp(tmp_key.str, key->str, key->str_len))) {
+ if (tmp_key.str_len == key->str_len &&
+ (0 == strncasecmp(tmp_key.str, key->str, key->str_len))) {
http_decoder_string_get(&tmp_header->key, &hdr_array[header_cnt].key);
http_decoder_string_get(&tmp_header->val, &hdr_array[header_cnt].val);
header_cnt++;
@@ -484,7 +472,7 @@ int http_decoder_table_iter_header(struct http_decoder_table *table,
return -1;
}
- if (table->header_iter >= table->header_size) {
+ if (table->header_iter >= table->header_cnt) {
return 0;
}
@@ -508,4 +496,46 @@ int http_decoder_table_iter_header(struct http_decoder_table *table,
hdr->val.str_len = 0;
return 0;
+}
+
+int http_decoder_table_has_parsed_header(struct http_decoder_table *table)
+{
+ if (NULL == table || (table->header_iter == table->header_index)) {
+ return 0;
+ }
+
+ struct http_decoder_header *tmp_header = &table->headers[table->header_iter];
+ if (http_decoder_string_state(&tmp_header->key) == STRING_STATE_COMMIT &&
+ http_decoder_string_state(&tmp_header->val) == STRING_STATE_COMMIT) {
+ return 1;
+ }
+
+ return 0;
+}
+
+int http_decoder_table_header_complete(struct http_decoder_table *table)
+{
+ if (NULL == table) {
+ return -1;
+ }
+
+ return table->header_complete;
+}
+
+void http_decoder_table_set_header_complete(struct http_decoder_table *table)
+{
+ if (NULL == table) {
+ return;
+ }
+
+ table->header_complete = 1;
+}
+
+void http_decoder_table_reset_header_complete(struct http_decoder_table *table)
+{
+ if (NULL == table) {
+ return;
+ }
+
+ table->header_complete = 0;
} \ No newline at end of file
diff --git a/src/http_decoder/http_decoder_table.h b/src/http_decoder/http_decoder_table.h
index a600110..f3ed2d4 100644
--- a/src/http_decoder/http_decoder_table.h
+++ b/src/http_decoder/http_decoder_table.h
@@ -62,8 +62,6 @@ int http_decoder_table_get_version(struct http_decoder_table *table, struct hstr
int http_decoder_table_get_body(struct http_decoder_table *table, struct hstring *out);
-int http_decoder_table_has_parsed_header(struct http_decoder_table *table);
-
int http_decoder_table_get_header(struct http_decoder_table *table,
struct hstring *key,
struct http_header *hdr_array,
@@ -72,6 +70,27 @@ int http_decoder_table_get_header(struct http_decoder_table *table,
int http_decoder_table_iter_header(struct http_decoder_table *table,
struct http_header *hdr);
+/**
+ * @brief Is there a parsed header
+ *
+ * @retval yes(1) no(0)
+*/
+int http_decoder_table_has_parsed_header(struct http_decoder_table *table);
+
+/**
+ * @brief If headers have been parsed completely
+ *
+ * @retval yes(1) no(0)
+ */
+int http_decoder_table_header_complete(struct http_decoder_table *table);
+
+/**
+ * @brief set flag for headers parsed completely
+*/
+void http_decoder_table_set_header_complete(struct http_decoder_table *table);
+
+void http_decoder_table_reset_header_complete(struct http_decoder_table *table);
+
#ifdef __cplusplus
}
#endif
diff --git a/test/http_decoder/CMakeLists.txt b/test/http_decoder/CMakeLists.txt
index 8135961..b119876 100644
--- a/test/http_decoder/CMakeLists.txt
+++ b/test/http_decoder/CMakeLists.txt
@@ -79,8 +79,8 @@ add_test(NAME HTTP_NO_CONTENT_LENGTH_TEST COMMAND ${TEST_MAIN} ${CMAKE_CURRENT_S
add_test(NAME HTTP_POST_MULTIPART_FORM_DATA_TEST COMMAND ${TEST_MAIN} ${CMAKE_CURRENT_SOURCE_DIR}/test_result_json/http_post_multipart_form_data.json
-f "find ${CMAKE_CURRENT_SOURCE_DIR}/http_pcap/ -name http_post_multipart_form_data.pcap|sort -V" WORKING_DIRECTORY ${TEST_RUN_DIR})
-add_test(NAME HTTP_HEADERS_EXCEED_MAXIMUM_TEST COMMAND ${TEST_MAIN} ${CMAKE_CURRENT_SOURCE_DIR}/test_result_json/http_headers_exceed_maximum.json
- -f "find ${CMAKE_CURRENT_SOURCE_DIR}/http_pcap/ -name http_headers_exceed_maximum.pcap|sort -V" WORKING_DIRECTORY ${TEST_RUN_DIR})
+add_test(NAME HTTP_HEADERS_EXCEED_MAXIMUM_TEST COMMAND ${TEST_MAIN} ${CMAKE_CURRENT_SOURCE_DIR}/test_result_json/http_hdrs_exceed_maximum.json
+ -f "find ${CMAKE_CURRENT_SOURCE_DIR}/http_pcap/ -name http_hdrs_exceed_maximum.pcap|sort -V" WORKING_DIRECTORY ${TEST_RUN_DIR})
add_test(NAME HTTP_CONNECT_FLOOD_TEST COMMAND ${TEST_MAIN} ${CMAKE_CURRENT_SOURCE_DIR}/test_result_json/http_connect_flood.json
-f "find ${CMAKE_CURRENT_SOURCE_DIR}/http_pcap/ -name http_connect_flood.pcap|sort -V" WORKING_DIRECTORY ${TEST_RUN_DIR})
@@ -88,8 +88,8 @@ add_test(NAME HTTP_CONNECT_FLOOD_TEST COMMAND ${TEST_MAIN} ${CMAKE_CURRENT_SOURC
add_test(NAME HTTP_GET_MALFORMED_TEST COMMAND ${TEST_MAIN} ${CMAKE_CURRENT_SOURCE_DIR}/test_result_json/http_get_malformed.json
-f "find ${CMAKE_CURRENT_SOURCE_DIR}/http_pcap/ -name http_get_malformed.pcap|sort -V" WORKING_DIRECTORY ${TEST_RUN_DIR})
-add_test(NAME HTTP_HEADER_VALUE_EMPTY_TEST COMMAND ${TEST_MAIN} ${CMAKE_CURRENT_SOURCE_DIR}/test_result_json/http_header_value_empty.json
- -f "find ${CMAKE_CURRENT_SOURCE_DIR}/http_pcap/ -name http_header_value_empty.pcap|sort -V" WORKING_DIRECTORY ${TEST_RUN_DIR})
+add_test(NAME HTTP_HEADER_VALUE_EMPTY_TEST COMMAND ${TEST_MAIN} ${CMAKE_CURRENT_SOURCE_DIR}/test_result_json/http_hdr_value_empty.json
+ -f "find ${CMAKE_CURRENT_SOURCE_DIR}/http_pcap/ -name http_hdr_value_empty.pcap|sort -V" WORKING_DIRECTORY ${TEST_RUN_DIR})
add_test(NAME HTTP_UPGRADE_WEBSOCKET_TEST COMMAND ${TEST_MAIN} ${CMAKE_CURRENT_SOURCE_DIR}/test_result_json/http_upgrade_websocket.json
-f "find ${CMAKE_CURRENT_SOURCE_DIR}/http_pcap/ -name http_upgrade_websocket.pcap|sort -V" WORKING_DIRECTORY ${TEST_RUN_DIR})
@@ -106,10 +106,12 @@ add_test(NAME HTTP_GET_REQ_PIPELINE_TEST COMMAND ${TEST_MAIN} ${CMAKE_CURRENT_SO
add_test(NAME HTTP_TRANS_PIPELINE_TEST COMMAND ${TEST_MAIN} ${CMAKE_CURRENT_SOURCE_DIR}/test_result_json/http_trans_pipeline.json
-f "find ${CMAKE_CURRENT_SOURCE_DIR}/http_pcap/ -name http_trans_pipeline.pcap|sort -V" WORKING_DIRECTORY ${TEST_RUN_DIR})
-# add_test(NAME COREDUMP_TEST COMMAND ${TEST_MAIN} ${CMAKE_CURRENT_SOURCE_DIR}/test_result_json/coredump.json
-# -f "find ${CMAKE_CURRENT_SOURCE_DIR}/http_pcap/ -name coredump.pcap|sort -V" WORKING_DIRECTORY ${TEST_RUN_DIR})
+add_test(NAME HTTP_HEADER_TRUNCATED_IN_KV_TEST COMMAND ${TEST_MAIN} ${CMAKE_CURRENT_SOURCE_DIR}/test_result_json/http_hdr_truncated_in_kv.json
+ -f "find ${CMAKE_CURRENT_SOURCE_DIR}/http_pcap/ -name http_hdr_truncated_in_kv.pcap|sort -V" WORKING_DIRECTORY ${TEST_RUN_DIR})
+
+add_test(NAME HTTP_HEADER_TRUNCATED_AFTER_KV_TEST COMMAND ${TEST_MAIN} ${CMAKE_CURRENT_SOURCE_DIR}/test_result_json/http_hdr_truncated_after_kv.json
+ -f "find ${CMAKE_CURRENT_SOURCE_DIR}/http_pcap/ -name http_hdr_truncated_after_kv.pcap|sort -V" WORKING_DIRECTORY ${TEST_RUN_DIR})
-# set_tests_properties(COREDUMP_TEST PROPERTIES FIXTURES_REQUIRED TestFixture)
set_tests_properties(HTTP_GET_SINGLE_TRANS_TEST
HTTP_GET_MULTI_TRANS_TEST
HTTP_GET_LONG_COOKIE_TEST
@@ -134,4 +136,6 @@ set_tests_properties(HTTP_GET_SINGLE_TRANS_TEST
HTTP_UPGRADE_HTTP2_TEST
HTTP_GET_REQ_PIPELINE_TEST
HTTP_TRANS_PIPELINE_TEST
+ HTTP_HEADER_TRUNCATED_IN_KV_TEST
+ HTTP_HEADER_TRUNCATED_AFTER_KV_TEST
PROPERTIES FIXTURES_REQUIRED TestFixture) \ No newline at end of file
diff --git a/test/http_decoder/http_decoder_gtest.cpp b/test/http_decoder/http_decoder_gtest.cpp
index 554f109..21446ea 100644
--- a/test/http_decoder/http_decoder_gtest.cpp
+++ b/test/http_decoder/http_decoder_gtest.cpp
@@ -71,6 +71,7 @@ void output_http_header(struct http_header *header)
{
char tmp_key[MAX_KEY_STR_LEN] = {0};
char tmp_val[MAX_KEY_STR_LEN] = {0};
+
memcpy(tmp_key, header->key.str, header->key.str_len);
memcpy(tmp_val, header->val.str, header->val.str_len);
printf("<%s:%s>\n", tmp_key, tmp_val);
diff --git a/test/http_decoder/http_pcap/http_hdr_truncated_after_kv.pcap b/test/http_decoder/http_pcap/http_hdr_truncated_after_kv.pcap
new file mode 100644
index 0000000..de9f018
--- /dev/null
+++ b/test/http_decoder/http_pcap/http_hdr_truncated_after_kv.pcap
Binary files differ
diff --git a/test/http_decoder/http_pcap/http_hdr_truncated_in_kv.pcap b/test/http_decoder/http_pcap/http_hdr_truncated_in_kv.pcap
new file mode 100644
index 0000000..06eaae2
--- /dev/null
+++ b/test/http_decoder/http_pcap/http_hdr_truncated_in_kv.pcap
Binary files differ
diff --git a/test/http_decoder/http_pcap/http_header_value_empty.pcap b/test/http_decoder/http_pcap/http_hdr_value_empty.pcap
index 138f905..138f905 100644
--- a/test/http_decoder/http_pcap/http_header_value_empty.pcap
+++ b/test/http_decoder/http_pcap/http_hdr_value_empty.pcap
Binary files differ
diff --git a/test/http_decoder/http_pcap/http_headers_exceed_maximum.pcap b/test/http_decoder/http_pcap/http_hdrs_exceed_maximum.pcap
index 537bffa..537bffa 100644
--- a/test/http_decoder/http_pcap/http_headers_exceed_maximum.pcap
+++ b/test/http_decoder/http_pcap/http_hdrs_exceed_maximum.pcap
Binary files differ
diff --git a/test/http_decoder/test_result_json/http_get_long_cookie.json b/test/http_decoder/test_result_json/http_get_long_cookie.json
index 535aeef..e3daa11 100644
--- a/test/http_decoder/test_result_json/http_get_long_cookie.json
+++ b/test/http_decoder/test_result_json/http_get_long_cookie.json
@@ -17,7 +17,7 @@
},
{
"Tuple4": "202.127.156.91.27282>14.17.32.203.80",
- "Cookie": "flashuser=95621BA8CB862E09; piao_city=179; lv_irt_id=3628e1bbe25a6c941da9fac02ec2df8b; cm_cookie=V1,10017&-EP5mRruXhQarsCl5LD-2YzgjVTvyr2K&AQEBh7uoLMUB9lnaB5Tz9XdYnGIWflXmsDrU&150723&150723,10035&7t-tEmfJ076VAsM9&AQEBh7uoLMUB9lnc4tpW7vbazqdrRdBYOUCi&150724&150807,110054&ucO0Z0gctNn3&AQEBh7uoLMUB9llxMNl45F3RAIsKK0iMOJAG&150716&151008,10040&ACZ1r0A70NaEFcGT&AQEBh7uoLMUB9lmVgSoTwuuXZi896zSVsXIF&150818&151014,110015&1&AQEBh7uoLMUB9lkt2LUHO6ARwODHLI_Y51rj&150928&151103,10037&1433388364186289251984&AQEBh7uoLMUB9llIBencOqTAEh2aQ2SURSSQ&150909&151110,10011&jL40Z03uUFI0&AQEBh7uoLMUB9lkfw2sJVNx9g12Fzs12rPSN&150717&151125,10016&F64E6LFZs0W&AQEBh7uoLMUB9llE4yoPFNUykSj7WKaRK5lH&150805&151127,10019&WQAO-C1K9qI5OP8W_t2pSw&AQEBh7uoLMUB9llhpZE87GmOk3XGo_MJgV6K&150826&151130,10015&820490997316506147&AQEBh7uoLMUB9llXiynsGYRhMO3XuPnkuHUt&150715&151201,10012&x3X1yY6b&AQEBh7uoLMUB9ll9mraU_LJCDBYsE0Sbk_V9&151202&151202,110065&ucO0Z0gctNn3&AQEBh7uoLMUB9lkJcK3KDBQTKF0YfZ5wB7r5&150716&151203,110066&jL40Z03uUFI0&AQEBh7uoLMUB9lnyvKSYhcJ",
+ "Cookie": "flashuser=95621BA8CB862E09; piao_city=179; lv_irt_id=3628e1bbe25a6c941da9fac02ec2df8b; cm_cookie=V1,10017&-EP5mRruXhQarsCl5LD-2YzgjVTvyr2K&AQEBh7uoLMUB9lnaB5Tz9XdYnGIWflXmsDrU&150723&150723,10035&7t-tEmfJ076VAsM9&AQEBh7uoLMUB9lnc4tpW7vbazqdrRdBYOUCi&150724&150807,110054&ucO0Z0gctNn3&AQEBh7uoLMUB9llxMNl45F3RAIsKK0iMOJAG&150716&151008,10040&ACZ1r0A70NaEFcGT&AQEBh7uoLMUB9lmVgSoTwuuXZi896zSVsXIF&150818&151014,110015&1&AQEBh7uoLMUB9lkt2LUHO6ARwODHLI_Y51rj&150928&151103,10037&1433388364186289251984&AQEBh7uoLMUB9llIBencOqTAEh2aQ2SURSSQ&150909&151110,10011&jL40Z03uUFI0&AQEBh7uoLMUB9lkfw2sJVNx9g12Fzs12rPSN&150717&151125,10016&F64E6LFZs0W&AQEBh7uoLMUB9llE4yoPFNUykSj7WKaRK5lH&150805&151127,10019&WQAO-C1K9qI5OP8W_t2pSw&AQEBh7uoLMUB9llhpZE87GmOk3XGo_MJgV6K&150826&151130,10015&820490997316506147&AQEBh7uoLMUB9llXiynsGYRhMO3XuPnkuHUt&150715&151201,10012&x3X1yY6b&AQEBh7uoLMUB9ll9mraU_LJCDBYsE0Sbk_V9&151202&151202,110065&ucO0Z0gctNn3&AQEBh7uoLMUB9lkJcK3KDBQTKF0YfZ5wB7r5&150716&151203,110066&jL40Z03uUFI0&AQEBh7uoLMUB9lnyvKSYhcJD1X_rSs_DLVWx&150916&151221,10013&ePyYB2MSKa0TCbebpxKjmU&AQEBh7uoLMUB9ln6_6nGNidqml4nFKXhtE58&151221&151221,110061&d9cfa518d82abee&AQEBh7uoLMUB9llj2NYzmCjxaLWXALTcAGIH&150818&151224,10038&CAESEPZbUhToZJ39CS9MlgXGUSQ&AQEBh7uoLMUB9lmhnrDM5lIGtl6vc1NxMD6F&151110&151224,10077&820490997316506147&AQEBh7uoLMUB9lmkUdUe2xSHGkvM0IRu9Jt9&151214&151228,10008&0yPSvk92ie1nhB8wTUlTq&AQEBh7uoLMUB9lnL5ZCYvXJNvlv53G0CKEkj&150817&151228,10045&0&AQEBh7uoLMUB9llW3v1Vh7W72lv14RlAjUXn&151023&151228,110064&jL40Z03uUFI0&AQEBh7uoLMUB9lkBYuCUDLDrOcGURJcilogv&151016&160104,110069&26d49ecc&AQEBh7uoLMUB9lmlBLTxQY9BkCmimkMFqTo5&151204&160105,10079&B8hGto5y1e3uDXwCMsIun3rjk--dVCof&AQEBh7uoLMUB9llxnFrhDtdNMjZ1hs1il5J4&151214&160105; LHTturn=24; ptisp=ctc; RK=hRWyd82Gd8; pgv_pvi=7567882240; image_md5=bd21d5fb2f401b37cf3a02724dc06545; LTPturn=27; pt2gguin=o0583115900; uin=o0583115900; skey=@Mp9aCinaO; ptcz=10d4b1b7bde835d64663338a8008fd4f81e2c6b5f0ba81a90da3627ee617c7ee; pgv_info=ssid=s4768939310; pgv_pvid=6872592818; o_cookie=583115900; lv_play_index_textAd=47; lv_play_indexl.=32; dc_vplaying=1; LKBturn=29; Lturn=29; adid=583115900; appuser=95621BA8CB862E09; o_minduid=phhdxyNLkxBWMa74VTm5zU4y5EbUv5vR; appuser_95621BA8CB862E09_0=2b7gwp=1453219199_6&2btemv=1455551999_1&2c8311=1453305599_3&2cfx4j=1453651199_3&2cfx9l=1453651199_1&2d49y9=1453823999_2&2d67kl=1454255999_2&2d69mf=1454255999_3&2dxv8l=1455465599_6&2dzhfl=1452614399_1&f_pogvwp=1452095999_1&f_pogvwv=1452095999_2&f_pogw0m=1452095999_1&fd_15bm2t7=1452095999_1&fd_1h2pbsd=1452095999_2&fd_1k6so62=1452095999_1&fd_rhmjmq=1452095999_2&m_roiw0t=1452095999_3&m_xty8wl=1452095999_1&pogree=1452095999_2; TX.boid=100655474=1452072582_1&701041365=1452072585_1; appuser_95621BA8CB862E09_effect_0=fd_1ez2rcc=1452095999_1&fd_qdh7zw=1452095999_1&fd_ul215j=1452095999_1; psessionid=ca7f9c5b_1452071982_583115900_30754; psessiontime=1452071990",
"name": "HTTP_DECODER_RESULT_2"
}
] \ No newline at end of file
diff --git a/test/http_decoder/test_result_json/http_hdr_truncated_after_kv.json b/test/http_decoder/test_result_json/http_hdr_truncated_after_kv.json
new file mode 100644
index 0000000..b09aa3b
--- /dev/null
+++ b/test/http_decoder/test_result_json/http_hdr_truncated_after_kv.json
@@ -0,0 +1,331 @@
+[
+ {
+ "Tuple4": "196.188.112.76.51494>23.246.50.149.80",
+ "method": "GET",
+ "uri": "/dnm/api/v6/Da_vleYcahiCE7JMYt8LJRyoenc/AAAABQSwLpJi-yDFZ7k9eqarY3x3-b99vNxxOt5xDeIOapZB6Y5QXPSa54b7cbWYTXYdFimDKCeJ4s7ngqpqByvtt0aLh85nSucLTcR3-OKleuNwVltHUscQhSgVfHc.jpg?r=392",
+ "req_version": "1.1",
+ "major_version": 1,
+ "minor_version": 1,
+ "Accept": "image/*",
+ "Accept-Encoding": "deflate, gzip",
+ "Connection": "Keep-Alive",
+ "Host": "occ-0-778-360.1.nflxso.net",
+ "Language": "en-ET,en",
+ "Referer": "https://secure.netflix.com/us/tvui/ql/patch/20211109_18752/2/release/darwinBootstrap.js?getMainUrlFromCodex=true&taskDefaultTimeoutV2=120000&bootloader_trace=apiusernotnull__false&nq=true&nq_control_tag=tvui-main&startup_key=e38d3c70814421931b0189d91d872546326f05d8f470150d07340df9e9d72275&device_type=TCL-TVS88L&e=TCL-TVS88L0000000000000000342914&env=prod&fromNM=true&nm_prefetch=true&nrdapp_version=2015.1.1&plain=true&dh=720&dw=1280&dar=16_9&reg=undefined&authType=login&authclid=845becf0-992c-46f7-a938-1bc22b097c58&q=source_type%3D1%26additionalDataUrl%3Dhttp%253A%252F%252Flocalhost%253A56789%252Fapps%252FNetflix%252Fdial_data%26source_type_payload%3D",
+ "User-Agent": "Gibbon/2015.1.1/2015.1.1: Netflix/2015.1.1 (DEVTYPE=TCL-TVS88L; CERTVER=1)",
+ "name": "HTTP_DECODER_RESULT_1"
+ },
+ {
+ "Tuple4": "196.188.112.76.51494>23.246.50.149.80",
+ "X-Gibbon-Cache-Control": "max-age=2592000, priority=4, key=/dnm/api/v6/Da_vleYcahiCE7JMYt8LJRyoenc/AAAABQSwLpJi-yDFZ7k9eqarY3x3-b99vNxxOt5xDeIOapZB6Y5QXPSa54b7cbWYTXYdFimDKCeJ4s7ngqpqByvtt0aLh85nSucLTcR3-OKleuNwVltHUscQhSgVfHc.jpg?r=392",
+ "name": "HTTP_DECODER_RESULT_2"
+ },
+ {
+ "Tuple4": "196.188.112.76.51494>23.246.50.149.80",
+ "method": "GET",
+ "uri": "/dnm/api/v6/Da_vleYcahiCE7JMYt8LJRyoenc/AAAABUWN8S1k3yM2coX2bwxbP699Jdr0BUqBRzIfiAJXKC5Ywt7DXqJOCjrBSYs36Tny8277IXm2BF_cgTmY18NJlocglKjhaoJhFeGoIg1cwntFduyxyRPP2EJQL5Y.jpg?r=e0e",
+ "req_version": "1.1",
+ "major_version": 1,
+ "minor_version": 1,
+ "Accept": "image/*",
+ "Accept-Encoding": "deflate, gzip",
+ "Connection": "Keep-Alive",
+ "Host": "occ-0-778-360.1.nflxso.net",
+ "Language": "en-ET,en",
+ "Referer": "https://secure.netflix.com/us/tvui/ql/patch/20211109_18752/2/release/darwinBootstrap.js?getMainUrlFromCodex=true&taskDefaultTimeoutV2=120000&bootloader_trace=apiusernotnull__false&nq=true&nq_control_tag=tvui-main&startup_key=e38d3c70814421931b0189d91d872546326f05d8f470150d07340df9e9d72275&device_type=TCL-TVS88L&e=TCL-TVS88L0000000000000000342914&env=prod&fromNM=true&nm_prefetch=true&nrdapp_version=2015.1.1&plain=true&dh=720&dw=1280&dar=16_9&reg=undefined&authType=login&authclid=845becf0-992c-46f7-a938-1bc22b097c58&q=source_type%3D1%26additionalDataUrl%3Dhttp%253A%252F%252Flocalhost%253A56789%252Fapps%252FNetflix%252Fdial_data%26source_type_payload%3D",
+ "User-Agent": "Gibbon/2015.1.1/2015.1.1: Netflix/2015.1.1 (DEVTYPE=TCL-TVS88L; CERTVER=1)",
+ "name": "HTTP_DECODER_RESULT_3"
+ },
+ {
+ "Tuple4": "196.188.112.76.51494>23.246.50.149.80",
+ "res_version": "1.1",
+ "res_status": "OK",
+ "major_version": 1,
+ "minor_version": 1,
+ "status_code": 200,
+ "Server": "nginx",
+ "Date": "Sat, 13 Nov 2021 14:15:58 GMT",
+ "Content-Type": "image/jpeg",
+ "Content-Length": "18377",
+ "Connection": "keep-alive",
+ "Cache-Control": "max-age=2592000",
+ "Last-Modified": "Wed, 10 Nov 2021 08:00:14 GMT",
+ "ETag": "\"c289a42885b30107ad119e2a6e405e4d\"",
+ "name": "HTTP_DECODER_RESULT_4"
+ },
+ {
+ "Tuple4": "196.188.112.76.51494>23.246.50.149.80",
+ "X-Gibbon-Cache-Control": "max-age=2592000, priority=4, key=/dnm/api/v6/Da_vleYcahiCE7JMYt8LJRyoenc/AAAABUWN8S1k3yM2coX2bwxbP699Jdr0BUqBRzIfiAJXKC5Ywt7DXqJOCjrBSYs36Tny8277IXm2BF_cgTmY18NJlocglKjhaoJhFeGoIg1cwntFduyxyRPP2EJQL5Y.jpg?r=e0e",
+ "name": "HTTP_DECODER_RESULT_5"
+ },
+ {
+ "Tuple4": "196.188.112.76.51494>23.246.50.149.80",
+ "method": "GET",
+ "uri": "/dnm/api/v6/Da_vleYcahiCE7JMYt8LJRyoenc/AAAABR1YQS01SaHGzoxgWBJF1Gas0Gv9_DPebb4irdCTRjcQ_FUaVbXFTTrJ68_bvJds1sb28VMq22Qn3oSSKKJ7DdLN8ybgkJooYlCD3gAntrqgIFugqv5Z3kV8rRE.jpg?r=ec7",
+ "req_version": "1.1",
+ "major_version": 1,
+ "minor_version": 1,
+ "Accept": "image/*",
+ "Accept-Encoding": "deflate, gzip",
+ "Connection": "Keep-Alive",
+ "Host": "occ-0-778-360.1.nflxso.net",
+ "Language": "en-ET,en",
+ "Referer": "https://secure.netflix.com/us/tvui/ql/patch/20211109_18752/2/release/darwinBootstrap.js?getMainUrlFromCodex=true&taskDefaultTimeoutV2=120000&bootloader_trace=apiusernotnull__false&nq=true&nq_control_tag=tvui-main&startup_key=e38d3c70814421931b0189d91d872546326f05d8f470150d07340df9e9d72275&device_type=TCL-TVS88L&e=TCL-TVS88L0000000000000000342914&env=prod&fromNM=true&nm_prefetch=true&nrdapp_version=2015.1.1&plain=true&dh=720&dw=1280&dar=16_9&reg=undefined&authType=login&authclid=845becf0-992c-46f7-a938-1bc22b097c58&q=source_type%3D1%26additionalDataUrl%3Dhttp%253A%252F%252Flocalhost%253A56789%252Fapps%252FNetflix%252Fdial_data%26source_type_payload%3D",
+ "name": "HTTP_DECODER_RESULT_6"
+ },
+ {
+ "Tuple4": "196.188.112.76.51494>23.246.50.149.80",
+ "User-Agent": "Gibbon/2015.1.1/2015.1.1: Netflix/2015.1.1 (DEVTYPE=TCL-TVS88L; CERTVER=1)",
+ "X-Gibbon-Cache-Control": "max-age=2592000, priority=4, key=/dnm/api/v6/Da_vleYcahiCE7JMYt8LJRyoenc/AAAABR1YQS01SaHGzoxgWBJF1Gas0Gv9_DPebb4irdCTRjcQ_FUaVbXFTTrJ68_bvJds1sb28VMq22Qn3oSSKKJ7DdLN8ybgkJooYlCD3gAntrqgIFugqv5Z3kV8rRE.jpg?r=ec7",
+ "name": "HTTP_DECODER_RESULT_7"
+ },
+ {
+ "Tuple4": "196.188.112.76.51494>23.246.50.149.80",
+ "method": "GET",
+ "uri": "/dnm/api/v6/Da_vleYcahiCE7JMYt8LJRyoenc/AAAABYo5IGwDn1LaWbeaa7amS0JhH3bU5MEVlcBsC4OK0mGbea97_xoi8EbqJt8_Zp0bMuuKPE80qUUjb4wq5po_lBtulA.jpg?r=c83",
+ "req_version": "1.1",
+ "major_version": 1,
+ "minor_version": 1,
+ "Accept": "image/*",
+ "Accept-Encoding": "deflate, gzip",
+ "Connection": "Keep-Alive",
+ "Host": "occ-0-778-360.1.nflxso.net",
+ "Language": "en-ET,en",
+ "name": "HTTP_DECODER_RESULT_8"
+ },
+ {
+ "Tuple4": "196.188.112.76.51494>23.246.50.149.80",
+ "res_version": "1.1",
+ "res_status": "OK",
+ "major_version": 1,
+ "minor_version": 1,
+ "status_code": 200,
+ "Server": "nginx",
+ "Date": "Sat, 13 Nov 2021 14:15:58 GMT",
+ "Content-Type": "image/jpeg",
+ "Content-Length": "13488",
+ "Connection": "keep-alive",
+ "Cache-Control": "max-age=2592000",
+ "Last-Modified": "Mon, 08 Nov 2021 19:50:54 GMT",
+ "ETag": "\"35d56b6a0ef3b5857013f44620bd8888\"",
+ "name": "HTTP_DECODER_RESULT_9"
+ },
+ {
+ "Tuple4": "196.188.112.76.51494>23.246.50.149.80",
+ "Referer": "https://secure.netflix.com/us/tvui/ql/patch/20211109_18752/2/release/darwinBootstrap.js?getMainUrlFromCodex=true&taskDefaultTimeoutV2=120000&bootloader_trace=apiusernotnull__false&nq=true&nq_control_tag=tvui-main&startup_key=e38d3c70814421931b0189d91d872546326f05d8f470150d07340df9e9d72275&device_type=TCL-TVS88L&e=TCL-TVS88L0000000000000000342914&env=prod&fromNM=true&nm_prefetch=true&nrdapp_version=2015.1.1&plain=true&dh=720&dw=1280&dar=16_9&reg=undefined&authType=login&authclid=845becf0-992c-46f7-a938-1bc22b097c58&q=source_type%3D1%26additionalDataUrl%3Dhttp%253A%252F%252Flocalhost%253A56789%252Fapps%252FNetflix%252Fdial_data%26source_type_payload%3D",
+ "User-Agent": "Gibbon/2015.1.1/2015.1.1: Netflix/2015.1.1 (DEVTYPE=TCL-TVS88L; CERTVER=1)",
+ "X-Gibbon-Cache-Control": "max-age=2592000, priority=4, key=/dnm/api/v6/Da_vleYcahiCE7JMYt8LJRyoenc/AAAABYo5IGwDn1LaWbeaa7amS0JhH3bU5MEVlcBsC4OK0mGbea97_xoi8EbqJt8_Zp0bMuuKPE80qUUjb4wq5po_lBtulA.jpg?r=c83",
+ "name": "HTTP_DECODER_RESULT_10"
+ },
+ {
+ "Tuple4": "196.188.112.76.51494>23.246.50.149.80",
+ "method": "GET",
+ "uri": "/dnm/api/v6/Da_vleYcahiCE7JMYt8LJRyoenc/AAAABaYF3Rmi954cg6Afu9jOtirnvF3iIMHPZCCnP34eDeYQXfRGG9Vg0qgn7hHpMVV4jOr8OZmcD2Nb7MhQv6gl-fNmVQ.jpg?r=257",
+ "req_version": "1.1",
+ "major_version": 1,
+ "minor_version": 1,
+ "Accept": "image/*",
+ "Accept-Encoding": "deflate, gzip",
+ "Connection": "Keep-Alive",
+ "Host": "occ-0-778-360.1.nflxso.net",
+ "Language": "en-ET,en",
+ "name": "HTTP_DECODER_RESULT_11"
+ },
+ {
+ "Tuple4": "196.188.112.76.51494>23.246.50.149.80",
+ "Referer": "https://secure.netflix.com/us/tvui/ql/patch/20211109_18752/2/release/darwinBootstrap.js?getMainUrlFromCodex=true&taskDefaultTimeoutV2=120000&bootloader_trace=apiusernotnull__false&nq=true&nq_control_tag=tvui-main&startup_key=e38d3c70814421931b0189d91d872546326f05d8f470150d07340df9e9d72275&device_type=TCL-TVS88L&e=TCL-TVS88L0000000000000000342914&env=prod&fromNM=true&nm_prefetch=true&nrdapp_version=2015.1.1&plain=true&dh=720&dw=1280&dar=16_9&reg=undefined&authType=login&authclid=845becf0-992c-46f7-a938-1bc22b097c58&q=source_type%3D1%26additionalDataUrl%3Dhttp%253A%252F%252Flocalhost%253A56789%252Fapps%252FNetflix%252Fdial_data%26source_type_payload%3D",
+ "User-Agent": "Gibbon/2015.1.1/2015.1.1: Netflix/2015.1.1 (DEVTYPE=TCL-TVS88L; CERTVER=1)",
+ "X-Gibbon-Cache-Control": "max-age=2592000, priority=4, key=/dnm/api/v6/Da_vleYcahiCE7JMYt8LJRyoenc/AAAABaYF3Rmi954cg6Afu9jOtirnvF3iIMHPZCCnP34eDeYQXfRGG9Vg0qgn7hHpMVV4jOr8OZmcD2Nb7MhQv6gl-fNmVQ.jpg?r=257",
+ "name": "HTTP_DECODER_RESULT_12"
+ },
+ {
+ "Tuple4": "196.188.112.76.51494>23.246.50.149.80",
+ "method": "GET",
+ "uri": "/dnm/api/v6/Da_vleYcahiCE7JMYt8LJRyoenc/AAAABfC-ByjFJSfWZf7MFtjVl3ONnaQ69824xWP1l-cpAFGgAfaNFk4XR9uoHNWwnbG8N2UVDctVKz0a4Uyv0mEnC2kI9Q.jpg?r=532",
+ "req_version": "1.1",
+ "major_version": 1,
+ "minor_version": 1,
+ "Accept": "image/*",
+ "Accept-Encoding": "deflate, gzip",
+ "Connection": "Keep-Alive",
+ "Host": "occ-0-778-360.1.nflxso.net",
+ "Language": "en-ET,en",
+ "name": "HTTP_DECODER_RESULT_13"
+ },
+ {
+ "Tuple4": "196.188.112.76.51494>23.246.50.149.80",
+ "Referer": "https://secure.netflix.com/us/tvui/ql/patch/20211109_18752/2/release/darwinBootstrap.js?getMainUrlFromCodex=true&taskDefaultTimeoutV2=120000&bootloader_trace=apiusernotnull__false&nq=true&nq_control_tag=tvui-main&startup_key=e38d3c70814421931b0189d91d872546326f05d8f470150d07340df9e9d72275&device_type=TCL-TVS88L&e=TCL-TVS88L0000000000000000342914&env=prod&fromNM=true&nm_prefetch=true&nrdapp_version=2015.1.1&plain=true&dh=720&dw=1280&dar=16_9&reg=undefined&authType=login&authclid=845becf0-992c-46f7-a938-1bc22b097c58&q=source_type%3D1%26additionalDataUrl%3Dhttp%253A%252F%252Flocalhost%253A56789%252Fapps%252FNetflix%252Fdial_data%26source_type_payload%3D",
+ "User-Agent": "Gibbon/2015.1.1/2015.1.1: Netflix/2015.1.1 (DEVTYPE=TCL-TVS88L; CERTVER=1)",
+ "X-Gibbon-Cache-Control": "max-age=2592000, priority=4, key=/dnm/api/v6/Da_vleYcahiCE7JMYt8LJRyoenc/AAAABfC-ByjFJSfWZf7MFtjVl3ONnaQ69824xWP1l-cpAFGgAfaNFk4XR9uoHNWwnbG8N2UVDctVKz0a4Uyv0mEnC2kI9Q.jpg?r=532",
+ "name": "HTTP_DECODER_RESULT_14"
+ },
+ {
+ "Tuple4": "196.188.112.76.51494>23.246.50.149.80",
+ "method": "GET",
+ "uri": "/dnm/api/v6/Da_vleYcahiCE7JMYt8LJRyoenc/AAAABSyGFXaB0IqQ6VR92uKMi38mNtoz7eeWxDziAf9VYKfauhh5Qo7FnnCRb31ff6Ez9yTXsqRszsGuz0GA9FVDf_NLn-9F60IcUHm59J73eYX6BD0h4wLLK0Da6YM.jpg?r=aaa",
+ "req_version": "1.1",
+ "major_version": 1,
+ "minor_version": 1,
+ "Accept": "image/*",
+ "Accept-Encoding": "deflate, gzip",
+ "Connection": "Keep-Alive",
+ "Host": "occ-0-778-360.1.nflxso.net",
+ "Language": "en-ET,en",
+ "name": "HTTP_DECODER_RESULT_15"
+ },
+ {
+ "Tuple4": "196.188.112.76.51494>23.246.50.149.80",
+ "Referer": "https://secure.netflix.com/us/tvui/ql/patch/20211109_18752/2/release/darwinBootstrap.js?getMainUrlFromCodex=true&taskDefaultTimeoutV2=120000&bootloader_trace=apiusernotnull__false&nq=true&nq_control_tag=tvui-main&startup_key=e38d3c70814421931b0189d91d872546326f05d8f470150d07340df9e9d72275&device_type=TCL-TVS88L&e=TCL-TVS88L0000000000000000342914&env=prod&fromNM=true&nm_prefetch=true&nrdapp_version=2015.1.1&plain=true&dh=720&dw=1280&dar=16_9&reg=undefined&authType=login&authclid=845becf0-992c-46f7-a938-1bc22b097c58&q=source_type%3D1%26additionalDataUrl%3Dhttp%253A%252F%252Flocalhost%253A56789%252Fapps%252FNetflix%252Fdial_data%26source_type_payload%3D",
+ "User-Agent": "Gibbon/2015.1.1/2015.1.1: Netflix/2015.1.1 (DEVTYPE=TCL-TVS88L; CERTVER=1)",
+ "X-Gibbon-Cache-Control": "max-age=2592000, priority=4, key=/dnm/api/v6/Da_vleYcahiCE7JMYt8LJRyoenc/AAAABSyGFXaB0IqQ6VR92uKMi38mNtoz7eeWxDziAf9VYKfauhh5Qo7FnnCRb31ff6Ez9yTXsqRszsGuz0GA9FVDf_NLn-9F60IcUHm59J73eYX6BD0h4wLLK0Da6YM.jpg?r=aaa",
+ "name": "HTTP_DECODER_RESULT_16"
+ },
+ {
+ "Tuple4": "196.188.112.76.51494>23.246.50.149.80",
+ "method": "GET",
+ "uri": "/dnm/api/v6/Da_vleYcahiCE7JMYt8LJRyoenc/AAAABZbHXQr7bRUpSQ2vQe8F8p3xODTJjUbSjEcLgQrFVyGsPgQT1GVhqGWFetJhebcGrVeZGOTmQ3qvHTe9eBRJdjFsVg.jpg?r=723",
+ "req_version": "1.1",
+ "major_version": 1,
+ "minor_version": 1,
+ "Accept": "image/*",
+ "Accept-Encoding": "deflate, gzip",
+ "Connection": "Keep-Alive",
+ "Host": "occ-0-778-360.1.nflxso.net",
+ "Language": "en-ET,en",
+ "name": "HTTP_DECODER_RESULT_17"
+ },
+ {
+ "Tuple4": "196.188.112.76.51494>23.246.50.149.80",
+ "Referer": "https://secure.netflix.com/us/tvui/ql/patch/20211109_18752/2/release/darwinBootstrap.js?getMainUrlFromCodex=true&taskDefaultTimeoutV2=120000&bootloader_trace=apiusernotnull__false&nq=true&nq_control_tag=tvui-main&startup_key=e38d3c70814421931b0189d91d872546326f05d8f470150d07340df9e9d72275&device_type=TCL-TVS88L&e=TCL-TVS88L0000000000000000342914&env=prod&fromNM=true&nm_prefetch=true&nrdapp_version=2015.1.1&plain=true&dh=720&dw=1280&dar=16_9&reg=undefined&authType=login&authclid=845becf0-992c-46f7-a938-1bc22b097c58&q=source_type%3D1%26additionalDataUrl%3Dhttp%253A%252F%252Flocalhost%253A56789%252Fapps%252FNetflix%252Fdial_data%26source_type_payload%3D",
+ "User-Agent": "Gibbon/2015.1.1/2015.1.1: Netflix/2015.1.1 (DEVTYPE=TCL-TVS88L; CERTVER=1)",
+ "X-Gibbon-Cache-Control": "max-age=2592000, priority=4, key=/dnm/api/v6/Da_vleYcahiCE7JMYt8LJRyoenc/AAAABZbHXQr7bRUpSQ2vQe8F8p3xODTJjUbSjEcLgQrFVyGsPgQT1GVhqGWFetJhebcGrVeZGOTmQ3qvHTe9eBRJdjFsVg.jpg?r=723",
+ "name": "HTTP_DECODER_RESULT_18"
+ },
+ {
+ "Tuple4": "196.188.112.76.51494>23.246.50.149.80",
+ "method": "GET",
+ "uri": "/dnm/api/v6/Da_vleYcahiCE7JMYt8LJRyoenc/AAAABSFXjTUaVrddq_nehO4yuLziSjuekxJuv3oEsyUpmt3oK3InJcXjtZUHrBBuu0EP05WRC8wFVe78VtxtW_ZuZQ65MIcApb0oZF4JoFlHHnv363RbgJn898Q4tQc.jpg?r=590",
+ "req_version": "1.1",
+ "major_version": 1,
+ "minor_version": 1,
+ "Accept": "image/*",
+ "Accept-Encoding": "deflate, gzip",
+ "Connection": "Keep-Alive",
+ "Host": "occ-0-778-360.1.nflxso.net",
+ "Language": "en-ET,en",
+ "Referer": "https://secure.netflix.com/us/tvui/ql/patch/20211109_18752/2/release/darwinBootstrap.js?getMainUrlFromCodex=true&taskDefaultTimeoutV2=120000&bootloader_trace=apiusernotnull__false&nq=true&nq_control_tag=tvui-main&startup_key=e38d3c70814421931b0189d91d872546326f05d8f470150d07340df9e9d72275&device_type=TCL-TVS88L&e=TCL-TVS88L0000000000000000342914&env=prod&fromNM=true&nm_prefetch=true&nrdapp_version=2015.1.1&plain=true&dh=720&dw=1280&dar=16_9&reg=undefined&authType=login&authclid=845becf0-992c-46f7-a938-1bc22b097c58&q=source_type%3D1%26additionalDataUrl%3Dhttp%253A%252F%252Flocalhost%253A56789%252Fapps%252FNetflix%252Fdial_data%26source_type_payload%3D",
+ "User-Agent": "Gibbon/2015.1.1/2015.1.1: Netflix/2015.1.1 (DEVTYPE=TCL-TVS88L; CERTVER=1)",
+ "name": "HTTP_DECODER_RESULT_19"
+ },
+ {
+ "Tuple4": "196.188.112.76.51494>23.246.50.149.80",
+ "res_version": "1.1",
+ "res_status": "OK",
+ "major_version": 1,
+ "minor_version": 1,
+ "status_code": 200,
+ "Server": "nginx",
+ "Date": "Sat, 13 Nov 2021 14:15:58 GMT",
+ "Content-Type": "image/jpeg",
+ "Content-Length": "14129",
+ "Connection": "keep-alive",
+ "Cache-Control": "max-age=2592000",
+ "Last-Modified": "Tue, 26 Oct 2021 15:12:58 GMT",
+ "ETag": "\"bb83961ad5fe366dcbb5240ead69f650\"",
+ "name": "HTTP_DECODER_RESULT_20"
+ },
+ {
+ "Tuple4": "196.188.112.76.51494>23.246.50.149.80",
+ "X-Gibbon-Cache-Control": "max-age=2592000, priority=4, key=/dnm/api/v6/Da_vleYcahiCE7JMYt8LJRyoenc/AAAABSFXjTUaVrddq_nehO4yuLziSjuekxJuv3oEsyUpmt3oK3InJcXjtZUHrBBuu0EP05WRC8wFVe78VtxtW_ZuZQ65MIcApb0oZF4JoFlHHnv363RbgJn898Q4tQc.jpg?r=590",
+ "name": "HTTP_DECODER_RESULT_21"
+ },
+ {
+ "Tuple4": "196.188.112.76.51494>23.246.50.149.80",
+ "res_version": "1.1",
+ "res_status": "OK",
+ "major_version": 1,
+ "minor_version": 1,
+ "status_code": 200,
+ "Server": "nginx",
+ "Date": "Sat, 13 Nov 2021 14:15:58 GMT",
+ "Content-Type": "image/jpeg",
+ "Content-Length": "11493",
+ "Connection": "keep-alive",
+ "Cache-Control": "max-age=2592000",
+ "Last-Modified": "Thu, 04 Nov 2021 20:44:22 GMT",
+ "ETag": "\"c5be6a7137482da270bb2adc8d44a28d\"",
+ "name": "HTTP_DECODER_RESULT_22"
+ },
+ {
+ "Tuple4": "196.188.112.76.51494>23.246.50.149.80",
+ "res_version": "1.1",
+ "res_status": "OK",
+ "major_version": 1,
+ "minor_version": 1,
+ "status_code": 200,
+ "Server": "nginx",
+ "Date": "Sat, 13 Nov 2021 14:15:58 GMT",
+ "Content-Type": "image/jpeg",
+ "Content-Length": "14219",
+ "Connection": "keep-alive",
+ "Cache-Control": "max-age=2592000",
+ "Last-Modified": "Sat, 25 Sep 2021 05:02:49 GMT",
+ "ETag": "\"61bec96775876749bb57139f86f6b0ca\"",
+ "name": "HTTP_DECODER_RESULT_23"
+ },
+ {
+ "Tuple4": "196.188.112.76.51494>23.246.50.149.80",
+ "res_version": "1.1",
+ "res_status": "OK",
+ "major_version": 1,
+ "minor_version": 1,
+ "status_code": 200,
+ "Server": "nginx",
+ "Date": "Sat, 13 Nov 2021 14:15:58 GMT",
+ "Content-Type": "image/jpeg",
+ "Content-Length": "21967",
+ "Connection": "keep-alive",
+ "Cache-Control": "max-age=2592000",
+ "Last-Modified": "Fri, 02 Jul 2021 10:15:04 GMT",
+ "ETag": "\"841065529f1e89eabd0ef235a3d3291c\"",
+ "name": "HTTP_DECODER_RESULT_24"
+ },
+ {
+ "Tuple4": "196.188.112.76.51494>23.246.50.149.80",
+ "res_version": "1.1",
+ "res_status": "OK",
+ "major_version": 1,
+ "minor_version": 1,
+ "status_code": 200,
+ "Server": "nginx",
+ "Date": "Sat, 13 Nov 2021 14:15:58 GMT",
+ "Content-Type": "image/jpeg",
+ "Content-Length": "21670",
+ "Connection": "keep-alive",
+ "Cache-Control": "max-age=2592000",
+ "Last-Modified": "Tue, 19 Oct 2021 14:00:02 GMT",
+ "ETag": "\"21d4b2c21a3a2f26ba665670e8513940\"",
+ "name": "HTTP_DECODER_RESULT_25"
+ },
+ {
+ "Tuple4": "196.188.112.76.51494>23.246.50.149.80",
+ "res_version": "1.1",
+ "res_status": "OK",
+ "major_version": 1,
+ "minor_version": 1,
+ "status_code": 200,
+ "Server": "nginx",
+ "name": "HTTP_DECODER_RESULT_26"
+ },
+ {
+ "Tuple4": "196.188.112.76.51494>23.246.50.149.80",
+ "Date": "Sat, 13 Nov 2021 14:15:58 GMT",
+ "Content-Type": "image/jpeg",
+ "Content-Length": "14215",
+ "Connection": "keep-alive",
+ "Cache-Control": "max-age=2592000",
+ "Last-Modified": "Thu, 11 Nov 2021 17:32:01 GMT",
+ "ETag": "\"837a2051f7d0f2899baf54ff20b3d9ad\"",
+ "name": "HTTP_DECODER_RESULT_27"
+ }
+] \ No newline at end of file
diff --git a/test/http_decoder/test_result_json/http_hdr_truncated_in_kv.json b/test/http_decoder/test_result_json/http_hdr_truncated_in_kv.json
new file mode 100644
index 0000000..04b74df
--- /dev/null
+++ b/test/http_decoder/test_result_json/http_hdr_truncated_in_kv.json
@@ -0,0 +1,749 @@
+[
+ {
+ "Tuple4": "196.190.248.93.32727>94.130.141.49.80",
+ "method": "GET",
+ "uri": "/iframes2/e38f4959d33f4fa390045b0d7123997d.html?subid=65843620",
+ "req_version": "1.1",
+ "major_version": 1,
+ "minor_version": 1,
+ "Host": "tsyndicate.com",
+ "Connection": "keep-alive",
+ "Upgrade-Insecure-Requests": "1",
+ "User-Agent": "Mozilla/5.0 (Linux; Android 11; SM-A217F) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.74 Mobile Safari/537.36",
+ "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
+ "Referer": "http://the-sexy-tube.com/",
+ "Accept-Encoding": "gzip, deflate",
+ "Accept-Language": "en-GB,en-US;q=0.9,en;q=0.8",
+ "name": "HTTP_DECODER_RESULT_1"
+ },
+ {
+ "Tuple4": "196.190.248.93.32727>94.130.141.49.80",
+ "res_version": "1.1",
+ "res_status": "OK",
+ "major_version": 1,
+ "minor_version": 1,
+ "status_code": 200,
+ "Server": "nginx",
+ "Date": "Sat, 13 Nov 2021 13:58:01 GMT",
+ "Content-Type": "text/html; charset=utf-8",
+ "Transfer-Encoding": "chunked",
+ "Connection": "keep-alive",
+ "Vary": "Accept-Encoding",
+ "Cache-Control": "no-cache, no-store, no-transform, must-revalidate",
+ "Pragma": "no-cache",
+ "Expires": "0",
+ "Vary1": "*",
+ "X-Api-Version": "2",
+ "Link": "<http://lcdn.tsyndicate.com/sdk/v1/b.b.js>; rel=preload; as=script",
+ "X-Request-Id": "2ceed9968bf8c648",
+ "Set-Cookie": "ts_uid=6ec96511-9fa6-4e10-86b8-31fdb4531864; expires=Fri, 13 May 2022 13:58:01 GMT; domain=.tsyndicate.com; path=/; HttpOnly; secure; SameSite=None",
+ "Set-Cookie2": "bfq=e0SIEaFjiwwZNWjkkDGjCwsRYwpuifFQRJmJMWzMsIEjBw4ZOCr2URAQ; expires=Sun, 14 Nov 2021 13:58:01 GMT; domain=.tsyndicate.com; path=/; secure; SameSite=None",
+ "X-Robots-Tag": "none",
+ "Cache-Control3": "no-transform",
+ "X-Robots-Tag4": "noindex, nofollow",
+ "Report-To": "{ \"url\": \"https://pxl.tsyndicate.com/api/v1/heavy-ad/report\", \"max_age\": 86401 }",
+ "Content-Encoding": "gzip",
+ "name": "HTTP_DECODER_RESULT_2"
+ },
+ {
+ "Tuple4": "196.190.248.93.32727>94.130.141.49.80",
+ "method": "GET",
+ "uri": "/iframes2/f6ad1cbd1c2341eb931d06c42c972899.html?subid=65843620",
+ "req_version": "1.1",
+ "major_version": 1,
+ "minor_version": 1,
+ "Host": "tsyndicate.com",
+ "Connection": "keep-alive",
+ "Upgrade-Insecure-Requests": "1",
+ "User-Agent": "Mozilla/5.0 (Linux; Android 11; SM-A217F) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.74 Mobile Safari/537.36",
+ "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
+ "Referer": "http://the-sexy-tube.com/",
+ "Accept-Encoding": "gzip, deflate",
+ "Accept-Language": "en-GB,en-US;q=0.9,en;q=0.8",
+ "name": "HTTP_DECODER_RESULT_3"
+ },
+ {
+ "Tuple4": "196.190.248.93.32727>94.130.141.49.80",
+ "res_version": "1.1",
+ "res_status": "OK",
+ "major_version": 1,
+ "minor_version": 1,
+ "status_code": 200,
+ "Server": "nginx",
+ "Date": "Sat, 13 Nov 2021 13:58:02 GMT",
+ "Content-Type": "text/html; charset=utf-8",
+ "Transfer-Encoding": "chunked",
+ "Connection": "keep-alive",
+ "Vary": "Accept-Encoding",
+ "Cache-Control": "no-cache, no-store, no-transform, must-revalidate",
+ "Pragma": "no-cache",
+ "Expires": "0",
+ "Vary1": "*",
+ "X-Api-Version": "2",
+ "Link": "<http://lcdn.tsyndicate.com/sdk/v1/b.b.js>; rel=preload; as=script",
+ "X-Request-Id": "fc3b57a2f128ad48",
+ "Set-Cookie": "ts_uid=c9a39d23-71b8-45a3-b1de-52dd45506827; expires=Fri, 13 May 2022 13:58:02 GMT; domain=.tsyndicate.com; path=/; HttpOnly; secure; SameSite=None",
+ "Set-Cookie2": "bfq=e0SIEaFjiwwZNWjkiDGjCwsRYwpuifFQRJmJMWzMsIEjBw4ZILv0URAQ; expires=Sun, 14 Nov 2021 13:58:02 GMT; domain=.tsyndicate.com; path=/; secure; SameSite=None",
+ "X-Robots-Tag": "none",
+ "Cache-Control3": "no-transform",
+ "X-Robots-Tag4": "noindex, nofollow",
+ "Report-To": "{ \"url\": \"https://pxl.tsyndicate.com/api/v1/heavy-ad/report\", \"max_age\": 86401 }",
+ "Content-Encoding": "gzip",
+ "name": "HTTP_DECODER_RESULT_4"
+ },
+ {
+ "Tuple4": "196.190.248.93.32727>94.130.141.49.80",
+ "method": "GET",
+ "uri": "/iframes2/6afeb2b2505e42a3b5e66c05a382da54.html?subid=65843620",
+ "req_version": "1.1",
+ "major_version": 1,
+ "minor_version": 1,
+ "Host": "tsyndicate.com",
+ "Connection": "keep-alive",
+ "Upgrade-Insecure-Requests": "1",
+ "User-Agent": "Mozilla/5.0 (Linux; Android 11; SM-A217F) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.74 Mobile Safari/537.36",
+ "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
+ "Referer": "http://the-sexy-tube.com/",
+ "Accept-Encoding": "gzip, deflate",
+ "Accept-Language": "en-GB,en-US;q=0.9,en;q=0.8",
+ "name": "HTTP_DECODER_RESULT_5"
+ },
+ {
+ "Tuple4": "196.190.248.93.32727>94.130.141.49.80",
+ "res_version": "1.1",
+ "res_status": "OK",
+ "major_version": 1,
+ "minor_version": 1,
+ "status_code": 200,
+ "Server": "nginx",
+ "Date": "Sat, 13 Nov 2021 13:58:06 GMT",
+ "Content-Type": "text/html; charset=utf-8",
+ "Transfer-Encoding": "chunked",
+ "Connection": "keep-alive",
+ "Vary": "Accept-Encoding",
+ "Cache-Control": "no-cache, no-store, no-transform, must-revalidate",
+ "Pragma": "no-cache",
+ "Expires": "0",
+ "Vary1": "*",
+ "X-Api-Version": "2",
+ "Link": "<http://lcdn.tsyndicate.com/sdk/v1/b.b.js>; rel=preload; as=script",
+ "X-Request-Id": "87999e0bbd0312bc",
+ "Set-Cookie": "ts_uid=cb684729-2483-4b4a-bcb1-7d1a466d6698; expires=Fri, 13 May 2022 13:58:06 GMT; domain=.tsyndicate.com; path=/; HttpOnly; secure; SameSite=None",
+ "X-Robots-Tag": "none",
+ "Cache-Control2": "no-transform",
+ "X-Robots-Tag3": "noindex, nofollow",
+ "Report-To": "{ \"url\": \"https://pxl.tsyndicate.com/api/v1/heavy-ad/report\", \"max_age\": 86401 }",
+ "Content-Encoding": "gzip",
+ "name": "HTTP_DECODER_RESULT_6"
+ },
+ {
+ "Tuple4": "196.190.248.93.32727>94.130.141.49.80",
+ "method": "GET",
+ "uri": "/do2/RRXZ58WRY9xXgRUkUDOIU3kgV79voQ84/master?subid=65843620&w=721&h=1601.25&tz=%2D180&count=6",
+ "req_version": "1.1",
+ "major_version": 1,
+ "minor_version": 1,
+ "Host": "tsyndicate.com",
+ "Connection": "keep-alive",
+ "User-Agent": "Mozilla/5.0 (Linux; Android 11; SM-A217F) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.74 Mobile Safari/537.36",
+ "Accept": "*/*",
+ "Origin": "http://the-sexy-tube.com",
+ "Referer": "http://the-sexy-tube.com/",
+ "Accept-Encoding": "gzip, deflate",
+ "Accept-Language": "en-GB,en-US;q=0.9,en;q=0.8",
+ "name": "HTTP_DECODER_RESULT_7"
+ },
+ {
+ "Tuple4": "196.190.248.93.32727>94.130.141.49.80",
+ "res_version": "1.1",
+ "res_status": "OK",
+ "major_version": 1,
+ "minor_version": 1,
+ "status_code": 200,
+ "Server": "nginx",
+ "Date": "Sat, 13 Nov 2021 13:58:12 GMT",
+ "Content-Type": "application/json; charset=utf-8",
+ "Transfer-Encoding": "chunked",
+ "Connection": "keep-alive",
+ "Vary": "Accept-Encoding",
+ "Access-Control-Allow-Origin": "http://the-sexy-tube.com",
+ "Access-Control-Allow-Methods": "POST, GET, HEAD",
+ "Access-Control-Allow-Headers": "Accept, X-Requested-With, Content-Type, Content-Length, Accept-Encoding, X-CSRF-Token, Authorization, X-Legacy",
+ "Access-Control-Allow-Credentials": "true",
+ "Cache-Control": "no-cache, no-store, no-transform, must-revalidate",
+ "Pragma": "no-cache",
+ "Expires": "0",
+ "Vary1": "*",
+ "X-Api-Version": "2",
+ "Link": "<http://lcdn.tsyndicate.com/sdk/v1/b.b.js>; rel=preload; as=script",
+ "Link2": "<http://lcdn.tsyndicate.com/sdk/v1/b.b.js>; rel=preload; as=script",
+ "X-Request-Id": "782f28a5a47ee12f",
+ "Set-Cookie": "ts_uid=153b0509-9f66-4cac-bc64-cc0a4b2a7065; expires=Fri, 13 May 2022 13:58:12 GMT; domain=.tsyndicate.com; path=/; HttpOnly; secure; SameSite=None",
+ "Set-Cookie3": "bfq=e0SIEaFjiwwZNWjkiHGDBUKFOWDc6MJCxJiCW2KwiFFRRJmMMWzMsIEjBw4ZOWRwHFnyZEoZXfoo; expires=Sun, 14 Nov 2021 13:58:12 GMT; domain=.tsyndicate.com; path=/; secure; SameSite=None",
+ "X-Robots-Tag": "none",
+ "Cache-Control4": "no-transform",
+ "name": "HTTP_DECODER_RESULT_8"
+ },
+ {
+ "Tuple4": "196.190.248.93.32727>94.130.141.49.80",
+ "X-Robots-Tag": "noindex, nofollow",
+ "Report-To": "{ \"url\": \"https://pxl.tsyndicate.com/api/v1/heavy-ad/report\", \"max_age\": 86401 }",
+ "Content-Encoding": "gzip",
+ "name": "HTTP_DECODER_RESULT_9"
+ },
+ {
+ "Tuple4": "196.190.248.93.32727>94.130.141.49.80",
+ "method": "GET",
+ "uri": "/iframes2/58e492e46f014965bd65ee7e8b852408.html?subid=65843620",
+ "req_version": "1.1",
+ "major_version": 1,
+ "minor_version": 1,
+ "Host": "tsyndicate.com",
+ "Connection": "keep-alive",
+ "Upgrade-Insecure-Requests": "1",
+ "User-Agent": "Mozilla/5.0 (Linux; Android 11; SM-A217F) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.74 Mobile Safari/537.36",
+ "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
+ "Referer": "http://the-sexy-tube.com/",
+ "Accept-Encoding": "gzip, deflate",
+ "Accept-Language": "en-GB,en-US;q=0.9,en;q=0.8",
+ "name": "HTTP_DECODER_RESULT_10"
+ },
+ {
+ "Tuple4": "196.190.248.93.32727>94.130.141.49.80",
+ "res_version": "1.1",
+ "res_status": "OK",
+ "major_version": 1,
+ "minor_version": 1,
+ "status_code": 200,
+ "Server": "nginx",
+ "Date": "Sat, 13 Nov 2021 13:58:17 GMT",
+ "Content-Type": "text/html; charset=utf-8",
+ "Transfer-Encoding": "chunked",
+ "Connection": "keep-alive",
+ "Vary": "Accept-Encoding",
+ "Cache-Control": "no-cache, no-store, no-transform, must-revalidate",
+ "Pragma": "no-cache",
+ "Expires": "0",
+ "Vary1": "*",
+ "X-Api-Version": "2",
+ "Link": "<http://lcdn.tsyndicate.com/sdk/v1/b.b.js>; rel=preload; as=script, <https://lcdn.tsyndicate.com/images/1/6/d7099a7a986d9671209e4a122a2972130515d7/main.jpg>; rel=preload; as=image",
+ "X-Request-Id": "44ca59401e0c6ed9",
+ "Set-Cookie": "ts_uid=27598b13-f24e-4a7a-a97c-ee81862070bf; expires=Fri, 13 May 2022 13:58:17 GMT; domain=.tsyndicate.com; path=/; HttpOnly; secure; SameSite=None",
+ "Set-Cookie2": "bfq=e0SIEaFjiwwZNWjgyGGjCwsRYwpuifFQRJmJMWzMsMEQh4wcN7r0URAQ; expires=Sun, 14 Nov 2021 13:58:17 GMT; domain=.tsyndicate.com; path=/; secure; SameSite=None",
+ "X-Robots-Tag": "none",
+ "Cache-Control3": "no-transform",
+ "X-Robots-Tag4": "noindex, nofollow",
+ "Report-To": "{ \"url\": \"https://pxl.tsyndicate.com/api/v1/heavy-ad/report\", \"max_age\": 86401 }",
+ "Content-Encoding": "gzip",
+ "name": "HTTP_DECODER_RESULT_11"
+ },
+ {
+ "Tuple4": "196.190.248.93.32727>94.130.141.49.80",
+ "method": "GET",
+ "uri": "/iframes2/9f09aa35d48c490199e8ff77886ca1c4.html?subid=65843620",
+ "req_version": "1.1",
+ "major_version": 1,
+ "minor_version": 1,
+ "Host": "tsyndicate.com",
+ "Connection": "keep-alive",
+ "Upgrade-Insecure-Requests": "1",
+ "User-Agent": "Mozilla/5.0 (Linux; Android 11; SM-A217F) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.74 Mobile Safari/537.36",
+ "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
+ "Referer": "http://the-sexy-tube.com/",
+ "Accept-Encoding": "gzip, deflate",
+ "Accept-Language": "en-GB,en-US;q=0.9,en;q=0.8",
+ "name": "HTTP_DECODER_RESULT_12"
+ },
+ {
+ "Tuple4": "196.190.248.93.32727>94.130.141.49.80",
+ "res_version": "1.1",
+ "res_status": "OK",
+ "major_version": 1,
+ "minor_version": 1,
+ "status_code": 200,
+ "Server": "nginx",
+ "Date": "Sat, 13 Nov 2021 13:58:18 GMT",
+ "Content-Type": "text/html; charset=utf-8",
+ "Transfer-Encoding": "chunked",
+ "Connection": "keep-alive",
+ "Vary": "Accept-Encoding",
+ "Cache-Control": "no-cache, no-store, no-transform, must-revalidate",
+ "Pragma": "no-cache",
+ "Expires": "0",
+ "Vary1": "*",
+ "X-Api-Version": "2",
+ "Link": "<http://lcdn.tsyndicate.com/sdk/v1/b.b.js>; rel=preload; as=script",
+ "X-Request-Id": "22809add4cffac3f",
+ "Set-Cookie": "ts_uid=6fb2cc93-31ea-48b4-9f1a-126c9c8c4021; expires=Fri, 13 May 2022 13:58:18 GMT; domain=.tsyndicate.com; path=/; HttpOnly; secure; SameSite=None",
+ "Set-Cookie2": "bfq=e0SIEaFjyw0aM2TciNGFhYgxBbc0fFhGYgwbM2zgyIFDRscufRQE; expires=Sun, 14 Nov 2021 13:58:18 GMT; domain=.tsyndicate.com; path=/; secure; SameSite=None",
+ "X-Robots-Tag": "none",
+ "Cache-Control3": "no-transform",
+ "X-Robots-Tag4": "noindex, nofollow",
+ "Report-To": "{ \"url\": \"https://pxl.tsyndicate.com/api/v1/heavy-ad/report\", \"max_age\": 86401 }",
+ "Content-Encoding": "gzip",
+ "name": "HTTP_DECODER_RESULT_13"
+ },
+ {
+ "Tuple4": "196.190.248.93.32727>94.130.141.49.80",
+ "method": "GET",
+ "uri": "/iframes2/4cf0aa00ed93437599c80aec9385f65f.html?subid=65843620",
+ "req_version": "1.1",
+ "major_version": 1,
+ "minor_version": 1,
+ "Host": "tsyndicate.com",
+ "Connection": "keep-alive",
+ "Upgrade-Insecure-Requests": "1",
+ "User-Agent": "Mozilla/5.0 (Linux; Android 11; SM-A217F) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.74 Mobile Safari/537.36",
+ "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
+ "Referer": "http://the-sexy-tube.com/",
+ "Accept-Encoding": "gzip, deflate",
+ "Accept-Language": "en-GB,en-US;q=0.9,en;q=0.8",
+ "name": "HTTP_DECODER_RESULT_14"
+ },
+ {
+ "Tuple4": "196.190.248.93.32727>94.130.141.49.80",
+ "res_version": "1.1",
+ "res_status": "OK",
+ "major_version": 1,
+ "minor_version": 1,
+ "status_code": 200,
+ "Server": "nginx",
+ "Date": "Sat, 13 Nov 2021 13:58:19 GMT",
+ "Content-Type": "text/html; charset=utf-8",
+ "Transfer-Encoding": "chunked",
+ "Connection": "keep-alive",
+ "Vary": "Accept-Encoding",
+ "Cache-Control": "no-cache, no-store, no-transform, must-revalidate",
+ "Pragma": "no-cache",
+ "Expires": "0",
+ "Vary1": "*",
+ "X-Api-Version": "2",
+ "Link": "<http://lcdn.tsyndicate.com/sdk/v1/b.b.js>; rel=preload; as=script",
+ "X-Request-Id": "52699954429e2642",
+ "Set-Cookie": "ts_uid=828cc65c-5706-46bf-a956-da4f1ed5c92b; expires=Fri, 13 May 2022 13:58:19 GMT; domain=.tsyndicate.com; path=/; HttpOnly; secure; SameSite=None",
+ "X-Robots-Tag": "none",
+ "Cache-Control2": "no-transform",
+ "X-Robots-Tag3": "noindex, nofollow",
+ "Report-To": "{ \"url\": \"https://pxl.tsyndicate.com/api/v1/heavy-ad/report\", \"max_age\": 86401 }",
+ "Content-Encoding": "gzip",
+ "name": "HTTP_DECODER_RESULT_15"
+ },
+ {
+ "Tuple4": "196.190.248.93.32727>94.130.141.49.80",
+ "method": "GET",
+ "uri": "/iframes2/6afeb2b2505e42a3b5e66c05a382da54.html?subid=65843620",
+ "req_version": "1.1",
+ "major_version": 1,
+ "minor_version": 1,
+ "Host": "tsyndicate.com",
+ "Connection": "keep-alive",
+ "Upgrade-Insecure-Requests": "1",
+ "User-Agent": "Mozilla/5.0 (Linux; Android 11; SM-A217F) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.74 Mobile Safari/537.36",
+ "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
+ "Referer": "http://xxx-4k-tube.com/",
+ "Accept-Encoding": "gzip, deflate",
+ "Accept-Language": "en-GB,en-US;q=0.9,en;q=0.8",
+ "name": "HTTP_DECODER_RESULT_16"
+ },
+ {
+ "Tuple4": "196.190.248.93.32727>94.130.141.49.80",
+ "res_version": "1.1",
+ "res_status": "OK",
+ "major_version": 1,
+ "minor_version": 1,
+ "status_code": 200,
+ "Server": "nginx",
+ "Date": "Sat, 13 Nov 2021 13:58:21 GMT",
+ "Content-Type": "text/html; charset=utf-8",
+ "Transfer-Encoding": "chunked",
+ "Connection": "keep-alive",
+ "Vary": "Accept-Encoding",
+ "Cache-Control": "no-cache, no-store, no-transform, must-revalidate",
+ "Pragma": "no-cache",
+ "Expires": "0",
+ "Vary1": "*",
+ "X-Api-Version": "2",
+ "Link": "<http://lcdn.tsyndicate.com/sdk/v1/b.b.js>; rel=preload; as=script",
+ "X-Request-Id": "6259beec775192ea",
+ "Set-Cookie": "ts_uid=be1c34e7-0a85-4cb1-88f4-cae061674252; expires=Fri, 13 May 2022 13:58:21 GMT; domain=.tsyndicate.com; path=/; HttpOnly; secure; SameSite=None",
+ "X-Robots-Tag": "none",
+ "Cache-Control2": "no-transform",
+ "X-Robots-Tag3": "noindex, nofollow",
+ "Report-To": "{ \"url\": \"https://pxl.tsyndicate.com/api/v1/heavy-ad/report\", \"max_age\": 86401 }",
+ "Content-Encoding": "gzip",
+ "name": "HTTP_DECODER_RESULT_17"
+ },
+ {
+ "Tuple4": "196.190.248.93.32727>94.130.141.49.80",
+ "method": "GET",
+ "uri": "/iframes2/9f09aa35d48c490199e8ff77886ca1c4.html?subid=65843620",
+ "req_version": "1.1",
+ "major_version": 1,
+ "minor_version": 1,
+ "Host": "tsyndicate.com",
+ "Connection": "keep-alive",
+ "Upgrade-Insecure-Requests": "1",
+ "User-Agent": "Mozilla/5.0 (Linux; Android 11; SM-A217F) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.74 Mobile Safari/537.36",
+ "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
+ "Referer": "http://xxx-4k-tube.com/",
+ "Accept-Encoding": "gzip, deflate",
+ "Accept-Language": "en-GB,en-US;q=0.9,en;q=0.8",
+ "name": "HTTP_DECODER_RESULT_18"
+ },
+ {
+ "Tuple4": "196.190.248.93.32727>94.130.141.49.80",
+ "res_version": "1.1",
+ "res_status": "OK",
+ "major_version": 1,
+ "minor_version": 1,
+ "status_code": 200,
+ "Server": "nginx",
+ "Date": "Sat, 13 Nov 2021 13:58:22 GMT",
+ "Content-Type": "text/html; charset=utf-8",
+ "Transfer-Encoding": "chunked",
+ "Connection": "keep-alive",
+ "Vary": "Accept-Encoding",
+ "Cache-Control": "no-cache, no-store, no-transform, must-revalidate",
+ "Pragma": "no-cache",
+ "Expires": "0",
+ "Vary1": "*",
+ "X-Api-Version": "2",
+ "Link": "<http://lcdn.tsyndicate.com/sdk/v1/b.b.js>; rel=preload; as=script",
+ "X-Request-Id": "520c40e75fb6a743",
+ "Set-Cookie": "ts_uid=98a3c69f-e78a-4d57-af3d-b8b3599a63e6; expires=Fri, 13 May 2022 13:58:22 GMT; domain=.tsyndicate.com; path=/; HttpOnly; secure; SameSite=None",
+ "X-Robots-Tag": "none",
+ "Cache-Control2": "no-transform",
+ "X-Robots-Tag3": "noindex, nofollow",
+ "Report-To": "{ \"url\": \"https://pxl.tsyndicate.com/api/v1/heavy-ad/report\", \"max_age\": 86401 }",
+ "Content-Encoding": "gzip",
+ "name": "HTTP_DECODER_RESULT_19"
+ },
+ {
+ "Tuple4": "196.190.248.93.32727>94.130.141.49.80",
+ "method": "GET",
+ "uri": "/iframes2/64437d4cd77a4ff9a6de4560177e5ccf.html?subid=65843620",
+ "req_version": "1.1",
+ "major_version": 1,
+ "minor_version": 1,
+ "Host": "tsyndicate.com",
+ "Connection": "keep-alive",
+ "Upgrade-Insecure-Requests": "1",
+ "User-Agent": "Mozilla/5.0 (Linux; Android 11; SM-A217F) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.74 Mobile Safari/537.36",
+ "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
+ "Referer": "http://xxx-4k-tube.com/",
+ "Accept-Encoding": "gzip, deflate",
+ "Accept-Language": "en-GB,en-US;q=0.9,en;q=0.8",
+ "name": "HTTP_DECODER_RESULT_20"
+ },
+ {
+ "Tuple4": "196.190.248.93.32727>94.130.141.49.80",
+ "res_version": "1.1",
+ "res_status": "OK",
+ "major_version": 1,
+ "minor_version": 1,
+ "status_code": 200,
+ "Server": "nginx",
+ "Date": "Sat, 13 Nov 2021 13:58:31 GMT",
+ "Content-Type": "text/html; charset=utf-8",
+ "Transfer-Encoding": "chunked",
+ "Connection": "keep-alive",
+ "Vary": "Accept-Encoding",
+ "Cache-Control": "no-cache, no-store, no-transform, must-revalidate",
+ "Pragma": "no-cache",
+ "Expires": "0",
+ "Vary1": "*",
+ "X-Api-Version": "2",
+ "Link": "<http://lcdn.tsyndicate.com/sdk/v1/b.b.js>; rel=preload; as=script",
+ "X-Request-Id": "e6587788a91c2425",
+ "Set-Cookie": "ts_uid=61e483d0-a205-4bd1-9bad-d2ef30f7d4fc; expires=Fri, 13 May 2022 13:58:31 GMT; domain=.tsyndicate.com; path=/; HttpOnly; secure; SameSite=None",
+ "Set-Cookie2": "bfq=e0SIEaFjyw0aM2TciNGFhYgxBbc0fFhGYgwbM2zgyIFjRoyGfRQE; expires=Sun, 14 Nov 2021 13:58:31 GMT; domain=.tsyndicate.com; path=/; secure; SameSite=None",
+ "X-Robots-Tag": "none",
+ "Cache-Control3": "no-transform",
+ "X-Robots-Tag4": "noindex, nofollow",
+ "Report-To": "{ \"url\": \"https://pxl.tsyndicate.com/api/v1/heavy-ad/report\", \"max_age\": 86401 }",
+ "Content-Encoding": "gzip",
+ "name": "HTTP_DECODER_RESULT_21"
+ },
+ {
+ "Tuple4": "196.190.248.93.32727>94.130.141.49.80",
+ "method": "GET",
+ "uri": "/iframes2/58e492e46f014965bd65ee7e8b852408.html?subid=65843620",
+ "req_version": "1.1",
+ "major_version": 1,
+ "minor_version": 1,
+ "Host": "tsyndicate.com",
+ "Connection": "keep-alive",
+ "Upgrade-Insecure-Requests": "1",
+ "User-Agent": "Mozilla/5.0 (Linux; Android 11; SM-A217F) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.74 Mobile Safari/537.36",
+ "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
+ "Referer": "http://xxx-4k-tube.com/",
+ "Accept-Encoding": "gzip, deflate",
+ "Accept-Language": "en-GB,en-US;q=0.9,en;q=0.8",
+ "name": "HTTP_DECODER_RESULT_22"
+ },
+ {
+ "Tuple4": "196.190.248.93.32727>94.130.141.49.80",
+ "res_version": "1.1",
+ "res_status": "OK",
+ "major_version": 1,
+ "minor_version": 1,
+ "status_code": 200,
+ "Server": "nginx",
+ "Date": "Sat, 13 Nov 2021 13:58:35 GMT",
+ "Content-Type": "text/html; charset=utf-8",
+ "Transfer-Encoding": "chunked",
+ "Connection": "keep-alive",
+ "Vary": "Accept-Encoding",
+ "Cache-Control": "no-cache, no-store, no-transform, must-revalidate",
+ "Pragma": "no-cache",
+ "Expires": "0",
+ "Vary1": "*",
+ "X-Api-Version": "2",
+ "Link": "<http://lcdn.tsyndicate.com/sdk/v1/b.b.js>; rel=preload; as=script",
+ "X-Request-Id": "07272bb1e710b74f",
+ "Set-Cookie": "ts_uid=179b6f1c-9bdc-49a2-bc57-f9a7aa1e10d8; expires=Fri, 13 May 2022 13:58:35 GMT; domain=.tsyndicate.com; path=/; HttpOnly; secure; SameSite=None",
+ "X-Robots-Tag": "none",
+ "Cache-Control2": "no-transform",
+ "X-Robots-Tag3": "noindex, nofollow",
+ "Report-To": "{ \"url\": \"https://pxl.tsyndicate.com/api/v1/heavy-ad/report\", \"max_age\": 86401 }",
+ "Content-Encoding": "gzip",
+ "name": "HTTP_DECODER_RESULT_23"
+ },
+ {
+ "Tuple4": "196.190.248.93.32727>94.130.141.49.80",
+ "method": "GET",
+ "uri": "/iframes2/6afeb2b2505e42a3b5e66c05a382da54.html?subid=65843620",
+ "req_version": "1.1",
+ "major_version": 1,
+ "minor_version": 1,
+ "Host": "tsyndicate.com",
+ "Connection": "keep-alive",
+ "Upgrade-Insecure-Requests": "1",
+ "User-Agent": "Mozilla/5.0 (Linux; Android 11; SM-A217F) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.74 Mobile Safari/537.36",
+ "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
+ "Referer": "http://xxx-4k-tube.com/",
+ "Accept-Encoding": "gzip, deflate",
+ "Accept-Language": "en-GB,en-US;q=0.9,en;q=0.8",
+ "name": "HTTP_DECODER_RESULT_24"
+ },
+ {
+ "Tuple4": "196.190.248.93.32727>94.130.141.49.80",
+ "res_version": "1.1",
+ "res_status": "OK",
+ "major_version": 1,
+ "minor_version": 1,
+ "status_code": 200,
+ "Server": "nginx",
+ "Date": "Sat, 13 Nov 2021 13:58:36 GMT",
+ "Content-Type": "text/html; charset=utf-8",
+ "Transfer-Encoding": "chunked",
+ "Connection": "keep-alive",
+ "Vary": "Accept-Encoding",
+ "Cache-Control": "no-cache, no-store, no-transform, must-revalidate",
+ "Pragma": "no-cache",
+ "Expires": "0",
+ "Vary1": "*",
+ "X-Api-Version": "2",
+ "Link": "<http://lcdn.tsyndicate.com/sdk/v1/b.b.js>; rel=preload; as=script",
+ "X-Request-Id": "3cd5c0292393d315",
+ "Set-Cookie": "ts_uid=34c9ab96-4e23-41bd-86e8-570d81275bd6; expires=Fri, 13 May 2022 13:58:36 GMT; domain=.tsyndicate.com; path=/; HttpOnly; secure; SameSite=None",
+ "X-Robots-Tag": "none",
+ "Cache-Control2": "no-transform",
+ "X-Robots-Tag3": "noindex, nofollow",
+ "Report-To": "{ \"url\": \"https://pxl.tsyndicate.com/api/v1/heavy-ad/report\", \"max_age\": 86401 }",
+ "Content-Encoding": "gzip",
+ "name": "HTTP_DECODER_RESULT_25"
+ },
+ {
+ "Tuple4": "196.190.248.93.32727>94.130.141.49.80",
+ "method": "GET",
+ "uri": "/iframes2/5b465d4461184330bd41f40a2912b874.html?subid=65843620",
+ "req_version": "1.1",
+ "major_version": 1,
+ "minor_version": 1,
+ "Host": "tsyndicate.com",
+ "Connection": "keep-alive",
+ "Upgrade-Insecure-Requests": "1",
+ "User-Agent": "Mozilla/5.0 (Linux; Android 11; SM-A217F) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.74 Mobile Safari/537.36",
+ "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
+ "Referer": "http://xxx-4k-tube.com/",
+ "Accept-Encoding": "gzip, deflate",
+ "Accept-Language": "en-GB,en-US;q=0.9,en;q=0.8",
+ "name": "HTTP_DECODER_RESULT_26"
+ },
+ {
+ "Tuple4": "196.190.248.93.32727>94.130.141.49.80",
+ "res_version": "1.1",
+ "res_status": "OK",
+ "major_version": 1,
+ "minor_version": 1,
+ "status_code": 200,
+ "Server": "nginx",
+ "Date": "Sat, 13 Nov 2021 13:58:37 GMT",
+ "Content-Type": "text/html; charset=utf-8",
+ "Transfer-Encoding": "chunked",
+ "Connection": "keep-alive",
+ "Vary": "Accept-Encoding",
+ "Cache-Control": "no-cache, no-store, no-transform, must-revalidate",
+ "Pragma": "no-cache",
+ "Expires": "0",
+ "Vary1": "*",
+ "X-Api-Version": "2",
+ "Link": "<http://lcdn.tsyndicate.com/sdk/v1/b.b.js>; rel=preload; as=script",
+ "X-Request-Id": "783077b4d84f0f99",
+ "Set-Cookie": "ts_uid=536a2733-c8d4-4afb-a150-10e872be27d1; expires=Fri, 13 May 2022 13:58:37 GMT; domain=.tsyndicate.com; path=/; HttpOnly; secure; SameSite=None",
+ "X-Robots-Tag": "none",
+ "Cache-Control2": "no-transform",
+ "X-Robots-Tag3": "noindex, nofollow",
+ "Report-To": "{ \"url\": \"https://pxl.tsyndicate.com/api/v1/heavy-ad/report\", \"max_age\": 86401 }",
+ "Content-Encoding": "gzip",
+ "name": "HTTP_DECODER_RESULT_27"
+ },
+ {
+ "Tuple4": "196.190.248.93.32727>94.130.141.49.80",
+ "method": "GET",
+ "uri": "/do2/RRXZ58WRY9xXgRUkUDOIU3kgV79voQ84/master?subid=65843620&w=721&h=1601.25&tz=%2D180&count=6",
+ "req_version": "1.1",
+ "major_version": 1,
+ "minor_version": 1,
+ "Host": "tsyndicate.com",
+ "Connection": "keep-alive",
+ "User-Agent": "Mozilla/5.0 (Linux; Android 11; SM-A217F) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.74 Mobile Safari/537.36",
+ "Accept": "*/*",
+ "Origin": "http://xxx-4k-tube.com",
+ "Referer": "http://xxx-4k-tube.com/",
+ "Accept-Encoding": "gzip, deflate",
+ "Accept-Language": "en-GB,en-US;q=0.9,en;q=0.8",
+ "name": "HTTP_DECODER_RESULT_28"
+ },
+ {
+ "Tuple4": "196.190.248.93.32727>94.130.141.49.80",
+ "res_version": "1.1",
+ "res_status": "OK",
+ "major_version": 1,
+ "minor_version": 1,
+ "status_code": 200,
+ "Server": "nginx",
+ "Date": "Sat, 13 Nov 2021 13:58:39 GMT",
+ "Content-Type": "application/json; charset=utf-8",
+ "Transfer-Encoding": "chunked",
+ "Connection": "keep-alive",
+ "Vary": "Accept-Encoding",
+ "Access-Control-Allow-Origin": "http://xxx-4k-tube.com",
+ "Access-Control-Allow-Methods": "POST, GET, HEAD",
+ "Access-Control-Allow-Headers": "Accept, X-Requested-With, Content-Type, Content-Length, Accept-Encoding, X-CSRF-Token, Authorization, X-Legacy",
+ "Access-Control-Allow-Credentials": "true",
+ "Cache-Control": "no-cache, no-store, no-transform, must-revalidate",
+ "Pragma": "no-cache",
+ "Expires": "0",
+ "Vary1": "*",
+ "X-Api-Version": "2",
+ "Link": "<http://lcdn.tsyndicate.com/sdk/v1/b.b.js>; rel=preload; as=script",
+ "Link2": "<http://lcdn.tsyndicate.com/sdk/v1/b.b.js>; rel=preload; as=script",
+ "X-Request-Id": "5a8c66dbb6f97d43",
+ "Set-Cookie": "ts_uid=07f6ccce-c08c-490f-ab47-04513111771b; expires=Fri, 13 May 2022 13:58:39 GMT; domain=.tsyndicate.com; path=/; HttpOnly; secure; SameSite=None",
+ "Set-Cookie3": "bfq=e0SIEaFjiwwZNWjkkIGDBUKFOWLA6MJCxJiCW2KwiFFRRJmMMWzMsIEjB44ZMXJwHFnyZMocXfoo; expires=Sun, 14 Nov 2021 13:58:39 GMT; domain=.tsyndicate.com; path=/; secure; SameSite=None",
+ "X-Robots-Tag": "none",
+ "Cache-Control4": "no-transform",
+ "name": "HTTP_DECODER_RESULT_29"
+ },
+ {
+ "Tuple4": "196.190.248.93.32727>94.130.141.49.80",
+ "X-Robots-Tag": "noindex, nofollow",
+ "Report-To": "{ \"url\": \"https://pxl.tsyndicate.com/api/v1/heavy-ad/report\", \"max_age\": 86401 }",
+ "Content-Encoding": "gzip",
+ "name": "HTTP_DECODER_RESULT_30"
+ },
+ {
+ "Tuple4": "196.190.248.93.32727>94.130.141.49.80",
+ "method": "GET",
+ "uri": "/iframes2/e38f4959d33f4fa390045b0d7123997d.html?subid=65843620",
+ "req_version": "1.1",
+ "major_version": 1,
+ "minor_version": 1,
+ "Host": "tsyndicate.com",
+ "Connection": "keep-alive",
+ "Upgrade-Insecure-Requests": "1",
+ "User-Agent": "Mozilla/5.0 (Linux; Android 11; SM-A217F) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.74 Mobile Safari/537.36",
+ "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
+ "Referer": "http://the-sexy-tube.com/",
+ "Accept-Encoding": "gzip, deflate",
+ "Accept-Language": "en-GB,en-US;q=0.9,en;q=0.8",
+ "name": "HTTP_DECODER_RESULT_31"
+ },
+ {
+ "Tuple4": "196.190.248.93.32727>94.130.141.49.80",
+ "res_version": "1.1",
+ "res_status": "OK",
+ "major_version": 1,
+ "minor_version": 1,
+ "status_code": 200,
+ "Server": "nginx",
+ "Date": "Sat, 13 Nov 2021 13:58:41 GMT",
+ "Content-Type": "text/html; charset=utf-8",
+ "Transfer-Encoding": "chunked",
+ "Connection": "keep-alive",
+ "Vary": "Accept-Encoding",
+ "Cache-Control": "no-cache, no-store, no-transform, must-revalidate",
+ "Pragma": "no-cache",
+ "Expires": "0",
+ "Vary1": "*",
+ "X-Api-Version": "2",
+ "Link": "<http://lcdn.tsyndicate.com/sdk/v1/b.b.js>; rel=preload; as=script",
+ "X-Request-Id": "0c9df5d12f4a51bb",
+ "Set-Cookie": "ts_uid=6c0facf3-ce38-4068-ae55-0d7a3ad13cfd; expires=Fri, 13 May 2022 13:58:41 GMT; domain=.tsyndicate.com; path=/; HttpOnly; secure; SameSite=None",
+ "Set-Cookie2": "bfq=e0SIEaFjiwwZNWjkiFGjCwsRYwpuifFQRJmJMWzMsIEjB44ZMir2URAQ; expires=Sun, 14 Nov 2021 13:58:41 GMT; domain=.tsyndicate.com; path=/; secure; SameSite=None",
+ "X-Robots-Tag": "none",
+ "Cache-Control3": "no-transform",
+ "X-Robots-Tag4": "noindex, nofollow",
+ "Report-To": "{ \"url\": \"https://pxl.tsyndicate.com/api/v1/heavy-ad/report\", \"max_age\": 86401 }",
+ "Content-Encoding": "gzip",
+ "name": "HTTP_DECODER_RESULT_32"
+ },
+ {
+ "Tuple4": "196.190.248.93.32727>94.130.141.49.80",
+ "method": "GET",
+ "uri": "/iframes2/7ea1bb66b4814265996d3c59697a3024.html?subid=65843620",
+ "req_version": "1.1",
+ "major_version": 1,
+ "minor_version": 1,
+ "Host": "tsyndicate.com",
+ "Connection": "keep-alive",
+ "Upgrade-Insecure-Requests": "1",
+ "User-Agent": "Mozilla/5.0 (Linux; Android 11; SM-A217F) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.74 Mobile Safari/537.36",
+ "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
+ "Referer": "http://the-sexy-tube.com/",
+ "Accept-Encoding": "gzip, deflate",
+ "Accept-Language": "en-GB,en-US;q=0.9,en;q=0.8",
+ "name": "HTTP_DECODER_RESULT_33"
+ },
+ {
+ "Tuple4": "196.190.248.93.32727>94.130.141.49.80",
+ "res_version": "1.1",
+ "res_status": "OK",
+ "major_version": 1,
+ "minor_version": 1,
+ "status_code": 200,
+ "Server": "nginx",
+ "Date": "Sat, 13 Nov 2021 13:58:44 GMT",
+ "Content-Type": "text/html; charset=utf-8",
+ "Transfer-Encoding": "chunked",
+ "Connection": "keep-alive",
+ "Vary": "Accept-Encoding",
+ "Cache-Control": "no-cache, no-store, no-transform, must-revalidate",
+ "Pragma": "no-cache",
+ "Expires": "0",
+ "Vary1": "*",
+ "X-Api-Version": "2",
+ "Link": "<http://lcdn.tsyndicate.com/sdk/v1/b.b.js>; rel=preload; as=script",
+ "X-Request-Id": "081d97bd15f93c38",
+ "Set-Cookie": "ts_uid=9dda90ea-d6da-45dd-87ad-15d9819f945b; expires=Fri, 13 May 2022 13:58:44 GMT; domain=.tsyndicate.com; path=/; HttpOnly; secure; SameSite=None",
+ "Set-Cookie2": "bfq=e0SIEaFjiwwZNWjkkBGjCwsRYwpucQixzMQYNmbYwJEDxwwZNLr0URAQ; expires=Sun, 14 Nov 2021 13:58:44 GMT; domain=.tsyndicate.com; path=/; secure; SameSite=None",
+ "X-Robots-Tag": "none",
+ "Cache-Control3": "no-transform",
+ "X-Robots-Tag4": "noindex, nofollow",
+ "Report-To": "{ \"url\": \"https://pxl.tsyndicate.com/api/v1/heavy-ad/report\", \"max_age\": 86401 }",
+ "Content-Encoding": "gzip",
+ "name": "HTTP_DECODER_RESULT_34"
+ }
+] \ No newline at end of file
diff --git a/test/http_decoder/test_result_json/http_header_value_empty.json b/test/http_decoder/test_result_json/http_hdr_value_empty.json
index 3310002..3310002 100644
--- a/test/http_decoder/test_result_json/http_header_value_empty.json
+++ b/test/http_decoder/test_result_json/http_hdr_value_empty.json
diff --git a/test/http_decoder/test_result_json/http_headers_exceed_maximum.json b/test/http_decoder/test_result_json/http_hdrs_exceed_maximum.json
index 70f1b8a..9ad03b7 100644
--- a/test/http_decoder/test_result_json/http_headers_exceed_maximum.json
+++ b/test/http_decoder/test_result_json/http_hdrs_exceed_maximum.json
@@ -2,7 +2,7 @@
{
"Tuple4": "10.0.0.1.61462>10.0.0.2.80",
"method": "GET",
- "uri": "/x/xx/xxxxxxxxxxxxxxxxxxx/x/xxxxxx/xxxxxxxxxxxxxxx?xxx=1&xxx=1&x=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&vmf=xxxxxxxxxx.xxx.xxx.xxx&ce=UTF-8&ns=xxxxxxxxxx&pageName=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&g=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.jsp&r=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&events=xxxxxxxxxxxxxxxxxxxxxxxxxxx&products=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&v1=xxxxxxxxxxxxxxx&v2=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&v17=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
+ "uri": "/x/xx/xxxxxxxxxxxxxxxxxxx/x/xxxxxx/xxxxxxxxxxxxxxx?xxx=1&xxx=1&x=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&vmf=xxxxxxxxxx.xxx.xxx.xxx&ce=UTF-8&ns=xxxxxxxxxx&pageName=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&g=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.jsp&r=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&events=xxxxxxxxxxxxxxxxxxxxxxxxxxx&products=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&v1=xxxxxxxxxxxxxxx&v2=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&v17=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx_cxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&c49=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&AQE=1",
"req_version": "1.1",
"major_version": 1,
"minor_version": 1,