protocol-quic 0.0.0 → 0.0.1

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 (348) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/ext/rakefile.rb +12 -0
  4. data/ext/ruby-protocol-quic-lock.yml +67 -0
  5. data/ext/teapot.rb +49 -0
  6. data/lib/protocol/quic/version.rb +4 -2
  7. data/lib/protocol/quic.rb +5 -5
  8. data/license.md +1 -1
  9. data/readme.md +55 -0
  10. data/releases.md +3 -0
  11. data.tar.gz.sig +0 -0
  12. metadata +32 -350
  13. metadata.gz.sig +0 -0
  14. data/ext/ngtcp2/AUTHORS +0 -44
  15. data/ext/ngtcp2/CMakeLists.txt +0 -431
  16. data/ext/ngtcp2/CMakeOptions.txt +0 -17
  17. data/ext/ngtcp2/COPYING +0 -22
  18. data/ext/ngtcp2/ChangeLog +0 -0
  19. data/ext/ngtcp2/Makefile.am +0 -60
  20. data/ext/ngtcp2/NEWS +0 -0
  21. data/ext/ngtcp2/README +0 -1
  22. data/ext/ngtcp2/README.rst +0 -258
  23. data/ext/ngtcp2/ci/build_boringssl.sh +0 -10
  24. data/ext/ngtcp2/ci/build_nghttp3.sh +0 -9
  25. data/ext/ngtcp2/ci/build_openssl1.sh +0 -8
  26. data/ext/ngtcp2/ci/build_openssl1_cross.sh +0 -9
  27. data/ext/ngtcp2/ci/build_openssl3.sh +0 -8
  28. data/ext/ngtcp2/ci/build_picotls.sh +0 -26
  29. data/ext/ngtcp2/ci/build_wolfssl.sh +0 -9
  30. data/ext/ngtcp2/ci/gen-certificate.sh +0 -8
  31. data/ext/ngtcp2/cmake/ExtractValidFlags.cmake +0 -31
  32. data/ext/ngtcp2/cmake/FindCUnit.cmake +0 -40
  33. data/ext/ngtcp2/cmake/FindJemalloc.cmake +0 -40
  34. data/ext/ngtcp2/cmake/FindLibev.cmake +0 -38
  35. data/ext/ngtcp2/cmake/FindLibnghttp3.cmake +0 -41
  36. data/ext/ngtcp2/cmake/Findwolfssl.cmake +0 -41
  37. data/ext/ngtcp2/cmake/Version.cmake +0 -11
  38. data/ext/ngtcp2/cmakeconfig.h.in +0 -36
  39. data/ext/ngtcp2/configure.ac +0 -755
  40. data/ext/ngtcp2/crypto/CMakeLists.txt +0 -56
  41. data/ext/ngtcp2/crypto/Makefile.am +0 -49
  42. data/ext/ngtcp2/crypto/boringssl/CMakeLists.txt +0 -64
  43. data/ext/ngtcp2/crypto/boringssl/Makefile.am +0 -39
  44. data/ext/ngtcp2/crypto/boringssl/boringssl.c +0 -630
  45. data/ext/ngtcp2/crypto/boringssl/libngtcp2_crypto_boringssl.pc.in +0 -33
  46. data/ext/ngtcp2/crypto/gnutls/CMakeLists.txt +0 -86
  47. data/ext/ngtcp2/crypto/gnutls/Makefile.am +0 -43
  48. data/ext/ngtcp2/crypto/gnutls/gnutls.c +0 -644
  49. data/ext/ngtcp2/crypto/gnutls/libngtcp2_crypto_gnutls.pc.in +0 -33
  50. data/ext/ngtcp2/crypto/includes/CMakeLists.txt +0 -56
  51. data/ext/ngtcp2/crypto/includes/Makefile.am +0 -45
  52. data/ext/ngtcp2/crypto/includes/ngtcp2/ngtcp2_crypto.h +0 -893
  53. data/ext/ngtcp2/crypto/includes/ngtcp2/ngtcp2_crypto_boringssl.h +0 -104
  54. data/ext/ngtcp2/crypto/includes/ngtcp2/ngtcp2_crypto_gnutls.h +0 -107
  55. data/ext/ngtcp2/crypto/includes/ngtcp2/ngtcp2_crypto_openssl.h +0 -132
  56. data/ext/ngtcp2/crypto/includes/ngtcp2/ngtcp2_crypto_picotls.h +0 -246
  57. data/ext/ngtcp2/crypto/includes/ngtcp2/ngtcp2_crypto_wolfssl.h +0 -106
  58. data/ext/ngtcp2/crypto/openssl/CMakeLists.txt +0 -86
  59. data/ext/ngtcp2/crypto/openssl/Makefile.am +0 -43
  60. data/ext/ngtcp2/crypto/openssl/libngtcp2_crypto_openssl.pc.in +0 -33
  61. data/ext/ngtcp2/crypto/openssl/openssl.c +0 -807
  62. data/ext/ngtcp2/crypto/picotls/CMakeLists.txt +0 -65
  63. data/ext/ngtcp2/crypto/picotls/Makefile.am +0 -39
  64. data/ext/ngtcp2/crypto/picotls/libngtcp2_crypto_picotls.pc.in +0 -33
  65. data/ext/ngtcp2/crypto/picotls/picotls.c +0 -707
  66. data/ext/ngtcp2/crypto/shared.c +0 -1431
  67. data/ext/ngtcp2/crypto/shared.h +0 -350
  68. data/ext/ngtcp2/crypto/wolfssl/CMakeLists.txt +0 -84
  69. data/ext/ngtcp2/crypto/wolfssl/Makefile.am +0 -43
  70. data/ext/ngtcp2/crypto/wolfssl/libngtcp2_crypto_wolfssl.pc.in +0 -33
  71. data/ext/ngtcp2/crypto/wolfssl/wolfssl.c +0 -534
  72. data/ext/ngtcp2/doc/Makefile.am +0 -65
  73. data/ext/ngtcp2/doc/make.bat +0 -35
  74. data/ext/ngtcp2/doc/mkapiref.py +0 -356
  75. data/ext/ngtcp2/doc/source/conf.py.in +0 -94
  76. data/ext/ngtcp2/doc/source/index.rst +0 -22
  77. data/ext/ngtcp2/doc/source/programmers-guide.rst +0 -476
  78. data/ext/ngtcp2/docker/Dockerfile +0 -39
  79. data/ext/ngtcp2/examples/CMakeLists.txt +0 -361
  80. data/ext/ngtcp2/examples/Makefile.am +0 -228
  81. data/ext/ngtcp2/examples/client.cc +0 -3049
  82. data/ext/ngtcp2/examples/client.h +0 -192
  83. data/ext/ngtcp2/examples/client_base.cc +0 -202
  84. data/ext/ngtcp2/examples/client_base.h +0 -213
  85. data/ext/ngtcp2/examples/debug.cc +0 -298
  86. data/ext/ngtcp2/examples/debug.h +0 -124
  87. data/ext/ngtcp2/examples/examplestest.cc +0 -84
  88. data/ext/ngtcp2/examples/gtlssimpleclient.c +0 -720
  89. data/ext/ngtcp2/examples/h09client.cc +0 -2601
  90. data/ext/ngtcp2/examples/h09client.h +0 -196
  91. data/ext/ngtcp2/examples/h09server.cc +0 -3024
  92. data/ext/ngtcp2/examples/h09server.h +0 -237
  93. data/ext/ngtcp2/examples/http.cc +0 -138
  94. data/ext/ngtcp2/examples/http.h +0 -44
  95. data/ext/ngtcp2/examples/network.h +0 -80
  96. data/ext/ngtcp2/examples/server.cc +0 -3731
  97. data/ext/ngtcp2/examples/server.h +0 -256
  98. data/ext/ngtcp2/examples/server_base.cc +0 -58
  99. data/ext/ngtcp2/examples/server_base.h +0 -195
  100. data/ext/ngtcp2/examples/shared.cc +0 -385
  101. data/ext/ngtcp2/examples/shared.h +0 -96
  102. data/ext/ngtcp2/examples/simpleclient.c +0 -683
  103. data/ext/ngtcp2/examples/template.h +0 -71
  104. data/ext/ngtcp2/examples/tests/README.rst +0 -60
  105. data/ext/ngtcp2/examples/tests/__init__.py +0 -0
  106. data/ext/ngtcp2/examples/tests/config.ini.in +0 -32
  107. data/ext/ngtcp2/examples/tests/conftest.py +0 -28
  108. data/ext/ngtcp2/examples/tests/ngtcp2test/__init__.py +0 -6
  109. data/ext/ngtcp2/examples/tests/ngtcp2test/certs.py +0 -476
  110. data/ext/ngtcp2/examples/tests/ngtcp2test/client.py +0 -187
  111. data/ext/ngtcp2/examples/tests/ngtcp2test/env.py +0 -191
  112. data/ext/ngtcp2/examples/tests/ngtcp2test/log.py +0 -101
  113. data/ext/ngtcp2/examples/tests/ngtcp2test/server.py +0 -137
  114. data/ext/ngtcp2/examples/tests/ngtcp2test/tls.py +0 -983
  115. data/ext/ngtcp2/examples/tests/test_01_handshake.py +0 -30
  116. data/ext/ngtcp2/examples/tests/test_02_resume.py +0 -46
  117. data/ext/ngtcp2/examples/tests/test_03_earlydata.py +0 -56
  118. data/ext/ngtcp2/examples/tests/test_04_clientcert.py +0 -57
  119. data/ext/ngtcp2/examples/tests/test_05_ciphers.py +0 -46
  120. data/ext/ngtcp2/examples/tls_client_context.h +0 -52
  121. data/ext/ngtcp2/examples/tls_client_context_boringssl.cc +0 -126
  122. data/ext/ngtcp2/examples/tls_client_context_boringssl.h +0 -49
  123. data/ext/ngtcp2/examples/tls_client_context_gnutls.cc +0 -74
  124. data/ext/ngtcp2/examples/tls_client_context_gnutls.h +0 -50
  125. data/ext/ngtcp2/examples/tls_client_context_openssl.cc +0 -137
  126. data/ext/ngtcp2/examples/tls_client_context_openssl.h +0 -49
  127. data/ext/ngtcp2/examples/tls_client_context_picotls.cc +0 -158
  128. data/ext/ngtcp2/examples/tls_client_context_picotls.h +0 -53
  129. data/ext/ngtcp2/examples/tls_client_context_wolfssl.cc +0 -177
  130. data/ext/ngtcp2/examples/tls_client_context_wolfssl.h +0 -51
  131. data/ext/ngtcp2/examples/tls_client_session.h +0 -52
  132. data/ext/ngtcp2/examples/tls_client_session_boringssl.cc +0 -110
  133. data/ext/ngtcp2/examples/tls_client_session_boringssl.h +0 -52
  134. data/ext/ngtcp2/examples/tls_client_session_gnutls.cc +0 -190
  135. data/ext/ngtcp2/examples/tls_client_session_gnutls.h +0 -52
  136. data/ext/ngtcp2/examples/tls_client_session_openssl.cc +0 -113
  137. data/ext/ngtcp2/examples/tls_client_session_openssl.h +0 -52
  138. data/ext/ngtcp2/examples/tls_client_session_picotls.cc +0 -147
  139. data/ext/ngtcp2/examples/tls_client_session_picotls.h +0 -52
  140. data/ext/ngtcp2/examples/tls_client_session_wolfssl.cc +0 -160
  141. data/ext/ngtcp2/examples/tls_client_session_wolfssl.h +0 -52
  142. data/ext/ngtcp2/examples/tls_server_context.h +0 -52
  143. data/ext/ngtcp2/examples/tls_server_context_boringssl.cc +0 -257
  144. data/ext/ngtcp2/examples/tls_server_context_boringssl.h +0 -54
  145. data/ext/ngtcp2/examples/tls_server_context_gnutls.cc +0 -99
  146. data/ext/ngtcp2/examples/tls_server_context_gnutls.h +0 -59
  147. data/ext/ngtcp2/examples/tls_server_context_openssl.cc +0 -338
  148. data/ext/ngtcp2/examples/tls_server_context_openssl.h +0 -54
  149. data/ext/ngtcp2/examples/tls_server_context_picotls.cc +0 -321
  150. data/ext/ngtcp2/examples/tls_server_context_picotls.h +0 -58
  151. data/ext/ngtcp2/examples/tls_server_context_wolfssl.cc +0 -284
  152. data/ext/ngtcp2/examples/tls_server_context_wolfssl.h +0 -55
  153. data/ext/ngtcp2/examples/tls_server_session.h +0 -52
  154. data/ext/ngtcp2/examples/tls_server_session_boringssl.cc +0 -84
  155. data/ext/ngtcp2/examples/tls_server_session_boringssl.h +0 -47
  156. data/ext/ngtcp2/examples/tls_server_session_gnutls.cc +0 -155
  157. data/ext/ngtcp2/examples/tls_server_session_gnutls.h +0 -46
  158. data/ext/ngtcp2/examples/tls_server_session_openssl.cc +0 -54
  159. data/ext/ngtcp2/examples/tls_server_session_openssl.h +0 -47
  160. data/ext/ngtcp2/examples/tls_server_session_picotls.cc +0 -70
  161. data/ext/ngtcp2/examples/tls_server_session_picotls.h +0 -47
  162. data/ext/ngtcp2/examples/tls_server_session_wolfssl.cc +0 -55
  163. data/ext/ngtcp2/examples/tls_server_session_wolfssl.h +0 -47
  164. data/ext/ngtcp2/examples/tls_session_base_gnutls.cc +0 -87
  165. data/ext/ngtcp2/examples/tls_session_base_gnutls.h +0 -51
  166. data/ext/ngtcp2/examples/tls_session_base_openssl.cc +0 -54
  167. data/ext/ngtcp2/examples/tls_session_base_openssl.h +0 -52
  168. data/ext/ngtcp2/examples/tls_session_base_picotls.cc +0 -56
  169. data/ext/ngtcp2/examples/tls_session_base_picotls.h +0 -54
  170. data/ext/ngtcp2/examples/tls_session_base_wolfssl.cc +0 -54
  171. data/ext/ngtcp2/examples/tls_session_base_wolfssl.h +0 -54
  172. data/ext/ngtcp2/examples/tls_shared_picotls.cc +0 -59
  173. data/ext/ngtcp2/examples/tls_shared_picotls.h +0 -36
  174. data/ext/ngtcp2/examples/util.cc +0 -646
  175. data/ext/ngtcp2/examples/util.h +0 -361
  176. data/ext/ngtcp2/examples/util_gnutls.cc +0 -136
  177. data/ext/ngtcp2/examples/util_openssl.cc +0 -131
  178. data/ext/ngtcp2/examples/util_test.cc +0 -237
  179. data/ext/ngtcp2/examples/util_test.h +0 -45
  180. data/ext/ngtcp2/examples/util_wolfssl.cc +0 -130
  181. data/ext/ngtcp2/fuzz/corpus/decode_frame/ack +0 -0
  182. data/ext/ngtcp2/fuzz/corpus/decode_frame/ack_ecn +0 -0
  183. data/ext/ngtcp2/fuzz/corpus/decode_frame/connection_close +0 -0
  184. data/ext/ngtcp2/fuzz/corpus/decode_frame/crypto +0 -1
  185. data/ext/ngtcp2/fuzz/corpus/decode_frame/data_blocked +0 -1
  186. data/ext/ngtcp2/fuzz/corpus/decode_frame/datagram +0 -1
  187. data/ext/ngtcp2/fuzz/corpus/decode_frame/datagram_len +0 -1
  188. data/ext/ngtcp2/fuzz/corpus/decode_frame/max_data +0 -1
  189. data/ext/ngtcp2/fuzz/corpus/decode_frame/max_stream_data +0 -0
  190. data/ext/ngtcp2/fuzz/corpus/decode_frame/max_streams +0 -0
  191. data/ext/ngtcp2/fuzz/corpus/decode_frame/new_connection_id +0 -1
  192. data/ext/ngtcp2/fuzz/corpus/decode_frame/new_token +0 -1
  193. data/ext/ngtcp2/fuzz/corpus/decode_frame/path_challenge +0 -1
  194. data/ext/ngtcp2/fuzz/corpus/decode_frame/path_response +0 -1
  195. data/ext/ngtcp2/fuzz/corpus/decode_frame/reset_stream +0 -0
  196. data/ext/ngtcp2/fuzz/corpus/decode_frame/retire_connection_id +0 -1
  197. data/ext/ngtcp2/fuzz/corpus/decode_frame/stop_sending +0 -0
  198. data/ext/ngtcp2/fuzz/corpus/decode_frame/stream +0 -0
  199. data/ext/ngtcp2/fuzz/corpus/decode_frame/stream_data_blocked +0 -0
  200. data/ext/ngtcp2/fuzz/corpus/decode_frame/stream_len +0 -0
  201. data/ext/ngtcp2/fuzz/corpus/decode_frame/streams_blocked +0 -0
  202. data/ext/ngtcp2/fuzz/corpus/ksl/random +0 -0
  203. data/ext/ngtcp2/fuzz/decode_frame.cc +0 -25
  204. data/ext/ngtcp2/fuzz/ksl.cc +0 -77
  205. data/ext/ngtcp2/interop/Dockerfile +0 -39
  206. data/ext/ngtcp2/interop/run_endpoint.sh +0 -93
  207. data/ext/ngtcp2/lib/CMakeLists.txt +0 -110
  208. data/ext/ngtcp2/lib/Makefile.am +0 -122
  209. data/ext/ngtcp2/lib/includes/CMakeLists.txt +0 -4
  210. data/ext/ngtcp2/lib/includes/Makefile.am +0 -25
  211. data/ext/ngtcp2/lib/includes/ngtcp2/ngtcp2.h +0 -5843
  212. data/ext/ngtcp2/lib/includes/ngtcp2/version.h.in +0 -51
  213. data/ext/ngtcp2/lib/libngtcp2.pc.in +0 -33
  214. data/ext/ngtcp2/lib/ngtcp2_acktr.c +0 -335
  215. data/ext/ngtcp2/lib/ngtcp2_acktr.h +0 -221
  216. data/ext/ngtcp2/lib/ngtcp2_addr.c +0 -117
  217. data/ext/ngtcp2/lib/ngtcp2_addr.h +0 -69
  218. data/ext/ngtcp2/lib/ngtcp2_balloc.c +0 -90
  219. data/ext/ngtcp2/lib/ngtcp2_balloc.h +0 -91
  220. data/ext/ngtcp2/lib/ngtcp2_bbr.c +0 -693
  221. data/ext/ngtcp2/lib/ngtcp2_bbr.h +0 -157
  222. data/ext/ngtcp2/lib/ngtcp2_bbr2.c +0 -1490
  223. data/ext/ngtcp2/lib/ngtcp2_bbr2.h +0 -149
  224. data/ext/ngtcp2/lib/ngtcp2_buf.c +0 -56
  225. data/ext/ngtcp2/lib/ngtcp2_buf.h +0 -108
  226. data/ext/ngtcp2/lib/ngtcp2_cc.c +0 -616
  227. data/ext/ngtcp2/lib/ngtcp2_cc.h +0 -422
  228. data/ext/ngtcp2/lib/ngtcp2_cid.c +0 -147
  229. data/ext/ngtcp2/lib/ngtcp2_cid.h +0 -175
  230. data/ext/ngtcp2/lib/ngtcp2_conn.c +0 -13731
  231. data/ext/ngtcp2/lib/ngtcp2_conn.h +0 -1119
  232. data/ext/ngtcp2/lib/ngtcp2_conn_stat.h +0 -131
  233. data/ext/ngtcp2/lib/ngtcp2_conv.c +0 -291
  234. data/ext/ngtcp2/lib/ngtcp2_conv.h +0 -208
  235. data/ext/ngtcp2/lib/ngtcp2_crypto.c +0 -895
  236. data/ext/ngtcp2/lib/ngtcp2_crypto.h +0 -148
  237. data/ext/ngtcp2/lib/ngtcp2_err.c +0 -154
  238. data/ext/ngtcp2/lib/ngtcp2_err.h +0 -34
  239. data/ext/ngtcp2/lib/ngtcp2_gaptr.c +0 -167
  240. data/ext/ngtcp2/lib/ngtcp2_gaptr.h +0 -98
  241. data/ext/ngtcp2/lib/ngtcp2_idtr.c +0 -79
  242. data/ext/ngtcp2/lib/ngtcp2_idtr.h +0 -89
  243. data/ext/ngtcp2/lib/ngtcp2_ksl.c +0 -819
  244. data/ext/ngtcp2/lib/ngtcp2_ksl.h +0 -345
  245. data/ext/ngtcp2/lib/ngtcp2_log.c +0 -822
  246. data/ext/ngtcp2/lib/ngtcp2_log.h +0 -123
  247. data/ext/ngtcp2/lib/ngtcp2_macro.h +0 -58
  248. data/ext/ngtcp2/lib/ngtcp2_map.c +0 -336
  249. data/ext/ngtcp2/lib/ngtcp2_map.h +0 -136
  250. data/ext/ngtcp2/lib/ngtcp2_mem.c +0 -113
  251. data/ext/ngtcp2/lib/ngtcp2_mem.h +0 -72
  252. data/ext/ngtcp2/lib/ngtcp2_net.h +0 -136
  253. data/ext/ngtcp2/lib/ngtcp2_objalloc.c +0 -40
  254. data/ext/ngtcp2/lib/ngtcp2_objalloc.h +0 -140
  255. data/ext/ngtcp2/lib/ngtcp2_opl.c +0 -46
  256. data/ext/ngtcp2/lib/ngtcp2_opl.h +0 -65
  257. data/ext/ngtcp2/lib/ngtcp2_path.c +0 -77
  258. data/ext/ngtcp2/lib/ngtcp2_path.h +0 -49
  259. data/ext/ngtcp2/lib/ngtcp2_pkt.c +0 -2527
  260. data/ext/ngtcp2/lib/ngtcp2_pkt.h +0 -1235
  261. data/ext/ngtcp2/lib/ngtcp2_pmtud.c +0 -160
  262. data/ext/ngtcp2/lib/ngtcp2_pmtud.h +0 -123
  263. data/ext/ngtcp2/lib/ngtcp2_ppe.c +0 -230
  264. data/ext/ngtcp2/lib/ngtcp2_ppe.h +0 -153
  265. data/ext/ngtcp2/lib/ngtcp2_pq.c +0 -164
  266. data/ext/ngtcp2/lib/ngtcp2_pq.h +0 -126
  267. data/ext/ngtcp2/lib/ngtcp2_pv.c +0 -172
  268. data/ext/ngtcp2/lib/ngtcp2_pv.h +0 -194
  269. data/ext/ngtcp2/lib/ngtcp2_qlog.c +0 -1219
  270. data/ext/ngtcp2/lib/ngtcp2_qlog.h +0 -161
  271. data/ext/ngtcp2/lib/ngtcp2_range.c +0 -61
  272. data/ext/ngtcp2/lib/ngtcp2_range.h +0 -80
  273. data/ext/ngtcp2/lib/ngtcp2_rcvry.h +0 -40
  274. data/ext/ngtcp2/lib/ngtcp2_ringbuf.c +0 -121
  275. data/ext/ngtcp2/lib/ngtcp2_ringbuf.h +0 -132
  276. data/ext/ngtcp2/lib/ngtcp2_rob.c +0 -319
  277. data/ext/ngtcp2/lib/ngtcp2_rob.h +0 -197
  278. data/ext/ngtcp2/lib/ngtcp2_rst.c +0 -138
  279. data/ext/ngtcp2/lib/ngtcp2_rst.h +0 -86
  280. data/ext/ngtcp2/lib/ngtcp2_rtb.c +0 -1676
  281. data/ext/ngtcp2/lib/ngtcp2_rtb.h +0 -468
  282. data/ext/ngtcp2/lib/ngtcp2_str.c +0 -233
  283. data/ext/ngtcp2/lib/ngtcp2_str.h +0 -94
  284. data/ext/ngtcp2/lib/ngtcp2_strm.c +0 -698
  285. data/ext/ngtcp2/lib/ngtcp2_strm.h +0 -310
  286. data/ext/ngtcp2/lib/ngtcp2_unreachable.c +0 -71
  287. data/ext/ngtcp2/lib/ngtcp2_unreachable.h +0 -46
  288. data/ext/ngtcp2/lib/ngtcp2_vec.c +0 -243
  289. data/ext/ngtcp2/lib/ngtcp2_vec.h +0 -120
  290. data/ext/ngtcp2/lib/ngtcp2_version.c +0 -39
  291. data/ext/ngtcp2/lib/ngtcp2_window_filter.c +0 -99
  292. data/ext/ngtcp2/lib/ngtcp2_window_filter.h +0 -65
  293. data/ext/ngtcp2/m4/ax_check_compile_flag.m4 +0 -74
  294. data/ext/ngtcp2/m4/ax_cxx_compile_stdcxx.m4 +0 -1009
  295. data/ext/ngtcp2/tests/CMakeLists.txt +0 -68
  296. data/ext/ngtcp2/tests/Makefile.am +0 -94
  297. data/ext/ngtcp2/tests/main.c +0 -358
  298. data/ext/ngtcp2/tests/ngtcp2_acktr_test.c +0 -367
  299. data/ext/ngtcp2/tests/ngtcp2_acktr_test.h +0 -37
  300. data/ext/ngtcp2/tests/ngtcp2_conn_test.c +0 -9821
  301. data/ext/ngtcp2/tests/ngtcp2_conn_test.h +0 -104
  302. data/ext/ngtcp2/tests/ngtcp2_conv_test.c +0 -430
  303. data/ext/ngtcp2/tests/ngtcp2_conv_test.h +0 -46
  304. data/ext/ngtcp2/tests/ngtcp2_crypto_test.c +0 -667
  305. data/ext/ngtcp2/tests/ngtcp2_crypto_test.h +0 -35
  306. data/ext/ngtcp2/tests/ngtcp2_gaptr_test.c +0 -127
  307. data/ext/ngtcp2/tests/ngtcp2_gaptr_test.h +0 -36
  308. data/ext/ngtcp2/tests/ngtcp2_idtr_test.c +0 -79
  309. data/ext/ngtcp2/tests/ngtcp2_idtr_test.h +0 -34
  310. data/ext/ngtcp2/tests/ngtcp2_ksl_test.c +0 -502
  311. data/ext/ngtcp2/tests/ngtcp2_ksl_test.h +0 -39
  312. data/ext/ngtcp2/tests/ngtcp2_map_test.c +0 -206
  313. data/ext/ngtcp2/tests/ngtcp2_map_test.h +0 -38
  314. data/ext/ngtcp2/tests/ngtcp2_pkt_test.c +0 -1645
  315. data/ext/ngtcp2/tests/ngtcp2_pkt_test.h +0 -68
  316. data/ext/ngtcp2/tests/ngtcp2_pmtud_test.c +0 -153
  317. data/ext/ngtcp2/tests/ngtcp2_pmtud_test.h +0 -34
  318. data/ext/ngtcp2/tests/ngtcp2_pv_test.c +0 -129
  319. data/ext/ngtcp2/tests/ngtcp2_pv_test.h +0 -35
  320. data/ext/ngtcp2/tests/ngtcp2_range_test.c +0 -105
  321. data/ext/ngtcp2/tests/ngtcp2_range_test.h +0 -36
  322. data/ext/ngtcp2/tests/ngtcp2_ringbuf_test.c +0 -91
  323. data/ext/ngtcp2/tests/ngtcp2_ringbuf_test.h +0 -35
  324. data/ext/ngtcp2/tests/ngtcp2_rob_test.c +0 -552
  325. data/ext/ngtcp2/tests/ngtcp2_rob_test.h +0 -37
  326. data/ext/ngtcp2/tests/ngtcp2_rtb_test.c +0 -470
  327. data/ext/ngtcp2/tests/ngtcp2_rtb_test.h +0 -38
  328. data/ext/ngtcp2/tests/ngtcp2_str_test.c +0 -96
  329. data/ext/ngtcp2/tests/ngtcp2_str_test.h +0 -36
  330. data/ext/ngtcp2/tests/ngtcp2_strm_test.c +0 -575
  331. data/ext/ngtcp2/tests/ngtcp2_strm_test.h +0 -36
  332. data/ext/ngtcp2/tests/ngtcp2_test_helper.c +0 -404
  333. data/ext/ngtcp2/tests/ngtcp2_test_helper.h +0 -191
  334. data/ext/ngtcp2/tests/ngtcp2_vec_test.c +0 -426
  335. data/ext/ngtcp2/tests/ngtcp2_vec_test.h +0 -36
  336. data/ext/ngtcp2/third-party/CMakeLists.txt +0 -34
  337. data/ext/ngtcp2/third-party/Makefile.am +0 -31
  338. data/ext/ngtcp2/third-party/http-parser/AUTHORS +0 -68
  339. data/ext/ngtcp2/third-party/http-parser/LICENSE-MIT +0 -23
  340. data/ext/ngtcp2/third-party/http-parser/Makefile +0 -157
  341. data/ext/ngtcp2/third-party/http-parser/README.md +0 -246
  342. data/ext/ngtcp2/third-party/http-parser/bench.c +0 -111
  343. data/ext/ngtcp2/third-party/http-parser/contrib/parsertrace.c +0 -160
  344. data/ext/ngtcp2/third-party/http-parser/contrib/url_parser.c +0 -47
  345. data/ext/ngtcp2/third-party/http-parser/http_parser.c +0 -2419
  346. data/ext/ngtcp2/third-party/http-parser/http_parser.gyp +0 -111
  347. data/ext/ngtcp2/third-party/http-parser/http_parser.h +0 -431
  348. data/ext/ngtcp2/third-party/http-parser/test.c +0 -4411
