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.
Files changed (343) hide show
  1. checksums.yaml +7 -0
  2. checksums.yaml.gz.sig +0 -0
  3. data/ext/ngtcp2/AUTHORS +44 -0
  4. data/ext/ngtcp2/CMakeLists.txt +431 -0
  5. data/ext/ngtcp2/CMakeOptions.txt +17 -0
  6. data/ext/ngtcp2/COPYING +22 -0
  7. data/ext/ngtcp2/ChangeLog +0 -0
  8. data/ext/ngtcp2/Makefile.am +60 -0
  9. data/ext/ngtcp2/NEWS +0 -0
  10. data/ext/ngtcp2/README +1 -0
  11. data/ext/ngtcp2/README.rst +258 -0
  12. data/ext/ngtcp2/ci/build_boringssl.sh +10 -0
  13. data/ext/ngtcp2/ci/build_nghttp3.sh +9 -0
  14. data/ext/ngtcp2/ci/build_openssl1.sh +8 -0
  15. data/ext/ngtcp2/ci/build_openssl1_cross.sh +9 -0
  16. data/ext/ngtcp2/ci/build_openssl3.sh +8 -0
  17. data/ext/ngtcp2/ci/build_picotls.sh +26 -0
  18. data/ext/ngtcp2/ci/build_wolfssl.sh +9 -0
  19. data/ext/ngtcp2/ci/gen-certificate.sh +8 -0
  20. data/ext/ngtcp2/cmake/ExtractValidFlags.cmake +31 -0
  21. data/ext/ngtcp2/cmake/FindCUnit.cmake +40 -0
  22. data/ext/ngtcp2/cmake/FindJemalloc.cmake +40 -0
  23. data/ext/ngtcp2/cmake/FindLibev.cmake +38 -0
  24. data/ext/ngtcp2/cmake/FindLibnghttp3.cmake +41 -0
  25. data/ext/ngtcp2/cmake/Findwolfssl.cmake +41 -0
  26. data/ext/ngtcp2/cmake/Version.cmake +11 -0
  27. data/ext/ngtcp2/cmakeconfig.h.in +36 -0
  28. data/ext/ngtcp2/configure.ac +755 -0
  29. data/ext/ngtcp2/crypto/CMakeLists.txt +56 -0
  30. data/ext/ngtcp2/crypto/Makefile.am +49 -0
  31. data/ext/ngtcp2/crypto/boringssl/CMakeLists.txt +64 -0
  32. data/ext/ngtcp2/crypto/boringssl/Makefile.am +39 -0
  33. data/ext/ngtcp2/crypto/boringssl/boringssl.c +630 -0
  34. data/ext/ngtcp2/crypto/boringssl/libngtcp2_crypto_boringssl.pc.in +33 -0
  35. data/ext/ngtcp2/crypto/gnutls/CMakeLists.txt +86 -0
  36. data/ext/ngtcp2/crypto/gnutls/Makefile.am +43 -0
  37. data/ext/ngtcp2/crypto/gnutls/gnutls.c +644 -0
  38. data/ext/ngtcp2/crypto/gnutls/libngtcp2_crypto_gnutls.pc.in +33 -0
  39. data/ext/ngtcp2/crypto/includes/CMakeLists.txt +56 -0
  40. data/ext/ngtcp2/crypto/includes/Makefile.am +45 -0
  41. data/ext/ngtcp2/crypto/includes/ngtcp2/ngtcp2_crypto.h +893 -0
  42. data/ext/ngtcp2/crypto/includes/ngtcp2/ngtcp2_crypto_boringssl.h +104 -0
  43. data/ext/ngtcp2/crypto/includes/ngtcp2/ngtcp2_crypto_gnutls.h +107 -0
  44. data/ext/ngtcp2/crypto/includes/ngtcp2/ngtcp2_crypto_openssl.h +132 -0
  45. data/ext/ngtcp2/crypto/includes/ngtcp2/ngtcp2_crypto_picotls.h +246 -0
  46. data/ext/ngtcp2/crypto/includes/ngtcp2/ngtcp2_crypto_wolfssl.h +106 -0
  47. data/ext/ngtcp2/crypto/openssl/CMakeLists.txt +86 -0
  48. data/ext/ngtcp2/crypto/openssl/Makefile.am +43 -0
  49. data/ext/ngtcp2/crypto/openssl/libngtcp2_crypto_openssl.pc.in +33 -0
  50. data/ext/ngtcp2/crypto/openssl/openssl.c +807 -0
  51. data/ext/ngtcp2/crypto/picotls/CMakeLists.txt +65 -0
  52. data/ext/ngtcp2/crypto/picotls/Makefile.am +39 -0
  53. data/ext/ngtcp2/crypto/picotls/libngtcp2_crypto_picotls.pc.in +33 -0
  54. data/ext/ngtcp2/crypto/picotls/picotls.c +707 -0
  55. data/ext/ngtcp2/crypto/shared.c +1431 -0
  56. data/ext/ngtcp2/crypto/shared.h +350 -0
  57. data/ext/ngtcp2/crypto/wolfssl/CMakeLists.txt +84 -0
  58. data/ext/ngtcp2/crypto/wolfssl/Makefile.am +43 -0
  59. data/ext/ngtcp2/crypto/wolfssl/libngtcp2_crypto_wolfssl.pc.in +33 -0
  60. data/ext/ngtcp2/crypto/wolfssl/wolfssl.c +534 -0
  61. data/ext/ngtcp2/doc/Makefile.am +65 -0
  62. data/ext/ngtcp2/doc/make.bat +35 -0
  63. data/ext/ngtcp2/doc/mkapiref.py +356 -0
  64. data/ext/ngtcp2/doc/source/conf.py.in +94 -0
  65. data/ext/ngtcp2/doc/source/index.rst +22 -0
  66. data/ext/ngtcp2/doc/source/programmers-guide.rst +476 -0
  67. data/ext/ngtcp2/docker/Dockerfile +39 -0
  68. data/ext/ngtcp2/examples/CMakeLists.txt +361 -0
  69. data/ext/ngtcp2/examples/Makefile.am +228 -0
  70. data/ext/ngtcp2/examples/client.cc +3049 -0
  71. data/ext/ngtcp2/examples/client.h +192 -0
  72. data/ext/ngtcp2/examples/client_base.cc +202 -0
  73. data/ext/ngtcp2/examples/client_base.h +213 -0
  74. data/ext/ngtcp2/examples/debug.cc +298 -0
  75. data/ext/ngtcp2/examples/debug.h +124 -0
  76. data/ext/ngtcp2/examples/examplestest.cc +84 -0
  77. data/ext/ngtcp2/examples/gtlssimpleclient.c +720 -0
  78. data/ext/ngtcp2/examples/h09client.cc +2601 -0
  79. data/ext/ngtcp2/examples/h09client.h +196 -0
  80. data/ext/ngtcp2/examples/h09server.cc +3024 -0
  81. data/ext/ngtcp2/examples/h09server.h +237 -0
  82. data/ext/ngtcp2/examples/http.cc +138 -0
  83. data/ext/ngtcp2/examples/http.h +44 -0
  84. data/ext/ngtcp2/examples/network.h +80 -0
  85. data/ext/ngtcp2/examples/server.cc +3731 -0
  86. data/ext/ngtcp2/examples/server.h +256 -0
  87. data/ext/ngtcp2/examples/server_base.cc +58 -0
  88. data/ext/ngtcp2/examples/server_base.h +195 -0
  89. data/ext/ngtcp2/examples/shared.cc +385 -0
  90. data/ext/ngtcp2/examples/shared.h +96 -0
  91. data/ext/ngtcp2/examples/simpleclient.c +683 -0
  92. data/ext/ngtcp2/examples/template.h +71 -0
  93. data/ext/ngtcp2/examples/tests/README.rst +60 -0
  94. data/ext/ngtcp2/examples/tests/__init__.py +0 -0
  95. data/ext/ngtcp2/examples/tests/config.ini.in +32 -0
  96. data/ext/ngtcp2/examples/tests/conftest.py +28 -0
  97. data/ext/ngtcp2/examples/tests/ngtcp2test/__init__.py +6 -0
  98. data/ext/ngtcp2/examples/tests/ngtcp2test/certs.py +476 -0
  99. data/ext/ngtcp2/examples/tests/ngtcp2test/client.py +187 -0
  100. data/ext/ngtcp2/examples/tests/ngtcp2test/env.py +191 -0
  101. data/ext/ngtcp2/examples/tests/ngtcp2test/log.py +101 -0
  102. data/ext/ngtcp2/examples/tests/ngtcp2test/server.py +137 -0
  103. data/ext/ngtcp2/examples/tests/ngtcp2test/tls.py +983 -0
  104. data/ext/ngtcp2/examples/tests/test_01_handshake.py +30 -0
  105. data/ext/ngtcp2/examples/tests/test_02_resume.py +46 -0
  106. data/ext/ngtcp2/examples/tests/test_03_earlydata.py +56 -0
  107. data/ext/ngtcp2/examples/tests/test_04_clientcert.py +57 -0
  108. data/ext/ngtcp2/examples/tests/test_05_ciphers.py +46 -0
  109. data/ext/ngtcp2/examples/tls_client_context.h +52 -0
  110. data/ext/ngtcp2/examples/tls_client_context_boringssl.cc +126 -0
  111. data/ext/ngtcp2/examples/tls_client_context_boringssl.h +49 -0
  112. data/ext/ngtcp2/examples/tls_client_context_gnutls.cc +74 -0
  113. data/ext/ngtcp2/examples/tls_client_context_gnutls.h +50 -0
  114. data/ext/ngtcp2/examples/tls_client_context_openssl.cc +137 -0
  115. data/ext/ngtcp2/examples/tls_client_context_openssl.h +49 -0
  116. data/ext/ngtcp2/examples/tls_client_context_picotls.cc +158 -0
  117. data/ext/ngtcp2/examples/tls_client_context_picotls.h +53 -0
  118. data/ext/ngtcp2/examples/tls_client_context_wolfssl.cc +177 -0
  119. data/ext/ngtcp2/examples/tls_client_context_wolfssl.h +51 -0
  120. data/ext/ngtcp2/examples/tls_client_session.h +52 -0
  121. data/ext/ngtcp2/examples/tls_client_session_boringssl.cc +110 -0
  122. data/ext/ngtcp2/examples/tls_client_session_boringssl.h +52 -0
  123. data/ext/ngtcp2/examples/tls_client_session_gnutls.cc +190 -0
  124. data/ext/ngtcp2/examples/tls_client_session_gnutls.h +52 -0
  125. data/ext/ngtcp2/examples/tls_client_session_openssl.cc +113 -0
  126. data/ext/ngtcp2/examples/tls_client_session_openssl.h +52 -0
  127. data/ext/ngtcp2/examples/tls_client_session_picotls.cc +147 -0
  128. data/ext/ngtcp2/examples/tls_client_session_picotls.h +52 -0
  129. data/ext/ngtcp2/examples/tls_client_session_wolfssl.cc +160 -0
  130. data/ext/ngtcp2/examples/tls_client_session_wolfssl.h +52 -0
  131. data/ext/ngtcp2/examples/tls_server_context.h +52 -0
  132. data/ext/ngtcp2/examples/tls_server_context_boringssl.cc +257 -0
  133. data/ext/ngtcp2/examples/tls_server_context_boringssl.h +54 -0
  134. data/ext/ngtcp2/examples/tls_server_context_gnutls.cc +99 -0
  135. data/ext/ngtcp2/examples/tls_server_context_gnutls.h +59 -0
  136. data/ext/ngtcp2/examples/tls_server_context_openssl.cc +338 -0
  137. data/ext/ngtcp2/examples/tls_server_context_openssl.h +54 -0
  138. data/ext/ngtcp2/examples/tls_server_context_picotls.cc +321 -0
  139. data/ext/ngtcp2/examples/tls_server_context_picotls.h +58 -0
  140. data/ext/ngtcp2/examples/tls_server_context_wolfssl.cc +284 -0
  141. data/ext/ngtcp2/examples/tls_server_context_wolfssl.h +55 -0
  142. data/ext/ngtcp2/examples/tls_server_session.h +52 -0
  143. data/ext/ngtcp2/examples/tls_server_session_boringssl.cc +84 -0
  144. data/ext/ngtcp2/examples/tls_server_session_boringssl.h +47 -0
  145. data/ext/ngtcp2/examples/tls_server_session_gnutls.cc +155 -0
  146. data/ext/ngtcp2/examples/tls_server_session_gnutls.h +46 -0
  147. data/ext/ngtcp2/examples/tls_server_session_openssl.cc +54 -0
  148. data/ext/ngtcp2/examples/tls_server_session_openssl.h +47 -0
  149. data/ext/ngtcp2/examples/tls_server_session_picotls.cc +70 -0
  150. data/ext/ngtcp2/examples/tls_server_session_picotls.h +47 -0
  151. data/ext/ngtcp2/examples/tls_server_session_wolfssl.cc +55 -0
  152. data/ext/ngtcp2/examples/tls_server_session_wolfssl.h +47 -0
  153. data/ext/ngtcp2/examples/tls_session_base_gnutls.cc +87 -0
  154. data/ext/ngtcp2/examples/tls_session_base_gnutls.h +51 -0
  155. data/ext/ngtcp2/examples/tls_session_base_openssl.cc +54 -0
  156. data/ext/ngtcp2/examples/tls_session_base_openssl.h +52 -0
  157. data/ext/ngtcp2/examples/tls_session_base_picotls.cc +56 -0
  158. data/ext/ngtcp2/examples/tls_session_base_picotls.h +54 -0
  159. data/ext/ngtcp2/examples/tls_session_base_wolfssl.cc +54 -0
  160. data/ext/ngtcp2/examples/tls_session_base_wolfssl.h +54 -0
  161. data/ext/ngtcp2/examples/tls_shared_picotls.cc +59 -0
  162. data/ext/ngtcp2/examples/tls_shared_picotls.h +36 -0
  163. data/ext/ngtcp2/examples/util.cc +646 -0
  164. data/ext/ngtcp2/examples/util.h +361 -0
  165. data/ext/ngtcp2/examples/util_gnutls.cc +136 -0
  166. data/ext/ngtcp2/examples/util_openssl.cc +131 -0
  167. data/ext/ngtcp2/examples/util_test.cc +237 -0
  168. data/ext/ngtcp2/examples/util_test.h +45 -0
  169. data/ext/ngtcp2/examples/util_wolfssl.cc +130 -0
  170. data/ext/ngtcp2/fuzz/corpus/decode_frame/ack +0 -0
  171. data/ext/ngtcp2/fuzz/corpus/decode_frame/ack_ecn +0 -0
  172. data/ext/ngtcp2/fuzz/corpus/decode_frame/connection_close +0 -0
  173. data/ext/ngtcp2/fuzz/corpus/decode_frame/crypto +1 -0
  174. data/ext/ngtcp2/fuzz/corpus/decode_frame/data_blocked +1 -0
  175. data/ext/ngtcp2/fuzz/corpus/decode_frame/datagram +1 -0
  176. data/ext/ngtcp2/fuzz/corpus/decode_frame/datagram_len +1 -0
  177. data/ext/ngtcp2/fuzz/corpus/decode_frame/max_data +1 -0
  178. data/ext/ngtcp2/fuzz/corpus/decode_frame/max_stream_data +0 -0
  179. data/ext/ngtcp2/fuzz/corpus/decode_frame/max_streams +0 -0
  180. data/ext/ngtcp2/fuzz/corpus/decode_frame/new_connection_id +1 -0
  181. data/ext/ngtcp2/fuzz/corpus/decode_frame/new_token +1 -0
  182. data/ext/ngtcp2/fuzz/corpus/decode_frame/path_challenge +1 -0
  183. data/ext/ngtcp2/fuzz/corpus/decode_frame/path_response +1 -0
  184. data/ext/ngtcp2/fuzz/corpus/decode_frame/reset_stream +0 -0
  185. data/ext/ngtcp2/fuzz/corpus/decode_frame/retire_connection_id +1 -0
  186. data/ext/ngtcp2/fuzz/corpus/decode_frame/stop_sending +0 -0
  187. data/ext/ngtcp2/fuzz/corpus/decode_frame/stream +0 -0
  188. data/ext/ngtcp2/fuzz/corpus/decode_frame/stream_data_blocked +0 -0
  189. data/ext/ngtcp2/fuzz/corpus/decode_frame/stream_len +0 -0
  190. data/ext/ngtcp2/fuzz/corpus/decode_frame/streams_blocked +0 -0
  191. data/ext/ngtcp2/fuzz/corpus/ksl/random +0 -0
  192. data/ext/ngtcp2/fuzz/decode_frame.cc +25 -0
  193. data/ext/ngtcp2/fuzz/ksl.cc +77 -0
  194. data/ext/ngtcp2/interop/Dockerfile +39 -0
  195. data/ext/ngtcp2/interop/run_endpoint.sh +93 -0
  196. data/ext/ngtcp2/lib/CMakeLists.txt +110 -0
  197. data/ext/ngtcp2/lib/Makefile.am +122 -0
  198. data/ext/ngtcp2/lib/includes/CMakeLists.txt +4 -0
  199. data/ext/ngtcp2/lib/includes/Makefile.am +25 -0
  200. data/ext/ngtcp2/lib/includes/ngtcp2/ngtcp2.h +5843 -0
  201. data/ext/ngtcp2/lib/includes/ngtcp2/version.h.in +51 -0
  202. data/ext/ngtcp2/lib/libngtcp2.pc.in +33 -0
  203. data/ext/ngtcp2/lib/ngtcp2_acktr.c +335 -0
  204. data/ext/ngtcp2/lib/ngtcp2_acktr.h +221 -0
  205. data/ext/ngtcp2/lib/ngtcp2_addr.c +117 -0
  206. data/ext/ngtcp2/lib/ngtcp2_addr.h +69 -0
  207. data/ext/ngtcp2/lib/ngtcp2_balloc.c +90 -0
  208. data/ext/ngtcp2/lib/ngtcp2_balloc.h +91 -0
  209. data/ext/ngtcp2/lib/ngtcp2_bbr.c +693 -0
  210. data/ext/ngtcp2/lib/ngtcp2_bbr.h +157 -0
  211. data/ext/ngtcp2/lib/ngtcp2_bbr2.c +1490 -0
  212. data/ext/ngtcp2/lib/ngtcp2_bbr2.h +149 -0
  213. data/ext/ngtcp2/lib/ngtcp2_buf.c +56 -0
  214. data/ext/ngtcp2/lib/ngtcp2_buf.h +108 -0
  215. data/ext/ngtcp2/lib/ngtcp2_cc.c +616 -0
  216. data/ext/ngtcp2/lib/ngtcp2_cc.h +422 -0
  217. data/ext/ngtcp2/lib/ngtcp2_cid.c +147 -0
  218. data/ext/ngtcp2/lib/ngtcp2_cid.h +175 -0
  219. data/ext/ngtcp2/lib/ngtcp2_conn.c +13731 -0
  220. data/ext/ngtcp2/lib/ngtcp2_conn.h +1119 -0
  221. data/ext/ngtcp2/lib/ngtcp2_conn_stat.h +131 -0
  222. data/ext/ngtcp2/lib/ngtcp2_conv.c +291 -0
  223. data/ext/ngtcp2/lib/ngtcp2_conv.h +208 -0
  224. data/ext/ngtcp2/lib/ngtcp2_crypto.c +895 -0
  225. data/ext/ngtcp2/lib/ngtcp2_crypto.h +148 -0
  226. data/ext/ngtcp2/lib/ngtcp2_err.c +154 -0
  227. data/ext/ngtcp2/lib/ngtcp2_err.h +34 -0
  228. data/ext/ngtcp2/lib/ngtcp2_gaptr.c +167 -0
  229. data/ext/ngtcp2/lib/ngtcp2_gaptr.h +98 -0
  230. data/ext/ngtcp2/lib/ngtcp2_idtr.c +79 -0
  231. data/ext/ngtcp2/lib/ngtcp2_idtr.h +89 -0
  232. data/ext/ngtcp2/lib/ngtcp2_ksl.c +819 -0
  233. data/ext/ngtcp2/lib/ngtcp2_ksl.h +345 -0
  234. data/ext/ngtcp2/lib/ngtcp2_log.c +822 -0
  235. data/ext/ngtcp2/lib/ngtcp2_log.h +123 -0
  236. data/ext/ngtcp2/lib/ngtcp2_macro.h +58 -0
  237. data/ext/ngtcp2/lib/ngtcp2_map.c +336 -0
  238. data/ext/ngtcp2/lib/ngtcp2_map.h +136 -0
  239. data/ext/ngtcp2/lib/ngtcp2_mem.c +113 -0
  240. data/ext/ngtcp2/lib/ngtcp2_mem.h +72 -0
  241. data/ext/ngtcp2/lib/ngtcp2_net.h +136 -0
  242. data/ext/ngtcp2/lib/ngtcp2_objalloc.c +40 -0
  243. data/ext/ngtcp2/lib/ngtcp2_objalloc.h +140 -0
  244. data/ext/ngtcp2/lib/ngtcp2_opl.c +46 -0
  245. data/ext/ngtcp2/lib/ngtcp2_opl.h +65 -0
  246. data/ext/ngtcp2/lib/ngtcp2_path.c +77 -0
  247. data/ext/ngtcp2/lib/ngtcp2_path.h +49 -0
  248. data/ext/ngtcp2/lib/ngtcp2_pkt.c +2527 -0
  249. data/ext/ngtcp2/lib/ngtcp2_pkt.h +1235 -0
  250. data/ext/ngtcp2/lib/ngtcp2_pmtud.c +160 -0
  251. data/ext/ngtcp2/lib/ngtcp2_pmtud.h +123 -0
  252. data/ext/ngtcp2/lib/ngtcp2_ppe.c +230 -0
  253. data/ext/ngtcp2/lib/ngtcp2_ppe.h +153 -0
  254. data/ext/ngtcp2/lib/ngtcp2_pq.c +164 -0
  255. data/ext/ngtcp2/lib/ngtcp2_pq.h +126 -0
  256. data/ext/ngtcp2/lib/ngtcp2_pv.c +172 -0
  257. data/ext/ngtcp2/lib/ngtcp2_pv.h +194 -0
  258. data/ext/ngtcp2/lib/ngtcp2_qlog.c +1219 -0
  259. data/ext/ngtcp2/lib/ngtcp2_qlog.h +161 -0
  260. data/ext/ngtcp2/lib/ngtcp2_range.c +61 -0
  261. data/ext/ngtcp2/lib/ngtcp2_range.h +80 -0
  262. data/ext/ngtcp2/lib/ngtcp2_rcvry.h +40 -0
  263. data/ext/ngtcp2/lib/ngtcp2_ringbuf.c +121 -0
  264. data/ext/ngtcp2/lib/ngtcp2_ringbuf.h +132 -0
  265. data/ext/ngtcp2/lib/ngtcp2_rob.c +319 -0
  266. data/ext/ngtcp2/lib/ngtcp2_rob.h +197 -0
  267. data/ext/ngtcp2/lib/ngtcp2_rst.c +138 -0
  268. data/ext/ngtcp2/lib/ngtcp2_rst.h +86 -0
  269. data/ext/ngtcp2/lib/ngtcp2_rtb.c +1676 -0
  270. data/ext/ngtcp2/lib/ngtcp2_rtb.h +468 -0
  271. data/ext/ngtcp2/lib/ngtcp2_str.c +233 -0
  272. data/ext/ngtcp2/lib/ngtcp2_str.h +94 -0
  273. data/ext/ngtcp2/lib/ngtcp2_strm.c +698 -0
  274. data/ext/ngtcp2/lib/ngtcp2_strm.h +310 -0
  275. data/ext/ngtcp2/lib/ngtcp2_unreachable.c +71 -0
  276. data/ext/ngtcp2/lib/ngtcp2_unreachable.h +46 -0
  277. data/ext/ngtcp2/lib/ngtcp2_vec.c +243 -0
  278. data/ext/ngtcp2/lib/ngtcp2_vec.h +120 -0
  279. data/ext/ngtcp2/lib/ngtcp2_version.c +39 -0
  280. data/ext/ngtcp2/lib/ngtcp2_window_filter.c +99 -0
  281. data/ext/ngtcp2/lib/ngtcp2_window_filter.h +65 -0
  282. data/ext/ngtcp2/m4/ax_check_compile_flag.m4 +74 -0
  283. data/ext/ngtcp2/m4/ax_cxx_compile_stdcxx.m4 +1009 -0
  284. data/ext/ngtcp2/tests/CMakeLists.txt +68 -0
  285. data/ext/ngtcp2/tests/Makefile.am +94 -0
  286. data/ext/ngtcp2/tests/main.c +358 -0
  287. data/ext/ngtcp2/tests/ngtcp2_acktr_test.c +367 -0
  288. data/ext/ngtcp2/tests/ngtcp2_acktr_test.h +37 -0
  289. data/ext/ngtcp2/tests/ngtcp2_conn_test.c +9821 -0
  290. data/ext/ngtcp2/tests/ngtcp2_conn_test.h +104 -0
  291. data/ext/ngtcp2/tests/ngtcp2_conv_test.c +430 -0
  292. data/ext/ngtcp2/tests/ngtcp2_conv_test.h +46 -0
  293. data/ext/ngtcp2/tests/ngtcp2_crypto_test.c +667 -0
  294. data/ext/ngtcp2/tests/ngtcp2_crypto_test.h +35 -0
  295. data/ext/ngtcp2/tests/ngtcp2_gaptr_test.c +127 -0
  296. data/ext/ngtcp2/tests/ngtcp2_gaptr_test.h +36 -0
  297. data/ext/ngtcp2/tests/ngtcp2_idtr_test.c +79 -0
  298. data/ext/ngtcp2/tests/ngtcp2_idtr_test.h +34 -0
  299. data/ext/ngtcp2/tests/ngtcp2_ksl_test.c +502 -0
  300. data/ext/ngtcp2/tests/ngtcp2_ksl_test.h +39 -0
  301. data/ext/ngtcp2/tests/ngtcp2_map_test.c +206 -0
  302. data/ext/ngtcp2/tests/ngtcp2_map_test.h +38 -0
  303. data/ext/ngtcp2/tests/ngtcp2_pkt_test.c +1645 -0
  304. data/ext/ngtcp2/tests/ngtcp2_pkt_test.h +68 -0
  305. data/ext/ngtcp2/tests/ngtcp2_pmtud_test.c +153 -0
  306. data/ext/ngtcp2/tests/ngtcp2_pmtud_test.h +34 -0
  307. data/ext/ngtcp2/tests/ngtcp2_pv_test.c +129 -0
  308. data/ext/ngtcp2/tests/ngtcp2_pv_test.h +35 -0
  309. data/ext/ngtcp2/tests/ngtcp2_range_test.c +105 -0
  310. data/ext/ngtcp2/tests/ngtcp2_range_test.h +36 -0
  311. data/ext/ngtcp2/tests/ngtcp2_ringbuf_test.c +91 -0
  312. data/ext/ngtcp2/tests/ngtcp2_ringbuf_test.h +35 -0
  313. data/ext/ngtcp2/tests/ngtcp2_rob_test.c +552 -0
  314. data/ext/ngtcp2/tests/ngtcp2_rob_test.h +37 -0
  315. data/ext/ngtcp2/tests/ngtcp2_rtb_test.c +470 -0
  316. data/ext/ngtcp2/tests/ngtcp2_rtb_test.h +38 -0
  317. data/ext/ngtcp2/tests/ngtcp2_str_test.c +96 -0
  318. data/ext/ngtcp2/tests/ngtcp2_str_test.h +36 -0
  319. data/ext/ngtcp2/tests/ngtcp2_strm_test.c +575 -0
  320. data/ext/ngtcp2/tests/ngtcp2_strm_test.h +36 -0
  321. data/ext/ngtcp2/tests/ngtcp2_test_helper.c +404 -0
  322. data/ext/ngtcp2/tests/ngtcp2_test_helper.h +191 -0
  323. data/ext/ngtcp2/tests/ngtcp2_vec_test.c +426 -0
  324. data/ext/ngtcp2/tests/ngtcp2_vec_test.h +36 -0
  325. data/ext/ngtcp2/third-party/CMakeLists.txt +34 -0
  326. data/ext/ngtcp2/third-party/Makefile.am +31 -0
  327. data/ext/ngtcp2/third-party/http-parser/AUTHORS +68 -0
  328. data/ext/ngtcp2/third-party/http-parser/LICENSE-MIT +23 -0
  329. data/ext/ngtcp2/third-party/http-parser/Makefile +157 -0
  330. data/ext/ngtcp2/third-party/http-parser/README.md +246 -0
  331. data/ext/ngtcp2/third-party/http-parser/bench.c +111 -0
  332. data/ext/ngtcp2/third-party/http-parser/contrib/parsertrace.c +160 -0
  333. data/ext/ngtcp2/third-party/http-parser/contrib/url_parser.c +47 -0
  334. data/ext/ngtcp2/third-party/http-parser/http_parser.c +2419 -0
  335. data/ext/ngtcp2/third-party/http-parser/http_parser.gyp +111 -0
  336. data/ext/ngtcp2/third-party/http-parser/http_parser.h +431 -0
  337. data/ext/ngtcp2/third-party/http-parser/test.c +4411 -0
  338. data/lib/protocol/quic/version.rb +10 -0
  339. data/lib/protocol/quic.rb +9 -0
  340. data/license.md +21 -0
  341. data.tar.gz.sig +1 -0
  342. metadata +424 -0
  343. metadata.gz.sig +1 -0
