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,258 @@
1
+ ngtcp2
2
+ ======
3
+
4
+ "Call it TCP/2. One More Time."
5
+
6
+ ngtcp2 project is an effort to implement `RFC9000
7
+ <https://datatracker.ietf.org/doc/html/rfc9000>`_ QUIC protocol.
8
+
9
+ Documentation
10
+ -------------
11
+
12
+ `Online documentation <https://nghttp2.org/ngtcp2/>`_ is available.
13
+
14
+ Public test server
15
+ ------------------
16
+
17
+ The following endpoints are available to try out ngtcp2
18
+ implementation:
19
+
20
+ - https://nghttp2.org:4433
21
+ - https://nghttp2.org:4434 (requires address validation token)
22
+ - https://nghttp2.org (powered by `nghttpx
23
+ <https://nghttp2.org/documentation/nghttpx.1.html>`_)
24
+
25
+ This endpoints sends Alt-Svc header field to clients if it is
26
+ accessed via HTTP/1.1 or HTTP/2 to tell them that HTTP/3 is
27
+ available at UDP 443.
28
+
29
+ Requirements
30
+ ------------
31
+
32
+ The libngtcp2 C library itself does not depend on any external
33
+ libraries. The example client, and server are written in C++20, and
34
+ should compile with the modern C++ compilers (e.g., clang >= 11.0, or
35
+ gcc >= 11.0).
36
+
37
+ The following packages are required to configure the build system:
38
+
39
+ - pkg-config >= 0.20
40
+ - autoconf
41
+ - automake
42
+ - autotools-dev
43
+ - libtool
44
+
45
+ libngtcp2 uses cunit for its unit test frame work:
46
+
47
+ - cunit >= 2.1
48
+
49
+ To build sources under the examples directory, libev and nghttp3 are
50
+ required:
51
+
52
+ - libev
53
+ - `nghttp3 <https://github.com/ngtcp2/nghttp3>`_ for HTTP/3
54
+
55
+ ngtcp2 crypto helper library, and client and server under examples
56
+ directory require at least one of the following TLS backends:
57
+
58
+ - `OpenSSL with QUIC support
59
+ <https://github.com/quictls/openssl/tree/OpenSSL_1_1_1t+quic>`_
60
+ - GnuTLS >= 3.7.2
61
+ - BoringSSL (commit 80a243e07ef77156af66efa7d22ac35aba44c1b3)
62
+ - Picotls (commit 9398c491cf5b21e123ce409f2d32a1d235d93b7e)
63
+ - wolfSSL >= 5.5.0
64
+
65
+ Build from git
66
+ --------------
67
+
68
+ .. code-block:: text
69
+
70
+ $ git clone --depth 1 -b OpenSSL_1_1_1t+quic https://github.com/quictls/openssl
71
+ $ cd openssl
72
+ $ # For Linux
73
+ $ ./config enable-tls1_3 --prefix=$PWD/build
74
+ $ make -j$(nproc)
75
+ $ make install_sw
76
+ $ cd ..
77
+ $ git clone https://github.com/ngtcp2/nghttp3
78
+ $ cd nghttp3
79
+ $ autoreconf -i
80
+ $ ./configure --prefix=$PWD/build --enable-lib-only
81
+ $ make -j$(nproc) check
82
+ $ make install
83
+ $ cd ..
84
+ $ git clone https://github.com/ngtcp2/ngtcp2
85
+ $ cd ngtcp2
86
+ $ autoreconf -i
87
+ $ # For Mac users who have installed libev with MacPorts, append
88
+ $ # ',-L/opt/local/lib' to LDFLAGS, and also pass
89
+ $ # CPPFLAGS="-I/opt/local/include" to ./configure.
90
+ $ # For OpenSSL >= v3.0.0, replace "openssl/build/lib" with
91
+ $ # "openssl/build/lib64".
92
+ $ ./configure PKG_CONFIG_PATH=$PWD/../openssl/build/lib/pkgconfig:$PWD/../nghttp3/build/lib/pkgconfig LDFLAGS="-Wl,-rpath,$PWD/../openssl/build/lib"
93
+ $ make -j$(nproc) check
94
+
95
+ Client/Server
96
+ -------------
97
+
98
+ After successful build, the client and server executable should be
99
+ found under examples directory. They talk HTTP/3.
100
+
101
+ Client
102
+ ~~~~~~
103
+
104
+ .. code-block:: text
105
+
106
+ $ examples/client [OPTIONS] <HOST> <PORT> [<URI>...]
107
+
108
+ The notable options are:
109
+
110
+ - ``-d``, ``--data=<PATH>``: Read data from <PATH> and send it to a
111
+ peer.
112
+
113
+ Server
114
+ ~~~~~~
115
+
116
+ .. code-block:: text
117
+
118
+ $ examples/server [OPTIONS] <ADDR> <PORT> <PRIVATE_KEY_FILE> <CERTIFICATE_FILE>
119
+
120
+ The notable options are:
121
+
122
+ - ``-V``, ``--validate-addr``: Enforce stateless address validation.
123
+
124
+ H09client/H09server
125
+ -------------------
126
+
127
+ There are h09client and h09server which speak HTTP/0.9. They are
128
+ written just for `quic-interop-runner
129
+ <https://github.com/marten-seemann/quic-interop-runner>`_. They share
130
+ the basic functionalities with HTTP/3 client and server but have less
131
+ functions (e.g., h09client does not have a capability to send request
132
+ body, and h09server does not understand numeric request path, like
133
+ /1000).
134
+
135
+ Resumption and 0-RTT
136
+ --------------------
137
+
138
+ In order to resume a session, a session ticket, and a transport
139
+ parameters must be fetched from server. First, run examples/client
140
+ with --session-file, and --tp-file options which specify a path to
141
+ session ticket, and transport parameter files respectively to save
142
+ them locally.
143
+
144
+ Once these files are available, run examples/client with the same
145
+ arguments again. You will see that session is resumed in your log if
146
+ resumption succeeds. Resuming session makes server's first Handshake
147
+ packet pretty small because it does not send its certificates.
148
+
149
+ To send 0-RTT data, after making sure that resumption works, use -d
150
+ option to specify a file which contains data to send.
151
+
152
+ Token (Not something included in Retry packet)
153
+ ----------------------------------------------
154
+
155
+ QUIC server might send a token to client after connection has been
156
+ established. Client can send this token in subsequent connection to
157
+ the server. Server verifies the token and if it succeeds, the address
158
+ validation completes and lifts some restrictions on server which might
159
+ speed up transfer. In order to save and/or load a token,
160
+ use --token-file option of examples/client. The given file is
161
+ overwritten if it already exists when storing a token.
162
+
163
+ Crypto helper library
164
+ ---------------------
165
+
166
+ In order to make TLS stack integration less painful, we provide a
167
+ crypto helper library which offers the basic crypto operations.
168
+
169
+ The header file exists under crypto/includes/ngtcp2 directory.
170
+
171
+ Each library file is built for a particular TLS backend. The
172
+ available crypto helper libraries are:
173
+
174
+ - libngtcp2_crypto_openssl: Use OpenSSL as TLS backend
175
+ - libngtcp2_crypto_gnutls: Use GnuTLS as TLS backend
176
+ - libngtcp2_crypto_boringssl: Use BoringSSL as TLS backend
177
+ - libngtcp2_crypto_picotls: Use Picotls as TLS backend
178
+ - libngtcp2_crypto_wolfssl: Use wolfSSL as TLS backend
179
+
180
+ Because BoringSSL and Picotls are an unversioned product, we only
181
+ tested their particular revision. See Requirements section above.
182
+
183
+ We use Picotls with OpenSSL as crypto backend. It does not work with
184
+ OpenSSL >= 3.0.0.
185
+
186
+ The examples directory contains client and server that are linked to
187
+ those crypto helper libraries and TLS backends. They are only built
188
+ if their corresponding crypto helper library is built:
189
+
190
+ - client: OpenSSL client
191
+ - server: OpenSSL server
192
+ - gtlsclient: GnuTLS client
193
+ - gtlsserver: GnuTLS server
194
+ - bsslclient: BoringSSL client
195
+ - bsslserver: BoringSSL server
196
+ - ptlsclient: Picotls client
197
+ - ptlsserver: Picotls server
198
+ - wsslclient: wolfSSL client
199
+ - wsslserver: wolfSSL server
200
+
201
+ QUIC protocol extensions
202
+ -------------------------
203
+
204
+ The library implements the following QUIC protocol extensions:
205
+
206
+ - `An Unreliable Datagram Extension to QUIC
207
+ <https://datatracker.ietf.org/doc/html/rfc9221>`_
208
+ - `Greasing the QUIC Bit
209
+ <https://datatracker.ietf.org/doc/html/rfc9287>`_
210
+ - `Compatible Version Negotiation for QUIC
211
+ <https://datatracker.ietf.org/doc/html/draft-ietf-quic-version-negotiation>`_
212
+ - `QUIC Version 2
213
+ <https://datatracker.ietf.org/doc/html/draft-ietf-quic-v2>`_
214
+
215
+ Configuring Wireshark for QUIC
216
+ ------------------------------
217
+
218
+ `Wireshark <https://www.wireshark.org/download.html>`_ can be configured to
219
+ analyze QUIC traffic using the following steps:
220
+
221
+ 1. Set *SSLKEYLOGFILE* environment variable:
222
+
223
+ .. code-block:: text
224
+
225
+ $ export SSLKEYLOGFILE=quic_keylog_file
226
+
227
+ 2. Set the port that QUIC uses
228
+
229
+ Go to *Preferences->Protocols->QUIC* and set the port the program
230
+ listens to. In the case of the example application this would be
231
+ the port specified on the command line.
232
+
233
+ 3. Set Pre-Master-Secret logfile
234
+
235
+ Go to *Preferences->Protocols->TLS* and set the *Pre-Master-Secret
236
+ log file* to the same value that was specified for *SSLKEYLOGFILE*.
237
+
238
+ 4. Choose the correct network interface for capturing
239
+
240
+ Make sure you choose the correct network interface for
241
+ capturing. For example, if using localhost choose the *loopback*
242
+ network interface on macos.
243
+
244
+ 5. Create a filter
245
+
246
+ Create A filter for the udp.port and set the port to the port the
247
+ application is listening to. For example:
248
+
249
+ .. code-block:: text
250
+
251
+ udp.port == 7777
252
+
253
+ License
254
+ -------
255
+
256
+ The MIT License
257
+
258
+ Copyright (c) 2016 ngtcp2 contributors
@@ -0,0 +1,10 @@
1
+ #!/bin/sh -e
2
+ # build boringssl (for GitHub workflow)
3
+
4
+ git clone https://boringssl.googlesource.com/boringssl
5
+ cd boringssl
6
+ git checkout "${BORINGSSL_VERSION}"
7
+ mkdir build
8
+ cd build
9
+ cmake -DCMAKE_POSITION_INDEPENDENT_CODE=ON ..
10
+ make -j"$(nproc 2> /dev/null || sysctl -n hw.ncpu)"
@@ -0,0 +1,9 @@
1
+ #!/bin/sh -e
2
+ # build nghttp3 (for GitHub workflow)
3
+
4
+ git clone https://github.com/ngtcp2/nghttp3
5
+ cd nghttp3
6
+ autoreconf -i
7
+ ./configure --prefix=$PWD/build --enable-lib-only
8
+ make -j"$(nproc 2> /dev/null || sysctl -n hw.ncpu)" check
9
+ make install
@@ -0,0 +1,8 @@
1
+ #!/bin/sh -e
2
+ # build patched openssl (for GitHub workflow)
3
+
4
+ git clone --depth 1 -b OpenSSL_"${OPENSSL1_VERSION}" https://github.com/quictls/openssl openssl1
5
+ cd openssl1
6
+ ./config --prefix=$PWD/build
7
+ make -j"$(nproc 2> /dev/null || sysctl -n hw.ncpu)"
8
+ make install_sw
@@ -0,0 +1,9 @@
1
+ #!/bin/sh -e
2
+ # build patched openssl (for GitHub workflow) for $HOST and $OSCC
3
+ # (os/compiler).
4
+
5
+ git clone --depth 1 -b OpenSSL_1_1_1t+quic https://github.com/quictls/openssl
6
+ cd openssl
7
+ ./Configure --cross-compile-prefix="$HOST"- --prefix=$PWD/build "$OSCC"
8
+ make -j$(nproc)
9
+ make install_sw
@@ -0,0 +1,8 @@
1
+ #!/bin/sh -e
2
+ # build patched openssl (for GitHub workflow)
3
+
4
+ git clone --depth 1 -b openssl-"${OPENSSL3_VERSION}" https://github.com/quictls/openssl openssl3
5
+ cd openssl3
6
+ ./config --prefix=$PWD/build --openssldir=/etc/ssl
7
+ make -j"$(nproc 2> /dev/null || sysctl -n hw.ncpu)"
8
+ make install_sw
@@ -0,0 +1,26 @@
1
+ #!/bin/sh -e
2
+ # build picotls (for GitHub workflow)
3
+
4
+ if [ "${OPENSSL}" = "openssl1" ]; then
5
+ WORKSPACE=picotls-openssl1
6
+ else
7
+ WORKSPACE=picotls-openssl3
8
+ fi
9
+
10
+ git clone https://github.com/h2o/picotls/ "${WORKSPACE}"
11
+ cd "${WORKSPACE}"
12
+ git checkout "${PICOTLS_VERSION}"
13
+ git submodule update --init
14
+ mkdir build
15
+ cd build
16
+ if [ "${OPENSSL}" = "openssl1" ]; then
17
+ PKG_CONFIG_PATH=$PWD/../../openssl1/build/lib/pkgconfig
18
+ else
19
+ PKG_CONFIG_PATH=$PWD/../../openssl3/build/lib/pkgconfig:$PWD/../../openssl3/build/lib64/pkgconfig
20
+ fi
21
+
22
+ export PKG_CONFIG_PATH
23
+
24
+ cmake -DCMAKE_POSITION_INDEPENDENT_CODE=ON ..
25
+
26
+ make -j"$(nproc 2> /dev/null || sysctl -n hw.ncpu)"
@@ -0,0 +1,9 @@
1
+ #!/bin/sh -e
2
+ # wolfssl (for GitHub workflow)
3
+
4
+ git clone --depth 1 -b "${WOLFSSL_VERSION}" https://github.com/wolfSSL/wolfssl
5
+ cd wolfssl
6
+ autoreconf -i
7
+ ./configure --prefix=$PWD/build --enable-all --enable-quic
8
+ make -j"$(nproc 2> /dev/null || sysctl -n hw.ncpu)"
9
+ make install
@@ -0,0 +1,8 @@
1
+ #!/bin/sh -e
2
+ # Generate a self-signed certificate for testing purposes.
3
+
4
+ mkdir -p cert
5
+ keyfile=cert/server.key
6
+ certfile=cert/server.crt
7
+
8
+ openssl req -newkey rsa:2048 -x509 -nodes -keyout "$keyfile" -new -out "$certfile" -subj /CN=localhost
@@ -0,0 +1,31 @@
1
+ # Convenience function that checks the availability of certain
2
+ # C or C++ compiler flags and returns valid ones as a string.
3
+
4
+ include(CheckCCompilerFlag)
5
+ include(CheckCXXCompilerFlag)
6
+
7
+ function(extract_valid_c_flags varname)
8
+ set(valid_flags)
9
+ foreach(flag IN LISTS ARGN)
10
+ string(REGEX REPLACE "[^a-zA-Z0-9_]+" "_" flag_var ${flag})
11
+ set(flag_var "C_FLAG_${flag_var}")
12
+ check_c_compiler_flag("${flag}" "${flag_var}")
13
+ if(${flag_var})
14
+ set(valid_flags "${valid_flags} ${flag}")
15
+ endif()
16
+ endforeach()
17
+ set(${varname} "${valid_flags}" PARENT_SCOPE)
18
+ endfunction()
19
+
20
+ function(extract_valid_cxx_flags varname)
21
+ set(valid_flags)
22
+ foreach(flag IN LISTS ARGN)
23
+ string(REGEX REPLACE "[^a-zA-Z0-9_]+" "_" flag_var ${flag})
24
+ set(flag_var "CXX_FLAG_${flag_var}")
25
+ check_cxx_compiler_flag("${flag}" "${flag_var}")
26
+ if(${flag_var})
27
+ set(valid_flags "${valid_flags} ${flag}")
28
+ endif()
29
+ endforeach()
30
+ set(${varname} "${valid_flags}" PARENT_SCOPE)
31
+ endfunction()
@@ -0,0 +1,40 @@
1
+ # - Try to find cunit
2
+ # Once done this will define
3
+ # CUNIT_FOUND - System has cunit
4
+ # CUNIT_INCLUDE_DIRS - The cunit include directories
5
+ # CUNIT_LIBRARIES - The libraries needed to use cunit
6
+
7
+ find_package(PkgConfig QUIET)
8
+ pkg_check_modules(PC_CUNIT QUIET cunit)
9
+
10
+ find_path(CUNIT_INCLUDE_DIR
11
+ NAMES CUnit/CUnit.h
12
+ HINTS ${PC_CUNIT_INCLUDE_DIRS}
13
+ )
14
+ find_library(CUNIT_LIBRARY
15
+ NAMES cunit
16
+ HINTS ${PC_CUNIT_LIBRARY_DIRS}
17
+ )
18
+
19
+ if(CUNIT_INCLUDE_DIR)
20
+ set(_version_regex "^#define[ \t]+CU_VERSION[ \t]+\"([^\"]+)\".*")
21
+ file(STRINGS "${CUNIT_INCLUDE_DIR}/CUnit/CUnit.h"
22
+ CUNIT_VERSION REGEX "${_version_regex}")
23
+ string(REGEX REPLACE "${_version_regex}" "\\1"
24
+ CUNIT_VERSION "${CUNIT_VERSION}")
25
+ unset(_version_regex)
26
+ endif()
27
+
28
+ include(FindPackageHandleStandardArgs)
29
+ # handle the QUIETLY and REQUIRED arguments and set CUNIT_FOUND to TRUE
30
+ # if all listed variables are TRUE and the requested version matches.
31
+ find_package_handle_standard_args(CUnit REQUIRED_VARS
32
+ CUNIT_LIBRARY CUNIT_INCLUDE_DIR
33
+ VERSION_VAR CUNIT_VERSION)
34
+
35
+ if(CUNIT_FOUND)
36
+ set(CUNIT_LIBRARIES ${CUNIT_LIBRARY})
37
+ set(CUNIT_INCLUDE_DIRS ${CUNIT_INCLUDE_DIR})
38
+ endif()
39
+
40
+ mark_as_advanced(CUNIT_INCLUDE_DIR CUNIT_LIBRARY)
@@ -0,0 +1,40 @@
1
+ # - Try to find jemalloc
2
+ # Once done this will define
3
+ # JEMALLOC_FOUND - System has jemalloc
4
+ # JEMALLOC_INCLUDE_DIRS - The jemalloc include directories
5
+ # JEMALLOC_LIBRARIES - The libraries needed to use jemalloc
6
+
7
+ find_package(PkgConfig QUIET)
8
+ pkg_check_modules(PC_JEMALLOC QUIET jemalloc)
9
+
10
+ find_path(JEMALLOC_INCLUDE_DIR
11
+ NAMES jemalloc/jemalloc.h
12
+ HINTS ${PC_JEMALLOC_INCLUDE_DIRS}
13
+ )
14
+ find_library(JEMALLOC_LIBRARY
15
+ NAMES jemalloc
16
+ HINTS ${PC_JEMALLOC_LIBRARY_DIRS}
17
+ )
18
+
19
+ if(JEMALLOC_INCLUDE_DIR)
20
+ set(_version_regex "^#define[ \t]+JEMALLOC_VERSION[ \t]+\"([^\"]+)\".*")
21
+ file(STRINGS "${JEMALLOC_INCLUDE_DIR}/jemalloc/jemalloc.h"
22
+ JEMALLOC_VERSION REGEX "${_version_regex}")
23
+ string(REGEX REPLACE "${_version_regex}" "\\1"
24
+ JEMALLOC_VERSION "${JEMALLOC_VERSION}")
25
+ unset(_version_regex)
26
+ endif()
27
+
28
+ include(FindPackageHandleStandardArgs)
29
+ # handle the QUIETLY and REQUIRED arguments and set JEMALLOC_FOUND to TRUE
30
+ # if all listed variables are TRUE and the requested version matches.
31
+ find_package_handle_standard_args(Jemalloc REQUIRED_VARS
32
+ JEMALLOC_LIBRARY JEMALLOC_INCLUDE_DIR
33
+ VERSION_VAR JEMALLOC_VERSION)
34
+
35
+ if(JEMALLOC_FOUND)
36
+ set(JEMALLOC_LIBRARIES ${JEMALLOC_LIBRARY})
37
+ set(JEMALLOC_INCLUDE_DIRS ${JEMALLOC_INCLUDE_DIR})
38
+ endif()
39
+
40
+ mark_as_advanced(JEMALLOC_INCLUDE_DIR JEMALLOC_LIBRARY)
@@ -0,0 +1,38 @@
1
+ # - Try to find libev
2
+ # Once done this will define
3
+ # LIBEV_FOUND - System has libev
4
+ # LIBEV_INCLUDE_DIRS - The libev include directories
5
+ # LIBEV_LIBRARIES - The libraries needed to use libev
6
+
7
+ find_path(LIBEV_INCLUDE_DIR
8
+ NAMES ev.h
9
+ )
10
+ find_library(LIBEV_LIBRARY
11
+ NAMES ev
12
+ )
13
+
14
+ if(LIBEV_INCLUDE_DIR)
15
+ file(STRINGS "${LIBEV_INCLUDE_DIR}/ev.h"
16
+ LIBEV_VERSION_MAJOR REGEX "^#define[ \t]+EV_VERSION_MAJOR[ \t]+[0-9]+")
17
+ file(STRINGS "${LIBEV_INCLUDE_DIR}/ev.h"
18
+ LIBEV_VERSION_MINOR REGEX "^#define[ \t]+EV_VERSION_MINOR[ \t]+[0-9]+")
19
+ string(REGEX REPLACE "[^0-9]+" "" LIBEV_VERSION_MAJOR "${LIBEV_VERSION_MAJOR}")
20
+ string(REGEX REPLACE "[^0-9]+" "" LIBEV_VERSION_MINOR "${LIBEV_VERSION_MINOR}")
21
+ set(LIBEV_VERSION "${LIBEV_VERSION_MAJOR}.${LIBEV_VERSION_MINOR}")
22
+ unset(LIBEV_VERSION_MINOR)
23
+ unset(LIBEV_VERSION_MAJOR)
24
+ endif()
25
+
26
+ include(FindPackageHandleStandardArgs)
27
+ # handle the QUIETLY and REQUIRED arguments and set LIBEV_FOUND to TRUE
28
+ # if all listed variables are TRUE and the requested version matches.
29
+ find_package_handle_standard_args(Libev REQUIRED_VARS
30
+ LIBEV_LIBRARY LIBEV_INCLUDE_DIR
31
+ VERSION_VAR LIBEV_VERSION)
32
+
33
+ if(LIBEV_FOUND)
34
+ set(LIBEV_LIBRARIES ${LIBEV_LIBRARY})
35
+ set(LIBEV_INCLUDE_DIRS ${LIBEV_INCLUDE_DIR})
36
+ endif()
37
+
38
+ mark_as_advanced(LIBEV_INCLUDE_DIR LIBEV_LIBRARY)
@@ -0,0 +1,41 @@
1
+ # - Try to find libnghttp3
2
+ # Once done this will define
3
+ # LIBNGHTTP3_FOUND - System has libnghttp3
4
+ # LIBNGHTTP3_INCLUDE_DIRS - The libnghttp3 include directories
5
+ # LIBNGHTTP3_LIBRARIES - The libraries needed to use libnghttp3
6
+
7
+ find_package(PkgConfig QUIET)
8
+ pkg_check_modules(PC_LIBNGHTTP3 QUIET libnghttp3)
9
+
10
+ find_path(LIBNGHTTP3_INCLUDE_DIR
11
+ NAMES nghttp3/nghttp3.h
12
+ HINTS ${PC_LIBNGHTTP3_INCLUDE_DIRS}
13
+ )
14
+ find_library(LIBNGHTTP3_LIBRARY
15
+ NAMES nghttp3
16
+ HINTS ${PC_LIBNGHTTP3_LIBRARY_DIRS}
17
+ )
18
+
19
+ if(LIBNGHTTP3_INCLUDE_DIR)
20
+ set(_version_regex "^#define[ \t]+NGHTTP3_VERSION[ \t]+\"([^\"]+)\".*")
21
+ file(STRINGS "${LIBNGHTTP3_INCLUDE_DIR}/nghttp3/version.h"
22
+ LIBNGHTTP3_VERSION REGEX "${_version_regex}")
23
+ string(REGEX REPLACE "${_version_regex}" "\\1"
24
+ LIBNGHTTP3_VERSION "${LIBNGHTTP3_VERSION}")
25
+ unset(_version_regex)
26
+ endif()
27
+
28
+ include(FindPackageHandleStandardArgs)
29
+ # handle the QUIETLY and REQUIRED arguments and set LIBNGHTTP3_FOUND
30
+ # to TRUE if all listed variables are TRUE and the requested version
31
+ # matches.
32
+ find_package_handle_standard_args(Libnghttp3 REQUIRED_VARS
33
+ LIBNGHTTP3_LIBRARY LIBNGHTTP3_INCLUDE_DIR
34
+ VERSION_VAR LIBNGHTTP3_VERSION)
35
+
36
+ if(LIBNGHTTP3_FOUND)
37
+ set(LIBNGHTTP3_LIBRARIES ${LIBNGHTTP3_LIBRARY})
38
+ set(LIBNGHTTP3_INCLUDE_DIRS ${LIBNGHTTP3_INCLUDE_DIR})
39
+ endif()
40
+
41
+ mark_as_advanced(LIBNGHTTP3_INCLUDE_DIR LIBNGHTTP3_LIBRARY)
@@ -0,0 +1,41 @@
1
+ # - Try to find wolfssl
2
+ # Once done this will define
3
+ # WOLFSSL_FOUND - System has wolfssl
4
+ # WOLFSSL_INCLUDE_DIR - The wolfssl include directories
5
+ # WOLFSSL_LIBRARIES - The libraries needed to use wolfssl
6
+
7
+ find_package(PkgConfig QUIET)
8
+ pkg_check_modules(PC_WOLFSSL QUIET wolfssl)
9
+
10
+ find_path(WOLFSSL_INCLUDE_DIR
11
+ NAMES wolfssl/ssl.h
12
+ HINTS ${PC_WOLFSSL_INCLUDE_DIRS}
13
+ )
14
+ find_library(WOLFSSL_LIBRARY
15
+ NAMES wolfssl
16
+ HINTS ${PC_WOLFSSL_LIBRARY_DIRS}
17
+ )
18
+
19
+ if(WOLFSSL_INCLUDE_DIR)
20
+ set(_version_regex "^#define[ \t]+LIBWOLFSSL_VERSION_STRING[ \t]+\"([^\"]+)\".*")
21
+ file(STRINGS "${WOLFSSL_INCLUDE_DIR}/wolfssl/version.h"
22
+ WOLFSSL_VERSION REGEX "${_version_regex}")
23
+ string(REGEX REPLACE "${_version_regex}" "\\1"
24
+ WOLFSSL_VERSION "${WOLFSSL_VERSION}")
25
+ unset(_version_regex)
26
+ endif()
27
+
28
+ include(FindPackageHandleStandardArgs)
29
+ # handle the QUIETLY and REQUIRED arguments and set WOLFSSL_FOUND
30
+ # to TRUE if all listed variables are TRUE and the requested version
31
+ # matches.
32
+ find_package_handle_standard_args(wolfssl REQUIRED_VARS
33
+ WOLFSSL_LIBRARY WOLFSSL_INCLUDE_DIR
34
+ VERSION_VAR WOLFSSL_VERSION)
35
+
36
+ if(WOLFSSL_FOUND)
37
+ set(WOLFSSL_LIBRARIES ${WOLFSSL_LIBRARY})
38
+ set(WOLFSSL_INCLUDE_DIRS ${WOLFSSL_INCLUDE_DIR})
39
+ endif()
40
+
41
+ mark_as_advanced(WOLFSSL_INCLUDE_DIR WOLFSSL_LIBRARY)
@@ -0,0 +1,11 @@
1
+ # Converts a version such as 1.2.255 to 0x0102ff
2
+ function(HexVersion version_hex_var major minor patch)
3
+ math(EXPR version_dec "${major} * 256 * 256 + ${minor} * 256 + ${patch}")
4
+ set(version_hex "0x")
5
+ foreach(i RANGE 5 0 -1)
6
+ math(EXPR num "(${version_dec} >> (4 * ${i})) & 15")
7
+ string(SUBSTRING "0123456789abcdef" ${num} 1 num_hex)
8
+ set(version_hex "${version_hex}${num_hex}")
9
+ endforeach()
10
+ set(${version_hex_var} "${version_hex}" PARENT_SCOPE)
11
+ endfunction()
@@ -0,0 +1,36 @@
1
+
2
+ /* Define to `int' if <sys/types.h> does not define. */
3
+ #cmakedefine ssize_t @ssize_t@
4
+
5
+ /* Define to 1 to enable debug output. */
6
+ #cmakedefine DEBUGBUILD 1
7
+
8
+ /* Define to 1 if you have the <arpa/inet.h> header file. */
9
+ #cmakedefine HAVE_ARPA_INET_H 1
10
+
11
+ /* Define to 1 if you have the <netinet/in.h> header file. */
12
+ #cmakedefine HAVE_NETINET_IN_H 1
13
+
14
+ /* Define to 1 if you have the <stddef.h> header file. */
15
+ #cmakedefine HAVE_STDDEF_H 1
16
+
17
+ /* Define to 1 if you have the <stdint.h> header file. */
18
+ #cmakedefine HAVE_STDINT_H 1
19
+
20
+ /* Define to 1 if you have the <stdlib.h> header file. */
21
+ #cmakedefine HAVE_STDLIB_H 1
22
+
23
+ /* Define to 1 if you have the <string.h> header file. */
24
+ #cmakedefine HAVE_STRING_H 1
25
+
26
+ /* Define to 1 if you have the <unistd.h> header file. */
27
+ #cmakedefine HAVE_UNISTD_H 1
28
+
29
+ /* Define to 1 if you have the <sys/endian.h> header file. */
30
+ #cmakedefine HAVE_SYS_ENDIAN_H 1
31
+
32
+ /* Define to 1 if you have the <endian.h> header file. */
33
+ #cmakedefine HAVE_ENDIAN_H 1
34
+
35
+ /* Define to 1 if you have the `be64toh' function. */
36
+ #cmakedefine HAVE_BE64TOH 1