@@ -1,1219 +0,0 @@
1
- /*
2
- * ngtcp2
3
- *
4
- * Copyright (c) 2019 ngtcp2 contributors
5
- *
6
- * Permission is hereby granted, free of charge, to any person obtaining
7
- * a copy of this software and associated documentation files (the
8
- * "Software"), to deal in the Software without restriction, including
9
- * without limitation the rights to use, copy, modify, merge, publish,
10
- * distribute, sublicense, and/or sell copies of the Software, and to
11
- * permit persons to whom the Software is furnished to do so, subject to
12
- * the following conditions:
13
- *
14
- * The above copyright notice and this permission notice shall be
15
- * included in all copies or substantial portions of the Software.
16
- *
17
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
18
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
19
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
20
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
21
- * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
22
- * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
23
- * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
24
- */
25
- #include "ngtcp2_qlog.h"
26
-
27
- #include <assert.h>
28
-
29
- #include "ngtcp2_str.h"
30
- #include "ngtcp2_vec.h"
31
- #include "ngtcp2_conv.h"
32
- #include "ngtcp2_net.h"
33
- #include "ngtcp2_unreachable.h"
34
- #include "ngtcp2_conn_stat.h"
35
-
36
- void ngtcp2_qlog_init(ngtcp2_qlog *qlog, ngtcp2_qlog_write write,
37
- ngtcp2_tstamp ts, void *user_data) {
38
- qlog->write = write;
39
- qlog->ts = qlog->last_ts = ts;
40
- qlog->user_data = user_data;
41
- }
42
-
43
- #define write_verbatim(DEST, S) ngtcp2_cpymem((DEST), (S), sizeof(S) - 1)
44
-
45
- static uint8_t *write_string_impl(uint8_t *p, const uint8_t *data,
46
- size_t datalen) {
47
- *p++ = '"';
48
- if (datalen) {
49
- p = ngtcp2_cpymem(p, data, datalen);
50
- }
51
- *p++ = '"';
52
- return p;
53
- }
54
-
55
- #define write_string(DEST, S) \
56
- write_string_impl((DEST), (const uint8_t *)(S), sizeof(S) - 1)
57
-
58
- #define NGTCP2_LOWER_XDIGITS "0123456789abcdef"
59
-
60
- static uint8_t *write_hex(uint8_t *p, const uint8_t *data, size_t datalen) {
61
- const uint8_t *b = data, *end = data + datalen;
62
- *p++ = '"';
63
- for (; b != end; ++b) {
64
- *p++ = (uint8_t)NGTCP2_LOWER_XDIGITS[*b >> 4];
65
- *p++ = (uint8_t)NGTCP2_LOWER_XDIGITS[*b & 0xf];
66
- }
67
- *p++ = '"';
68
- return p;
69
- }
70
-
71
- static uint8_t *write_cid(uint8_t *p, const ngtcp2_cid *cid) {
72
- return write_hex(p, cid->data, cid->datalen);
73
- }
74
-
75
- static uint8_t *write_number(uint8_t *p, uint64_t n) {
76
- size_t nlen = 0;
77
- uint64_t t;
78
- uint8_t *res;
79
-
80
- if (n == 0) {
81
- *p++ = '0';
82
- return p;
83
- }
84
- for (t = n; t; t /= 10, ++nlen)
85
- ;
86
- p += nlen;
87
- res = p;
88
- for (; n; n /= 10) {
89
- *--p = (uint8_t)((n % 10) + '0');
90
- }
91
- return res;
92
- }
93
-
94
- static uint8_t *write_tstamp(uint8_t *p, ngtcp2_tstamp ts) {
95
- return write_number(p, ts / NGTCP2_MILLISECONDS);
96
- }
97
-
98
- static uint8_t *write_duration(uint8_t *p, ngtcp2_duration duration) {
99
- return write_number(p, duration / NGTCP2_MILLISECONDS);
100
- }
101
-
102
- static uint8_t *write_bool(uint8_t *p, int b) {
103
- if (b) {
104
- return ngtcp2_cpymem(p, "true", sizeof("true") - 1);
105
- }
106
- return ngtcp2_cpymem(p, "false", sizeof("false") - 1);
107
- }
108
-
109
- static uint8_t *write_pair_impl(uint8_t *p, const uint8_t *name, size_t namelen,
110
- const ngtcp2_vec *value) {
111
- p = write_string_impl(p, name, namelen);
112
- *p++ = ':';
113
- return write_string_impl(p, value->base, value->len);
114
- }
115
-
116
- #define write_pair(DEST, NAME, VALUE) \
117
- write_pair_impl((DEST), (const uint8_t *)(NAME), sizeof(NAME) - 1, (VALUE))
118
-
119
- static uint8_t *write_pair_hex_impl(uint8_t *p, const uint8_t *name,
120
- size_t namelen, const uint8_t *value,
121
- size_t valuelen) {
122
- p = write_string_impl(p, name, namelen);
123
- *p++ = ':';
124
- return write_hex(p, value, valuelen);
125
- }
126
-
127
- #define write_pair_hex(DEST, NAME, VALUE, VALUELEN) \
128
- write_pair_hex_impl((DEST), (const uint8_t *)(NAME), sizeof(NAME) - 1, \
129
- (VALUE), (VALUELEN))
130
-
131
- static uint8_t *write_pair_number_impl(uint8_t *p, const uint8_t *name,
132
- size_t namelen, uint64_t value) {
133
- p = write_string_impl(p, name, namelen);
134
- *p++ = ':';
135
- return write_number(p, value);
136
- }
137
-
138
- #define write_pair_number(DEST, NAME, VALUE) \
139
- write_pair_number_impl((DEST), (const uint8_t *)(NAME), sizeof(NAME) - 1, \
140
- (VALUE))
141
-
142
- static uint8_t *write_pair_duration_impl(uint8_t *p, const uint8_t *name,
143
- size_t namelen,
144
- ngtcp2_duration duration) {
145
- p = write_string_impl(p, name, namelen);
146
- *p++ = ':';
147
- return write_duration(p, duration);
148
- }
149
-
150
- #define write_pair_duration(DEST, NAME, VALUE) \
151
- write_pair_duration_impl((DEST), (const uint8_t *)(NAME), sizeof(NAME) - 1, \
152
- (VALUE))
153
-
154
- static uint8_t *write_pair_tstamp_impl(uint8_t *p, const uint8_t *name,
155
- size_t namelen, ngtcp2_tstamp ts) {
156
- p = write_string_impl(p, name, namelen);
157
- *p++ = ':';
158
- return write_tstamp(p, ts);
159
- }
160
-
161
- #define write_pair_tstamp(DEST, NAME, VALUE) \
162
- write_pair_tstamp_impl((DEST), (const uint8_t *)(NAME), sizeof(NAME) - 1, \
163
- (VALUE))
164
-
165
- static uint8_t *write_pair_bool_impl(uint8_t *p, const uint8_t *name,
166
- size_t namelen, int b) {
167
- p = write_string_impl(p, name, namelen);
168
- *p++ = ':';
169
- return write_bool(p, b);
170
- }
171
-
172
- #define write_pair_bool(DEST, NAME, VALUE) \
173
- write_pair_bool_impl((DEST), (const uint8_t *)(NAME), sizeof(NAME) - 1, \
174
- (VALUE))
175
-
176
- static uint8_t *write_pair_cid_impl(uint8_t *p, const uint8_t *name,
177
- size_t namelen, const ngtcp2_cid *cid) {
178
- p = write_string_impl(p, name, namelen);
179
- *p++ = ':';
180
- return write_cid(p, cid);
181
- }
182
-
183
- #define write_pair_cid(DEST, NAME, VALUE) \
184
- write_pair_cid_impl((DEST), (const uint8_t *)(NAME), sizeof(NAME) - 1, \
185
- (VALUE))
186
-
187
- #define ngtcp2_make_vec_lit(S) \
188
- { (uint8_t *)(S), sizeof((S)) - 1 }
189
-
190
- static uint8_t *write_common_fields(uint8_t *p, const ngtcp2_cid *odcid) {
191
- p = write_verbatim(
192
- p, "\"common_fields\":{\"protocol_type\":[\"QUIC\"],\"time_format\":"
193
- "\"relative\",\"reference_time\":0,\"group_id\":");
194
- p = write_cid(p, odcid);
195
- *p++ = '}';
196
- return p;
197
- }
198
-
199
- static uint8_t *write_trace(uint8_t *p, int server, const ngtcp2_cid *odcid) {
200
- p = write_verbatim(
201
- p, "\"trace\":{\"vantage_point\":{\"name\":\"ngtcp2\",\"type\":");
202
- if (server) {
203
- p = write_string(p, "server");
204
- } else {
205
- p = write_string(p, "client");
206
- }
207
- p = write_verbatim(p, "},");
208
- p = write_common_fields(p, odcid);
209
- *p++ = '}';
210
- return p;
211
- }
212
-
213
- void ngtcp2_qlog_start(ngtcp2_qlog *qlog, const ngtcp2_cid *odcid, int server) {
214
- uint8_t buf[1024];
215
- uint8_t *p = buf;
216
-
217
- if (!qlog->write) {
218
- return;
219
- }
220
-
221
- p = write_verbatim(
222
- p, "\x1e{\"qlog_format\":\"JSON-SEQ\",\"qlog_version\":\"0.3\",");
223
- p = write_trace(p, server, odcid);
224
- p = write_verbatim(p, "}\n");
225
-
226
- qlog->write(qlog->user_data, NGTCP2_QLOG_WRITE_FLAG_NONE, buf,
227
- (size_t)(p - buf));
228
- }
229
-
230
- void ngtcp2_qlog_end(ngtcp2_qlog *qlog) {
231
- uint8_t buf[1] = {0};
232
-
233
- if (!qlog->write) {
234
- return;
235
- }
236
-
237
- qlog->write(qlog->user_data, NGTCP2_QLOG_WRITE_FLAG_FIN, &buf, 0);
238
- }
239
-
240
- static ngtcp2_vec vec_pkt_type_initial = ngtcp2_make_vec_lit("initial");
241
- static ngtcp2_vec vec_pkt_type_handshake = ngtcp2_make_vec_lit("handshake");
242
- static ngtcp2_vec vec_pkt_type_0rtt = ngtcp2_make_vec_lit("0RTT");
243
- static ngtcp2_vec vec_pkt_type_1rtt = ngtcp2_make_vec_lit("1RTT");
244
- static ngtcp2_vec vec_pkt_type_retry = ngtcp2_make_vec_lit("retry");
245
- static ngtcp2_vec vec_pkt_type_version_negotiation =
246
- ngtcp2_make_vec_lit("version_negotiation");
247
- static ngtcp2_vec vec_pkt_type_stateless_reset =
248
- ngtcp2_make_vec_lit("stateless_reset");
249
- static ngtcp2_vec vec_pkt_type_unknown = ngtcp2_make_vec_lit("unknown");
250
-
251
- static const ngtcp2_vec *qlog_pkt_type(const ngtcp2_pkt_hd *hd) {
252
- if (hd->flags & NGTCP2_PKT_FLAG_LONG_FORM) {
253
- switch (hd->type) {
254
- case NGTCP2_PKT_INITIAL:
255
- return &vec_pkt_type_initial;
256
- case NGTCP2_PKT_HANDSHAKE:
257
- return &vec_pkt_type_handshake;
258
- case NGTCP2_PKT_0RTT:
259
- return &vec_pkt_type_0rtt;
260
- case NGTCP2_PKT_RETRY:
261
- return &vec_pkt_type_retry;
262
- default:
263
- return &vec_pkt_type_unknown;
264
- }
265
- }
266
-
267
- switch (hd->type) {
268
- case NGTCP2_PKT_VERSION_NEGOTIATION:
269
- return &vec_pkt_type_version_negotiation;
270
- case NGTCP2_PKT_STATELESS_RESET:
271
- return &vec_pkt_type_stateless_reset;
272
- case NGTCP2_PKT_1RTT:
273
- return &vec_pkt_type_1rtt;
274
- default:
275
- return &vec_pkt_type_unknown;
276
- }
277
- }
278
-
279
- static uint8_t *write_pkt_hd(uint8_t *p, const ngtcp2_pkt_hd *hd) {
280
- /*
281
- * {"packet_type":"version_negotiation","packet_number":"0000000000000000000","token":{"data":""}}
282
- */
283
- #define NGTCP2_QLOG_PKT_HD_OVERHEAD 95
284
-
285
- *p++ = '{';
286
- p = write_pair(p, "packet_type", qlog_pkt_type(hd));
287
- *p++ = ',';
288
- p = write_pair_number(p, "packet_number", (uint64_t)hd->pkt_num);
289
- if (hd->type == NGTCP2_PKT_INITIAL && hd->tokenlen) {
290
- p = write_verbatim(p, ",\"token\":{");
291
- p = write_pair_hex(p, "data", hd->token, hd->tokenlen);
292
- *p++ = '}';
293
- }
294
- /* TODO Write DCIL and DCID */
295
- /* TODO Write SCIL and SCID */
296
- *p++ = '}';
297
- return p;
298
- }
299
-
300
- static uint8_t *write_padding_frame(uint8_t *p, const ngtcp2_padding *fr) {
301
- (void)fr;
302
-
303
- /* {"frame_type":"padding"} */
304
- #define NGTCP2_QLOG_PADDING_FRAME_OVERHEAD 24
305
-
306
- return write_verbatim(p, "{\"frame_type\":\"padding\"}");
307
- }
308
-
309
- static uint8_t *write_ping_frame(uint8_t *p, const ngtcp2_ping *fr) {
310
- (void)fr;
311
-
312
- /* {"frame_type":"ping"} */
313
- #define NGTCP2_QLOG_PING_FRAME_OVERHEAD 21
314
-
315
- return write_verbatim(p, "{\"frame_type\":\"ping\"}");
316
- }
317
-
318
- static uint8_t *write_ack_frame(uint8_t *p, const ngtcp2_ack *fr) {
319
- int64_t largest_ack, min_ack;
320
- size_t i;
321
- const ngtcp2_ack_range *range;
322
-
323
- /*
324
- * {"frame_type":"ack","ack_delay":0000000000000000000,"acked_ranges":[]}
325
- *
326
- * each range:
327
- * [0000000000000000000,0000000000000000000],
328
- *
329
- * ecn:
330
- * ,"ect1":0000000000000000000,"ect0":0000000000000000000,"ce":0000000000000000000
331
- */
332
- #define NGTCP2_QLOG_ACK_FRAME_BASE_OVERHEAD 70
333
- #define NGTCP2_QLOG_ACK_FRAME_RANGE_OVERHEAD 42
334
- #define NGTCP2_QLOG_ACK_FRAME_ECN_OVERHEAD 79
335
-
336
- p = write_verbatim(p, "{\"frame_type\":\"ack\",");
337
- p = write_pair_duration(p, "ack_delay", fr->ack_delay_unscaled);
338
- p = write_verbatim(p, ",\"acked_ranges\":[");
339
-
340
- largest_ack = fr->largest_ack;
341
- min_ack = fr->largest_ack - (int64_t)fr->first_ack_range;
342
-
343
- *p++ = '[';
344
- p = write_number(p, (uint64_t)min_ack);
345
- if (largest_ack != min_ack) {
346
- *p++ = ',';
347
- p = write_number(p, (uint64_t)largest_ack);
348
- }
349
- *p++ = ']';
350
-
351
- for (i = 0; i < fr->rangecnt; ++i) {
352
- range = &fr->ranges[i];
353
- largest_ack = min_ack - (int64_t)range->gap - 2;
354
- min_ack = largest_ack - (int64_t)range->len;
355
- *p++ = ',';
356
- *p++ = '[';
357
- p = write_number(p, (uint64_t)min_ack);
358
- if (largest_ack != min_ack) {
359
- *p++ = ',';
360
- p = write_number(p, (uint64_t)largest_ack);
361
- }
362
- *p++ = ']';
363
- }
364
-
365
- *p++ = ']';
366
-
367
- if (fr->type == NGTCP2_FRAME_ACK_ECN) {
368
- *p++ = ',';
369
- p = write_pair_number(p, "ect1", fr->ecn.ect1);
370
- *p++ = ',';
371
- p = write_pair_number(p, "ect0", fr->ecn.ect0);
372
- *p++ = ',';
373
- p = write_pair_number(p, "ce", fr->ecn.ce);
374
- }
375
-
376
- *p++ = '}';
377
-
378
- return p;
379
- }
380
-
381
- static uint8_t *write_reset_stream_frame(uint8_t *p,
382
- const ngtcp2_reset_stream *fr) {
383
- /*
384
- * {"frame_type":"reset_stream","stream_id":0000000000000000000,"error_code":0000000000000000000,"final_size":0000000000000000000}
385
- */
386
- #define NGTCP2_QLOG_RESET_STREAM_FRAME_OVERHEAD 127
387
-
388
- p = write_verbatim(p, "{\"frame_type\":\"reset_stream\",");
389
- p = write_pair_number(p, "stream_id", (uint64_t)fr->stream_id);
390
- *p++ = ',';
391
- p = write_pair_number(p, "error_code", fr->app_error_code);
392
- *p++ = ',';
393
- p = write_pair_number(p, "final_size", fr->final_size);
394
- *p++ = '}';
395
-
396
- return p;
397
- }
398
-
399
- static uint8_t *write_stop_sending_frame(uint8_t *p,
400
- const ngtcp2_stop_sending *fr) {
401
- /*
402
- * {"frame_type":"stop_sending","stream_id":0000000000000000000,"error_code":0000000000000000000}
403
- */
404
- #define NGTCP2_QLOG_STOP_SENDING_FRAME_OVERHEAD 94
405
-
406
- p = write_verbatim(p, "{\"frame_type\":\"stop_sending\",");
407
- p = write_pair_number(p, "stream_id", (uint64_t)fr->stream_id);
408
- *p++ = ',';
409
- p = write_pair_number(p, "error_code", fr->app_error_code);
410
- *p++ = '}';
411
-
412
- return p;
413
- }
414
-
415
- static uint8_t *write_crypto_frame(uint8_t *p, const ngtcp2_crypto *fr) {
416
- /*
417
- * {"frame_type":"crypto","offset":0000000000000000000,"length":0000000000000000000}
418
- */
419
- #define NGTCP2_QLOG_CRYPTO_FRAME_OVERHEAD 81
420
-
421
- p = write_verbatim(p, "{\"frame_type\":\"crypto\",");
422
- p = write_pair_number(p, "offset", fr->offset);
423
- *p++ = ',';
424
- p = write_pair_number(p, "length", ngtcp2_vec_len(fr->data, fr->datacnt));
425
- *p++ = '}';
426
-
427
- return p;
428
- }
429
-
430
- static uint8_t *write_new_token_frame(uint8_t *p, const ngtcp2_new_token *fr) {
431
- /*
432
- * {"frame_type":"new_token","length":0000000000000000000,"token":{"data":""}}
433
- */
434
- #define NGTCP2_QLOG_NEW_TOKEN_FRAME_OVERHEAD 75
435
-
436
- p = write_verbatim(p, "{\"frame_type\":\"new_token\",");
437
- p = write_pair_number(p, "length", fr->tokenlen);
438
- p = write_verbatim(p, ",\"token\":{");
439
- p = write_pair_hex(p, "data", fr->token, fr->tokenlen);
440
- *p++ = '}';
441
- *p++ = '}';
442
-
443
- return p;
444
- }
445
-
446
- static uint8_t *write_stream_frame(uint8_t *p, const ngtcp2_stream *fr) {
447
- /*
448
- * {"frame_type":"stream","stream_id":0000000000000000000,"offset":0000000000000000000,"length":0000000000000000000,"fin":true}
449
- */
450
- #define NGTCP2_QLOG_STREAM_FRAME_OVERHEAD 124
451
-
452
- p = write_verbatim(p, "{\"frame_type\":\"stream\",");
453
- p = write_pair_number(p, "stream_id", (uint64_t)fr->stream_id);
454
- *p++ = ',';
455
- p = write_pair_number(p, "offset", fr->offset);
456
- *p++ = ',';
457
- p = write_pair_number(p, "length", ngtcp2_vec_len(fr->data, fr->datacnt));
458
- if (fr->fin) {
459
- *p++ = ',';
460
- p = write_pair_bool(p, "fin", 1);
461
- }
462
- *p++ = '}';
463
-
464
- return p;
465
- }
466
-
467
- static uint8_t *write_max_data_frame(uint8_t *p, const ngtcp2_max_data *fr) {
468
- /*
469
- * {"frame_type":"max_data","maximum":0000000000000000000}
470
- */
471
- #define NGTCP2_QLOG_MAX_DATA_FRAME_OVERHEAD 55
472
-
473
- p = write_verbatim(p, "{\"frame_type\":\"max_data\",");
474
- p = write_pair_number(p, "maximum", fr->max_data);
475
- *p++ = '}';
476
-
477
- return p;
478
- }
479
-
480
- static uint8_t *write_max_stream_data_frame(uint8_t *p,
481
- const ngtcp2_max_stream_data *fr) {
482
- /*
483
- * {"frame_type":"max_stream_data","stream_id":0000000000000000000,"maximum":0000000000000000000}
484
- */
485
- #define NGTCP2_QLOG_MAX_STREAM_DATA_FRAME_OVERHEAD 94
486
-
487
- p = write_verbatim(p, "{\"frame_type\":\"max_stream_data\",");
488
- p = write_pair_number(p, "stream_id", (uint64_t)fr->stream_id);
489
- *p++ = ',';
490
- p = write_pair_number(p, "maximum", fr->max_stream_data);
491
- *p++ = '}';
492
-
493
- return p;
494
- }
495
-
496
- static uint8_t *write_max_streams_frame(uint8_t *p,
497
- const ngtcp2_max_streams *fr) {
498
- /*
499
- * {"frame_type":"max_streams","stream_type":"unidirectional","maximum":0000000000000000000}
500
- */
501
- #define NGTCP2_QLOG_MAX_STREAMS_FRAME_OVERHEAD 89
502
-
503
- p = write_verbatim(p, "{\"frame_type\":\"max_streams\",\"stream_type\":");
504
- if (fr->type == NGTCP2_FRAME_MAX_STREAMS_BIDI) {
505
- p = write_string(p, "bidirectional");
506
- } else {
507
- p = write_string(p, "unidirectional");
508
- }
509
- *p++ = ',';
510
- p = write_pair_number(p, "maximum", fr->max_streams);
511
- *p++ = '}';
512
-
513
- return p;
514
- }
515
-
516
- static uint8_t *write_data_blocked_frame(uint8_t *p,
517
- const ngtcp2_data_blocked *fr) {
518
- (void)fr;
519
-
520
- /*
521
- * {"frame_type":"data_blocked"}
522
- */
523
- #define NGTCP2_QLOG_DATA_BLOCKED_FRAME_OVERHEAD 29
524
-
525
- /* TODO log limit */
526
-
527
- return write_verbatim(p, "{\"frame_type\":\"data_blocked\"}");
528
- }
529
-
530
- static uint8_t *
531
- write_stream_data_blocked_frame(uint8_t *p,
532
- const ngtcp2_stream_data_blocked *fr) {
533
- (void)fr;
534
-
535
- /*
536
- * {"frame_type":"stream_data_blocked"}
537
- */
538
- #define NGTCP2_QLOG_STREAM_DATA_BLOCKED_FRAME_OVERHEAD 36
539
-
540
- /* TODO log limit */
541
-
542
- return write_verbatim(p, "{\"frame_type\":\"stream_data_blocked\"}");
543
- }
544
-
545
- static uint8_t *write_streams_blocked_frame(uint8_t *p,
546
- const ngtcp2_streams_blocked *fr) {
547
- (void)fr;
548
-
549
- /*
550
- * {"frame_type":"streams_blocked"}
551
- */
552
- #define NGTCP2_QLOG_STREAMS_BLOCKED_FRAME_OVERHEAD 32
553
-
554
- /* TODO Log stream_type and limit */
555
-
556
- return write_verbatim(p, "{\"frame_type\":\"streams_blocked\"}");
557
- }
558
-
559
- static uint8_t *
560
- write_new_connection_id_frame(uint8_t *p, const ngtcp2_new_connection_id *fr) {
561
- /*
562
- * {"frame_type":"new_connection_id","sequence_number":0000000000000000000,"retire_prior_to":0000000000000000000,"connection_id_length":0000000000000000000,"connection_id":"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx","stateless_reset_token":{"data":"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"}}
563
- */
564
- #define NGTCP2_QLOG_NEW_CONNECTION_ID_FRAME_OVERHEAD 280
565
-
566
- p = write_verbatim(p, "{\"frame_type\":\"new_connection_id\",");
567
- p = write_pair_number(p, "sequence_number", fr->seq);
568
- *p++ = ',';
569
- p = write_pair_number(p, "retire_prior_to", fr->retire_prior_to);
570
- *p++ = ',';
571
- p = write_pair_number(p, "connection_id_length", fr->cid.datalen);
572
- *p++ = ',';
573
- p = write_pair_cid(p, "connection_id", &fr->cid);
574
- p = write_verbatim(p, ",\"stateless_reset_token\":{");
575
- p = write_pair_hex(p, "data", fr->stateless_reset_token,
576
- sizeof(fr->stateless_reset_token));
577
- *p++ = '}';
578
- *p++ = '}';
579
-
580
- return p;
581
- }
582
-
583
- static uint8_t *
584
- write_retire_connection_id_frame(uint8_t *p,
585
- const ngtcp2_retire_connection_id *fr) {
586
- /*
587
- * {"frame_type":"retire_connection_id","sequence_number":0000000000000000000}
588
- */
589
- #define NGTCP2_QLOG_RETIRE_CONNECTION_ID_FRAME_OVERHEAD 75
590
-
591
- p = write_verbatim(p, "{\"frame_type\":\"retire_connection_id\",");
592
- p = write_pair_number(p, "sequence_number", fr->seq);
593
- *p++ = '}';
594
-
595
- return p;
596
- }
597
-
598
- static uint8_t *write_path_challenge_frame(uint8_t *p,
599
- const ngtcp2_path_challenge *fr) {
600
- /*
601
- * {"frame_type":"path_challenge","data":"xxxxxxxxxxxxxxxx"}
602
- */
603
- #define NGTCP2_QLOG_PATH_CHALLENGE_FRAME_OVERHEAD 57
604
-
605
- p = write_verbatim(p, "{\"frame_type\":\"path_challenge\",");
606
- p = write_pair_hex(p, "data", fr->data, sizeof(fr->data));
607
- *p++ = '}';
608
-
609
- return p;
610
- }
611
-
612
- static uint8_t *write_path_response_frame(uint8_t *p,
613
- const ngtcp2_path_response *fr) {
614
- /*
615
- * {"frame_type":"path_response","data":"xxxxxxxxxxxxxxxx"}
616
- */
617
- #define NGTCP2_QLOG_PATH_RESPONSE_FRAME_OVERHEAD 56
618
-
619
- p = write_verbatim(p, "{\"frame_type\":\"path_response\",");
620
- p = write_pair_hex(p, "data", fr->data, sizeof(fr->data));
621
- *p++ = '}';
622
-
623
- return p;
624
- }
625
-
626
- static uint8_t *
627
- write_connection_close_frame(uint8_t *p, const ngtcp2_connection_close *fr) {
628
- /*
629
- * {"frame_type":"connection_close","error_space":"application","error_code":0000000000000000000,"raw_error_code":0000000000000000000}
630
- */
631
- #define NGTCP2_QLOG_CONNECTION_CLOSE_FRAME_OVERHEAD 131
632
-
633
- p = write_verbatim(p,
634
- "{\"frame_type\":\"connection_close\",\"error_space\":");
635
- if (fr->type == NGTCP2_FRAME_CONNECTION_CLOSE) {
636
- p = write_string(p, "transport");
637
- } else {
638
- p = write_string(p, "application");
639
- }
640
- *p++ = ',';
641
- p = write_pair_number(p, "error_code", fr->error_code);
642
- *p++ = ',';
643
- p = write_pair_number(p, "raw_error_code", fr->error_code);
644
- /* TODO Write reason by escaping non-printables */
645
- /* TODO Write trigger_frame_type */
646
- *p++ = '}';
647
-
648
- return p;
649
- }
650
-
651
- static uint8_t *write_handshake_done_frame(uint8_t *p,
652
- const ngtcp2_handshake_done *fr) {
653
- (void)fr;
654
-
655
- /*
656
- * {"frame_type":"handshake_done"}
657
- */
658
- #define NGTCP2_QLOG_HANDSHAKE_DONE_FRAME_OVERHEAD 31
659
-
660
- return write_verbatim(p, "{\"frame_type\":\"handshake_done\"}");
661
- }
662
-
663
- static uint8_t *write_datagram_frame(uint8_t *p, const ngtcp2_datagram *fr) {
664
- /*
665
- * {"frame_type":"datagram","length":0000000000000000000}
666
- */
667
- #define NGTCP2_QLOG_DATAGRAM_FRAME_OVERHEAD 54
668
-
669
- p = write_verbatim(p, "{\"frame_type\":\"datagram\",");
670
- p = write_pair_number(p, "length", ngtcp2_vec_len(fr->data, fr->datacnt));
671
- *p++ = '}';
672
-
673
- return p;
674
- }
675
-
676
- static uint8_t *qlog_write_time(ngtcp2_qlog *qlog, uint8_t *p) {
677
- return write_pair_tstamp(p, "time", qlog->last_ts - qlog->ts);
678
- }
679
-
680
- static void qlog_pkt_write_start(ngtcp2_qlog *qlog, int sent) {
681
- uint8_t *p;
682
-
683
- if (!qlog->write) {
684
- return;
685
- }
686
-
687
- ngtcp2_buf_reset(&qlog->buf);
688
- p = qlog->buf.last;
689
-
690
- *p++ = '\x1e';
691
- *p++ = '{';
692
- p = qlog_write_time(qlog, p);
693
- p = write_verbatim(p, ",\"name\":");
694
- if (sent) {
695
- p = write_string(p, "transport:packet_sent");
696
- } else {
697
- p = write_string(p, "transport:packet_received");
698
- }
699
- p = write_verbatim(p, ",\"data\":{\"frames\":[");
700
- qlog->buf.last = p;
701
- }
702
-
703
- static void qlog_pkt_write_end(ngtcp2_qlog *qlog, const ngtcp2_pkt_hd *hd,
704
- size_t pktlen) {
705
- uint8_t *p = qlog->buf.last;
706
-
707
- if (!qlog->write) {
708
- return;
709
- }
710
-
711
- /*
712
- * ],"header":,"raw":{"length":0000000000000000000}}}
713
- *
714
- * plus, terminating LF
715
- */
716
- #define NGTCP2_QLOG_PKT_WRITE_END_OVERHEAD \
717
- (1 + 50 + NGTCP2_QLOG_PKT_HD_OVERHEAD)
718
-
719
- if (ngtcp2_buf_left(&qlog->buf) <
720
- NGTCP2_QLOG_PKT_WRITE_END_OVERHEAD + hd->tokenlen * 2) {
721
- return;
722
- }
723
-
724
- assert(ngtcp2_buf_len(&qlog->buf));
725
-
726
- /* Eat last ',' */
727
- if (*(p - 1) == ',') {
728
- --p;
729
- }
730
-
731
- p = write_verbatim(p, "],\"header\":");
732
- p = write_pkt_hd(p, hd);
733
- p = write_verbatim(p, ",\"raw\":{\"length\":");
734
- p = write_number(p, pktlen);
735
- p = write_verbatim(p, "}}}\n");
736
-
737
- qlog->buf.last = p;
738
-
739
- qlog->write(qlog->user_data, NGTCP2_QLOG_WRITE_FLAG_NONE, qlog->buf.pos,
740
- ngtcp2_buf_len(&qlog->buf));
741
- }
742
-
743
- void ngtcp2_qlog_write_frame(ngtcp2_qlog *qlog, const ngtcp2_frame *fr) {
744
- uint8_t *p = qlog->buf.last;
745
-
746
- if (!qlog->write) {
747
- return;
748
- }
749
-
750
- switch (fr->type) {
751
- case NGTCP2_FRAME_PADDING:
752
- if (ngtcp2_buf_left(&qlog->buf) < NGTCP2_QLOG_PADDING_FRAME_OVERHEAD + 1) {
753
- return;
754
- }
755
- p = write_padding_frame(p, &fr->padding);
756
- break;
757
- case NGTCP2_FRAME_PING:
758
- if (ngtcp2_buf_left(&qlog->buf) < NGTCP2_QLOG_PING_FRAME_OVERHEAD + 1) {
759
- return;
760
- }
761
- p = write_ping_frame(p, &fr->ping);
762
- break;
763
- case NGTCP2_FRAME_ACK:
764
- case NGTCP2_FRAME_ACK_ECN:
765
- if (ngtcp2_buf_left(&qlog->buf) <
766
- NGTCP2_QLOG_ACK_FRAME_BASE_OVERHEAD +
767
- (size_t)(fr->type == NGTCP2_FRAME_ACK_ECN
768
- ? NGTCP2_QLOG_ACK_FRAME_ECN_OVERHEAD
769
- : 0) +
770
- NGTCP2_QLOG_ACK_FRAME_RANGE_OVERHEAD * (1 + fr->ack.rangecnt) + 1) {
771
- return;
772
- }
773
- p = write_ack_frame(p, &fr->ack);
774
- break;
775
- case NGTCP2_FRAME_RESET_STREAM:
776
- if (ngtcp2_buf_left(&qlog->buf) <
777
- NGTCP2_QLOG_RESET_STREAM_FRAME_OVERHEAD + 1) {
778
- return;
779
- }
780
- p = write_reset_stream_frame(p, &fr->reset_stream);
781
- break;
782
- case NGTCP2_FRAME_STOP_SENDING:
783
- if (ngtcp2_buf_left(&qlog->buf) <
784
- NGTCP2_QLOG_STOP_SENDING_FRAME_OVERHEAD + 1) {
785
- return;
786
- }
787
- p = write_stop_sending_frame(p, &fr->stop_sending);
788
- break;
789
- case NGTCP2_FRAME_CRYPTO:
790
- if (ngtcp2_buf_left(&qlog->buf) < NGTCP2_QLOG_CRYPTO_FRAME_OVERHEAD + 1) {
791
- return;
792
- }
793
- p = write_crypto_frame(p, &fr->crypto);
794
- break;
795
- case NGTCP2_FRAME_NEW_TOKEN:
796
- if (ngtcp2_buf_left(&qlog->buf) <
797
- NGTCP2_QLOG_NEW_TOKEN_FRAME_OVERHEAD + fr->new_token.tokenlen * 2 + 1) {
798
- return;
799
- }
800
- p = write_new_token_frame(p, &fr->new_token);
801
- break;
802
- case NGTCP2_FRAME_STREAM:
803
- if (ngtcp2_buf_left(&qlog->buf) < NGTCP2_QLOG_STREAM_FRAME_OVERHEAD + 1) {
804
- return;
805
- }
806
- p = write_stream_frame(p, &fr->stream);
807
- break;
808
- case NGTCP2_FRAME_MAX_DATA:
809
- if (ngtcp2_buf_left(&qlog->buf) < NGTCP2_QLOG_MAX_DATA_FRAME_OVERHEAD + 1) {
810
- return;
811
- }
812
- p = write_max_data_frame(p, &fr->max_data);
813
- break;
814
- case NGTCP2_FRAME_MAX_STREAM_DATA:
815
- if (ngtcp2_buf_left(&qlog->buf) <
816
- NGTCP2_QLOG_MAX_STREAM_DATA_FRAME_OVERHEAD + 1) {
817
- return;
818
- }
819
- p = write_max_stream_data_frame(p, &fr->max_stream_data);
820
- break;
821
- case NGTCP2_FRAME_MAX_STREAMS_BIDI:
822
- case NGTCP2_FRAME_MAX_STREAMS_UNI:
823
- if (ngtcp2_buf_left(&qlog->buf) <
824
- NGTCP2_QLOG_MAX_STREAMS_FRAME_OVERHEAD + 1) {
825
- return;
826
- }
827
- p = write_max_streams_frame(p, &fr->max_streams);
828
- break;
829
- case NGTCP2_FRAME_DATA_BLOCKED:
830
- if (ngtcp2_buf_left(&qlog->buf) <
831
- NGTCP2_QLOG_DATA_BLOCKED_FRAME_OVERHEAD + 1) {
832
- return;
833
- }
834
- p = write_data_blocked_frame(p, &fr->data_blocked);
835
- break;
836
- case NGTCP2_FRAME_STREAM_DATA_BLOCKED:
837
- if (ngtcp2_buf_left(&qlog->buf) <
838
- NGTCP2_QLOG_STREAM_DATA_BLOCKED_FRAME_OVERHEAD + 1) {
839
- return;
840
- }
841
- p = write_stream_data_blocked_frame(p, &fr->stream_data_blocked);
842
- break;
843
- case NGTCP2_FRAME_STREAMS_BLOCKED_BIDI:
844
- case NGTCP2_FRAME_STREAMS_BLOCKED_UNI:
845
- if (ngtcp2_buf_left(&qlog->buf) <
846
- NGTCP2_QLOG_STREAMS_BLOCKED_FRAME_OVERHEAD + 1) {
847
- return;
848
- }
849
- p = write_streams_blocked_frame(p, &fr->streams_blocked);
850
- break;
851
- case NGTCP2_FRAME_NEW_CONNECTION_ID:
852
- if (ngtcp2_buf_left(&qlog->buf) <
853
- NGTCP2_QLOG_NEW_CONNECTION_ID_FRAME_OVERHEAD + 1) {
854
- return;
855
- }
856
- p = write_new_connection_id_frame(p, &fr->new_connection_id);
857
- break;
858
- case NGTCP2_FRAME_RETIRE_CONNECTION_ID:
859
- if (ngtcp2_buf_left(&qlog->buf) <
860
- NGTCP2_QLOG_RETIRE_CONNECTION_ID_FRAME_OVERHEAD + 1) {
861
- return;
862
- }
863
- p = write_retire_connection_id_frame(p, &fr->retire_connection_id);
864
- break;
865
- case NGTCP2_FRAME_PATH_CHALLENGE:
866
- if (ngtcp2_buf_left(&qlog->buf) <
867
- NGTCP2_QLOG_PATH_CHALLENGE_FRAME_OVERHEAD + 1) {
868
- return;
869
- }
870
- p = write_path_challenge_frame(p, &fr->path_challenge);
871
- break;
872
- case NGTCP2_FRAME_PATH_RESPONSE:
873
- if (ngtcp2_buf_left(&qlog->buf) <
874
- NGTCP2_QLOG_PATH_RESPONSE_FRAME_OVERHEAD + 1) {
875
- return;
876
- }
877
- p = write_path_response_frame(p, &fr->path_response);
878
- break;
879
- case NGTCP2_FRAME_CONNECTION_CLOSE:
880
- case NGTCP2_FRAME_CONNECTION_CLOSE_APP:
881
- if (ngtcp2_buf_left(&qlog->buf) <
882
- NGTCP2_QLOG_CONNECTION_CLOSE_FRAME_OVERHEAD + 1) {
883
- return;
884
- }
885
- p = write_connection_close_frame(p, &fr->connection_close);
886
- break;
887
- case NGTCP2_FRAME_HANDSHAKE_DONE:
888
- if (ngtcp2_buf_left(&qlog->buf) <
889
- NGTCP2_QLOG_HANDSHAKE_DONE_FRAME_OVERHEAD + 1) {
890
- return;
891
- }
892
- p = write_handshake_done_frame(p, &fr->handshake_done);
893
- break;
894
- case NGTCP2_FRAME_DATAGRAM:
895
- case NGTCP2_FRAME_DATAGRAM_LEN:
896
- if (ngtcp2_buf_left(&qlog->buf) < NGTCP2_QLOG_DATAGRAM_FRAME_OVERHEAD + 1) {
897
- return;
898
- }
899
- p = write_datagram_frame(p, &fr->datagram);
900
- break;
901
- default:
902
- ngtcp2_unreachable();
903
- }
904
-
905
- *p++ = ',';
906
-
907
- qlog->buf.last = p;
908
- }
909
-
910
- void ngtcp2_qlog_pkt_received_start(ngtcp2_qlog *qlog) {
911
- qlog_pkt_write_start(qlog, /* sent = */ 0);
912
- }
913
-
914
- void ngtcp2_qlog_pkt_received_end(ngtcp2_qlog *qlog, const ngtcp2_pkt_hd *hd,
915
- size_t pktlen) {
916
- qlog_pkt_write_end(qlog, hd, pktlen);
917
- }
918
-
919
- void ngtcp2_qlog_pkt_sent_start(ngtcp2_qlog *qlog) {
920
- qlog_pkt_write_start(qlog, /* sent = */ 1);
921
- }
922
-
923
- void ngtcp2_qlog_pkt_sent_end(ngtcp2_qlog *qlog, const ngtcp2_pkt_hd *hd,
924
- size_t pktlen) {
925
- qlog_pkt_write_end(qlog, hd, pktlen);
926
- }
927
-
928
- void ngtcp2_qlog_parameters_set_transport_params(
929
- ngtcp2_qlog *qlog, const ngtcp2_transport_params *params, int server,
930
- ngtcp2_qlog_side side) {
931
- uint8_t buf[1024];
932
- uint8_t *p = buf;
933
- const ngtcp2_preferred_addr *paddr;
934
- const ngtcp2_sockaddr_in *sa_in;
935
- const ngtcp2_sockaddr_in6 *sa_in6;
936
-
937
- if (!qlog->write) {
938
- return;
939
- }
940
-
941
- *p++ = '\x1e';
942
- *p++ = '{';
943
- p = qlog_write_time(qlog, p);
944
- p = write_verbatim(
945
- p, ",\"name\":\"transport:parameters_set\",\"data\":{\"owner\":");
946
-
947
- if (side == NGTCP2_QLOG_SIDE_LOCAL) {
948
- p = write_string(p, "local");
949
- } else {
950
- p = write_string(p, "remote");
951
- }
952
-
953
- *p++ = ',';
954
- p = write_pair_cid(p, "initial_source_connection_id", &params->initial_scid);
955
- *p++ = ',';
956
- if (side == (server ? NGTCP2_QLOG_SIDE_LOCAL : NGTCP2_QLOG_SIDE_REMOTE)) {
957
- p = write_pair_cid(p, "original_destination_connection_id",
958
- &params->original_dcid);
959
- *p++ = ',';
960
- }
961
- if (params->retry_scid_present) {
962
- p = write_pair_cid(p, "retry_source_connection_id", &params->retry_scid);
963
- *p++ = ',';
964
- }
965
- if (params->stateless_reset_token_present) {
966
- p = write_verbatim(p, "\"stateless_reset_token\":{");
967
- p = write_pair_hex(p, "data", params->stateless_reset_token,
968
- sizeof(params->stateless_reset_token));
969
- *p++ = '}';
970
- *p++ = ',';
971
- }
972
- p = write_pair_bool(p, "disable_active_migration",
973
- params->disable_active_migration);
974
- *p++ = ',';
975
- p = write_pair_duration(p, "max_idle_timeout", params->max_idle_timeout);
976
- *p++ = ',';
977
- p = write_pair_number(p, "max_udp_payload_size",
978
- params->max_udp_payload_size);
979
- *p++ = ',';
980
- p = write_pair_number(p, "ack_delay_exponent", params->ack_delay_exponent);
981
- *p++ = ',';
982
- p = write_pair_duration(p, "max_ack_delay", params->max_ack_delay);
983
- *p++ = ',';
984
- p = write_pair_number(p, "active_connection_id_limit",
985
- params->active_connection_id_limit);
986
- *p++ = ',';
987
- p = write_pair_number(p, "initial_max_data", params->initial_max_data);
988
- *p++ = ',';
989
- p = write_pair_number(p, "initial_max_stream_data_bidi_local",
990
- params->initial_max_stream_data_bidi_local);
991
- *p++ = ',';
992
- p = write_pair_number(p, "initial_max_stream_data_bidi_remote",
993
- params->initial_max_stream_data_bidi_remote);
994
- *p++ = ',';
995
- p = write_pair_number(p, "initial_max_stream_data_uni",
996
- params->initial_max_stream_data_uni);
997
- *p++ = ',';
998
- p = write_pair_number(p, "initial_max_streams_bidi",
999
- params->initial_max_streams_bidi);
1000
- *p++ = ',';
1001
- p = write_pair_number(p, "initial_max_streams_uni",
1002
- params->initial_max_streams_uni);
1003
- if (params->preferred_address_present) {
1004
- *p++ = ',';
1005
- paddr = &params->preferred_address;
1006
- p = write_string(p, "preferred_address");
1007
- *p++ = ':';
1008
- *p++ = '{';
1009
-
1010
- if (paddr->ipv4_present) {
1011
- sa_in = &paddr->ipv4;
1012
-
1013
- p = write_pair_hex(p, "ip_v4", (const uint8_t *)&sa_in->sin_addr,
1014
- sizeof(sa_in->sin_addr));
1015
- *p++ = ',';
1016
- p = write_pair_number(p, "port_v4", ngtcp2_ntohs(sa_in->sin_port));
1017
- *p++ = ',';
1018
- }
1019
-
1020
- if (paddr->ipv6_present) {
1021
- sa_in6 = &paddr->ipv6;
1022
-
1023
- p = write_pair_hex(p, "ip_v6", (const uint8_t *)&sa_in6->sin6_addr,
1024
- sizeof(sa_in6->sin6_addr));
1025
- *p++ = ',';
1026
- p = write_pair_number(p, "port_v6", ngtcp2_ntohs(sa_in6->sin6_port));
1027
- *p++ = ',';
1028
- }
1029
-
1030
- p = write_pair_cid(p, "connection_id", &paddr->cid);
1031
- p = write_verbatim(p, ",\"stateless_reset_token\":{");
1032
- p = write_pair_hex(p, "data", paddr->stateless_reset_token,
1033
- sizeof(paddr->stateless_reset_token));
1034
- *p++ = '}';
1035
- *p++ = '}';
1036
- }
1037
- *p++ = ',';
1038
- p = write_pair_number(p, "max_datagram_frame_size",
1039
- params->max_datagram_frame_size);
1040
- *p++ = ',';
1041
- p = write_pair_bool(p, "grease_quic_bit", params->grease_quic_bit);
1042
- p = write_verbatim(p, "}}\n");
1043
-
1044
- qlog->write(qlog->user_data, NGTCP2_QLOG_WRITE_FLAG_NONE, buf,
1045
- (size_t)(p - buf));
1046
- }
1047
-
1048
- void ngtcp2_qlog_metrics_updated(ngtcp2_qlog *qlog,
1049
- const ngtcp2_conn_stat *cstat) {
1050
- uint8_t buf[1024];
1051
- uint8_t *p = buf;
1052
-
1053
- if (!qlog->write) {
1054
- return;
1055
- }
1056
-
1057
- *p++ = '\x1e';
1058
- *p++ = '{';
1059
- p = qlog_write_time(qlog, p);
1060
- p = write_verbatim(p, ",\"name\":\"recovery:metrics_updated\",\"data\":{");
1061
-
1062
- if (cstat->min_rtt != UINT64_MAX) {
1063
- p = write_pair_duration(p, "min_rtt", cstat->min_rtt);
1064
- *p++ = ',';
1065
- }
1066
- p = write_pair_duration(p, "smoothed_rtt", cstat->smoothed_rtt);
1067
- *p++ = ',';
1068
- p = write_pair_duration(p, "latest_rtt", cstat->latest_rtt);
1069
- *p++ = ',';
1070
- p = write_pair_duration(p, "rtt_variance", cstat->rttvar);
1071
- *p++ = ',';
1072
- p = write_pair_number(p, "pto_count", cstat->pto_count);
1073
- *p++ = ',';
1074
- p = write_pair_number(p, "congestion_window", cstat->cwnd);
1075
- *p++ = ',';
1076
- p = write_pair_number(p, "bytes_in_flight", cstat->bytes_in_flight);
1077
- if (cstat->ssthresh != UINT64_MAX) {
1078
- *p++ = ',';
1079
- p = write_pair_number(p, "ssthresh", cstat->ssthresh);
1080
- }
1081
-
1082
- p = write_verbatim(p, "}}\n");
1083
-
1084
- qlog->write(qlog->user_data, NGTCP2_QLOG_WRITE_FLAG_NONE, buf,
1085
- (size_t)(p - buf));
1086
- }
1087
-
1088
- void ngtcp2_qlog_pkt_lost(ngtcp2_qlog *qlog, ngtcp2_rtb_entry *ent) {
1089
- uint8_t buf[256];
1090
- uint8_t *p = buf;
1091
- ngtcp2_pkt_hd hd = {0};
1092
-
1093
- if (!qlog->write) {
1094
- return;
1095
- }
1096
-
1097
- *p++ = '\x1e';
1098
- *p++ = '{';
1099
- p = qlog_write_time(qlog, p);
1100
- p = write_verbatim(
1101
- p, ",\"name\":\"recovery:packet_lost\",\"data\":{\"header\":");
1102
-
1103
- hd.type = ent->hd.type;
1104
- hd.flags = ent->hd.flags;
1105
- hd.pkt_num = ent->hd.pkt_num;
1106
-
1107
- p = write_pkt_hd(p, &hd);
1108
- p = write_verbatim(p, "}}\n");
1109
-
1110
- qlog->write(qlog->user_data, NGTCP2_QLOG_WRITE_FLAG_NONE, buf,
1111
- (size_t)(p - buf));
1112
- }
1113
-
1114
- void ngtcp2_qlog_retry_pkt_received(ngtcp2_qlog *qlog, const ngtcp2_pkt_hd *hd,
1115
- const ngtcp2_pkt_retry *retry) {
1116
- uint8_t rawbuf[1024];
1117
- ngtcp2_buf buf;
1118
-
1119
- if (!qlog->write) {
1120
- return;
1121
- }
1122
-
1123
- ngtcp2_buf_init(&buf, rawbuf, sizeof(rawbuf));
1124
-
1125
- *buf.last++ = '\x1e';
1126
- *buf.last++ = '{';
1127
- buf.last = qlog_write_time(qlog, buf.last);
1128
- buf.last = write_verbatim(
1129
- buf.last,
1130
- ",\"name\":\"transport:packet_received\",\"data\":{\"header\":");
1131
-
1132
- if (ngtcp2_buf_left(&buf) <
1133
- NGTCP2_QLOG_PKT_HD_OVERHEAD + hd->tokenlen * 2 +
1134
- sizeof(",\"retry_token\":{\"data\":\"\"}}}\n") - 1 +
1135
- retry->tokenlen * 2) {
1136
- return;
1137
- }
1138
-
1139
- buf.last = write_pkt_hd(buf.last, hd);
1140
- buf.last = write_verbatim(buf.last, ",\"retry_token\":{");
1141
- buf.last = write_pair_hex(buf.last, "data", retry->token, retry->tokenlen);
1142
- buf.last = write_verbatim(buf.last, "}}}\n");
1143
-
1144
- qlog->write(qlog->user_data, NGTCP2_QLOG_WRITE_FLAG_NONE, buf.pos,
1145
- ngtcp2_buf_len(&buf));
1146
- }
1147
-
1148
- void ngtcp2_qlog_stateless_reset_pkt_received(
1149
- ngtcp2_qlog *qlog, const ngtcp2_pkt_stateless_reset *sr) {
1150
- uint8_t buf[256];
1151
- uint8_t *p = buf;
1152
- ngtcp2_pkt_hd hd = {0};
1153
-
1154
- if (!qlog->write) {
1155
- return;
1156
- }
1157
-
1158
- hd.type = NGTCP2_PKT_STATELESS_RESET;
1159
-
1160
- *p++ = '\x1e';
1161
- *p++ = '{';
1162
- p = qlog_write_time(qlog, p);
1163
- p = write_verbatim(
1164
- p, ",\"name\":\"transport:packet_received\",\"data\":{\"header\":");
1165
- p = write_pkt_hd(p, &hd);
1166
- *p++ = ',';
1167
- p = write_pair_hex(p, "stateless_reset_token", sr->stateless_reset_token,
1168
- NGTCP2_STATELESS_RESET_TOKENLEN);
1169
- p = write_verbatim(p, "}}\n");
1170
-
1171
- qlog->write(qlog->user_data, NGTCP2_QLOG_WRITE_FLAG_NONE, buf,
1172
- (size_t)(p - buf));
1173
- }
1174
-
1175
- void ngtcp2_qlog_version_negotiation_pkt_received(ngtcp2_qlog *qlog,
1176
- const ngtcp2_pkt_hd *hd,
1177
- const uint32_t *sv,
1178
- size_t nsv) {
1179
- uint8_t rawbuf[512];
1180
- ngtcp2_buf buf;
1181
- size_t i;
1182
- uint32_t v;
1183
-
1184
- if (!qlog->write) {
1185
- return;
1186
- }
1187
-
1188
- ngtcp2_buf_init(&buf, rawbuf, sizeof(rawbuf));
1189
-
1190
- *buf.last++ = '\x1e';
1191
- *buf.last++ = '{';
1192
- buf.last = qlog_write_time(qlog, buf.last);
1193
- buf.last = write_verbatim(
1194
- buf.last,
1195
- ",\"name\":\"transport:packet_received\",\"data\":{\"header\":");
1196
- buf.last = write_pkt_hd(buf.last, hd);
1197
- buf.last = write_verbatim(buf.last, ",\"supported_versions\":[");
1198
-
1199
- if (nsv) {
1200
- if (ngtcp2_buf_left(&buf) <
1201
- (sizeof("\"xxxxxxxx\",") - 1) * nsv - 1 + sizeof("]}}\n") - 1) {
1202
- return;
1203
- }
1204
-
1205
- v = ngtcp2_htonl(sv[0]);
1206
- buf.last = write_hex(buf.last, (const uint8_t *)&v, sizeof(v));
1207
-
1208
- for (i = 1; i < nsv; ++i) {
1209
- *buf.last++ = ',';
1210
- v = ngtcp2_htonl(sv[i]);
1211
- buf.last = write_hex(buf.last, (const uint8_t *)&v, sizeof(v));
1212
- }
1213
- }
1214
-
1215
- buf.last = write_verbatim(buf.last, "]}}\n");
1216
-
1217
- qlog->write(qlog->user_data, NGTCP2_QLOG_WRITE_FLAG_NONE, buf.pos,
1218
- ngtcp2_buf_len(&buf));
1219
- }