@@ -0,0 +1,256 @@
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 SERVER_H
26
+ #define SERVER_H
27
+
28
+ #ifdef HAVE_CONFIG_H
29
+ # include <config.h>
30
+ #endif // HAVE_CONFIG_H
31
+
32
+ #include <vector>
33
+ #include <unordered_map>
34
+ #include <string>
35
+ #include <deque>
36
+ #include <string_view>
37
+ #include <memory>
38
+
39
+ #include <ngtcp2/ngtcp2.h>
40
+ #include <ngtcp2/ngtcp2_crypto.h>
41
+ #include <nghttp3/nghttp3.h>
42
+
43
+ #include <ev.h>
44
+
45
+ #include "server_base.h"
46
+ #include "tls_server_context.h"
47
+ #include "network.h"
48
+ #include "shared.h"
49
+
50
+ using namespace ngtcp2;
51
+
52
+ struct HTTPHeader {
53
+ HTTPHeader(const std::string_view &name, const std::string_view &value)
54
+ : name(name), value(value) {}
55
+
56
+ std::string_view name;
57
+ std::string_view value;
58
+ };
59
+
60
+ class Handler;
61
+ struct FileEntry;
62
+
63
+ struct Stream {
64
+ Stream(int64_t stream_id, Handler *handler);
65
+
66
+ int start_response(nghttp3_conn *conn);
67
+ std::pair<FileEntry, int> open_file(const std::string &path);
68
+ void map_file(const FileEntry &fe);
69
+ int send_status_response(nghttp3_conn *conn, unsigned int status_code,
70
+ const std::vector<HTTPHeader> &extra_headers = {});
71
+ int send_redirect_response(nghttp3_conn *conn, unsigned int status_code,
72
+ const std::string_view &path);
73
+ int64_t find_dyn_length(const std::string_view &path);
74
+ void http_acked_stream_data(uint64_t datalen);
75
+
76
+ int64_t stream_id;
77
+ Handler *handler;
78
+ // uri is request uri/path.
79
+ std::string uri;
80
+ std::string method;
81
+ std::string authority;
82
+ std::string status_resp_body;
83
+ // data is a pointer to the memory which maps file denoted by fd.
84
+ uint8_t *data;
85
+ // datalen is the length of mapped file by data.
86
+ uint64_t datalen;
87
+ // dynresp is true if dynamic data response is enabled.
88
+ bool dynresp;
89
+ // dyndataleft is the number of dynamic data left to send.
90
+ uint64_t dyndataleft;
91
+ // dynbuflen is the number of bytes in-flight.
92
+ uint64_t dynbuflen;
93
+ };
94
+
95
+ class Server;
96
+
97
+ // Endpoint is a local endpoint.
98
+ struct Endpoint {
99
+ Address addr;
100
+ ev_io rev;
101
+ Server *server;
102
+ int fd;
103
+ // ecn is the last ECN bits set to fd.
104
+ unsigned int ecn;
105
+ };
106
+
107
+ class Handler : public HandlerBase {
108
+ public:
109
+ Handler(struct ev_loop *loop, Server *server);
110
+ ~Handler();
111
+
112
+ int init(const Endpoint &ep, const Address &local_addr, const sockaddr *sa,
113
+ socklen_t salen, const ngtcp2_cid *dcid, const ngtcp2_cid *scid,
114
+ const ngtcp2_cid *ocid, const uint8_t *token, size_t tokenlen,
115
+ uint32_t version, TLSServerContext &tls_ctx);
116
+
117
+ int on_read(const Endpoint &ep, const Address &local_addr, const sockaddr *sa,
118
+ socklen_t salen, const ngtcp2_pkt_info *pi, uint8_t *data,
119
+ size_t datalen);
120
+ int on_write();
121
+ int write_streams();
122
+ int feed_data(const Endpoint &ep, const Address &local_addr,
123
+ const sockaddr *sa, socklen_t salen, const ngtcp2_pkt_info *pi,
124
+ uint8_t *data, size_t datalen);
125
+ void update_timer();
126
+ int handle_expiry();
127
+ void signal_write();
128
+ int handshake_completed();
129
+
130
+ Server *server() const;
131
+ int recv_stream_data(uint32_t flags, int64_t stream_id, const uint8_t *data,
132
+ size_t datalen);
133
+ int acked_stream_data_offset(int64_t stream_id, uint64_t datalen);
134
+ uint32_t version() const;
135
+ void on_stream_open(int64_t stream_id);
136
+ int on_stream_close(int64_t stream_id, uint64_t app_error_code);
137
+ void start_draining_period();
138
+ int start_closing_period();
139
+ int handle_error();
140
+ int send_conn_close();
141
+
142
+ int update_key(uint8_t *rx_secret, uint8_t *tx_secret,
143
+ ngtcp2_crypto_aead_ctx *rx_aead_ctx, uint8_t *rx_iv,
144
+ ngtcp2_crypto_aead_ctx *tx_aead_ctx, uint8_t *tx_iv,
145
+ const uint8_t *current_rx_secret,
146
+ const uint8_t *current_tx_secret, size_t secretlen);
147
+
148
+ int setup_httpconn();
149
+ void http_consume(int64_t stream_id, size_t nconsumed);
150
+ void extend_max_remote_streams_bidi(uint64_t max_streams);
151
+ Stream *find_stream(int64_t stream_id);
152
+ void http_begin_request_headers(int64_t stream_id);
153
+ void http_recv_request_header(Stream *stream, int32_t token,
154
+ nghttp3_rcbuf *name, nghttp3_rcbuf *value);
155
+ int http_end_request_headers(Stream *stream);
156
+ int http_end_stream(Stream *stream);
157
+ int start_response(Stream *stream);
158
+ int on_stream_reset(int64_t stream_id);
159
+ int on_stream_stop_sending(int64_t stream_id);
160
+ int extend_max_stream_data(int64_t stream_id, uint64_t max_data);
161
+ void shutdown_read(int64_t stream_id, int app_error_code);
162
+ void http_acked_stream_data(Stream *stream, uint64_t datalen);
163
+ void http_stream_close(int64_t stream_id, uint64_t app_error_code);
164
+ int http_stop_sending(int64_t stream_id, uint64_t app_error_code);
165
+ int http_reset_stream(int64_t stream_id, uint64_t app_error_code);
166
+
167
+ void write_qlog(const void *data, size_t datalen);
168
+
169
+ void on_send_blocked(Endpoint &ep, const ngtcp2_addr &local_addr,
170
+ const ngtcp2_addr &remote_addr, unsigned int ecn,
171
+ const uint8_t *data, size_t datalen, size_t gso_size);
172
+ void start_wev_endpoint(const Endpoint &ep);
173
+ int send_blocked_packet();
174
+
175
+ private:
176
+ struct ev_loop *loop_;
177
+ Server *server_;
178
+ ev_io wev_;
179
+ ev_timer timer_;
180
+ FILE *qlog_;
181
+ ngtcp2_cid scid_;
182
+ nghttp3_conn *httpconn_;
183
+ std::unordered_map<int64_t, std::unique_ptr<Stream>> streams_;
184
+ // conn_closebuf_ contains a packet which contains CONNECTION_CLOSE.
185
+ // This packet is repeatedly sent as a response to the incoming
186
+ // packet in draining period.
187
+ std::unique_ptr<Buffer> conn_closebuf_;
188
+ // nkey_update_ is the number of key update occurred.
189
+ size_t nkey_update_;
190
+ bool no_gso_;
191
+
192
+ struct {
193
+ bool send_blocked;
194
+ size_t num_blocked;
195
+ size_t num_blocked_sent;
196
+ // blocked field is effective only when send_blocked is true.
197
+ struct {
198
+ Endpoint *endpoint;
199
+ Address local_addr;
200
+ Address remote_addr;
201
+ unsigned int ecn;
202
+ const uint8_t *data;
203
+ size_t datalen;
204
+ size_t gso_size;
205
+ } blocked[2];
206
+ std::unique_ptr<uint8_t[]> data;
207
+ } tx_;
208
+ };
209
+
210
+ class Server {
211
+ public:
212
+ Server(struct ev_loop *loop, TLSServerContext &tls_ctx);
213
+ ~Server();
214
+
215
+ int init(const char *addr, const char *port);
216
+ void disconnect();
217
+ void close();
218
+
219
+ int on_read(Endpoint &ep);
220
+ int send_version_negotiation(uint32_t version, const uint8_t *dcid,
221
+ size_t dcidlen, const uint8_t *scid,
222
+ size_t scidlen, Endpoint &ep,
223
+ const Address &local_addr, const sockaddr *sa,
224
+ socklen_t salen);
225
+ int send_retry(const ngtcp2_pkt_hd *chd, Endpoint &ep,
226
+ const Address &local_addr, const sockaddr *sa, socklen_t salen,
227
+ size_t max_pktlen);
228
+ int send_stateless_connection_close(const ngtcp2_pkt_hd *chd, Endpoint &ep,
229
+ const Address &local_addr,
230
+ const sockaddr *sa, socklen_t salen);
231
+ int verify_retry_token(ngtcp2_cid *ocid, const ngtcp2_pkt_hd *hd,
232
+ const sockaddr *sa, socklen_t salen);
233
+ int verify_token(const ngtcp2_pkt_hd *hd, const sockaddr *sa,
234
+ socklen_t salen);
235
+ int send_packet(Endpoint &ep, const ngtcp2_addr &local_addr,
236
+ const ngtcp2_addr &remote_addr, unsigned int ecn,
237
+ const uint8_t *data, size_t datalen);
238
+ std::pair<size_t, int> send_packet(Endpoint &ep, bool &no_gso,
239
+ const ngtcp2_addr &local_addr,
240
+ const ngtcp2_addr &remote_addr,
241
+ unsigned int ecn, const uint8_t *data,
242
+ size_t datalen, size_t gso_size);
243
+ void remove(const Handler *h);
244
+
245
+ void associate_cid(const ngtcp2_cid *cid, Handler *h);
246
+ void dissociate_cid(const ngtcp2_cid *cid);
247
+
248
+ private:
249
+ std::unordered_map<std::string, Handler *> handlers_;
250
+ struct ev_loop *loop_;
251
+ std::vector<Endpoint> endpoints_;
252
+ TLSServerContext &tls_ctx_;
253
+ ev_signal sigintev_;
254
+ };
255
+
256
+ #endif // SERVER_H
@@ -0,0 +1,58 @@
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 "server_base.h"
26
+
27
+ #include <cassert>
28
+ #include <array>
29
+ #include <iostream>
30
+
31
+ #include "debug.h"
32
+
33
+ using namespace ngtcp2;
34
+
35
+ extern Config config;
36
+
37
+ Buffer::Buffer(const uint8_t *data, size_t datalen)
38
+ : buf{data, data + datalen}, begin(buf.data()), tail(begin + datalen) {}
39
+ Buffer::Buffer(size_t datalen) : buf(datalen), begin(buf.data()), tail(begin) {}
40
+
41
+ static ngtcp2_conn *get_conn(ngtcp2_crypto_conn_ref *conn_ref) {
42
+ auto h = static_cast<HandlerBase *>(conn_ref->user_data);
43
+ return h->conn();
44
+ }
45
+
46
+ HandlerBase::HandlerBase() : conn_ref_{get_conn, this}, conn_(nullptr) {
47
+ ngtcp2_connection_close_error_default(&last_error_);
48
+ }
49
+
50
+ HandlerBase::~HandlerBase() {
51
+ if (conn_) {
52
+ ngtcp2_conn_del(conn_);
53
+ }
54
+ }
55
+
56
+ ngtcp2_conn *HandlerBase::conn() const { return conn_; }
57
+
58
+ ngtcp2_crypto_conn_ref *HandlerBase::conn_ref() { return &conn_ref_; }
@@ -0,0 +1,195 @@
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 SERVER_BASE_H
26
+ #define SERVER_BASE_H
27
+
28
+ #ifdef HAVE_CONFIG_H
29
+ # include <config.h>
30
+ #endif // HAVE_CONFIG_H
31
+
32
+ #include <vector>
33
+ #include <deque>
34
+ #include <unordered_map>
35
+ #include <string>
36
+ #include <string_view>
37
+ #include <functional>
38
+
39
+ #include <ngtcp2/ngtcp2_crypto.h>
40
+
41
+ #include "tls_server_session.h"
42
+ #include "network.h"
43
+ #include "shared.h"
44
+
45
+ using namespace ngtcp2;
46
+
47
+ struct Config {
48
+ Address preferred_ipv4_addr;
49
+ Address preferred_ipv6_addr;
50
+ // tx_loss_prob is probability of losing outgoing packet.
51
+ double tx_loss_prob;
52
+ // rx_loss_prob is probability of losing incoming packet.
53
+ double rx_loss_prob;
54
+ // ciphers is the list of enabled ciphers.
55
+ const char *ciphers;
56
+ // groups is the list of supported groups.
57
+ const char *groups;
58
+ // htdocs is a root directory to serve documents.
59
+ std::string htdocs;
60
+ // mime_types_file is a path to "MIME media types and the
61
+ // extensions" file. Ubuntu mime-support package includes it in
62
+ // /etc/mime/types.
63
+ std::string_view mime_types_file;
64
+ // mime_types maps file extension to MIME media type.
65
+ std::unordered_map<std::string, std::string> mime_types;
66
+ // port is the port number which server listens on for incoming
67
+ // connections.
68
+ uint16_t port;
69
+ // quiet suppresses the output normally shown except for the error
70
+ // messages.
71
+ bool quiet;
72
+ // timeout is an idle timeout for QUIC connection.
73
+ ngtcp2_duration timeout;
74
+ // show_secret is true if transport secrets should be printed out.
75
+ bool show_secret;
76
+ // validate_addr is true if server requires address validation.
77
+ bool validate_addr;
78
+ // early_response is true if server starts sending response when it
79
+ // receives HTTP header fields without waiting for request body. If
80
+ // HTTP response data is written before receiving request body,
81
+ // STOP_SENDING is sent.
82
+ bool early_response;
83
+ // verify_client is true if server verifies client with X.509
84
+ // certificate based authentication.
85
+ bool verify_client;
86
+ // qlog_dir is the path to directory where qlog is stored.
87
+ std::string_view qlog_dir;
88
+ // no_quic_dump is true if hexdump of QUIC STREAM and CRYPTO data
89
+ // should be disabled.
90
+ bool no_quic_dump;
91
+ // no_http_dump is true if hexdump of HTTP response body should be
92
+ // disabled.
93
+ bool no_http_dump;
94
+ // max_data is the initial connection-level flow control window.
95
+ uint64_t max_data;
96
+ // max_stream_data_bidi_local is the initial stream-level flow
97
+ // control window for a bidirectional stream that the local endpoint
98
+ // initiates.
99
+ uint64_t max_stream_data_bidi_local;
100
+ // max_stream_data_bidi_remote is the initial stream-level flow
101
+ // control window for a bidirectional stream that the remote
102
+ // endpoint initiates.
103
+ uint64_t max_stream_data_bidi_remote;
104
+ // max_stream_data_uni is the initial stream-level flow control
105
+ // window for a unidirectional stream.
106
+ uint64_t max_stream_data_uni;
107
+ // max_streams_bidi is the number of the concurrent bidirectional
108
+ // streams.
109
+ uint64_t max_streams_bidi;
110
+ // max_streams_uni is the number of the concurrent unidirectional
111
+ // streams.
112
+ uint64_t max_streams_uni;
113
+ // max_window is the maximum connection-level flow control window
114
+ // size if auto-tuning is enabled.
115
+ uint64_t max_window;
116
+ // max_stream_window is the maximum stream-level flow control window
117
+ // size if auto-tuning is enabled.
118
+ uint64_t max_stream_window;
119
+ // max_dyn_length is the maximum length of dynamically generated
120
+ // response.
121
+ uint64_t max_dyn_length;
122
+ // static_secret is used to derive keying materials for Retry and
123
+ // Stateless Retry token.
124
+ std::array<uint8_t, 32> static_secret;
125
+ // cc_algo is the congestion controller algorithm.
126
+ ngtcp2_cc_algo cc_algo;
127
+ // initial_rtt is an initial RTT.
128
+ ngtcp2_duration initial_rtt;
129
+ // max_udp_payload_size is the maximum UDP payload size that server
130
+ // transmits.
131
+ size_t max_udp_payload_size;
132
+ // send_trailers controls whether server sends trailer fields or
133
+ // not.
134
+ bool send_trailers;
135
+ // max_gso_dgrams is the maximum number of UDP datagrams in one GSO
136
+ // sendmsg call.
137
+ size_t max_gso_dgrams;
138
+ // handshake_timeout is the period of time before giving up QUIC
139
+ // connection establishment.
140
+ ngtcp2_duration handshake_timeout;
141
+ // preferred_versions includes QUIC versions in the order of
142
+ // preference. Server negotiates one of those versions if a client
143
+ // initially selects a less preferred version.
144
+ std::vector<uint32_t> preferred_versions;
145
+ // available_versions includes QUIC versions that are sent in
146
+ // available_versions field of version_information
147
+ // transport_parameter.
148
+ std::vector<uint32_t> available_versions;
149
+ // no_pmtud disables Path MTU Discovery.
150
+ bool no_pmtud;
151
+ // ack_thresh is the minimum number of the received ACK eliciting
152
+ // packets that triggers immediate acknowledgement.
153
+ size_t ack_thresh;
154
+ };
155
+
156
+ struct Buffer {
157
+ Buffer(const uint8_t *data, size_t datalen);
158
+ explicit Buffer(size_t datalen);
159
+
160
+ size_t size() const { return tail - begin; }
161
+ size_t left() const { return buf.data() + buf.size() - tail; }
162
+ uint8_t *const wpos() { return tail; }
163
+ const uint8_t *rpos() const { return begin; }
164
+ void push(size_t len) { tail += len; }
165
+ void reset() { tail = begin; }
166
+
167
+ std::vector<uint8_t> buf;
168
+ // begin points to the beginning of the buffer. This might point to
169
+ // buf.data() if a buffer space is allocated by this object. It is
170
+ // also allowed to point to the external shared buffer.
171
+ uint8_t *begin;
172
+ // tail points to the position of the buffer where write should
173
+ // occur.
174
+ uint8_t *tail;
175
+ };
176
+
177
+ class HandlerBase {
178
+ public:
179
+ HandlerBase();
180
+ ~HandlerBase();
181
+
182
+ ngtcp2_conn *conn() const;
183
+
184
+ TLSServerSession *get_session() { return &tls_session_; }
185
+
186
+ ngtcp2_crypto_conn_ref *conn_ref();
187
+
188
+ protected:
189
+ ngtcp2_crypto_conn_ref conn_ref_;
190
+ TLSServerSession tls_session_;
191
+ ngtcp2_conn *conn_;
192
+ ngtcp2_connection_close_error last_error_;
193
+ };
194
+
195
+ #endif // SERVER_BASE_H