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,356 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ # nghttp2 - HTTP/2 C Library
4
+ #
5
+ # Copyright (c) 2020 ngtcp2 contributors
6
+ # Copyright (c) 2012 Tatsuhiro Tsujikawa
7
+ #
8
+ # Permission is hereby granted, free of charge, to any person obtaining
9
+ # a copy of this software and associated documentation files (the
10
+ # "Software"), to deal in the Software without restriction, including
11
+ # without limitation the rights to use, copy, modify, merge, publish,
12
+ # distribute, sublicense, and/or sell copies of the Software, and to
13
+ # permit persons to whom the Software is furnished to do so, subject to
14
+ # the following conditions:
15
+
16
+ # The above copyright notice and this permission notice shall be
17
+ # included in all copies or substantial portions of the Software.
18
+
19
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
20
+ # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
21
+ # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
22
+ # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
23
+ # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
24
+ # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
25
+ # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
26
+
27
+ # Generates API reference from C source code.
28
+
29
+ import re, sys, argparse, os.path
30
+
31
+ class FunctionDoc:
32
+ def __init__(self, name, content, domain, filename):
33
+ self.name = name
34
+ self.content = content
35
+ self.domain = domain
36
+ if self.domain == 'function':
37
+ self.funcname = re.search(r'(ngtcp2_[^ )]+)\(', self.name).group(1)
38
+ self.filename = filename
39
+
40
+ def write(self, out):
41
+ out.write('.. {}:: {}\n'.format(self.domain, self.name))
42
+ out.write('\n')
43
+ for line in self.content:
44
+ out.write(' {}\n'.format(line))
45
+
46
+ class StructDoc:
47
+ def __init__(self, name, content, members, member_domain):
48
+ self.name = name
49
+ self.content = content
50
+ self.members = members
51
+ self.member_domain = member_domain
52
+
53
+ def write(self, out):
54
+ if self.name:
55
+ out.write('.. type:: {}\n'.format(self.name))
56
+ out.write('\n')
57
+ for line in self.content:
58
+ out.write(' {}\n'.format(line))
59
+ out.write('\n')
60
+ for name, content in self.members:
61
+ out.write(' .. {}:: {}\n'.format(self.member_domain, name))
62
+ out.write('\n')
63
+ for line in content:
64
+ out.write(' {}\n'.format(line))
65
+ out.write('\n')
66
+
67
+ class EnumDoc:
68
+ def __init__(self, name, content, members):
69
+ self.name = name
70
+ self.content = content
71
+ self.members = members
72
+
73
+ def write(self, out):
74
+ if self.name:
75
+ out.write('.. type:: {}\n'.format(self.name))
76
+ out.write('\n')
77
+ for line in self.content:
78
+ out.write(' {}\n'.format(line))
79
+ out.write('\n')
80
+ for name, content in self.members:
81
+ out.write(' .. enum:: {}\n'.format(name))
82
+ out.write('\n')
83
+ for line in content:
84
+ out.write(' {}\n'.format(line))
85
+ out.write('\n')
86
+
87
+ class MacroDoc:
88
+ def __init__(self, name, content):
89
+ self.name = name
90
+ self.content = content
91
+
92
+ def write(self, out):
93
+ out.write('''.. macro:: {}\n'''.format(self.name))
94
+ out.write('\n')
95
+ for line in self.content:
96
+ out.write(' {}\n'.format(line))
97
+
98
+ class MacroSectionDoc:
99
+ def __init__(self, content):
100
+ self.content = content
101
+
102
+ def write(self, out):
103
+ out.write('\n')
104
+ c = ' '.join(self.content).strip()
105
+ out.write(c)
106
+ out.write('\n')
107
+ out.write('-' * len(c))
108
+ out.write('\n\n')
109
+
110
+ class TypedefDoc:
111
+ def __init__(self, name, content):
112
+ self.name = name
113
+ self.content = content
114
+
115
+ def write(self, out):
116
+ out.write('''.. type:: {}\n'''.format(self.name))
117
+ out.write('\n')
118
+ for line in self.content:
119
+ out.write(' {}\n'.format(line))
120
+
121
+ def make_api_ref(infile):
122
+ macros = []
123
+ enums = []
124
+ types = []
125
+ functions = []
126
+ while True:
127
+ line = infile.readline()
128
+ if not line:
129
+ break
130
+ elif line == '/**\n':
131
+ line = infile.readline()
132
+ doctype = line.split()[1]
133
+ if doctype == '@function':
134
+ functions.append(process_function('function', infile))
135
+ elif doctype == '@functypedef':
136
+ types.append(process_function('type', infile))
137
+ elif doctype == '@struct' or doctype == '@union':
138
+ types.append(process_struct(infile))
139
+ elif doctype == '@enum':
140
+ enums.append(process_enum(infile))
141
+ elif doctype == '@macro':
142
+ macros.append(process_macro(infile))
143
+ elif doctype == '@macrosection':
144
+ macros.append(process_macrosection(infile))
145
+ elif doctype == '@typedef':
146
+ types.append(process_typedef(infile))
147
+ return macros, enums, types, functions
148
+
149
+ def output(
150
+ title, indexfile, macrosfile, enumsfile, typesfile, funcsdir,
151
+ macros, enums, types, functions):
152
+ indexfile.write('''
153
+ {title}
154
+ {titledecoration}
155
+
156
+ .. toctree::
157
+ :maxdepth: 1
158
+
159
+ {macros}
160
+ {enums}
161
+ {types}
162
+ '''.format(
163
+ title=title, titledecoration='='*len(title),
164
+ macros=os.path.splitext(os.path.basename(macrosfile.name))[0],
165
+ enums=os.path.splitext(os.path.basename(enumsfile.name))[0],
166
+ types=os.path.splitext(os.path.basename(typesfile.name))[0],
167
+ ))
168
+
169
+ for doc in functions:
170
+ indexfile.write(' {}\n'.format(doc.funcname))
171
+
172
+ macrosfile.write('''
173
+ Macros
174
+ ======
175
+ ''')
176
+ for doc in macros:
177
+ doc.write(macrosfile)
178
+
179
+ enumsfile.write('''
180
+ Enums
181
+ =====
182
+ ''')
183
+ for doc in enums:
184
+ doc.write(enumsfile)
185
+
186
+ typesfile.write('''
187
+ Types (structs, unions and typedefs)
188
+ ====================================
189
+ ''')
190
+ for doc in types:
191
+ doc.write(typesfile)
192
+
193
+ for doc in functions:
194
+ with open(os.path.join(funcsdir, doc.funcname + '.rst'), 'w') as f:
195
+ f.write('''
196
+ {funcname}
197
+ {secul}
198
+
199
+ Synopsis
200
+ --------
201
+
202
+ *#include <ngtcp2/{filename}>*
203
+
204
+ '''.format(funcname=doc.funcname, secul='='*len(doc.funcname),
205
+ filename=doc.filename))
206
+ doc.write(f)
207
+
208
+ def process_macro(infile):
209
+ content = read_content(infile)
210
+ lines = []
211
+ while True:
212
+ line = infile.readline()
213
+ if not line:
214
+ break
215
+ line = line.rstrip()
216
+ lines.append(line.rstrip('\\'))
217
+ if not line.endswith('\\'):
218
+ break
219
+
220
+ macro_name = re.sub(r'#define ', '', ''.join(lines))
221
+ m = re.match(r'^[^( ]+(:?\(.*?\))?', macro_name)
222
+ macro_name = m.group(0)
223
+ return MacroDoc(macro_name, content)
224
+
225
+ def process_macrosection(infile):
226
+ content = read_content(infile)
227
+ return MacroSectionDoc(content)
228
+
229
+ def process_typedef(infile):
230
+ content = read_content(infile)
231
+ typedef = infile.readline()
232
+ typedef = re.sub(r';\n$', '', typedef)
233
+ typedef = re.sub(r'typedef ', '', typedef)
234
+ return TypedefDoc(typedef, content)
235
+
236
+ def process_enum(infile):
237
+ members = []
238
+ enum_name = None
239
+ content = read_content(infile)
240
+ while True:
241
+ line = infile.readline()
242
+ if not line:
243
+ break
244
+ elif re.match(r'\s*/\*\*\n', line):
245
+ member_content = read_content(infile)
246
+ line = infile.readline()
247
+ items = line.split()
248
+ member_name = items[0].rstrip(',')
249
+ if len(items) >= 3:
250
+ member_content.insert(0, '(``{}``) '\
251
+ .format(' '.join(items[2:]).rstrip(',')))
252
+ members.append((member_name, member_content))
253
+ elif line.startswith('}'):
254
+ enum_name = line.rstrip().split()[1]
255
+ enum_name = re.sub(r';$', '', enum_name)
256
+ break
257
+ return EnumDoc(enum_name, content, members)
258
+
259
+ def process_struct(infile):
260
+ members = []
261
+ struct_name = None
262
+ content = read_content(infile)
263
+ while True:
264
+ line = infile.readline()
265
+ if not line:
266
+ break
267
+ elif re.match(r'\s*/\*\*\n', line):
268
+ member_content = read_content(infile)
269
+ line = infile.readline()
270
+ member_name = line.rstrip().rstrip(';')
271
+ members.append((member_name, member_content))
272
+ elif line.startswith('}') or\
273
+ (line.startswith('typedef ') and line.endswith(';\n')):
274
+ if line.startswith('}'):
275
+ index = 1
276
+ else:
277
+ index = 3
278
+ struct_name = line.rstrip().split()[index]
279
+ struct_name = re.sub(r';$', '', struct_name)
280
+ break
281
+ return StructDoc(struct_name, content, members, 'member')
282
+
283
+ def process_function(domain, infile):
284
+ content = read_content(infile)
285
+ func_proto = []
286
+ while True:
287
+ line = infile.readline()
288
+ if not line:
289
+ break
290
+ elif line == '\n':
291
+ break
292
+ else:
293
+ func_proto.append(line)
294
+ func_proto = ''.join(func_proto)
295
+ func_proto = re.sub(r'int (pkt_info|transport_params|conn_stat|settings|callbacks)_version,',
296
+ '', func_proto)
297
+ func_proto = re.sub(r'_versioned\(', '(', func_proto)
298
+ func_proto = re.sub(r';\n$', '', func_proto)
299
+ func_proto = re.sub(r'\s+', ' ', func_proto)
300
+ func_proto = re.sub(r'NGTCP2_EXTERN ', '', func_proto)
301
+ func_proto = re.sub(r'typedef ', '', func_proto)
302
+ filename = os.path.basename(infile.name)
303
+ return FunctionDoc(func_proto, content, domain, filename)
304
+
305
+ def read_content(infile):
306
+ content = []
307
+ while True:
308
+ line = infile.readline()
309
+ if not line:
310
+ break
311
+ if re.match(r'\s*\*/\n', line):
312
+ break
313
+ else:
314
+ content.append(transform_content(line.rstrip()))
315
+ return content
316
+
317
+ def arg_repl(matchobj):
318
+ return '*{}*'.format(matchobj.group(1).replace('*', '\\*'))
319
+
320
+ def transform_content(content):
321
+ content = re.sub(r'^\s+\* ?', '', content)
322
+ content = re.sub(r'\|([^\s|]+)\|', arg_repl, content)
323
+ return content
324
+
325
+ if __name__ == '__main__':
326
+ parser = argparse.ArgumentParser(description="Generate API reference")
327
+ parser.add_argument('--title', default='API Reference',
328
+ help='title of index page')
329
+ parser.add_argument('index', type=argparse.FileType('w'),
330
+ help='index output file')
331
+ parser.add_argument('macros', type=argparse.FileType('w'),
332
+ help='macros section output file. The filename should be macros.rst')
333
+ parser.add_argument('enums', type=argparse.FileType('w'),
334
+ help='enums section output file. The filename should be enums.rst')
335
+ parser.add_argument('types', type=argparse.FileType('w'),
336
+ help='types section output file. The filename should be types.rst')
337
+ parser.add_argument('funcsdir',
338
+ help='functions doc output dir')
339
+ parser.add_argument('files', nargs='+', type=argparse.FileType('r'),
340
+ help='source file')
341
+ args = parser.parse_args()
342
+ macros = []
343
+ enums = []
344
+ types = []
345
+ funcs = []
346
+ for infile in args.files:
347
+ m, e, t, f = make_api_ref(infile)
348
+ macros.extend(m)
349
+ enums.extend(e)
350
+ types.extend(t)
351
+ funcs.extend(f)
352
+ funcs.sort(key=lambda x: x.funcname)
353
+ output(
354
+ args.title,
355
+ args.index, args.macros, args.enums, args.types, args.funcsdir,
356
+ macros, enums, types, funcs)
@@ -0,0 +1,94 @@
1
+ # ngtcp2
2
+
3
+ # Copyright (c) 2020 ngtcp2 contributors
4
+
5
+ # Permission is hereby granted, free of charge, to any person obtaining
6
+ # a copy of this software and associated documentation files (the
7
+ # "Software"), to deal in the Software without restriction, including
8
+ # without limitation the rights to use, copy, modify, merge, publish,
9
+ # distribute, sublicense, and/or sell copies of the Software, and to
10
+ # permit persons to whom the Software is furnished to do so, subject to
11
+ # the following conditions:
12
+
13
+ # The above copyright notice and this permission notice shall be
14
+ # included in all copies or substantial portions of the Software.
15
+
16
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23
+
24
+ # Configuration file for the Sphinx documentation builder.
25
+ #
26
+ # This file only contains a selection of the most common options. For a full
27
+ # list see the documentation:
28
+ # https://www.sphinx-doc.org/en/master/usage/configuration.html
29
+
30
+ # -- Path setup --------------------------------------------------------------
31
+
32
+ # If extensions (or modules to document with autodoc) are in another directory,
33
+ # add these directories to sys.path here. If the directory is relative to the
34
+ # documentation root, use os.path.abspath to make it absolute, like shown here.
35
+ #
36
+ # import os
37
+ # import sys
38
+ # sys.path.insert(0, os.path.abspath('.'))
39
+
40
+
41
+ # -- Project information -----------------------------------------------------
42
+
43
+ project = 'ngtcp2'
44
+ copyright = '2020, ngtcp2 contributors'
45
+ author = 'ngtcp2 contributors'
46
+
47
+
48
+ # -- General configuration ---------------------------------------------------
49
+
50
+ # Add any Sphinx extension module names here, as strings. They can be
51
+ # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
52
+ # ones.
53
+ extensions = [
54
+ ]
55
+
56
+ # Add any paths that contain templates here, relative to this directory.
57
+ templates_path = ['_templates']
58
+
59
+ # List of patterns, relative to source directory, that match files and
60
+ # directories to ignore when looking for source files.
61
+ # This pattern also affects html_static_path and html_extra_path.
62
+ exclude_patterns = []
63
+
64
+
65
+ # -- Options for HTML output -------------------------------------------------
66
+
67
+ # The theme to use for HTML and HTML Help pages. See the documentation for
68
+ # a list of builtin themes.
69
+ #
70
+ html_theme = 'sphinx_rtd_theme'
71
+
72
+ # Add any paths that contain custom static files (such as style sheets) here,
73
+ # relative to this directory. They are copied after the builtin static files,
74
+ # so a file named "default.css" will overwrite the builtin "default.css".
75
+ html_static_path = ['_static']
76
+
77
+ # The reST default role (used for this markup: `text`) to use for all documents.
78
+ default_role = 'c:func'
79
+ primary_domain = 'c'
80
+
81
+ # manpage URL pattern
82
+ manpages_url = 'https://man7.org/linux/man-pages/man{section}/{page}.{section}.html'
83
+
84
+ # The default language to highlight source code in.
85
+ highlight_language = 'c'
86
+
87
+ # The version info for the project you're documenting, acts as replacement for
88
+ # |version| and |release|, also used in various other places throughout the
89
+ # built documents.
90
+ #
91
+ # The short X.Y version.
92
+ version = '@PACKAGE_VERSION@'
93
+ # The full version, including alpha/beta/rc tags.
94
+ release = '@PACKAGE_VERSION@'
@@ -0,0 +1,22 @@
1
+ .. ngtcp2 documentation master file, created by
2
+ sphinx-quickstart on Mon Nov 30 22:15:12 2020.
3
+ You can adapt this file completely to your liking, but it should at least
4
+ contain the root `toctree` directive.
5
+
6
+ Welcome to ngtcp2's documentation!
7
+ ==================================
8
+
9
+ .. toctree::
10
+ :maxdepth: 1
11
+ :caption: Contents:
12
+
13
+ programmers-guide
14
+ apiref
15
+ crypto_apiref
16
+
17
+ Indices and tables
18
+ ==================
19
+
20
+ * :ref:`genindex`
21
+ * :ref:`modindex`
22
+ * :ref:`search`