protocol-quic 0.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- checksums.yaml.gz.sig +0 -0
- data/ext/ngtcp2/AUTHORS +44 -0
- data/ext/ngtcp2/CMakeLists.txt +431 -0
- data/ext/ngtcp2/CMakeOptions.txt +17 -0
- data/ext/ngtcp2/COPYING +22 -0
- data/ext/ngtcp2/ChangeLog +0 -0
- data/ext/ngtcp2/Makefile.am +60 -0
- data/ext/ngtcp2/NEWS +0 -0
- data/ext/ngtcp2/README +1 -0
- data/ext/ngtcp2/README.rst +258 -0
- data/ext/ngtcp2/ci/build_boringssl.sh +10 -0
- data/ext/ngtcp2/ci/build_nghttp3.sh +9 -0
- data/ext/ngtcp2/ci/build_openssl1.sh +8 -0
- data/ext/ngtcp2/ci/build_openssl1_cross.sh +9 -0
- data/ext/ngtcp2/ci/build_openssl3.sh +8 -0
- data/ext/ngtcp2/ci/build_picotls.sh +26 -0
- data/ext/ngtcp2/ci/build_wolfssl.sh +9 -0
- data/ext/ngtcp2/ci/gen-certificate.sh +8 -0
- data/ext/ngtcp2/cmake/ExtractValidFlags.cmake +31 -0
- data/ext/ngtcp2/cmake/FindCUnit.cmake +40 -0
- data/ext/ngtcp2/cmake/FindJemalloc.cmake +40 -0
- data/ext/ngtcp2/cmake/FindLibev.cmake +38 -0
- data/ext/ngtcp2/cmake/FindLibnghttp3.cmake +41 -0
- data/ext/ngtcp2/cmake/Findwolfssl.cmake +41 -0
- data/ext/ngtcp2/cmake/Version.cmake +11 -0
- data/ext/ngtcp2/cmakeconfig.h.in +36 -0
- data/ext/ngtcp2/configure.ac +755 -0
- data/ext/ngtcp2/crypto/CMakeLists.txt +56 -0
- data/ext/ngtcp2/crypto/Makefile.am +49 -0
- data/ext/ngtcp2/crypto/boringssl/CMakeLists.txt +64 -0
- data/ext/ngtcp2/crypto/boringssl/Makefile.am +39 -0
- data/ext/ngtcp2/crypto/boringssl/boringssl.c +630 -0
- data/ext/ngtcp2/crypto/boringssl/libngtcp2_crypto_boringssl.pc.in +33 -0
- data/ext/ngtcp2/crypto/gnutls/CMakeLists.txt +86 -0
- data/ext/ngtcp2/crypto/gnutls/Makefile.am +43 -0
- data/ext/ngtcp2/crypto/gnutls/gnutls.c +644 -0
- data/ext/ngtcp2/crypto/gnutls/libngtcp2_crypto_gnutls.pc.in +33 -0
- data/ext/ngtcp2/crypto/includes/CMakeLists.txt +56 -0
- data/ext/ngtcp2/crypto/includes/Makefile.am +45 -0
- data/ext/ngtcp2/crypto/includes/ngtcp2/ngtcp2_crypto.h +893 -0
- data/ext/ngtcp2/crypto/includes/ngtcp2/ngtcp2_crypto_boringssl.h +104 -0
- data/ext/ngtcp2/crypto/includes/ngtcp2/ngtcp2_crypto_gnutls.h +107 -0
- data/ext/ngtcp2/crypto/includes/ngtcp2/ngtcp2_crypto_openssl.h +132 -0
- data/ext/ngtcp2/crypto/includes/ngtcp2/ngtcp2_crypto_picotls.h +246 -0
- data/ext/ngtcp2/crypto/includes/ngtcp2/ngtcp2_crypto_wolfssl.h +106 -0
- data/ext/ngtcp2/crypto/openssl/CMakeLists.txt +86 -0
- data/ext/ngtcp2/crypto/openssl/Makefile.am +43 -0
- data/ext/ngtcp2/crypto/openssl/libngtcp2_crypto_openssl.pc.in +33 -0
- data/ext/ngtcp2/crypto/openssl/openssl.c +807 -0
- data/ext/ngtcp2/crypto/picotls/CMakeLists.txt +65 -0
- data/ext/ngtcp2/crypto/picotls/Makefile.am +39 -0
- data/ext/ngtcp2/crypto/picotls/libngtcp2_crypto_picotls.pc.in +33 -0
- data/ext/ngtcp2/crypto/picotls/picotls.c +707 -0
- data/ext/ngtcp2/crypto/shared.c +1431 -0
- data/ext/ngtcp2/crypto/shared.h +350 -0
- data/ext/ngtcp2/crypto/wolfssl/CMakeLists.txt +84 -0
- data/ext/ngtcp2/crypto/wolfssl/Makefile.am +43 -0
- data/ext/ngtcp2/crypto/wolfssl/libngtcp2_crypto_wolfssl.pc.in +33 -0
- data/ext/ngtcp2/crypto/wolfssl/wolfssl.c +534 -0
- data/ext/ngtcp2/doc/Makefile.am +65 -0
- data/ext/ngtcp2/doc/make.bat +35 -0
- data/ext/ngtcp2/doc/mkapiref.py +356 -0
- data/ext/ngtcp2/doc/source/conf.py.in +94 -0
- data/ext/ngtcp2/doc/source/index.rst +22 -0
- data/ext/ngtcp2/doc/source/programmers-guide.rst +476 -0
- data/ext/ngtcp2/docker/Dockerfile +39 -0
- data/ext/ngtcp2/examples/CMakeLists.txt +361 -0
- data/ext/ngtcp2/examples/Makefile.am +228 -0
- data/ext/ngtcp2/examples/client.cc +3049 -0
- data/ext/ngtcp2/examples/client.h +192 -0
- data/ext/ngtcp2/examples/client_base.cc +202 -0
- data/ext/ngtcp2/examples/client_base.h +213 -0
- data/ext/ngtcp2/examples/debug.cc +298 -0
- data/ext/ngtcp2/examples/debug.h +124 -0
- data/ext/ngtcp2/examples/examplestest.cc +84 -0
- data/ext/ngtcp2/examples/gtlssimpleclient.c +720 -0
- data/ext/ngtcp2/examples/h09client.cc +2601 -0
- data/ext/ngtcp2/examples/h09client.h +196 -0
- data/ext/ngtcp2/examples/h09server.cc +3024 -0
- data/ext/ngtcp2/examples/h09server.h +237 -0
- data/ext/ngtcp2/examples/http.cc +138 -0
- data/ext/ngtcp2/examples/http.h +44 -0
- data/ext/ngtcp2/examples/network.h +80 -0
- data/ext/ngtcp2/examples/server.cc +3731 -0
- data/ext/ngtcp2/examples/server.h +256 -0
- data/ext/ngtcp2/examples/server_base.cc +58 -0
- data/ext/ngtcp2/examples/server_base.h +195 -0
- data/ext/ngtcp2/examples/shared.cc +385 -0
- data/ext/ngtcp2/examples/shared.h +96 -0
- data/ext/ngtcp2/examples/simpleclient.c +683 -0
- data/ext/ngtcp2/examples/template.h +71 -0
- data/ext/ngtcp2/examples/tests/README.rst +60 -0
- data/ext/ngtcp2/examples/tests/__init__.py +0 -0
- data/ext/ngtcp2/examples/tests/config.ini.in +32 -0
- data/ext/ngtcp2/examples/tests/conftest.py +28 -0
- data/ext/ngtcp2/examples/tests/ngtcp2test/__init__.py +6 -0
- data/ext/ngtcp2/examples/tests/ngtcp2test/certs.py +476 -0
- data/ext/ngtcp2/examples/tests/ngtcp2test/client.py +187 -0
- data/ext/ngtcp2/examples/tests/ngtcp2test/env.py +191 -0
- data/ext/ngtcp2/examples/tests/ngtcp2test/log.py +101 -0
- data/ext/ngtcp2/examples/tests/ngtcp2test/server.py +137 -0
- data/ext/ngtcp2/examples/tests/ngtcp2test/tls.py +983 -0
- data/ext/ngtcp2/examples/tests/test_01_handshake.py +30 -0
- data/ext/ngtcp2/examples/tests/test_02_resume.py +46 -0
- data/ext/ngtcp2/examples/tests/test_03_earlydata.py +56 -0
- data/ext/ngtcp2/examples/tests/test_04_clientcert.py +57 -0
- data/ext/ngtcp2/examples/tests/test_05_ciphers.py +46 -0
- data/ext/ngtcp2/examples/tls_client_context.h +52 -0
- data/ext/ngtcp2/examples/tls_client_context_boringssl.cc +126 -0
- data/ext/ngtcp2/examples/tls_client_context_boringssl.h +49 -0
- data/ext/ngtcp2/examples/tls_client_context_gnutls.cc +74 -0
- data/ext/ngtcp2/examples/tls_client_context_gnutls.h +50 -0
- data/ext/ngtcp2/examples/tls_client_context_openssl.cc +137 -0
- data/ext/ngtcp2/examples/tls_client_context_openssl.h +49 -0
- data/ext/ngtcp2/examples/tls_client_context_picotls.cc +158 -0
- data/ext/ngtcp2/examples/tls_client_context_picotls.h +53 -0
- data/ext/ngtcp2/examples/tls_client_context_wolfssl.cc +177 -0
- data/ext/ngtcp2/examples/tls_client_context_wolfssl.h +51 -0
- data/ext/ngtcp2/examples/tls_client_session.h +52 -0
- data/ext/ngtcp2/examples/tls_client_session_boringssl.cc +110 -0
- data/ext/ngtcp2/examples/tls_client_session_boringssl.h +52 -0
- data/ext/ngtcp2/examples/tls_client_session_gnutls.cc +190 -0
- data/ext/ngtcp2/examples/tls_client_session_gnutls.h +52 -0
- data/ext/ngtcp2/examples/tls_client_session_openssl.cc +113 -0
- data/ext/ngtcp2/examples/tls_client_session_openssl.h +52 -0
- data/ext/ngtcp2/examples/tls_client_session_picotls.cc +147 -0
- data/ext/ngtcp2/examples/tls_client_session_picotls.h +52 -0
- data/ext/ngtcp2/examples/tls_client_session_wolfssl.cc +160 -0
- data/ext/ngtcp2/examples/tls_client_session_wolfssl.h +52 -0
- data/ext/ngtcp2/examples/tls_server_context.h +52 -0
- data/ext/ngtcp2/examples/tls_server_context_boringssl.cc +257 -0
- data/ext/ngtcp2/examples/tls_server_context_boringssl.h +54 -0
- data/ext/ngtcp2/examples/tls_server_context_gnutls.cc +99 -0
- data/ext/ngtcp2/examples/tls_server_context_gnutls.h +59 -0
- data/ext/ngtcp2/examples/tls_server_context_openssl.cc +338 -0
- data/ext/ngtcp2/examples/tls_server_context_openssl.h +54 -0
- data/ext/ngtcp2/examples/tls_server_context_picotls.cc +321 -0
- data/ext/ngtcp2/examples/tls_server_context_picotls.h +58 -0
- data/ext/ngtcp2/examples/tls_server_context_wolfssl.cc +284 -0
- data/ext/ngtcp2/examples/tls_server_context_wolfssl.h +55 -0
- data/ext/ngtcp2/examples/tls_server_session.h +52 -0
- data/ext/ngtcp2/examples/tls_server_session_boringssl.cc +84 -0
- data/ext/ngtcp2/examples/tls_server_session_boringssl.h +47 -0
- data/ext/ngtcp2/examples/tls_server_session_gnutls.cc +155 -0
- data/ext/ngtcp2/examples/tls_server_session_gnutls.h +46 -0
- data/ext/ngtcp2/examples/tls_server_session_openssl.cc +54 -0
- data/ext/ngtcp2/examples/tls_server_session_openssl.h +47 -0
- data/ext/ngtcp2/examples/tls_server_session_picotls.cc +70 -0
- data/ext/ngtcp2/examples/tls_server_session_picotls.h +47 -0
- data/ext/ngtcp2/examples/tls_server_session_wolfssl.cc +55 -0
- data/ext/ngtcp2/examples/tls_server_session_wolfssl.h +47 -0
- data/ext/ngtcp2/examples/tls_session_base_gnutls.cc +87 -0
- data/ext/ngtcp2/examples/tls_session_base_gnutls.h +51 -0
- data/ext/ngtcp2/examples/tls_session_base_openssl.cc +54 -0
- data/ext/ngtcp2/examples/tls_session_base_openssl.h +52 -0
- data/ext/ngtcp2/examples/tls_session_base_picotls.cc +56 -0
- data/ext/ngtcp2/examples/tls_session_base_picotls.h +54 -0
- data/ext/ngtcp2/examples/tls_session_base_wolfssl.cc +54 -0
- data/ext/ngtcp2/examples/tls_session_base_wolfssl.h +54 -0
- data/ext/ngtcp2/examples/tls_shared_picotls.cc +59 -0
- data/ext/ngtcp2/examples/tls_shared_picotls.h +36 -0
- data/ext/ngtcp2/examples/util.cc +646 -0
- data/ext/ngtcp2/examples/util.h +361 -0
- data/ext/ngtcp2/examples/util_gnutls.cc +136 -0
- data/ext/ngtcp2/examples/util_openssl.cc +131 -0
- data/ext/ngtcp2/examples/util_test.cc +237 -0
- data/ext/ngtcp2/examples/util_test.h +45 -0
- data/ext/ngtcp2/examples/util_wolfssl.cc +130 -0
- data/ext/ngtcp2/fuzz/corpus/decode_frame/ack +0 -0
- data/ext/ngtcp2/fuzz/corpus/decode_frame/ack_ecn +0 -0
- data/ext/ngtcp2/fuzz/corpus/decode_frame/connection_close +0 -0
- data/ext/ngtcp2/fuzz/corpus/decode_frame/crypto +1 -0
- data/ext/ngtcp2/fuzz/corpus/decode_frame/data_blocked +1 -0
- data/ext/ngtcp2/fuzz/corpus/decode_frame/datagram +1 -0
- data/ext/ngtcp2/fuzz/corpus/decode_frame/datagram_len +1 -0
- data/ext/ngtcp2/fuzz/corpus/decode_frame/max_data +1 -0
- data/ext/ngtcp2/fuzz/corpus/decode_frame/max_stream_data +0 -0
- data/ext/ngtcp2/fuzz/corpus/decode_frame/max_streams +0 -0
- data/ext/ngtcp2/fuzz/corpus/decode_frame/new_connection_id +1 -0
- data/ext/ngtcp2/fuzz/corpus/decode_frame/new_token +1 -0
- data/ext/ngtcp2/fuzz/corpus/decode_frame/path_challenge +1 -0
- data/ext/ngtcp2/fuzz/corpus/decode_frame/path_response +1 -0
- data/ext/ngtcp2/fuzz/corpus/decode_frame/reset_stream +0 -0
- data/ext/ngtcp2/fuzz/corpus/decode_frame/retire_connection_id +1 -0
- data/ext/ngtcp2/fuzz/corpus/decode_frame/stop_sending +0 -0
- data/ext/ngtcp2/fuzz/corpus/decode_frame/stream +0 -0
- data/ext/ngtcp2/fuzz/corpus/decode_frame/stream_data_blocked +0 -0
- data/ext/ngtcp2/fuzz/corpus/decode_frame/stream_len +0 -0
- data/ext/ngtcp2/fuzz/corpus/decode_frame/streams_blocked +0 -0
- data/ext/ngtcp2/fuzz/corpus/ksl/random +0 -0
- data/ext/ngtcp2/fuzz/decode_frame.cc +25 -0
- data/ext/ngtcp2/fuzz/ksl.cc +77 -0
- data/ext/ngtcp2/interop/Dockerfile +39 -0
- data/ext/ngtcp2/interop/run_endpoint.sh +93 -0
- data/ext/ngtcp2/lib/CMakeLists.txt +110 -0
- data/ext/ngtcp2/lib/Makefile.am +122 -0
- data/ext/ngtcp2/lib/includes/CMakeLists.txt +4 -0
- data/ext/ngtcp2/lib/includes/Makefile.am +25 -0
- data/ext/ngtcp2/lib/includes/ngtcp2/ngtcp2.h +5843 -0
- data/ext/ngtcp2/lib/includes/ngtcp2/version.h.in +51 -0
- data/ext/ngtcp2/lib/libngtcp2.pc.in +33 -0
- data/ext/ngtcp2/lib/ngtcp2_acktr.c +335 -0
- data/ext/ngtcp2/lib/ngtcp2_acktr.h +221 -0
- data/ext/ngtcp2/lib/ngtcp2_addr.c +117 -0
- data/ext/ngtcp2/lib/ngtcp2_addr.h +69 -0
- data/ext/ngtcp2/lib/ngtcp2_balloc.c +90 -0
- data/ext/ngtcp2/lib/ngtcp2_balloc.h +91 -0
- data/ext/ngtcp2/lib/ngtcp2_bbr.c +693 -0
- data/ext/ngtcp2/lib/ngtcp2_bbr.h +157 -0
- data/ext/ngtcp2/lib/ngtcp2_bbr2.c +1490 -0
- data/ext/ngtcp2/lib/ngtcp2_bbr2.h +149 -0
- data/ext/ngtcp2/lib/ngtcp2_buf.c +56 -0
- data/ext/ngtcp2/lib/ngtcp2_buf.h +108 -0
- data/ext/ngtcp2/lib/ngtcp2_cc.c +616 -0
- data/ext/ngtcp2/lib/ngtcp2_cc.h +422 -0
- data/ext/ngtcp2/lib/ngtcp2_cid.c +147 -0
- data/ext/ngtcp2/lib/ngtcp2_cid.h +175 -0
- data/ext/ngtcp2/lib/ngtcp2_conn.c +13731 -0
- data/ext/ngtcp2/lib/ngtcp2_conn.h +1119 -0
- data/ext/ngtcp2/lib/ngtcp2_conn_stat.h +131 -0
- data/ext/ngtcp2/lib/ngtcp2_conv.c +291 -0
- data/ext/ngtcp2/lib/ngtcp2_conv.h +208 -0
- data/ext/ngtcp2/lib/ngtcp2_crypto.c +895 -0
- data/ext/ngtcp2/lib/ngtcp2_crypto.h +148 -0
- data/ext/ngtcp2/lib/ngtcp2_err.c +154 -0
- data/ext/ngtcp2/lib/ngtcp2_err.h +34 -0
- data/ext/ngtcp2/lib/ngtcp2_gaptr.c +167 -0
- data/ext/ngtcp2/lib/ngtcp2_gaptr.h +98 -0
- data/ext/ngtcp2/lib/ngtcp2_idtr.c +79 -0
- data/ext/ngtcp2/lib/ngtcp2_idtr.h +89 -0
- data/ext/ngtcp2/lib/ngtcp2_ksl.c +819 -0
- data/ext/ngtcp2/lib/ngtcp2_ksl.h +345 -0
- data/ext/ngtcp2/lib/ngtcp2_log.c +822 -0
- data/ext/ngtcp2/lib/ngtcp2_log.h +123 -0
- data/ext/ngtcp2/lib/ngtcp2_macro.h +58 -0
- data/ext/ngtcp2/lib/ngtcp2_map.c +336 -0
- data/ext/ngtcp2/lib/ngtcp2_map.h +136 -0
- data/ext/ngtcp2/lib/ngtcp2_mem.c +113 -0
- data/ext/ngtcp2/lib/ngtcp2_mem.h +72 -0
- data/ext/ngtcp2/lib/ngtcp2_net.h +136 -0
- data/ext/ngtcp2/lib/ngtcp2_objalloc.c +40 -0
- data/ext/ngtcp2/lib/ngtcp2_objalloc.h +140 -0
- data/ext/ngtcp2/lib/ngtcp2_opl.c +46 -0
- data/ext/ngtcp2/lib/ngtcp2_opl.h +65 -0
- data/ext/ngtcp2/lib/ngtcp2_path.c +77 -0
- data/ext/ngtcp2/lib/ngtcp2_path.h +49 -0
- data/ext/ngtcp2/lib/ngtcp2_pkt.c +2527 -0
- data/ext/ngtcp2/lib/ngtcp2_pkt.h +1235 -0
- data/ext/ngtcp2/lib/ngtcp2_pmtud.c +160 -0
- data/ext/ngtcp2/lib/ngtcp2_pmtud.h +123 -0
- data/ext/ngtcp2/lib/ngtcp2_ppe.c +230 -0
- data/ext/ngtcp2/lib/ngtcp2_ppe.h +153 -0
- data/ext/ngtcp2/lib/ngtcp2_pq.c +164 -0
- data/ext/ngtcp2/lib/ngtcp2_pq.h +126 -0
- data/ext/ngtcp2/lib/ngtcp2_pv.c +172 -0
- data/ext/ngtcp2/lib/ngtcp2_pv.h +194 -0
- data/ext/ngtcp2/lib/ngtcp2_qlog.c +1219 -0
- data/ext/ngtcp2/lib/ngtcp2_qlog.h +161 -0
- data/ext/ngtcp2/lib/ngtcp2_range.c +61 -0
- data/ext/ngtcp2/lib/ngtcp2_range.h +80 -0
- data/ext/ngtcp2/lib/ngtcp2_rcvry.h +40 -0
- data/ext/ngtcp2/lib/ngtcp2_ringbuf.c +121 -0
- data/ext/ngtcp2/lib/ngtcp2_ringbuf.h +132 -0
- data/ext/ngtcp2/lib/ngtcp2_rob.c +319 -0
- data/ext/ngtcp2/lib/ngtcp2_rob.h +197 -0
- data/ext/ngtcp2/lib/ngtcp2_rst.c +138 -0
- data/ext/ngtcp2/lib/ngtcp2_rst.h +86 -0
- data/ext/ngtcp2/lib/ngtcp2_rtb.c +1676 -0
- data/ext/ngtcp2/lib/ngtcp2_rtb.h +468 -0
- data/ext/ngtcp2/lib/ngtcp2_str.c +233 -0
- data/ext/ngtcp2/lib/ngtcp2_str.h +94 -0
- data/ext/ngtcp2/lib/ngtcp2_strm.c +698 -0
- data/ext/ngtcp2/lib/ngtcp2_strm.h +310 -0
- data/ext/ngtcp2/lib/ngtcp2_unreachable.c +71 -0
- data/ext/ngtcp2/lib/ngtcp2_unreachable.h +46 -0
- data/ext/ngtcp2/lib/ngtcp2_vec.c +243 -0
- data/ext/ngtcp2/lib/ngtcp2_vec.h +120 -0
- data/ext/ngtcp2/lib/ngtcp2_version.c +39 -0
- data/ext/ngtcp2/lib/ngtcp2_window_filter.c +99 -0
- data/ext/ngtcp2/lib/ngtcp2_window_filter.h +65 -0
- data/ext/ngtcp2/m4/ax_check_compile_flag.m4 +74 -0
- data/ext/ngtcp2/m4/ax_cxx_compile_stdcxx.m4 +1009 -0
- data/ext/ngtcp2/tests/CMakeLists.txt +68 -0
- data/ext/ngtcp2/tests/Makefile.am +94 -0
- data/ext/ngtcp2/tests/main.c +358 -0
- data/ext/ngtcp2/tests/ngtcp2_acktr_test.c +367 -0
- data/ext/ngtcp2/tests/ngtcp2_acktr_test.h +37 -0
- data/ext/ngtcp2/tests/ngtcp2_conn_test.c +9821 -0
- data/ext/ngtcp2/tests/ngtcp2_conn_test.h +104 -0
- data/ext/ngtcp2/tests/ngtcp2_conv_test.c +430 -0
- data/ext/ngtcp2/tests/ngtcp2_conv_test.h +46 -0
- data/ext/ngtcp2/tests/ngtcp2_crypto_test.c +667 -0
- data/ext/ngtcp2/tests/ngtcp2_crypto_test.h +35 -0
- data/ext/ngtcp2/tests/ngtcp2_gaptr_test.c +127 -0
- data/ext/ngtcp2/tests/ngtcp2_gaptr_test.h +36 -0
- data/ext/ngtcp2/tests/ngtcp2_idtr_test.c +79 -0
- data/ext/ngtcp2/tests/ngtcp2_idtr_test.h +34 -0
- data/ext/ngtcp2/tests/ngtcp2_ksl_test.c +502 -0
- data/ext/ngtcp2/tests/ngtcp2_ksl_test.h +39 -0
- data/ext/ngtcp2/tests/ngtcp2_map_test.c +206 -0
- data/ext/ngtcp2/tests/ngtcp2_map_test.h +38 -0
- data/ext/ngtcp2/tests/ngtcp2_pkt_test.c +1645 -0
- data/ext/ngtcp2/tests/ngtcp2_pkt_test.h +68 -0
- data/ext/ngtcp2/tests/ngtcp2_pmtud_test.c +153 -0
- data/ext/ngtcp2/tests/ngtcp2_pmtud_test.h +34 -0
- data/ext/ngtcp2/tests/ngtcp2_pv_test.c +129 -0
- data/ext/ngtcp2/tests/ngtcp2_pv_test.h +35 -0
- data/ext/ngtcp2/tests/ngtcp2_range_test.c +105 -0
- data/ext/ngtcp2/tests/ngtcp2_range_test.h +36 -0
- data/ext/ngtcp2/tests/ngtcp2_ringbuf_test.c +91 -0
- data/ext/ngtcp2/tests/ngtcp2_ringbuf_test.h +35 -0
- data/ext/ngtcp2/tests/ngtcp2_rob_test.c +552 -0
- data/ext/ngtcp2/tests/ngtcp2_rob_test.h +37 -0
- data/ext/ngtcp2/tests/ngtcp2_rtb_test.c +470 -0
- data/ext/ngtcp2/tests/ngtcp2_rtb_test.h +38 -0
- data/ext/ngtcp2/tests/ngtcp2_str_test.c +96 -0
- data/ext/ngtcp2/tests/ngtcp2_str_test.h +36 -0
- data/ext/ngtcp2/tests/ngtcp2_strm_test.c +575 -0
- data/ext/ngtcp2/tests/ngtcp2_strm_test.h +36 -0
- data/ext/ngtcp2/tests/ngtcp2_test_helper.c +404 -0
- data/ext/ngtcp2/tests/ngtcp2_test_helper.h +191 -0
- data/ext/ngtcp2/tests/ngtcp2_vec_test.c +426 -0
- data/ext/ngtcp2/tests/ngtcp2_vec_test.h +36 -0
- data/ext/ngtcp2/third-party/CMakeLists.txt +34 -0
- data/ext/ngtcp2/third-party/Makefile.am +31 -0
- data/ext/ngtcp2/third-party/http-parser/AUTHORS +68 -0
- data/ext/ngtcp2/third-party/http-parser/LICENSE-MIT +23 -0
- data/ext/ngtcp2/third-party/http-parser/Makefile +157 -0
- data/ext/ngtcp2/third-party/http-parser/README.md +246 -0
- data/ext/ngtcp2/third-party/http-parser/bench.c +111 -0
- data/ext/ngtcp2/third-party/http-parser/contrib/parsertrace.c +160 -0
- data/ext/ngtcp2/third-party/http-parser/contrib/url_parser.c +47 -0
- data/ext/ngtcp2/third-party/http-parser/http_parser.c +2419 -0
- data/ext/ngtcp2/third-party/http-parser/http_parser.gyp +111 -0
- data/ext/ngtcp2/third-party/http-parser/http_parser.h +431 -0
- data/ext/ngtcp2/third-party/http-parser/test.c +4411 -0
- data/lib/protocol/quic/version.rb +10 -0
- data/lib/protocol/quic.rb +9 -0
- data/license.md +21 -0
- data.tar.gz.sig +1 -0
- metadata +424 -0
- metadata.gz.sig +1 -0
|
@@ -0,0 +1,470 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* ngtcp2
|
|
3
|
+
*
|
|
4
|
+
* Copyright (c) 2017 ngtcp2 contributors
|
|
5
|
+
*
|
|
6
|
+
* Permission is hereby granted, free of charge, to any person obtaining
|
|
7
|
+
* a copy of this software and associated documentation files (the
|
|
8
|
+
* "Software"), to deal in the Software without restriction, including
|
|
9
|
+
* without limitation the rights to use, copy, modify, merge, publish,
|
|
10
|
+
* distribute, sublicense, and/or sell copies of the Software, and to
|
|
11
|
+
* permit persons to whom the Software is furnished to do so, subject to
|
|
12
|
+
* the following conditions:
|
|
13
|
+
*
|
|
14
|
+
* The above copyright notice and this permission notice shall be
|
|
15
|
+
* included in all copies or substantial portions of the Software.
|
|
16
|
+
*
|
|
17
|
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
18
|
+
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
19
|
+
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
20
|
+
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
21
|
+
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
22
|
+
* OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
23
|
+
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
24
|
+
*/
|
|
25
|
+
#include "ngtcp2_rtb_test.h"
|
|
26
|
+
|
|
27
|
+
#include <assert.h>
|
|
28
|
+
|
|
29
|
+
#include <CUnit/CUnit.h>
|
|
30
|
+
|
|
31
|
+
#include "ngtcp2_rtb.h"
|
|
32
|
+
#include "ngtcp2_test_helper.h"
|
|
33
|
+
#include "ngtcp2_mem.h"
|
|
34
|
+
#include "ngtcp2_pkt.h"
|
|
35
|
+
|
|
36
|
+
static void conn_stat_init(ngtcp2_conn_stat *cstat) {
|
|
37
|
+
memset(cstat, 0, sizeof(*cstat));
|
|
38
|
+
cstat->max_tx_udp_payload_size = NGTCP2_MAX_UDP_PAYLOAD_SIZE;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
void test_ngtcp2_rtb_add(void) {
|
|
42
|
+
ngtcp2_rtb rtb;
|
|
43
|
+
ngtcp2_rtb_entry *ent;
|
|
44
|
+
int rv;
|
|
45
|
+
const ngtcp2_mem *mem = ngtcp2_mem_default();
|
|
46
|
+
ngtcp2_pkt_hd hd;
|
|
47
|
+
ngtcp2_log log;
|
|
48
|
+
ngtcp2_cid dcid;
|
|
49
|
+
ngtcp2_ksl_it it;
|
|
50
|
+
ngtcp2_conn_stat cstat;
|
|
51
|
+
ngtcp2_cc cc;
|
|
52
|
+
ngtcp2_strm crypto;
|
|
53
|
+
const ngtcp2_pktns_id pktns_id = NGTCP2_PKTNS_ID_HANDSHAKE;
|
|
54
|
+
ngtcp2_rst rst;
|
|
55
|
+
ngtcp2_objalloc frc_objalloc;
|
|
56
|
+
ngtcp2_objalloc rtb_entry_objalloc;
|
|
57
|
+
|
|
58
|
+
ngtcp2_objalloc_init(&frc_objalloc, 1024, mem);
|
|
59
|
+
ngtcp2_objalloc_init(&rtb_entry_objalloc, 1024, mem);
|
|
60
|
+
|
|
61
|
+
ngtcp2_strm_init(&crypto, 0, NGTCP2_STRM_FLAG_NONE, 0, 0, NULL, &frc_objalloc,
|
|
62
|
+
mem);
|
|
63
|
+
dcid_init(&dcid);
|
|
64
|
+
conn_stat_init(&cstat);
|
|
65
|
+
ngtcp2_rst_init(&rst);
|
|
66
|
+
ngtcp2_log_init(&log, NULL, NULL, 0, NULL);
|
|
67
|
+
ngtcp2_cc_reno_cc_init(&cc, &log, mem);
|
|
68
|
+
ngtcp2_rtb_init(&rtb, pktns_id, &crypto, &rst, &cc, &log, NULL,
|
|
69
|
+
&rtb_entry_objalloc, &frc_objalloc, mem);
|
|
70
|
+
|
|
71
|
+
ngtcp2_pkt_hd_init(&hd, NGTCP2_PKT_FLAG_NONE, NGTCP2_PKT_1RTT, &dcid, NULL,
|
|
72
|
+
1000000007, 1, NGTCP2_PROTO_VER_V1, 0);
|
|
73
|
+
|
|
74
|
+
rv = ngtcp2_rtb_entry_objalloc_new(
|
|
75
|
+
&ent, &hd, NULL, 10, 0, NGTCP2_RTB_ENTRY_FLAG_NONE, &rtb_entry_objalloc);
|
|
76
|
+
|
|
77
|
+
CU_ASSERT(0 == rv);
|
|
78
|
+
|
|
79
|
+
ngtcp2_rtb_add(&rtb, ent, &cstat);
|
|
80
|
+
|
|
81
|
+
ngtcp2_pkt_hd_init(&hd, NGTCP2_PKT_FLAG_NONE, NGTCP2_PKT_1RTT, &dcid, NULL,
|
|
82
|
+
1000000008, 2, NGTCP2_PROTO_VER_V1, 0);
|
|
83
|
+
|
|
84
|
+
rv = ngtcp2_rtb_entry_objalloc_new(
|
|
85
|
+
&ent, &hd, NULL, 9, 0, NGTCP2_RTB_ENTRY_FLAG_NONE, &rtb_entry_objalloc);
|
|
86
|
+
|
|
87
|
+
CU_ASSERT(0 == rv);
|
|
88
|
+
|
|
89
|
+
ngtcp2_rtb_add(&rtb, ent, &cstat);
|
|
90
|
+
|
|
91
|
+
ngtcp2_pkt_hd_init(&hd, NGTCP2_PKT_FLAG_NONE, NGTCP2_PKT_1RTT, &dcid, NULL,
|
|
92
|
+
1000000009, 4, NGTCP2_PROTO_VER_V1, 0);
|
|
93
|
+
|
|
94
|
+
rv = ngtcp2_rtb_entry_objalloc_new(
|
|
95
|
+
&ent, &hd, NULL, 11, 0, NGTCP2_RTB_ENTRY_FLAG_NONE, &rtb_entry_objalloc);
|
|
96
|
+
|
|
97
|
+
CU_ASSERT(0 == rv);
|
|
98
|
+
|
|
99
|
+
ngtcp2_rtb_add(&rtb, ent, &cstat);
|
|
100
|
+
|
|
101
|
+
it = ngtcp2_rtb_head(&rtb);
|
|
102
|
+
ent = ngtcp2_ksl_it_get(&it);
|
|
103
|
+
|
|
104
|
+
/* Check the top of the queue */
|
|
105
|
+
CU_ASSERT(1000000009 == ent->hd.pkt_num);
|
|
106
|
+
|
|
107
|
+
ngtcp2_ksl_it_next(&it);
|
|
108
|
+
ent = ngtcp2_ksl_it_get(&it);
|
|
109
|
+
|
|
110
|
+
CU_ASSERT(1000000008 == ent->hd.pkt_num);
|
|
111
|
+
|
|
112
|
+
ngtcp2_ksl_it_next(&it);
|
|
113
|
+
ent = ngtcp2_ksl_it_get(&it);
|
|
114
|
+
|
|
115
|
+
CU_ASSERT(1000000007 == ent->hd.pkt_num);
|
|
116
|
+
|
|
117
|
+
ngtcp2_ksl_it_next(&it);
|
|
118
|
+
|
|
119
|
+
CU_ASSERT(ngtcp2_ksl_it_end(&it));
|
|
120
|
+
|
|
121
|
+
ngtcp2_rtb_free(&rtb);
|
|
122
|
+
ngtcp2_cc_reno_cc_free(&cc, mem);
|
|
123
|
+
ngtcp2_strm_free(&crypto);
|
|
124
|
+
|
|
125
|
+
ngtcp2_objalloc_free(&rtb_entry_objalloc);
|
|
126
|
+
ngtcp2_objalloc_free(&frc_objalloc);
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
static void add_rtb_entry_range(ngtcp2_rtb *rtb, int64_t base_pkt_num,
|
|
130
|
+
size_t len, ngtcp2_conn_stat *cstat,
|
|
131
|
+
ngtcp2_objalloc *objalloc) {
|
|
132
|
+
ngtcp2_pkt_hd hd;
|
|
133
|
+
ngtcp2_rtb_entry *ent;
|
|
134
|
+
size_t i;
|
|
135
|
+
ngtcp2_cid dcid;
|
|
136
|
+
|
|
137
|
+
dcid_init(&dcid);
|
|
138
|
+
|
|
139
|
+
for (i = 0; i < len; ++i) {
|
|
140
|
+
ngtcp2_pkt_hd_init(&hd, NGTCP2_PKT_FLAG_NONE, NGTCP2_PKT_1RTT, &dcid, NULL,
|
|
141
|
+
base_pkt_num + (int64_t)i, 1, NGTCP2_PROTO_VER_V1, 0);
|
|
142
|
+
ngtcp2_rtb_entry_objalloc_new(&ent, &hd, NULL, 0, 0,
|
|
143
|
+
NGTCP2_RTB_ENTRY_FLAG_NONE, objalloc);
|
|
144
|
+
ngtcp2_rtb_add(rtb, ent, cstat);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
static void setup_rtb_fixture(ngtcp2_rtb *rtb, ngtcp2_conn_stat *cstat,
|
|
149
|
+
ngtcp2_objalloc *objalloc) {
|
|
150
|
+
/* 100, ..., 154 */
|
|
151
|
+
add_rtb_entry_range(rtb, 100, 55, cstat, objalloc);
|
|
152
|
+
/* 180, ..., 184 */
|
|
153
|
+
add_rtb_entry_range(rtb, 180, 5, cstat, objalloc);
|
|
154
|
+
/* 440, ..., 446 */
|
|
155
|
+
add_rtb_entry_range(rtb, 440, 7, cstat, objalloc);
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
static void assert_rtb_entry_not_found(ngtcp2_rtb *rtb, int64_t pkt_num) {
|
|
159
|
+
ngtcp2_ksl_it it = ngtcp2_rtb_head(rtb);
|
|
160
|
+
ngtcp2_rtb_entry *ent;
|
|
161
|
+
|
|
162
|
+
for (; !ngtcp2_ksl_it_end(&it); ngtcp2_ksl_it_next(&it)) {
|
|
163
|
+
ent = ngtcp2_ksl_it_get(&it);
|
|
164
|
+
CU_ASSERT(ent->hd.pkt_num != pkt_num);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
void test_ngtcp2_rtb_recv_ack(void) {
|
|
169
|
+
ngtcp2_rtb rtb;
|
|
170
|
+
const ngtcp2_mem *mem = ngtcp2_mem_default();
|
|
171
|
+
ngtcp2_max_frame mfr;
|
|
172
|
+
ngtcp2_ack *fr = &mfr.ackfr.ack;
|
|
173
|
+
ngtcp2_ack_range *ranges;
|
|
174
|
+
ngtcp2_log log;
|
|
175
|
+
ngtcp2_conn_stat cstat;
|
|
176
|
+
ngtcp2_cc cc;
|
|
177
|
+
ngtcp2_pkt_hd hd;
|
|
178
|
+
ngtcp2_ssize num_acked;
|
|
179
|
+
ngtcp2_strm crypto;
|
|
180
|
+
const ngtcp2_pktns_id pktns_id = NGTCP2_PKTNS_ID_HANDSHAKE;
|
|
181
|
+
ngtcp2_rst rst;
|
|
182
|
+
ngtcp2_objalloc frc_objalloc;
|
|
183
|
+
ngtcp2_objalloc rtb_entry_objalloc;
|
|
184
|
+
|
|
185
|
+
ngtcp2_objalloc_init(&frc_objalloc, 1024, mem);
|
|
186
|
+
ngtcp2_objalloc_init(&rtb_entry_objalloc, 1024, mem);
|
|
187
|
+
|
|
188
|
+
ngtcp2_strm_init(&crypto, 0, NGTCP2_STRM_FLAG_NONE, 0, 0, NULL, &frc_objalloc,
|
|
189
|
+
mem);
|
|
190
|
+
ngtcp2_log_init(&log, NULL, NULL, 0, NULL);
|
|
191
|
+
ngtcp2_pkt_hd_init(&hd, NGTCP2_PKT_FLAG_NONE, NGTCP2_PKT_1RTT, NULL, NULL, 0,
|
|
192
|
+
1, NGTCP2_PROTO_VER_V1, 0);
|
|
193
|
+
|
|
194
|
+
/* no ack block */
|
|
195
|
+
conn_stat_init(&cstat);
|
|
196
|
+
ngtcp2_rst_init(&rst);
|
|
197
|
+
ngtcp2_cc_reno_cc_init(&cc, &log, mem);
|
|
198
|
+
ngtcp2_rtb_init(&rtb, pktns_id, &crypto, &rst, &cc, &log, NULL,
|
|
199
|
+
&rtb_entry_objalloc, &frc_objalloc, mem);
|
|
200
|
+
setup_rtb_fixture(&rtb, &cstat, &rtb_entry_objalloc);
|
|
201
|
+
|
|
202
|
+
CU_ASSERT(67 == ngtcp2_ksl_len(&rtb.ents));
|
|
203
|
+
|
|
204
|
+
fr->largest_ack = 446;
|
|
205
|
+
fr->first_ack_range = 1;
|
|
206
|
+
fr->rangecnt = 0;
|
|
207
|
+
|
|
208
|
+
num_acked =
|
|
209
|
+
ngtcp2_rtb_recv_ack(&rtb, fr, &cstat, NULL, NULL, 1000000009, 1000000009);
|
|
210
|
+
|
|
211
|
+
CU_ASSERT(2 == num_acked);
|
|
212
|
+
CU_ASSERT(65 == ngtcp2_ksl_len(&rtb.ents));
|
|
213
|
+
assert_rtb_entry_not_found(&rtb, 446);
|
|
214
|
+
assert_rtb_entry_not_found(&rtb, 445);
|
|
215
|
+
|
|
216
|
+
ngtcp2_rtb_free(&rtb);
|
|
217
|
+
ngtcp2_cc_reno_cc_free(&cc, mem);
|
|
218
|
+
|
|
219
|
+
/* with ack block */
|
|
220
|
+
conn_stat_init(&cstat);
|
|
221
|
+
ngtcp2_cc_reno_cc_init(&cc, &log, mem);
|
|
222
|
+
ngtcp2_rtb_init(&rtb, pktns_id, &crypto, &rst, &cc, &log, NULL,
|
|
223
|
+
&rtb_entry_objalloc, &frc_objalloc, mem);
|
|
224
|
+
setup_rtb_fixture(&rtb, &cstat, &rtb_entry_objalloc);
|
|
225
|
+
|
|
226
|
+
fr->largest_ack = 441;
|
|
227
|
+
fr->first_ack_range = 3; /* (441), (440), 439, 438 */
|
|
228
|
+
fr->rangecnt = 2;
|
|
229
|
+
ranges = fr->ranges;
|
|
230
|
+
ranges[0].gap = 253;
|
|
231
|
+
ranges[0].len = 0; /* (183) */
|
|
232
|
+
ranges[1].gap = 1; /* 182, 181 */
|
|
233
|
+
ranges[1].len = 1; /* (180), 179 */
|
|
234
|
+
|
|
235
|
+
num_acked =
|
|
236
|
+
ngtcp2_rtb_recv_ack(&rtb, fr, &cstat, NULL, NULL, 1000000009, 1000000009);
|
|
237
|
+
|
|
238
|
+
CU_ASSERT(4 == num_acked);
|
|
239
|
+
CU_ASSERT(63 == ngtcp2_ksl_len(&rtb.ents));
|
|
240
|
+
CU_ASSERT(441 == rtb.largest_acked_tx_pkt_num);
|
|
241
|
+
assert_rtb_entry_not_found(&rtb, 441);
|
|
242
|
+
assert_rtb_entry_not_found(&rtb, 440);
|
|
243
|
+
assert_rtb_entry_not_found(&rtb, 183);
|
|
244
|
+
assert_rtb_entry_not_found(&rtb, 180);
|
|
245
|
+
|
|
246
|
+
ngtcp2_rtb_free(&rtb);
|
|
247
|
+
ngtcp2_cc_reno_cc_free(&cc, mem);
|
|
248
|
+
|
|
249
|
+
/* gap+len points to pkt_num 0 */
|
|
250
|
+
conn_stat_init(&cstat);
|
|
251
|
+
ngtcp2_cc_reno_cc_init(&cc, &log, mem);
|
|
252
|
+
ngtcp2_rtb_init(&rtb, pktns_id, &crypto, &rst, &cc, &log, NULL,
|
|
253
|
+
&rtb_entry_objalloc, &frc_objalloc, mem);
|
|
254
|
+
add_rtb_entry_range(&rtb, 0, 1, &cstat, &rtb_entry_objalloc);
|
|
255
|
+
|
|
256
|
+
fr->largest_ack = 250;
|
|
257
|
+
fr->first_ack_range = 0;
|
|
258
|
+
fr->rangecnt = 1;
|
|
259
|
+
fr->ranges[0].gap = 248;
|
|
260
|
+
fr->ranges[0].len = 0;
|
|
261
|
+
|
|
262
|
+
num_acked =
|
|
263
|
+
ngtcp2_rtb_recv_ack(&rtb, fr, &cstat, NULL, NULL, 1000000009, 1000000009);
|
|
264
|
+
|
|
265
|
+
CU_ASSERT(1 == num_acked);
|
|
266
|
+
assert_rtb_entry_not_found(&rtb, 0);
|
|
267
|
+
|
|
268
|
+
ngtcp2_rtb_free(&rtb);
|
|
269
|
+
ngtcp2_cc_reno_cc_free(&cc, mem);
|
|
270
|
+
|
|
271
|
+
/* pkt_num = 0 (first ack block) */
|
|
272
|
+
conn_stat_init(&cstat);
|
|
273
|
+
ngtcp2_cc_reno_cc_init(&cc, &log, mem);
|
|
274
|
+
ngtcp2_rtb_init(&rtb, pktns_id, &crypto, &rst, &cc, &log, NULL,
|
|
275
|
+
&rtb_entry_objalloc, &frc_objalloc, mem);
|
|
276
|
+
add_rtb_entry_range(&rtb, 0, 1, &cstat, &rtb_entry_objalloc);
|
|
277
|
+
|
|
278
|
+
fr->largest_ack = 0;
|
|
279
|
+
fr->first_ack_range = 0;
|
|
280
|
+
fr->rangecnt = 0;
|
|
281
|
+
|
|
282
|
+
num_acked =
|
|
283
|
+
ngtcp2_rtb_recv_ack(&rtb, fr, &cstat, NULL, NULL, 1000000009, 1000000009);
|
|
284
|
+
|
|
285
|
+
CU_ASSERT(1 == num_acked);
|
|
286
|
+
assert_rtb_entry_not_found(&rtb, 0);
|
|
287
|
+
|
|
288
|
+
ngtcp2_rtb_free(&rtb);
|
|
289
|
+
ngtcp2_cc_reno_cc_free(&cc, mem);
|
|
290
|
+
|
|
291
|
+
/* pkt_num = 0 */
|
|
292
|
+
conn_stat_init(&cstat);
|
|
293
|
+
ngtcp2_cc_reno_cc_init(&cc, &log, mem);
|
|
294
|
+
ngtcp2_rtb_init(&rtb, pktns_id, &crypto, &rst, &cc, &log, NULL,
|
|
295
|
+
&rtb_entry_objalloc, &frc_objalloc, mem);
|
|
296
|
+
add_rtb_entry_range(&rtb, 0, 1, &cstat, &rtb_entry_objalloc);
|
|
297
|
+
|
|
298
|
+
fr->largest_ack = 2;
|
|
299
|
+
fr->first_ack_range = 0;
|
|
300
|
+
fr->rangecnt = 1;
|
|
301
|
+
fr->ranges[0].gap = 0;
|
|
302
|
+
fr->ranges[0].len = 0;
|
|
303
|
+
|
|
304
|
+
num_acked =
|
|
305
|
+
ngtcp2_rtb_recv_ack(&rtb, fr, &cstat, NULL, NULL, 1000000009, 1000000009);
|
|
306
|
+
|
|
307
|
+
CU_ASSERT(1 == num_acked);
|
|
308
|
+
assert_rtb_entry_not_found(&rtb, 0);
|
|
309
|
+
|
|
310
|
+
ngtcp2_rtb_free(&rtb);
|
|
311
|
+
ngtcp2_cc_reno_cc_free(&cc, mem);
|
|
312
|
+
ngtcp2_strm_free(&crypto);
|
|
313
|
+
|
|
314
|
+
ngtcp2_objalloc_free(&rtb_entry_objalloc);
|
|
315
|
+
ngtcp2_objalloc_free(&frc_objalloc);
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
void test_ngtcp2_rtb_lost_pkt_ts(void) {
|
|
319
|
+
ngtcp2_rtb rtb;
|
|
320
|
+
const ngtcp2_pktns_id pktns_id = NGTCP2_PKTNS_ID_APPLICATION;
|
|
321
|
+
ngtcp2_strm crypto;
|
|
322
|
+
ngtcp2_log log;
|
|
323
|
+
const ngtcp2_mem *mem = ngtcp2_mem_default();
|
|
324
|
+
ngtcp2_cc cc;
|
|
325
|
+
ngtcp2_rst rst;
|
|
326
|
+
ngtcp2_conn_stat cstat;
|
|
327
|
+
ngtcp2_ksl_it it;
|
|
328
|
+
ngtcp2_rtb_entry *ent;
|
|
329
|
+
ngtcp2_objalloc frc_objalloc;
|
|
330
|
+
ngtcp2_objalloc rtb_entry_objalloc;
|
|
331
|
+
|
|
332
|
+
ngtcp2_objalloc_init(&frc_objalloc, 1024, mem);
|
|
333
|
+
ngtcp2_objalloc_init(&rtb_entry_objalloc, 1024, mem);
|
|
334
|
+
|
|
335
|
+
ngtcp2_strm_init(&crypto, 0, NGTCP2_STRM_FLAG_NONE, 0, 0, NULL, &frc_objalloc,
|
|
336
|
+
mem);
|
|
337
|
+
ngtcp2_log_init(&log, NULL, NULL, 0, NULL);
|
|
338
|
+
|
|
339
|
+
conn_stat_init(&cstat);
|
|
340
|
+
ngtcp2_rst_init(&rst);
|
|
341
|
+
ngtcp2_cc_reno_cc_init(&cc, &log, mem);
|
|
342
|
+
ngtcp2_rtb_init(&rtb, pktns_id, &crypto, &rst, &cc, &log, NULL,
|
|
343
|
+
&rtb_entry_objalloc, &frc_objalloc, mem);
|
|
344
|
+
|
|
345
|
+
add_rtb_entry_range(&rtb, 0, 1, &cstat, &rtb_entry_objalloc);
|
|
346
|
+
|
|
347
|
+
CU_ASSERT(UINT64_MAX == ngtcp2_rtb_lost_pkt_ts(&rtb));
|
|
348
|
+
|
|
349
|
+
it = ngtcp2_ksl_end(&rtb.ents);
|
|
350
|
+
ngtcp2_ksl_it_prev(&it);
|
|
351
|
+
ent = ngtcp2_ksl_it_get(&it);
|
|
352
|
+
ent->flags |= NGTCP2_RTB_ENTRY_FLAG_LOST_RETRANSMITTED;
|
|
353
|
+
ent->lost_ts = 16777217;
|
|
354
|
+
|
|
355
|
+
CU_ASSERT(16777217 == ngtcp2_rtb_lost_pkt_ts(&rtb));
|
|
356
|
+
|
|
357
|
+
ngtcp2_rtb_free(&rtb);
|
|
358
|
+
ngtcp2_cc_reno_cc_free(&cc, mem);
|
|
359
|
+
ngtcp2_strm_free(&crypto);
|
|
360
|
+
|
|
361
|
+
ngtcp2_objalloc_free(&rtb_entry_objalloc);
|
|
362
|
+
ngtcp2_objalloc_free(&frc_objalloc);
|
|
363
|
+
}
|
|
364
|
+
|
|
365
|
+
void test_ngtcp2_rtb_remove_expired_lost_pkt(void) {
|
|
366
|
+
ngtcp2_rtb rtb;
|
|
367
|
+
const ngtcp2_pktns_id pktns_id = NGTCP2_PKTNS_ID_APPLICATION;
|
|
368
|
+
ngtcp2_strm crypto;
|
|
369
|
+
ngtcp2_log log;
|
|
370
|
+
const ngtcp2_mem *mem = ngtcp2_mem_default();
|
|
371
|
+
ngtcp2_cc cc;
|
|
372
|
+
ngtcp2_rst rst;
|
|
373
|
+
ngtcp2_conn_stat cstat;
|
|
374
|
+
ngtcp2_ksl_it it;
|
|
375
|
+
ngtcp2_rtb_entry *ent;
|
|
376
|
+
size_t i;
|
|
377
|
+
ngtcp2_objalloc frc_objalloc;
|
|
378
|
+
ngtcp2_objalloc rtb_entry_objalloc;
|
|
379
|
+
|
|
380
|
+
ngtcp2_objalloc_init(&frc_objalloc, 1024, mem);
|
|
381
|
+
ngtcp2_objalloc_init(&rtb_entry_objalloc, 1024, mem);
|
|
382
|
+
|
|
383
|
+
ngtcp2_strm_init(&crypto, 0, NGTCP2_STRM_FLAG_NONE, 0, 0, NULL, &frc_objalloc,
|
|
384
|
+
mem);
|
|
385
|
+
ngtcp2_log_init(&log, NULL, NULL, 0, NULL);
|
|
386
|
+
|
|
387
|
+
conn_stat_init(&cstat);
|
|
388
|
+
ngtcp2_rst_init(&rst);
|
|
389
|
+
ngtcp2_cc_reno_cc_init(&cc, &log, mem);
|
|
390
|
+
ngtcp2_rtb_init(&rtb, pktns_id, &crypto, &rst, &cc, &log, NULL,
|
|
391
|
+
&rtb_entry_objalloc, &frc_objalloc, mem);
|
|
392
|
+
|
|
393
|
+
add_rtb_entry_range(&rtb, 0, 7, &cstat, &rtb_entry_objalloc);
|
|
394
|
+
|
|
395
|
+
it = ngtcp2_ksl_end(&rtb.ents);
|
|
396
|
+
|
|
397
|
+
for (i = 0; i < 5; ++i) {
|
|
398
|
+
ngtcp2_ksl_it_prev(&it);
|
|
399
|
+
ent = ngtcp2_ksl_it_get(&it);
|
|
400
|
+
ent->flags |= NGTCP2_RTB_ENTRY_FLAG_LOST_RETRANSMITTED;
|
|
401
|
+
ent->lost_ts = 16777217 + i;
|
|
402
|
+
}
|
|
403
|
+
|
|
404
|
+
ngtcp2_rtb_remove_expired_lost_pkt(&rtb, 1, 16777219);
|
|
405
|
+
|
|
406
|
+
CU_ASSERT(5 == ngtcp2_ksl_len(&rtb.ents));
|
|
407
|
+
|
|
408
|
+
ngtcp2_rtb_remove_expired_lost_pkt(&rtb, 1, 16777223);
|
|
409
|
+
|
|
410
|
+
CU_ASSERT(2 == ngtcp2_ksl_len(&rtb.ents));
|
|
411
|
+
|
|
412
|
+
ngtcp2_rtb_free(&rtb);
|
|
413
|
+
ngtcp2_cc_reno_cc_free(&cc, mem);
|
|
414
|
+
ngtcp2_strm_free(&crypto);
|
|
415
|
+
|
|
416
|
+
ngtcp2_objalloc_free(&rtb_entry_objalloc);
|
|
417
|
+
ngtcp2_objalloc_free(&frc_objalloc);
|
|
418
|
+
}
|
|
419
|
+
|
|
420
|
+
void test_ngtcp2_rtb_remove_excessive_lost_pkt(void) {
|
|
421
|
+
ngtcp2_rtb rtb;
|
|
422
|
+
const ngtcp2_pktns_id pktns_id = NGTCP2_PKTNS_ID_APPLICATION;
|
|
423
|
+
ngtcp2_strm crypto;
|
|
424
|
+
ngtcp2_log log;
|
|
425
|
+
const ngtcp2_mem *mem = ngtcp2_mem_default();
|
|
426
|
+
ngtcp2_cc cc;
|
|
427
|
+
ngtcp2_rst rst;
|
|
428
|
+
ngtcp2_conn_stat cstat;
|
|
429
|
+
ngtcp2_ksl_it it;
|
|
430
|
+
ngtcp2_rtb_entry *ent;
|
|
431
|
+
size_t i;
|
|
432
|
+
ngtcp2_objalloc frc_objalloc;
|
|
433
|
+
ngtcp2_objalloc rtb_entry_objalloc;
|
|
434
|
+
|
|
435
|
+
ngtcp2_objalloc_init(&frc_objalloc, 1024, mem);
|
|
436
|
+
ngtcp2_objalloc_init(&rtb_entry_objalloc, 1024, mem);
|
|
437
|
+
|
|
438
|
+
ngtcp2_strm_init(&crypto, 0, NGTCP2_STRM_FLAG_NONE, 0, 0, NULL, &frc_objalloc,
|
|
439
|
+
mem);
|
|
440
|
+
ngtcp2_log_init(&log, NULL, NULL, 0, NULL);
|
|
441
|
+
|
|
442
|
+
conn_stat_init(&cstat);
|
|
443
|
+
ngtcp2_rst_init(&rst);
|
|
444
|
+
ngtcp2_cc_reno_cc_init(&cc, &log, mem);
|
|
445
|
+
ngtcp2_rtb_init(&rtb, pktns_id, &crypto, &rst, &cc, &log, NULL,
|
|
446
|
+
&rtb_entry_objalloc, &frc_objalloc, mem);
|
|
447
|
+
|
|
448
|
+
add_rtb_entry_range(&rtb, 0, 7, &cstat, &rtb_entry_objalloc);
|
|
449
|
+
|
|
450
|
+
it = ngtcp2_ksl_end(&rtb.ents);
|
|
451
|
+
|
|
452
|
+
for (i = 0; i < 5; ++i) {
|
|
453
|
+
ngtcp2_ksl_it_prev(&it);
|
|
454
|
+
ent = ngtcp2_ksl_it_get(&it);
|
|
455
|
+
ent->flags |= NGTCP2_RTB_ENTRY_FLAG_LOST_RETRANSMITTED;
|
|
456
|
+
ent->lost_ts = 16777217;
|
|
457
|
+
++rtb.num_lost_pkts;
|
|
458
|
+
}
|
|
459
|
+
|
|
460
|
+
ngtcp2_rtb_remove_excessive_lost_pkt(&rtb, 2);
|
|
461
|
+
|
|
462
|
+
CU_ASSERT(4 == ngtcp2_ksl_len(&rtb.ents));
|
|
463
|
+
|
|
464
|
+
ngtcp2_rtb_free(&rtb);
|
|
465
|
+
ngtcp2_cc_reno_cc_free(&cc, mem);
|
|
466
|
+
ngtcp2_strm_free(&crypto);
|
|
467
|
+
|
|
468
|
+
ngtcp2_objalloc_free(&rtb_entry_objalloc);
|
|
469
|
+
ngtcp2_objalloc_free(&frc_objalloc);
|
|
470
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* ngtcp2
|
|
3
|
+
*
|
|
4
|
+
* Copyright (c) 2017 ngtcp2 contributors
|
|
5
|
+
*
|
|
6
|
+
* Permission is hereby granted, free of charge, to any person obtaining
|
|
7
|
+
* a copy of this software and associated documentation files (the
|
|
8
|
+
* "Software"), to deal in the Software without restriction, including
|
|
9
|
+
* without limitation the rights to use, copy, modify, merge, publish,
|
|
10
|
+
* distribute, sublicense, and/or sell copies of the Software, and to
|
|
11
|
+
* permit persons to whom the Software is furnished to do so, subject to
|
|
12
|
+
* the following conditions:
|
|
13
|
+
*
|
|
14
|
+
* The above copyright notice and this permission notice shall be
|
|
15
|
+
* included in all copies or substantial portions of the Software.
|
|
16
|
+
*
|
|
17
|
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
18
|
+
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
19
|
+
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
20
|
+
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
21
|
+
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
22
|
+
* OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
23
|
+
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
24
|
+
*/
|
|
25
|
+
#ifndef NGTCP2_RTB_TEST_H
|
|
26
|
+
#define NGTCP2_RTB_TEST_H
|
|
27
|
+
|
|
28
|
+
#ifdef HAVE_CONFIG_H
|
|
29
|
+
# include <config.h>
|
|
30
|
+
#endif /* HAVE_CONFIG_H */
|
|
31
|
+
|
|
32
|
+
void test_ngtcp2_rtb_add(void);
|
|
33
|
+
void test_ngtcp2_rtb_recv_ack(void);
|
|
34
|
+
void test_ngtcp2_rtb_lost_pkt_ts(void);
|
|
35
|
+
void test_ngtcp2_rtb_remove_expired_lost_pkt(void);
|
|
36
|
+
void test_ngtcp2_rtb_remove_excessive_lost_pkt(void);
|
|
37
|
+
|
|
38
|
+
#endif /* NGTCP2_RTB_TEST_H */
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* ngtcp2
|
|
3
|
+
*
|
|
4
|
+
* Copyright (c) 2020 ngtcp2 contributors
|
|
5
|
+
*
|
|
6
|
+
* Permission is hereby granted, free of charge, to any person obtaining
|
|
7
|
+
* a copy of this software and associated documentation files (the
|
|
8
|
+
* "Software"), to deal in the Software without restriction, including
|
|
9
|
+
* without limitation the rights to use, copy, modify, merge, publish,
|
|
10
|
+
* distribute, sublicense, and/or sell copies of the Software, and to
|
|
11
|
+
* permit persons to whom the Software is furnished to do so, subject to
|
|
12
|
+
* the following conditions:
|
|
13
|
+
*
|
|
14
|
+
* The above copyright notice and this permission notice shall be
|
|
15
|
+
* included in all copies or substantial portions of the Software.
|
|
16
|
+
*
|
|
17
|
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
18
|
+
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
19
|
+
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
20
|
+
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
21
|
+
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
22
|
+
* OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
23
|
+
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
24
|
+
*/
|
|
25
|
+
#include "ngtcp2_str_test.h"
|
|
26
|
+
|
|
27
|
+
#include <CUnit/CUnit.h>
|
|
28
|
+
|
|
29
|
+
#include "ngtcp2_str.h"
|
|
30
|
+
#include "ngtcp2_test_helper.h"
|
|
31
|
+
|
|
32
|
+
void test_ngtcp2_encode_ipv4(void) {
|
|
33
|
+
uint8_t buf[16];
|
|
34
|
+
|
|
35
|
+
CU_ASSERT(0 == strcmp("192.168.0.1",
|
|
36
|
+
(const char *)ngtcp2_encode_ipv4(
|
|
37
|
+
buf, (const uint8_t *)"\xc0\xa8\x00\x01")));
|
|
38
|
+
CU_ASSERT(0 ==
|
|
39
|
+
strcmp("127.0.0.1", (const char *)ngtcp2_encode_ipv4(
|
|
40
|
+
buf, (const uint8_t *)"\x7f\x00\x00\x01")));
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
void test_ngtcp2_encode_ipv6(void) {
|
|
44
|
+
uint8_t buf[32 + 7 + 1];
|
|
45
|
+
|
|
46
|
+
CU_ASSERT(
|
|
47
|
+
0 ==
|
|
48
|
+
strcmp("2001:db8::2:1",
|
|
49
|
+
(const char *)ngtcp2_encode_ipv6(
|
|
50
|
+
buf, (const uint8_t *)"\x20\x01\x0d\xb8\x00\x00\x00\x00\x00"
|
|
51
|
+
"\x00\x00\x00\x00\x02\x00\x01")));
|
|
52
|
+
CU_ASSERT(
|
|
53
|
+
0 ==
|
|
54
|
+
strcmp("2001:db8:0:1:1:1:1:1",
|
|
55
|
+
(const char *)ngtcp2_encode_ipv6(
|
|
56
|
+
buf, (const uint8_t *)"\x20\x01\x0d\xb8\x00\x00\x00\x01\x00"
|
|
57
|
+
"\x01\x00\x01\x00\x01\x00\x01")));
|
|
58
|
+
CU_ASSERT(
|
|
59
|
+
0 ==
|
|
60
|
+
strcmp("2001:db8::1:0:0:1",
|
|
61
|
+
(const char *)ngtcp2_encode_ipv6(
|
|
62
|
+
buf, (const uint8_t *)"\x20\x01\x0d\xb8\x00\x00\x00\x00\x00"
|
|
63
|
+
"\x01\x00\x00\x00\x00\x00\x01")));
|
|
64
|
+
CU_ASSERT(
|
|
65
|
+
0 ==
|
|
66
|
+
strcmp("2001:db8::8:800:200c:417a",
|
|
67
|
+
(const char *)ngtcp2_encode_ipv6(
|
|
68
|
+
buf, (const uint8_t *)"\x20\x01\x0d\xb8\x00\x00\x00\x00\x00"
|
|
69
|
+
"\x08\x08\x00\x20\x0C\x41\x7a")));
|
|
70
|
+
CU_ASSERT(
|
|
71
|
+
0 ==
|
|
72
|
+
strcmp("ff01::101",
|
|
73
|
+
(const char *)ngtcp2_encode_ipv6(
|
|
74
|
+
buf, (const uint8_t *)"\xff\x01\x00\x00\x00\x00\x00\x00\x00"
|
|
75
|
+
"\x00\x00\x00\x00\x00\x01\x01")));
|
|
76
|
+
CU_ASSERT(
|
|
77
|
+
0 ==
|
|
78
|
+
strcmp("::1",
|
|
79
|
+
(const char *)ngtcp2_encode_ipv6(
|
|
80
|
+
buf, (const uint8_t *)"\x00\x00\x00\x00\x00\x00\x00\x00\x00"
|
|
81
|
+
"\x00\x00\x00\x00\x00\x00\x01")));
|
|
82
|
+
CU_ASSERT(
|
|
83
|
+
0 ==
|
|
84
|
+
strcmp("::",
|
|
85
|
+
(const char *)ngtcp2_encode_ipv6(
|
|
86
|
+
buf, (const uint8_t *)"\x00\x00\x00\x00\x00\x00\x00\x00\x00"
|
|
87
|
+
"\x00\x00\x00\x00\x00\x00\x00")));
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
void test_ngtcp2_get_bytes(void) {
|
|
91
|
+
const uint8_t src[] = {'f', 'o', 'o', 'b', 'a', 'r'};
|
|
92
|
+
uint8_t dest[256];
|
|
93
|
+
|
|
94
|
+
CU_ASSERT(src + sizeof(src) == ngtcp2_get_bytes(dest, src, sizeof(src)));
|
|
95
|
+
CU_ASSERT(0 == memcmp(src, dest, sizeof(src)));
|
|
96
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* ngtcp2
|
|
3
|
+
*
|
|
4
|
+
* Copyright (c) 2020 ngtcp2 contributors
|
|
5
|
+
*
|
|
6
|
+
* Permission is hereby granted, free of charge, to any person obtaining
|
|
7
|
+
* a copy of this software and associated documentation files (the
|
|
8
|
+
* "Software"), to deal in the Software without restriction, including
|
|
9
|
+
* without limitation the rights to use, copy, modify, merge, publish,
|
|
10
|
+
* distribute, sublicense, and/or sell copies of the Software, and to
|
|
11
|
+
* permit persons to whom the Software is furnished to do so, subject to
|
|
12
|
+
* the following conditions:
|
|
13
|
+
*
|
|
14
|
+
* The above copyright notice and this permission notice shall be
|
|
15
|
+
* included in all copies or substantial portions of the Software.
|
|
16
|
+
*
|
|
17
|
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
18
|
+
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
19
|
+
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
20
|
+
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
21
|
+
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
22
|
+
* OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
23
|
+
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
24
|
+
*/
|
|
25
|
+
#ifndef NGTCP2_STR_TEST_H
|
|
26
|
+
#define NGTCP2_STR_TEST_H
|
|
27
|
+
|
|
28
|
+
#ifdef HAVE_CONFIG_H
|
|
29
|
+
# include <config.h>
|
|
30
|
+
#endif /* HAVE_CONFIG_H */
|
|
31
|
+
|
|
32
|
+
void test_ngtcp2_encode_ipv4(void);
|
|
33
|
+
void test_ngtcp2_encode_ipv6(void);
|
|
34
|
+
void test_ngtcp2_get_bytes(void);
|
|
35
|
+
|
|
36
|
+
#endif /* NGTCP2_STR_TEST_H */
|