lsqpack 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (89) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +19 -0
  3. data/Gemfile.lock +82 -0
  4. data/LICENSE +21 -0
  5. data/README.md +36 -0
  6. data/Rakefile +19 -0
  7. data/Steepfile +6 -0
  8. data/ext/lsqpack/extconf.rb +18 -0
  9. data/ext/lsqpack/lsqpack.c +426 -0
  10. data/ext/lsqpack/lsqpack.h +6 -0
  11. data/lib/lsqpack/version.rb +5 -0
  12. data/lib/lsqpack.rb +30 -0
  13. data/ls-qpack/.appveyor.yml +14 -0
  14. data/ls-qpack/.cirrus.yml +6 -0
  15. data/ls-qpack/.travis.yml +32 -0
  16. data/ls-qpack/CMakeLists.txt +66 -0
  17. data/ls-qpack/LICENSE +21 -0
  18. data/ls-qpack/README.md +65 -0
  19. data/ls-qpack/bin/CMakeLists.txt +21 -0
  20. data/ls-qpack/bin/encode-int.c +87 -0
  21. data/ls-qpack/bin/fuzz-decode.c +247 -0
  22. data/ls-qpack/bin/interop-decode.c +433 -0
  23. data/ls-qpack/bin/interop-encode.c +554 -0
  24. data/ls-qpack/deps/xxhash/xxhash.c +941 -0
  25. data/ls-qpack/deps/xxhash/xxhash.h +160 -0
  26. data/ls-qpack/fuzz/decode/a/README +3 -0
  27. data/ls-qpack/fuzz/decode/a/preamble +0 -0
  28. data/ls-qpack/fuzz/decode/a/test-cases/id_000000,sig_06,src_000390,op_havoc,rep_4 +0 -0
  29. data/ls-qpack/fuzz/decode/a/test-cases/id_000000,sig_06,src_000579,op_flip1,pos_14 +0 -0
  30. data/ls-qpack/fuzz/decode/a/test-cases/id_000000,src_000000,op_flip2,pos_12 +0 -0
  31. data/ls-qpack/fuzz/decode/a/test-cases/id_000001,sig_11,src_000579,op_havoc,rep_4 +0 -0
  32. data/ls-qpack/fuzz/decode/a/test-cases/id_000002,sig_11,src_000481,op_int16,pos_15,val_-1 +0 -0
  33. data/ls-qpack/fuzz/decode/a/test-cases/id_000002,src_000000,op_havoc,rep_8 +0 -0
  34. data/ls-qpack/fuzz/decode/a/test-cases/id_000006,src_000285,op_flip2,pos_14 +0 -0
  35. data/ls-qpack/fuzz/decode/a/test-cases/id_000008,src_000285,op_flip2,pos_20 +0 -0
  36. data/ls-qpack/fuzz/decode/a/test-cases/id_000010,src_000306,op_flip2,pos_75 +0 -0
  37. data/ls-qpack/fuzz/decode/a/test-cases/id_000011,src_000344,op_havoc,rep_2 +0 -0
  38. data/ls-qpack/fuzz/decode/a/test-cases/id_000014,src_000366,op_flip2,pos_28 +0 -0
  39. data/ls-qpack/fuzz/decode/b/README +1 -0
  40. data/ls-qpack/fuzz/decode/b/preamble +0 -0
  41. data/ls-qpack/fuzz/decode/b/test-cases/seed +0 -0
  42. data/ls-qpack/fuzz/decode/c/setup.sh +3 -0
  43. data/ls-qpack/fuzz/decode/c/test-cases/fb-req.qif.proxygen.out.256.100.0-chopped +0 -0
  44. data/ls-qpack/fuzz/decode/d/preamble +0 -0
  45. data/ls-qpack/fuzz/decode/d/setup.sh +3 -0
  46. data/ls-qpack/fuzz/decode/d/test-cases/fb-resp.minhq.256.128.0.ack +0 -0
  47. data/ls-qpack/fuzz/input/256.100.1/fb-req.out.256.100.1 +0 -0
  48. data/ls-qpack/fuzz/input/256.100.1/fb-resp.out.256.100.1 +0 -0
  49. data/ls-qpack/fuzz/input/256.100.1/netbsd.out.256.100.1 +0 -0
  50. data/ls-qpack/huff-tables.h +136247 -0
  51. data/ls-qpack/lsqpack.c +5547 -0
  52. data/ls-qpack/lsqpack.h +768 -0
  53. data/ls-qpack/test/CMakeLists.txt +76 -0
  54. data/ls-qpack/test/lsqpack-test.h +43 -0
  55. data/ls-qpack/test/qifs/fb-req.qif +4917 -0
  56. data/ls-qpack/test/qifs/fb-resp.qif +5982 -0
  57. data/ls-qpack/test/qifs/long-codes.qif +5984 -0
  58. data/ls-qpack/test/qifs/netbsd.qif +235 -0
  59. data/ls-qpack/test/run-qif.pl +97 -0
  60. data/ls-qpack/test/run-scenario.sh +68 -0
  61. data/ls-qpack/test/scenarios/0.95-reset.sce +10 -0
  62. data/ls-qpack/test/scenarios/cancel-stream.sce +22 -0
  63. data/ls-qpack/test/scenarios/drain-2.sce +37 -0
  64. data/ls-qpack/test/scenarios/drain.sce +37 -0
  65. data/ls-qpack/test/scenarios/end-dst-2.sce +14 -0
  66. data/ls-qpack/test/scenarios/end-dst.sce +14 -0
  67. data/ls-qpack/test/scenarios/incl-name.sce +13 -0
  68. data/ls-qpack/test/scenarios/multi-byte-int-dyn-ref-1.sce +110 -0
  69. data/ls-qpack/test/scenarios/multi-byte-int-dyn-ref-2.sce +161 -0
  70. data/ls-qpack/test/scenarios/post-base-1.sce +10 -0
  71. data/ls-qpack/test/scenarios/post-base-2.sce +13 -0
  72. data/ls-qpack/test/scenarios/post-base-nr.sce +10 -0
  73. data/ls-qpack/test/scenarios/set-max-cap.sce +15 -0
  74. data/ls-qpack/test/test_enc_str.c +139 -0
  75. data/ls-qpack/test/test_get_stx_id.c +144 -0
  76. data/ls-qpack/test/test_huff_dec.c +399 -0
  77. data/ls-qpack/test/test_int.c +220 -0
  78. data/ls-qpack/test/test_qpack.c +856 -0
  79. data/ls-qpack/test/test_read_enc_stream.c +256 -0
  80. data/ls-qpack/tools/har2qif.pl +139 -0
  81. data/ls-qpack/tools/randomize-cookies.pl +41 -0
  82. data/ls-qpack/tools/sort-qif.pl +31 -0
  83. data/ls-qpack/wincompat/getopt.c +758 -0
  84. data/ls-qpack/wincompat/getopt.h +131 -0
  85. data/ls-qpack/wincompat/getopt1.c +188 -0
  86. data/ls-qpack/wincompat/sys/queue.h +859 -0
  87. data/lsqpack.gemspec +39 -0
  88. data/sig/lsqpack.rbs +29 -0
  89. metadata +135 -0
