diff options
| author | lijia <[email protected]> | 2024-08-30 19:09:11 +0800 |
|---|---|---|
| committer | lijia <[email protected]> | 2024-09-02 09:42:09 +0800 |
| commit | 94a75460e9547389d5b7f72dd8467d1dfc29b599 (patch) | |
| tree | 7c50427feb585589f81528fb3b0df33828999b54 /test/decoders | |
| parent | 82cb1eaeeba92f34405744c6b2449b7b80930678 (diff) | |
rename *.cpp to *.c; renmae API. move benchmarks/* to test/decoder/http; fix TSG-22347
Diffstat (limited to 'test/decoders')
116 files changed, 3659 insertions, 1146 deletions
diff --git a/test/decoders/http/CMakeLists.txt b/test/decoders/http/CMakeLists.txt index 766e49c..5011a95 100644 --- a/test/decoders/http/CMakeLists.txt +++ b/test/decoders/http/CMakeLists.txt @@ -1,27 +1,18 @@ -set(DECODER_NAME http) - aux_source_directory(${PROJECT_SOURCE_DIR}/deps/toml DEPS_SRC) +aux_source_directory(${PROJECT_SOURCE_DIR}/deps/md5 DEPS_SRC) -add_library(${DECODER_NAME}_test SHARED http_decoder_test_plug.cpp md5.c ${DEPS_SRC}) -add_dependencies(${DECODER_NAME}_test ${DECODER_NAME}) -target_link_libraries(${DECODER_NAME}_test cjson-static llhttp-static) -set_target_properties(${DECODER_NAME}_test PROPERTIES PREFIX "") - -# add_library(${DECODER_NAME}_perf SHARED http_decoder_perf_plug.cpp) -# add_dependencies(${DECODER_NAME}_perf ${DECODER_NAME}) -# set_target_properties(${DECODER_NAME}_perf PROPERTIES PREFIX "") - -set(TEST_RUN_DIR ${CMAKE_BINARY_DIR}/testing) +add_library(http_test SHARED http_test_plug.cpp ${DEPS_SRC}) +add_dependencies(http_test http) +target_link_libraries(http_test cjson-static llhttp-static) +set_target_properties(http_test PROPERTIES PREFIX "") include_directories(${CMAKE_SOURCE_DIR}/include) include_directories(${CMAKE_SOURCE_DIR}/deps) include_directories(${PROJECT_SOURCE_DIR}/decoders/http) include_directories(${PROJECT_SOURCE_DIR}/include/stellar) -aux_source_directory(${PROJECT_SOURCE_DIR}/deps/toml PERF_TEST_DEP_SRC) - -add_executable(gtest_http http_decoder_gtest.cpp ${PROJECT_SOURCE_DIR}/decoders/http/http_decoder_utils.cpp) -target_link_libraries(gtest_http gtest stellar_lib llhttp-static) +add_executable(gtest_http http_gtest.cpp ${PROJECT_SOURCE_DIR}/decoders/http/http_decoder_utils.c ${PROJECT_SOURCE_DIR}/decoders/http/http_content_decompress.c ${PROJECT_SOURCE_DIR}/deps/md5/md5.c) +target_link_libraries(gtest_http gtest stellar_lib llhttp-static z brotli-dec-static brotli-enc-static brotli-common-static libevent-static) add_executable(http_test_main plugin_test_main.cpp) set_target_properties(http_test_main diff --git a/test/decoders/http/base64.c b/test/decoders/http/base64.c deleted file mode 100644 index eeded25..0000000 --- a/test/decoders/http/base64.c +++ /dev/null @@ -1,164 +0,0 @@ -/* This is a public domain base64 implementation written by WEI Zhicheng. */ - -#include "base64.h" - -#define BASE64_PAD '=' -#define BASE64DE_FIRST '+' -#define BASE64DE_LAST 'z' - -/* BASE 64 encode table */ -static const char base64en[] = { - 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', - 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', - 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', - 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', - 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', - 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', - 'w', 'x', 'y', 'z', '0', '1', '2', '3', - '4', '5', '6', '7', '8', '9', '+', '/', -}; - -/* ASCII order for BASE 64 decode, 255 in unused character */ -static const unsigned char base64de[] = { - /* nul, soh, stx, etx, eot, enq, ack, bel, */ - 255, 255, 255, 255, 255, 255, 255, 255, - - /* bs, ht, nl, vt, np, cr, so, si, */ - 255, 255, 255, 255, 255, 255, 255, 255, - - /* dle, dc1, dc2, dc3, dc4, nak, syn, etb, */ - 255, 255, 255, 255, 255, 255, 255, 255, - - /* can, em, sub, esc, fs, gs, rs, us, */ - 255, 255, 255, 255, 255, 255, 255, 255, - - /* sp, '!', '"', '#', '$', '%', '&', ''', */ - 255, 255, 255, 255, 255, 255, 255, 255, - - /* '(', ')', '*', '+', ',', '-', '.', '/', */ - 255, 255, 255, 62, 255, 255, 255, 63, - - /* '0', '1', '2', '3', '4', '5', '6', '7', */ - 52, 53, 54, 55, 56, 57, 58, 59, - - /* '8', '9', ':', ';', '<', '=', '>', '?', */ - 60, 61, 255, 255, 255, 255, 255, 255, - - /* '@', 'A', 'B', 'C', 'D', 'E', 'F', 'G', */ - 255, 0, 1, 2, 3, 4, 5, 6, - - /* 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', */ - 7, 8, 9, 10, 11, 12, 13, 14, - - /* 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', */ - 15, 16, 17, 18, 19, 20, 21, 22, - - /* 'X', 'Y', 'Z', '[', '\', ']', '^', '_', */ - 23, 24, 25, 255, 255, 255, 255, 255, - - /* '`', 'a', 'b', 'c', 'd', 'e', 'f', 'g', */ - 255, 26, 27, 28, 29, 30, 31, 32, - - /* 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', */ - 33, 34, 35, 36, 37, 38, 39, 40, - - /* 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', */ - 41, 42, 43, 44, 45, 46, 47, 48, - - /* 'x', 'y', 'z', '{', '|', '}', '~', del, */ - 49, 50, 51, 255, 255, 255, 255, 255 -}; - -unsigned int -base64_encode(const unsigned char *in, unsigned int inlen, char *out) -{ - int s; - unsigned int i; - unsigned int j; - unsigned char c; - unsigned char l; - - s = 0; - l = 0; - for (i = j = 0; i < inlen; i++) { - c = in[i]; - - switch (s) { - case 0: - s = 1; - out[j++] = base64en[(c >> 2) & 0x3F]; - break; - case 1: - s = 2; - out[j++] = base64en[((l & 0x3) << 4) | ((c >> 4) & 0xF)]; - break; - case 2: - s = 0; - out[j++] = base64en[((l & 0xF) << 2) | ((c >> 6) & 0x3)]; - out[j++] = base64en[c & 0x3F]; - break; - } - l = c; - } - - switch (s) { - case 1: - out[j++] = base64en[(l & 0x3) << 4]; - out[j++] = BASE64_PAD; - out[j++] = BASE64_PAD; - break; - case 2: - out[j++] = base64en[(l & 0xF) << 2]; - out[j++] = BASE64_PAD; - break; - } - - out[j] = 0; - - return j; -} - -unsigned int -base64_decode(const char *in, unsigned int inlen, unsigned char *out) -{ - unsigned int i; - unsigned int j; - unsigned char c; - - if (inlen & 0x3) { - return 0; - } - - for (i = j = 0; i < inlen; i++) { - if (in[i] == BASE64_PAD) { - break; - } - if (in[i] < BASE64DE_FIRST || in[i] > BASE64DE_LAST) { - return 0; - } - - c = base64de[(unsigned char)in[i]]; - if (c == 255) { - return 0; - } - - switch (i & 0x3) { - case 0: - out[j] = (c << 2) & 0xFF; - break; - case 1: - out[j++] |= (c >> 4) & 0x3; - out[j] = (c & 0xF) << 4; - break; - case 2: - out[j++] |= (c >> 2) & 0xF; - out[j] = (c & 0x3) << 6; - break; - case 3: - out[j++] |= c; - break; - } - } - - return j; -} diff --git a/test/decoders/http/base64.h b/test/decoders/http/base64.h deleted file mode 100644 index 9bea95a..0000000 --- a/test/decoders/http/base64.h +++ /dev/null @@ -1,28 +0,0 @@ -#ifndef BASE64_H -#define BASE64_H - -#define BASE64_ENCODE_OUT_SIZE(s) ((unsigned int)((((s) + 2) / 3) * 4 + 1)) -#define BASE64_DECODE_OUT_SIZE(s) ((unsigned int)(((s) / 4) * 3)) - -#ifdef __cplusplus -extern "C" -{ -#endif -/* - * out is null-terminated encode string. - * return values is out length, exclusive terminating `\0' - */ -unsigned int -base64_encode(const unsigned char *in, unsigned int inlen, char *out); - -/* - * return values is out length - */ -unsigned int -base64_decode(const char *in, unsigned int inlen, unsigned char *out); - -#ifdef __cplusplus -} -#endif - -#endif /* BASE64_H */ diff --git a/test/decoders/http/benchmarks/json/http_6over4_single_trans.json b/test/decoders/http/benchmarks/json/http_6over4_single_trans.json new file mode 100644 index 0000000..34d999d --- /dev/null +++ b/test/decoders/http/benchmarks/json/http_6over4_single_trans.json @@ -0,0 +1,34 @@ +[ + { + "__X_HTTP_TUPLE4": "2001:da8:200:900e:200:5efe:d24d:58a3.52556>2600:140e:6::1702:1058.80" + }, + { + "__X_HTTP_TRANSACTION": "request", + "__X_HTTP_TRANSACTION_SEQ": 0, + "method": "GET", + "uri": "/ncsi.txt", + "req_version": "1.1", + "major_version": 1, + "minor_version": 1, + "Connection": "Close", + "User-Agent": "Microsoft NCSI", + "Host": "www.msftncsi.com", + "__X_HTTP_URL": "www.msftncsi.com/ncsi.txt" + }, + { + "__X_HTTP_TRANSACTION": "response", + "__X_HTTP_TRANSACTION_SEQ": 0, + "res_version": "1.1", + "res_status": "OK", + "major_version": 1, + "minor_version": 1, + "status_code": 200, + "Content-Length": "14", + "Date": "Tue, 01 Dec 2015 03:41:27 GMT", + "Connection": "close", + "Content-Type": "text/plain", + "Cache-Control": "max-age=30, must-revalidate", + "__X_HTTP_DECOMPRESS_PAYLOAD_MD5": "cd5a4d3fdd5bffc16bf959ef75cf37bc", + "__X_HTTP_PAYLOAD": "TWljcm9zb2Z0IE5DU0k=" + } +]
\ No newline at end of file diff --git a/test/decoders/http/benchmarks/json/http_chn_encode_url.json b/test/decoders/http/benchmarks/json/http_chn_encode_url.json new file mode 100644 index 0000000..5453415 --- /dev/null +++ b/test/decoders/http/benchmarks/json/http_chn_encode_url.json @@ -0,0 +1,42 @@ +[ + { + "__X_HTTP_TUPLE4": "2607:5d00:2:2::38:2:56343-240e:928:101:80::80:80-6-0" + }, + { + "__X_HTTP_TRANSACTION": "request", + "__X_HTTP_TRANSACTION_SEQ": 0, + "method": "GET", + "uri": "/%E6%B5%8B%E8%AF%95%E4%B8%AD%E6%96%87URL%E7%BC%96%E8%A7%A3%E7%A0%81", + "req_version": "1.1", + "major_version": 1, + "minor_version": 1, + "Host": "www.airchina.com.cn", + "Connection": "keep-alive", + "DNT": "1", + "Upgrade-Insecure-Requests": "1", + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 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.7", + "Accept-Encoding": "gzip, deflate", + "Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8", + "Cookie": "_gcl_au=1.1.240068387.1720059437; _ga_CGYVD7S4G4=GS1.1.1720059448.3.0.1720059453.0.0.0; HMF_CI=7967e38cc3874dbbefa260b8dcbee31fa827a01fc2b7073105a5e05f4a1ea361c74f6d4c37fb199bfc9470036f06fb537da2a74e96450b7949e0b686f0569f9680; HMY_JC=84f9c8a99e076ee2dda5ba48cd953f61c4dc2707823205d8171c8818eea9d60fda,; _ga=GA1.3.822493162.1711101509; _gid=GA1.3.304369429.1721120134; arialoadData=true; ariawapChangeViewPort=false; C3VK=be8842; HBB_HC=faa7f3e2477e14525534a5560ed6a307b29ae2c324e1f631a428e53fb74c9d72575c155d682554ba15cc9e52afe31218b1; mbox=check#true#1721120252|session#1721120133635-517642#1721122052; s_pers=%20s_fid%3D52863027521849CD-3A72894997C48527%7C1878886591105%3B; s_sess=%20s_cc%3Dtrue%3B", + "__X_HTTP_URL": "www.airchina.com.cn/%E6%B5%8B%E8%AF%95%E4%B8%AD%E6%96%87URL%E7%BC%96%E8%A7%A3%E7%A0%81", + "__X_HTTP_DECODED_URL": "www.airchina.com.cn/测试中文URL编解码" + }, + { + "__X_HTTP_TRANSACTION": "response", + "__X_HTTP_TRANSACTION_SEQ": 0, + "res_version": "1.1", + "res_status": "Moved Temporarily", + "major_version": 1, + "minor_version": 1, + "status_code": 302, + "Date": "Tue, 16 Jul 2024 08:57:32 GMT", + "Content-Length": "0", + "Connection": "keep-alive", + "Server": "waf/4.39.0-0.el7", + "Location": "https://www.airchina.com.cn/%E6%B5%8B%E8%AF%95%E4%B8%AD%E6%96%87URL%E7%BC%96%E8%A7%A3%E7%A0%81", + "x-ws-origin-error": "-", + "X-Via": "1.1 PSjsczBGPiv194:0 (Cdn Cache Server V2.0), 1.1 PStjdxpn34:6 (Cdn Cache Server V2.0)", + "X-Ws-Request-Id": "669635fc_PStjdxks32_7630-15285" + } +]
\ No newline at end of file diff --git a/test/decoders/http/benchmarks/json/http_chunked_res_gzip.json b/test/decoders/http/benchmarks/json/http_chunked_res_gzip.json new file mode 100644 index 0000000..370b4a7 --- /dev/null +++ b/test/decoders/http/benchmarks/json/http_chunked_res_gzip.json @@ -0,0 +1,46 @@ +[ + { + "__X_HTTP_TUPLE4": "127.0.0.1:33412-127.0.0.1:8080-6-0" + }, + { + "__X_HTTP_TRANSACTION": "request", + "__X_HTTP_TRANSACTION_SEQ": 0, + "method": "GET", + "uri": "/", + "req_version": "1.1", + "major_version": 1, + "minor_version": 1, + "Host": "www.wireshark.org:8080", + "User-Agent": "curl/7.46.0", + "Accept": "*/*", + "Connection": "close", + "Accept-Encoding": "chunked, gzip", + "__X_HTTP_URL": "www.wireshark.org:8080/" + }, + { + "__X_HTTP_TRANSACTION": "response", + "__X_HTTP_TRANSACTION_SEQ": 0, + "res_version": "1.1", + "res_status": "OK", + "major_version": 1, + "minor_version": 1, + "status_code": 200, + "Server": "cloudflare-nginx", + "Date": "Wed, 06 Jan 2016 20:42:10 GMT", + "Content-Type": "text/html", + "Transfer-Encoding": "chunked", + "Connection": "close", + "Set-Cookie": "__cfduid=d8d37b52eaa3137bdfd7fd67a4ffc8a7a1452112929; expires=Thu, 05-Jan-17 20:42:09 GMT; path=/; domain=.wireshark.org; HttpOnly", + "X-Frame-Options": "SAMEORIGIN", + "Strict-Transport-Security": "max-age=31536000;", + "X-Slogan": "It's a great product with a great story to tell. I'm pumped!", + "X-Mod-Pagespeed": "1.9.32.11-7550", + "Vary": "Accept-Encoding", + "Cache-control": "max-age=0, no-cache, no-store", + "X-Slogan1": "Go deep.", + "CF-RAY": "260a3f709d7b0761-AMS", + "Content-Encoding": "gzip", + "__X_HTTP_RAW_PAYLOAD_MD5": "5387fc115327b819ba920ad6ce8f3e3a", + "__X_HTTP_DECOMPRESS_PAYLOAD_MD5": "855f8310be999de806e89a420a95435d" + } +]
\ No newline at end of file diff --git a/test/decoders/http/benchmarks/json/http_connect_flood.json b/test/decoders/http/benchmarks/json/http_connect_flood.json new file mode 100644 index 0000000..199c038 --- /dev/null +++ b/test/decoders/http/benchmarks/json/http_connect_flood.json @@ -0,0 +1,686 @@ +[ + { + "Tuple4": "10.128.0.2.18762>10.0.0.2.80", + "method": "CONNECT", + "uri": "test.mazebolt.com:80", + "req_version": "1.1", + "major_version": 1, + "minor_version": 1, + "Host": "test.mazebolt.com", + "User-Agent": "Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.16) Gecko/20110929 Iceweasel/3.5.16", + "Accept": "*/*", + "Accept-Encoding": "gzip, deflate", + "Content-Length": "0", + "name": "HTTP_DECODER_RESULT_1" + }, + { + "Tuple4": "10.128.0.2.18746>10.0.0.2.80", + "res_version": "1.1", + "res_status": "Forbidden", + "major_version": 1, + "minor_version": 1, + "status_code": 403, + "Date": "Thu, 03 Sep 2020 10:26:38 GMT", + "Server": "Apache", + "Content-Length": "199", + "Content-Type": "text/html; charset=iso-8859-1", + "name": "HTTP_DECODER_RESULT_2" + }, + { + "Tuple4": "10.128.0.2.18744>10.0.0.2.80", + "res_version": "1.1", + "res_status": "Forbidden", + "major_version": 1, + "minor_version": 1, + "status_code": 403, + "Date": "Thu, 03 Sep 2020 10:26:38 GMT", + "Server": "Apache", + "Content-Length": "199", + "Content-Type": "text/html; charset=iso-8859-1", + "name": "HTTP_DECODER_RESULT_3" + }, + { + "Tuple4": "10.128.0.2.18748>10.0.0.2.80", + "res_version": "1.1", + "res_status": "Forbidden", + "major_version": 1, + "minor_version": 1, + "status_code": 403, + "Date": "Thu, 03 Sep 2020 10:26:38 GMT", + "Server": "Apache", + "Content-Length": "199", + "Content-Type": "text/html; charset=iso-8859-1", + "name": "HTTP_DECODER_RESULT_4" + }, + { + "Tuple4": "10.128.0.2.18750>10.0.0.2.80", + "res_version": "1.1", + "res_status": "Forbidden", + "major_version": 1, + "minor_version": 1, + "status_code": 403, + "Date": "Thu, 03 Sep 2020 10:26:38 GMT", + "Server": "Apache", + "Content-Length": "199", + "Content-Type": "text/html; charset=iso-8859-1", + "name": "HTTP_DECODER_RESULT_5" + }, + { + "Tuple4": "10.128.0.2.18752>10.0.0.2.80", + "res_version": "1.1", + "res_status": "Forbidden", + "major_version": 1, + "minor_version": 1, + "status_code": 403, + "Date": "Thu, 03 Sep 2020 10:26:38 GMT", + "Server": "Apache", + "Content-Length": "199", + "Content-Type": "text/html; charset=iso-8859-1", + "name": "HTTP_DECODER_RESULT_6" + }, + { + "Tuple4": "10.128.0.2.18754>10.0.0.2.80", + "res_version": "1.1", + "res_status": "Forbidden", + "major_version": 1, + "minor_version": 1, + "status_code": 403, + "Date": "Thu, 03 Sep 2020 10:26:38 GMT", + "Server": "Apache", + "Content-Length": "199", + "Content-Type": "text/html; charset=iso-8859-1", + "name": "HTTP_DECODER_RESULT_7" + }, + { + "Tuple4": "10.128.0.2.18756>10.0.0.2.80", + "res_version": "1.1", + "res_status": "Forbidden", + "major_version": 1, + "minor_version": 1, + "status_code": 403, + "Date": "Thu, 03 Sep 2020 10:26:38 GMT", + "Server": "Apache", + "Content-Length": "199", + "Content-Type": "text/html; charset=iso-8859-1", + "name": "HTTP_DECODER_RESULT_8" + }, + { + "Tuple4": "10.128.0.2.18758>10.0.0.2.80", + "res_version": "1.1", + "res_status": "Forbidden", + "major_version": 1, + "minor_version": 1, + "status_code": 403, + "Date": "Thu, 03 Sep 2020 10:26:38 GMT", + "Server": "Apache", + "Content-Length": "199", + "Content-Type": "text/html; charset=iso-8859-1", + "name": "HTTP_DECODER_RESULT_9" + }, + { + "Tuple4": "10.128.0.2.18760>10.0.0.2.80", + "res_version": "1.1", + "res_status": "Forbidden", + "major_version": 1, + "minor_version": 1, + "status_code": 403, + "Date": "Thu, 03 Sep 2020 10:26:38 GMT", + "Server": "Apache", + "Content-Length": "199", + "Content-Type": "text/html; charset=iso-8859-1", + "name": "HTTP_DECODER_RESULT_10" + }, + { + "Tuple4": "10.128.0.2.18762>10.0.0.2.80", + "res_version": "1.1", + "res_status": "Forbidden", + "major_version": 1, + "minor_version": 1, + "status_code": 403, + "Date": "Thu, 03 Sep 2020 10:26:38 GMT", + "Server": "Apache", + "Content-Length": "199", + "Content-Type": "text/html; charset=iso-8859-1", + "name": "HTTP_DECODER_RESULT_11" + }, + { + "Tuple4": "10.128.0.2.18768>10.0.0.2.80", + "method": "CONNECT", + "uri": "test.mazebolt.com:80", + "req_version": "1.1", + "major_version": 1, + "minor_version": 1, + "Host": "test.mazebolt.com", + "User-Agent": "Safari/5.00 (Macintosh; U; en)", + "Accept": "*/*", + "Accept-Encoding": "gzip, deflate", + "Content-Length": "0", + "name": "HTTP_DECODER_RESULT_12" + }, + { + "Tuple4": "10.128.0.2.18766>10.0.0.2.80", + "method": "CONNECT", + "uri": "test.mazebolt.com:80", + "req_version": "1.1", + "major_version": 1, + "minor_version": 1, + "Host": "test.mazebolt.com", + "User-Agent": "Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.120 Safari/537.36", + "Accept": "*/*", + "Accept-Encoding": "gzip, deflate", + "Content-Length": "0", + "name": "HTTP_DECODER_RESULT_13" + }, + { + "Tuple4": "10.128.0.2.18770>10.0.0.2.80", + "method": "CONNECT", + "uri": "test.mazebolt.com:80", + "req_version": "1.1", + "major_version": 1, + "minor_version": 1, + "Host": "test.mazebolt.com", + "User-Agent": "Opera/9.00 (Windows NT 5.1; U; en)", + "Accept": "*/*", + "Accept-Encoding": "gzip, deflate", + "Content-Length": "0", + "name": "HTTP_DECODER_RESULT_14" + }, + { + "Tuple4": "10.128.0.2.18772>10.0.0.2.80", + "method": "CONNECT", + "uri": "test.mazebolt.com:80", + "req_version": "1.1", + "major_version": 1, + "minor_version": 1, + "Host": "test.mazebolt.com", + "User-Agent": "Opera/9.00 (Windows NT 5.1; U; en)", + "Accept": "*/*", + "Accept-Encoding": "gzip, deflate", + "Content-Length": "0", + "name": "HTTP_DECODER_RESULT_15" + }, + { + "Tuple4": "10.128.0.2.18776>10.0.0.2.80", + "method": "CONNECT", + "uri": "test.mazebolt.com:80", + "req_version": "1.1", + "major_version": 1, + "minor_version": 1, + "Host": "test.mazebolt.com", + "User-Agent": "GooglePocket/2.1 ( http://www.googlePocket.com/Pocket.html)", + "Accept": "*/*", + "Accept-Encoding": "gzip, deflate", + "Content-Length": "0", + "name": "HTTP_DECODER_RESULT_16" + }, + { + "Tuple4": "10.128.0.2.18774>10.0.0.2.80", + "method": "CONNECT", + "uri": "test.mazebolt.com:80", + "req_version": "1.1", + "major_version": 1, + "minor_version": 1, + "Host": "test.mazebolt.com", + "User-Agent": "Mozilla/5.0 (X11; Linux i686; rv:31.0) Gecko/20100101 Firefox/31.0 Iceweasel/31.4.0", + "Accept": "*/*", + "Accept-Encoding": "gzip, deflate", + "Content-Length": "0", + "name": "HTTP_DECODER_RESULT_17" + }, + { + "Tuple4": "10.128.0.2.18780>10.0.0.2.80", + "method": "CONNECT", + "uri": "test.mazebolt.com:80", + "req_version": "1.1", + "major_version": 1, + "minor_version": 1, + "Host": "test.mazebolt.com", + "User-Agent": "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.4b) Gecko/20030505 Mozilla Firebird/0.6", + "Accept": "*/*", + "Accept-Encoding": "gzip, deflate", + "Content-Length": "0", + "name": "HTTP_DECODER_RESULT_18" + }, + { + "Tuple4": "10.128.0.2.18778>10.0.0.2.80", + "method": "CONNECT", + "uri": "test.mazebolt.com:80", + "req_version": "1.1", + "major_version": 1, + "minor_version": 1, + "Host": "test.mazebolt.com", + "User-Agent": "DoCoMo/2.0 SH902i (compatible; Y!J-SRD/1.0; http://help.yahoo.co.jp/help/jp/search/indexing/indexing-27.html)", + "Accept": "*/*", + "Accept-Encoding": "gzip, deflate", + "Content-Length": "0", + "name": "HTTP_DECODER_RESULT_19" + }, + { + "Tuple4": "10.128.0.2.18782>10.0.0.2.80", + "method": "CONNECT", + "uri": "test.mazebolt.com:80", + "req_version": "1.1", + "major_version": 1, + "minor_version": 1, + "Host": "test.mazebolt.com", + "User-Agent": "IE/5.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 1.1.4322;)", + "Accept": "*/*", + "Accept-Encoding": "gzip, deflate", + "Content-Length": "0", + "name": "HTTP_DECODER_RESULT_20" + }, + { + "Tuple4": "10.128.0.2.18784>10.0.0.2.80", + "method": "CONNECT", + "uri": "test.mazebolt.com:80", + "req_version": "1.1", + "major_version": 1, + "minor_version": 1, + "Host": "test.mazebolt.com", + "User-Agent": "Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.16) Gecko/20110929 Iceweasel/3.5.16", + "Accept": "*/*", + "Accept-Encoding": "gzip, deflate", + "Content-Length": "0", + "name": "HTTP_DECODER_RESULT_21" + }, + { + "Tuple4": "10.128.0.2.18768>10.0.0.2.80", + "res_version": "1.1", + "res_status": "Forbidden", + "major_version": 1, + "minor_version": 1, + "status_code": 403, + "Date": "Thu, 03 Sep 2020 10:26:39 GMT", + "Server": "Apache", + "Content-Length": "199", + "Content-Type": "text/html; charset=iso-8859-1", + "name": "HTTP_DECODER_RESULT_22" + }, + { + "Tuple4": "10.128.0.2.18766>10.0.0.2.80", + "res_version": "1.1", + "res_status": "Forbidden", + "major_version": 1, + "minor_version": 1, + "status_code": 403, + "Date": "Thu, 03 Sep 2020 10:26:39 GMT", + "Server": "Apache", + "Content-Length": "199", + "Content-Type": "text/html; charset=iso-8859-1", + "name": "HTTP_DECODER_RESULT_23" + }, + { + "Tuple4": "10.128.0.2.18770>10.0.0.2.80", + "res_version": "1.1", + "res_status": "Forbidden", + "major_version": 1, + "minor_version": 1, + "status_code": 403, + "Date": "Thu, 03 Sep 2020 10:26:39 GMT", + "Server": "Apache", + "Content-Length": "199", + "Content-Type": "text/html; charset=iso-8859-1", + "name": "HTTP_DECODER_RESULT_24" + }, + { + "Tuple4": "10.128.0.2.18772>10.0.0.2.80", + "res_version": "1.1", + "res_status": "Forbidden", + "major_version": 1, + "minor_version": 1, + "status_code": 403, + "Date": "Thu, 03 Sep 2020 10:26:39 GMT", + "Server": "Apache", + "Content-Length": "199", + "Content-Type": "text/html; charset=iso-8859-1", + "name": "HTTP_DECODER_RESULT_25" + }, + { + "Tuple4": "10.128.0.2.18776>10.0.0.2.80", + "res_version": "1.1", + "res_status": "Forbidden", + "major_version": 1, + "minor_version": 1, + "status_code": 403, + "Date": "Thu, 03 Sep 2020 10:26:39 GMT", + "Server": "Apache", + "Content-Length": "199", + "Content-Type": "text/html; charset=iso-8859-1", + "name": "HTTP_DECODER_RESULT_26" + }, + { + "Tuple4": "10.128.0.2.18780>10.0.0.2.80", + "res_version": "1.1", + "res_status": "Forbidden", + "major_version": 1, + "minor_version": 1, + "status_code": 403, + "Date": "Thu, 03 Sep 2020 10:26:39 GMT", + "Server": "Apache", + "Content-Length": "199", + "Content-Type": "text/html; charset=iso-8859-1", + "name": "HTTP_DECODER_RESULT_27" + }, + { + "Tuple4": "10.128.0.2.18774>10.0.0.2.80", + "res_version": "1.1", + "res_status": "Forbidden", + "major_version": 1, + "minor_version": 1, + "status_code": 403, + "Date": "Thu, 03 Sep 2020 10:26:39 GMT", + "Server": "Apache", + "Content-Length": "199", + "Content-Type": "text/html; charset=iso-8859-1", + "name": "HTTP_DECODER_RESULT_28" + }, + { + "Tuple4": "10.128.0.2.18778>10.0.0.2.80", + "res_version": "1.1", + "res_status": "Forbidden", + "major_version": 1, + "minor_version": 1, + "status_code": 403, + "Date": "Thu, 03 Sep 2020 10:26:39 GMT", + "Server": "Apache", + "Content-Length": "199", + "Content-Type": "text/html; charset=iso-8859-1", + "name": "HTTP_DECODER_RESULT_29" + }, + { + "Tuple4": "10.128.0.2.18782>10.0.0.2.80", + "res_version": "1.1", + "res_status": "Forbidden", + "major_version": 1, + "minor_version": 1, + "status_code": 403, + "Date": "Thu, 03 Sep 2020 10:26:39 GMT", + "Server": "Apache", + "Content-Length": "199", + "Content-Type": "text/html; charset=iso-8859-1", + "name": "HTTP_DECODER_RESULT_30" + }, + { + "Tuple4": "10.128.0.2.18784>10.0.0.2.80", + "res_version": "1.1", + "res_status": "Forbidden", + "major_version": 1, + "minor_version": 1, + "status_code": 403, + "Date": "Thu, 03 Sep 2020 10:26:39 GMT", + "Server": "Apache", + "Content-Length": "199", + "Content-Type": "text/html; charset=iso-8859-1", + "name": "HTTP_DECODER_RESULT_31" + }, + { + "Tuple4": "10.128.0.2.18790>10.0.0.2.80", + "method": "CONNECT", + "uri": "test.mazebolt.com:80", + "req_version": "1.1", + "major_version": 1, + "minor_version": 1, + "Host": "test.mazebolt.com", + "User-Agent": "Safari/5.00 (Macintosh; U; en)", + "Accept": "*/*", + "Accept-Encoding": "gzip, deflate", + "Content-Length": "0", + "name": "HTTP_DECODER_RESULT_32" + }, + { + "Tuple4": "10.128.0.2.18792>10.0.0.2.80", + "method": "CONNECT", + "uri": "test.mazebolt.com:80", + "req_version": "1.1", + "major_version": 1, + "minor_version": 1, + "Host": "test.mazebolt.com", + "User-Agent": "Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.120 Safari/537.36", + "Accept": "*/*", + "Accept-Encoding": "gzip, deflate", + "Content-Length": "0", + "name": "HTTP_DECODER_RESULT_33" + }, + { + "Tuple4": "10.128.0.2.18796>10.0.0.2.80", + "method": "CONNECT", + "uri": "test.mazebolt.com:80", + "req_version": "1.1", + "major_version": 1, + "minor_version": 1, + "Host": "test.mazebolt.com", + "User-Agent": "Opera/9.00 (Windows NT 5.1; U; en)", + "Accept": "*/*", + "Accept-Encoding": "gzip, deflate", + "Content-Length": "0", + "name": "HTTP_DECODER_RESULT_34" + }, + { + "Tuple4": "10.128.0.2.18794>10.0.0.2.80", + "method": "CONNECT", + "uri": "test.mazebolt.com:80", + "req_version": "1.1", + "major_version": 1, + "minor_version": 1, + "Host": "test.mazebolt.com", + "User-Agent": "Opera/9.00 (Windows NT 5.1; U; en)", + "Accept": "*/*", + "Accept-Encoding": "gzip, deflate", + "Content-Length": "0", + "name": "HTTP_DECODER_RESULT_35" + }, + { + "Tuple4": "10.128.0.2.18798>10.0.0.2.80", + "method": "CONNECT", + "uri": "test.mazebolt.com:80", + "req_version": "1.1", + "major_version": 1, + "minor_version": 1, + "Host": "test.mazebolt.com", + "User-Agent": "GooglePocket/2.1 ( http://www.googlePocket.com/Pocket.html)", + "Accept": "*/*", + "Accept-Encoding": "gzip, deflate", + "Content-Length": "0", + "name": "HTTP_DECODER_RESULT_36" + }, + { + "Tuple4": "10.128.0.2.18800>10.0.0.2.80", + "method": "CONNECT", + "uri": "test.mazebolt.com:80", + "req_version": "1.1", + "major_version": 1, + "minor_version": 1, + "Host": "test.mazebolt.com", + "User-Agent": "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.4b) Gecko/20030505 Mozilla Firebird/0.6", + "Accept": "*/*", + "Accept-Encoding": "gzip, deflate", + "Content-Length": "0", + "name": "HTTP_DECODER_RESULT_37" + }, + { + "Tuple4": "10.128.0.2.18804>10.0.0.2.80", + "method": "CONNECT", + "uri": "test.mazebolt.com:80", + "req_version": "1.1", + "major_version": 1, + "minor_version": 1, + "Host": "test.mazebolt.com", + "User-Agent": "DoCoMo/2.0 SH902i (compatible; Y!J-SRD/1.0; http://help.yahoo.co.jp/help/jp/search/indexing/indexing-27.html)", + "Accept": "*/*", + "Accept-Encoding": "gzip, deflate", + "Content-Length": "0", + "name": "HTTP_DECODER_RESULT_38" + }, + { + "Tuple4": "10.128.0.2.18802>10.0.0.2.80", + "method": "CONNECT", + "uri": "test.mazebolt.com:80", + "req_version": "1.1", + "major_version": 1, + "minor_version": 1, + "Host": "test.mazebolt.com", + "User-Agent": "Mozilla/5.0 (X11; Linux i686; rv:31.0) Gecko/20100101 Firefox/31.0 Iceweasel/31.4.0", + "Accept": "*/*", + "Accept-Encoding": "gzip, deflate", + "Content-Length": "0", + "name": "HTTP_DECODER_RESULT_39" + }, + { + "Tuple4": "10.128.0.2.18806>10.0.0.2.80", + "method": "CONNECT", + "uri": "test.mazebolt.com:80", + "req_version": "1.1", + "major_version": 1, + "minor_version": 1, + "Host": "test.mazebolt.com", + "User-Agent": "IE/5.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 1.1.4322;)", + "Accept": "*/*", + "Accept-Encoding": "gzip, deflate", + "Content-Length": "0", + "name": "HTTP_DECODER_RESULT_40" + }, + { + "Tuple4": "10.128.0.2.18808>10.0.0.2.80", + "method": "CONNECT", + "uri": "test.mazebolt.com:80", + "req_version": "1.1", + "major_version": 1, + "minor_version": 1, + "Host": "test.mazebolt.com", + "User-Agent": "Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.16) Gecko/20110929 Iceweasel/3.5.16", + "Accept": "*/*", + "Accept-Encoding": "gzip, deflate", + "Content-Length": "0", + "name": "HTTP_DECODER_RESULT_41" + }, + { + "Tuple4": "10.128.0.2.18790>10.0.0.2.80", + "res_version": "1.1", + "res_status": "Forbidden", + "major_version": 1, + "minor_version": 1, + "status_code": 403, + "Date": "Thu, 03 Sep 2020 10:26:41 GMT", + "Server": "Apache", + "Content-Length": "199", + "Content-Type": "text/html; charset=iso-8859-1", + "name": "HTTP_DECODER_RESULT_42" + }, + { + "Tuple4": "10.128.0.2.18792>10.0.0.2.80", + "res_version": "1.1", + "res_status": "Forbidden", + "major_version": 1, + "minor_version": 1, + "status_code": 403, + "Date": "Thu, 03 Sep 2020 10:26:41 GMT", + "Server": "Apache", + "Content-Length": "199", + "Content-Type": "text/html; charset=iso-8859-1", + "name": "HTTP_DECODER_RESULT_43" + }, + { + "Tuple4": "10.128.0.2.18796>10.0.0.2.80", + "res_version": "1.1", + "res_status": "Forbidden", + "major_version": 1, + "minor_version": 1, + "status_code": 403, + "Date": "Thu, 03 Sep 2020 10:26:41 GMT", + "Server": "Apache", + "Content-Length": "199", + "Content-Type": "text/html; charset=iso-8859-1", + "name": "HTTP_DECODER_RESULT_44" + }, + { + "Tuple4": "10.128.0.2.18798>10.0.0.2.80", + "res_version": "1.1", + "res_status": "Forbidden", + "major_version": 1, + "minor_version": 1, + "status_code": 403, + "Date": "Thu, 03 Sep 2020 10:26:41 GMT", + "Server": "Apache", + "Content-Length": "199", + "Content-Type": "text/html; charset=iso-8859-1", + "name": "HTTP_DECODER_RESULT_45" + }, + { + "Tuple4": "10.128.0.2.18794>10.0.0.2.80", + "res_version": "1.1", + "res_status": "Forbidden", + "major_version": 1, + "minor_version": 1, + "status_code": 403, + "Date": "Thu, 03 Sep 2020 10:26:41 GMT", + "Server": "Apache", + "Content-Length": "199", + "Content-Type": "text/html; charset=iso-8859-1", + "name": "HTTP_DECODER_RESULT_46" + }, + { + "Tuple4": "10.128.0.2.18800>10.0.0.2.80", + "res_version": "1.1", + "res_status": "Forbidden", + "major_version": 1, + "minor_version": 1, + "status_code": 403, + "Date": "Thu, 03 Sep 2020 10:26:41 GMT", + "Server": "Apache", + "Content-Length": "199", + "Content-Type": "text/html; charset=iso-8859-1", + "name": "HTTP_DECODER_RESULT_47" + }, + { + "Tuple4": "10.128.0.2.18804>10.0.0.2.80", + "res_version": "1.1", + "res_status": "Forbidden", + "major_version": 1, + "minor_version": 1, + "status_code": 403, + "Date": "Thu, 03 Sep 2020 10:26:41 GMT", + "Server": "Apache", + "Content-Length": "199", + "Content-Type": "text/html; charset=iso-8859-1", + "name": "HTTP_DECODER_RESULT_48" + }, + { + "Tuple4": "10.128.0.2.18802>10.0.0.2.80", + "res_version": "1.1", + "res_status": "Forbidden", + "major_version": 1, + "minor_version": 1, + "status_code": 403, + "Date": "Thu, 03 Sep 2020 10:26:41 GMT", + "Server": "Apache", + "Content-Length": "199", + "Content-Type": "text/html; charset=iso-8859-1", + "name": "HTTP_DECODER_RESULT_49" + }, + { + "Tuple4": "10.128.0.2.18806>10.0.0.2.80", + "res_version": "1.1", + "res_status": "Forbidden", + "major_version": 1, + "minor_version": 1, + "status_code": 403, + "Date": "Thu, 03 Sep 2020 10:26:41 GMT", + "Server": "Apache", + "Content-Length": "199", + "Content-Type": "text/html; charset=iso-8859-1", + "name": "HTTP_DECODER_RESULT_50" + }, + { + "Tuple4": "10.128.0.2.18808>10.0.0.2.80", + "res_version": "1.1", + "res_status": "Forbidden", + "major_version": 1, + "minor_version": 1, + "status_code": 403, + "Date": "Thu, 03 Sep 2020 10:26:41 GMT", + "Server": "Apache", + "Content-Length": "199", + "Content-Type": "text/html; charset=iso-8859-1", + "name": "HTTP_DECODER_RESULT_51" + } +]
\ No newline at end of file diff --git a/test/decoders/http/benchmarks/json/http_get_encoded_uri.json b/test/decoders/http/benchmarks/json/http_get_encoded_uri.json new file mode 100644 index 0000000..de1419a --- /dev/null +++ b/test/decoders/http/benchmarks/json/http_get_encoded_uri.json @@ -0,0 +1,81 @@ +[ + { + "__X_HTTP_TUPLE4": "192.168.117.60:39655-58.16.70.122:80-6-0" + }, + { + "__X_HTTP_TRANSACTION": "request", + "__X_HTTP_TRANSACTION_SEQ": 0, + "method": "POST", + "uri": "/disAll/tcCertType.html", + "req_version": "1.1", + "major_version": 1, + "minor_version": 1, + "User-Agent": "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36", + "Accept": "*/*", + "Accept-Language": "en-US,en;q=0.8,en-us,en;q=0.5", + "Origin": "http://58.16.70.122", + "X-Requested-With": "XMLHttpRequest", + "Referer": "http://58.16.70.122/register.jsp?redirect:http://58.16.70.122.r87.com/?", + "Cache-Control": "no-cache", + "X-Scanner": "Netsparker", + "Cookie": "JSESSIONID=385C79E211D561C0CA13D90F150F603D", + "Host": "58.16.70.122", + "Content-Length": "0", + "Accept-Encoding": "gzip, deflate", + "__X_HTTP_URL": "58.16.70.122/disAll/tcCertType.html" + }, + { + "__X_HTTP_TRANSACTION": "response", + "__X_HTTP_TRANSACTION_SEQ": 0, + "res_version": "1.1", + "res_status": "OK", + "major_version": 1, + "minor_version": 1, + "status_code": 200, + "Server": "Apache-Coyote/1.1", + "Pragma": "No-cache", + "Expires": "Thu, 01 Jan 1970 00:00:00 GMT", + "Content-Type": "text/html;charset=UTF-8", + "Transfer-Encoding": "chunked", + "Date": "Sat, 18 May 2019 01:36:57 GMT", + "__X_HTTP_RAW_PAYLOAD_MD5": "d545e0faf20f7ffe90e31cfc1aef1782", + "__X_HTTP_DECOMPRESS_PAYLOAD_MD5": "d545e0faf20f7ffe90e31cfc1aef1782" + }, + { + "__X_HTTP_TRANSACTION": "request", + "__X_HTTP_TRANSACTION_SEQ": 1, + "method": "GET", + "uri": "/upload/%E6%B3%95%E5%BE%8B%E6%B3%95%E8%A7%84/%E5%B8%82%E4%BA%BA%E6%B0%91%E6%94%BF%E5%BA%9C%E5%8A%9E%E5%85%AC%E5%8E%85%E5%8D%B0%E5%8F%91%E8%B4%B5%E9%98%B3%E5%B8%82%E5%85%B3%E4%BA%8E%E6%8E%A8%E8%BF%9B%E5%B7%A5%E5%95%86%E8%90%A5%E4%B8%9A%E6%89%A7%E7%85%A7%E3%80%81%E7%BB%84%E7%BB%87%E6%9C%BA%E6%9E%84%E4%BB%A3%E7%A0%81%E8%AF%81%E5%92%8C%E7%A8%8E%E5%8A%A1%E7%99%BB%E8%AE%B0%E8%AF%81%E2%80%9C%E4%B8%89%E8%AF%81%E5%90%88%E4%B8%80%E2%80%9D%E7%99%BB%E8%AE%B0%E5%88%B6%E5%BA%A6%E6%94%B9%E9%9D%A9%E5%AE%9E%E6%96%BD%E6%96%B9%E6%A1%88%E7%9A%84%E9%80%9A%E7%9F%A5%EF%BC%88%E7%AD%91%E5%BA%9C%E5%8A%9E%E5%87%BD%E3%80%902015%E3%80%91162%E5%8F%B7%EF%BC%89.docx?nsextt=N3TSP4RKE2", + "req_version": "1.1", + "major_version": 1, + "minor_version": 1, + "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8", + "User-Agent": "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36", + "Cache-Control": "no-cache", + "Accept-Language": "en-us,en;q=0.5", + "X-Scanner": "Netsparker", + "Cookie": "JSESSIONID=385C79E211D561C0CA13D90F150F603D", + "Host": "58.16.70.122", + "Accept-Encoding": "gzip, deflate", + "__X_HTTP_URL": "58.16.70.122/upload/%E6%B3%95%E5%BE%8B%E6%B3%95%E8%A7%84/%E5%B8%82%E4%BA%BA%E6%B0%91%E6%94%BF%E5%BA%9C%E5%8A%9E%E5%85%AC%E5%8E%85%E5%8D%B0%E5%8F%91%E8%B4%B5%E9%98%B3%E5%B8%82%E5%85%B3%E4%BA%8E%E6%8E%A8%E8%BF%9B%E5%B7%A5%E5%95%86%E8%90%A5%E4%B8%9A%E6%89%A7%E7%85%A7%E3%80%81%E7%BB%84%E7%BB%87%E6%9C%BA%E6%9E%84%E4%BB%A3%E7%A0%81%E8%AF%81%E5%92%8C%E7%A8%8E%E5%8A%A1%E7%99%BB%E8%AE%B0%E8%AF%81%E2%80%9C%E4%B8%89%E8%AF%81%E5%90%88%E4%B8%80%E2%80%9D%E7%99%BB%E8%AE%B0%E5%88%B6%E5%BA%A6%E6%94%B9%E9%9D%A9%E5%AE%9E%E6%96%BD%E6%96%B9%E6%A1%88%E7%9A%84%E9%80%9A%E7%9F%A5%EF%BC%88%E7%AD%91%E5%BA%9C%E5%8A%9E%E5%87%BD%E3%80%902015%E3%80%91162%E5%8F%B7%EF%BC%89.docx?nsextt=N3TSP4RKE2", + "__X_HTTP_DECODED_URL": "58.16.70.122/upload/法律法规/市人民政府办公厅印发贵阳市关于推进工商营业执照、组织机构代码证和税务登记证“三证合一”登记制度改革实施方案的通知(筑府办函【2015】162号).docx?nsextt=N3TSP4RKE2" + }, + { + "__X_HTTP_TRANSACTION": "response", + "__X_HTTP_TRANSACTION_SEQ": 1, + "res_version": "1.1", + "res_status": "OK", + "major_version": 1, + "minor_version": 1, + "status_code": 200, + "Server": "Apache-Coyote/1.1", + "Accept-Ranges": "bytes", + "ETag": "W/\"1703517-1546572172000\"", + "Last-Modified": "Fri, 04 Jan 2019 03:22:52 GMT", + "Content-Type": "application/vnd.openxmlformats-officedocument.wordprocessingml.document;charset=UTF-8", + "Content-Length": "1703517", + "Date": "Sat, 18 May 2019 01:37:00 GMT", + "__X_HTTP_RAW_PAYLOAD_MD5": "3598c468910611a3128d068e20ae0e82", + "__X_HTTP_DECOMPRESS_PAYLOAD_MD5": "3598c468910611a3128d068e20ae0e82" + } +]
\ No newline at end of file diff --git a/test/decoders/http/benchmarks/json/http_get_long_cookie.json b/test/decoders/http/benchmarks/json/http_get_long_cookie.json new file mode 100644 index 0000000..118022d --- /dev/null +++ b/test/decoders/http/benchmarks/json/http_get_long_cookie.json @@ -0,0 +1,24 @@ +[ + { + "__X_HTTP_TUPLE4": "202.127.156.91:27282-14.17.32.203:80-6-0" + }, + { + "__X_HTTP_TRANSACTION": "request", + "__X_HTTP_TRANSACTION_SEQ": 0, + "method": "GET", + "uri": "/livemsg?imagemd5=02f5efd8a349c50280f8540b2735bd54&tailroll=1&plugin=1.3.8&pf=out&si=3766845706&url=http%3A%2F%2Fsports.qq.com%2Fa%2F20160106%2F008987.htm&soid=CA7F9C5B0120568CDC2F68726300&chid=0&ping_data=dXNlcl9pbmZvPXVCWDluVDg5SFJhOUFQK0JQVGdKRUxVYi9Kdz0&t=0&iptype=0&vptag=&pid=7F993E38C0E676ACC07DE764D1F3DEF56AA8F90A&adtype=LD&oadid=6012&ev=3236&l=4020&ufc_filter=0&imagelog=1&pid2=7F993E38C0E676ACC07DE764D1F3DEF56AA8F90A&mt=15000&coverid=&reqtime=1452071981&requestl=4020&isthirdip=0&cid=0&isfloatindex=0&o=100654557&lcount=2&refluence=4020&from=0&vid=m01794rm5ej&cip=202.127.156.91&aver=0&ip_filter=0&adlength=30000&tagid=&v=TencentPlayerOutV3.2.19.346&live=0&dura=105", + "req_version": "1.1", + "major_version": 1, + "minor_version": 1, + "Host": "livep.l.qq.com", + "Connection": "keep-alive", + "User-Agent": "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36", + "Accept": "*/*", + "Referer": "http://imgcache.qq.com/tencentvideo_v1/player/TPout.swf?max_age=86400&v=20140714", + "Accept-Encoding": "gzip,deflate,sdch", + "Accept-Language": "zh-CN,zh;q=0.8", + "__X_HTTP_URL": "livep.l.qq.com/livemsg?imagemd5=02f5efd8a349c50280f8540b2735bd54&tailroll=1&plugin=1.3.8&pf=out&si=3766845706&url=http%3A%2F%2Fsports.qq.com%2Fa%2F20160106%2F008987.htm&soid=CA7F9C5B0120568CDC2F68726300&chid=0&ping_data=dXNlcl9pbmZvPXVCWDluVDg5SFJhOUFQK0JQVGdKRUxVYi9Kdz0&t=0&iptype=0&vptag=&pid=7F993E38C0E676ACC07DE764D1F3DEF56AA8F90A&adtype=LD&oadid=6012&ev=3236&l=4020&ufc_filter=0&imagelog=1&pid2=7F993E38C0E676ACC07DE764D1F3DEF56AA8F90A&mt=15000&coverid=&reqtime=1452071981&requestl=4020&isthirdip=0&cid=0&isfloatindex=0&o=100654557&lcount=2&refluence=4020&from=0&vid=m01794rm5ej&cip=202.127.156.91&aver=0&ip_filter=0&adlength=30000&tagid=&v=TencentPlayerOutV3.2.19.346&live=0&dura=105", + "__X_HTTP_DECODED_URL": "livep.l.qq.com/livemsg?imagemd5=02f5efd8a349c50280f8540b2735bd54&tailroll=1&plugin=1.3.8&pf=out&si=3766845706&url=http://sports.qq.com/a/20160106/008987.htm&soid=CA7F9C5B0120568CDC2F68726300&chid=0&ping_data=dXNlcl9pbmZvPXVCWDluVDg5SFJhOUFQK0JQVGdKRUxVYi9Kdz0&t=0&iptype=0&vptag=&pid=7F993E38C0E676ACC07DE764D1F3DEF56AA8F90A&adtype=LD&oadid=6012&ev=3236&l=4020&ufc_filter=0&imagelog=1&pid2=7F993E38C0E676ACC07DE764D1F3DEF56AA8F90A&mt=15000&coverid=&reqtime=1452071981&requestl=4020&isthirdip=0&cid=0&isfloatindex=0&o=100654557&lcount=2&refluence=4020&from=0&vid=m01794rm5ej&cip=202.127.156.91&aver=0&ip_filter=0&adlength=30000&tagid=&v=TencentPlayerOutV3.2.19.346&live=0&dura=105", + "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" + } +]
\ No newline at end of file diff --git a/test/decoders/http/benchmarks/json/http_get_malformed.json b/test/decoders/http/benchmarks/json/http_get_malformed.json new file mode 100644 index 0000000..3a04d38 --- /dev/null +++ b/test/decoders/http/benchmarks/json/http_get_malformed.json @@ -0,0 +1,2 @@ + [ + ]
\ No newline at end of file diff --git a/test/decoders/http/benchmarks/json/http_get_multi_trans.json b/test/decoders/http/benchmarks/json/http_get_multi_trans.json new file mode 100644 index 0000000..917b1c7 --- /dev/null +++ b/test/decoders/http/benchmarks/json/http_get_multi_trans.json @@ -0,0 +1,149 @@ +[ + { + "__X_HTTP_TUPLE4": "192.168.50.18:60400-192.168.42.1:80-6-0" + }, + { + "__X_HTTP_TRANSACTION": "request", + "__X_HTTP_TRANSACTION_SEQ": 0, + "method": "GET", + "uri": "/account/login.htm", + "req_version": "1.1", + "major_version": 1, + "minor_version": 1, + "Host": "test.pro.testin.cn", + "Connection": "keep-alive", + "Upgrade-Insecure-Requests": "1", + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.0.0 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", + "Accept-Encoding": "gzip, deflate", + "Accept-Language": "zh-CN,zh;q=0.9", + "Cookie": "Hm_lvt_1b8c1194303ef64e02f003f0cb8a1906=1653898514; _gcl_au=1.1.1010551181.1653898515; _ga=GA1.2.1419569885.1653898515; _gid=GA1.2.2007113907.1653898515; authtoken_pro=tea83b3beef07488bb8571811385db42; userId_pro=1160; pid_pro=1; eid_pro=1; pname_pro=name; Hm_lpvt_1b8c1194303ef64e02f003f0cb8a1906=1653961741; JSESSIONID=531AACA879469EDAB825E28113490E10", + "__X_HTTP_URL": "test.pro.testin.cn/account/login.htm" + }, + { + "__X_HTTP_TRANSACTION": "response", + "__X_HTTP_TRANSACTION_SEQ": 0, + "res_version": "1.1", + "major_version": 1, + "minor_version": 1, + "status_code": 302, + "Server": "nginx/1.16.1", + "Date": "Tue, 31 May 2022 06:41:23 GMT", + "Content-Length": "0", + "Connection": "keep-alive", + "Set-Cookie": "JSESSIONID=CFAB9C0C3F4D9D6C2837E3BA9425AFCA; Path=/; HttpOnly", + "Set-Cookie1": "authtoken_pro=tea83b3beef07488bb8571811385db42; Max-Age=28800; Expires=Tue, 31-May-2022 14:41:23 GMT; Domain=testin.cn; Path=/; HttpOnly", + "Set-Cookie2": "userId_pro=1160; Max-Age=28800; Expires=Tue, 31-May-2022 14:41:23 GMT; Domain=testin.cn; Path=/; HttpOnly", + "Location": "http://test.pro.testin.cn/enterprise/index.htm", + "Content-Language": "zh-CN" + }, + { + "__X_HTTP_TRANSACTION": "request", + "__X_HTTP_TRANSACTION_SEQ": 1, + "method": "GET", + "uri": "/enterprise/index.htm", + "req_version": "1.1", + "major_version": 1, + "minor_version": 1, + "Host": "test.pro.testin.cn", + "Connection": "keep-alive", + "Upgrade-Insecure-Requests": "1", + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.0.0 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", + "Accept-Encoding": "gzip, deflate", + "Accept-Language": "zh-CN,zh;q=0.9", + "Cookie": "Hm_lvt_1b8c1194303ef64e02f003f0cb8a1906=1653898514; _gcl_au=1.1.1010551181.1653898515; _ga=GA1.2.1419569885.1653898515; _gid=GA1.2.2007113907.1653898515; authtoken_pro=tea83b3beef07488bb8571811385db42; userId_pro=1160; pid_pro=1; eid_pro=1; pname_pro=name; Hm_lpvt_1b8c1194303ef64e02f003f0cb8a1906=1653961741; JSESSIONID=CFAB9C0C3F4D9D6C2837E3BA9425AFCA", + "__X_HTTP_URL": "test.pro.testin.cn/enterprise/index.htm" + }, + { + "__X_HTTP_TRANSACTION": "response", + "__X_HTTP_TRANSACTION_SEQ": 1, + "res_version": "1.1", + "major_version": 1, + "minor_version": 1, + "status_code": 302, + "Server": "nginx/1.16.1", + "Date": "Tue, 31 May 2022 06:41:23 GMT", + "Content-Length": "0", + "Connection": "keep-alive", + "Set-Cookie": "authtoken_pro=tea83b3beef07488bb8571811385db42; Max-Age=28800; Expires=Tue, 31-May-2022 14:41:23 GMT; Domain=testin.cn; Path=/; HttpOnly", + "Set-Cookie1": "userId_pro=1160; Max-Age=28800; Expires=Tue, 31-May-2022 14:41:23 GMT; Domain=testin.cn; Path=/; HttpOnly", + "Location": "http://test.pro.testin.cn/enterprise/into.htm?eid=1", + "Content-Language": "zh-CN" + }, + { + "__X_HTTP_TRANSACTION": "request", + "__X_HTTP_TRANSACTION_SEQ": 2, + "method": "GET", + "uri": "/enterprise/into.htm?eid=1", + "req_version": "1.1", + "major_version": 1, + "minor_version": 1, + "Host": "test.pro.testin.cn", + "Connection": "keep-alive", + "Upgrade-Insecure-Requests": "1", + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.0.0 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", + "Accept-Encoding": "gzip, deflate", + "Accept-Language": "zh-CN,zh;q=0.9", + "Cookie": "Hm_lvt_1b8c1194303ef64e02f003f0cb8a1906=1653898514; _gcl_au=1.1.1010551181.1653898515; _ga=GA1.2.1419569885.1653898515; _gid=GA1.2.2007113907.1653898515; authtoken_pro=tea83b3beef07488bb8571811385db42; userId_pro=1160; pid_pro=1; eid_pro=1; pname_pro=name; Hm_lpvt_1b8c1194303ef64e02f003f0cb8a1906=1653961741; JSESSIONID=CFAB9C0C3F4D9D6C2837E3BA9425AFCA", + "__X_HTTP_URL": "test.pro.testin.cn/enterprise/into.htm?eid=1" + }, + { + "__X_HTTP_TRANSACTION": "response", + "__X_HTTP_TRANSACTION_SEQ": 2, + "res_version": "1.1", + "major_version": 1, + "minor_version": 1, + "status_code": 302, + "Server": "nginx/1.16.1", + "Date": "Tue, 31 May 2022 06:41:23 GMT", + "Content-Length": "0", + "Connection": "keep-alive", + "Set-Cookie": "authtoken_pro=tea83b3beef07488bb8571811385db42; Max-Age=28800; Expires=Tue, 31-May-2022 14:41:23 GMT; Domain=testin.cn; Path=/; HttpOnly", + "Set-Cookie1": "userId_pro=1160; Max-Age=28800; Expires=Tue, 31-May-2022 14:41:23 GMT; Domain=testin.cn; Path=/; HttpOnly", + "Location": "http://test.pro.testin.cn/realmachine/index.htm", + "Content-Language": "zh-CN" + }, + { + "__X_HTTP_TRANSACTION": "request", + "__X_HTTP_TRANSACTION_SEQ": 3, + "method": "GET", + "uri": "/realmachine/index.htm", + "req_version": "1.1", + "major_version": 1, + "minor_version": 1, + "Host": "test.pro.testin.cn", + "Connection": "keep-alive", + "Upgrade-Insecure-Requests": "1", + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.0.0 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", + "Accept-Encoding": "gzip, deflate", + "Accept-Language": "zh-CN,zh;q=0.9", + "Cookie": "Hm_lvt_1b8c1194303ef64e02f003f0cb8a1906=1653898514; _gcl_au=1.1.1010551181.1653898515; _ga=GA1.2.1419569885.1653898515; _gid=GA1.2.2007113907.1653898515; authtoken_pro=tea83b3beef07488bb8571811385db42; userId_pro=1160; pid_pro=1; eid_pro=1; pname_pro=name; Hm_lpvt_1b8c1194303ef64e02f003f0cb8a1906=1653961741; JSESSIONID=CFAB9C0C3F4D9D6C2837E3BA9425AFCA", + "__X_HTTP_URL": "test.pro.testin.cn/realmachine/index.htm" + }, + { + "__X_HTTP_TRANSACTION": "response", + "__X_HTTP_TRANSACTION_SEQ": 3, + "res_version": "1.1", + "major_version": 1, + "minor_version": 1, + "status_code": 200, + "Server": "nginx/1.16.1", + "Date": "Tue, 31 May 2022 06:41:23 GMT", + "Content-Type": "text/html;charset=UTF-8", + "Transfer-Encoding": "chunked", + "Connection": "keep-alive", + "Vary": "Accept-Encoding", + "Set-Cookie": "authtoken_pro=tea83b3beef07488bb8571811385db42; Max-Age=28800; Expires=Tue, 31-May-2022 14:41:23 GMT; Domain=testin.cn; Path=/; HttpOnly", + "Set-Cookie1": "userId_pro=1160; Max-Age=28800; Expires=Tue, 31-May-2022 14:41:23 GMT; Domain=testin.cn; Path=/; HttpOnly", + "Set-Cookie2": "pid_pro=1; Max-Age=28800; Expires=Tue, 31-May-2022 14:41:23 GMT; Domain=testin.cn; Path=/; HttpOnly", + "Set-Cookie3": "eid_pro=1; Max-Age=28800; Expires=Tue, 31-May-2022 14:41:23 GMT; Domain=testin.cn; Path=/; HttpOnly", + "Set-Cookie4": "pname_pro=name; Max-Age=28800; Expires=Tue, 31-May-2022 14:41:23 GMT; Domain=testin.cn; Path=/; HttpOnly", + "Content-Language": "zh-CN", + "Content-Encoding": "gzip", + "__X_HTTP_RAW_PAYLOAD_MD5": "5d761720e42f13d01ba981fb19b850ca", + "__X_HTTP_DECOMPRESS_PAYLOAD_MD5": "39cb5f3a9cbcfbd16f66e040ec49b8c4" + } +]
\ No newline at end of file diff --git a/test/decoders/http/benchmarks/json/http_get_req_pipeline.json b/test/decoders/http/benchmarks/json/http_get_req_pipeline.json new file mode 100644 index 0000000..af8ff75 --- /dev/null +++ b/test/decoders/http/benchmarks/json/http_get_req_pipeline.json @@ -0,0 +1,68 @@ +[ + { + "__X_HTTP_TUPLE4": "192.168.40.81:52802-192.168.40.137:80-6-0" + }, + { + "__X_HTTP_TRANSACTION": "request", + "__X_HTTP_TRANSACTION_SEQ": 0, + "method": "GET", + "uri": "/aa.mp4?asf=sdaf", + "req_version": "1.1", + "major_version": 1, + "minor_version": 1, + "Host": "113.31.27.226", + "Connection": "keep-alive", + "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8", + "User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1636.2 Safari/537.36", + "Accept-Encoding": "gzip,deflate,sdch", + "Accept-Language": "zh-CN,zh;q=0.8", + "__X_HTTP_URL": "113.31.27.226/aa.mp4?asf=sdaf" + }, + { + "__X_HTTP_TRANSACTION": "request", + "__X_HTTP_TRANSACTION_SEQ": 1, + "method": "GET", + "uri": "/fetch_ldns.png", + "req_version": "1.1", + "major_version": 1, + "minor_version": 1, + "Host": "ns.pb.cachecn.net", + "Connection": "keep-alive", + "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8", + "User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1636.2 Safari/537.36", + "Accept-Encoding": "gzip,deflate,sdch", + "Accept-Language": "zh-CN,zh;q=0.8", + "__X_HTTP_URL": "ns.pb.cachecn.net/fetch_ldns.png" + }, + { + "__X_HTTP_TRANSACTION": "request", + "__X_HTTP_TRANSACTION_SEQ": 2, + "method": "GET", + "uri": "/40x.jpg", + "req_version": "1.1", + "major_version": 1, + "minor_version": 1, + "Host": "ns.pb.cachecn.net", + "Connection": "keep-alive", + "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8", + "User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1636.2 Safari/537.36", + "Accept-Encoding": "gzip,deflate,sdch", + "Accept-Language": "zh-CN,zh;q=0.8", + "__X_HTTP_URL": "ns.pb.cachecn.net/40x.jpg" + }, + { + "__X_HTTP_TRANSACTION": "response", + "__X_HTTP_TRANSACTION_SEQ": 0, + "res_version": "1.0", + "res_status": "File not found", + "major_version": 1, + "minor_version": 0, + "status_code": 404, + "Server": "SimpleHTTP/0.6 Python/2.7.5", + "Date": "Wed, 25 Oct 2023 06:43:35 GMT", + "Content-Type": "text/html", + "Connection": "close", + "__X_HTTP_RAW_PAYLOAD_MD5": "6fb335f443cfc8a9d952d27cf3dc1059", + "__X_HTTP_DECOMPRESS_PAYLOAD_MD5": "6fb335f443cfc8a9d952d27cf3dc1059" + } +]
\ No newline at end of file diff --git a/test/decoders/http/benchmarks/json/http_get_single_trans.json b/test/decoders/http/benchmarks/json/http_get_single_trans.json new file mode 100644 index 0000000..165bb65 --- /dev/null +++ b/test/decoders/http/benchmarks/json/http_get_single_trans.json @@ -0,0 +1,34 @@ +[ + { + "__X_HTTP_TUPLE4": "192.168.38.73:50806-192.168.40.137:80-6-0" + }, + { + "__X_HTTP_TRANSACTION": "request", + "__X_HTTP_TRANSACTION_SEQ": 0, + "method": "GET", + "uri": "/index.html", + "req_version": "1.1", + "major_version": 1, + "minor_version": 1, + "Host": "192.168.40.137", + "User-Agent": "curl/7.79.1", + "Accept": "*/*", + "__X_HTTP_URL": "192.168.40.137/index.html" + }, + { + "__X_HTTP_TRANSACTION": "response", + "__X_HTTP_TRANSACTION_SEQ": 0, + "res_version": "1.0", + "res_status": "OK", + "major_version": 1, + "minor_version": 0, + "status_code": 200, + "Server": "SimpleHTTP/0.6 Python/2.7.5", + "Date": "Thu, 30 Nov 2023 08:42:24 GMT", + "Content-type": "text/html", + "Content-Length": "144", + "Last-Modified": "Thu, 30 Nov 2023 08:38:54 GMT", + "__X_HTTP_RAW_PAYLOAD_MD5": "3e11876cd3a234541ae37d833c088a76", + "__X_HTTP_DECOMPRESS_PAYLOAD_MD5": "3e11876cd3a234541ae37d833c088a76" + } +]
\ No newline at end of file diff --git a/test/decoders/http/benchmarks/json/http_gzip_out_of_order.json b/test/decoders/http/benchmarks/json/http_gzip_out_of_order.json new file mode 100644 index 0000000..1952b9d --- /dev/null +++ b/test/decoders/http/benchmarks/json/http_gzip_out_of_order.json @@ -0,0 +1,39 @@ +[ + { + "__X_HTTP_TUPLE4": "192.168.61.10:2064-192.168.40.139:8088-6-0" + }, + { + "__X_HTTP_TRANSACTION": "request", + "__X_HTTP_TRANSACTION_SEQ": 0, + "method": "GET", + "uri": "/", + "req_version": "1.1", + "major_version": 1, + "minor_version": 1, + "Host": "192.168.40.139:8088", + "Connection": "keep-alive", + "DNT": "1", + "Upgrade-Insecure-Requests": "1", + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 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.7", + "Accept-Encoding": "gzip, deflate", + "Accept-Language": "zh-CN,zh;q=0.9", + "__X_HTTP_URL": "192.168.40.139:8088/" + }, + { + "__X_HTTP_TRANSACTION": "response", + "__X_HTTP_TRANSACTION_SEQ": 0, + "res_version": "1.0", + "res_status": "OK", + "major_version": 1, + "minor_version": 0, + "status_code": 200, + "Server": "BaseHTTP/0.6 Python/3.6.8", + "Date": "Tue, 13 Aug 2024 14:21:42 GMT", + "Content-type": "text/html; charset=utf-8", + "Content-Encoding": "gzip", + "Content-length": "28425", + "__X_HTTP_RAW_PAYLOAD_MD5": "873ed9c8c691a5f9f144fbf0fbfca011", + "__X_HTTP_DECOMPRESS_PAYLOAD_MD5": "7047cf4ae8ce6fd7bcd363e2b626f338" + } +]
\ No newline at end of file diff --git a/test/decoders/http/benchmarks/json/http_hdr_truncated_after_kv.json b/test/decoders/http/benchmarks/json/http_hdr_truncated_after_kv.json new file mode 100644 index 0000000..01ec6bd --- /dev/null +++ b/test/decoders/http/benchmarks/json/http_hdr_truncated_after_kv.json @@ -0,0 +1,311 @@ +[ + { + "__X_HTTP_TUPLE4": "196.188.112.76.51494>23.246.50.149.80" + }, + { + "__X_HTTP_TRANSACTION": "request", + "__X_HTTP_TRANSACTION_SEQ": 0, + "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®=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_HTTP_URL": "occ-0-778-360.1.nflxso.net/dnm/api/v6/Da_vleYcahiCE7JMYt8LJRyoenc/AAAABQSwLpJi-yDFZ7k9eqarY3x3-b99vNxxOt5xDeIOapZB6Y5QXPSa54b7cbWYTXYdFimDKCeJ4s7ngqpqByvtt0aLh85nSucLTcR3-OKleuNwVltHUscQhSgVfHc.jpg?r=392", + "X-Gibbon-Cache-Control": "max-age=2592000, priority=4, key=/dnm/api/v6/Da_vleYcahiCE7JMYt8LJRyoenc/AAAABQSwLpJi-yDFZ7k9eqarY3x3-b99vNxxOt5xDeIOapZB6Y5QXPSa54b7cbWYTXYdFimDKCeJ4s7ngqpqByvtt0aLh85nSucLTcR3-OKleuNwVltHUscQhSgVfHc.jpg?r=392" + }, + { + "__X_HTTP_TRANSACTION": "request", + "__X_HTTP_TRANSACTION_SEQ": 1, + "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®=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_HTTP_URL": "occ-0-778-360.1.nflxso.net/dnm/api/v6/Da_vleYcahiCE7JMYt8LJRyoenc/AAAABUWN8S1k3yM2coX2bwxbP699Jdr0BUqBRzIfiAJXKC5Ywt7DXqJOCjrBSYs36Tny8277IXm2BF_cgTmY18NJlocglKjhaoJhFeGoIg1cwntFduyxyRPP2EJQL5Y.jpg?r=e0e", + "X-Gibbon-Cache-Control": "max-age=2592000, priority=4, key=/dnm/api/v6/Da_vleYcahiCE7JMYt8LJRyoenc/AAAABUWN8S1k3yM2coX2bwxbP699Jdr0BUqBRzIfiAJXKC5Ywt7DXqJOCjrBSYs36Tny8277IXm2BF_cgTmY18NJlocglKjhaoJhFeGoIg1cwntFduyxyRPP2EJQL5Y.jpg?r=e0e" + }, + { + "__X_HTTP_TRANSACTION": "request", + "__X_HTTP_TRANSACTION_SEQ": 2, + "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®=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", + "__X_HTTP_URL": "occ-0-778-360.1.nflxso.net/dnm/api/v6/Da_vleYcahiCE7JMYt8LJRyoenc/AAAABR1YQS01SaHGzoxgWBJF1Gas0Gv9_DPebb4irdCTRjcQ_FUaVbXFTTrJ68_bvJds1sb28VMq22Qn3oSSKKJ7DdLN8ybgkJooYlCD3gAntrqgIFugqv5Z3kV8rRE.jpg?r=ec7", + "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" + }, + { + "__X_HTTP_TRANSACTION": "response", + "__X_HTTP_TRANSACTION_SEQ": 0, + "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\"", + "__X_HTTP_DECOMPRESS_PAYLOAD_MD5": "c289a42885b30107ad119e2a6e405e4d" + }, + { + "__X_HTTP_TRANSACTION": "request", + "__X_HTTP_TRANSACTION_SEQ": 3, + "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", + "__X_HTTP_URL": "occ-0-778-360.1.nflxso.net/dnm/api/v6/Da_vleYcahiCE7JMYt8LJRyoenc/AAAABYo5IGwDn1LaWbeaa7amS0JhH3bU5MEVlcBsC4OK0mGbea97_xoi8EbqJt8_Zp0bMuuKPE80qUUjb4wq5po_lBtulA.jpg?r=c83", + "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®=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" + }, + { + "__X_HTTP_TRANSACTION": "request", + "__X_HTTP_TRANSACTION_SEQ": 4, + "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", + "__X_HTTP_URL": "occ-0-778-360.1.nflxso.net/dnm/api/v6/Da_vleYcahiCE7JMYt8LJRyoenc/AAAABaYF3Rmi954cg6Afu9jOtirnvF3iIMHPZCCnP34eDeYQXfRGG9Vg0qgn7hHpMVV4jOr8OZmcD2Nb7MhQv6gl-fNmVQ.jpg?r=257", + "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®=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" + }, + { + "__X_HTTP_TRANSACTION": "request", + "__X_HTTP_TRANSACTION_SEQ": 5, + "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", + "__X_HTTP_URL": "occ-0-778-360.1.nflxso.net/dnm/api/v6/Da_vleYcahiCE7JMYt8LJRyoenc/AAAABfC-ByjFJSfWZf7MFtjVl3ONnaQ69824xWP1l-cpAFGgAfaNFk4XR9uoHNWwnbG8N2UVDctVKz0a4Uyv0mEnC2kI9Q.jpg?r=532", + "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®=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" + }, + { + "__X_HTTP_TRANSACTION": "request", + "__X_HTTP_TRANSACTION_SEQ": 6, + "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", + "__X_HTTP_URL": "occ-0-778-360.1.nflxso.net/dnm/api/v6/Da_vleYcahiCE7JMYt8LJRyoenc/AAAABSyGFXaB0IqQ6VR92uKMi38mNtoz7eeWxDziAf9VYKfauhh5Qo7FnnCRb31ff6Ez9yTXsqRszsGuz0GA9FVDf_NLn-9F60IcUHm59J73eYX6BD0h4wLLK0Da6YM.jpg?r=aaa", + "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®=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" + }, + { + "__X_HTTP_TRANSACTION": "request", + "__X_HTTP_TRANSACTION_SEQ": 7, + "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", + "__X_HTTP_URL": "occ-0-778-360.1.nflxso.net/dnm/api/v6/Da_vleYcahiCE7JMYt8LJRyoenc/AAAABZbHXQr7bRUpSQ2vQe8F8p3xODTJjUbSjEcLgQrFVyGsPgQT1GVhqGWFetJhebcGrVeZGOTmQ3qvHTe9eBRJdjFsVg.jpg?r=723", + "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®=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" + }, + { + "__X_HTTP_TRANSACTION": "response", + "__X_HTTP_TRANSACTION_SEQ": 1, + "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\"", + "__X_HTTP_DECOMPRESS_PAYLOAD_MD5": "35d56b6a0ef3b5857013f44620bd8888" + }, + { + "__X_HTTP_TRANSACTION": "response", + "__X_HTTP_TRANSACTION_SEQ": 2, + "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\"", + "__X_HTTP_DECOMPRESS_PAYLOAD_MD5": "bb83961ad5fe366dcbb5240ead69f650" + }, + { + "__X_HTTP_TRANSACTION": "response", + "__X_HTTP_TRANSACTION_SEQ": 3, + "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\"", + "__X_HTTP_DECOMPRESS_PAYLOAD_MD5": "c5be6a7137482da270bb2adc8d44a28d" + }, + { + "__X_HTTP_TRANSACTION": "response", + "__X_HTTP_TRANSACTION_SEQ": 4, + "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\"", + "__X_HTTP_DECOMPRESS_PAYLOAD_MD5": "61bec96775876749bb57139f86f6b0ca" + }, + { + "__X_HTTP_TRANSACTION": "response", + "__X_HTTP_TRANSACTION_SEQ": 5, + "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\"", + "__X_HTTP_DECOMPRESS_PAYLOAD_MD5": "841065529f1e89eabd0ef235a3d3291c" + }, + { + "__X_HTTP_TRANSACTION": "response", + "__X_HTTP_TRANSACTION_SEQ": 6, + "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\"", + "__X_HTTP_DECOMPRESS_PAYLOAD_MD5": "21d4b2c21a3a2f26ba665670e8513940" + }, + { + "__X_HTTP_TRANSACTION": "request", + "__X_HTTP_TRANSACTION_SEQ": 8, + "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®=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_HTTP_URL": "occ-0-778-360.1.nflxso.net/dnm/api/v6/Da_vleYcahiCE7JMYt8LJRyoenc/AAAABSFXjTUaVrddq_nehO4yuLziSjuekxJuv3oEsyUpmt3oK3InJcXjtZUHrBBuu0EP05WRC8wFVe78VtxtW_ZuZQ65MIcApb0oZF4JoFlHHnv363RbgJn898Q4tQc.jpg?r=590", + "X-Gibbon-Cache-Control": "max-age=2592000, priority=4, key=/dnm/api/v6/Da_vleYcahiCE7JMYt8LJRyoenc/AAAABSFXjTUaVrddq_nehO4yuLziSjuekxJuv3oEsyUpmt3oK3InJcXjtZUHrBBuu0EP05WRC8wFVe78VtxtW_ZuZQ65MIcApb0oZF4JoFlHHnv363RbgJn898Q4tQc.jpg?r=590" + }, + { + "__X_HTTP_TRANSACTION": "response", + "__X_HTTP_TRANSACTION_SEQ": 7, + "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": "14215", + "Connection": "keep-alive", + "Cache-Control": "max-age=2592000", + "Last-Modified": "Thu, 11 Nov 2021 17:32:01 GMT", + "ETag": "\"837a2051f7d0f2899baf54ff20b3d9ad\"", + "__X_HTTP_DECOMPRESS_PAYLOAD_MD5": "f18a76ecf35648cb46ea6f42e4391cb8" + } +]
\ No newline at end of file diff --git a/test/decoders/http/benchmarks/json/http_hdr_truncated_in_kv.json b/test/decoders/http/benchmarks/json/http_hdr_truncated_in_kv.json new file mode 100644 index 0000000..66edef3 --- /dev/null +++ b/test/decoders/http/benchmarks/json/http_hdr_truncated_in_kv.json @@ -0,0 +1,53 @@ +[ + { + "__X_HTTP_TUPLE4": "196.190.248.93.32727>94.130.141.49.80" + }, + { + "__X_HTTP_TRANSACTION": "request", + "__X_HTTP_TRANSACTION_SEQ": 0, + "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", + "__X_HTTP_URL": "tsyndicate.com/iframes2/e38f4959d33f4fa390045b0d7123997d.html?subid=65843620" + }, + { + "__X_HTTP_TRANSACTION": "response", + "__X_HTTP_TRANSACTION_SEQ": 0, + "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", + "__X_HTTP_DECOMPRESS_PAYLOAD_MD5": "075802aa31b42d465d56b213915fb0a2" + } +]
\ No newline at end of file diff --git a/test/decoders/http/benchmarks/json/http_hdr_value_empty.json b/test/decoders/http/benchmarks/json/http_hdr_value_empty.json new file mode 100644 index 0000000..86ac4a5 --- /dev/null +++ b/test/decoders/http/benchmarks/json/http_hdr_value_empty.json @@ -0,0 +1,36 @@ +[ + { + "__X_HTTP_TUPLE4": "192.168.131.33.47164>192.168.204.67.4445" + }, + { + "__X_HTTP_TRANSACTION": "request", + "__X_HTTP_TRANSACTION_SEQ": 0, + "method": "POST", + "uri": "http://:4445/RPC2", + "req_version": "1.1", + "major_version": 1, + "minor_version": 1, + "User-Agent": "ulxmlrpcpp/1.7.5", + "Connection": "Close", + "Content-Type": "text/xml", + "Date": "Sat Sep 7 10:04:57 2019", + "Content-Length": "468", + "__X_HTTP_URL": ":4445/RPC2", + "__X_HTTP_DECOMPRESS_PAYLOAD_MD5": "033e27f72bc41b4a7e222df464749420" + }, + { + "__X_HTTP_TRANSACTION": "response", + "__X_HTTP_TRANSACTION_SEQ": 0, + "res_version": "1.1", + "res_status": "OK", + "major_version": 1, + "minor_version": 1, + "status_code": 200, + "Connection": "Close", + "Content-Type": "text/xml", + "Transfer-Encoding": "chunked", + "X-Powered-By": "ulxmlrpcpp/1.7.4", + "Date": "Sat Sep 7 01:09:08 2019", + "__X_HTTP_DECOMPRESS_PAYLOAD_MD5": "69db29507d10b0d57fcaa5afffd81934" + } +]
\ No newline at end of file diff --git a/test/decoders/http/benchmarks/json/http_hdrs_exceed_maximum.json b/test/decoders/http/benchmarks/json/http_hdrs_exceed_maximum.json new file mode 100644 index 0000000..9bc751b --- /dev/null +++ b/test/decoders/http/benchmarks/json/http_hdrs_exceed_maximum.json @@ -0,0 +1,51 @@ +[ + { + "__X_HTTP_TUPLE4": "10.0.0.1:61462-10.0.0.2:80-6-0" + }, + { + "__X_HTTP_TRANSACTION": "request", + "__X_HTTP_TRANSACTION_SEQ": 0, + "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=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx_cxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&c49=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&AQE=1", + "req_version": "1.1", + "major_version": 1, + "minor_version": 1, + "Host": "xxxxx.xxxxxxxx.xxxxxxxxxx.xxx", + "Connection": "keep-alive", + "Accept": "image/webp,*/*;q=0.8", + "User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36", + "Referer": "http://www.xxxxxxxxxx.xxx/xx/xxxxxxxxxxxxxxxxx/xxxxxxxxxxxxxxxxxxxxxx/xxxxxxxxxxxx.jsp", + "Accept-Encoding": "gzip,deflate,sdch", + "Accept-Language": "en-US,en;q=0.8,en-GB;q=0.6", + "__X_HTTP_URL": "xxxxx.xxxxxxxx.xxxxxxxxxx.xxx/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", + "Cookie": "xxxxxxxxxxxxxxxxxxx=ie; xxxxxxxxxxxxxxxxxxxxxx=true; lp=xxxxxx; rememberUn=false; xxx.xxxxxxxxxx.xxxxxxxxxx=xx; xxxxx=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx; autocomplete=1; xxxx=xxxx; xxxx=xxxxv1|xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx; xxxxxx=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx2xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" + }, + { + "__X_HTTP_TRANSACTION": "response", + "__X_HTTP_TRANSACTION_SEQ": 0, + "res_version": "1.1", + "res_status": "OK", + "major_version": 1, + "minor_version": 1, + "status_code": 200, + "Date": "Mon, 30 Jun 2014 13:35:21 GMT", + "Server": "xxxxxxxxxxxxxxxxx", + "Access-Control-Allow-Origin": "*", + "Set-Cookie": "xxxx=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx; Expires=Wed, 29 Jun 2016 13:35:21 GMT; Domain=.xxxxxxxxxx.xxx; Path=/", + "X-C": "ms-4.9", + "Expires": "Sun, 29 Jun 2014 13:35:21 GMT", + "Last-Modified": "Tue, 01 Jul 2014 13:35:21 GMT", + "Cache-Control": "no-cache, no-store, max-age=0, no-transform, private", + "Pragma": "no-cache", + "ETag": "\"xxxxxxxxxxxxxxxxxxxxxx\"", + "Vary": "*", + "P3P": "policyref=\"/w3c/p3p.xml\", CP=\"NOI DSP COR NID PSA OUR IND COM NAV STA\"", + "xserver": "xxxxxx", + "Content-Length": "43", + "Keep-Alive": "timeout=15", + "Connection": "Keep-Alive", + "Content-Type": "image/gif", + "__X_HTTP_RAW_PAYLOAD_MD5": "ad480fd0732d0f6f1a8b06359e3a42bb", + "__X_HTTP_DECOMPRESS_PAYLOAD_MD5": "ad480fd0732d0f6f1a8b06359e3a42bb" + } +]
\ No newline at end of file diff --git a/test/decoders/http/benchmarks/json/http_inner_tunnel_for_http.json b/test/decoders/http/benchmarks/json/http_inner_tunnel_for_http.json new file mode 100644 index 0000000..973556a --- /dev/null +++ b/test/decoders/http/benchmarks/json/http_inner_tunnel_for_http.json @@ -0,0 +1,15 @@ +[ + { + "__X_HTTP_TUPLE4": "192.168.40.139.59234>192.168.38.83.8080" + }, + { + "flow": "C2S", + "payload_block": 1, + "payload_size": 77 + }, + { + "flow": "S2C", + "payload_block": 3, + "payload_size": 2781 + } +]
\ No newline at end of file diff --git a/test/decoders/http/benchmarks/json/http_inner_tunnel_for_pop3.json b/test/decoders/http/benchmarks/json/http_inner_tunnel_for_pop3.json new file mode 100644 index 0000000..b4f9784 --- /dev/null +++ b/test/decoders/http/benchmarks/json/http_inner_tunnel_for_pop3.json @@ -0,0 +1,15 @@ +[ + { + "__X_HTTP_TUPLE4": "192.168.10.58.51798>192.168.10.144.808" + }, + { + "flow": "C2S", + "payload_block": 6, + "payload_size": 68 + }, + { + "flow": "S2C", + "payload_block": 7, + "payload_size": 1737 + } +]
\ No newline at end of file diff --git a/test/decoders/http/benchmarks/json/http_msg_type_state.json b/test/decoders/http/benchmarks/json/http_msg_type_state.json new file mode 100644 index 0000000..5dc0564 --- /dev/null +++ b/test/decoders/http/benchmarks/json/http_msg_type_state.json @@ -0,0 +1,20 @@ +[ + { + "msg_0": "HTTP_TRANSACTION_START_transaction_0", + "msg_1": "HTTP_MESSAGE_REQ_LINE", + "msg_2": "HTTP_MESSAGE_REQ_HEADER", + "msg_3": "HTTP_MESSAGE_REQ_HEADER_END", + "msg_4": "HTTP_MESSAGE_REQ_BODY_START", + "msg_5": "HTTP_MESSAGE_REQ_BODY", + "msg_6": "HTTP_MESSAGE_REQ_BODY_END" + }, + { + "msg_7": "HTTP_MESSAGE_RES_LINE", + "msg_8": "HTTP_MESSAGE_RES_HEADER", + "msg_9": "HTTP_MESSAGE_RES_HEADER_END", + "msg_10": "HTTP_MESSAGE_RES_BODY_START", + "msg_11": "HTTP_MESSAGE_RES_BODY", + "msg_12": "HTTP_MESSAGE_RES_BODY_END", + "msg_13": "HTTP_TRANSACTION_END_transaction_0" + } +]
\ No newline at end of file diff --git a/test/decoders/http/benchmarks/json/http_msg_type_state_c2s.json b/test/decoders/http/benchmarks/json/http_msg_type_state_c2s.json new file mode 100644 index 0000000..8533bb9 --- /dev/null +++ b/test/decoders/http/benchmarks/json/http_msg_type_state_c2s.json @@ -0,0 +1,13 @@ +[ + { + "msg_0": "HTTP_TRANSACTION_START_transaction_0", + "msg_1": "HTTP_MESSAGE_REQ_LINE", + "msg_2": "HTTP_MESSAGE_REQ_HEADER", + "msg_3": "HTTP_MESSAGE_REQ_HEADER_END", + "msg_4": "HTTP_MESSAGE_REQ_BODY_START", + "msg_5": "HTTP_MESSAGE_REQ_BODY", + "msg_6": "HTTP_MESSAGE_REQ_BODY_END", + "msg_7": "HTTP_TRANSACTION_END_transaction_0" + }, + {} +]
\ No newline at end of file diff --git a/test/decoders/http/benchmarks/json/http_msg_type_state_exception_c2s.json b/test/decoders/http/benchmarks/json/http_msg_type_state_exception_c2s.json new file mode 100644 index 0000000..e694238 --- /dev/null +++ b/test/decoders/http/benchmarks/json/http_msg_type_state_exception_c2s.json @@ -0,0 +1,13 @@ +[ + { + "msg_0": "HTTP_TRANSACTION_START_transaction_0", + "msg_1": "HTTP_MESSAGE_REQ_LINE", + "msg_2": "HTTP_MESSAGE_REQ_HEADER", + "msg_3": "HTTP_MESSAGE_REQ_HEADER_END", + "msg_4": "HTTP_MESSAGE_REQ_BODY_START", + "msg_5": "HTTP_MESSAGE_REQ_BODY" + }, + { + "msg_6": "HTTP_TRANSACTION_END_transaction_0" + } +]
\ No newline at end of file diff --git a/test/decoders/http/benchmarks/json/http_msg_type_state_exception_s2c.json b/test/decoders/http/benchmarks/json/http_msg_type_state_exception_s2c.json new file mode 100644 index 0000000..cf03270 --- /dev/null +++ b/test/decoders/http/benchmarks/json/http_msg_type_state_exception_s2c.json @@ -0,0 +1,16 @@ +[ + { + "msg_0": "HTTP_TRANSACTION_START_transaction_0", + "msg_1": "HTTP_MESSAGE_REQ_LINE", + "msg_2": "HTTP_MESSAGE_REQ_HEADER", + "msg_3": "HTTP_MESSAGE_REQ_HEADER_END" + }, + { + "msg_4": "HTTP_MESSAGE_RES_LINE", + "msg_5": "HTTP_MESSAGE_RES_HEADER", + "msg_6": "HTTP_MESSAGE_RES_HEADER_END", + "msg_7": "HTTP_MESSAGE_RES_BODY_START", + "msg_8": "HTTP_MESSAGE_RES_BODY", + "msg_9": "HTTP_TRANSACTION_END_transaction_0" + } +]
\ No newline at end of file diff --git a/test/decoders/http/benchmarks/json/http_msg_type_state_pipeline.json b/test/decoders/http/benchmarks/json/http_msg_type_state_pipeline.json new file mode 100644 index 0000000..d50f4ac --- /dev/null +++ b/test/decoders/http/benchmarks/json/http_msg_type_state_pipeline.json @@ -0,0 +1,61 @@ +[ + { + "msg_0": "HTTP_TRANSACTION_START_transaction_0", + "msg_1": "HTTP_MESSAGE_REQ_LINE", + "msg_2": "HTTP_MESSAGE_REQ_HEADER", + "msg_3": "HTTP_MESSAGE_REQ_HEADER_END", + "msg_8": "HTTP_TRANSACTION_START_transaction_1", + "msg_9": "HTTP_MESSAGE_REQ_LINE", + "msg_10": "HTTP_MESSAGE_REQ_HEADER", + "msg_11": "HTTP_MESSAGE_REQ_HEADER_END", + "msg_16": "HTTP_TRANSACTION_START_transaction_2", + "msg_17": "HTTP_MESSAGE_REQ_LINE", + "msg_18": "HTTP_MESSAGE_REQ_HEADER", + "msg_19": "HTTP_MESSAGE_REQ_HEADER_END", + "msg_24": "HTTP_TRANSACTION_START_transaction_3", + "msg_25": "HTTP_MESSAGE_REQ_LINE", + "msg_26": "HTTP_MESSAGE_REQ_HEADER", + "msg_27": "HTTP_MESSAGE_REQ_HEADER_END" + }, + { + "msg_4": "HTTP_MESSAGE_RES_LINE", + "msg_5": "HTTP_MESSAGE_RES_HEADER", + "msg_6": "HTTP_MESSAGE_RES_HEADER_END", + "msg_7": "HTTP_TRANSACTION_END_transaction_0", + "msg_12": "HTTP_MESSAGE_RES_LINE", + "msg_13": "HTTP_MESSAGE_RES_HEADER", + "msg_14": "HTTP_MESSAGE_RES_HEADER_END", + "msg_15": "HTTP_TRANSACTION_END_transaction_1", + "msg_20": "HTTP_MESSAGE_RES_LINE", + "msg_21": "HTTP_MESSAGE_RES_HEADER", + "msg_22": "HTTP_MESSAGE_RES_HEADER_END", + "msg_23": "HTTP_TRANSACTION_END_transaction_2", + "msg_28": "HTTP_MESSAGE_RES_LINE", + "msg_29": "HTTP_MESSAGE_RES_HEADER", + "msg_30": "HTTP_MESSAGE_RES_HEADER_END", + "msg_31": "HTTP_MESSAGE_RES_BODY_START", + "msg_32": "HTTP_MESSAGE_RES_BODY", + "msg_33": "HTTP_MESSAGE_RES_BODY", + "msg_34": "HTTP_MESSAGE_RES_BODY", + "msg_35": "HTTP_MESSAGE_RES_BODY", + "msg_36": "HTTP_MESSAGE_RES_BODY", + "msg_37": "HTTP_MESSAGE_RES_BODY", + "msg_38": "HTTP_MESSAGE_RES_BODY", + "msg_39": "HTTP_MESSAGE_RES_BODY", + "msg_40": "HTTP_MESSAGE_RES_BODY", + "msg_41": "HTTP_MESSAGE_RES_BODY", + "msg_42": "HTTP_MESSAGE_RES_BODY", + "msg_43": "HTTP_MESSAGE_RES_BODY", + "msg_44": "HTTP_MESSAGE_RES_BODY", + "msg_45": "HTTP_MESSAGE_RES_BODY", + "msg_46": "HTTP_MESSAGE_RES_BODY", + "msg_47": "HTTP_MESSAGE_RES_BODY", + "msg_48": "HTTP_MESSAGE_RES_BODY", + "msg_49": "HTTP_MESSAGE_RES_BODY", + "msg_50": "HTTP_MESSAGE_RES_BODY", + "msg_51": "HTTP_MESSAGE_RES_BODY", + "msg_52": "HTTP_MESSAGE_RES_BODY", + "msg_53": "HTTP_MESSAGE_RES_BODY_END", + "msg_54": "HTTP_TRANSACTION_END_transaction_3" + } +]
\ No newline at end of file diff --git a/test/decoders/http/benchmarks/json/http_msg_type_state_s2c.json b/test/decoders/http/benchmarks/json/http_msg_type_state_s2c.json new file mode 100644 index 0000000..c59d0bb --- /dev/null +++ b/test/decoders/http/benchmarks/json/http_msg_type_state_s2c.json @@ -0,0 +1,13 @@ +[ + {}, + { + "msg_0": "HTTP_TRANSACTION_START_transaction_0", + "msg_1": "HTTP_MESSAGE_RES_LINE", + "msg_2": "HTTP_MESSAGE_RES_HEADER", + "msg_3": "HTTP_MESSAGE_RES_HEADER_END", + "msg_4": "HTTP_MESSAGE_RES_BODY_START", + "msg_5": "HTTP_MESSAGE_RES_BODY", + "msg_6": "HTTP_MESSAGE_RES_BODY_END", + "msg_7": "HTTP_TRANSACTION_END_transaction_0" + } +]
\ No newline at end of file diff --git a/test/decoders/http/benchmarks/json/http_msg_type_state_tunnel.json b/test/decoders/http/benchmarks/json/http_msg_type_state_tunnel.json new file mode 100644 index 0000000..4a66f37 --- /dev/null +++ b/test/decoders/http/benchmarks/json/http_msg_type_state_tunnel.json @@ -0,0 +1,26 @@ +[ + { + "msg_0": "HTTP_TRANSACTION_START_transaction_0", + "msg_1": "HTTP_MESSAGE_REQ_LINE", + "msg_2": "HTTP_MESSAGE_REQ_HEADER", + "msg_3": "HTTP_MESSAGE_REQ_HEADER_END", + "msg_8": "HTTP_TRANSACTION_START_transaction_1", + "msg_9": "HTTP_MESSAGE_REQ_LINE", + "msg_10": "HTTP_MESSAGE_REQ_HEADER", + "msg_11": "HTTP_MESSAGE_REQ_HEADER_END" + }, + { + "msg_4": "HTTP_MESSAGE_RES_LINE", + "msg_5": "HTTP_MESSAGE_RES_HEADER", + "msg_6": "HTTP_MESSAGE_RES_HEADER_END", + "msg_7": "HTTP_TRANSACTION_END_transaction_0", + "msg_12": "HTTP_MESSAGE_RES_LINE", + "msg_13": "HTTP_MESSAGE_RES_HEADER", + "msg_14": "HTTP_MESSAGE_RES_HEADER_END", + "msg_15": "HTTP_MESSAGE_RES_BODY", + "msg_16": "HTTP_MESSAGE_RES_BODY", + "msg_17": "HTTP_MESSAGE_RES_BODY", + "msg_18": "HTTP_MESSAGE_RES_BODY_END", + "msg_19": "HTTP_TRANSACTION_END_transaction_1" + } +]
\ No newline at end of file diff --git a/test/decoders/http/benchmarks/json/http_msg_type_state_tunnel_c2s.json b/test/decoders/http/benchmarks/json/http_msg_type_state_tunnel_c2s.json new file mode 100644 index 0000000..5b7e588 --- /dev/null +++ b/test/decoders/http/benchmarks/json/http_msg_type_state_tunnel_c2s.json @@ -0,0 +1,15 @@ +[ + { + "msg_0": "HTTP_TRANSACTION_START_transaction_0", + "msg_1": "HTTP_MESSAGE_REQ_LINE", + "msg_2": "HTTP_MESSAGE_REQ_HEADER", + "msg_3": "HTTP_MESSAGE_REQ_HEADER_END", + "msg_4": "HTTP_TRANSACTION_END_transaction_0", + "msg_5": "HTTP_TRANSACTION_START_transaction_1", + "msg_6": "HTTP_MESSAGE_REQ_LINE", + "msg_7": "HTTP_MESSAGE_REQ_HEADER", + "msg_8": "HTTP_MESSAGE_REQ_HEADER_END", + "msg_9": "HTTP_TRANSACTION_END_transaction_1" + }, + {} +]
\ No newline at end of file diff --git a/test/decoders/http/benchmarks/json/http_msg_type_state_tunnel_s2c.json b/test/decoders/http/benchmarks/json/http_msg_type_state_tunnel_s2c.json new file mode 100644 index 0000000..07a1451 --- /dev/null +++ b/test/decoders/http/benchmarks/json/http_msg_type_state_tunnel_s2c.json @@ -0,0 +1,19 @@ +[ + {}, + { + "msg_0": "HTTP_TRANSACTION_START_transaction_0", + "msg_1": "HTTP_MESSAGE_RES_LINE", + "msg_2": "HTTP_MESSAGE_RES_HEADER", + "msg_3": "HTTP_MESSAGE_RES_HEADER_END", + "msg_4": "HTTP_TRANSACTION_END_transaction_0", + "msg_5": "HTTP_TRANSACTION_START_transaction_1", + "msg_6": "HTTP_MESSAGE_RES_LINE", + "msg_7": "HTTP_MESSAGE_RES_HEADER", + "msg_8": "HTTP_MESSAGE_RES_HEADER_END", + "msg_9": "HTTP_MESSAGE_RES_BODY", + "msg_10": "HTTP_MESSAGE_RES_BODY", + "msg_11": "HTTP_MESSAGE_RES_BODY", + "msg_12": "HTTP_MESSAGE_RES_BODY_END", + "msg_13": "HTTP_TRANSACTION_END_transaction_1" + } +]
\ No newline at end of file diff --git a/test/decoders/http/benchmarks/json/http_multi_parse_error.json b/test/decoders/http/benchmarks/json/http_multi_parse_error.json new file mode 100644 index 0000000..c49d41e --- /dev/null +++ b/test/decoders/http/benchmarks/json/http_multi_parse_error.json @@ -0,0 +1,38 @@ +[ + { + "__X_HTTP_TUPLE4": "192.168.131.33:47172-192.168.204.67:4445-6-0" + }, + { + "__X_HTTP_TRANSACTION": "request", + "__X_HTTP_TRANSACTION_SEQ": 0, + "method": "POST", + "uri": "http://:4445/RPC2", + "req_version": "1.1", + "major_version": 1, + "minor_version": 1, + "User-Agent": "ulxmlrpcpp/1.7.5", + "Connection": "Close", + "Content-Type": "text/xml", + "Date": "Sat Sep 7 10:05:13 2019", + "Content-Length": "468", + "__X_HTTP_URL": ":4445/RPC2", + "__X_HTTP_RAW_PAYLOAD_MD5": "6eccbcf261f04aabfa69884aa283f4f3", + "__X_HTTP_DECOMPRESS_PAYLOAD_MD5": "6eccbcf261f04aabfa69884aa283f4f3" + }, + { + "__X_HTTP_TRANSACTION": "response", + "__X_HTTP_TRANSACTION_SEQ": 0, + "res_version": "1.1", + "res_status": "OK", + "major_version": 1, + "minor_version": 1, + "status_code": 200, + "Connection": "Close", + "Content-Type": "text/xml", + "Transfer-Encoding": "chunked", + "X-Powered-By": "ulxmlrpcpp/1.7.4", + "Date": "Sat Sep 7 01:09:24 2019", + "__X_HTTP_RAW_PAYLOAD_MD5": "5cf8a4aa9a54e7f2d05b55ed05bf9071", + "__X_HTTP_DECOMPRESS_PAYLOAD_MD5": "5cf8a4aa9a54e7f2d05b55ed05bf9071" + } +]
\ No newline at end of file diff --git a/test/decoders/http/benchmarks/json/http_no_content_length.json b/test/decoders/http/benchmarks/json/http_no_content_length.json new file mode 100644 index 0000000..9310d04 --- /dev/null +++ b/test/decoders/http/benchmarks/json/http_no_content_length.json @@ -0,0 +1,46 @@ +[ + { + "__X_HTTP_TUPLE4": "10.0.0.1:50384-10.0.0.2:80-6-0" + }, + { + "__X_HTTP_TRANSACTION": "request", + "__X_HTTP_TRANSACTION_SEQ": 0, + "method": "GET", + "uri": "/js/xxxxxx.js", + "req_version": "1.1", + "major_version": 1, + "minor_version": 1, + "Host": "xxxxxxx.xxxxxx.xx", + "User-Agent": "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3", + "Accept": "*/*", + "Accept-Language": "en-us,en;q=0.5", + "Accept-Encoding": "gzip,deflate", + "Accept-Charset": "ISO-8859-1,utf-8;q=0.7,*;q=0.7", + "Keep-Alive": "115", + "Connection": "keep-alive", + "Referer": "http://www.xxxxxxxx.com/xxxxxxxxxxxxxxx/xxxxxxxxxxxxxxxx.html", + "Cookie": "trafic_ranking=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", + "__X_HTTP_URL": "xxxxxxx.xxxxxx.xx/js/xxxxxx.js" + }, + { + "__X_HTTP_TRANSACTION": "response", + "__X_HTTP_TRANSACTION_SEQ": 0, + "res_version": "1.0", + "res_status": "OK", + "major_version": 1, + "minor_version": 0, + "status_code": 200, + "Date": "Mon, 10 May 2010 08:31:02 GMT", + "Server": "Apache", + "Content-type": "application/x-javascript", + "Expires": "Thu, 11 Jan 1973 16:00:00 GMT", + "Last-Modified": "Mon, 10 May 2010 08:31:02 GMT", + "Cache-Control": "no-store, no-cache, must-revalidate, post-check=0, pre-check=0", + "Pragma": "no-cache", + "P3P": "policyref=\"/w3c/p3p.xml\", CP=\"ALL IND DSP COR ADM CONo CUR IVAo IVDo PSA PSD TAI TELo OUR SAMo CNT COM INT NAV ONL PHY PRE PUR UNI\"", + "Set-Cookie": "trafic_ranking=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx; expires=Sun, 11-Jan-2037 14:00:00 GMT; path=/; domain=.xxxxxx.xx", + "connection": "close", + "__X_HTTP_RAW_PAYLOAD_MD5": "9fb54a2726ca3cf54a82804d0e66d08a", + "__X_HTTP_DECOMPRESS_PAYLOAD_MD5": "9fb54a2726ca3cf54a82804d0e66d08a" + } +]
\ No newline at end of file diff --git a/test/decoders/http/benchmarks/json/http_out_of_order.json b/test/decoders/http/benchmarks/json/http_out_of_order.json new file mode 100644 index 0000000..489b7c1 --- /dev/null +++ b/test/decoders/http/benchmarks/json/http_out_of_order.json @@ -0,0 +1,44 @@ +[ + { + "__X_HTTP_TUPLE4": "192.168.38.2:49243-202.96.17.37:80-6-0" + }, + { + "__X_HTTP_TRANSACTION": "request", + "__X_HTTP_TRANSACTION_SEQ": 0, + "method": "GET", + "uri": "/cn/images/globesite/airchina.jpg", + "req_version": "1.1", + "major_version": 1, + "minor_version": 1, + "Host": "www.airchina.com", + "Connection": "keep-alive", + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36", + "DNT": "1", + "Accept": "image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", + "Referer": "http://www.airchina.com/website/ip2.jsp?v=20230128", + "Accept-Encoding": "gzip, deflate", + "Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8", + "Cookie": "_ga=GA1.2.1223391296.1710844147; _ga_CGYVD7S4G4=GS1.1.1711101500.1.1.1711101524.0.0.0; _gcl_au=1.1.45985360.1720059434; arialoadData=true; ariawapChangeViewPort=false; JSESSIONID=ZoFJbBlIeHCsA5414j6JC-vO6jvcBw7_xphcV3qerj5Q8htV6XH8!-1677015109", + "__X_HTTP_URL": "www.airchina.com/cn/images/globesite/airchina.jpg" + }, + { + "__X_HTTP_TRANSACTION": "response", + "__X_HTTP_TRANSACTION_SEQ": 0, + "res_version": "1.1", + "res_status": "OK", + "major_version": 1, + "minor_version": 1, + "status_code": 200, + "Date": "Tue, 13 Aug 2024 01:48:28 GMT", + "Server": "Apache", + "X-Frame-Options": "SAMEORIGIN", + "Last-Modified": "Tue, 06 Aug 2019 02:10:09 GMT", + "Accept-Ranges": "bytes", + "Content-Length": "67424", + "Keep-Alive": "timeout=120, max=1000", + "Connection": "Keep-Alive", + "Content-Type": "image/jpeg", + "__X_HTTP_RAW_PAYLOAD_MD5": "c4c9d459415e922f877a2af6afd9d316", + "__X_HTTP_DECOMPRESS_PAYLOAD_MD5": "c4c9d459415e922f877a2af6afd9d316" + } +]
\ No newline at end of file diff --git a/test/decoders/http/benchmarks/json/http_over_pppoe.json b/test/decoders/http/benchmarks/json/http_over_pppoe.json new file mode 100644 index 0000000..b4b4bfb --- /dev/null +++ b/test/decoders/http/benchmarks/json/http_over_pppoe.json @@ -0,0 +1,36 @@ +[ + { + "__X_HTTP_TUPLE4": "2a00:5e80:101:212d:504:7b1:2572:db22:37034-2606:f200:0:7:bad:f00d:d00d:1:80-6-0" + }, + { + "__X_HTTP_TRANSACTION": "request", + "__X_HTTP_TRANSACTION_SEQ": 0, + "method": "GET", + "uri": "/", + "req_version": "1.1", + "major_version": 1, + "minor_version": 1, + "User-Agent": "curl/7.34.0", + "Host": "ipv6.icanhazip.com", + "Accept": "*/*", + "__X_HTTP_URL": "ipv6.icanhazip.com/" + }, + { + "__X_HTTP_TRANSACTION": "response", + "__X_HTTP_TRANSACTION_SEQ": 0, + "res_version": "1.1", + "res_status": "OK", + "major_version": 1, + "minor_version": 1, + "status_code": 200, + "Date": "Thu, 02 Jan 2014 08:38:06 GMT", + "Server": "Apache", + "Content-Length": "38", + "Content-Type": "text/plain; charset=UTF-8", + "X-RTFM": "Learn about this site at http://bit.ly/14DAh2o and don't abuse the service", + "X-YOU-SHOULD-APPLY-FOR-A-JOB": "If you're reading this, apply here: http://rackertalent.com/", + "X-ICANHAZNODE": "icanhazip1.nugget", + "__X_HTTP_RAW_PAYLOAD_MD5": "624520ac54235ac2284ed2dd2b17e1ad", + "__X_HTTP_DECOMPRESS_PAYLOAD_MD5": "624520ac54235ac2284ed2dd2b17e1ad" + } +]
\ No newline at end of file diff --git a/test/decoders/http/benchmarks/json/http_over_tcp_keepalive.json b/test/decoders/http/benchmarks/json/http_over_tcp_keepalive.json new file mode 100644 index 0000000..2754249 --- /dev/null +++ b/test/decoders/http/benchmarks/json/http_over_tcp_keepalive.json @@ -0,0 +1,45 @@ +[ + { + "__X_HTTP_TUPLE4": "192.168.56.66:55356-60.190.243.167:80-6-0" + }, + { + "__X_HTTP_TRANSACTION": "request", + "__X_HTTP_TRANSACTION_SEQ": 0, + "method": "GET", + "uri": "/", + "req_version": "1.1", + "major_version": 1, + "minor_version": 1, + "Host": "www.yumi.com", + "Connection": "keep-alive", + "Cache-Control": "max-age=0", + "Upgrade-Insecure-Requests": "1", + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.61 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", + "Accept-Encoding": "gzip, deflate", + "Accept-Language": "zh-CN,zh;q=0.9", + "Cookie": "UM_distinctid=17d37645f9c1a1-0281befa480414-b7a1a38-144000-17d37645f9d336; CNZZDATA1258295942=1778021578-1637307701-%7C1637307701; Hm_lvt_a6dc86f6e27435039966e994bd7f0792=1637311872; yumi_sid=JaMlFyTA07ikpZjTHZsRTWyGdMqFyFy%2B4hXGj%2FSoQRJYbrfBUQuOTIMZ8jUGmugDC594AYcbeRhg75xidhRxCW4zq9Y0gPwTmkhq4LQuprp4DrtDMLI3L5wLMqkG%2FuAX1aVFPfud5GRNxNFTSp%2Bos%2FKhfCFKhfN5%2BuT2xyVYSAjy2ftiSOGDi7FN13icuuyPhFCoWqOxWVu1CZ3AiYPJssv6kXqiR6paf75icdeROZY2bkFCDKkcIQcPy7o9EKpkL1Mbimeb40JMg9hUsWdmyhDkzVjSHJmC4z2ujpzSDTsjRIQOnxTy1PHZi%2FMwg3uyGLCusDwqbagpO4pcgEJ5ONDy%2BGwO7FmHXU3mFfR56c9HxxiiuLPnBt9ErpqqWKsxH6lUrlHaUp6AzyrgX7PFdksiMfPSk6%2F3%2FWOYr%2FkYuI4fopw7z8%2FLhxC9AiLr9Czz3MngFUGzkmaMVvAhZOSPzg%3D%3D; Hm_lpvt_a6dc86f6e27435039966e994bd7f0792=1637313847", + "__X_HTTP_URL": "www.yumi.com/" + }, + { + "__X_HTTP_TRANSACTION": "response", + "__X_HTTP_TRANSACTION_SEQ": 0, + "res_version": "1.1", + "res_status": "OK", + "major_version": 1, + "minor_version": 1, + "status_code": 200, + "Server": "Tengine", + "Date": "Fri, 19 Nov 2021 09:57:40 GMT", + "Content-Type": "text/html", + "Transfer-Encoding": "chunked", + "Connection": "keep-alive", + "Vary": "Accept-Encoding", + "Set-Cookie": "yumi_sid=V6EhlyovLp46BBzQWLVOBg%2F73RUD5E%2FfaRlkR8RLa8aKhGrPVdVHvHfFWRKKd9wZ%2BfFF4Tb2wnVOOn%2F9iXbBpyHsbxjmUqnbFSoAX7QIJjt%2BEEjAL3M7O7VSpAyMnrFKt7qu46oXV%2B6teyyTUY7Ucy285v6otvZcu8bN%2B5YxKZ1gYh56iJ0bHxnrnQ0vvAx3l%2BLwfw2y0c5IaF2tjrL%2Fn83nrHsPoYYRWAR2zLIXD%2FEMKRtyerwsM5LKhZZteFGWD2w%2B15alKF5T65i0lPvPcAdaqpceL5xz23twQULhs1tIJsOfJZ8JudLlRy6x3DvxQYqRe2xTCex5c77zJqfq%2FdryNbBycIq9gf6C2hXDRwDqRqVgXDMadwGnooKFkv%2ByCbohjHyBCZJypBcYFmglYhin23UC9i%2B%2BOA%2FxhlxcnU8kT8udpTNCktSmF950SQLOmvdvYuXGydKs8v05cxe5fg%3D%3D; expires=Fri, 19-Nov-2021 11:57:38 GMT; Max-Age=7200; path=/; domain=.yumi.com", + "Pragma": "no-cache", + "Cache-Control": "no-store", + "Content-Encoding": "gzip", + "__X_HTTP_RAW_PAYLOAD_MD5": "3f80dc84438b2f2d6b5e58084e31671c", + "__X_HTTP_DECOMPRESS_PAYLOAD_MD5": "af9b1a0118edd2920db355f9eee4ab75" + } +]
\ No newline at end of file diff --git a/test/decoders/http/benchmarks/json/http_over_tls.json b/test/decoders/http/benchmarks/json/http_over_tls.json new file mode 100644 index 0000000..32960f8 --- /dev/null +++ b/test/decoders/http/benchmarks/json/http_over_tls.json @@ -0,0 +1,2 @@ +[ +]
\ No newline at end of file diff --git a/test/decoders/http/benchmarks/json/http_pipeline_header_splitting.json b/test/decoders/http/benchmarks/json/http_pipeline_header_splitting.json new file mode 100644 index 0000000..bebfa94 --- /dev/null +++ b/test/decoders/http/benchmarks/json/http_pipeline_header_splitting.json @@ -0,0 +1,69 @@ +[ + { + "__X_HTTP_TUPLE4": "127.0.0.1:44980-127.0.0.1:8080-6-0" + }, + { + "__X_HTTP_TRANSACTION": "request", + "__X_HTTP_TRANSACTION_SEQ": 0, + "method": "GET", + "uri": "/111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111.html", + "req_version": "1.1", + "major_version": 1, + "minor_version": 1, + "Host": "127.0.0.1:8080 ", + "User-Agent": "curl/7.61.111", + "Accept": "*/*", + "-X-header1": "value111", + "-X-header2": "value222", + "-X-header3": "value333", + "-X-header4": "value444", + "-X-header5": "value5555", + "__X_HTTP_URL": "127.0.0.1:8080 /111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111.html" + }, + { + "__X_HTTP_TRANSACTION": "response", + "__X_HTTP_TRANSACTION_SEQ": 0, + "res_version": "1.1", + "res_status": "OK", + "major_version": 1, + "minor_version": 1, + "status_code": 200, + "Server": "BaseHTTP/0.6 Python/3.6.88", + "Date": "Sun, 01 Sep 2024 07:31:09 GMTT", + "Content-length": "88", + "__X_HTTP_RAW_PAYLOAD_MD5": "c396b63d897591e928fae959915e9ebc", + "__X_HTTP_DECOMPRESS_PAYLOAD_MD5": "c396b63d897591e928fae959915e9ebc" + }, + { + "__X_HTTP_TRANSACTION": "request", + "__X_HTTP_TRANSACTION_SEQ": 1, + "method": "GET", + "uri": "/2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222.html", + "req_version": "1.1", + "major_version": 1, + "minor_version": 1, + "Host": "127.0.0.1:8080", + "User-Agent": "curl/7.61.1", + "Accept": "*/*", + "-X-header1": "value111", + "-X-header2": "value2222", + "-X-header3": "value3333", + "-X-header4": "value4444", + "-X-header5": "value55555", + "__X_HTTP_URL": "127.0.0.1:8080/2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222.html" + }, + { + "__X_HTTP_TRANSACTION": "response", + "__X_HTTP_TRANSACTION_SEQ": 1, + "res_version": "1.1", + "res_status": "OK", + "major_version": 1, + "minor_version": 1, + "status_code": 200, + "Server": "BaseHTTP/0.6 Python/3.6.88", + "Date": "Sun, 01 Sep 2024 07:31:09 GMTT", + "Content-length": "89", + "__X_HTTP_RAW_PAYLOAD_MD5": "5e3c5a7de2696e52ef42d9ccfd8ce831", + "__X_HTTP_DECOMPRESS_PAYLOAD_MD5": "5e3c5a7de2696e52ef42d9ccfd8ce831" + } +]
\ No newline at end of file diff --git a/test/decoders/http/benchmarks/json/http_post_multipart_form_data.json b/test/decoders/http/benchmarks/json/http_post_multipart_form_data.json new file mode 100644 index 0000000..ac524f6 --- /dev/null +++ b/test/decoders/http/benchmarks/json/http_post_multipart_form_data.json @@ -0,0 +1,108 @@ +[ + { + "__X_HTTP_TUPLE4": "192.168.8.97:11371-192.168.57.14:8080-6-0" + }, + { + "__X_HTTP_TRANSACTION": "request", + "__X_HTTP_TRANSACTION_SEQ": 0, + "method": "GET", + "uri": "/fileupload/", + "req_version": "1.1", + "major_version": 1, + "minor_version": 1, + "Host": "192.168.57.14:8080", + "Connection": "keep-alive", + "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8", + "User-Agent": "Mozilla/5.0 (Windows NT 5.2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.154 Safari/537.36", + "Accept-Encoding": "gzip,deflate,sdch", + "Accept-Language": "zh-CN,zh;q=0.8", + "Cookie": "JSESSIONID=969AC5FBD069EE6218EB10513726B244; JSESSIONID=400CC78DF5784F303702CC7F02C6122C", + "__X_HTTP_URL": "192.168.57.14:8080/fileupload/" + }, + { + "__X_HTTP_TRANSACTION": "response", + "__X_HTTP_TRANSACTION_SEQ": 0, + "res_version": "1.1", + "res_status": "OK", + "major_version": 1, + "minor_version": 1, + "status_code": 200, + "Server": "Apache-Coyote/1.1", + "Content-Type": "text/html;charset=UTF-8", + "Content-Length": "468", + "Date": "Thu, 28 Mar 2019 08:13:33 GMT", + "__X_HTTP_RAW_PAYLOAD_MD5": "2b8cd757ab5ffba85acac26c008a1ffc", + "__X_HTTP_DECOMPRESS_PAYLOAD_MD5": "2b8cd757ab5ffba85acac26c008a1ffc" + }, + { + "__X_HTTP_TRANSACTION": "request", + "__X_HTTP_TRANSACTION_SEQ": 1, + "method": "GET", + "uri": "/fileupload/", + "req_version": "1.1", + "major_version": 1, + "minor_version": 1, + "Host": "192.168.57.14:8080", + "Connection": "keep-alive", + "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8", + "User-Agent": "Mozilla/5.0 (Windows NT 5.2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.154 Safari/537.36", + "Accept-Encoding": "gzip,deflate,sdch", + "Accept-Language": "zh-CN,zh;q=0.8", + "Cookie": "JSESSIONID=969AC5FBD069EE6218EB10513726B244; JSESSIONID=400CC78DF5784F303702CC7F02C6122C", + "__X_HTTP_URL": "192.168.57.14:8080/fileupload/" + }, + { + "__X_HTTP_TRANSACTION": "response", + "__X_HTTP_TRANSACTION_SEQ": 1, + "res_version": "1.1", + "res_status": "OK", + "major_version": 1, + "minor_version": 1, + "status_code": 200, + "Server": "Apache-Coyote/1.1", + "Content-Type": "text/html;charset=UTF-8", + "Content-Length": "468", + "Date": "Thu, 28 Mar 2019 08:13:33 GMT", + "__X_HTTP_RAW_PAYLOAD_MD5": "2b8cd757ab5ffba85acac26c008a1ffc", + "__X_HTTP_DECOMPRESS_PAYLOAD_MD5": "2b8cd757ab5ffba85acac26c008a1ffc" + }, + { + "__X_HTTP_TRANSACTION": "request", + "__X_HTTP_TRANSACTION_SEQ": 2, + "method": "POST", + "uri": "/fileupload/servlet/UploadHandleServlet", + "req_version": "1.1", + "major_version": 1, + "minor_version": 1, + "Host": "192.168.57.14:8080", + "Connection": "keep-alive", + "Content-Length": "449", + "Cache-Control": "max-age=0", + "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8", + "Origin": "http://192.168.57.14:8080", + "User-Agent": "Mozilla/5.0 (Windows NT 5.2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.154 Safari/537.36", + "Content-Type": "multipart/form-data; boundary=----WebKitFormBoundaryAe47vGj7ybAe6RwO", + "Referer": "http://192.168.57.14:8080/fileupload/", + "Accept-Encoding": "gzip,deflate,sdch", + "Accept-Language": "zh-CN,zh;q=0.8", + "Cookie": "JSESSIONID=969AC5FBD069EE6218EB10513726B244; JSESSIONID=400CC78DF5784F303702CC7F02C6122C", + "__X_HTTP_URL": "192.168.57.14:8080/fileupload/servlet/UploadHandleServlet", + "__X_HTTP_RAW_PAYLOAD_MD5": "550be33bf0ac01b6f7ac175bb8f4522a", + "__X_HTTP_DECOMPRESS_PAYLOAD_MD5": "550be33bf0ac01b6f7ac175bb8f4522a" + }, + { + "__X_HTTP_TRANSACTION": "response", + "__X_HTTP_TRANSACTION_SEQ": 2, + "res_version": "1.1", + "res_status": "OK", + "major_version": 1, + "minor_version": 1, + "status_code": 200, + "Server": "Apache-Coyote/1.1", + "Content-Type": "text/html;charset=UTF-8", + "Content-Length": "144", + "Date": "Thu, 28 Mar 2019 08:13:37 GMT", + "__X_HTTP_RAW_PAYLOAD_MD5": "3fa07f3ec9f9fefed96e9886f80760bb", + "__X_HTTP_DECOMPRESS_PAYLOAD_MD5": "3fa07f3ec9f9fefed96e9886f80760bb" + } +]
\ No newline at end of file diff --git a/test/decoders/http/benchmarks/json/http_post_single_trans.json b/test/decoders/http/benchmarks/json/http_post_single_trans.json new file mode 100644 index 0000000..823c310 --- /dev/null +++ b/test/decoders/http/benchmarks/json/http_post_single_trans.json @@ -0,0 +1,38 @@ +[ + { + "__X_HTTP_TUPLE4": "192.168.38.83.55186>192.168.40.139.8080" + }, + { + "__X_HTTP_TRANSACTION": "request", + "__X_HTTP_TRANSACTION_SEQ": 0, + "method": "POST", + "uri": "/", + "req_version": "1.1", + "major_version": 1, + "minor_version": 1, + "Content-Type": "application/json", + "User-Agent": "PostmanRuntime/7.37.3", + "Accept": "*/*", + "Cache-Control": "no-cache", + "Postman-Token": "71a004ad-901b-4461-ac3c-db9adb303c47", + "Host": "192.168.40.139:8080", + "Accept-Encoding": "gzip, deflate, br", + "Connection": "keep-alive", + "Content-Length": "26", + "__X_HTTP_URL": "192.168.40.139:8080/", + "__X_HTTP_DECOMPRESS_PAYLOAD_MD5": "5ffe2871e6d5f6ee25ad7c1bfdd9f7b3" + }, + { + "__X_HTTP_TRANSACTION": "response", + "__X_HTTP_TRANSACTION_SEQ": 0, + "res_version": "1.0", + "res_status": "OK", + "major_version": 1, + "minor_version": 0, + "status_code": 200, + "Server": "BaseHTTP/0.6 Python/3.6.8", + "Date": "Mon, 08 Apr 2024 07:19:16 GMT", + "Content-length": "84", + "__X_HTTP_DECOMPRESS_PAYLOAD_MD5": "cd8a54dd3e915946c4df262111e5aa05" + } +]
\ No newline at end of file diff --git a/test/decoders/http/benchmarks/json/http_req_1byte_sliding_window.json b/test/decoders/http/benchmarks/json/http_req_1byte_sliding_window.json new file mode 100644 index 0000000..13b360d --- /dev/null +++ b/test/decoders/http/benchmarks/json/http_req_1byte_sliding_window.json @@ -0,0 +1,35 @@ +[ + { + "__X_HTTP_TUPLE4": "192.168.40.137:46180-192.168.42.40:80-6-0" + }, + { + "__X_HTTP_TRANSACTION": "request", + "__X_HTTP_TRANSACTION_SEQ": 0, + "method": "GET", + "uri": "/index.html", + "req_version": "1.1", + "major_version": 1, + "minor_version": 1, + "User-Agent": "Wget/1.14 (linux-gnu)", + "Accept": "*/*", + "Host": "192.168.42.40", + "__X_HTTP_URL": "192.168.42.40/index.html", + "Connection": "Keep-Alive" + }, + { + "__X_HTTP_TRANSACTION": "response", + "__X_HTTP_TRANSACTION_SEQ": 0, + "res_version": "1.0", + "res_status": "OK", + "major_version": 1, + "minor_version": 0, + "status_code": 200, + "Server": "SimpleHTTP/0.6 Python/2.7.5", + "Date": "Fri, 29 Dec 2023 09:11:12 GMT", + "Content-type": "text/html", + "Content-Length": "144", + "Last-Modified": "Fri, 29 Dec 2023 08:50:53 GMT", + "__X_HTTP_RAW_PAYLOAD_MD5": "3e11876cd3a234541ae37d833c088a76", + "__X_HTTP_DECOMPRESS_PAYLOAD_MD5": "3e11876cd3a234541ae37d833c088a76" + } +]
\ No newline at end of file diff --git a/test/decoders/http/benchmarks/json/http_res_1byte_sliding_window.json b/test/decoders/http/benchmarks/json/http_res_1byte_sliding_window.json new file mode 100644 index 0000000..f527839 --- /dev/null +++ b/test/decoders/http/benchmarks/json/http_res_1byte_sliding_window.json @@ -0,0 +1,35 @@ +[ + { + "__X_HTTP_TUPLE4": "192.168.42.40:36338-192.168.40.137:80-6-0" + }, + { + "__X_HTTP_TRANSACTION": "request", + "__X_HTTP_TRANSACTION_SEQ": 0, + "method": "GET", + "uri": "/index.html", + "req_version": "1.1", + "major_version": 1, + "minor_version": 1, + "User-Agent": "Wget/1.14 (linux-gnu)", + "Accept": "*/*", + "Host": "192.168.40.137", + "Connection": "Keep-Alive", + "__X_HTTP_URL": "192.168.40.137/index.html" + }, + { + "__X_HTTP_TRANSACTION": "response", + "__X_HTTP_TRANSACTION_SEQ": 0, + "res_version": "1.0", + "res_status": "OK", + "major_version": 1, + "minor_version": 0, + "status_code": 200, + "Server": "SimpleHTTP/0.6 Python/2.7.5", + "Date": "Fri, 29 Dec 2023 09:32:21 GMT", + "Content-type": "text/html", + "Content-Length": "144", + "Last-Modified": "Fri, 29 Dec 2023 08:50:53 GMT", + "__X_HTTP_RAW_PAYLOAD_MD5": "3e11876cd3a234541ae37d833c088a76", + "__X_HTTP_DECOMPRESS_PAYLOAD_MD5": "3e11876cd3a234541ae37d833c088a76" + } +]
\ No newline at end of file diff --git a/test/decoders/http/benchmarks/json/http_res_gzip.json b/test/decoders/http/benchmarks/json/http_res_gzip.json new file mode 100644 index 0000000..9d3e9c7 --- /dev/null +++ b/test/decoders/http/benchmarks/json/http_res_gzip.json @@ -0,0 +1,45 @@ +[ + { + "__X_HTTP_TUPLE4": "192.168.69.2:34059-192.168.69.1:80-6-0" + }, + { + "__X_HTTP_TRANSACTION": "request", + "__X_HTTP_TRANSACTION_SEQ": 0, + "method": "GET", + "uri": "/test/ethereal.html", + "req_version": "1.1", + "major_version": 1, + "minor_version": 1, + "Host": "cerberus", + "User-Agent": "Mozilla/5.0 (X11; U; Linux ppc; rv:1.7.3) Gecko/20041004 Firefox/0.10.1", + "Accept": "text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5", + "Accept-Language": "en-us,en;q=0.5", + "Accept-Encoding": "gzip,deflate", + "Accept-Charset": "ISO-8859-1,utf-8;q=0.7,*;q=0.7", + "Keep-Alive": "300", + "Connection": "keep-alive", + "Cookie": "FGNCLIID=05c04axp1yaqynldtcdiwis0ag1", + "__X_HTTP_URL": "cerberus/test/ethereal.html" + }, + { + "__X_HTTP_TRANSACTION": "response", + "__X_HTTP_TRANSACTION_SEQ": 0, + "res_version": "1.1", + "res_status": "OK", + "major_version": 1, + "minor_version": 1, + "status_code": 200, + "Date": "Fri, 29 Oct 2004 05:21:00 GMT", + "Server": "Apache/2.0.50 (Fedora)", + "Last-Modified": "Fri, 29 Oct 2004 05:20:21 GMT", + "ETag": "\"126e1f-6d-371b2f40\"", + "Accept-Ranges": "bytes", + "Vary": "Accept-Encoding", + "Content-Encoding": "gzip", + "Content-Length": "92", + "Connection": "close", + "Content-Type": "text/html; charset=UTF-8", + "__X_HTTP_RAW_PAYLOAD_MD5": "dc2c0aff94148ca24acb516113a4d018", + "__X_HTTP_DECOMPRESS_PAYLOAD_MD5": "61b9e97f96045587bb55db781f7543ad" + } +]
\ No newline at end of file diff --git a/test/decoders/http/benchmarks/json/http_trans_pipeline.json b/test/decoders/http/benchmarks/json/http_trans_pipeline.json new file mode 100644 index 0000000..4bd0879 --- /dev/null +++ b/test/decoders/http/benchmarks/json/http_trans_pipeline.json @@ -0,0 +1,389 @@ +[ + { + "__X_HTTP_TUPLE4": "223.72.39.14:2545-192.168.182.147:80-6-0" + }, + { + "__X_HTTP_TRANSACTION": "request", + "__X_HTTP_TRANSACTION_SEQ": 0, + "method": "GET", + "uri": "/postinfo.html", + "req_version": "1.1", + "major_version": 1, + "minor_version": 1, + "Host": "116.181.2.152", + "User-Agent": "Mozilla/5.0 (compatible; Nmap Scripting Engine; https://nmap.org/book/nse.html)", + "Connection": "keep-alive", + "__X_HTTP_URL": "116.181.2.152/postinfo.html" + }, + { + "__X_HTTP_TRANSACTION": "request", + "__X_HTTP_TRANSACTION_SEQ": 1, + "method": "GET", + "uri": "/_vti_bin/_vti_aut/author.dll", + "req_version": "1.1", + "major_version": 1, + "minor_version": 1, + "Host": "116.181.2.152", + "User-Agent": "Mozilla/5.0 (compatible; Nmap Scripting Engine; https://nmap.org/book/nse.html)", + "Connection": "keep-alive", + "__X_HTTP_URL": "116.181.2.152/_vti_bin/_vti_aut/author.dll" + }, + { + "__X_HTTP_TRANSACTION": "request", + "__X_HTTP_TRANSACTION_SEQ": 2, + "method": "GET", + "uri": "/_vti_bin/_vti_aut/author.exe", + "req_version": "1.1", + "major_version": 1, + "minor_version": 1, + "Host": "116.181.2.152", + "User-Agent": "Mozilla/5.0 (compatible; Nmap Scripting Engine; https://nmap.org/book/nse.html)", + "Connection": "keep-alive", + "__X_HTTP_URL": "116.181.2.152/_vti_bin/_vti_aut/author.exe" + }, + { + "__X_HTTP_TRANSACTION": "request", + "__X_HTTP_TRANSACTION_SEQ": 3, + "method": "GET", + "uri": "/_vti_bin/_vti_aut/dvwssr.dll", + "req_version": "1.1", + "major_version": 1, + "minor_version": 1, + "Host": "116.181.2.152", + "User-Agent": "Mozilla/5.0 (compatible; Nmap Scripting Engine; https://nmap.org/book/nse.html)", + "Connection": "keep-alive", + "__X_HTTP_URL": "116.181.2.152/_vti_bin/_vti_aut/dvwssr.dll" + }, + { + "__X_HTTP_TRANSACTION": "request", + "__X_HTTP_TRANSACTION_SEQ": 4, + "method": "GET", + "uri": "/_vti_bin/_vti_adm/admin.dll", + "req_version": "1.1", + "major_version": 1, + "minor_version": 1, + "Host": "116.181.2.152", + "User-Agent": "Mozilla/5.0 (compatible; Nmap Scripting Engine; https://nmap.org/book/nse.html)", + "Connection": "keep-alive", + "__X_HTTP_URL": "116.181.2.152/_vti_bin/_vti_adm/admin.dll" + }, + { + "__X_HTTP_TRANSACTION": "request", + "__X_HTTP_TRANSACTION_SEQ": 5, + "method": "GET", + "uri": "/_vti_bin/_vti_adm/admin.exe", + "req_version": "1.1", + "major_version": 1, + "minor_version": 1, + "Host": "116.181.2.152", + "User-Agent": "Mozilla/5.0 (compatible; Nmap Scripting Engine; https://nmap.org/book/nse.html)", + "Connection": "keep-alive", + "__X_HTTP_URL": "116.181.2.152/_vti_bin/_vti_adm/admin.exe" + }, + { + "__X_HTTP_TRANSACTION": "request", + "__X_HTTP_TRANSACTION_SEQ": 6, + "method": "GET", + "uri": "/_vti_bin/fpcount.exe?Page=default.asp|Image=3", + "req_version": "1.1", + "major_version": 1, + "minor_version": 1, + "Host": "116.181.2.152", + "User-Agent": "Mozilla/5.0 (compatible; Nmap Scripting Engine; https://nmap.org/book/nse.html)", + "Connection": "keep-alive", + "__X_HTTP_URL": "116.181.2.152/_vti_bin/fpcount.exe?Page=default.asp|Image=3" + }, + { + "__X_HTTP_TRANSACTION": "response", + "__X_HTTP_TRANSACTION_SEQ": 0, + "res_version": "1.1", + "res_status": "Not Found", + "major_version": 1, + "minor_version": 1, + "status_code": 404, + "Server": "nginx", + "Date": "Thu, 29 Oct 2020 09:59:01 GMT", + "Content-Type": "text/html", + "Content-Length": "146", + "Connection": "keep-alive", + "__X_HTTP_RAW_PAYLOAD_MD5": "32dc0b2772bd73a952abba009291a399", + "__X_HTTP_DECOMPRESS_PAYLOAD_MD5": "32dc0b2772bd73a952abba009291a399" + }, + { + "__X_HTTP_TRANSACTION": "response", + "__X_HTTP_TRANSACTION_SEQ": 1, + "res_version": "1.1", + "res_status": "Not Found", + "major_version": 1, + "minor_version": 1, + "status_code": 404, + "Server": "nginx", + "Date": "Thu, 29 Oct 2020 09:59:02 GMT", + "Content-Type": "text/html", + "Content-Length": "146", + "Connection": "keep-alive", + "__X_HTTP_RAW_PAYLOAD_MD5": "db2ff8008149d8e70d8a2929acbb0f56", + "__X_HTTP_DECOMPRESS_PAYLOAD_MD5": "db2ff8008149d8e70d8a2929acbb0f56" + }, + { + "__X_HTTP_TRANSACTION": "response", + "__X_HTTP_TRANSACTION_SEQ": 2, + "res_version": "1.1", + "res_status": "Not Found", + "major_version": 1, + "minor_version": 1, + "status_code": 404, + "Server": "nginx", + "Date": "Thu, 29 Oct 2020 09:59:03 GMT", + "Content-Type": "text/html", + "Content-Length": "146", + "Connection": "keep-alive", + "__X_HTTP_RAW_PAYLOAD_MD5": "f5df152f7d8f34c630f298d2fcb46ed3", + "__X_HTTP_DECOMPRESS_PAYLOAD_MD5": "f5df152f7d8f34c630f298d2fcb46ed3" + }, + { + "__X_HTTP_TRANSACTION": "response", + "__X_HTTP_TRANSACTION_SEQ": 3, + "res_version": "1.1", + "res_status": "Not Found", + "major_version": 1, + "minor_version": 1, + "status_code": 404, + "Server": "nginx", + "Date": "Thu, 29 Oct 2020 09:59:04 GMT", + "Content-Type": "text/html", + "Content-Length": "146", + "Connection": "keep-alive", + "__X_HTTP_RAW_PAYLOAD_MD5": "73e98ca7b62764869357b3e3c40dcd68", + "__X_HTTP_DECOMPRESS_PAYLOAD_MD5": "73e98ca7b62764869357b3e3c40dcd68" + }, + { + "__X_HTTP_TRANSACTION": "response", + "__X_HTTP_TRANSACTION_SEQ": 4, + "res_version": "1.1", + "res_status": "Not Found", + "major_version": 1, + "minor_version": 1, + "status_code": 404, + "Server": "nginx", + "Date": "Thu, 29 Oct 2020 09:59:05 GMT", + "Content-Type": "text/html", + "Content-Length": "146", + "Connection": "keep-alive", + "__X_HTTP_RAW_PAYLOAD_MD5": "a5733c8989bde7f08506fa68c20f0c62", + "__X_HTTP_DECOMPRESS_PAYLOAD_MD5": "a5733c8989bde7f08506fa68c20f0c62" + }, + { + "__X_HTTP_TRANSACTION": "request", + "__X_HTTP_TRANSACTION_SEQ": 7, + "method": "GET", + "uri": "/_vti_bin/shtml.dll", + "req_version": "1.1", + "major_version": 1, + "minor_version": 1, + "Host": "116.181.2.152", + "User-Agent": "Mozilla/5.0 (compatible; Nmap Scripting Engine; https://nmap.org/book/nse.html)", + "__X_HTTP_URL": "116.181.2.152/_vti_bin/shtml.dll", + "Connection": "keep-alive" + }, + { + "__X_HTTP_TRANSACTION": "request", + "__X_HTTP_TRANSACTION_SEQ": 8, + "method": "GET", + "uri": "/_vti_bin/shtml.exe", + "req_version": "1.1", + "major_version": 1, + "minor_version": 1, + "Host": "116.181.2.152", + "User-Agent": "Mozilla/5.0 (compatible; Nmap Scripting Engine; https://nmap.org/book/nse.html)", + "Connection": "keep-alive", + "__X_HTTP_URL": "116.181.2.152/_vti_bin/shtml.exe" + }, + { + "__X_HTTP_TRANSACTION": "request", + "__X_HTTP_TRANSACTION_SEQ": 9, + "method": "GET", + "uri": "/_vti_pvt/_x_todo.htm", + "req_version": "1.1", + "major_version": 1, + "minor_version": 1, + "Host": "116.181.2.152", + "User-Agent": "Mozilla/5.0 (compatible; Nmap Scripting Engine; https://nmap.org/book/nse.html)", + "Connection": "keep-alive", + "__X_HTTP_URL": "116.181.2.152/_vti_pvt/_x_todo.htm" + }, + { + "__X_HTTP_TRANSACTION": "request", + "__X_HTTP_TRANSACTION_SEQ": 10, + "method": "GET", + "uri": "/_vti_pvt/_x_todoh.htm", + "req_version": "1.1", + "major_version": 1, + "minor_version": 1, + "Host": "116.181.2.152", + "User-Agent": "Mozilla/5.0 (compatible; Nmap Scripting Engine; https://nmap.org/book/nse.html)", + "Connection": "keep-alive", + "__X_HTTP_URL": "116.181.2.152/_vti_pvt/_x_todoh.htm" + }, + { + "__X_HTTP_TRANSACTION": "request", + "__X_HTTP_TRANSACTION_SEQ": 11, + "method": "GET", + "uri": "/_vti_pvt/access.cnf", + "req_version": "1.1", + "major_version": 1, + "minor_version": 1, + "Host": "116.181.2.152", + "User-Agent": "Mozilla/5.0 (compatible; Nmap Scripting Engine; https://nmap.org/book/nse.html)", + "Connection": "keep-alive", + "__X_HTTP_URL": "116.181.2.152/_vti_pvt/access.cnf" + }, + { + "__X_HTTP_TRANSACTION": "request", + "__X_HTTP_TRANSACTION_SEQ": 12, + "method": "GET", + "uri": "/_vti_pvt/administrator.pwd", + "req_version": "1.1", + "major_version": 1, + "minor_version": 1, + "Host": "116.181.2.152", + "User-Agent": "Mozilla/5.0 (compatible; Nmap Scripting Engine; https://nmap.org/book/nse.html)", + "Connection": "keep-alive", + "__X_HTTP_URL": "116.181.2.152/_vti_pvt/administrator.pwd" + }, + { + "__X_HTTP_TRANSACTION": "request", + "__X_HTTP_TRANSACTION_SEQ": 13, + "method": "GET", + "uri": "/_vti_pvt/administrators.pwd", + "req_version": "1.1", + "major_version": 1, + "minor_version": 1, + "Host": "116.181.2.152", + "User-Agent": "Mozilla/5.0 (compatible; Nmap Scripting Engine; https://nmap.org/book/nse.html)", + "Connection": "keep-alive", + "__X_HTTP_URL": "116.181.2.152/_vti_pvt/administrators.pwd" + }, + { + "__X_HTTP_TRANSACTION": "request", + "__X_HTTP_TRANSACTION_SEQ": 14, + "method": "GET", + "uri": "/_vti_pvt/authors.pwd", + "req_version": "1.1", + "major_version": 1, + "minor_version": 1, + "Host": "116.181.2.152", + "User-Agent": "Mozilla/5.0 (compatible; Nmap Scripting Engine; https://nmap.org/book/nse.html)", + "Connection": "keep-alive", + "__X_HTTP_URL": "116.181.2.152/_vti_pvt/authors.pwd" + }, + { + "__X_HTTP_TRANSACTION": "response", + "__X_HTTP_TRANSACTION_SEQ": 5, + "res_version": "1.1", + "res_status": "Not Found", + "major_version": 1, + "minor_version": 1, + "status_code": 404, + "Server": "nginx", + "Date": "Thu, 29 Oct 2020 09:59:06 GMT", + "Content-Type": "text/html", + "Content-Length": "146", + "Connection": "keep-alive", + "__X_HTTP_RAW_PAYLOAD_MD5": "4bc0dde3722f76d60fef6f1d878cbb14", + "__X_HTTP_DECOMPRESS_PAYLOAD_MD5": "4bc0dde3722f76d60fef6f1d878cbb14" + }, + { + "__X_HTTP_TRANSACTION": "response", + "__X_HTTP_TRANSACTION_SEQ": 6, + "res_version": "1.1", + "res_status": "Not Found", + "major_version": 1, + "minor_version": 1, + "status_code": 404, + "Server": "nginx", + "Date": "Thu, 29 Oct 2020 09:59:07 GMT", + "Content-Type": "text/html", + "Content-Length": "146", + "Connection": "keep-alive", + "__X_HTTP_RAW_PAYLOAD_MD5": "728dc2eafd49c9be8149add7c6aff207", + "__X_HTTP_DECOMPRESS_PAYLOAD_MD5": "728dc2eafd49c9be8149add7c6aff207" + }, + { + "__X_HTTP_TRANSACTION": "response", + "__X_HTTP_TRANSACTION_SEQ": 7, + "res_version": "1.1", + "res_status": "Not Found", + "major_version": 1, + "minor_version": 1, + "status_code": 404, + "Server": "nginx", + "Date": "Thu, 29 Oct 2020 09:59:08 GMT", + "Content-Type": "text/html", + "Content-Length": "146", + "Connection": "keep-alive", + "__X_HTTP_RAW_PAYLOAD_MD5": "0cde98e33181ee0ded49e8d0a3178d55", + "__X_HTTP_DECOMPRESS_PAYLOAD_MD5": "0cde98e33181ee0ded49e8d0a3178d55" + }, + { + "__X_HTTP_TRANSACTION": "response", + "__X_HTTP_TRANSACTION_SEQ": 8, + "res_version": "1.1", + "res_status": "Not Found", + "major_version": 1, + "minor_version": 1, + "status_code": 404, + "Server": "nginx", + "Date": "Thu, 29 Oct 2020 09:59:09 GMT", + "Content-Type": "text/html", + "Content-Length": "146", + "Connection": "keep-alive", + "__X_HTTP_RAW_PAYLOAD_MD5": "d627268e0aba817d818b6e2b7e41aa11", + "__X_HTTP_DECOMPRESS_PAYLOAD_MD5": "d627268e0aba817d818b6e2b7e41aa11" + }, + { + "__X_HTTP_TRANSACTION": "response", + "__X_HTTP_TRANSACTION_SEQ": 9, + "res_version": "1.1", + "res_status": "Not Found", + "major_version": 1, + "minor_version": 1, + "status_code": 404, + "Server": "nginx", + "Date": "Thu, 29 Oct 2020 09:59:10 GMT", + "Content-Type": "text/html", + "Content-Length": "146", + "Connection": "keep-alive", + "__X_HTTP_RAW_PAYLOAD_MD5": "e99d9829d50bd94b3497b91011f6e349", + "__X_HTTP_DECOMPRESS_PAYLOAD_MD5": "e99d9829d50bd94b3497b91011f6e349" + }, + { + "__X_HTTP_TRANSACTION": "request", + "__X_HTTP_TRANSACTION_SEQ": 15, + "method": "GET", + "uri": "/_vti_pvt/bots.cnf", + "req_version": "1.1", + "major_version": 1, + "minor_version": 1, + "Host": "116.181.2.152", + "User-Agent": "Mozilla/5.0 (compatible; Nmap Scripting Engine; https://nmap.org/book/nse.html)", + "Connection": "keep-alive", + "__X_HTTP_URL": "116.181.2.152/_vti_pvt/bots.cnf" + }, + { + "__X_HTTP_TRANSACTION": "response", + "__X_HTTP_TRANSACTION_SEQ": 10, + "res_version": "1.1", + "res_status": "Not Found", + "major_version": 1, + "minor_version": 1, + "status_code": 404, + "Server": "nginx", + "Date": "Thu, 29 Oct 2020 09:59:11 GMT", + "Content-Type": "text/html", + "Content-Length": "146", + "Connection": "keep-alive", + "__X_HTTP_RAW_PAYLOAD_MD5": "99a813d29c5da4e6f7269be4c1a31c8e", + "__X_HTTP_DECOMPRESS_PAYLOAD_MD5": "99a813d29c5da4e6f7269be4c1a31c8e" + } +]
\ No newline at end of file diff --git a/test/decoders/http/benchmarks/json/http_tunnel_for_http.json b/test/decoders/http/benchmarks/json/http_tunnel_for_http.json new file mode 100644 index 0000000..ad653d5 --- /dev/null +++ b/test/decoders/http/benchmarks/json/http_tunnel_for_http.json @@ -0,0 +1,62 @@ +[ + { + "__X_HTTP_TUPLE4": "192.168.40.139.59234>192.168.38.83.8080" + }, + { + "__X_HTTP_TRANSACTION": "request", + "__X_HTTP_TRANSACTION_SEQ": 0, + "method": "CONNECT", + "uri": "www.baidu.com:80", + "req_version": "1.1", + "major_version": 1, + "minor_version": 1, + "Host": "www.baidu.com:80", + "User-Agent": "curl/7.29.0", + "Proxy-Connection": "Keep-Alive", + "__X_HTTP_URL": "www.baidu.com:80" + }, + { + "__X_HTTP_TRANSACTION": "response", + "__X_HTTP_TRANSACTION_SEQ": 0, + "res_version": "1.1", + "res_status": "Connection established", + "major_version": 1, + "minor_version": 1, + "status_code": 200, + "Proxy-agent": "CCProxy" + }, + { + "__X_HTTP_TRANSACTION": "request", + "__X_HTTP_TRANSACTION_SEQ": 1, + "method": "GET", + "uri": "/", + "req_version": "1.1", + "major_version": 1, + "minor_version": 1, + "User-Agent": "curl/7.29.0", + "Host": "www.baidu.com", + "Accept": "*/*", + "__X_HTTP_URL": "www.baidu.com/" + }, + { + "__X_HTTP_TRANSACTION": "response", + "__X_HTTP_TRANSACTION_SEQ": 1, + "res_version": "1.1", + "res_status": "OK", + "major_version": 1, + "minor_version": 1, + "status_code": 200, + "Accept-Ranges": "bytes", + "Cache-Control": "private, no-cache, no-store, proxy-revalidate, no-transform", + "Connection": "keep-alive", + "Content-Length": "2381", + "Content-Type": "text/html", + "Date": "Mon, 08 Apr 2024 09:45:51 GMT", + "Etag": "\"588604c1-94d\"", + "Last-Modified": "Mon, 23 Jan 2017 13:27:29 GMT", + "Pragma": "no-cache", + "Server": "bfe/1.0.8.18", + "Set-Cookie": "BDORZ=27315; max-age=86400; domain=.baidu.com; path=/", + "__X_HTTP_DECOMPRESS_PAYLOAD_MD5": "090fe607a5be1228362614ccaa088577" + } +]
\ No newline at end of file diff --git a/test/decoders/http/benchmarks/json/http_tunnel_for_http_c2s.json b/test/decoders/http/benchmarks/json/http_tunnel_for_http_c2s.json new file mode 100644 index 0000000..5e17067 --- /dev/null +++ b/test/decoders/http/benchmarks/json/http_tunnel_for_http_c2s.json @@ -0,0 +1,31 @@ +[ + { + "__X_HTTP_TUPLE4": "192.168.40.139.59234>192.168.38.83.8080" + }, + { + "__X_HTTP_TRANSACTION": "request", + "__X_HTTP_TRANSACTION_SEQ": 0, + "method": "CONNECT", + "uri": "www.baidu.com:80", + "req_version": "1.1", + "major_version": 1, + "minor_version": 1, + "Host": "www.baidu.com:80", + "User-Agent": "curl/7.29.0", + "Proxy-Connection": "Keep-Alive", + "__X_HTTP_URL": "www.baidu.com:80" + }, + { + "__X_HTTP_TRANSACTION": "request", + "__X_HTTP_TRANSACTION_SEQ": 1, + "method": "GET", + "uri": "/", + "req_version": "1.1", + "major_version": 1, + "minor_version": 1, + "User-Agent": "curl/7.29.0", + "Host": "www.baidu.com", + "Accept": "*/*", + "__X_HTTP_URL": "www.baidu.com/" + } +]
\ No newline at end of file diff --git a/test/decoders/http/benchmarks/json/http_tunnel_for_http_s2c.json b/test/decoders/http/benchmarks/json/http_tunnel_for_http_s2c.json new file mode 100644 index 0000000..851d652 --- /dev/null +++ b/test/decoders/http/benchmarks/json/http_tunnel_for_http_s2c.json @@ -0,0 +1,36 @@ +[ + { + "__X_HTTP_TUPLE4": "192.168.40.139.59234>192.168.38.83.8080" + }, + { + "__X_HTTP_TRANSACTION": "response", + "__X_HTTP_TRANSACTION_SEQ": 0, + "res_version": "1.1", + "res_status": "Connection established", + "major_version": 1, + "minor_version": 1, + "status_code": 200, + "Proxy-agent": "CCProxy" + }, + { + "__X_HTTP_TRANSACTION": "response", + "__X_HTTP_TRANSACTION_SEQ": 1, + "res_version": "1.1", + "res_status": "OK", + "major_version": 1, + "minor_version": 1, + "status_code": 200, + "Accept-Ranges": "bytes", + "Cache-Control": "private, no-cache, no-store, proxy-revalidate, no-transform", + "Connection": "keep-alive", + "Content-Length": "2381", + "Content-Type": "text/html", + "Date": "Mon, 08 Apr 2024 09:45:51 GMT", + "Etag": "\"588604c1-94d\"", + "Last-Modified": "Mon, 23 Jan 2017 13:27:29 GMT", + "Pragma": "no-cache", + "Server": "bfe/1.0.8.18", + "Set-Cookie": "BDORZ=27315; max-age=86400; domain=.baidu.com; path=/", + "__X_HTTP_DECOMPRESS_PAYLOAD_MD5": "090fe607a5be1228362614ccaa088577" + } +]
\ No newline at end of file diff --git a/test/decoders/http/benchmarks/json/http_tunnel_for_pop3.json b/test/decoders/http/benchmarks/json/http_tunnel_for_pop3.json new file mode 100644 index 0000000..a69ac7b --- /dev/null +++ b/test/decoders/http/benchmarks/json/http_tunnel_for_pop3.json @@ -0,0 +1,32 @@ +[ + { + "__X_HTTP_TUPLE4": "192.168.10.58.51798>192.168.10.144.808" + }, + { + "__X_HTTP_TRANSACTION": "request", + "__X_HTTP_TRANSACTION_SEQ": 0, + "method": "CONNECT", + "uri": "pop.163.com:110", + "req_version": "1.1", + "major_version": 1, + "minor_version": 1, + "Content-Length": "0", + "Accept": "*/*", + "User-Agent": "Foxmail 7, 1, 3, 48[cn]", + "Accept-Encoding": "gzip, deflate", + "Proxy-Connection": "Keep-Alive", + "Connection": "Keep-Alive", + "Host": "192.168.10.144", + "__X_HTTP_URL": "pop.163.com:110" + }, + { + "__X_HTTP_TRANSACTION": "response", + "__X_HTTP_TRANSACTION_SEQ": 0, + "res_version": "1.1", + "res_status": "Connection established", + "major_version": 1, + "minor_version": 1, + "status_code": 200, + "Proxy-agent": "CCProxy" + } +]
\ No newline at end of file diff --git a/test/decoders/http/benchmarks/json/http_tunnel_s2c_only_hdr.json b/test/decoders/http/benchmarks/json/http_tunnel_s2c_only_hdr.json new file mode 100644 index 0000000..4f11604 --- /dev/null +++ b/test/decoders/http/benchmarks/json/http_tunnel_s2c_only_hdr.json @@ -0,0 +1,15 @@ +[ + { + "__X_HTTP_TUPLE4": "36.255.45.61.29079>68.28.1.153.80" + }, + { + "__X_HTTP_TRANSACTION": "response", + "__X_HTTP_TRANSACTION_SEQ": 0, + "res_version": "1.0", + "res_status": "Connection Established", + "major_version": 1, + "minor_version": 0, + "status_code": 200, + "Proxy-agent": "Apache/2.0.55 (Unix) proxy_html/2.5" + } +]
\ No newline at end of file diff --git a/test/decoders/http/benchmarks/json/http_upgrade_http2.json b/test/decoders/http/benchmarks/json/http_upgrade_http2.json new file mode 100644 index 0000000..5d05db4 --- /dev/null +++ b/test/decoders/http/benchmarks/json/http_upgrade_http2.json @@ -0,0 +1,41 @@ +[ + { + "__X_HTTP_TUPLE4": "10.9.0.2.58038>139.162.123.134.80" + }, + { + "__X_HTTP_TRANSACTION": "request", + "__X_HTTP_TRANSACTION_SEQ": 0, + "method": "GET", + "uri": "/robots.txt", + "req_version": "1.1", + "major_version": 1, + "minor_version": 1, + "Host": "nghttp2.org", + "User-Agent": "curl/7.61.0", + "Accept": "*/*", + "Connection": "Upgrade, HTTP2-Settings", + "Upgrade": "h2c", + "HTTP2-Settings": "AAMAAABkAARAAAAAAAIAAAAA", + "__X_HTTP_URL": "nghttp2.org/robots.txt" + }, + { + "__X_HTTP_TRANSACTION": "request", + "__X_HTTP_TRANSACTION_SEQ": 1, + "method": "PRI", + "uri": "*", + "req_version": "2.0", + "major_version": 2, + "minor_version": 0 + }, + { + "__X_HTTP_TRANSACTION": "response", + "__X_HTTP_TRANSACTION_SEQ": 0, + "res_version": "1.1", + "res_status": "Switching Protocols", + "major_version": 1, + "minor_version": 1, + "status_code": 101, + "Connection": "Upgrade", + "Upgrade": "h2c" + } +]
\ No newline at end of file diff --git a/test/decoders/http/benchmarks/json/http_upgrade_websocket.json b/test/decoders/http/benchmarks/json/http_upgrade_websocket.json new file mode 100644 index 0000000..6a7dfc3 --- /dev/null +++ b/test/decoders/http/benchmarks/json/http_upgrade_websocket.json @@ -0,0 +1,41 @@ +[ + { + "__X_HTTP_TUPLE4": "131.179.196.220:59631-131.179.196.46:9696-6-0" + }, + { + "__X_HTTP_TRANSACTION": "request", + "__X_HTTP_TRANSACTION_SEQ": 0, + "method": "GET", + "uri": "/", + "req_version": "1.1", + "major_version": 1, + "minor_version": 1, + "Host": "spurs.cs.ucla.edu:9696", + "Connection": "Upgrade", + "Pragma": "no-cache", + "Cache-Control": "no-cache", + "Upgrade": "websocket", + "Origin": "null", + "Sec-WebSocket-Version": "13", + "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.124 Safari/537.36", + "Accept-Encoding": "gzip, deflate, sdch", + "Accept-Language": "en-US,en;q=0.8,lv;q=0.6,ru;q=0.4", + "Cookie": "s_cc=true; s_sq=%5B%5BB%5D%5D; iwe_user_noticecount_urn%3amace%3aucla.edu%3appid%3aperson%3a1223EF7211FC4EC1965579D0B8D85FBA=2; __utma=125574670.1759122974.1407127284.1407127284.1415755402.2; __utmc=125574670; __utma=126236063.2139843507.1390525421.1433785187.1435706244.46; __utmc=126236063; __utmz=126236063.1427934389.33.5.utmcsr=google|utmccn=(organic)|utmcmd=organic|utmctr=(not%20provided); _ucla_sso=2015-07-02T11%3A34%3A30-07%3A00; _ga=GA1.2.1759122974.1407127284", + "Sec-WebSocket-Key": "sgD1adxQ3mk6BbBqab7owA==", + "Sec-WebSocket-Extensions": "permessage-deflate; client_max_window_bits", + "__X_HTTP_URL": "spurs.cs.ucla.edu:9696/" + }, + { + "__X_HTTP_TRANSACTION": "response", + "__X_HTTP_TRANSACTION_SEQ": 0, + "res_version": "1.1", + "res_status": "Switching Protocols", + "major_version": 1, + "minor_version": 1, + "status_code": 101, + "Connection": "upgrade", + "Sec-WebSocket-Accept": "FRh9fmH0UaoLdY5BSFO4hP2Pcjw=", + "Server": "WebSocket++/0.5.1", + "Upgrade": "websocket" + } +]
\ No newline at end of file diff --git a/test/decoders/http/benchmarks/json/http_url_test_with_host.json b/test/decoders/http/benchmarks/json/http_url_test_with_host.json new file mode 100644 index 0000000..ab91ded --- /dev/null +++ b/test/decoders/http/benchmarks/json/http_url_test_with_host.json @@ -0,0 +1,35 @@ +[ + { + "__X_HTTP_TUPLE4": "192.168.244.1.52412>192.168.244.128.8080" + }, + { + "__X_HTTP_TRANSACTION": "request", + "__X_HTTP_TRANSACTION_SEQ": 0, + "method": "GET", + "uri": "/urltest/ttt", + "req_version": "1.1", + "major_version": 1, + "minor_version": 1, + "Host": "192.168.244.128:8080", + "Connection": "keep-alive", + "Upgrade-Insecure-Requests": "1", + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 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.7", + "Accept-Encoding": "gzip, deflate", + "Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8", + "__X_HTTP_URL": "192.168.244.128:8080/urltest/ttt" + }, + { + "__X_HTTP_TRANSACTION": "response", + "__X_HTTP_TRANSACTION_SEQ": 0, + "res_version": "1.0", + "res_status": "OK", + "major_version": 1, + "minor_version": 0, + "status_code": 200, + "Server": "BaseHTTP/0.6 Python/3.6.8", + "Date": "Thu, 14 Mar 2024 07:37:43 GMT", + "Content-type": "application/json", + "__X_HTTP_DECOMPRESS_PAYLOAD_MD5": "49dfdd54b01cbcd2d2ab5e9e5ee6b9b9" + } +]
\ No newline at end of file diff --git a/test/decoders/http/benchmarks/json/http_url_test_without_host.json b/test/decoders/http/benchmarks/json/http_url_test_without_host.json new file mode 100644 index 0000000..09427a7 --- /dev/null +++ b/test/decoders/http/benchmarks/json/http_url_test_without_host.json @@ -0,0 +1,30 @@ +[ + { + "__X_HTTP_TUPLE4": "192.168.244.128:44868-192.168.244.128:8080-6-0" + }, + { + "__X_HTTP_TRANSACTION": "request", + "__X_HTTP_TRANSACTION_SEQ": 0, + "method": "GET", + "uri": "/urltest/ttt", + "req_version": "1.1", + "major_version": 1, + "minor_version": 1, + "User-Agent": "no h", + "__X_HTTP_URL": "192.168.244.128:8080/urltest/ttt" + }, + { + "__X_HTTP_TRANSACTION": "response", + "__X_HTTP_TRANSACTION_SEQ": 0, + "res_version": "1.0", + "res_status": "OK", + "major_version": 1, + "minor_version": 0, + "status_code": 200, + "Server": "BaseHTTP/0.6 Python/3.6.8", + "Date": "Thu, 14 Mar 2024 06:15:20 GMT", + "Content-type": "application/json", + "__X_HTTP_RAW_PAYLOAD_MD5": "49dfdd54b01cbcd2d2ab5e9e5ee6b9b9", + "__X_HTTP_DECOMPRESS_PAYLOAD_MD5": "49dfdd54b01cbcd2d2ab5e9e5ee6b9b9" + } +]
\ No newline at end of file diff --git a/test/decoders/http/benchmarks/json/http_url_test_without_host_v6.json b/test/decoders/http/benchmarks/json/http_url_test_without_host_v6.json new file mode 100644 index 0000000..2bc3934 --- /dev/null +++ b/test/decoders/http/benchmarks/json/http_url_test_without_host_v6.json @@ -0,0 +1,42 @@ +[ + { + "__X_HTTP_TUPLE4": "2607:5d00:2:2::38:2:54676-2408:8722:840:f8::83:80-6-0" + }, + { + "__X_HTTP_TRANSACTION": "request", + "__X_HTTP_TRANSACTION_SEQ": 0, + "method": "GET", + "uri": "/dist/aria.js?appid=1cea560ed256bea7ae52761bd9042164", + "req_version": "1.1", + "major_version": 1, + "minor_version": 1, + "_HOT": "ent.govwza.cn", + "Connection": "keep-alive", + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36", + "DNT": "1", + "Accept": "*/*", + "Referer": "http://www.airchina.com/", + "Accept-Encoding": "gzip, deflate", + "Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8", + "If-Modified-Since": "Mon, 05 Aug 2024 00:26:26 GMT", + "__X_HTTP_URL": "2408:8722:840:f8::83:80/dist/aria.js?appid=1cea560ed256bea7ae52761bd9042164" + }, + { + "__X_HTTP_TRANSACTION": "response", + "__X_HTTP_TRANSACTION_SEQ": 0, + "res_version": "1.1", + "res_status": "Not Modified", + "major_version": 1, + "minor_version": 1, + "status_code": 304, + "Date": "Mon, 05 Aug 2024 07:51:04 GMT", + "Content-Type": "application/javascript;charset=UTF-8", + "Vary": "origin,access-control-request-method,access-control-request-headers,accept-encoding", + "Server": "SLT-MID", + "X-NWS-LOG-UUID": "1242198743243161630", + "Connection": "close", + "X-Cache-Lookup": "Cache Hit", + "Access-Control-Allow-Origin": "*", + "Cache-Control": "max-age=86400" + } +]
\ No newline at end of file diff --git a/test/decoders/http/benchmarks/json/http_zlib_deadlock.json b/test/decoders/http/benchmarks/json/http_zlib_deadlock.json new file mode 100644 index 0000000..0ea9b7f --- /dev/null +++ b/test/decoders/http/benchmarks/json/http_zlib_deadlock.json @@ -0,0 +1,43 @@ +[ + { + "__X_HTTP_TUPLE4": "100.107.59.2:47242-106.122.255.251:80-6-0" + }, + { + "__X_HTTP_TRANSACTION": "request", + "__X_HTTP_TRANSACTION_SEQ": 0, + "method": "GET", + "uri": "/xmlymain-login-web/login/ts-1657244122966?appId=mainApp&appStatus=2&clientType=android&isFirstReq=false&lastSuccessIp=180.153.250.247:3814&userId=175776850", + "req_version": "1.1", + "major_version": 1, + "minor_version": 1, + "Cookie2": "$version=1", + "Accept": "*/*", + "user-agent": "ting_xmim1.0(Mi+10,Android29)", + "xmTraceId": "f30c74a5-c62d-46a0-80bd-d51dbf139976163", + "Host": "xmc.ximalaya.com", + "Connection": "Keep-Alive", + "Accept-Encoding": "gzip", + "__X_HTTP_URL": "xmc.ximalaya.com/xmlymain-login-web/login/ts-1657244122966?appId=mainApp&appStatus=2&clientType=android&isFirstReq=false&lastSuccessIp=180.153.250.247:3814&userId=175776850" + }, + { + "__X_HTTP_TRANSACTION": "response", + "__X_HTTP_TRANSACTION_SEQ": 0, + "res_version": "1.1", + "res_status": "OK", + "major_version": 1, + "minor_version": 1, + "status_code": 200, + "Server": "Tengine", + "Date": "Fri, 08 Jul 2022 01:35:24 GMT", + "Content-Type": "application/json;charset=UTF-8", + "Vary": "Accept-Encoding", + "x-idc-gw": "0", + "Content-Encoding": "gzip", + "Transfer-Encoding": "chunked", + "X-NWS-LOG-UUID": "12197298277844186084", + "Connection": "keep-alive", + "X-Cache-Lookup": "Cache Miss", + "__X_HTTP_RAW_PAYLOAD_MD5": "3979c98326c16f482f364ee94be3c382", + "__X_HTTP_DECOMPRESS_PAYLOAD_MD5": "d383effc464d797b5fdb4d98f4ab0111" + } +]
\ No newline at end of file diff --git a/test/decoders/http/benchmarks/json/non_http.json b/test/decoders/http/benchmarks/json/non_http.json new file mode 100644 index 0000000..0637a08 --- /dev/null +++ b/test/decoders/http/benchmarks/json/non_http.json @@ -0,0 +1 @@ +[]
\ No newline at end of file diff --git a/test/decoders/http/benchmarks/pcap/http_6over4_single_trans.pcap b/test/decoders/http/benchmarks/pcap/http_6over4_single_trans.pcap Binary files differnew file mode 100644 index 0000000..6b074e5 --- /dev/null +++ b/test/decoders/http/benchmarks/pcap/http_6over4_single_trans.pcap diff --git a/test/decoders/http/benchmarks/pcap/http_chn_encode_url.pcap b/test/decoders/http/benchmarks/pcap/http_chn_encode_url.pcap Binary files differnew file mode 100644 index 0000000..dac9495 --- /dev/null +++ b/test/decoders/http/benchmarks/pcap/http_chn_encode_url.pcap diff --git a/test/decoders/http/benchmarks/pcap/http_chunked_res_gzip.pcap b/test/decoders/http/benchmarks/pcap/http_chunked_res_gzip.pcap Binary files differnew file mode 100644 index 0000000..fa237fb --- /dev/null +++ b/test/decoders/http/benchmarks/pcap/http_chunked_res_gzip.pcap diff --git a/test/decoders/http/benchmarks/pcap/http_connect_flood.pcap b/test/decoders/http/benchmarks/pcap/http_connect_flood.pcap Binary files differnew file mode 100644 index 0000000..11b7e14 --- /dev/null +++ b/test/decoders/http/benchmarks/pcap/http_connect_flood.pcap diff --git a/test/decoders/http/benchmarks/pcap/http_error.pcap b/test/decoders/http/benchmarks/pcap/http_error.pcap Binary files differnew file mode 100644 index 0000000..3ef0829 --- /dev/null +++ b/test/decoders/http/benchmarks/pcap/http_error.pcap diff --git a/test/decoders/http/benchmarks/pcap/http_fin.pcap b/test/decoders/http/benchmarks/pcap/http_fin.pcap Binary files differnew file mode 100644 index 0000000..d23bcba --- /dev/null +++ b/test/decoders/http/benchmarks/pcap/http_fin.pcap diff --git a/test/decoders/http/benchmarks/pcap/http_get_encoded_uri.pcap b/test/decoders/http/benchmarks/pcap/http_get_encoded_uri.pcap Binary files differnew file mode 100644 index 0000000..633b50b --- /dev/null +++ b/test/decoders/http/benchmarks/pcap/http_get_encoded_uri.pcap diff --git a/test/decoders/http/benchmarks/pcap/http_get_long_cookie.pcap b/test/decoders/http/benchmarks/pcap/http_get_long_cookie.pcap Binary files differnew file mode 100644 index 0000000..8857615 --- /dev/null +++ b/test/decoders/http/benchmarks/pcap/http_get_long_cookie.pcap diff --git a/test/decoders/http/benchmarks/pcap/http_get_malformed.pcap b/test/decoders/http/benchmarks/pcap/http_get_malformed.pcap Binary files differnew file mode 100644 index 0000000..08deaeb --- /dev/null +++ b/test/decoders/http/benchmarks/pcap/http_get_malformed.pcap diff --git a/test/decoders/http/benchmarks/pcap/http_get_multi_trans.pcap b/test/decoders/http/benchmarks/pcap/http_get_multi_trans.pcap Binary files differnew file mode 100644 index 0000000..9c0d2e7 --- /dev/null +++ b/test/decoders/http/benchmarks/pcap/http_get_multi_trans.pcap diff --git a/test/decoders/http/benchmarks/pcap/http_get_req_pipeline.pcap b/test/decoders/http/benchmarks/pcap/http_get_req_pipeline.pcap Binary files differnew file mode 100644 index 0000000..f805493 --- /dev/null +++ b/test/decoders/http/benchmarks/pcap/http_get_req_pipeline.pcap diff --git a/test/decoders/http/benchmarks/pcap/http_get_single_trans.pcap b/test/decoders/http/benchmarks/pcap/http_get_single_trans.pcap Binary files differnew file mode 100644 index 0000000..a4b6bea --- /dev/null +++ b/test/decoders/http/benchmarks/pcap/http_get_single_trans.pcap diff --git a/test/decoders/http/benchmarks/pcap/http_gzip_out_of_order.pcap b/test/decoders/http/benchmarks/pcap/http_gzip_out_of_order.pcap Binary files differnew file mode 100644 index 0000000..b3bb169 --- /dev/null +++ b/test/decoders/http/benchmarks/pcap/http_gzip_out_of_order.pcap diff --git a/test/decoders/http/benchmarks/pcap/http_hdr_truncated_after_kv.pcap b/test/decoders/http/benchmarks/pcap/http_hdr_truncated_after_kv.pcap Binary files differnew file mode 100644 index 0000000..de9f018 --- /dev/null +++ b/test/decoders/http/benchmarks/pcap/http_hdr_truncated_after_kv.pcap diff --git a/test/decoders/http/benchmarks/pcap/http_hdr_truncated_in_kv.pcap b/test/decoders/http/benchmarks/pcap/http_hdr_truncated_in_kv.pcap Binary files differnew file mode 100644 index 0000000..b4015c9 --- /dev/null +++ b/test/decoders/http/benchmarks/pcap/http_hdr_truncated_in_kv.pcap diff --git a/test/decoders/http/benchmarks/pcap/http_hdr_value_empty.pcap b/test/decoders/http/benchmarks/pcap/http_hdr_value_empty.pcap Binary files differnew file mode 100644 index 0000000..bb22243 --- /dev/null +++ b/test/decoders/http/benchmarks/pcap/http_hdr_value_empty.pcap diff --git a/test/decoders/http/benchmarks/pcap/http_hdrs_exceed_maximum.pcap b/test/decoders/http/benchmarks/pcap/http_hdrs_exceed_maximum.pcap Binary files differnew file mode 100644 index 0000000..537bffa --- /dev/null +++ b/test/decoders/http/benchmarks/pcap/http_hdrs_exceed_maximum.pcap diff --git a/test/decoders/http/benchmarks/pcap/http_multi_parse_error.pcap b/test/decoders/http/benchmarks/pcap/http_multi_parse_error.pcap Binary files differnew file mode 100644 index 0000000..b57e275 --- /dev/null +++ b/test/decoders/http/benchmarks/pcap/http_multi_parse_error.pcap diff --git a/test/decoders/http/benchmarks/pcap/http_no_content_length.pcap b/test/decoders/http/benchmarks/pcap/http_no_content_length.pcap Binary files differnew file mode 100644 index 0000000..28e6881 --- /dev/null +++ b/test/decoders/http/benchmarks/pcap/http_no_content_length.pcap diff --git a/test/decoders/http/benchmarks/pcap/http_out_of_order.pcap b/test/decoders/http/benchmarks/pcap/http_out_of_order.pcap Binary files differnew file mode 100644 index 0000000..7a40e5b --- /dev/null +++ b/test/decoders/http/benchmarks/pcap/http_out_of_order.pcap diff --git a/test/decoders/http/benchmarks/pcap/http_over_pppoe.pcap b/test/decoders/http/benchmarks/pcap/http_over_pppoe.pcap Binary files differnew file mode 100644 index 0000000..a6587cb --- /dev/null +++ b/test/decoders/http/benchmarks/pcap/http_over_pppoe.pcap diff --git a/test/decoders/http/benchmarks/pcap/http_over_tcp_keepalive.pcap b/test/decoders/http/benchmarks/pcap/http_over_tcp_keepalive.pcap Binary files differnew file mode 100644 index 0000000..e8d9a34 --- /dev/null +++ b/test/decoders/http/benchmarks/pcap/http_over_tcp_keepalive.pcap diff --git a/test/decoders/http/benchmarks/pcap/http_over_tls.pcap b/test/decoders/http/benchmarks/pcap/http_over_tls.pcap Binary files differnew file mode 100644 index 0000000..71c557e --- /dev/null +++ b/test/decoders/http/benchmarks/pcap/http_over_tls.pcap diff --git a/test/decoders/http/benchmarks/pcap/http_pipeline_C2S.pcap b/test/decoders/http/benchmarks/pcap/http_pipeline_C2S.pcap Binary files differnew file mode 100644 index 0000000..360e0ed --- /dev/null +++ b/test/decoders/http/benchmarks/pcap/http_pipeline_C2S.pcap diff --git a/test/decoders/http/benchmarks/pcap/http_pipeline_S2C.pcap b/test/decoders/http/benchmarks/pcap/http_pipeline_S2C.pcap Binary files differnew file mode 100644 index 0000000..a7d473f --- /dev/null +++ b/test/decoders/http/benchmarks/pcap/http_pipeline_S2C.pcap diff --git a/test/decoders/http/benchmarks/pcap/http_pipeline_header_splitting.pcap b/test/decoders/http/benchmarks/pcap/http_pipeline_header_splitting.pcap Binary files differnew file mode 100644 index 0000000..57acce5 --- /dev/null +++ b/test/decoders/http/benchmarks/pcap/http_pipeline_header_splitting.pcap diff --git a/test/decoders/http/benchmarks/pcap/http_post.pcap b/test/decoders/http/benchmarks/pcap/http_post.pcap Binary files differnew file mode 100644 index 0000000..cb5843e --- /dev/null +++ b/test/decoders/http/benchmarks/pcap/http_post.pcap diff --git a/test/decoders/http/benchmarks/pcap/http_post_c2s.pcap b/test/decoders/http/benchmarks/pcap/http_post_c2s.pcap Binary files differnew file mode 100644 index 0000000..973a5fb --- /dev/null +++ b/test/decoders/http/benchmarks/pcap/http_post_c2s.pcap diff --git a/test/decoders/http/benchmarks/pcap/http_post_multipart_form_data.pcap b/test/decoders/http/benchmarks/pcap/http_post_multipart_form_data.pcap Binary files differnew file mode 100644 index 0000000..052d326 --- /dev/null +++ b/test/decoders/http/benchmarks/pcap/http_post_multipart_form_data.pcap diff --git a/test/decoders/http/benchmarks/pcap/http_post_s2c.pcap b/test/decoders/http/benchmarks/pcap/http_post_s2c.pcap Binary files differnew file mode 100644 index 0000000..0be23a8 --- /dev/null +++ b/test/decoders/http/benchmarks/pcap/http_post_s2c.pcap diff --git a/test/decoders/http/benchmarks/pcap/http_post_single_trans.pcap b/test/decoders/http/benchmarks/pcap/http_post_single_trans.pcap Binary files differnew file mode 100644 index 0000000..dfa37d3 --- /dev/null +++ b/test/decoders/http/benchmarks/pcap/http_post_single_trans.pcap diff --git a/test/decoders/http/benchmarks/pcap/http_req_1byte_sliding_window.pcap b/test/decoders/http/benchmarks/pcap/http_req_1byte_sliding_window.pcap Binary files differnew file mode 100644 index 0000000..632c676 --- /dev/null +++ b/test/decoders/http/benchmarks/pcap/http_req_1byte_sliding_window.pcap diff --git a/test/decoders/http/benchmarks/pcap/http_res_1byte_sliding_window.pcap b/test/decoders/http/benchmarks/pcap/http_res_1byte_sliding_window.pcap Binary files differnew file mode 100644 index 0000000..6d1d6a4 --- /dev/null +++ b/test/decoders/http/benchmarks/pcap/http_res_1byte_sliding_window.pcap diff --git a/test/decoders/http/benchmarks/pcap/http_res_gzip.pcap b/test/decoders/http/benchmarks/pcap/http_res_gzip.pcap Binary files differnew file mode 100644 index 0000000..04b9998 --- /dev/null +++ b/test/decoders/http/benchmarks/pcap/http_res_gzip.pcap diff --git a/test/decoders/http/benchmarks/pcap/http_session_exception_c2s.pcap b/test/decoders/http/benchmarks/pcap/http_session_exception_c2s.pcap Binary files differnew file mode 100644 index 0000000..eb93c24 --- /dev/null +++ b/test/decoders/http/benchmarks/pcap/http_session_exception_c2s.pcap diff --git a/test/decoders/http/benchmarks/pcap/http_session_exception_s2c.pcap b/test/decoders/http/benchmarks/pcap/http_session_exception_s2c.pcap Binary files differnew file mode 100644 index 0000000..d5caa49 --- /dev/null +++ b/test/decoders/http/benchmarks/pcap/http_session_exception_s2c.pcap diff --git a/test/decoders/http/benchmarks/pcap/http_trans_pipeline.pcap b/test/decoders/http/benchmarks/pcap/http_trans_pipeline.pcap Binary files differnew file mode 100644 index 0000000..43438e1 --- /dev/null +++ b/test/decoders/http/benchmarks/pcap/http_trans_pipeline.pcap diff --git a/test/decoders/http/benchmarks/pcap/http_tunnel_for_http.pcap b/test/decoders/http/benchmarks/pcap/http_tunnel_for_http.pcap Binary files differnew file mode 100644 index 0000000..0654576 --- /dev/null +++ b/test/decoders/http/benchmarks/pcap/http_tunnel_for_http.pcap diff --git a/test/decoders/http/benchmarks/pcap/http_tunnel_for_http_C2S.pcap b/test/decoders/http/benchmarks/pcap/http_tunnel_for_http_C2S.pcap Binary files differnew file mode 100644 index 0000000..db336d9 --- /dev/null +++ b/test/decoders/http/benchmarks/pcap/http_tunnel_for_http_C2S.pcap diff --git a/test/decoders/http/benchmarks/pcap/http_tunnel_for_http_S2C.pcap b/test/decoders/http/benchmarks/pcap/http_tunnel_for_http_S2C.pcap Binary files differnew file mode 100644 index 0000000..f9bb2f5 --- /dev/null +++ b/test/decoders/http/benchmarks/pcap/http_tunnel_for_http_S2C.pcap diff --git a/test/decoders/http/benchmarks/pcap/http_tunnel_for_pop3.pcap b/test/decoders/http/benchmarks/pcap/http_tunnel_for_pop3.pcap Binary files differnew file mode 100644 index 0000000..6df9669 --- /dev/null +++ b/test/decoders/http/benchmarks/pcap/http_tunnel_for_pop3.pcap diff --git a/test/decoders/http/benchmarks/pcap/http_tunnel_s2c_only_hdr.pcap b/test/decoders/http/benchmarks/pcap/http_tunnel_s2c_only_hdr.pcap Binary files differnew file mode 100644 index 0000000..6887fec --- /dev/null +++ b/test/decoders/http/benchmarks/pcap/http_tunnel_s2c_only_hdr.pcap diff --git a/test/decoders/http/benchmarks/pcap/http_upgrade_http2.pcap b/test/decoders/http/benchmarks/pcap/http_upgrade_http2.pcap Binary files differnew file mode 100644 index 0000000..a77847a --- /dev/null +++ b/test/decoders/http/benchmarks/pcap/http_upgrade_http2.pcap diff --git a/test/decoders/http/benchmarks/pcap/http_upgrade_websocket.pcap b/test/decoders/http/benchmarks/pcap/http_upgrade_websocket.pcap Binary files differnew file mode 100644 index 0000000..b823d7e --- /dev/null +++ b/test/decoders/http/benchmarks/pcap/http_upgrade_websocket.pcap diff --git a/test/decoders/http/benchmarks/pcap/http_url_test_with_host.pcap b/test/decoders/http/benchmarks/pcap/http_url_test_with_host.pcap Binary files differnew file mode 100644 index 0000000..8a57c4a --- /dev/null +++ b/test/decoders/http/benchmarks/pcap/http_url_test_with_host.pcap diff --git a/test/decoders/http/benchmarks/pcap/http_url_test_without_host.pcap b/test/decoders/http/benchmarks/pcap/http_url_test_without_host.pcap Binary files differnew file mode 100644 index 0000000..0036379 --- /dev/null +++ b/test/decoders/http/benchmarks/pcap/http_url_test_without_host.pcap diff --git a/test/decoders/http/benchmarks/pcap/http_url_test_without_host_v6.pcap b/test/decoders/http/benchmarks/pcap/http_url_test_without_host_v6.pcap Binary files differnew file mode 100644 index 0000000..70937c8 --- /dev/null +++ b/test/decoders/http/benchmarks/pcap/http_url_test_without_host_v6.pcap diff --git a/test/decoders/http/benchmarks/pcap/http_whitespace_before_header.pcap b/test/decoders/http/benchmarks/pcap/http_whitespace_before_header.pcap Binary files differnew file mode 100644 index 0000000..8317361 --- /dev/null +++ b/test/decoders/http/benchmarks/pcap/http_whitespace_before_header.pcap diff --git a/test/decoders/http/benchmarks/pcap/http_zlib_deadlock.pcap b/test/decoders/http/benchmarks/pcap/http_zlib_deadlock.pcap Binary files differnew file mode 100644 index 0000000..05862f8 --- /dev/null +++ b/test/decoders/http/benchmarks/pcap/http_zlib_deadlock.pcap diff --git a/test/decoders/http/benchmarks/pcap/non_http.pcap b/test/decoders/http/benchmarks/pcap/non_http.pcap Binary files differnew file mode 100644 index 0000000..931b43b --- /dev/null +++ b/test/decoders/http/benchmarks/pcap/non_http.pcap diff --git a/test/decoders/http/http_decoder_gtest.cpp b/test/decoders/http/http_decoder_gtest.cpp deleted file mode 100644 index 68f275f..0000000 --- a/test/decoders/http/http_decoder_gtest.cpp +++ /dev/null @@ -1,64 +0,0 @@ -#include <gtest/gtest.h> -#include <unistd.h> -#include <stdio.h> -#include "http.h" -#include "http_decoder_private.h" - -void httpd_url_decode(const char *string, size_t length, char *ostring, size_t *olen); -TEST(http_url_decoder, none) -{ - char decode_url_buf[2048]; - size_t decode_url_len = sizeof(decode_url_buf); - const char *encode_url = "https://docs.geedge.net/#all-updates"; - httpd_url_decode(encode_url, strlen(encode_url), decode_url_buf, &decode_url_len); - - EXPECT_STREQ("https://docs.geedge.net/#all-updates", decode_url_buf); - EXPECT_EQ(decode_url_len, strlen("https://docs.geedge.net/#all-updates")); -} - -TEST(http_url_decoder, simple) -{ - char decode_url_buf[2048]; - size_t decode_url_len = sizeof(decode_url_buf); - const char *encode_url = "http://a.b.cn/%A1%B2%C3%D4"; - httpd_url_decode(encode_url, strlen(encode_url), decode_url_buf, &decode_url_len); - - const unsigned char expect_result[] = - {0x68, 0x74, 0x74, 0x70, - 0x3A, 0x2F, 0x2F, 0x61, - 0x2E, 0x62, 0x2E, 0x63, - 0x6E, 0x2F, 0xA1, 0xB2, - 0xC3, 0xD4, 0x00 - }; - EXPECT_STREQ((char *)expect_result, decode_url_buf); - EXPECT_EQ(decode_url_len, sizeof(expect_result)-1); -} - -TEST(http_url_decoder, chinese1) -{ - char decode_url_buf[2048]; - size_t decode_url_len = sizeof(decode_url_buf); - const char *encode_url = "http://www.baidu.com/%E6%B5%8B%E8%AF%95%E4%B8%AD%E6%96%87%E8%A7%A3%E7%A0%81"; - httpd_url_decode(encode_url, strlen(encode_url), decode_url_buf, &decode_url_len); - - EXPECT_STREQ("http://www.baidu.com/\xE6\xB5\x8B\xE8\xAF\x95\xE4\xB8\xAD\xE6\x96\x87\xE8\xA7\xA3\xE7\xA0\x81", decode_url_buf); - EXPECT_EQ(decode_url_len, strlen("http://www.baidu.com/\xE6\xB5\x8B\xE8\xAF\x95\xE4\xB8\xAD\xE6\x96\x87\xE8\xA7\xA3\xE7\xA0\x81")); -} - -TEST(http_url_decoder, chinese2) -{ - char decode_url_buf[2048]; - size_t decode_url_len = sizeof(decode_url_buf); - const char *encode_url = "http%3A%2F%2Fwww.baidu.com%2F%E7%BC%96%E8%A7%A3%E7%A0%81%E6%B5%8B%E8%AF%95%E5%93%88%E5%93%88"; - httpd_url_decode(encode_url, strlen(encode_url), decode_url_buf, &decode_url_len); - - EXPECT_STREQ("http://www.baidu.com/\xE7\xBC\x96\xE8\xA7\xA3\xE7\xA0\x81\xE6\xB5\x8B\xE8\xAF\x95\xE5\x93\x88\xE5\x93\x88", decode_url_buf); - EXPECT_EQ(decode_url_len, strlen("http://www.baidu.com/\xE7\xBC\x96\xE8\xA7\xA3\xE7\xA0\x81\xE6\xB5\x8B\xE8\xAF\x95\xE5\x93\x88\xE5\x93\x88")); -} - - -int main(int argc, char const *argv[]) -{ - ::testing::InitGoogleTest(&argc, (char **)argv); - return RUN_ALL_TESTS(); -} diff --git a/test/decoders/http/http_decoder_perf_main.cpp b/test/decoders/http/http_decoder_perf_main.cpp deleted file mode 100644 index 7d314e9..0000000 --- a/test/decoders/http/http_decoder_perf_main.cpp +++ /dev/null @@ -1,226 +0,0 @@ -#ifdef __cplusplus -extern "C" -{ -#endif -#include <stellar/session.h> -#include <stellar/stellar_mq.h> -#include <stellar/stellar_exdata.h> -#include <stellar/stellar.h> -#ifdef __cplusplus -} -#endif -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <unistd.h> -#include <time.h> -#include <fieldstat/fieldstat_easy.h> -#include "http_decoder_gtest.h" - -#define TIME_MEASURE 1 -#if TIME_MEASURE -#define TIME_START() struct timespec _start_time, _end_time; long long time_diff_ns; clock_gettime(CLOCK_REALTIME, &_start_time) -#define TIME_UPDATE() clock_gettime(CLOCK_REALTIME, &_start_time) -#define TIME_DIFF() \ - do { \ - clock_gettime(CLOCK_REALTIME, &_end_time); \ - if (_end_time.tv_sec == _start_time.tv_sec)\ - {\ - time_diff_ns = (_end_time.tv_nsec - _start_time.tv_nsec);\ - }else{\ - time_diff_ns = (_end_time.tv_sec * 1000 * 1000 * 1000 + _end_time.tv_nsec) - (_start_time.tv_sec * 1000 * 1000 * 1000 + _start_time.tv_nsec);\ - }\ - }while (0) -#else -#define TIME_START() -#define TIME_DIFF() -#endif - -struct test_packet{ - const char *payload; - size_t payload_len; - u_int8_t dir; -}; -extern "C" void *http_decoder_perf_plug_init(struct stellar *st); -extern "C" void *http_decoder_init(struct stellar *st); -extern "C" void http_decoder_exit(void *plugin_env); -extern "C" void *httpd_session_ctx_new_cb(struct session *sess, void *plugin_env); -extern "C" void _httpd_ex_data_free_cb(struct session *s, int idx,void *ex_data, void *arg); -extern "C" void http_decoder_tcp_stream_msg_cb(struct session *sess, int topic_id, const void *msg, void *no_use_ctx, void *plugin_env); -extern "C" void http_decoder_perf_entry(struct session *sess, int topic_id, const void *raw_msg, void *per_session_ctx, void *plugin_env); - -static struct fieldstat_easy *fs4_instance; -static int fs4_simple_id; -static int fs4_long_long_url_id; -static int fs4_frag_id; - -static void perf_test_loop(struct stellar *st, int tcp_stream_topic_id, struct test_packet *test_payload, int test_payload_index_max, int fs4_metric_id) -{ - int idx = 0; - struct session *sess; - TIME_START(); - sess = stellar_session_new(st, tcp_stream_topic_id, test_payload[idx].payload, test_payload[idx].payload_len, test_payload[idx].dir); - idx++; - TIME_DIFF(); - fieldstat_easy_histogram_record(fs4_instance, 0, fs4_metric_id, NULL, 0, time_diff_ns); - - for(; idx < test_payload_index_max; idx++){ - TIME_UPDATE(); - stellar_session_active(st, sess, tcp_stream_topic_id, test_payload[idx].payload, test_payload[idx].payload_len, test_payload[idx].dir); - TIME_DIFF(); - fieldstat_easy_histogram_record(fs4_instance, 0, fs4_metric_id, NULL, 0, time_diff_ns); - } - - TIME_UPDATE(); - stellar_session_close(st, sess, tcp_stream_topic_id); - TIME_DIFF(); - fieldstat_easy_histogram_record(fs4_instance, 0, fs4_metric_id, NULL, 0, time_diff_ns); -} - -#define SET_DATA_LENGTH_DIR(pkt_payload, cstr_in_heap, cur_dir, tmp_index) \ - pkt_payload.payload = cstr_in_heap; \ - pkt_payload.payload_len = strlen(pkt_payload.payload); \ - pkt_payload.dir = cur_dir;\ - tmp_index++; - -static void init_test_data_simple(struct test_packet *test_payload, int *index) -{ - int tmp_index = 0; - const char *c2s_payload = strdup("GET / HTTP/1.1\r\nHost: www.simple.com\r\nConnection: keep-alive\r\nCache-Control: max-age=0\r\nUpgrade-Insecure-Requests: 1\r\nUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 Edge/16.16299\r\nAccept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8\r\nAccept-Encoding: gzip, deflate\r\nAccept-Language: zh-CN,zh;q=0.9\r\n\r\n"); - SET_DATA_LENGTH_DIR(test_payload[tmp_index], c2s_payload, FLOW_DIRECTION_C2S , tmp_index); - - const char *content = "Hello, http decoder perf test simple!!!"; - int content_length = strlen(content); - char *s2c_payload = (char *)malloc(1024); - snprintf(s2c_payload, 1024, "HTTP/1.1 200 OK\r\nServer: Apache-Coyote/1.1\r\nConnection: keep-alive\r\nDate: Sat, 01 May 2024 01:36:57 GMT\r\nContent-Type: text/html;charset=UTF-8\r\nContent-Length: %d\r\n\r\n%s", content_length, content); - - SET_DATA_LENGTH_DIR(test_payload[tmp_index], s2c_payload, FLOW_DIRECTION_S2C, tmp_index); - *index = tmp_index; -} - -static void init_test_data_frag(struct test_packet *test_payload, int *index) -{ - int tmp_index = 0; - /* c2s */ - SET_DATA_LENGTH_DIR(test_payload[tmp_index], strdup("GET / HTTP/1.1\r\n"), FLOW_DIRECTION_C2S , tmp_index); - SET_DATA_LENGTH_DIR(test_payload[tmp_index], strdup("Host: www.fragment.com\r\n"), FLOW_DIRECTION_C2S , tmp_index); - SET_DATA_LENGTH_DIR(test_payload[tmp_index], strdup("Cache-Control: max-age=0\r\n"), FLOW_DIRECTION_C2S , tmp_index); - SET_DATA_LENGTH_DIR(test_payload[tmp_index], strdup("Connection: keep-alive\r\n"), FLOW_DIRECTION_C2S , tmp_index); - SET_DATA_LENGTH_DIR(test_payload[tmp_index], strdup("Referer: http://fragment.com/register.jsp?redirect:http://aa.bb.cc.dd.com/?\r\n"), FLOW_DIRECTION_C2S , tmp_index); - SET_DATA_LENGTH_DIR(test_payload[tmp_index], strdup("User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 Edge/16.16299\r\n"), FLOW_DIRECTION_C2S , tmp_index); - SET_DATA_LENGTH_DIR(test_payload[tmp_index], strdup("Cookie: JSESSIONID=385C79E211D561C0CA13D90F150F603D34875GH87FSHG8S7RTHG74875GHS8R7THG87SRTH\r\n"), FLOW_DIRECTION_C2S , tmp_index); - SET_DATA_LENGTH_DIR(test_payload[tmp_index], strdup("Accept: */*\r\n"), FLOW_DIRECTION_C2S , tmp_index); - SET_DATA_LENGTH_DIR(test_payload[tmp_index], strdup("Accept-Encoding: gzip, deflate\r\n"), FLOW_DIRECTION_C2S , tmp_index); - SET_DATA_LENGTH_DIR(test_payload[tmp_index], strdup("\r\n"), FLOW_DIRECTION_C2S , tmp_index); //header EOF - - /* s2c */ - SET_DATA_LENGTH_DIR(test_payload[tmp_index], strdup("HTTP/1.1 200 OK\r\n"), FLOW_DIRECTION_S2C, tmp_index); - SET_DATA_LENGTH_DIR(test_payload[tmp_index], strdup("Server: Apache-Coyote/1.1\r\n"), FLOW_DIRECTION_S2C, tmp_index); - SET_DATA_LENGTH_DIR(test_payload[tmp_index], strdup("Connection: keep-alive\r\n"), FLOW_DIRECTION_S2C, tmp_index); - SET_DATA_LENGTH_DIR(test_payload[tmp_index], strdup("Content-Type: text/html;charset=UTF-8\r\n"), FLOW_DIRECTION_S2C, tmp_index); - SET_DATA_LENGTH_DIR(test_payload[tmp_index], strdup("Date: Sat, 01 May 2024 01:36:57 GMT\r\n"), FLOW_DIRECTION_S2C, tmp_index); - - char *cont_len_buf = (char *)malloc(1024); - const char *s2c_payload = strdup("Hello, http decoder perf test fragment!!!"); - int content_length = strlen(s2c_payload); - snprintf(cont_len_buf, 1024, "Content-Length: %d\r\n", content_length); - SET_DATA_LENGTH_DIR(test_payload[tmp_index], cont_len_buf, FLOW_DIRECTION_S2C, tmp_index); - - SET_DATA_LENGTH_DIR(test_payload[tmp_index], strdup("\r\n"), FLOW_DIRECTION_S2C, tmp_index); //header EOF - SET_DATA_LENGTH_DIR(test_payload[tmp_index], s2c_payload, FLOW_DIRECTION_S2C, tmp_index); - *index = tmp_index; -} - -static void init_test_data_long_long_url(struct test_packet *test_payload, int *index) -{ - int tmp_index = 0; - - const char *request_line_frag1 = strdup("GET /long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/\ -/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/\ -/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/\ -/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/\ -/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/\ -/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/\ -/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/\ -/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/"); - SET_DATA_LENGTH_DIR(test_payload[tmp_index], request_line_frag1, FLOW_DIRECTION_C2S , tmp_index); - - const char *request_line_frag2 = strdup("long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/\ -/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/\ -/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long.index.html HTTP/1.1\r\n"); - SET_DATA_LENGTH_DIR(test_payload[tmp_index], request_line_frag2, FLOW_DIRECTION_C2S , tmp_index); - - const char *request_line_frag3 = strdup("Host: www.long-long-url.com\r\nConnection: keep-alive\r\nCache-Control: max-age=0\r\nUpgrade-Insecure-Requests: 1\r\nUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 Edge/16.16299\r\nAccept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8\r\nAccept-Encoding: gzip, deflate\r\nAccept-Language: zh-CN,zh;q=0.9\r\n\r\n"); - SET_DATA_LENGTH_DIR(test_payload[tmp_index], request_line_frag3, FLOW_DIRECTION_C2S , tmp_index); - - const char *content = "Hello, http decoder perf test long long url!!!"; - int content_length = strlen(content); - char *s2c_payload = (char *)malloc(1024); - snprintf(s2c_payload, 1024, "HTTP/1.1 200 OK\r\nServer: Apache-Coyote/1.1\r\nConnection: keep-alive\r\nDate: Sat, 01 May 2024 01:36:57 GMT\r\nContent-Type: text/html;charset=UTF-8\r\nContent-Length: %d\r\n\r\n%s", content_length, content); - - SET_DATA_LENGTH_DIR(test_payload[tmp_index], s2c_payload, FLOW_DIRECTION_S2C, tmp_index); - *index = tmp_index; -} - -static void test_payload_free(struct test_packet *test_payload, int test_payload_index_max) -{ - for(int i = 0; i < test_payload_index_max; i++){ - if(test_payload[i].payload){ - free((void *)test_payload[i].payload); - } - } -} - -static void perf_stat_init(void) -{ - fs4_instance = fieldstat_easy_new(1, "http_decoder_test", NULL, 0); - fieldstat_easy_enable_auto_output(fs4_instance, "./httpd_hisgram.json", 1); - - fs4_simple_id = fieldstat_easy_register_histogram(fs4_instance, "simple", 1, 99999999, 5); - fs4_frag_id = fieldstat_easy_register_histogram(fs4_instance, "frag", 1, 99999999, 5); - fs4_long_long_url_id = fieldstat_easy_register_histogram(fs4_instance, "long-url", 1, 99999999, 5); -} - -int main(int argc, char const *argv[]) -{ - struct test_packet test_payload_simple [4] = {}; - int payload_index_simple = 0; - struct test_packet test_payload_long_long_url [8] = {}; - int payload_index_long_long_url = 0; - struct test_packet test_payload_frag [32] = {}; - int payload_index_frag = 0; - - struct stellar *st = stellar_init(); - - int tcp_stream_topic_id = stellar_mq_get_topic_id(st, TOPIC_TCP_STREAM); - - if(stellar_load_plugin(st, http_decoder_init) < 0){ - fprintf(stderr, "load plugin 'http_decoder_init' failed\n"); - return -1; - } - - if(stellar_load_plugin(st, http_decoder_perf_plug_init) < 0){ - fprintf(stderr, "load plugin 'http_decoder_perf_plug_init' failed\n"); - return -1; - } - - perf_stat_init(); - init_test_data_simple(test_payload_simple, &payload_index_simple); - init_test_data_long_long_url(test_payload_long_long_url, &payload_index_long_long_url); - init_test_data_frag(test_payload_frag, &payload_index_frag); - - // while(1){ - for(int i = 0; i < 1000; i++){ - perf_test_loop(st, tcp_stream_topic_id,test_payload_simple, payload_index_simple, fs4_simple_id); - perf_test_loop(st, tcp_stream_topic_id,test_payload_long_long_url, payload_index_long_long_url, fs4_long_long_url_id); - perf_test_loop(st, tcp_stream_topic_id,test_payload_frag, payload_index_frag, fs4_frag_id); - } - - test_payload_free(test_payload_simple, sizeof(test_payload_simple)/sizeof(struct test_packet)) ; - test_payload_free(test_payload_long_long_url, sizeof(test_payload_long_long_url)/sizeof(struct test_packet)) ; - test_payload_free(test_payload_frag, sizeof(test_payload_frag)/sizeof(struct test_packet)) ; - stellar_destroy(st); - sleep(1); - fieldstat_easy_free(fs4_instance); - return 0; -} diff --git a/test/decoders/http/http_decoder_perf_plug.cpp b/test/decoders/http/http_decoder_perf_plug.cpp deleted file mode 100644 index 338acaa..0000000 --- a/test/decoders/http/http_decoder_perf_plug.cpp +++ /dev/null @@ -1,143 +0,0 @@ -#include "http.h" -#include <stdio.h> -#include <time.h> -#include <unistd.h> -#include <assert.h> -#include <string.h> - -#ifdef __cplusplus -extern "C" -{ -#include "http_decoder_private.h" -#include "cJSON.h" -} -#endif - -#define MAX_KEY_STR_LEN 2048 - -static int g_result_count = 0; -static int g_header_count = 1; -static int g_exdata_idx = -1; -static int g_topic_id = -1; -static int g_plugin_id = -1; - -#define DEBUG_PRINT(fmt, ...) //printf(fmt, ##__VA_ARGS__) - -extern "C" void http_decoder_perf_entry(struct session *sess, int topic_id, const void *raw_msg, void *per_session_ctx, void *plugin_env) -{ - struct http_request_line req_line = {0}; - struct http_response_line res_line = {0}; - struct http_header header = {0}; - hstring url = {}; - hstring body = {}; - struct http_message *msg = (struct http_message *)raw_msg; - enum http_message_type msg_type = http_message_type_get(msg); - void *ret1, *ret2; - - switch (msg_type) - { - case HTTP_MESSAGE_REQ_LINE: - DEBUG_PRINT("---------------------------------------------------------------\n"); - http_message_request_line_get0(msg, &req_line); - if (req_line.uri.iov_base) - { - DEBUG_PRINT("req_line.method.iov_base: %.*s\n", req_line.method.iov_len, req_line.method.iov_base); - ret1 = memmem(req_line.method.iov_base, req_line.method.iov_len, "PUT", 3); - DEBUG_PRINT("req_line.version.iov_base: %.*s\n", req_line.version.iov_len, req_line.version.iov_base); - } - break; - case HTTP_MESSAGE_REQ_HEADER: - while (http_message_header_next(msg, &header) >= 0) - { - ret1 = memmem(header.key.iov_base, header.key.iov_len, "key", 3); - ret2 = memmem(header.val.iov_base, header.val.iov_len, "val", 3); - DEBUG_PRINT("REQ header: %.*s : %.*s\n", (int)header.key.iov_len, header.key.iov_base, (int)header.val.iov_len, header.val.iov_base); - } - http_message_raw_url_get0(msg, &url); - if(url.iov_base && url.iov_len){ - DEBUG_PRINT("URL: %.*s\n", url.iov_len, url.iov_base); - } - break; - case HTTP_MESSAGE_REQ_BODY: - // http_message_get_request_raw_body(msg, &body); - // output_http_body(&body, 0); - http_message_decompress_body_get0(msg, &body); - // output_http_body(&body, 1); - ret1 = memmem(body.iov_base, body.iov_len, "</html>", 7); - break; - case HTTP_MESSAGE_RES_LINE: - http_message_response_line_get0(msg, &res_line); - ret1 = memmem(res_line.status.iov_base, res_line.status.iov_len, "OK", 2); - DEBUG_PRINT("res_line.status.iov_base: %.*s\n", (int)res_line.status.iov_len, res_line.status.iov_base); - break; - case HTTP_MESSAGE_RES_HEADER: - while (http_message_header_next(msg, &header) >= 0) - { - ret1 = memmem(header.key.iov_base, header.key.iov_len, "key", 3); - ret2 = memmem(header.val.iov_base, header.val.iov_len, "val", 3); - DEBUG_PRINT("RES header: %.*s : %.*s\n", (int)header.key.iov_len, header.key.iov_base, (int)header.val.iov_len, header.val.iov_base); - } - break; - case HTTP_MESSAGE_RES_BODY_START: - case HTTP_MESSAGE_RES_BODY: - case HTTP_MESSAGE_RES_BODY_END: - http_message_raw_body_get0(msg, &body); - if(body.iov_base!=NULL && body.iov_len > 0){ - DEBUG_PRINT("res raw body: %.*s\n", body.iov_len, body.iov_base); - } - // output_http_body(&body, 0); - http_message_decompress_body_get0(msg, &body); - if(body.iov_base!=NULL && body.iov_len > 0){ - // output_http_body(&body, 1); - ret1 = memmem(body.iov_base, body.iov_len, "</html>", 7); - DEBUG_PRINT("res unzip body: %.*s\n", body.iov_len, body.iov_base); - DEBUG_PRINT("---------------------------------------------------------------\n"); - } - break; - // to do: check payload - default: - break; - } - return; -} - -static on_session_msg_cb_func*g_entry_fun = &http_decoder_perf_entry; - -static void http_decoder_test_exdata_free(int idx, void *ex_ptr, void *arg) -{ - return; -} - -extern "C" void *http_decoder_perf_plug_init(struct stellar *st) -{ - g_plugin_id = stellar_session_plugin_register(st, NULL, NULL, NULL); - g_exdata_idx = stellar_exdata_new_index(st, "HTTP_DECODER_REQ_TEST", - http_decoder_test_exdata_free, - NULL); - if (g_exdata_idx < 0) - { - printf("[%s:%d]: can't get http_decoder exdata index !!!\n", __FUNCTION__, __LINE__); - exit(-1); - } - - g_topic_id = stellar_mq_get_topic_id(st, "HTTP_DECODER_MESSAGE"); - if (g_topic_id < 0) - { - printf("[%s:%d]: can't get http_decoder topic id !!!\n", __FUNCTION__, __LINE__); - exit(-1); - } - - stellar_session_mq_subscribe(st, g_topic_id, g_entry_fun, g_plugin_id); - // printf("http_decoder_test_init OK!\n"); - - return NULL; -} - -extern "C" void http_decoder_perf_plug_exit(void *test_ctx) -{ - if (test_ctx != NULL) - { - FREE(test_ctx); - } - printf("http_decoder_perf plug exit OK!\n"); -} diff --git a/test/decoders/http/http_gtest.cpp b/test/decoders/http/http_gtest.cpp new file mode 100644 index 0000000..4f99fb6 --- /dev/null +++ b/test/decoders/http/http_gtest.cpp @@ -0,0 +1,358 @@ +#include <gtest/gtest.h> +#include <unistd.h> +#include <stdio.h> +#include "zlib.h" +#include "md5/md5.h" +#include "http.h" +#include "http_decoder_private.h" +#include "brotli/decode.h" +#include "brotli/encode.h" +#include "event2/buffer.h" + +#define ZIP_UNZIP_TEST_DATA_LEN (1024 * 1024) +void httpd_url_decode(const char *string, size_t length, char *ostring, size_t *olen); +TEST(http_url_decoder, none_encode) +{ + char decoded_url_buf[2048] = {}; + size_t decode_url_buf_len = sizeof(decoded_url_buf); + const char *encode_url = "https://docs.geedge.net/#all-updates"; + size_t decoded_url_len = http_url_decode(encode_url, strlen(encode_url), decoded_url_buf, decode_url_buf_len); + EXPECT_EQ(decoded_url_len, strlen("https://docs.geedge.net/#all-updates")); + EXPECT_STREQ("https://docs.geedge.net/#all-updates", decoded_url_buf); +} + +TEST(http_url_decoder, simple) +{ + char decoded_url_buf[2048] = {}; + size_t decoded_url_buf_len = sizeof(decoded_url_buf); + const char *encode_url = "http://a.b.cn/%A1%B2%C3%D4"; + size_t decoded_url_len = http_url_decode(encode_url, strlen(encode_url), decoded_url_buf, decoded_url_buf_len); + + const unsigned char expect_result[] = + {0x68, 0x74, 0x74, 0x70, + 0x3A, 0x2F, 0x2F, 0x61, + 0x2E, 0x62, 0x2E, 0x63, + 0x6E, 0x2F, 0xA1, 0xB2, + 0xC3, 0xD4, 0x00}; + EXPECT_EQ(decoded_url_len, sizeof(expect_result) - 1); + EXPECT_EQ(0, memcmp(expect_result, decoded_url_buf, decoded_url_len)); +} + +TEST(http_url_decoder, chinese1) +{ + char decoded_url_buf[2048] = {}; + size_t decoded_url_buf_len = sizeof(decoded_url_buf); + const char *encode_url = "http://www.baidu.com/%E6%B5%8B%E8%AF%95%E4%B8%AD%E6%96%87%E8%A7%A3%E7%A0%81"; + size_t decoded_url_len = http_url_decode(encode_url, strlen(encode_url), decoded_url_buf, decoded_url_buf_len); + + EXPECT_STREQ("http://www.baidu.com/\xE6\xB5\x8B\xE8\xAF\x95\xE4\xB8\xAD\xE6\x96\x87\xE8\xA7\xA3\xE7\xA0\x81", decoded_url_buf); + EXPECT_EQ(decoded_url_len, strlen("http://www.baidu.com/\xE6\xB5\x8B\xE8\xAF\x95\xE4\xB8\xAD\xE6\x96\x87\xE8\xA7\xA3\xE7\xA0\x81")); +} + +TEST(http_url_decoder, chinese2) +{ + char decoded_url_buf[2048]; + size_t decoded_url_buf_len = sizeof(decoded_url_buf); + const char *encode_url = "http%3A%2F%2Fwww.baidu.com%2F%E7%BC%96%E8%A7%A3%E7%A0%81%E6%B5%8B%E8%AF%95%E5%93%88%E5%93%88"; + size_t decoded_url_len = http_url_decode(encode_url, strlen(encode_url), decoded_url_buf, decoded_url_buf_len); + + EXPECT_EQ(0, memcmp("http://www.baidu.com/\xE7\xBC\x96\xE8\xA7\xA3\xE7\xA0\x81\xE6\xB5\x8B\xE8\xAF\x95\xE5\x93\x88\xE5\x93\x88", decoded_url_buf, decoded_url_len)); + EXPECT_EQ(decoded_url_len, strlen("http://www.baidu.com/\xE7\xBC\x96\xE8\xA7\xA3\xE7\xA0\x81\xE6\xB5\x8B\xE8\xAF\x95\xE5\x93\x88\xE5\x93\x88")); +} + +TEST(http, event_buffer) +{ + struct evbuffer *evbuf = evbuffer_new(); + + evbuffer_add(evbuf, "hello", 5); + + size_t len = evbuffer_get_length(evbuf); + EXPECT_EQ(len, 5); + char outbuf[16]; + len = evbuffer_copyout(evbuf, outbuf, sizeof(outbuf)); + EXPECT_EQ(len, 5); + EXPECT_EQ(0, memcmp(outbuf, "hello", 5)); + + evbuffer_add(evbuf, ",", 1); + evbuffer_add(evbuf, "world", 5); + + len = evbuffer_copyout(evbuf, outbuf, sizeof(outbuf)); + EXPECT_EQ(len, 11); + EXPECT_EQ(0, memcmp(outbuf, "hello,world", 11)); + + evbuffer_free(evbuf); +} + +static int http_compress_use_deflate(unsigned char *indata, size_t indata_len, unsigned char *zip_data, size_t *zip_data_len) +{ +#define ZIP_CHUNK 4096 +#define UZIP_CHUNK 16384 + unsigned have; + z_stream strm = {}; + + /* allocate deflate state */ + strm.zalloc = Z_NULL; + strm.zfree = Z_NULL; + strm.opaque = Z_NULL; + + int ret = deflateInit2(&strm, Z_DEFAULT_COMPRESSION, Z_DEFLATED, -MAX_WBITS, 9, Z_DEFAULT_STRATEGY); /* no bad return value */ + if (ret != Z_OK) + { + return -1; + } + + strm.next_in = indata; + strm.avail_in = indata_len; + + size_t read_raw_data_len = 0; + size_t ziped_len = 0; + int flush_mode; + do + { + /* run deflate() on input until output buffer not full, finish + compression if all of source has been read in */ + strm.avail_in = MIN(indata_len - read_raw_data_len, ZIP_CHUNK); + strm.next_in = indata + read_raw_data_len; + flush_mode = (read_raw_data_len + ZIP_CHUNK < indata_len) ? Z_NO_FLUSH : Z_FINISH; + do + { + unsigned char local_chunk_buf[UZIP_CHUNK]; + strm.avail_out = UZIP_CHUNK; + strm.next_out = local_chunk_buf; + ret = deflate(&strm, flush_mode); + assert(ret != Z_STREAM_ERROR); + have = UZIP_CHUNK - strm.avail_out; + if (have > 0) + { + memcpy(zip_data + ziped_len, local_chunk_buf, have); + ziped_len += have; + } + } while (strm.avail_out == 0); + read_raw_data_len += ZIP_CHUNK; + } while (read_raw_data_len < indata_len); + + *zip_data_len = ziped_len; + assert(strm.avail_in == 0); /* all input will be used */ + /* done when last data in file processed */ + + /* clean up and return */ + (void)deflateEnd(&strm); + return Z_OK; +} + +static int http_compress_use_brotli(unsigned char *input_data, size_t input_length, unsigned char *compressed_data, size_t *compressed_data_len) +{ + // Allocate memory for the compressed data + size_t compressed_length = BrotliEncoderMaxCompressedSize(input_length); + + // Create a Brotli encoder state + BrotliEncoderState *encoder = BrotliEncoderCreateInstance(NULL, NULL, NULL); + if (!encoder) + { + fprintf(stderr, "Failed to create Brotli encoder.\n"); + return 1; + } + // Set up the Brotli encoder + BrotliEncoderSetParameter(encoder, BROTLI_PARAM_QUALITY, 11); + + // Compress the data + size_t available_in = input_length; + const uint8_t *next_in = (const uint8_t *)input_data; + size_t available_out = compressed_length; + uint8_t *next_out = compressed_data; + + BrotliEncoderOperation op = BROTLI_OPERATION_FINISH; + if (!BrotliEncoderCompressStream(encoder, op, &available_in, &next_in, &available_out, &next_out, NULL)) + { + fprintf(stderr, "Brotli compression failed.\n"); + BrotliEncoderDestroyInstance(encoder); + *compressed_data_len = 0; + return -1; + } + // Calculate actual compressed size + size_t actual_compressed_length = compressed_length - available_out; + // printf("Original size: %zu\n", input_length); + // printf("Compressed size: %zu\n", actual_compressed_length); + + // Clean up + BrotliEncoderDestroyInstance(encoder); + *compressed_data_len = actual_compressed_length; + return 0; +} + +/* High Compression Ratio */ +static unsigned char *http_build_ascii_text(size_t data_len) +{ + unsigned char *raw_data = (unsigned char *)malloc(data_len); + for (int i = 0; i < (int)data_len; i++) + { + raw_data[i] = 'A' + i % 26; + } + return raw_data; +} + +/* Low Compression Ratio */ +static unsigned char *http_build_random_content(size_t data_len) +{ + srand(12345678); + unsigned char *raw_data = (unsigned char *)malloc(data_len); + for (int i = 0; i < (int)data_len; i++) + { + raw_data[i] = (unsigned char)(rand() ^ i); + } + return raw_data; +} + +static int http_zip_unzip_test(unsigned char *raw_data, size_t raw_data_len, enum http_content_encoding encoding, int input_zip_block_size) +{ + unsigned char raw_data_md5sum[16], zip_unzip_data_md5sum[16]; + MD5_CTX raw_data_md5_ctx = {}, zip_unzip_data_md5_ctx = {}; + + MD5Init(&raw_data_md5_ctx); + MD5Init(&zip_unzip_data_md5_ctx); + + MD5Update(&raw_data_md5_ctx, raw_data, raw_data_len); + MD5Final(raw_data_md5sum, &raw_data_md5_ctx); + + unsigned char *zip_data = (unsigned char *)malloc(raw_data_len * 2); + size_t zip_data_len = raw_data_len * 2; + if (HTTP_CONTENT_ENCODING_DEFLATE == encoding) + { + http_compress_use_deflate(raw_data, raw_data_len, zip_data, &zip_data_len); + } + else + { + http_compress_use_brotli(raw_data, raw_data_len, zip_data, &zip_data_len); + } + + struct http_content_decompress *decompress_ins = http_content_decompress_create(encoding); + unsigned char *unzip_data; + size_t unzip_data_len; + + size_t total_read_zip_size = 0; + size_t total_unziped_data_len = 0; + while (total_read_zip_size < zip_data_len) + { + unzip_data = NULL; + unzip_data_len = 0; + int decompress_input_len = MIN((size_t)input_zip_block_size, zip_data_len - total_read_zip_size); + int ret = http_content_decompress_write(decompress_ins, (char *)zip_data + total_read_zip_size, decompress_input_len, (char **)&unzip_data, &unzip_data_len); + if (ret < 0) + { + goto fail; + } + if (unzip_data && unzip_data_len) + { + MD5Update(&zip_unzip_data_md5_ctx, unzip_data, unzip_data_len); + total_unziped_data_len += unzip_data_len; + } + total_read_zip_size += decompress_input_len; + } + + free(zip_data); + http_content_decompress_destroy(decompress_ins); + MD5Final(zip_unzip_data_md5sum, &zip_unzip_data_md5_ctx); + + if (total_unziped_data_len != raw_data_len) + { + // printf("ERROR: zip-unzip data len:%zu, raw data len:%zu\n", total_unziped_data_len, raw_data_len); + return -1; + } + return memcmp(raw_data_md5sum, zip_unzip_data_md5sum, 16); + +fail: + free(zip_data); + http_content_decompress_destroy(decompress_ins); + MD5Final(zip_unzip_data_md5sum, &zip_unzip_data_md5_ctx); + return -1; +} + +/* This test takes a long time! use gtest --gtest_also_run_disabled_tests to run this test if needs. */ +TEST(http, DISABLED_deflate_ascii) +{ + int ret; + unsigned char *raw_data = http_build_ascii_text(ZIP_UNZIP_TEST_DATA_LEN); + for (int block = 1; block <= 1460; block++) + { + if (block % 10 == 0) + { + printf("raw content: ascii text, encoding: deflate, block range: %d - %d\n", block, block + 9); + } + ret = http_zip_unzip_test(raw_data, ZIP_UNZIP_TEST_DATA_LEN, HTTP_CONTENT_ENCODING_DEFLATE, block); + if (ret != 0) + { + printf("raw content: ascii text, encoding: deflate, block size:%d, result = failed!\n", block); + } + EXPECT_EQ(0, ret); + } + free(raw_data); +} + +/* This test takes a long time! use gtest --gtest_also_run_disabled_tests to run this test if needs. */ +TEST(http, DISABLED_deflate_random) +{ + int ret; + unsigned char *raw_data = http_build_random_content(ZIP_UNZIP_TEST_DATA_LEN); + for (int block = 1; block <= 1460; block++) + { + if (block % 10 == 0) + { + printf("raw content: random binary, encoding: deflate, block range: %d - %d\n", block, block + 9); + } + ret = http_zip_unzip_test(raw_data, ZIP_UNZIP_TEST_DATA_LEN, HTTP_CONTENT_ENCODING_DEFLATE, block); + if (ret != 0) + { + printf("raw content: random binary, encoding: deflate, block size:%d, result = failed!\n", block); + } + EXPECT_EQ(0, ret); + } + free(raw_data); +} + +/* This test takes a long time! use gtest --gtest_also_run_disabled_tests to run this test if needs. */ +TEST(http, DISABLED_brotli_random) +{ + int ret; + unsigned char *raw_data = http_build_random_content(ZIP_UNZIP_TEST_DATA_LEN); + for (int block = 33; block <= 1460; block++) + { + if (block % 10 == 0) + { + printf("raw content: random binary, encoding: brotli, block range: %d - %d\n", block, block + 9); + } + ret = http_zip_unzip_test(raw_data, ZIP_UNZIP_TEST_DATA_LEN, HTTP_CONTENT_ENCODING_BR, block); + if (ret != 0) + { + printf("raw content: random binary, encoding: brotli, block size:%d, result = failed!\n", block); + } + EXPECT_EQ(0, ret); + } + free(raw_data); +} + +/* This test takes a long time! use gtest --gtest_also_run_disabled_tests to run this test if needs. */ +TEST(http, DISABLED_brotli_ascii) +{ + int ret; + unsigned char *raw_data = http_build_ascii_text(ZIP_UNZIP_TEST_DATA_LEN); + for (int block = 33; block <= 1460; block++) + { + if (block % 10 == 0) + { + printf("raw content: ascii text, encoding: brotli, block range: %d - %d\n", block, block + 9); + } + ret = http_zip_unzip_test(raw_data, ZIP_UNZIP_TEST_DATA_LEN, HTTP_CONTENT_ENCODING_BR, block); + if (ret != 0) + { + printf("raw content: ascii text, encoding: brotli, block size:%d, result = failed!\n", block); + } + EXPECT_EQ(0, ret); + } + free(raw_data); +} + +int main(int argc, char const *argv[]) +{ + ::testing::InitGoogleTest(&argc, (char **)argv); + return RUN_ALL_TESTS(); +} diff --git a/test/decoders/http/http_decoder_gtest.h b/test/decoders/http/http_gtest.h index eabae77..362bd39 100644 --- a/test/decoders/http/http_decoder_gtest.h +++ b/test/decoders/http/http_gtest.h @@ -10,13 +10,10 @@ extern "C" #ifdef __cplusplus } #endif -#include "http.h" -#include "md5.h" #include <stdint.h> #include <stdlib.h> #include <arpa/inet.h> #include <pcap/pcap.h> -#include "cJSON.h" #define TRUE 1 #define FLASE 0 diff --git a/test/decoders/http/http_decoder_test_plug.cpp b/test/decoders/http/http_test_plug.cpp index 86be09f..1370b70 100644 --- a/test/decoders/http/http_decoder_test_plug.cpp +++ b/test/decoders/http/http_test_plug.cpp @@ -11,8 +11,8 @@ extern "C" { #include "cJSON.h" -#include "http_decoder_gtest.h" -#include "md5.h" +#include "http_gtest.h" +#include "md5/md5.h" #include "toml/toml.h" int commit_test_result_json(cJSON *node, const char *name); @@ -92,7 +92,7 @@ void output_http_res_line(struct http_response_line *res_line) printf("res_status:%s\n", tmp_str); } -void output_http_header(struct http_header *header) +void output_http_header(struct http_header_field *header) { char tmp_key[MAX_KEY_STR_LEN] = {0}; char tmp_val[MAX_KEY_STR_LEN] = {0}; @@ -168,11 +168,9 @@ void transaction_index_to_json(cJSON *ctx, int transaction_index) void req_line_to_json(cJSON *ctx, struct http_request_line *req_line) { - http_field_to_json(ctx, "method", (char *)req_line->method.iov_base, - req_line->method.iov_len); - http_field_to_json(ctx, "uri", (char *)req_line->uri.iov_base, req_line->uri.iov_len); - http_field_to_json(ctx, "req_version", (char *)req_line->version.iov_base, - req_line->version.iov_len); + http_field_to_json(ctx, "method", (char *)req_line->method, req_line->method_len); + http_field_to_json(ctx, "uri", (char *)req_line->uri, req_line->uri_len); + http_field_to_json(ctx, "req_version", (char *)req_line->version, req_line->version_len); cJSON_AddNumberToObject(ctx, "major_version", req_line->major_version); cJSON_AddNumberToObject(ctx, "minor_version", req_line->minor_version); @@ -180,36 +178,34 @@ void req_line_to_json(cJSON *ctx, struct http_request_line *req_line) void res_line_to_json(cJSON *ctx, struct http_response_line *res_line) { - http_field_to_json(ctx, "res_version", (char *)res_line->version.iov_base, - res_line->version.iov_len); - http_field_to_json(ctx, "res_status", (char *)res_line->status.iov_base, - res_line->status.iov_len); + http_field_to_json(ctx, "res_version", (char *)res_line->version, res_line->version_len); + http_field_to_json(ctx, "res_status", (char *)res_line->status, res_line->status_len); cJSON_AddNumberToObject(ctx, "major_version", res_line->major_version); cJSON_AddNumberToObject(ctx, "minor_version", res_line->minor_version); cJSON_AddNumberToObject(ctx, "status_code", res_line->status_code); } -void http_header_to_json(cJSON *ctx, struct http_header *header) +void http_header_to_json(cJSON *ctx, struct http_header_field *header) { char key[MAX_KEY_STR_LEN] = {0}; - if ((header->key.iov_base == NULL) || (header->val.iov_base == NULL)) + if ((header->name == NULL) || (header->value == NULL)) { return; } - memcpy(key, header->key.iov_base, header->key.iov_len); + memcpy(key, header->name, header->name_len); if (cJSON_HasObjectItem(ctx, key) == FALSE) { - http_field_to_json(ctx, key, (char *)header->val.iov_base, header->val.iov_len); + http_field_to_json(ctx, key, (char *)header->value, header->value_len); } else { // ctx already has the key, so rename key by key%d - char new_key[header->val.iov_len + 64] = {0}; - snprintf(new_key,sizeof(new_key), "%s%d", key, g_header_count++); - http_field_to_json(ctx, new_key, (char *)header->val.iov_base, header->val.iov_len); + char new_key[header->value_len + 64] = {0}; + snprintf(new_key, sizeof(new_key), "%s%d", key, g_header_count++); + http_field_to_json(ctx, new_key, (char *)header->value, header->value_len); } } @@ -222,28 +218,31 @@ void http_url_add_to_json(cJSON *ctx, struct http_message *msg) return; } - http_message_raw_url_get0(msg, &raw_url_result); + http_message_get0_raw_url(msg, (const char **)&raw_url_result, &raw_url_result.iov_len); if (raw_url_result.iov_base == NULL) { return; } - struct http_header raw_url_header_result = {}; + struct http_header_field raw_url_header_result = {}; - raw_url_header_result.key.iov_base = (char *)GTEST_HTTP_URL_NAME; - raw_url_header_result.key.iov_len = strlen(GTEST_HTTP_URL_NAME); - raw_url_header_result.val = raw_url_result; + raw_url_header_result.name = (char *)GTEST_HTTP_URL_NAME; + raw_url_header_result.name_len = strlen(GTEST_HTTP_URL_NAME); + raw_url_header_result.value = (char *)raw_url_result.iov_base; + raw_url_header_result.value_len = raw_url_result.iov_len; http_header_to_json(ctx, &raw_url_header_result); - hstring decode_url_result = {}; - struct http_header decode_url_header_result = {}; - http_message_decoded_url_get0(msg, &decode_url_result); - if (decode_url_result.iov_len != raw_url_result.iov_len) + char decoded_url_buffer[raw_url_result.iov_len] = {0}; + size_t decode_url_len = http_url_decode((const char *)raw_url_result.iov_base, raw_url_result.iov_len, decoded_url_buffer, sizeof(decoded_url_buffer)); + + if (decode_url_len < raw_url_result.iov_len) { - decode_url_header_result.key.iov_base = (char *)"__X_HTTP_DECODED_URL"; - decode_url_header_result.key.iov_len = strlen("__X_HTTP_DECODED_URL"); - decode_url_header_result.val = decode_url_result; + struct http_header_field decode_url_header_result = {}; + decode_url_header_result.name = (char *)"__X_HTTP_DECODED_URL"; + decode_url_header_result.name_len = strlen("__X_HTTP_DECODED_URL"); + decode_url_header_result.value = decoded_url_buffer; + decode_url_header_result.value_len = decode_url_len; http_header_to_json(ctx, &decode_url_header_result); } } @@ -395,10 +394,10 @@ extern "C" void http_decoder_test_entry(struct session *sess, int topic_id, cons (void)plugin_env; struct http_request_line req_line = {}; struct http_response_line res_line = {}; - struct http_header header = {}; + struct http_header_field header = {}; hstring body = {}; struct http_message *msg = (struct http_message *)raw_msg; - enum http_message_type msg_type = http_message_type_get(msg); + enum http_message_type msg_type = http_message_get_type(msg); struct gtest_plug_exdata_t *gtest_plug_exdata = (struct gtest_plug_exdata_t *)session_exdata_get(sess, g_exdata_idx); if (NULL == gtest_plug_exdata) @@ -422,11 +421,11 @@ extern "C" void http_decoder_test_entry(struct session *sess, int topic_id, cons { case HTTP_MESSAGE_REQ_LINE: commit_last_half_flow_data(gtest_plug_exdata, msg, HTTP_TRANSACTION_REQ, 0); - http_message_request_line_get0(msg, &req_line); + http_message_get0_request_line(msg, &req_line); req_line_to_json(gtest_plug_exdata->result_jnode[HTTP_TRANSACTION_REQ], &req_line); break; case HTTP_MESSAGE_REQ_HEADER: - while (http_message_header_next(msg, &header) >= 0) + while (http_message_get0_next_header(msg, &header) >= 0) { http_header_to_json(gtest_plug_exdata->result_jnode[HTTP_TRANSACTION_REQ], &header); } @@ -438,13 +437,13 @@ extern "C" void http_decoder_test_entry(struct session *sess, int topic_id, cons case HTTP_MESSAGE_REQ_BODY_START: case HTTP_MESSAGE_REQ_BODY: memset(&body, 0, sizeof(hstring)); - http_message_raw_body_get0(msg, &body); + http_message_get0_uncompressed_body(msg, (const char **)&body.iov_base, &body.iov_len); if (body.iov_base && body.iov_len) { append_http_payload(sess, gtest_plug_exdata, PAYLOAD_RAW, &body, HTTP_TRANSACTION_REQ); } // output_http_body(&body, 0); - http_message_decompress_body_get0(msg, &body); + http_message_get0_decompressed_body(msg, (const char **)&body.iov_base, &body.iov_len); // output_http_body(&body, 1); if (body.iov_base && body.iov_len) { @@ -453,11 +452,11 @@ extern "C" void http_decoder_test_entry(struct session *sess, int topic_id, cons break; case HTTP_MESSAGE_RES_LINE: commit_last_half_flow_data(gtest_plug_exdata, msg, HTTP_TRANSACTION_RES, 0); - http_message_response_line_get0(msg, &res_line); + http_message_get0_response_line(msg, &res_line); res_line_to_json(gtest_plug_exdata->result_jnode[HTTP_TRANSACTION_RES], &res_line); break; case HTTP_MESSAGE_RES_HEADER: - while (http_message_header_next(msg, &header) >= 0) + while (http_message_get0_next_header(msg, &header) >= 0) { http_header_to_json(gtest_plug_exdata->result_jnode[HTTP_TRANSACTION_RES], &header); } @@ -466,14 +465,14 @@ extern "C" void http_decoder_test_entry(struct session *sess, int topic_id, cons case HTTP_MESSAGE_RES_BODY_START: case HTTP_MESSAGE_RES_BODY: memset(&body, 0, sizeof(hstring)); - http_message_raw_body_get0(msg, &body); + http_message_get0_uncompressed_body(msg, (const char **)&body.iov_base, &body.iov_len); if (body.iov_base && body.iov_len) { append_http_payload(sess, gtest_plug_exdata, PAYLOAD_RAW, &body, HTTP_TRANSACTION_RES); } // output_http_body(&body, 0); memset(&body, 0, sizeof(hstring)); - http_message_decompress_body_get0(msg, &body); + http_message_get0_decompressed_body(msg, (const char **)&body.iov_base, &body.iov_len); // output_http_body(&body, 1); if (body.iov_base && body.iov_len) { @@ -525,7 +524,7 @@ extern "C" void http_decoder_test_state_entry(struct session *sess, int topic_id char msg_index_name[64] = {}; char msg_index_value[64] = {}; cJSON *json_object = NULL; - enum http_message_type msg_type = http_message_type_get((struct http_message *)raw_msg); + enum http_message_type msg_type = http_message_get_type((struct http_message *)raw_msg); struct gtest_plug_exdata_t *gtest_plug_exdata = (struct gtest_plug_exdata_t *)session_exdata_get(sess, g_exdata_idx); if (NULL == gtest_plug_exdata) diff --git a/test/decoders/http/md5.c b/test/decoders/http/md5.c deleted file mode 100644 index 3df1eb5..0000000 --- a/test/decoders/http/md5.c +++ /dev/null @@ -1,356 +0,0 @@ -/* MD5C.C - RSA Data Security, Inc., MD5 message-digest algorithm */
-
-/* Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All
- rights reserved.
-
- License to copy and use this software is granted provided that it
- is identified as the "RSA Data Security, Inc. MD5 Message-Digest
- Algorithm" in all material mentioning or referencing this software
- or this function.
-
- License is also granted to make and use derivative works provided
- that such works are identified as "derived from the RSA Data
- Security, Inc. MD5 Message-Digest Algorithm" in all material
- mentioning or referencing the derived work.
-
- RSA Data Security, Inc. makes no representations concerning either
- the merchantability of this software or the suitability of this
- software for any particular purpose. It is provided "as is"
- without express or implied warranty of any kind.
-
- These notices must be retained in any copies of any part of this
- documentation and/or software. */
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-#include <stdio.h>
-#include "md5.h"
-
- /* Constants for MD5Transform routine. */
-
-#define S11 7
-#define S12 12
-#define S13 17
-#define S14 22
-#define S21 5
-#define S22 9
-#define S23 14
-#define S24 20
-#define S31 4
-#define S32 11
-#define S33 16
-#define S34 23
-#define S41 6
-#define S42 10
-#define S43 15
-#define S44 21
-
- static void MD5Transform PROTO_LIST((UINT4[4], unsigned char[64]));
- static void Encode PROTO_LIST((unsigned char *, UINT4 *, unsigned int));
- static void Decode PROTO_LIST((UINT4 *, unsigned char *, unsigned int));
- static void MD5_memcpy PROTO_LIST((POINTER, POINTER, unsigned int));
- static void MD5_memset PROTO_LIST((POINTER, int, unsigned int));
-
- static unsigned char PADDING[64] = {
- 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
-
-/* F, G, H and I are basic MD5 functions. */
-#define F(x, y, z) (((x) & (y)) | ((~x) & (z)))
-#define G(x, y, z) (((x) & (z)) | ((y) & (~z)))
-#define H(x, y, z) ((x) ^ (y) ^ (z))
-#define I(x, y, z) ((y) ^ ((x) | (~z)))
-
-/* ROTATE_LEFT rotates x left n bits. */
-#define ROTATE_LEFT(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
-
-/* FF, GG, HH, and II transformations for rounds 1, 2, 3, and 4.
-Rotation is separate from addition to prevent recomputation. */
-#define FF(a, b, c, d, x, s, ac) \
- { \
- (a) += F((b), (c), (d)) + (x) + (UINT4)(ac); \
- (a) = ROTATE_LEFT((a), (s)); \
- (a) += (b); \
- }
-#define GG(a, b, c, d, x, s, ac) \
- { \
- (a) += G((b), (c), (d)) + (x) + (UINT4)(ac); \
- (a) = ROTATE_LEFT((a), (s)); \
- (a) += (b); \
- }
-#define HH(a, b, c, d, x, s, ac) \
- { \
- (a) += H((b), (c), (d)) + (x) + (UINT4)(ac); \
- (a) = ROTATE_LEFT((a), (s)); \
- (a) += (b); \
- }
-#define II(a, b, c, d, x, s, ac) \
- { \
- (a) += I((b), (c), (d)) + (x) + (UINT4)(ac); \
- (a) = ROTATE_LEFT((a), (s)); \
- (a) += (b); \
- }
-
- /* MD5 initialization. Begins an MD5 operation, writing a new context. */
- void MD5Init(MD5_CTX *context)
- {
- context->count[0] = context->count[1] = 0;
- /* Load magic initialization constants.*/
- context->state[0] = 0x67452301;
- context->state[1] = 0xefcdab89;
- context->state[2] = 0x98badcfe;
- context->state[3] = 0x10325476;
- }
-
- /* MD5 block update operation. Continues an MD5 message-digest
- operation, processing another message block, and updating the
- context. */
- void MD5Update(
- MD5_CTX *context, /* context */
- unsigned char *input, /* input block */
- unsigned int inputLen) /* length of input block */
- {
- unsigned int i, index, partLen;
-
- /* Compute number of bytes mod 64 */
- index = (unsigned int)((context->count[0] >> 3) & 0x3F);
-
- /* Update number of bits */
- if ((context->count[0] += ((UINT4)inputLen << 3))
-
- < ((UINT4)inputLen << 3))
- context->count[1]++;
- context->count[1] += ((UINT4)inputLen >> 29);
-
- partLen = 64 - index;
-
- /* Transform as many times as possible.*/
- if (inputLen >= partLen)
- {
- MD5_memcpy((POINTER)&context->buffer[index], (POINTER)input, partLen);
- MD5Transform(context->state, context->buffer);
-
- for (i = partLen; i + 63 < inputLen; i += 64)
- MD5Transform(context->state, &input[i]);
-
- index = 0;
- }
- else
- i = 0;
-
- /* Buffer remaining input */
- MD5_memcpy((POINTER)&context->buffer[index], (POINTER)&input[i],
- inputLen - i);
- }
-
- /* MD5 finalization. Ends an MD5 message-digest operation, writing the
- the message digest and zeroizing the context. */
- void MD5Final(
- unsigned char digest[16], /* message digest */
- MD5_CTX *context) /* context */
- {
- unsigned char bits[8];
- unsigned int index, padLen;
-
- /* Save number of bits */
- Encode(bits, context->count, 8);
-
- /* Pad out to 56 mod 64.*/
- index = (unsigned int)((context->count[0] >> 3) & 0x3f);
- padLen = (index < 56) ? (56 - index) : (120 - index);
- MD5Update(context, PADDING, padLen);
-
- /* Append length (before padding) */
- MD5Update(context, bits, 8);
-
- /* Store state in digest */
- Encode(digest, context->state, 16);
-
- /* Zeroize sensitive information.*/
- MD5_memset((POINTER)context, 0, sizeof(*context));
- }
-
- /* MD5 basic transformation. Transforms state based on block. */
- static void MD5Transform(
- UINT4 state[4],
- unsigned char block[64])
- {
- UINT4 a = state[0], b = state[1], c = state[2], d = state[3], x[16];
-
- Decode(x, block, 64);
-
- /* Round 1 */
- FF(a, b, c, d, x[0], S11, 0xd76aa478); /* 1 */
- FF(d, a, b, c, x[1], S12, 0xe8c7b756); /* 2 */
- FF(c, d, a, b, x[2], S13, 0x242070db); /* 3 */
- FF(b, c, d, a, x[3], S14, 0xc1bdceee); /* 4 */
- FF(a, b, c, d, x[4], S11, 0xf57c0faf); /* 5 */
- FF(d, a, b, c, x[5], S12, 0x4787c62a); /* 6 */
- FF(c, d, a, b, x[6], S13, 0xa8304613); /* 7 */
- FF(b, c, d, a, x[7], S14, 0xfd469501); /* 8 */
- FF(a, b, c, d, x[8], S11, 0x698098d8); /* 9 */
- FF(d, a, b, c, x[9], S12, 0x8b44f7af); /* 10 */
- FF(c, d, a, b, x[10], S13, 0xffff5bb1); /* 11 */
- FF(b, c, d, a, x[11], S14, 0x895cd7be); /* 12 */
- FF(a, b, c, d, x[12], S11, 0x6b901122); /* 13 */
- FF(d, a, b, c, x[13], S12, 0xfd987193); /* 14 */
- FF(c, d, a, b, x[14], S13, 0xa679438e); /* 15 */
- FF(b, c, d, a, x[15], S14, 0x49b40821); /* 16 */
-
- /* Round 2 */
- GG(a, b, c, d, x[1], S21, 0xf61e2562); /* 17 */
- GG(d, a, b, c, x[6], S22, 0xc040b340); /* 18 */
- GG(c, d, a, b, x[11], S23, 0x265e5a51); /* 19 */
- GG(b, c, d, a, x[0], S24, 0xe9b6c7aa); /* 20 */
- GG(a, b, c, d, x[5], S21, 0xd62f105d); /* 21 */
- GG(d, a, b, c, x[10], S22, 0x2441453); /* 22 */
- GG(c, d, a, b, x[15], S23, 0xd8a1e681); /* 23 */
- GG(b, c, d, a, x[4], S24, 0xe7d3fbc8); /* 24 */
- GG(a, b, c, d, x[9], S21, 0x21e1cde6); /* 25 */
- GG(d, a, b, c, x[14], S22, 0xc33707d6); /* 26 */
- GG(c, d, a, b, x[3], S23, 0xf4d50d87); /* 27 */
-
- GG(b, c, d, a, x[8], S24, 0x455a14ed); /* 28 */
- GG(a, b, c, d, x[13], S21, 0xa9e3e905); /* 29 */
- GG(d, a, b, c, x[2], S22, 0xfcefa3f8); /* 30 */
- GG(c, d, a, b, x[7], S23, 0x676f02d9); /* 31 */
- GG(b, c, d, a, x[12], S24, 0x8d2a4c8a); /* 32 */
-
- /* Round 3 */
- HH(a, b, c, d, x[5], S31, 0xfffa3942); /* 33 */
- HH(d, a, b, c, x[8], S32, 0x8771f681); /* 34 */
- HH(c, d, a, b, x[11], S33, 0x6d9d6122); /* 35 */
- HH(b, c, d, a, x[14], S34, 0xfde5380c); /* 36 */
- HH(a, b, c, d, x[1], S31, 0xa4beea44); /* 37 */
- HH(d, a, b, c, x[4], S32, 0x4bdecfa9); /* 38 */
- HH(c, d, a, b, x[7], S33, 0xf6bb4b60); /* 39 */
- HH(b, c, d, a, x[10], S34, 0xbebfbc70); /* 40 */
- HH(a, b, c, d, x[13], S31, 0x289b7ec6); /* 41 */
- HH(d, a, b, c, x[0], S32, 0xeaa127fa); /* 42 */
- HH(c, d, a, b, x[3], S33, 0xd4ef3085); /* 43 */
- HH(b, c, d, a, x[6], S34, 0x4881d05); /* 44 */
- HH(a, b, c, d, x[9], S31, 0xd9d4d039); /* 45 */
- HH(d, a, b, c, x[12], S32, 0xe6db99e5); /* 46 */
- HH(c, d, a, b, x[15], S33, 0x1fa27cf8); /* 47 */
- HH(b, c, d, a, x[2], S34, 0xc4ac5665); /* 48 */
-
- /* Round 4 */
- II(a, b, c, d, x[0], S41, 0xf4292244); /* 49 */
- II(d, a, b, c, x[7], S42, 0x432aff97); /* 50 */
- II(c, d, a, b, x[14], S43, 0xab9423a7); /* 51 */
- II(b, c, d, a, x[5], S44, 0xfc93a039); /* 52 */
- II(a, b, c, d, x[12], S41, 0x655b59c3); /* 53 */
- II(d, a, b, c, x[3], S42, 0x8f0ccc92); /* 54 */
- II(c, d, a, b, x[10], S43, 0xffeff47d); /* 55 */
- II(b, c, d, a, x[1], S44, 0x85845dd1); /* 56 */
- II(a, b, c, d, x[8], S41, 0x6fa87e4f); /* 57 */
- II(d, a, b, c, x[15], S42, 0xfe2ce6e0); /* 58 */
- II(c, d, a, b, x[6], S43, 0xa3014314); /* 59 */
- II(b, c, d, a, x[13], S44, 0x4e0811a1); /* 60 */
- II(a, b, c, d, x[4], S41, 0xf7537e82); /* 61 */
- II(d, a, b, c, x[11], S42, 0xbd3af235); /* 62 */
- II(c, d, a, b, x[2], S43, 0x2ad7d2bb); /* 63 */
- II(b, c, d, a, x[9], S44, 0xeb86d391); /* 64 */
-
- state[0] += a;
- state[1] += b;
- state[2] += c;
- state[3] += d;
-
- /* Zeroize sensitive information. */
- MD5_memset((POINTER)x, 0, sizeof(x));
- }
-
- /* Encodes input (UINT4) into output (unsigned char). Assumes len is
- a multiple of 4. */
- static void Encode(
- unsigned char *output,
- const UINT4 *input,
- unsigned int len)
- {
- unsigned int i, j;
-
- for (i = 0, j = 0; j < len; i++, j += 4)
- {
- output[j] = (unsigned char)(input[i] & 0xff);
- output[j + 1] = (unsigned char)((input[i] >> 8) & 0xff);
- output[j + 2] = (unsigned char)((input[i] >> 16) & 0xff);
- output[j + 3] = (unsigned char)((input[i] >> 24) & 0xff);
- }
- }
-
- /* Decodes input (unsigned char) into output (UINT4). Assumes len is
- a multiple of 4. */
- static void Decode(
- UINT4 *output,
- unsigned char *input,
- unsigned int len)
- {
- unsigned int i, j;
-
- for (i = 0, j = 0; j < len; i++, j += 4)
- output[i] = ((UINT4)input[j]) | (((UINT4)input[j + 1]) << 8) |
- (((UINT4)input[j + 2]) << 16) | (((UINT4)input[j + 3]) << 24);
- }
-
- /* Note: Replace "for loop" with standard memcpy if possible. */
-
- static void MD5_memcpy(
- POINTER output,
- const POINTER input,
- unsigned int len)
- {
- unsigned int i;
-
- for (i = 0; i < len; i++)
-
- output[i] = input[i];
- }
-
- /* Note: Replace "for loop" with standard memset if possible. */
- static void MD5_memset(
- POINTER output,
- int value,
- unsigned int len)
- {
- unsigned int i;
-
- for (i = 0; i < len; i++)
- ((char *)output)[i] = (char)value;
- }
-
- char *MESA_MD5_sum_str(unsigned char *raw_data, unsigned int raw_data_len, char result[33])
- {
- int i;
- MD5_CTX context;
- unsigned char digest[16];
-
- MD5Init(&context);
- MD5Update(&context, raw_data, raw_data_len);
- MD5Final(digest, &context);
-
- for (i = 0; i < 16; i++)
- sprintf(result + 2 * i, "%02x", digest[i]);
- result[32] = 0;
-
- return result;
- }
-
- char *MESA_MD5_sum_bin(unsigned char *raw_data, unsigned int raw_data_len, char result[16])
- {
- MD5_CTX context;
-
- MD5Init(&context);
- MD5Update(&context, raw_data, raw_data_len);
- MD5Final((unsigned char *)result, &context);
-
- return result;
- }
-
-#ifdef __cplusplus
-}
-#endif
diff --git a/test/decoders/http/md5.h b/test/decoders/http/md5.h deleted file mode 100644 index adf5457..0000000 --- a/test/decoders/http/md5.h +++ /dev/null @@ -1,74 +0,0 @@ -/* MD5.H - header file for MD5C.C */
-
-/* Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All
- rights reserved.
-
- License to copy and use this software is granted provided that it
- is identified as the "RSA Data Security, Inc. MD5 Message-Digest
- Algorithm" in all material mentioning or referencing this software
- or this function.
-
- License is also granted to make and use derivative works provided
- that such works are identified as "derived from the RSA Data
- Security, Inc. MD5 Message-Digest Algorithm" in all material
- mentioning or referencing the derived work.
-
- RSA Data Security, Inc. makes no representations concerning either
- the merchantability of this software or the suitability of this
- software for any particular purpose. It is provided "as is"
- without express or implied warranty of any kind.
-
- These notices must be retained in any copies of any part of this
- documentation and/or software. */
-#ifndef __MD5_H
-#define __MD5_H
-
-#ifndef PROTOTYPES
-#define PROTOTYPES 0
-#endif
-
-/* POINTER defines a generic pointer type */
-typedef unsigned char *POINTER;
-
-/* UINT2 defines a two byte word */
-typedef unsigned short int UINT2;
-
-/* UINT4 defines a four byte word */
-// typedef unsigned long int UINT4;
-typedef unsigned int UINT4;
-
-/* PROTO_LIST is defined depending on how PROTOTYPES is defined above.
- If using PROTOTYPES, then PROTO_LIST returns the list, otherwise it
- returns an empty list. */
-
-#if PROTOTYPES
-#define PROTO_LIST(list) list
-#else
-#define PROTO_LIST(list) ()
-#endif
-
-/* MD5 context. */
-typedef struct
-{
- UINT4 state[4]; /* state (ABCD) */
- UINT4 count[2]; /* number of bits, modulo 2^64 (lsb first) */
- unsigned char buffer[64]; /* input buffer */
-} MD5_CTX;
-
-#ifdef __cplusplus
-extern "C"
-{
- void MD5Init(MD5_CTX *context);
- void MD5Update(
- MD5_CTX *context, /* context */
- unsigned char *input, /* input block */
- unsigned int inputLen); /* length of input block */
- void MD5Final(
- unsigned char digest[16], /* message digest */
- MD5_CTX *context); /* context */
- char *MESA_MD5_sum_str(unsigned char *raw_data, unsigned int raw_data_len, char result[33]);
- char *MESA_MD5_sum_bin(unsigned char *raw_data, unsigned int raw_data_len, char result[16]);
-}
-#endif
-
-#endif
diff --git a/test/decoders/http/plugin_test_main.cpp b/test/decoders/http/plugin_test_main.cpp index 90b5bdf..9247df6 100644 --- a/test/decoders/http/plugin_test_main.cpp +++ b/test/decoders/http/plugin_test_main.cpp @@ -3,7 +3,7 @@ #include <unistd.h> #include <stdio.h> #include <assert.h> -#include "http_decoder_gtest.h" +#include "http_gtest.h" #ifdef __cplusplus extern "C" diff --git a/test/decoders/http/test_based_on_stellar/CMakeLists.txt b/test/decoders/http/test_based_on_stellar/CMakeLists.txt index fcc2c0e..bc08289 100644 --- a/test/decoders/http/test_based_on_stellar/CMakeLists.txt +++ b/test/decoders/http/test_based_on_stellar/CMakeLists.txt @@ -20,20 +20,20 @@ add_test(NAME HTTP_COPY_HTTP_GTEST_ENTRY_CONF COMMAND sh -c "mkdir -p ${TEST_RUN # update config files add_test(NAME HTTP_UPDATE_GTEST_PLUG_ENTRY COMMAND bash -c "sed -i 's/name=.*/name=\\x22http_decoder_test_entry\\x22/' ${TEST_RUN_DIR}/etc/http/gtest_entry.toml") -add_test(NAME HTTP_UPDATE_GTEST_PLUG_TOPIC COMMAND bash -c "sed -i 's/topic=.*/topic=\\x22HTTP_DECODER_MESSAGE\\x22/' ${TEST_RUN_DIR}/etc/http/gtest_entry.toml") +add_test(NAME HTTP_UPDATE_GTEST_PLUG_TOPIC COMMAND bash -c "sed -i 's/topic=.*/topic=\\x22HTTP_MESSAGE\\x22/' ${TEST_RUN_DIR}/etc/http/gtest_entry.toml") # update plugin to be tested -add_test(NAME HTTP_CP_DECODER_SO COMMAND sh -c "cp ${CMAKE_BINARY_DIR}/decoders/http/http_dyn.so ${TEST_RUN_DIR}/plugin/${DECODER_NAME}.so") -add_test(NAME HTTP_CP_DECODER_GTEST_SO COMMAND sh -c "cp ${CMAKE_BINARY_DIR}/test/decoders/http/${DECODER_NAME}_test.so ${TEST_RUN_DIR}/plugin/${DECODER_NAME}_test.so") +add_test(NAME HTTP_CP_DECODER_SO COMMAND sh -c "cp ${CMAKE_BINARY_DIR}/decoders/http/http_dyn.so ${TEST_RUN_DIR}/plugin/http.so") +add_test(NAME HTTP_CP_DECODER_GTEST_SO COMMAND sh -c "cp ${CMAKE_BINARY_DIR}/test/decoders/http/http_test.so ${TEST_RUN_DIR}/plugin/http_test.so") set_tests_properties(HTTP_MKDIR_METRIC HTTP_COPY_SPEC HTTP_COPY_HTTP_DECODER_CONF HTTP_COPY_HTTP_GTEST_ENTRY_CONF HTTP_COPY_CONF HTTP_COPY_LOG_CONF HTTP_CP_DECODER_SO HTTP_CP_DECODER_GTEST_SO HTTP_UPDATE_GTEST_PLUG_ENTRY HTTP_UPDATE_GTEST_PLUG_TOPIC - PROPERTIES FIXTURES_SETUP TestFixture) + PROPERTIES FIXTURES_SETUP HTTP_GTEST) -set(TEST_JSON_DIR ${PROJECT_SOURCE_DIR}/benchmarks/json/http) -set(TEST_PCAP_DIR ${PROJECT_SOURCE_DIR}/benchmarks/pcap/http) +set(TEST_JSON_DIR ${PROJECT_SOURCE_DIR}/test/decoders/http/benchmarks/json) +set(TEST_PCAP_DIR ${PROJECT_SOURCE_DIR}/test/decoders/http/benchmarks/pcap) # run tests add_test(NAME HTTP_GET_SINGLE_TRANS_TEST COMMAND sh -c "ln -sf ${TEST_PCAP_DIR}/http_get_single_trans.pcap ${TEST_RUN_DIR}/pcap/test.pcap; ./${TEST_MAIN} ${TEST_JSON_DIR}/http_get_single_trans.json" WORKING_DIRECTORY ${TEST_RUN_DIR}) @@ -70,6 +70,7 @@ add_test(NAME HTTP_CHN_ENCODE_URL COMMAND sh -c "ln -sf ${TEST_PCAP_DIR}/http_c add_test(NAME HTTP_ZLIB_DEADLOCK COMMAND sh -c "ln -sf ${TEST_PCAP_DIR}/http_zlib_deadlock.pcap ${TEST_RUN_DIR}/pcap/test.pcap; ./${TEST_MAIN} ${TEST_JSON_DIR}/http_zlib_deadlock.json" WORKING_DIRECTORY ${TEST_RUN_DIR}) add_test(NAME HTTP_OUT_OF_ORDER COMMAND sh -c "ln -sf ${TEST_PCAP_DIR}/http_out_of_order.pcap ${TEST_RUN_DIR}/pcap/test.pcap; ./${TEST_MAIN} ${TEST_JSON_DIR}/http_out_of_order.json" WORKING_DIRECTORY ${TEST_RUN_DIR}) add_test(NAME HTTP_GZIP_OUT_OF_ORDER COMMAND sh -c "ln -sf ${TEST_PCAP_DIR}/http_gzip_out_of_order.pcap ${TEST_RUN_DIR}/pcap/test.pcap; ./${TEST_MAIN} ${TEST_JSON_DIR}/http_gzip_out_of_order.json" WORKING_DIRECTORY ${TEST_RUN_DIR}) +add_test(NAME HTTP_HEADER_SPLITTING COMMAND sh -c "ln -sf ${TEST_PCAP_DIR}/http_pipeline_header_splitting.pcap ${TEST_RUN_DIR}/pcap/test.pcap; ./${TEST_MAIN} ${TEST_JSON_DIR}/http_pipeline_header_splitting.json" WORKING_DIRECTORY ${TEST_RUN_DIR}) set_tests_properties(HTTP_GET_SINGLE_TRANS_TEST HTTP_GET_MULTI_TRANS_TEST @@ -98,13 +99,14 @@ set_tests_properties(HTTP_GET_SINGLE_TRANS_TEST HTTP_ZLIB_DEADLOCK HTTP_OUT_OF_ORDER HTTP_GZIP_OUT_OF_ORDER - PROPERTIES FIXTURES_REQUIRED TestFixture) + HTTP_HEADER_SPLITTING + PROPERTIES FIXTURES_REQUIRED HTTP_GTEST) add_test(NAME HTTP_UPDATE_STATE_PLUG_ENTRY COMMAND bash -c "sed -i 's/name=.*/name=\\x22http_decoder_test_state_entry\\x22/' ${TEST_RUN_DIR}/etc/http/gtest_entry.toml") -add_test(NAME HTTP_UPDATE_STATE_PLUG_TOPIC COMMAND bash -c "sed -i 's/topic=.*/topic=\\x22HTTP_DECODER_MESSAGE\\x22/' ${TEST_RUN_DIR}/etc/http/gtest_entry.toml") +add_test(NAME HTTP_UPDATE_STATE_PLUG_TOPIC COMMAND bash -c "sed -i 's/topic=.*/topic=\\x22HTTP_MESSAGE\\x22/' ${TEST_RUN_DIR}/etc/http/gtest_entry.toml") set_tests_properties(HTTP_UPDATE_STATE_PLUG_ENTRY HTTP_UPDATE_STATE_PLUG_TOPIC HTTP_CP_DECODER_SO HTTP_CP_DECODER_GTEST_SO HTTP_MKDIR_METRIC - PROPERTIES FIXTURES_SETUP TestState) + PROPERTIES FIXTURES_SETUP HTTP_STATE_TEST) add_test(NAME HTTP_MSG_TYPE_STATE_TEST COMMAND sh -c "ln -sf ${TEST_PCAP_DIR}/http_post.pcap ${TEST_RUN_DIR}/pcap/test.pcap; ./${TEST_MAIN} ${TEST_JSON_DIR}/http_msg_type_state.json" WORKING_DIRECTORY ${TEST_RUN_DIR}) add_test(NAME HTTP_MSG_TYPE_STATE_C2S_TEST COMMAND sh -c "ln -sf ${TEST_PCAP_DIR}/http_post_c2s.pcap ${TEST_RUN_DIR}/pcap/test.pcap; ./${TEST_MAIN} ${TEST_JSON_DIR}/http_msg_type_state_c2s.json" WORKING_DIRECTORY ${TEST_RUN_DIR}) @@ -119,5 +121,5 @@ set_tests_properties(HTTP_MSG_TYPE_STATE_TEST HTTP_MSG_TYPE_STATE_PIPELINE_TEST HTTP_MSG_TYPE_STATE_SES_EXCEPTION_C2S_TEST HTTP_MSG_TYPE_STATE_SES_EXCEPTION_S2C_TEST - PROPERTIES FIXTURES_REQUIRED TestState) + PROPERTIES FIXTURES_REQUIRED HTTP_STATE_TEST) diff --git a/test/decoders/http/test_based_on_stellar/env/gtest_entry.toml b/test/decoders/http/test_based_on_stellar/env/gtest_entry.toml index 35e32ca..7491e9d 100644 --- a/test/decoders/http/test_based_on_stellar/env/gtest_entry.toml +++ b/test/decoders/http/test_based_on_stellar/env/gtest_entry.toml @@ -1,3 +1,3 @@ [entry] name="http_decoder_test_state_entry" -topic="HTTP_DECODER_MESSAGE" +topic="HTTP_MESSAGE" diff --git a/test/decoders/http/test_based_on_stellar/env/stellar.toml b/test/decoders/http/test_based_on_stellar/env/stellar.toml index d741b1c..58f5c94 100644 --- a/test/decoders/http/test_based_on_stellar/env/stellar.toml +++ b/test/decoders/http/test_based_on_stellar/env/stellar.toml @@ -9,20 +9,20 @@ pcap_path = "./pcap/test.pcap" nr_worker_thread = 1 # range: [1, 256] cpu_mask = [5, 6, 7, 8, 9, 10, 11, 12] - idle_yield_interval_ms = 900 # range: [0, 60000] (ms) + idle_yield_interval_ms = 90 # range: [0, 60000] (ms) [ip_reassembly] enable = 1 bucket_entries = 32 # range: [1, 4294967295] (must be power of 2) bucket_num = 1024 # range: [1, 4294967295] - ip_frag_timeout_ms = 10000 # range: [1, 60000] (ms) + ip_frag_timeout_ms = 1000 # range: [1, 60000] (ms) ip_frag_expire_polling_interval_ms = 0 # range: [0, 60000] (ms) ip_frag_expire_polling_limit = 1024 # range: [1, 1024] [session_manager] - tcp_session_max = 50000 - udp_session_max = 50000 + tcp_session_max = 500 + udp_session_max = 500 evict_old_on_tcp_table_limit = 1 # range: [0, 1] evict_old_on_udp_table_limit = 1 # range: [0, 1] @@ -31,35 +31,35 @@ expire_batch_max = 1024 # range: [1, 1024] [session_manager.tcp_timeout_ms] - init = 5000 # range: [1, 60000] (ms) - handshake = 5000 # range: [1, 60000] (ms) - data = 5000 # range: [1, 15999999000] (ms) - half_closed = 5000 # range: [1, 604800000] (ms) - time_wait = 5000 # range: [1, 600000] (ms) - discard_default = 10000 # range: [1, 15999999000] (ms) - unverified_rst = 5000 # range: [1, 600000] (ms) + init = 500 # range: [1, 60000] (ms) + handshake = 500 # range: [1, 60000] (ms) + data = 500 # range: [1, 15999999000] (ms) + half_closed = 500 # range: [1, 604800000] (ms) + time_wait = 500 # range: [1, 600000] (ms) + discard_default = 1000 # range: [1, 15999999000] (ms) + unverified_rst = 500 # range: [1, 600000] (ms) [session_manager.udp_timeout_ms] - data = 5000 # range: [1, 15999999000] (ms) - discard_default = 5000 # range: [1, 15999999000] (ms) + data = 500 # range: [1, 15999999000] (ms) + discard_default = 500 # range: [1, 15999999000] (ms) [session_manager.duplicated_packet_bloom_filter] - enable = 1 + enable = 0 capacity = 1000000 # range: [1, 4294967295] time_window_ms = 10000 # range: [1, 60000] (ms) error_rate = 0.00001 # range: [0.0, 1.0] [session_manager.evicted_session_bloom_filter] - enable = 1 # range: [0, 1] + enable = 0 # range: [0, 1] capacity = 1000000 # range: [1, 4294967295] time_window_ms = 10000 # range: [1, 60000] (ms) error_rate = 0.00001 # range: [0.0, 1.0] [session_manager.tcp_reassembly] enable = 1 # range: [0, 1] - timeout_ms = 10000 # range: [1, 60000] (ms) + timeout_ms = 100 # range: [1, 60000] (ms) buffered_segments_max = 256 # range: [2, 4096] per flow [schedule] - merge_stat_interval = 500 # range: [1, 60000] (ms) - output_stat_interval = 2000 # range: [1, 60000] (ms) + merge_stat_interval = 50 # range: [1, 60000] (ms) + output_stat_interval = 200 # range: [1, 60000] (ms) |