@@ -0,0 +1,76 @@
1
+ function(lsqpack_add_test TARGET)
2
+ add_executable(test_${TARGET} "")
3
+ target_sources(test_${TARGET} PRIVATE test_${TARGET}.c)
4
+ target_link_libraries(test_${TARGET} ls-qpack)
5
+
6
+ if(MSVC)
7
+ target_include_directories(test_${TARGET} PRIVATE ../wincompat)
8
+ target_sources(test_${TARGET} PRIVATE
9
+ ../wincompat/getopt.c
10
+ ../wincompat/getopt1.c
11
+ )
12
+ else()
13
+ target_link_libraries(test_${TARGET} m)
14
+ endif()
15
+
16
+ add_test(${TARGET} test_${TARGET})
17
+ endfunction()
18
+
19
+ lsqpack_add_test(int)
20
+ lsqpack_add_test(enc_str)
21
+ lsqpack_add_test(huff_dec)
22
+ lsqpack_add_test(read_enc_stream)
23
+ lsqpack_add_test(qpack)
24
+ lsqpack_add_test(get_stx_id)
25
+
26
+ if(MSVC)
27
+ message(WARNING "Scenario tests are disabled on Windows (TODO)")
28
+ else()
29
+ file(GLOB SCENARIOS scenarios/*.sce)
30
+ foreach(SCENARIO ${SCENARIOS})
31
+ get_filename_component(TEST_NAME ${SCENARIO} NAME)
32
+ add_test(
33
+ NAME scenario-${TEST_NAME}
34
+ COMMAND bash run-scenario.sh ${SCENARIO}
35
+ WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}/test
36
+ )
37
+ set_tests_properties(scenario-${TEST_NAME} PROPERTIES
38
+ ENVIRONMENT "PATH=$ENV{PATH}:${PROJECT_BINARY_DIR}/bin:${PROJECT_SOURCE_DIR}/tools"
39
+ )
40
+ endforeach()
41
+ endif()
42
+
43
+ find_package(Perl)
44
+
45
+ if(PERL_FOUND)
46
+ message(STATUS "Found Perl interpreter: ${PERL}")
47
+ file(GLOB QIFS qifs/*.qif)
48
+
49
+ foreach(QIF ${QIFS})
50
+ get_filename_component(FILE_NAME ${QIF} NAME)
51
+
52
+ foreach(TABLE_SIZE 0 256 512 1024 4096)
53
+ foreach(RISKED_STREAMS 0 100)
54
+ foreach(IMMEDIATE_ACK 0 1)
55
+ foreach(AGGRESSIVE 0 1)
56
+ set(TEST_NAME qif-${FILE_NAME}-t${TABLE_SIZE}-s${RISKED_STREAMS}-a${IMMEDIATE_ACK}-A${AGGRESSIVE})
57
+
58
+ add_test(
59
+ NAME ${TEST_NAME}
60
+ COMMAND ${PERL} run-qif.pl --table-size ${TABLE_SIZE} --risked-streams ${RISKED_STREAMS} --immed-ack ${IMMEDIATE_ACK} --aggressive ${AGGRESSIVE} ${QIF}
61
+ WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}/test
62
+ )
63
+
64
+ if(NOT MSVC)
65
+ set_tests_properties(${TEST_NAME} PROPERTIES
66
+ ENVIRONMENT "PATH=$ENV{PATH}:${PROJECT_BINARY_DIR}/bin:${PROJECT_SOURCE_DIR}/tools"
67
+ )
68
+ endif()
69
+ endforeach()
70
+ endforeach()
71
+ endforeach()
72
+ endforeach()
73
+ endforeach()
74
+ else()
75
+ message(WARNING "Perl not found: QIF tests won't be run")
76
+ endif()
@@ -0,0 +1,43 @@
1
+ #ifndef LITESPEED_QPACK_TEST_H
2
+ #define LITESPEED_QPACK_TEST_H 1
3
+
4
+ #ifndef LS_QPACK_USE_LARGE_TABLES
5
+ #define LS_QPACK_USE_LARGE_TABLES 1
6
+ #endif
7
+
8
+ #if !LS_QPACK_USE_LARGE_TABLES
9
+ #define lsqpack_huff_decode_full lsqpack_huff_decode
10
+ #endif
11
+
12
+ int
13
+ lsqpack_enc_enc_str (unsigned prefix_bits, unsigned char *const dst,
14
+ size_t dst_len, const unsigned char *str, unsigned str_len);
15
+
16
+ unsigned char *
17
+ lsqpack_enc_int (unsigned char *dst, unsigned char *const end, uint64_t value,
18
+ unsigned prefix_bits);
19
+
20
+ int
21
+ lsqpack_dec_int (const unsigned char **src_p, const unsigned char *src_end,
22
+ unsigned prefix_bits, uint64_t *value_p,
23
+ struct lsqpack_dec_int_state *state);
24
+
25
+ struct huff_decode_retval
26
+ {
27
+ enum
28
+ {
29
+ HUFF_DEC_OK,
30
+ HUFF_DEC_END_SRC,
31
+ HUFF_DEC_END_DST,
32
+ HUFF_DEC_ERROR,
33
+ } status;
34
+ unsigned n_dst;
35
+ unsigned n_src;
36
+ };
37
+
38
+ struct huff_decode_retval
39
+ lsqpack_huff_decode_full (const unsigned char *src, int src_len,
40
+ unsigned char *dst, int dst_len,
41
+ struct lsqpack_huff_decode_state *state, int final);
42
+
43
+ #endif