puma-plus-core 0.1.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 (1055) hide show
  1. checksums.yaml +7 -0
  2. data/ext/puma_plus_core/extconf.rb +85 -0
  3. data/go/cmd/puma-plus/main.go +472 -0
  4. data/go/go.mod +20 -0
  5. data/go/go.sum +38 -0
  6. data/go/internal/control/booted_test.go +97 -0
  7. data/go/internal/control/decide.go +427 -0
  8. data/go/internal/control/decide_test.go +526 -0
  9. data/go/internal/control/loop.go +343 -0
  10. data/go/internal/control/loop_test.go +228 -0
  11. data/go/internal/control/replay.go +121 -0
  12. data/go/internal/control/sim/cooldown_test.go +74 -0
  13. data/go/internal/control/sim/sim.go +599 -0
  14. data/go/internal/control/sim/sim_test.go +300 -0
  15. data/go/internal/frontend/acceptor.go +164 -0
  16. data/go/internal/frontend/altsvc.go +57 -0
  17. data/go/internal/frontend/altsvc_test.go +170 -0
  18. data/go/internal/frontend/bodypump.go +81 -0
  19. data/go/internal/frontend/env.go +224 -0
  20. data/go/internal/frontend/env_test.go +64 -0
  21. data/go/internal/frontend/handler.go +543 -0
  22. data/go/internal/frontend/handler_test.go +486 -0
  23. data/go/internal/frontend/hijack.go +108 -0
  24. data/go/internal/frontend/hijack_test.go +197 -0
  25. data/go/internal/frontend/hooks_test.go +283 -0
  26. data/go/internal/frontend/launcher_test.go +289 -0
  27. data/go/internal/frontend/listeners.go +196 -0
  28. data/go/internal/frontend/protocol_test.go +391 -0
  29. data/go/internal/frontend/ractor_shepherd.go +160 -0
  30. data/go/internal/frontend/ractor_smoke_test.go +168 -0
  31. data/go/internal/frontend/realcert_test.go +163 -0
  32. data/go/internal/frontend/rtbridge.go +410 -0
  33. data/go/internal/frontend/shepherd.go +188 -0
  34. data/go/internal/frontend/socket.go +37 -0
  35. data/go/internal/frontend/socketpair_test.go +34 -0
  36. data/go/internal/frontend/tlscert.go +184 -0
  37. data/go/internal/frontend/tlscert_test.go +81 -0
  38. data/go/internal/frontend/wscontrol.go +198 -0
  39. data/go/internal/metrics/collector.go +207 -0
  40. data/go/internal/metrics/endpoints.go +244 -0
  41. data/go/internal/metrics/gvl.go +136 -0
  42. data/go/internal/metrics/gvl_test.go +122 -0
  43. data/go/internal/metrics/hist.go +204 -0
  44. data/go/internal/metrics/hist_test.go +353 -0
  45. data/go/internal/metrics/window.go +120 -0
  46. data/go/internal/queue/drain_test.go +141 -0
  47. data/go/internal/queue/queue.go +297 -0
  48. data/go/internal/realtime/event.go +53 -0
  49. data/go/internal/realtime/hub.go +456 -0
  50. data/go/internal/realtime/hub_test.go +370 -0
  51. data/go/internal/realtime/id.go +69 -0
  52. data/go/internal/realtime/id_test.go +64 -0
  53. data/go/internal/websocket/frame.go +186 -0
  54. data/go/internal/websocket/serve.go +196 -0
  55. data/go/internal/websocket/transport.go +101 -0
  56. data/go/internal/webtransport/serve.go +169 -0
  57. data/go/internal/webtransport/transport.go +220 -0
  58. data/go/internal/wire/golden_test.go +250 -0
  59. data/go/internal/wire/rack_test.go +40 -0
  60. data/go/internal/wire/ractor_test.go +43 -0
  61. data/go/internal/wire/wire.go +401 -0
  62. data/go/vendor/github.com/dunglas/httpsfv/LICENSE +27 -0
  63. data/go/vendor/github.com/dunglas/httpsfv/README.md +25 -0
  64. data/go/vendor/github.com/dunglas/httpsfv/bareitem.go +115 -0
  65. data/go/vendor/github.com/dunglas/httpsfv/binary.go +59 -0
  66. data/go/vendor/github.com/dunglas/httpsfv/boolean.go +49 -0
  67. data/go/vendor/github.com/dunglas/httpsfv/date.go +41 -0
  68. data/go/vendor/github.com/dunglas/httpsfv/decimal.go +64 -0
  69. data/go/vendor/github.com/dunglas/httpsfv/decode.go +63 -0
  70. data/go/vendor/github.com/dunglas/httpsfv/dictionary.go +167 -0
  71. data/go/vendor/github.com/dunglas/httpsfv/displaystring.go +105 -0
  72. data/go/vendor/github.com/dunglas/httpsfv/encode.go +42 -0
  73. data/go/vendor/github.com/dunglas/httpsfv/innerlist.go +91 -0
  74. data/go/vendor/github.com/dunglas/httpsfv/integer.go +120 -0
  75. data/go/vendor/github.com/dunglas/httpsfv/item.go +73 -0
  76. data/go/vendor/github.com/dunglas/httpsfv/key.go +81 -0
  77. data/go/vendor/github.com/dunglas/httpsfv/list.go +99 -0
  78. data/go/vendor/github.com/dunglas/httpsfv/member.go +9 -0
  79. data/go/vendor/github.com/dunglas/httpsfv/params.go +143 -0
  80. data/go/vendor/github.com/dunglas/httpsfv/string.go +88 -0
  81. data/go/vendor/github.com/dunglas/httpsfv/token.go +71 -0
  82. data/go/vendor/github.com/dunglas/httpsfv/utils.go +16 -0
  83. data/go/vendor/github.com/quic-go/qpack/LICENSE.md +7 -0
  84. data/go/vendor/github.com/quic-go/qpack/README.md +21 -0
  85. data/go/vendor/github.com/quic-go/qpack/decoder.go +183 -0
  86. data/go/vendor/github.com/quic-go/qpack/encoder.go +95 -0
  87. data/go/vendor/github.com/quic-go/qpack/header_field.go +16 -0
  88. data/go/vendor/github.com/quic-go/qpack/static_table.go +255 -0
  89. data/go/vendor/github.com/quic-go/qpack/varint.go +69 -0
  90. data/go/vendor/github.com/quic-go/quic-go/FIPS140.md +37 -0
  91. data/go/vendor/github.com/quic-go/quic-go/FUZZING.md +59 -0
  92. data/go/vendor/github.com/quic-go/quic-go/LICENSE +21 -0
  93. data/go/vendor/github.com/quic-go/quic-go/README.md +65 -0
  94. data/go/vendor/github.com/quic-go/quic-go/SECURITY.md +14 -0
  95. data/go/vendor/github.com/quic-go/quic-go/buffer_pool.go +92 -0
  96. data/go/vendor/github.com/quic-go/quic-go/client.go +109 -0
  97. data/go/vendor/github.com/quic-go/quic-go/closed_conn.go +58 -0
  98. data/go/vendor/github.com/quic-go/quic-go/codecov.yml +23 -0
  99. data/go/vendor/github.com/quic-go/quic-go/config.go +129 -0
  100. data/go/vendor/github.com/quic-go/quic-go/conn_id_generator.go +212 -0
  101. data/go/vendor/github.com/quic-go/quic-go/conn_id_manager.go +321 -0
  102. data/go/vendor/github.com/quic-go/quic-go/connection.go +3150 -0
  103. data/go/vendor/github.com/quic-go/quic-go/connection_logging.go +315 -0
  104. data/go/vendor/github.com/quic-go/quic-go/crypto_stream.go +249 -0
  105. data/go/vendor/github.com/quic-go/quic-go/crypto_stream_manager.go +73 -0
  106. data/go/vendor/github.com/quic-go/quic-go/datagram_queue.go +137 -0
  107. data/go/vendor/github.com/quic-go/quic-go/errors.go +105 -0
  108. data/go/vendor/github.com/quic-go/quic-go/flow_controller_base.go +84 -0
  109. data/go/vendor/github.com/quic-go/quic-go/flow_controller_connection.go +186 -0
  110. data/go/vendor/github.com/quic-go/quic-go/flow_controller_stream.go +196 -0
  111. data/go/vendor/github.com/quic-go/quic-go/frame_sorter.go +274 -0
  112. data/go/vendor/github.com/quic-go/quic-go/framer.go +295 -0
  113. data/go/vendor/github.com/quic-go/quic-go/http3/README.md +9 -0
  114. data/go/vendor/github.com/quic-go/quic-go/http3/body.go +137 -0
  115. data/go/vendor/github.com/quic-go/quic-go/http3/capsule.go +148 -0
  116. data/go/vendor/github.com/quic-go/quic-go/http3/client.go +496 -0
  117. data/go/vendor/github.com/quic-go/quic-go/http3/conn.go +319 -0
  118. data/go/vendor/github.com/quic-go/quic-go/http3/error.go +63 -0
  119. data/go/vendor/github.com/quic-go/quic-go/http3/error_codes.go +84 -0
  120. data/go/vendor/github.com/quic-go/quic-go/http3/frames.go +327 -0
  121. data/go/vendor/github.com/quic-go/quic-go/http3/gzip_reader.go +39 -0
  122. data/go/vendor/github.com/quic-go/quic-go/http3/headers.go +429 -0
  123. data/go/vendor/github.com/quic-go/quic-go/http3/ip_addr.go +48 -0
  124. data/go/vendor/github.com/quic-go/quic-go/http3/mockgen.go +11 -0
  125. data/go/vendor/github.com/quic-go/quic-go/http3/qlog/event.go +138 -0
  126. data/go/vendor/github.com/quic-go/quic-go/http3/qlog/frame.go +220 -0
  127. data/go/vendor/github.com/quic-go/quic-go/http3/qlog/qlog_dir.go +15 -0
  128. data/go/vendor/github.com/quic-go/quic-go/http3/qlog.go +56 -0
  129. data/go/vendor/github.com/quic-go/quic-go/http3/request_writer.go +324 -0
  130. data/go/vendor/github.com/quic-go/quic-go/http3/response_writer.go +372 -0
  131. data/go/vendor/github.com/quic-go/quic-go/http3/server.go +738 -0
  132. data/go/vendor/github.com/quic-go/quic-go/http3/server_conn.go +259 -0
  133. data/go/vendor/github.com/quic-go/quic-go/http3/state_tracking_stream.go +173 -0
  134. data/go/vendor/github.com/quic-go/quic-go/http3/stream.go +406 -0
  135. data/go/vendor/github.com/quic-go/quic-go/http3/trace.go +105 -0
  136. data/go/vendor/github.com/quic-go/quic-go/http3/transport.go +538 -0
  137. data/go/vendor/github.com/quic-go/quic-go/interface.go +221 -0
  138. data/go/vendor/github.com/quic-go/quic-go/internal/ackhandler/ack_eliciting.go +33 -0
  139. data/go/vendor/github.com/quic-go/quic-go/internal/ackhandler/ecn.go +340 -0
  140. data/go/vendor/github.com/quic-go/quic-go/internal/ackhandler/frame.go +21 -0
  141. data/go/vendor/github.com/quic-go/quic-go/internal/ackhandler/interfaces.go +39 -0
  142. data/go/vendor/github.com/quic-go/quic-go/internal/ackhandler/lost_packet_tracker.go +73 -0
  143. data/go/vendor/github.com/quic-go/quic-go/internal/ackhandler/mockgen.go +6 -0
  144. data/go/vendor/github.com/quic-go/quic-go/internal/ackhandler/packet.go +60 -0
  145. data/go/vendor/github.com/quic-go/quic-go/internal/ackhandler/packet_number_generator.go +84 -0
  146. data/go/vendor/github.com/quic-go/quic-go/internal/ackhandler/received_packet_handler.go +119 -0
  147. data/go/vendor/github.com/quic-go/quic-go/internal/ackhandler/received_packet_history.go +159 -0
  148. data/go/vendor/github.com/quic-go/quic-go/internal/ackhandler/received_packet_tracker.go +228 -0
  149. data/go/vendor/github.com/quic-go/quic-go/internal/ackhandler/send_mode.go +46 -0
  150. data/go/vendor/github.com/quic-go/quic-go/internal/ackhandler/sent_packet_handler.go +1143 -0
  151. data/go/vendor/github.com/quic-go/quic-go/internal/ackhandler/sent_packet_history.go +274 -0
  152. data/go/vendor/github.com/quic-go/quic-go/internal/congestion/bandwidth.go +22 -0
  153. data/go/vendor/github.com/quic-go/quic-go/internal/congestion/clock.go +20 -0
  154. data/go/vendor/github.com/quic-go/quic-go/internal/congestion/cubic.go +214 -0
  155. data/go/vendor/github.com/quic-go/quic-go/internal/congestion/cubic_sender.go +330 -0
  156. data/go/vendor/github.com/quic-go/quic-go/internal/congestion/hybrid_slow_start.go +112 -0
  157. data/go/vendor/github.com/quic-go/quic-go/internal/congestion/interface.go +27 -0
  158. data/go/vendor/github.com/quic-go/quic-go/internal/congestion/pacer.go +110 -0
  159. data/go/vendor/github.com/quic-go/quic-go/internal/handshake/aead.go +91 -0
  160. data/go/vendor/github.com/quic-go/quic-go/internal/handshake/cipher_suite.go +114 -0
  161. data/go/vendor/github.com/quic-go/quic-go/internal/handshake/cipher_suite_fips140.go +48 -0
  162. data/go/vendor/github.com/quic-go/quic-go/internal/handshake/crypto_setup.go +718 -0
  163. data/go/vendor/github.com/quic-go/quic-go/internal/handshake/fake_conn.go +21 -0
  164. data/go/vendor/github.com/quic-go/quic-go/internal/handshake/fips140_go126.go +9 -0
  165. data/go/vendor/github.com/quic-go/quic-go/internal/handshake/fips140_legacy.go +7 -0
  166. data/go/vendor/github.com/quic-go/quic-go/internal/handshake/header_protector.go +134 -0
  167. data/go/vendor/github.com/quic-go/quic-go/internal/handshake/hkdf.go +26 -0
  168. data/go/vendor/github.com/quic-go/quic-go/internal/handshake/initial_aead.go +80 -0
  169. data/go/vendor/github.com/quic-go/quic-go/internal/handshake/interface.go +140 -0
  170. data/go/vendor/github.com/quic-go/quic-go/internal/handshake/quic_event_go125.go +11 -0
  171. data/go/vendor/github.com/quic-go/quic-go/internal/handshake/quic_event_go126.go +11 -0
  172. data/go/vendor/github.com/quic-go/quic-go/internal/handshake/retry_go125.go +68 -0
  173. data/go/vendor/github.com/quic-go/quic-go/internal/handshake/retry_go126.go +70 -0
  174. data/go/vendor/github.com/quic-go/quic-go/internal/handshake/session_ticket.go +55 -0
  175. data/go/vendor/github.com/quic-go/quic-go/internal/handshake/tls_config_go126.go +54 -0
  176. data/go/vendor/github.com/quic-go/quic-go/internal/handshake/tls_config_go127.go +24 -0
  177. data/go/vendor/github.com/quic-go/quic-go/internal/handshake/token_generator.go +126 -0
  178. data/go/vendor/github.com/quic-go/quic-go/internal/handshake/token_protector.go +78 -0
  179. data/go/vendor/github.com/quic-go/quic-go/internal/handshake/updatable_aead.go +372 -0
  180. data/go/vendor/github.com/quic-go/quic-go/internal/monotime/time.go +90 -0
  181. data/go/vendor/github.com/quic-go/quic-go/internal/protocol/connection_id.go +116 -0
  182. data/go/vendor/github.com/quic-go/quic-go/internal/protocol/encryption_level.go +65 -0
  183. data/go/vendor/github.com/quic-go/quic-go/internal/protocol/key_phase.go +36 -0
  184. data/go/vendor/github.com/quic-go/quic-go/internal/protocol/packet_number.go +57 -0
  185. data/go/vendor/github.com/quic-go/quic-go/internal/protocol/params.go +169 -0
  186. data/go/vendor/github.com/quic-go/quic-go/internal/protocol/perspective.go +26 -0
  187. data/go/vendor/github.com/quic-go/quic-go/internal/protocol/protocol.go +156 -0
  188. data/go/vendor/github.com/quic-go/quic-go/internal/protocol/stream.go +102 -0
  189. data/go/vendor/github.com/quic-go/quic-go/internal/protocol/version.go +115 -0
  190. data/go/vendor/github.com/quic-go/quic-go/internal/qerr/error_codes.go +87 -0
  191. data/go/vendor/github.com/quic-go/quic-go/internal/qerr/errors.go +134 -0
  192. data/go/vendor/github.com/quic-go/quic-go/internal/utils/buffered_write_closer.go +26 -0
  193. data/go/vendor/github.com/quic-go/quic-go/internal/utils/connstats.go +14 -0
  194. data/go/vendor/github.com/quic-go/quic-go/internal/utils/linkedlist/README.md +6 -0
  195. data/go/vendor/github.com/quic-go/quic-go/internal/utils/linkedlist/linkedlist.go +264 -0
  196. data/go/vendor/github.com/quic-go/quic-go/internal/utils/log.go +131 -0
  197. data/go/vendor/github.com/quic-go/quic-go/internal/utils/rand.go +29 -0
  198. data/go/vendor/github.com/quic-go/quic-go/internal/utils/ringbuffer/ringbuffer.go +96 -0
  199. data/go/vendor/github.com/quic-go/quic-go/internal/utils/rtt_stats.go +159 -0
  200. data/go/vendor/github.com/quic-go/quic-go/internal/wire/ack_frame.go +298 -0
  201. data/go/vendor/github.com/quic-go/quic-go/internal/wire/ack_frequency_frame.go +65 -0
  202. data/go/vendor/github.com/quic-go/quic-go/internal/wire/ack_range.go +14 -0
  203. data/go/vendor/github.com/quic-go/quic-go/internal/wire/connection_close_frame.go +75 -0
  204. data/go/vendor/github.com/quic-go/quic-go/internal/wire/crypto_frame.go +97 -0
  205. data/go/vendor/github.com/quic-go/quic-go/internal/wire/data_blocked_frame.go +29 -0
  206. data/go/vendor/github.com/quic-go/quic-go/internal/wire/datagram_frame.go +85 -0
  207. data/go/vendor/github.com/quic-go/quic-go/internal/wire/extended_header.go +164 -0
  208. data/go/vendor/github.com/quic-go/quic-go/internal/wire/frame.go +33 -0
  209. data/go/vendor/github.com/quic-go/quic-go/internal/wire/frame_parser.go +192 -0
  210. data/go/vendor/github.com/quic-go/quic-go/internal/wire/frame_type.go +81 -0
  211. data/go/vendor/github.com/quic-go/quic-go/internal/wire/handshake_done_frame.go +17 -0
  212. data/go/vendor/github.com/quic-go/quic-go/internal/wire/header.go +302 -0
  213. data/go/vendor/github.com/quic-go/quic-go/internal/wire/immediate_ack_frame.go +18 -0
  214. data/go/vendor/github.com/quic-go/quic-go/internal/wire/log.go +74 -0
  215. data/go/vendor/github.com/quic-go/quic-go/internal/wire/max_data_frame.go +33 -0
  216. data/go/vendor/github.com/quic-go/quic-go/internal/wire/max_stream_data_frame.go +43 -0
  217. data/go/vendor/github.com/quic-go/quic-go/internal/wire/max_streams_frame.go +50 -0
  218. data/go/vendor/github.com/quic-go/quic-go/internal/wire/new_connection_id_frame.go +80 -0
  219. data/go/vendor/github.com/quic-go/quic-go/internal/wire/new_token_frame.go +43 -0
  220. data/go/vendor/github.com/quic-go/quic-go/internal/wire/path_challenge_frame.go +32 -0
  221. data/go/vendor/github.com/quic-go/quic-go/internal/wire/path_response_frame.go +32 -0
  222. data/go/vendor/github.com/quic-go/quic-go/internal/wire/ping_frame.go +17 -0
  223. data/go/vendor/github.com/quic-go/quic-go/internal/wire/pool.go +33 -0
  224. data/go/vendor/github.com/quic-go/quic-go/internal/wire/reset_stream_frame.go +79 -0
  225. data/go/vendor/github.com/quic-go/quic-go/internal/wire/retire_connection_id_frame.go +30 -0
  226. data/go/vendor/github.com/quic-go/quic-go/internal/wire/short_header.go +62 -0
  227. data/go/vendor/github.com/quic-go/quic-go/internal/wire/stop_sending_frame.go +45 -0
  228. data/go/vendor/github.com/quic-go/quic-go/internal/wire/stream_data_blocked_frame.go +42 -0
  229. data/go/vendor/github.com/quic-go/quic-go/internal/wire/stream_frame.go +191 -0
  230. data/go/vendor/github.com/quic-go/quic-go/internal/wire/streams_blocked_frame.go +50 -0
  231. data/go/vendor/github.com/quic-go/quic-go/internal/wire/transport_parameters.go +593 -0
  232. data/go/vendor/github.com/quic-go/quic-go/internal/wire/version_negotiation.go +53 -0
  233. data/go/vendor/github.com/quic-go/quic-go/mockgen.go +47 -0
  234. data/go/vendor/github.com/quic-go/quic-go/mtu_discoverer.go +253 -0
  235. data/go/vendor/github.com/quic-go/quic-go/oss-fuzz.sh +52 -0
  236. data/go/vendor/github.com/quic-go/quic-go/packet_packer.go +1009 -0
  237. data/go/vendor/github.com/quic-go/quic-go/packet_unpacker.go +222 -0
  238. data/go/vendor/github.com/quic-go/quic-go/path_manager.go +206 -0
  239. data/go/vendor/github.com/quic-go/quic-go/path_manager_outgoing.go +314 -0
  240. data/go/vendor/github.com/quic-go/quic-go/qlog/event.go +849 -0
  241. data/go/vendor/github.com/quic-go/quic-go/qlog/frame.go +481 -0
  242. data/go/vendor/github.com/quic-go/quic-go/qlog/packet_header.go +96 -0
  243. data/go/vendor/github.com/quic-go/quic-go/qlog/qlog_dir.go +61 -0
  244. data/go/vendor/github.com/quic-go/quic-go/qlog/types.go +305 -0
  245. data/go/vendor/github.com/quic-go/quic-go/qlogwriter/jsontext/encoder.go +324 -0
  246. data/go/vendor/github.com/quic-go/quic-go/qlogwriter/trace.go +124 -0
  247. data/go/vendor/github.com/quic-go/quic-go/qlogwriter/writer.go +229 -0
  248. data/go/vendor/github.com/quic-go/quic-go/quicvarint/io.go +98 -0
  249. data/go/vendor/github.com/quic-go/quic-go/quicvarint/varint.go +180 -0
  250. data/go/vendor/github.com/quic-go/quic-go/receive_stream.go +578 -0
  251. data/go/vendor/github.com/quic-go/quic-go/retransmission_queue.go +158 -0
  252. data/go/vendor/github.com/quic-go/quic-go/send_conn.go +124 -0
  253. data/go/vendor/github.com/quic-go/quic-go/send_queue.go +112 -0
  254. data/go/vendor/github.com/quic-go/quic-go/send_stream.go +915 -0
  255. data/go/vendor/github.com/quic-go/quic-go/server.go +1119 -0
  256. data/go/vendor/github.com/quic-go/quic-go/sni.go +136 -0
  257. data/go/vendor/github.com/quic-go/quic-go/stateless_reset.go +42 -0
  258. data/go/vendor/github.com/quic-go/quic-go/stream.go +253 -0
  259. data/go/vendor/github.com/quic-go/quic-go/streams_map.go +356 -0
  260. data/go/vendor/github.com/quic-go/quic-go/streams_map_incoming.go +209 -0
  261. data/go/vendor/github.com/quic-go/quic-go/streams_map_outgoing.go +253 -0
  262. data/go/vendor/github.com/quic-go/quic-go/sys_conn.go +143 -0
  263. data/go/vendor/github.com/quic-go/quic-go/sys_conn_buffers.go +68 -0
  264. data/go/vendor/github.com/quic-go/quic-go/sys_conn_buffers_write.go +70 -0
  265. data/go/vendor/github.com/quic-go/quic-go/sys_conn_df.go +22 -0
  266. data/go/vendor/github.com/quic-go/quic-go/sys_conn_df_darwin.go +90 -0
  267. data/go/vendor/github.com/quic-go/quic-go/sys_conn_df_linux.go +42 -0
  268. data/go/vendor/github.com/quic-go/quic-go/sys_conn_df_windows.go +52 -0
  269. data/go/vendor/github.com/quic-go/quic-go/sys_conn_helper_darwin.go +38 -0
  270. data/go/vendor/github.com/quic-go/quic-go/sys_conn_helper_freebsd.go +33 -0
  271. data/go/vendor/github.com/quic-go/quic-go/sys_conn_helper_linux.go +156 -0
  272. data/go/vendor/github.com/quic-go/quic-go/sys_conn_helper_nonlinux.go +10 -0
  273. data/go/vendor/github.com/quic-go/quic-go/sys_conn_no_oob.go +21 -0
  274. data/go/vendor/github.com/quic-go/quic-go/sys_conn_oob.go +338 -0
  275. data/go/vendor/github.com/quic-go/quic-go/sys_conn_windows.go +42 -0
  276. data/go/vendor/github.com/quic-go/quic-go/token_store.go +116 -0
  277. data/go/vendor/github.com/quic-go/quic-go/transport.go +848 -0
  278. data/go/vendor/github.com/quic-go/webtransport-go/LICENSE +7 -0
  279. data/go/vendor/github.com/quic-go/webtransport-go/README.md +31 -0
  280. data/go/vendor/github.com/quic-go/webtransport-go/SECURITY.md +14 -0
  281. data/go/vendor/github.com/quic-go/webtransport-go/capsule.go +261 -0
  282. data/go/vendor/github.com/quic-go/webtransport-go/client_conn.go +289 -0
  283. data/go/vendor/github.com/quic-go/webtransport-go/codecov.yml +12 -0
  284. data/go/vendor/github.com/quic-go/webtransport-go/config.go +90 -0
  285. data/go/vendor/github.com/quic-go/webtransport-go/errors.go +96 -0
  286. data/go/vendor/github.com/quic-go/webtransport-go/flow_control.go +107 -0
  287. data/go/vendor/github.com/quic-go/webtransport-go/protocol.go +59 -0
  288. data/go/vendor/github.com/quic-go/webtransport-go/receive_stream.go +185 -0
  289. data/go/vendor/github.com/quic-go/webtransport-go/send_stream.go +322 -0
  290. data/go/vendor/github.com/quic-go/webtransport-go/server.go +533 -0
  291. data/go/vendor/github.com/quic-go/webtransport-go/session.go +463 -0
  292. data/go/vendor/github.com/quic-go/webtransport-go/session_manager.go +190 -0
  293. data/go/vendor/github.com/quic-go/webtransport-go/stream.go +147 -0
  294. data/go/vendor/github.com/quic-go/webtransport-go/streams_map_incoming.go +179 -0
  295. data/go/vendor/github.com/quic-go/webtransport-go/streams_map_outgoing.go +357 -0
  296. data/go/vendor/github.com/quic-go/webtransport-go/transport.go +126 -0
  297. data/go/vendor/golang.org/x/crypto/LICENSE +27 -0
  298. data/go/vendor/golang.org/x/crypto/PATENTS +22 -0
  299. data/go/vendor/golang.org/x/crypto/chacha20/chacha_arm64.go +16 -0
  300. data/go/vendor/golang.org/x/crypto/chacha20/chacha_arm64.s +307 -0
  301. data/go/vendor/golang.org/x/crypto/chacha20/chacha_generic.go +398 -0
  302. data/go/vendor/golang.org/x/crypto/chacha20/chacha_noasm.go +13 -0
  303. data/go/vendor/golang.org/x/crypto/chacha20/chacha_ppc64x.go +16 -0
  304. data/go/vendor/golang.org/x/crypto/chacha20/chacha_ppc64x.s +501 -0
  305. data/go/vendor/golang.org/x/crypto/chacha20/chacha_s390x.go +27 -0
  306. data/go/vendor/golang.org/x/crypto/chacha20/chacha_s390x.s +224 -0
  307. data/go/vendor/golang.org/x/crypto/chacha20/xor.go +42 -0
  308. data/go/vendor/golang.org/x/crypto/chacha20poly1305/chacha20poly1305.go +101 -0
  309. data/go/vendor/golang.org/x/crypto/chacha20poly1305/chacha20poly1305_amd64.go +92 -0
  310. data/go/vendor/golang.org/x/crypto/chacha20poly1305/chacha20poly1305_amd64.s +5230 -0
  311. data/go/vendor/golang.org/x/crypto/chacha20poly1305/chacha20poly1305_generic.go +87 -0
  312. data/go/vendor/golang.org/x/crypto/chacha20poly1305/chacha20poly1305_noasm.go +15 -0
  313. data/go/vendor/golang.org/x/crypto/chacha20poly1305/fips140only_compat.go +9 -0
  314. data/go/vendor/golang.org/x/crypto/chacha20poly1305/fips140only_go1.26.go +11 -0
  315. data/go/vendor/golang.org/x/crypto/chacha20poly1305/xchacha20poly1305.go +89 -0
  316. data/go/vendor/golang.org/x/crypto/internal/alias/alias.go +31 -0
  317. data/go/vendor/golang.org/x/crypto/internal/alias/alias_purego.go +34 -0
  318. data/go/vendor/golang.org/x/crypto/internal/poly1305/mac_noasm.go +9 -0
  319. data/go/vendor/golang.org/x/crypto/internal/poly1305/poly1305.go +99 -0
  320. data/go/vendor/golang.org/x/crypto/internal/poly1305/sum_amd64.s +93 -0
  321. data/go/vendor/golang.org/x/crypto/internal/poly1305/sum_asm.go +47 -0
  322. data/go/vendor/golang.org/x/crypto/internal/poly1305/sum_generic.go +312 -0
  323. data/go/vendor/golang.org/x/crypto/internal/poly1305/sum_loong64.s +123 -0
  324. data/go/vendor/golang.org/x/crypto/internal/poly1305/sum_ppc64x.s +187 -0
  325. data/go/vendor/golang.org/x/crypto/internal/poly1305/sum_s390x.go +76 -0
  326. data/go/vendor/golang.org/x/crypto/internal/poly1305/sum_s390x.s +503 -0
  327. data/go/vendor/golang.org/x/net/LICENSE +27 -0
  328. data/go/vendor/golang.org/x/net/PATENTS +22 -0
  329. data/go/vendor/golang.org/x/net/bpf/asm.go +41 -0
  330. data/go/vendor/golang.org/x/net/bpf/constants.go +222 -0
  331. data/go/vendor/golang.org/x/net/bpf/doc.go +87 -0
  332. data/go/vendor/golang.org/x/net/bpf/instructions.go +726 -0
  333. data/go/vendor/golang.org/x/net/bpf/setter.go +10 -0
  334. data/go/vendor/golang.org/x/net/bpf/vm.go +150 -0
  335. data/go/vendor/golang.org/x/net/bpf/vm_instructions.go +182 -0
  336. data/go/vendor/golang.org/x/net/http/httpguts/guts.go +50 -0
  337. data/go/vendor/golang.org/x/net/http/httpguts/httplex.go +347 -0
  338. data/go/vendor/golang.org/x/net/http2/README.md +19 -0
  339. data/go/vendor/golang.org/x/net/http2/ascii.go +53 -0
  340. data/go/vendor/golang.org/x/net/http2/ciphers.go +641 -0
  341. data/go/vendor/golang.org/x/net/http2/client_conn_pool.go +301 -0
  342. data/go/vendor/golang.org/x/net/http2/client_priority_go126.go +20 -0
  343. data/go/vendor/golang.org/x/net/http2/client_priority_go127.go +13 -0
  344. data/go/vendor/golang.org/x/net/http2/clientconn.go +57 -0
  345. data/go/vendor/golang.org/x/net/http2/config.go +171 -0
  346. data/go/vendor/golang.org/x/net/http2/config_go125.go +15 -0
  347. data/go/vendor/golang.org/x/net/http2/config_go126.go +15 -0
  348. data/go/vendor/golang.org/x/net/http2/databuffer.go +149 -0
  349. data/go/vendor/golang.org/x/net/http2/errors.go +145 -0
  350. data/go/vendor/golang.org/x/net/http2/flow.go +120 -0
  351. data/go/vendor/golang.org/x/net/http2/frame.go +1871 -0
  352. data/go/vendor/golang.org/x/net/http2/gotrack.go +181 -0
  353. data/go/vendor/golang.org/x/net/http2/h2c/h2c.go +256 -0
  354. data/go/vendor/golang.org/x/net/http2/hpack/encode.go +245 -0
  355. data/go/vendor/golang.org/x/net/http2/hpack/hpack.go +523 -0
  356. data/go/vendor/golang.org/x/net/http2/hpack/huffman.go +226 -0
  357. data/go/vendor/golang.org/x/net/http2/hpack/static_table.go +188 -0
  358. data/go/vendor/golang.org/x/net/http2/hpack/tables.go +403 -0
  359. data/go/vendor/golang.org/x/net/http2/http2.go +415 -0
  360. data/go/vendor/golang.org/x/net/http2/pipe.go +184 -0
  361. data/go/vendor/golang.org/x/net/http2/server.go +3217 -0
  362. data/go/vendor/golang.org/x/net/http2/server_common.go +221 -0
  363. data/go/vendor/golang.org/x/net/http2/server_wrap.go +217 -0
  364. data/go/vendor/golang.org/x/net/http2/transport.go +3036 -0
  365. data/go/vendor/golang.org/x/net/http2/transport_common.go +447 -0
  366. data/go/vendor/golang.org/x/net/http2/transport_wrap.go +394 -0
  367. data/go/vendor/golang.org/x/net/http2/unencrypted.go +32 -0
  368. data/go/vendor/golang.org/x/net/http2/write.go +381 -0
  369. data/go/vendor/golang.org/x/net/http2/writesched.go +252 -0
  370. data/go/vendor/golang.org/x/net/http2/writesched_common.go +90 -0
  371. data/go/vendor/golang.org/x/net/http2/writesched_priority_rfc7540.go +420 -0
  372. data/go/vendor/golang.org/x/net/http2/writesched_priority_rfc9218.go +226 -0
  373. data/go/vendor/golang.org/x/net/http2/writesched_random.go +81 -0
  374. data/go/vendor/golang.org/x/net/http2/writesched_roundrobin.go +121 -0
  375. data/go/vendor/golang.org/x/net/idna/idna.go +884 -0
  376. data/go/vendor/golang.org/x/net/idna/punycode.go +220 -0
  377. data/go/vendor/golang.org/x/net/idna/tables15.0.0.go +5144 -0
  378. data/go/vendor/golang.org/x/net/idna/tables17.0.0.go +5302 -0
  379. data/go/vendor/golang.org/x/net/idna/trie.go +51 -0
  380. data/go/vendor/golang.org/x/net/idna/trieval.go +119 -0
  381. data/go/vendor/golang.org/x/net/internal/httpcommon/ascii.go +53 -0
  382. data/go/vendor/golang.org/x/net/internal/httpcommon/headermap.go +115 -0
  383. data/go/vendor/golang.org/x/net/internal/httpcommon/request.go +475 -0
  384. data/go/vendor/golang.org/x/net/internal/httpsfv/httpsfv.go +665 -0
  385. data/go/vendor/golang.org/x/net/internal/iana/const.go +223 -0
  386. data/go/vendor/golang.org/x/net/internal/socket/cmsghdr.go +11 -0
  387. data/go/vendor/golang.org/x/net/internal/socket/cmsghdr_bsd.go +13 -0
  388. data/go/vendor/golang.org/x/net/internal/socket/cmsghdr_linux_32bit.go +13 -0
  389. data/go/vendor/golang.org/x/net/internal/socket/cmsghdr_linux_64bit.go +13 -0
  390. data/go/vendor/golang.org/x/net/internal/socket/cmsghdr_solaris_64bit.go +13 -0
  391. data/go/vendor/golang.org/x/net/internal/socket/cmsghdr_stub.go +27 -0
  392. data/go/vendor/golang.org/x/net/internal/socket/cmsghdr_unix.go +21 -0
  393. data/go/vendor/golang.org/x/net/internal/socket/cmsghdr_zos_s390x.go +11 -0
  394. data/go/vendor/golang.org/x/net/internal/socket/complete_dontwait.go +25 -0
  395. data/go/vendor/golang.org/x/net/internal/socket/complete_nodontwait.go +21 -0
  396. data/go/vendor/golang.org/x/net/internal/socket/empty.s +7 -0
  397. data/go/vendor/golang.org/x/net/internal/socket/error_unix.go +31 -0
  398. data/go/vendor/golang.org/x/net/internal/socket/error_windows.go +26 -0
  399. data/go/vendor/golang.org/x/net/internal/socket/iovec_32bit.go +18 -0
  400. data/go/vendor/golang.org/x/net/internal/socket/iovec_64bit.go +18 -0
  401. data/go/vendor/golang.org/x/net/internal/socket/iovec_solaris_64bit.go +18 -0
  402. data/go/vendor/golang.org/x/net/internal/socket/iovec_stub.go +11 -0
  403. data/go/vendor/golang.org/x/net/internal/socket/mmsghdr_stub.go +21 -0
  404. data/go/vendor/golang.org/x/net/internal/socket/mmsghdr_unix.go +195 -0
  405. data/go/vendor/golang.org/x/net/internal/socket/msghdr_bsd.go +39 -0
  406. data/go/vendor/golang.org/x/net/internal/socket/msghdr_bsdvar.go +16 -0
  407. data/go/vendor/golang.org/x/net/internal/socket/msghdr_linux.go +36 -0
  408. data/go/vendor/golang.org/x/net/internal/socket/msghdr_linux_32bit.go +23 -0
  409. data/go/vendor/golang.org/x/net/internal/socket/msghdr_linux_64bit.go +23 -0
  410. data/go/vendor/golang.org/x/net/internal/socket/msghdr_openbsd.go +14 -0
  411. data/go/vendor/golang.org/x/net/internal/socket/msghdr_solaris_64bit.go +38 -0
  412. data/go/vendor/golang.org/x/net/internal/socket/msghdr_stub.go +14 -0
  413. data/go/vendor/golang.org/x/net/internal/socket/msghdr_zos_s390x.go +35 -0
  414. data/go/vendor/golang.org/x/net/internal/socket/norace.go +12 -0
  415. data/go/vendor/golang.org/x/net/internal/socket/race.go +37 -0
  416. data/go/vendor/golang.org/x/net/internal/socket/rawconn.go +91 -0
  417. data/go/vendor/golang.org/x/net/internal/socket/rawconn_mmsg.go +53 -0
  418. data/go/vendor/golang.org/x/net/internal/socket/rawconn_msg.go +59 -0
  419. data/go/vendor/golang.org/x/net/internal/socket/rawconn_nommsg.go +15 -0
  420. data/go/vendor/golang.org/x/net/internal/socket/rawconn_nomsg.go +15 -0
  421. data/go/vendor/golang.org/x/net/internal/socket/socket.go +281 -0
  422. data/go/vendor/golang.org/x/net/internal/socket/sys_bsd.go +15 -0
  423. data/go/vendor/golang.org/x/net/internal/socket/sys_const_unix.go +20 -0
  424. data/go/vendor/golang.org/x/net/internal/socket/sys_linux.go +22 -0
  425. data/go/vendor/golang.org/x/net/internal/socket/sys_linux_386.go +28 -0
  426. data/go/vendor/golang.org/x/net/internal/socket/sys_linux_386.s +11 -0
  427. data/go/vendor/golang.org/x/net/internal/socket/sys_linux_amd64.go +10 -0
  428. data/go/vendor/golang.org/x/net/internal/socket/sys_linux_arm.go +10 -0
  429. data/go/vendor/golang.org/x/net/internal/socket/sys_linux_arm64.go +10 -0
  430. data/go/vendor/golang.org/x/net/internal/socket/sys_linux_loong64.go +12 -0
  431. data/go/vendor/golang.org/x/net/internal/socket/sys_linux_mips.go +10 -0
  432. data/go/vendor/golang.org/x/net/internal/socket/sys_linux_mips64.go +10 -0
  433. data/go/vendor/golang.org/x/net/internal/socket/sys_linux_mips64le.go +10 -0
  434. data/go/vendor/golang.org/x/net/internal/socket/sys_linux_mipsle.go +10 -0
  435. data/go/vendor/golang.org/x/net/internal/socket/sys_linux_ppc.go +10 -0
  436. data/go/vendor/golang.org/x/net/internal/socket/sys_linux_ppc64.go +10 -0
  437. data/go/vendor/golang.org/x/net/internal/socket/sys_linux_ppc64le.go +10 -0
  438. data/go/vendor/golang.org/x/net/internal/socket/sys_linux_riscv64.go +12 -0
  439. data/go/vendor/golang.org/x/net/internal/socket/sys_linux_s390x.go +28 -0
  440. data/go/vendor/golang.org/x/net/internal/socket/sys_linux_s390x.s +11 -0
  441. data/go/vendor/golang.org/x/net/internal/socket/sys_netbsd.go +25 -0
  442. data/go/vendor/golang.org/x/net/internal/socket/sys_posix.go +184 -0
  443. data/go/vendor/golang.org/x/net/internal/socket/sys_stub.go +52 -0
  444. data/go/vendor/golang.org/x/net/internal/socket/sys_unix.go +121 -0
  445. data/go/vendor/golang.org/x/net/internal/socket/sys_windows.go +55 -0
  446. data/go/vendor/golang.org/x/net/internal/socket/sys_zos_s390x.go +66 -0
  447. data/go/vendor/golang.org/x/net/internal/socket/sys_zos_s390x.s +11 -0
  448. data/go/vendor/golang.org/x/net/internal/socket/zsys_aix_ppc64.go +39 -0
  449. data/go/vendor/golang.org/x/net/internal/socket/zsys_darwin_amd64.go +32 -0
  450. data/go/vendor/golang.org/x/net/internal/socket/zsys_darwin_arm64.go +32 -0
  451. data/go/vendor/golang.org/x/net/internal/socket/zsys_dragonfly_amd64.go +32 -0
  452. data/go/vendor/golang.org/x/net/internal/socket/zsys_freebsd_386.go +30 -0
  453. data/go/vendor/golang.org/x/net/internal/socket/zsys_freebsd_amd64.go +32 -0
  454. data/go/vendor/golang.org/x/net/internal/socket/zsys_freebsd_arm.go +30 -0
  455. data/go/vendor/golang.org/x/net/internal/socket/zsys_freebsd_arm64.go +32 -0
  456. data/go/vendor/golang.org/x/net/internal/socket/zsys_freebsd_riscv64.go +30 -0
  457. data/go/vendor/golang.org/x/net/internal/socket/zsys_linux_386.go +35 -0
  458. data/go/vendor/golang.org/x/net/internal/socket/zsys_linux_amd64.go +38 -0
  459. data/go/vendor/golang.org/x/net/internal/socket/zsys_linux_arm.go +35 -0
  460. data/go/vendor/golang.org/x/net/internal/socket/zsys_linux_arm64.go +38 -0
  461. data/go/vendor/golang.org/x/net/internal/socket/zsys_linux_loong64.go +39 -0
  462. data/go/vendor/golang.org/x/net/internal/socket/zsys_linux_mips.go +35 -0
  463. data/go/vendor/golang.org/x/net/internal/socket/zsys_linux_mips64.go +38 -0
  464. data/go/vendor/golang.org/x/net/internal/socket/zsys_linux_mips64le.go +38 -0
  465. data/go/vendor/golang.org/x/net/internal/socket/zsys_linux_mipsle.go +35 -0
  466. data/go/vendor/golang.org/x/net/internal/socket/zsys_linux_ppc.go +35 -0
  467. data/go/vendor/golang.org/x/net/internal/socket/zsys_linux_ppc64.go +38 -0
  468. data/go/vendor/golang.org/x/net/internal/socket/zsys_linux_ppc64le.go +38 -0
  469. data/go/vendor/golang.org/x/net/internal/socket/zsys_linux_riscv64.go +39 -0
  470. data/go/vendor/golang.org/x/net/internal/socket/zsys_linux_s390x.go +38 -0
  471. data/go/vendor/golang.org/x/net/internal/socket/zsys_netbsd_386.go +35 -0
  472. data/go/vendor/golang.org/x/net/internal/socket/zsys_netbsd_amd64.go +38 -0
  473. data/go/vendor/golang.org/x/net/internal/socket/zsys_netbsd_arm.go +35 -0
  474. data/go/vendor/golang.org/x/net/internal/socket/zsys_netbsd_arm64.go +38 -0
  475. data/go/vendor/golang.org/x/net/internal/socket/zsys_openbsd_386.go +30 -0
  476. data/go/vendor/golang.org/x/net/internal/socket/zsys_openbsd_amd64.go +32 -0
  477. data/go/vendor/golang.org/x/net/internal/socket/zsys_openbsd_arm.go +30 -0
  478. data/go/vendor/golang.org/x/net/internal/socket/zsys_openbsd_arm64.go +32 -0
  479. data/go/vendor/golang.org/x/net/internal/socket/zsys_openbsd_mips64.go +30 -0
  480. data/go/vendor/golang.org/x/net/internal/socket/zsys_openbsd_ppc64.go +30 -0
  481. data/go/vendor/golang.org/x/net/internal/socket/zsys_openbsd_riscv64.go +30 -0
  482. data/go/vendor/golang.org/x/net/internal/socket/zsys_solaris_amd64.go +32 -0
  483. data/go/vendor/golang.org/x/net/internal/socket/zsys_zos_s390x.go +28 -0
  484. data/go/vendor/golang.org/x/net/ipv4/batch.go +194 -0
  485. data/go/vendor/golang.org/x/net/ipv4/control.go +144 -0
  486. data/go/vendor/golang.org/x/net/ipv4/control_bsd.go +43 -0
  487. data/go/vendor/golang.org/x/net/ipv4/control_pktinfo.go +41 -0
  488. data/go/vendor/golang.org/x/net/ipv4/control_stub.go +13 -0
  489. data/go/vendor/golang.org/x/net/ipv4/control_unix.go +75 -0
  490. data/go/vendor/golang.org/x/net/ipv4/control_windows.go +12 -0
  491. data/go/vendor/golang.org/x/net/ipv4/control_zos.go +88 -0
  492. data/go/vendor/golang.org/x/net/ipv4/dgramopt.go +264 -0
  493. data/go/vendor/golang.org/x/net/ipv4/doc.go +240 -0
  494. data/go/vendor/golang.org/x/net/ipv4/endpoint.go +186 -0
  495. data/go/vendor/golang.org/x/net/ipv4/genericopt.go +55 -0
  496. data/go/vendor/golang.org/x/net/ipv4/header.go +170 -0
  497. data/go/vendor/golang.org/x/net/ipv4/helper.go +77 -0
  498. data/go/vendor/golang.org/x/net/ipv4/iana.go +38 -0
  499. data/go/vendor/golang.org/x/net/ipv4/icmp.go +57 -0
  500. data/go/vendor/golang.org/x/net/ipv4/icmp_linux.go +25 -0
  501. data/go/vendor/golang.org/x/net/ipv4/icmp_stub.go +25 -0
  502. data/go/vendor/golang.org/x/net/ipv4/packet.go +117 -0
  503. data/go/vendor/golang.org/x/net/ipv4/payload.go +23 -0
  504. data/go/vendor/golang.org/x/net/ipv4/payload_cmsg.go +84 -0
  505. data/go/vendor/golang.org/x/net/ipv4/payload_nocmsg.go +39 -0
  506. data/go/vendor/golang.org/x/net/ipv4/sockopt.go +44 -0
  507. data/go/vendor/golang.org/x/net/ipv4/sockopt_posix.go +71 -0
  508. data/go/vendor/golang.org/x/net/ipv4/sockopt_stub.go +42 -0
  509. data/go/vendor/golang.org/x/net/ipv4/sys_aix.go +43 -0
  510. data/go/vendor/golang.org/x/net/ipv4/sys_asmreq.go +122 -0
  511. data/go/vendor/golang.org/x/net/ipv4/sys_asmreq_stub.go +25 -0
  512. data/go/vendor/golang.org/x/net/ipv4/sys_asmreqn.go +44 -0
  513. data/go/vendor/golang.org/x/net/ipv4/sys_asmreqn_stub.go +21 -0
  514. data/go/vendor/golang.org/x/net/ipv4/sys_bpf.go +24 -0
  515. data/go/vendor/golang.org/x/net/ipv4/sys_bpf_stub.go +16 -0
  516. data/go/vendor/golang.org/x/net/ipv4/sys_bsd.go +41 -0
  517. data/go/vendor/golang.org/x/net/ipv4/sys_darwin.go +69 -0
  518. data/go/vendor/golang.org/x/net/ipv4/sys_dragonfly.go +39 -0
  519. data/go/vendor/golang.org/x/net/ipv4/sys_freebsd.go +80 -0
  520. data/go/vendor/golang.org/x/net/ipv4/sys_linux.go +61 -0
  521. data/go/vendor/golang.org/x/net/ipv4/sys_solaris.go +61 -0
  522. data/go/vendor/golang.org/x/net/ipv4/sys_ssmreq.go +52 -0
  523. data/go/vendor/golang.org/x/net/ipv4/sys_ssmreq_stub.go +21 -0
  524. data/go/vendor/golang.org/x/net/ipv4/sys_stub.go +13 -0
  525. data/go/vendor/golang.org/x/net/ipv4/sys_windows.go +44 -0
  526. data/go/vendor/golang.org/x/net/ipv4/sys_zos.go +57 -0
  527. data/go/vendor/golang.org/x/net/ipv4/zsys_aix_ppc64.go +16 -0
  528. data/go/vendor/golang.org/x/net/ipv4/zsys_darwin.go +59 -0
  529. data/go/vendor/golang.org/x/net/ipv4/zsys_dragonfly.go +13 -0
  530. data/go/vendor/golang.org/x/net/ipv4/zsys_freebsd_386.go +52 -0
  531. data/go/vendor/golang.org/x/net/ipv4/zsys_freebsd_amd64.go +54 -0
  532. data/go/vendor/golang.org/x/net/ipv4/zsys_freebsd_arm.go +54 -0
  533. data/go/vendor/golang.org/x/net/ipv4/zsys_freebsd_arm64.go +52 -0
  534. data/go/vendor/golang.org/x/net/ipv4/zsys_freebsd_riscv64.go +52 -0
  535. data/go/vendor/golang.org/x/net/ipv4/zsys_linux_386.go +72 -0
  536. data/go/vendor/golang.org/x/net/ipv4/zsys_linux_amd64.go +74 -0
  537. data/go/vendor/golang.org/x/net/ipv4/zsys_linux_arm.go +72 -0
  538. data/go/vendor/golang.org/x/net/ipv4/zsys_linux_arm64.go +74 -0
  539. data/go/vendor/golang.org/x/net/ipv4/zsys_linux_loong64.go +76 -0
  540. data/go/vendor/golang.org/x/net/ipv4/zsys_linux_mips.go +72 -0
  541. data/go/vendor/golang.org/x/net/ipv4/zsys_linux_mips64.go +74 -0
  542. data/go/vendor/golang.org/x/net/ipv4/zsys_linux_mips64le.go +74 -0
  543. data/go/vendor/golang.org/x/net/ipv4/zsys_linux_mipsle.go +72 -0
  544. data/go/vendor/golang.org/x/net/ipv4/zsys_linux_ppc.go +72 -0
  545. data/go/vendor/golang.org/x/net/ipv4/zsys_linux_ppc64.go +74 -0
  546. data/go/vendor/golang.org/x/net/ipv4/zsys_linux_ppc64le.go +74 -0
  547. data/go/vendor/golang.org/x/net/ipv4/zsys_linux_riscv64.go +76 -0
  548. data/go/vendor/golang.org/x/net/ipv4/zsys_linux_s390x.go +74 -0
  549. data/go/vendor/golang.org/x/net/ipv4/zsys_netbsd.go +13 -0
  550. data/go/vendor/golang.org/x/net/ipv4/zsys_openbsd.go +13 -0
  551. data/go/vendor/golang.org/x/net/ipv4/zsys_solaris.go +57 -0
  552. data/go/vendor/golang.org/x/net/ipv4/zsys_zos_s390x.go +56 -0
  553. data/go/vendor/golang.org/x/net/ipv6/batch.go +116 -0
  554. data/go/vendor/golang.org/x/net/ipv6/control.go +187 -0
  555. data/go/vendor/golang.org/x/net/ipv6/control_rfc2292_unix.go +51 -0
  556. data/go/vendor/golang.org/x/net/ipv6/control_rfc3542_unix.go +97 -0
  557. data/go/vendor/golang.org/x/net/ipv6/control_stub.go +13 -0
  558. data/go/vendor/golang.org/x/net/ipv6/control_unix.go +55 -0
  559. data/go/vendor/golang.org/x/net/ipv6/control_windows.go +12 -0
  560. data/go/vendor/golang.org/x/net/ipv6/dgramopt.go +301 -0
  561. data/go/vendor/golang.org/x/net/ipv6/doc.go +239 -0
  562. data/go/vendor/golang.org/x/net/ipv6/endpoint.go +127 -0
  563. data/go/vendor/golang.org/x/net/ipv6/genericopt.go +56 -0
  564. data/go/vendor/golang.org/x/net/ipv6/header.go +55 -0
  565. data/go/vendor/golang.org/x/net/ipv6/helper.go +58 -0
  566. data/go/vendor/golang.org/x/net/ipv6/iana.go +86 -0
  567. data/go/vendor/golang.org/x/net/ipv6/icmp.go +60 -0
  568. data/go/vendor/golang.org/x/net/ipv6/icmp_bsd.go +29 -0
  569. data/go/vendor/golang.org/x/net/ipv6/icmp_linux.go +27 -0
  570. data/go/vendor/golang.org/x/net/ipv6/icmp_solaris.go +27 -0
  571. data/go/vendor/golang.org/x/net/ipv6/icmp_stub.go +23 -0
  572. data/go/vendor/golang.org/x/net/ipv6/icmp_windows.go +22 -0
  573. data/go/vendor/golang.org/x/net/ipv6/icmp_zos.go +29 -0
  574. data/go/vendor/golang.org/x/net/ipv6/payload.go +23 -0
  575. data/go/vendor/golang.org/x/net/ipv6/payload_cmsg.go +70 -0
  576. data/go/vendor/golang.org/x/net/ipv6/payload_nocmsg.go +38 -0
  577. data/go/vendor/golang.org/x/net/ipv6/sockopt.go +43 -0
  578. data/go/vendor/golang.org/x/net/ipv6/sockopt_posix.go +89 -0
  579. data/go/vendor/golang.org/x/net/ipv6/sockopt_stub.go +46 -0
  580. data/go/vendor/golang.org/x/net/ipv6/sys_aix.go +79 -0
  581. data/go/vendor/golang.org/x/net/ipv6/sys_asmreq.go +24 -0
  582. data/go/vendor/golang.org/x/net/ipv6/sys_asmreq_stub.go +17 -0
  583. data/go/vendor/golang.org/x/net/ipv6/sys_bpf.go +24 -0
  584. data/go/vendor/golang.org/x/net/ipv6/sys_bpf_stub.go +16 -0
  585. data/go/vendor/golang.org/x/net/ipv6/sys_bsd.go +59 -0
  586. data/go/vendor/golang.org/x/net/ipv6/sys_darwin.go +80 -0
  587. data/go/vendor/golang.org/x/net/ipv6/sys_freebsd.go +94 -0
  588. data/go/vendor/golang.org/x/net/ipv6/sys_linux.go +76 -0
  589. data/go/vendor/golang.org/x/net/ipv6/sys_solaris.go +76 -0
  590. data/go/vendor/golang.org/x/net/ipv6/sys_ssmreq.go +54 -0
  591. data/go/vendor/golang.org/x/net/ipv6/sys_ssmreq_stub.go +21 -0
  592. data/go/vendor/golang.org/x/net/ipv6/sys_stub.go +13 -0
  593. data/go/vendor/golang.org/x/net/ipv6/sys_windows.go +68 -0
  594. data/go/vendor/golang.org/x/net/ipv6/sys_zos.go +72 -0
  595. data/go/vendor/golang.org/x/net/ipv6/zsys_aix_ppc64.go +68 -0
  596. data/go/vendor/golang.org/x/net/ipv6/zsys_darwin.go +64 -0
  597. data/go/vendor/golang.org/x/net/ipv6/zsys_dragonfly.go +42 -0
  598. data/go/vendor/golang.org/x/net/ipv6/zsys_freebsd_386.go +64 -0
  599. data/go/vendor/golang.org/x/net/ipv6/zsys_freebsd_amd64.go +66 -0
  600. data/go/vendor/golang.org/x/net/ipv6/zsys_freebsd_arm.go +66 -0
  601. data/go/vendor/golang.org/x/net/ipv6/zsys_freebsd_arm64.go +64 -0
  602. data/go/vendor/golang.org/x/net/ipv6/zsys_freebsd_riscv64.go +64 -0
  603. data/go/vendor/golang.org/x/net/ipv6/zsys_linux_386.go +72 -0
  604. data/go/vendor/golang.org/x/net/ipv6/zsys_linux_amd64.go +74 -0
  605. data/go/vendor/golang.org/x/net/ipv6/zsys_linux_arm.go +72 -0
  606. data/go/vendor/golang.org/x/net/ipv6/zsys_linux_arm64.go +74 -0
  607. data/go/vendor/golang.org/x/net/ipv6/zsys_linux_loong64.go +76 -0
  608. data/go/vendor/golang.org/x/net/ipv6/zsys_linux_mips.go +72 -0
  609. data/go/vendor/golang.org/x/net/ipv6/zsys_linux_mips64.go +74 -0
  610. data/go/vendor/golang.org/x/net/ipv6/zsys_linux_mips64le.go +74 -0
  611. data/go/vendor/golang.org/x/net/ipv6/zsys_linux_mipsle.go +72 -0
  612. data/go/vendor/golang.org/x/net/ipv6/zsys_linux_ppc.go +72 -0
  613. data/go/vendor/golang.org/x/net/ipv6/zsys_linux_ppc64.go +74 -0
  614. data/go/vendor/golang.org/x/net/ipv6/zsys_linux_ppc64le.go +74 -0
  615. data/go/vendor/golang.org/x/net/ipv6/zsys_linux_riscv64.go +76 -0
  616. data/go/vendor/golang.org/x/net/ipv6/zsys_linux_s390x.go +74 -0
  617. data/go/vendor/golang.org/x/net/ipv6/zsys_netbsd.go +42 -0
  618. data/go/vendor/golang.org/x/net/ipv6/zsys_openbsd.go +42 -0
  619. data/go/vendor/golang.org/x/net/ipv6/zsys_solaris.go +63 -0
  620. data/go/vendor/golang.org/x/net/ipv6/zsys_zos_s390x.go +62 -0
  621. data/go/vendor/golang.org/x/sys/LICENSE +27 -0
  622. data/go/vendor/golang.org/x/sys/PATENTS +22 -0
  623. data/go/vendor/golang.org/x/sys/cpu/asm_aix_ppc64.s +17 -0
  624. data/go/vendor/golang.org/x/sys/cpu/asm_darwin_arm64_gc.s +12 -0
  625. data/go/vendor/golang.org/x/sys/cpu/asm_darwin_x86_gc.s +17 -0
  626. data/go/vendor/golang.org/x/sys/cpu/byteorder.go +66 -0
  627. data/go/vendor/golang.org/x/sys/cpu/cpu.go +343 -0
  628. data/go/vendor/golang.org/x/sys/cpu/cpu_aix.go +33 -0
  629. data/go/vendor/golang.org/x/sys/cpu/cpu_arm.go +73 -0
  630. data/go/vendor/golang.org/x/sys/cpu/cpu_arm64.go +191 -0
  631. data/go/vendor/golang.org/x/sys/cpu/cpu_arm64.s +35 -0
  632. data/go/vendor/golang.org/x/sys/cpu/cpu_darwin_arm64.go +67 -0
  633. data/go/vendor/golang.org/x/sys/cpu/cpu_darwin_arm64_other.go +31 -0
  634. data/go/vendor/golang.org/x/sys/cpu/cpu_darwin_x86.go +61 -0
  635. data/go/vendor/golang.org/x/sys/cpu/cpu_gc_arm64.go +12 -0
  636. data/go/vendor/golang.org/x/sys/cpu/cpu_gc_s390x.go +21 -0
  637. data/go/vendor/golang.org/x/sys/cpu/cpu_gc_x86.go +15 -0
  638. data/go/vendor/golang.org/x/sys/cpu/cpu_gc_x86.s +26 -0
  639. data/go/vendor/golang.org/x/sys/cpu/cpu_gccgo_arm64.go +12 -0
  640. data/go/vendor/golang.org/x/sys/cpu/cpu_gccgo_s390x.go +22 -0
  641. data/go/vendor/golang.org/x/sys/cpu/cpu_gccgo_x86.c +37 -0
  642. data/go/vendor/golang.org/x/sys/cpu/cpu_gccgo_x86.go +25 -0
  643. data/go/vendor/golang.org/x/sys/cpu/cpu_linux.go +15 -0
  644. data/go/vendor/golang.org/x/sys/cpu/cpu_linux_arm.go +39 -0
  645. data/go/vendor/golang.org/x/sys/cpu/cpu_linux_arm64.go +120 -0
  646. data/go/vendor/golang.org/x/sys/cpu/cpu_linux_loong64.go +22 -0
  647. data/go/vendor/golang.org/x/sys/cpu/cpu_linux_mips64x.go +22 -0
  648. data/go/vendor/golang.org/x/sys/cpu/cpu_linux_noinit.go +9 -0
  649. data/go/vendor/golang.org/x/sys/cpu/cpu_linux_ppc64x.go +30 -0
  650. data/go/vendor/golang.org/x/sys/cpu/cpu_linux_riscv64.go +162 -0
  651. data/go/vendor/golang.org/x/sys/cpu/cpu_linux_s390x.go +40 -0
  652. data/go/vendor/golang.org/x/sys/cpu/cpu_loong64.go +62 -0
  653. data/go/vendor/golang.org/x/sys/cpu/cpu_loong64.s +13 -0
  654. data/go/vendor/golang.org/x/sys/cpu/cpu_mips64x.go +15 -0
  655. data/go/vendor/golang.org/x/sys/cpu/cpu_mipsx.go +11 -0
  656. data/go/vendor/golang.org/x/sys/cpu/cpu_netbsd_arm64.go +173 -0
  657. data/go/vendor/golang.org/x/sys/cpu/cpu_openbsd_arm64.go +65 -0
  658. data/go/vendor/golang.org/x/sys/cpu/cpu_openbsd_arm64.s +11 -0
  659. data/go/vendor/golang.org/x/sys/cpu/cpu_other_arm.go +9 -0
  660. data/go/vendor/golang.org/x/sys/cpu/cpu_other_arm64.go +11 -0
  661. data/go/vendor/golang.org/x/sys/cpu/cpu_other_mips64x.go +11 -0
  662. data/go/vendor/golang.org/x/sys/cpu/cpu_other_ppc64x.go +12 -0
  663. data/go/vendor/golang.org/x/sys/cpu/cpu_other_riscv64.go +11 -0
  664. data/go/vendor/golang.org/x/sys/cpu/cpu_other_x86.go +11 -0
  665. data/go/vendor/golang.org/x/sys/cpu/cpu_ppc64x.go +16 -0
  666. data/go/vendor/golang.org/x/sys/cpu/cpu_riscv64.go +33 -0
  667. data/go/vendor/golang.org/x/sys/cpu/cpu_s390x.go +172 -0
  668. data/go/vendor/golang.org/x/sys/cpu/cpu_s390x.s +57 -0
  669. data/go/vendor/golang.org/x/sys/cpu/cpu_wasm.go +17 -0
  670. data/go/vendor/golang.org/x/sys/cpu/cpu_windows.go +26 -0
  671. data/go/vendor/golang.org/x/sys/cpu/cpu_windows_arm64.go +38 -0
  672. data/go/vendor/golang.org/x/sys/cpu/cpu_x86.go +236 -0
  673. data/go/vendor/golang.org/x/sys/cpu/cpu_zos.go +10 -0
  674. data/go/vendor/golang.org/x/sys/cpu/cpu_zos_s390x.go +25 -0
  675. data/go/vendor/golang.org/x/sys/cpu/endian_big.go +10 -0
  676. data/go/vendor/golang.org/x/sys/cpu/endian_little.go +10 -0
  677. data/go/vendor/golang.org/x/sys/cpu/hwcap_linux.go +71 -0
  678. data/go/vendor/golang.org/x/sys/cpu/parse.go +55 -0
  679. data/go/vendor/golang.org/x/sys/cpu/proc_cpuinfo_linux.go +53 -0
  680. data/go/vendor/golang.org/x/sys/cpu/runtime_auxv.go +16 -0
  681. data/go/vendor/golang.org/x/sys/cpu/runtime_auxv_go121.go +18 -0
  682. data/go/vendor/golang.org/x/sys/cpu/syscall_aix_gccgo.go +26 -0
  683. data/go/vendor/golang.org/x/sys/cpu/syscall_aix_ppc64_gc.go +35 -0
  684. data/go/vendor/golang.org/x/sys/cpu/syscall_darwin_arm64_gc.go +54 -0
  685. data/go/vendor/golang.org/x/sys/cpu/syscall_darwin_x86_gc.go +98 -0
  686. data/go/vendor/golang.org/x/sys/cpu/zcpu_windows.go +48 -0
  687. data/go/vendor/golang.org/x/sys/unix/README.md +184 -0
  688. data/go/vendor/golang.org/x/sys/unix/affinity_linux.go +189 -0
  689. data/go/vendor/golang.org/x/sys/unix/aliases.go +13 -0
  690. data/go/vendor/golang.org/x/sys/unix/asm_aix_ppc64.s +17 -0
  691. data/go/vendor/golang.org/x/sys/unix/asm_bsd_386.s +27 -0
  692. data/go/vendor/golang.org/x/sys/unix/asm_bsd_amd64.s +27 -0
  693. data/go/vendor/golang.org/x/sys/unix/asm_bsd_arm.s +27 -0
  694. data/go/vendor/golang.org/x/sys/unix/asm_bsd_arm64.s +27 -0
  695. data/go/vendor/golang.org/x/sys/unix/asm_bsd_ppc64.s +29 -0
  696. data/go/vendor/golang.org/x/sys/unix/asm_bsd_riscv64.s +27 -0
  697. data/go/vendor/golang.org/x/sys/unix/asm_linux_386.s +65 -0
  698. data/go/vendor/golang.org/x/sys/unix/asm_linux_amd64.s +57 -0
  699. data/go/vendor/golang.org/x/sys/unix/asm_linux_arm.s +56 -0
  700. data/go/vendor/golang.org/x/sys/unix/asm_linux_arm64.s +50 -0
  701. data/go/vendor/golang.org/x/sys/unix/asm_linux_loong64.s +51 -0
  702. data/go/vendor/golang.org/x/sys/unix/asm_linux_mips64x.s +54 -0
  703. data/go/vendor/golang.org/x/sys/unix/asm_linux_mipsx.s +52 -0
  704. data/go/vendor/golang.org/x/sys/unix/asm_linux_ppc64x.s +42 -0
  705. data/go/vendor/golang.org/x/sys/unix/asm_linux_riscv64.s +47 -0
  706. data/go/vendor/golang.org/x/sys/unix/asm_linux_s390x.s +54 -0
  707. data/go/vendor/golang.org/x/sys/unix/asm_openbsd_mips64.s +29 -0
  708. data/go/vendor/golang.org/x/sys/unix/asm_solaris_amd64.s +17 -0
  709. data/go/vendor/golang.org/x/sys/unix/asm_zos_s390x.s +382 -0
  710. data/go/vendor/golang.org/x/sys/unix/auxv.go +36 -0
  711. data/go/vendor/golang.org/x/sys/unix/auxv_unsupported.go +13 -0
  712. data/go/vendor/golang.org/x/sys/unix/bluetooth_linux.go +36 -0
  713. data/go/vendor/golang.org/x/sys/unix/bpxsvc_zos.go +657 -0
  714. data/go/vendor/golang.org/x/sys/unix/bpxsvc_zos.s +192 -0
  715. data/go/vendor/golang.org/x/sys/unix/cap_freebsd.go +195 -0
  716. data/go/vendor/golang.org/x/sys/unix/constants.go +13 -0
  717. data/go/vendor/golang.org/x/sys/unix/dev_aix_ppc.go +26 -0
  718. data/go/vendor/golang.org/x/sys/unix/dev_aix_ppc64.go +28 -0
  719. data/go/vendor/golang.org/x/sys/unix/dev_darwin.go +24 -0
  720. data/go/vendor/golang.org/x/sys/unix/dev_dragonfly.go +30 -0
  721. data/go/vendor/golang.org/x/sys/unix/dev_freebsd.go +30 -0
  722. data/go/vendor/golang.org/x/sys/unix/dev_linux.go +42 -0
  723. data/go/vendor/golang.org/x/sys/unix/dev_netbsd.go +29 -0
  724. data/go/vendor/golang.org/x/sys/unix/dev_openbsd.go +29 -0
  725. data/go/vendor/golang.org/x/sys/unix/dev_zos.go +28 -0
  726. data/go/vendor/golang.org/x/sys/unix/dirent.go +102 -0
  727. data/go/vendor/golang.org/x/sys/unix/endian_big.go +9 -0
  728. data/go/vendor/golang.org/x/sys/unix/endian_little.go +9 -0
  729. data/go/vendor/golang.org/x/sys/unix/env_unix.go +31 -0
  730. data/go/vendor/golang.org/x/sys/unix/fcntl.go +36 -0
  731. data/go/vendor/golang.org/x/sys/unix/fcntl_darwin.go +24 -0
  732. data/go/vendor/golang.org/x/sys/unix/fcntl_linux_32bit.go +13 -0
  733. data/go/vendor/golang.org/x/sys/unix/fdset.go +27 -0
  734. data/go/vendor/golang.org/x/sys/unix/gccgo.go +59 -0
  735. data/go/vendor/golang.org/x/sys/unix/gccgo_c.c +44 -0
  736. data/go/vendor/golang.org/x/sys/unix/gccgo_linux_amd64.go +20 -0
  737. data/go/vendor/golang.org/x/sys/unix/ifreq_linux.go +139 -0
  738. data/go/vendor/golang.org/x/sys/unix/ioctl_linux.go +334 -0
  739. data/go/vendor/golang.org/x/sys/unix/ioctl_signed.go +74 -0
  740. data/go/vendor/golang.org/x/sys/unix/ioctl_unsigned.go +74 -0
  741. data/go/vendor/golang.org/x/sys/unix/ioctl_zos.go +71 -0
  742. data/go/vendor/golang.org/x/sys/unix/mkall.sh +250 -0
  743. data/go/vendor/golang.org/x/sys/unix/mkerrors.sh +814 -0
  744. data/go/vendor/golang.org/x/sys/unix/mmap_nomremap.go +13 -0
  745. data/go/vendor/golang.org/x/sys/unix/mremap.go +57 -0
  746. data/go/vendor/golang.org/x/sys/unix/pagesize_unix.go +15 -0
  747. data/go/vendor/golang.org/x/sys/unix/pledge_openbsd.go +111 -0
  748. data/go/vendor/golang.org/x/sys/unix/ptrace_darwin.go +11 -0
  749. data/go/vendor/golang.org/x/sys/unix/ptrace_ios.go +11 -0
  750. data/go/vendor/golang.org/x/sys/unix/race.go +30 -0
  751. data/go/vendor/golang.org/x/sys/unix/race0.go +25 -0
  752. data/go/vendor/golang.org/x/sys/unix/readdirent_getdents.go +12 -0
  753. data/go/vendor/golang.org/x/sys/unix/readdirent_getdirentries.go +19 -0
  754. data/go/vendor/golang.org/x/sys/unix/readv_unix.go +103 -0
  755. data/go/vendor/golang.org/x/sys/unix/sockcmsg_dragonfly.go +16 -0
  756. data/go/vendor/golang.org/x/sys/unix/sockcmsg_linux.go +85 -0
  757. data/go/vendor/golang.org/x/sys/unix/sockcmsg_unix.go +106 -0
  758. data/go/vendor/golang.org/x/sys/unix/sockcmsg_unix_other.go +46 -0
  759. data/go/vendor/golang.org/x/sys/unix/sockcmsg_zos.go +58 -0
  760. data/go/vendor/golang.org/x/sys/unix/symaddr_zos_s390x.s +75 -0
  761. data/go/vendor/golang.org/x/sys/unix/syscall.go +86 -0
  762. data/go/vendor/golang.org/x/sys/unix/syscall_aix.go +582 -0
  763. data/go/vendor/golang.org/x/sys/unix/syscall_aix_ppc.go +52 -0
  764. data/go/vendor/golang.org/x/sys/unix/syscall_aix_ppc64.go +83 -0
  765. data/go/vendor/golang.org/x/sys/unix/syscall_bsd.go +609 -0
  766. data/go/vendor/golang.org/x/sys/unix/syscall_darwin.go +711 -0
  767. data/go/vendor/golang.org/x/sys/unix/syscall_darwin_amd64.go +50 -0
  768. data/go/vendor/golang.org/x/sys/unix/syscall_darwin_arm64.go +50 -0
  769. data/go/vendor/golang.org/x/sys/unix/syscall_darwin_libSystem.go +26 -0
  770. data/go/vendor/golang.org/x/sys/unix/syscall_dragonfly.go +359 -0
  771. data/go/vendor/golang.org/x/sys/unix/syscall_dragonfly_amd64.go +56 -0
  772. data/go/vendor/golang.org/x/sys/unix/syscall_freebsd.go +455 -0
  773. data/go/vendor/golang.org/x/sys/unix/syscall_freebsd_386.go +64 -0
  774. data/go/vendor/golang.org/x/sys/unix/syscall_freebsd_amd64.go +64 -0
  775. data/go/vendor/golang.org/x/sys/unix/syscall_freebsd_arm.go +60 -0
  776. data/go/vendor/golang.org/x/sys/unix/syscall_freebsd_arm64.go +60 -0
  777. data/go/vendor/golang.org/x/sys/unix/syscall_freebsd_riscv64.go +60 -0
  778. data/go/vendor/golang.org/x/sys/unix/syscall_hurd.go +30 -0
  779. data/go/vendor/golang.org/x/sys/unix/syscall_hurd_386.go +28 -0
  780. data/go/vendor/golang.org/x/sys/unix/syscall_illumos.go +78 -0
  781. data/go/vendor/golang.org/x/sys/unix/syscall_linux.go +2574 -0
  782. data/go/vendor/golang.org/x/sys/unix/syscall_linux_386.go +313 -0
  783. data/go/vendor/golang.org/x/sys/unix/syscall_linux_alarm.go +12 -0
  784. data/go/vendor/golang.org/x/sys/unix/syscall_linux_amd64.go +144 -0
  785. data/go/vendor/golang.org/x/sys/unix/syscall_linux_amd64_gc.go +12 -0
  786. data/go/vendor/golang.org/x/sys/unix/syscall_linux_arm.go +218 -0
  787. data/go/vendor/golang.org/x/sys/unix/syscall_linux_arm64.go +188 -0
  788. data/go/vendor/golang.org/x/sys/unix/syscall_linux_gc.go +14 -0
  789. data/go/vendor/golang.org/x/sys/unix/syscall_linux_gc_386.go +16 -0
  790. data/go/vendor/golang.org/x/sys/unix/syscall_linux_gc_arm.go +13 -0
  791. data/go/vendor/golang.org/x/sys/unix/syscall_linux_gccgo_386.go +30 -0
  792. data/go/vendor/golang.org/x/sys/unix/syscall_linux_gccgo_arm.go +20 -0
  793. data/go/vendor/golang.org/x/sys/unix/syscall_linux_loong64.go +220 -0
  794. data/go/vendor/golang.org/x/sys/unix/syscall_linux_mips64x.go +187 -0
  795. data/go/vendor/golang.org/x/sys/unix/syscall_linux_mipsx.go +173 -0
  796. data/go/vendor/golang.org/x/sys/unix/syscall_linux_ppc.go +203 -0
  797. data/go/vendor/golang.org/x/sys/unix/syscall_linux_ppc64x.go +114 -0
  798. data/go/vendor/golang.org/x/sys/unix/syscall_linux_riscv64.go +193 -0
  799. data/go/vendor/golang.org/x/sys/unix/syscall_linux_s390x.go +295 -0
  800. data/go/vendor/golang.org/x/sys/unix/syscall_linux_sparc64.go +111 -0
  801. data/go/vendor/golang.org/x/sys/unix/syscall_netbsd.go +388 -0
  802. data/go/vendor/golang.org/x/sys/unix/syscall_netbsd_386.go +37 -0
  803. data/go/vendor/golang.org/x/sys/unix/syscall_netbsd_amd64.go +37 -0
  804. data/go/vendor/golang.org/x/sys/unix/syscall_netbsd_arm.go +37 -0
  805. data/go/vendor/golang.org/x/sys/unix/syscall_netbsd_arm64.go +37 -0
  806. data/go/vendor/golang.org/x/sys/unix/syscall_openbsd.go +346 -0
  807. data/go/vendor/golang.org/x/sys/unix/syscall_openbsd_386.go +41 -0
  808. data/go/vendor/golang.org/x/sys/unix/syscall_openbsd_amd64.go +41 -0
  809. data/go/vendor/golang.org/x/sys/unix/syscall_openbsd_arm.go +41 -0
  810. data/go/vendor/golang.org/x/sys/unix/syscall_openbsd_arm64.go +41 -0
  811. data/go/vendor/golang.org/x/sys/unix/syscall_openbsd_libc.go +26 -0
  812. data/go/vendor/golang.org/x/sys/unix/syscall_openbsd_mips64.go +39 -0
  813. data/go/vendor/golang.org/x/sys/unix/syscall_openbsd_ppc64.go +41 -0
  814. data/go/vendor/golang.org/x/sys/unix/syscall_openbsd_riscv64.go +41 -0
  815. data/go/vendor/golang.org/x/sys/unix/syscall_solaris.go +1183 -0
  816. data/go/vendor/golang.org/x/sys/unix/syscall_solaris_amd64.go +27 -0
  817. data/go/vendor/golang.org/x/sys/unix/syscall_unix.go +619 -0
  818. data/go/vendor/golang.org/x/sys/unix/syscall_unix_gc.go +14 -0
  819. data/go/vendor/golang.org/x/sys/unix/syscall_unix_gc_ppc64x.go +22 -0
  820. data/go/vendor/golang.org/x/sys/unix/syscall_zos_s390x.go +3213 -0
  821. data/go/vendor/golang.org/x/sys/unix/sysvshm_linux.go +20 -0
  822. data/go/vendor/golang.org/x/sys/unix/sysvshm_unix.go +51 -0
  823. data/go/vendor/golang.org/x/sys/unix/sysvshm_unix_other.go +13 -0
  824. data/go/vendor/golang.org/x/sys/unix/timestruct.go +76 -0
  825. data/go/vendor/golang.org/x/sys/unix/unveil_openbsd.go +51 -0
  826. data/go/vendor/golang.org/x/sys/unix/vgetrandom_linux.go +13 -0
  827. data/go/vendor/golang.org/x/sys/unix/vgetrandom_unsupported.go +11 -0
  828. data/go/vendor/golang.org/x/sys/unix/xattr_bsd.go +280 -0
  829. data/go/vendor/golang.org/x/sys/unix/zerrors_aix_ppc.go +1384 -0
  830. data/go/vendor/golang.org/x/sys/unix/zerrors_aix_ppc64.go +1385 -0
  831. data/go/vendor/golang.org/x/sys/unix/zerrors_darwin_amd64.go +1922 -0
  832. data/go/vendor/golang.org/x/sys/unix/zerrors_darwin_arm64.go +1922 -0
  833. data/go/vendor/golang.org/x/sys/unix/zerrors_dragonfly_amd64.go +1737 -0
  834. data/go/vendor/golang.org/x/sys/unix/zerrors_freebsd_386.go +2042 -0
  835. data/go/vendor/golang.org/x/sys/unix/zerrors_freebsd_amd64.go +2039 -0
  836. data/go/vendor/golang.org/x/sys/unix/zerrors_freebsd_arm.go +2033 -0
  837. data/go/vendor/golang.org/x/sys/unix/zerrors_freebsd_arm64.go +2033 -0
  838. data/go/vendor/golang.org/x/sys/unix/zerrors_freebsd_riscv64.go +2147 -0
  839. data/go/vendor/golang.org/x/sys/unix/zerrors_linux.go +4207 -0
  840. data/go/vendor/golang.org/x/sys/unix/zerrors_linux_386.go +883 -0
  841. data/go/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go +883 -0
  842. data/go/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go +888 -0
  843. data/go/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go +885 -0
  844. data/go/vendor/golang.org/x/sys/unix/zerrors_linux_loong64.go +875 -0
  845. data/go/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go +889 -0
  846. data/go/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go +889 -0
  847. data/go/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go +889 -0
  848. data/go/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go +889 -0
  849. data/go/vendor/golang.org/x/sys/unix/zerrors_linux_ppc.go +941 -0
  850. data/go/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go +945 -0
  851. data/go/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go +945 -0
  852. data/go/vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go +885 -0
  853. data/go/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go +944 -0
  854. data/go/vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go +987 -0
  855. data/go/vendor/golang.org/x/sys/unix/zerrors_netbsd_386.go +1779 -0
  856. data/go/vendor/golang.org/x/sys/unix/zerrors_netbsd_amd64.go +1769 -0
  857. data/go/vendor/golang.org/x/sys/unix/zerrors_netbsd_arm.go +1758 -0
  858. data/go/vendor/golang.org/x/sys/unix/zerrors_netbsd_arm64.go +1769 -0
  859. data/go/vendor/golang.org/x/sys/unix/zerrors_openbsd_386.go +1905 -0
  860. data/go/vendor/golang.org/x/sys/unix/zerrors_openbsd_amd64.go +1905 -0
  861. data/go/vendor/golang.org/x/sys/unix/zerrors_openbsd_arm.go +1905 -0
  862. data/go/vendor/golang.org/x/sys/unix/zerrors_openbsd_arm64.go +1905 -0
  863. data/go/vendor/golang.org/x/sys/unix/zerrors_openbsd_mips64.go +1905 -0
  864. data/go/vendor/golang.org/x/sys/unix/zerrors_openbsd_ppc64.go +1904 -0
  865. data/go/vendor/golang.org/x/sys/unix/zerrors_openbsd_riscv64.go +1903 -0
  866. data/go/vendor/golang.org/x/sys/unix/zerrors_solaris_amd64.go +1556 -0
  867. data/go/vendor/golang.org/x/sys/unix/zerrors_zos_s390x.go +990 -0
  868. data/go/vendor/golang.org/x/sys/unix/zptrace_armnn_linux.go +40 -0
  869. data/go/vendor/golang.org/x/sys/unix/zptrace_linux_arm64.go +17 -0
  870. data/go/vendor/golang.org/x/sys/unix/zptrace_mipsnn_linux.go +49 -0
  871. data/go/vendor/golang.org/x/sys/unix/zptrace_mipsnnle_linux.go +49 -0
  872. data/go/vendor/golang.org/x/sys/unix/zptrace_x86_linux.go +79 -0
  873. data/go/vendor/golang.org/x/sys/unix/zsymaddr_zos_s390x.s +364 -0
  874. data/go/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc.go +1461 -0
  875. data/go/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64.go +1420 -0
  876. data/go/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64_gc.go +1188 -0
  877. data/go/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64_gccgo.go +1069 -0
  878. data/go/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go +2728 -0
  879. data/go/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.s +799 -0
  880. data/go/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go +2728 -0
  881. data/go/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.s +799 -0
  882. data/go/vendor/golang.org/x/sys/unix/zsyscall_dragonfly_amd64.go +1666 -0
  883. data/go/vendor/golang.org/x/sys/unix/zsyscall_freebsd_386.go +1886 -0
  884. data/go/vendor/golang.org/x/sys/unix/zsyscall_freebsd_amd64.go +1886 -0
  885. data/go/vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm.go +1886 -0
  886. data/go/vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm64.go +1886 -0
  887. data/go/vendor/golang.org/x/sys/unix/zsyscall_freebsd_riscv64.go +1886 -0
  888. data/go/vendor/golang.org/x/sys/unix/zsyscall_illumos_amd64.go +101 -0
  889. data/go/vendor/golang.org/x/sys/unix/zsyscall_linux.go +2267 -0
  890. data/go/vendor/golang.org/x/sys/unix/zsyscall_linux_386.go +469 -0
  891. data/go/vendor/golang.org/x/sys/unix/zsyscall_linux_amd64.go +636 -0
  892. data/go/vendor/golang.org/x/sys/unix/zsyscall_linux_arm.go +584 -0
  893. data/go/vendor/golang.org/x/sys/unix/zsyscall_linux_arm64.go +535 -0
  894. data/go/vendor/golang.org/x/sys/unix/zsyscall_linux_loong64.go +469 -0
  895. data/go/vendor/golang.org/x/sys/unix/zsyscall_linux_mips.go +636 -0
  896. data/go/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64.go +630 -0
  897. data/go/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64le.go +619 -0
  898. data/go/vendor/golang.org/x/sys/unix/zsyscall_linux_mipsle.go +636 -0
  899. data/go/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc.go +641 -0
  900. data/go/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64.go +687 -0
  901. data/go/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64le.go +687 -0
  902. data/go/vendor/golang.org/x/sys/unix/zsyscall_linux_riscv64.go +531 -0
  903. data/go/vendor/golang.org/x/sys/unix/zsyscall_linux_s390x.go +478 -0
  904. data/go/vendor/golang.org/x/sys/unix/zsyscall_linux_sparc64.go +631 -0
  905. data/go/vendor/golang.org/x/sys/unix/zsyscall_netbsd_386.go +1848 -0
  906. data/go/vendor/golang.org/x/sys/unix/zsyscall_netbsd_amd64.go +1848 -0
  907. data/go/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm.go +1848 -0
  908. data/go/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm64.go +1848 -0
  909. data/go/vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.go +2407 -0
  910. data/go/vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.s +719 -0
  911. data/go/vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.go +2407 -0
  912. data/go/vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.s +719 -0
  913. data/go/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.go +2407 -0
  914. data/go/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.s +719 -0
  915. data/go/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.go +2407 -0
  916. data/go/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.s +719 -0
  917. data/go/vendor/golang.org/x/sys/unix/zsyscall_openbsd_mips64.go +2407 -0
  918. data/go/vendor/golang.org/x/sys/unix/zsyscall_openbsd_mips64.s +719 -0
  919. data/go/vendor/golang.org/x/sys/unix/zsyscall_openbsd_ppc64.go +2407 -0
  920. data/go/vendor/golang.org/x/sys/unix/zsyscall_openbsd_ppc64.s +862 -0
  921. data/go/vendor/golang.org/x/sys/unix/zsyscall_openbsd_riscv64.go +2407 -0
  922. data/go/vendor/golang.org/x/sys/unix/zsyscall_openbsd_riscv64.s +719 -0
  923. data/go/vendor/golang.org/x/sys/unix/zsyscall_solaris_amd64.go +2217 -0
  924. data/go/vendor/golang.org/x/sys/unix/zsyscall_zos_s390x.go +3458 -0
  925. data/go/vendor/golang.org/x/sys/unix/zsysctl_openbsd_386.go +280 -0
  926. data/go/vendor/golang.org/x/sys/unix/zsysctl_openbsd_amd64.go +280 -0
  927. data/go/vendor/golang.org/x/sys/unix/zsysctl_openbsd_arm.go +280 -0
  928. data/go/vendor/golang.org/x/sys/unix/zsysctl_openbsd_arm64.go +280 -0
  929. data/go/vendor/golang.org/x/sys/unix/zsysctl_openbsd_mips64.go +280 -0
  930. data/go/vendor/golang.org/x/sys/unix/zsysctl_openbsd_ppc64.go +280 -0
  931. data/go/vendor/golang.org/x/sys/unix/zsysctl_openbsd_riscv64.go +281 -0
  932. data/go/vendor/golang.org/x/sys/unix/zsysnum_darwin_amd64.go +439 -0
  933. data/go/vendor/golang.org/x/sys/unix/zsysnum_darwin_arm64.go +437 -0
  934. data/go/vendor/golang.org/x/sys/unix/zsysnum_dragonfly_amd64.go +316 -0
  935. data/go/vendor/golang.org/x/sys/unix/zsysnum_freebsd_386.go +393 -0
  936. data/go/vendor/golang.org/x/sys/unix/zsysnum_freebsd_amd64.go +393 -0
  937. data/go/vendor/golang.org/x/sys/unix/zsysnum_freebsd_arm.go +393 -0
  938. data/go/vendor/golang.org/x/sys/unix/zsysnum_freebsd_arm64.go +393 -0
  939. data/go/vendor/golang.org/x/sys/unix/zsysnum_freebsd_riscv64.go +393 -0
  940. data/go/vendor/golang.org/x/sys/unix/zsysnum_linux_386.go +470 -0
  941. data/go/vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go +394 -0
  942. data/go/vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go +434 -0
  943. data/go/vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go +337 -0
  944. data/go/vendor/golang.org/x/sys/unix/zsysnum_linux_loong64.go +334 -0
  945. data/go/vendor/golang.org/x/sys/unix/zsysnum_linux_mips.go +454 -0
  946. data/go/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go +384 -0
  947. data/go/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go +384 -0
  948. data/go/vendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go +454 -0
  949. data/go/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc.go +461 -0
  950. data/go/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go +433 -0
  951. data/go/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go +433 -0
  952. data/go/vendor/golang.org/x/sys/unix/zsysnum_linux_riscv64.go +338 -0
  953. data/go/vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go +399 -0
  954. data/go/vendor/golang.org/x/sys/unix/zsysnum_linux_sparc64.go +413 -0
  955. data/go/vendor/golang.org/x/sys/unix/zsysnum_netbsd_386.go +274 -0
  956. data/go/vendor/golang.org/x/sys/unix/zsysnum_netbsd_amd64.go +274 -0
  957. data/go/vendor/golang.org/x/sys/unix/zsysnum_netbsd_arm.go +274 -0
  958. data/go/vendor/golang.org/x/sys/unix/zsysnum_netbsd_arm64.go +274 -0
  959. data/go/vendor/golang.org/x/sys/unix/zsysnum_openbsd_386.go +219 -0
  960. data/go/vendor/golang.org/x/sys/unix/zsysnum_openbsd_amd64.go +219 -0
  961. data/go/vendor/golang.org/x/sys/unix/zsysnum_openbsd_arm.go +219 -0
  962. data/go/vendor/golang.org/x/sys/unix/zsysnum_openbsd_arm64.go +218 -0
  963. data/go/vendor/golang.org/x/sys/unix/zsysnum_openbsd_mips64.go +221 -0
  964. data/go/vendor/golang.org/x/sys/unix/zsysnum_openbsd_ppc64.go +217 -0
  965. data/go/vendor/golang.org/x/sys/unix/zsysnum_openbsd_riscv64.go +218 -0
  966. data/go/vendor/golang.org/x/sys/unix/zsysnum_zos_s390x.go +2852 -0
  967. data/go/vendor/golang.org/x/sys/unix/ztypes_aix_ppc.go +353 -0
  968. data/go/vendor/golang.org/x/sys/unix/ztypes_aix_ppc64.go +357 -0
  969. data/go/vendor/golang.org/x/sys/unix/ztypes_darwin_amd64.go +878 -0
  970. data/go/vendor/golang.org/x/sys/unix/ztypes_darwin_arm64.go +878 -0
  971. data/go/vendor/golang.org/x/sys/unix/ztypes_dragonfly_amd64.go +473 -0
  972. data/go/vendor/golang.org/x/sys/unix/ztypes_freebsd_386.go +651 -0
  973. data/go/vendor/golang.org/x/sys/unix/ztypes_freebsd_amd64.go +656 -0
  974. data/go/vendor/golang.org/x/sys/unix/ztypes_freebsd_arm.go +642 -0
  975. data/go/vendor/golang.org/x/sys/unix/ztypes_freebsd_arm64.go +636 -0
  976. data/go/vendor/golang.org/x/sys/unix/ztypes_freebsd_riscv64.go +638 -0
  977. data/go/vendor/golang.org/x/sys/unix/ztypes_linux.go +6475 -0
  978. data/go/vendor/golang.org/x/sys/unix/ztypes_linux_386.go +717 -0
  979. data/go/vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go +731 -0
  980. data/go/vendor/golang.org/x/sys/unix/ztypes_linux_arm.go +711 -0
  981. data/go/vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go +710 -0
  982. data/go/vendor/golang.org/x/sys/unix/ztypes_linux_loong64.go +711 -0
  983. data/go/vendor/golang.org/x/sys/unix/ztypes_linux_mips.go +716 -0
  984. data/go/vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go +713 -0
  985. data/go/vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go +713 -0
  986. data/go/vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go +716 -0
  987. data/go/vendor/golang.org/x/sys/unix/ztypes_linux_ppc.go +724 -0
  988. data/go/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go +719 -0
  989. data/go/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go +719 -0
  990. data/go/vendor/golang.org/x/sys/unix/ztypes_linux_riscv64.go +798 -0
  991. data/go/vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go +733 -0
  992. data/go/vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go +714 -0
  993. data/go/vendor/golang.org/x/sys/unix/ztypes_netbsd_386.go +585 -0
  994. data/go/vendor/golang.org/x/sys/unix/ztypes_netbsd_amd64.go +593 -0
  995. data/go/vendor/golang.org/x/sys/unix/ztypes_netbsd_arm.go +590 -0
  996. data/go/vendor/golang.org/x/sys/unix/ztypes_netbsd_arm64.go +593 -0
  997. data/go/vendor/golang.org/x/sys/unix/ztypes_openbsd_386.go +568 -0
  998. data/go/vendor/golang.org/x/sys/unix/ztypes_openbsd_amd64.go +568 -0
  999. data/go/vendor/golang.org/x/sys/unix/ztypes_openbsd_arm.go +575 -0
  1000. data/go/vendor/golang.org/x/sys/unix/ztypes_openbsd_arm64.go +568 -0
  1001. data/go/vendor/golang.org/x/sys/unix/ztypes_openbsd_mips64.go +568 -0
  1002. data/go/vendor/golang.org/x/sys/unix/ztypes_openbsd_ppc64.go +570 -0
  1003. data/go/vendor/golang.org/x/sys/unix/ztypes_openbsd_riscv64.go +570 -0
  1004. data/go/vendor/golang.org/x/sys/unix/ztypes_solaris_amd64.go +516 -0
  1005. data/go/vendor/golang.org/x/sys/unix/ztypes_zos_s390x.go +552 -0
  1006. data/go/vendor/golang.org/x/sys/windows/aliases.go +13 -0
  1007. data/go/vendor/golang.org/x/sys/windows/dll_windows.go +380 -0
  1008. data/go/vendor/golang.org/x/sys/windows/env_windows.go +57 -0
  1009. data/go/vendor/golang.org/x/sys/windows/eventlog.go +20 -0
  1010. data/go/vendor/golang.org/x/sys/windows/exec_windows.go +248 -0
  1011. data/go/vendor/golang.org/x/sys/windows/memory_windows.go +48 -0
  1012. data/go/vendor/golang.org/x/sys/windows/mkerrors.bash +70 -0
  1013. data/go/vendor/golang.org/x/sys/windows/mkknownfolderids.bash +27 -0
  1014. data/go/vendor/golang.org/x/sys/windows/mksyscall.go +9 -0
  1015. data/go/vendor/golang.org/x/sys/windows/race.go +30 -0
  1016. data/go/vendor/golang.org/x/sys/windows/race0.go +25 -0
  1017. data/go/vendor/golang.org/x/sys/windows/security_windows.go +1537 -0
  1018. data/go/vendor/golang.org/x/sys/windows/service.go +257 -0
  1019. data/go/vendor/golang.org/x/sys/windows/setupapi_windows.go +1425 -0
  1020. data/go/vendor/golang.org/x/sys/windows/str.go +22 -0
  1021. data/go/vendor/golang.org/x/sys/windows/syscall.go +104 -0
  1022. data/go/vendor/golang.org/x/sys/windows/syscall_windows.go +1952 -0
  1023. data/go/vendor/golang.org/x/sys/windows/types_windows.go +4057 -0
  1024. data/go/vendor/golang.org/x/sys/windows/types_windows_386.go +35 -0
  1025. data/go/vendor/golang.org/x/sys/windows/types_windows_amd64.go +34 -0
  1026. data/go/vendor/golang.org/x/sys/windows/types_windows_arm.go +35 -0
  1027. data/go/vendor/golang.org/x/sys/windows/types_windows_arm64.go +34 -0
  1028. data/go/vendor/golang.org/x/sys/windows/zerrors_windows.go +9468 -0
  1029. data/go/vendor/golang.org/x/sys/windows/zknownfolderids_windows.go +149 -0
  1030. data/go/vendor/golang.org/x/sys/windows/zsyscall_windows.go +4828 -0
  1031. data/go/vendor/golang.org/x/text/LICENSE +27 -0
  1032. data/go/vendor/golang.org/x/text/PATENTS +22 -0
  1033. data/go/vendor/golang.org/x/text/secure/bidirule/bidirule.go +340 -0
  1034. data/go/vendor/golang.org/x/text/transform/transform.go +709 -0
  1035. data/go/vendor/golang.org/x/text/unicode/bidi/bidi.go +359 -0
  1036. data/go/vendor/golang.org/x/text/unicode/bidi/bracket.go +335 -0
  1037. data/go/vendor/golang.org/x/text/unicode/bidi/core.go +1064 -0
  1038. data/go/vendor/golang.org/x/text/unicode/bidi/prop.go +206 -0
  1039. data/go/vendor/golang.org/x/text/unicode/bidi/tables15.0.0.go +2042 -0
  1040. data/go/vendor/golang.org/x/text/unicode/bidi/tables17.0.0.go +2135 -0
  1041. data/go/vendor/golang.org/x/text/unicode/bidi/trieval.go +48 -0
  1042. data/go/vendor/golang.org/x/text/unicode/norm/composition.go +512 -0
  1043. data/go/vendor/golang.org/x/text/unicode/norm/forminfo.go +296 -0
  1044. data/go/vendor/golang.org/x/text/unicode/norm/input.go +109 -0
  1045. data/go/vendor/golang.org/x/text/unicode/norm/iter.go +454 -0
  1046. data/go/vendor/golang.org/x/text/unicode/norm/normalize.go +610 -0
  1047. data/go/vendor/golang.org/x/text/unicode/norm/readwriter.go +125 -0
  1048. data/go/vendor/golang.org/x/text/unicode/norm/tables15.0.0.go +7907 -0
  1049. data/go/vendor/golang.org/x/text/unicode/norm/tables17.0.0.go +8104 -0
  1050. data/go/vendor/golang.org/x/text/unicode/norm/transform.go +88 -0
  1051. data/go/vendor/golang.org/x/text/unicode/norm/trie.go +54 -0
  1052. data/go/vendor/modules.txt +63 -0
  1053. data/lib/puma_plus/core/version.rb +13 -0
  1054. data/lib/puma_plus/core.rb +60 -0
  1055. metadata +1099 -0
@@ -0,0 +1,1871 @@
1
+ // Copyright 2014 The Go Authors. All rights reserved.
2
+ // Use of this source code is governed by a BSD-style
3
+ // license that can be found in the LICENSE file.
4
+
5
+ package http2
6
+
7
+ import (
8
+ "bytes"
9
+ "encoding/binary"
10
+ "errors"
11
+ "fmt"
12
+ "io"
13
+ "log"
14
+ "slices"
15
+ "strings"
16
+ "sync"
17
+
18
+ "golang.org/x/net/http/httpguts"
19
+ "golang.org/x/net/http2/hpack"
20
+ "golang.org/x/net/internal/httpsfv"
21
+ )
22
+
23
+ const frameHeaderLen = 9
24
+
25
+ var padZeros = make([]byte, 255) // zeros for padding
26
+
27
+ // A FrameType is a registered frame type as defined in
28
+ // https://httpwg.org/specs/rfc7540.html#rfc.section.11.2 and other future
29
+ // RFCs.
30
+ type FrameType uint8
31
+
32
+ const (
33
+ FrameData FrameType = 0x0
34
+ FrameHeaders FrameType = 0x1
35
+ FramePriority FrameType = 0x2
36
+ FrameRSTStream FrameType = 0x3
37
+ FrameSettings FrameType = 0x4
38
+ FramePushPromise FrameType = 0x5
39
+ FramePing FrameType = 0x6
40
+ FrameGoAway FrameType = 0x7
41
+ FrameWindowUpdate FrameType = 0x8
42
+ FrameContinuation FrameType = 0x9
43
+ FramePriorityUpdate FrameType = 0x10
44
+ )
45
+
46
+ var frameNames = [...]string{
47
+ FrameData: "DATA",
48
+ FrameHeaders: "HEADERS",
49
+ FramePriority: "PRIORITY",
50
+ FrameRSTStream: "RST_STREAM",
51
+ FrameSettings: "SETTINGS",
52
+ FramePushPromise: "PUSH_PROMISE",
53
+ FramePing: "PING",
54
+ FrameGoAway: "GOAWAY",
55
+ FrameWindowUpdate: "WINDOW_UPDATE",
56
+ FrameContinuation: "CONTINUATION",
57
+ FramePriorityUpdate: "PRIORITY_UPDATE",
58
+ }
59
+
60
+ func (t FrameType) String() string {
61
+ if int(t) < len(frameNames) {
62
+ return frameNames[t]
63
+ }
64
+ return fmt.Sprintf("UNKNOWN_FRAME_TYPE_%d", t)
65
+ }
66
+
67
+ // Flags is a bitmask of HTTP/2 flags.
68
+ // The meaning of flags varies depending on the frame type.
69
+ type Flags uint8
70
+
71
+ // Has reports whether f contains all (0 or more) flags in v.
72
+ func (f Flags) Has(v Flags) bool {
73
+ return (f & v) == v
74
+ }
75
+
76
+ // Frame-specific FrameHeader flag bits.
77
+ const (
78
+ // Data Frame
79
+ FlagDataEndStream Flags = 0x1
80
+ FlagDataPadded Flags = 0x8
81
+
82
+ // Headers Frame
83
+ FlagHeadersEndStream Flags = 0x1
84
+ FlagHeadersEndHeaders Flags = 0x4
85
+ FlagHeadersPadded Flags = 0x8
86
+ FlagHeadersPriority Flags = 0x20
87
+
88
+ // Settings Frame
89
+ FlagSettingsAck Flags = 0x1
90
+
91
+ // Ping Frame
92
+ FlagPingAck Flags = 0x1
93
+
94
+ // Continuation Frame
95
+ FlagContinuationEndHeaders Flags = 0x4
96
+
97
+ FlagPushPromiseEndHeaders Flags = 0x4
98
+ FlagPushPromisePadded Flags = 0x8
99
+ )
100
+
101
+ var flagName = map[FrameType]map[Flags]string{
102
+ FrameData: {
103
+ FlagDataEndStream: "END_STREAM",
104
+ FlagDataPadded: "PADDED",
105
+ },
106
+ FrameHeaders: {
107
+ FlagHeadersEndStream: "END_STREAM",
108
+ FlagHeadersEndHeaders: "END_HEADERS",
109
+ FlagHeadersPadded: "PADDED",
110
+ FlagHeadersPriority: "PRIORITY",
111
+ },
112
+ FrameSettings: {
113
+ FlagSettingsAck: "ACK",
114
+ },
115
+ FramePing: {
116
+ FlagPingAck: "ACK",
117
+ },
118
+ FrameContinuation: {
119
+ FlagContinuationEndHeaders: "END_HEADERS",
120
+ },
121
+ FramePushPromise: {
122
+ FlagPushPromiseEndHeaders: "END_HEADERS",
123
+ FlagPushPromisePadded: "PADDED",
124
+ },
125
+ }
126
+
127
+ // a frameParser parses a frame given its FrameHeader and payload
128
+ // bytes. The length of payload will always equal fh.Length (which
129
+ // might be 0).
130
+ type frameParser func(fc *frameCache, fh FrameHeader, countError func(string), payload []byte) (Frame, error)
131
+
132
+ var frameParsers = [...]frameParser{
133
+ FrameData: parseDataFrame,
134
+ FrameHeaders: parseHeadersFrame,
135
+ FramePriority: parsePriorityFrame,
136
+ FrameRSTStream: parseRSTStreamFrame,
137
+ FrameSettings: parseSettingsFrame,
138
+ FramePushPromise: parsePushPromise,
139
+ FramePing: parsePingFrame,
140
+ FrameGoAway: parseGoAwayFrame,
141
+ FrameWindowUpdate: parseWindowUpdateFrame,
142
+ FrameContinuation: parseContinuationFrame,
143
+ FramePriorityUpdate: parsePriorityUpdateFrame,
144
+ }
145
+
146
+ func typeFrameParser(t FrameType) frameParser {
147
+ if int(t) < len(frameParsers) {
148
+ if f := frameParsers[t]; f != nil {
149
+ return f
150
+ }
151
+ }
152
+ return parseUnknownFrame
153
+ }
154
+
155
+ // A FrameHeader is the 9 byte header of all HTTP/2 frames.
156
+ //
157
+ // See https://httpwg.org/specs/rfc7540.html#FrameHeader
158
+ type FrameHeader struct {
159
+ valid bool // caller can access []byte fields in the Frame
160
+
161
+ // Type is the 1 byte frame type. There are ten standard frame
162
+ // types, but extension frame types may be written by WriteRawFrame
163
+ // and will be returned by ReadFrame (as UnknownFrame).
164
+ Type FrameType
165
+
166
+ // Flags are the 1 byte of 8 potential bit flags per frame.
167
+ // They are specific to the frame type.
168
+ Flags Flags
169
+
170
+ // Length is the length of the frame, not including the 9 byte header.
171
+ // The maximum size is one byte less than 16MB (uint24), but only
172
+ // frames up to 16KB are allowed without peer agreement.
173
+ Length uint32
174
+
175
+ // StreamID is which stream this frame is for. Certain frames
176
+ // are not stream-specific, in which case this field is 0.
177
+ StreamID uint32
178
+ }
179
+
180
+ // Header returns h. It exists so FrameHeaders can be embedded in other
181
+ // specific frame types and implement the Frame interface.
182
+ func (h FrameHeader) Header() FrameHeader { return h }
183
+
184
+ func (h FrameHeader) String() string {
185
+ var buf bytes.Buffer
186
+ buf.WriteString("[FrameHeader ")
187
+ h.writeDebug(&buf)
188
+ buf.WriteByte(']')
189
+ return buf.String()
190
+ }
191
+
192
+ func (h FrameHeader) writeDebug(buf *bytes.Buffer) {
193
+ buf.WriteString(h.Type.String())
194
+ if h.Flags != 0 {
195
+ buf.WriteString(" flags=")
196
+ set := 0
197
+ for i := uint8(0); i < 8; i++ {
198
+ if h.Flags&(1<<i) == 0 {
199
+ continue
200
+ }
201
+ set++
202
+ if set > 1 {
203
+ buf.WriteByte('|')
204
+ }
205
+ name := flagName[h.Type][Flags(1<<i)]
206
+ if name != "" {
207
+ buf.WriteString(name)
208
+ } else {
209
+ fmt.Fprintf(buf, "0x%x", 1<<i)
210
+ }
211
+ }
212
+ }
213
+ if h.StreamID != 0 {
214
+ fmt.Fprintf(buf, " stream=%d", h.StreamID)
215
+ }
216
+ fmt.Fprintf(buf, " len=%d", h.Length)
217
+ }
218
+
219
+ func (h *FrameHeader) checkValid() {
220
+ if !h.valid {
221
+ panic("Frame accessor called on non-owned Frame")
222
+ }
223
+ }
224
+
225
+ func (h *FrameHeader) invalidate() { h.valid = false }
226
+
227
+ // frame header bytes.
228
+ // Used only by ReadFrameHeader.
229
+ var fhBytes = sync.Pool{
230
+ New: func() interface{} {
231
+ buf := make([]byte, frameHeaderLen)
232
+ return &buf
233
+ },
234
+ }
235
+
236
+ func invalidHTTP1LookingFrameHeader() FrameHeader {
237
+ fh, _ := readFrameHeader(make([]byte, frameHeaderLen), strings.NewReader("HTTP/1.1 "))
238
+ return fh
239
+ }
240
+
241
+ // ReadFrameHeader reads 9 bytes from r and returns a FrameHeader.
242
+ // Most users should use Framer.ReadFrame instead.
243
+ func ReadFrameHeader(r io.Reader) (FrameHeader, error) {
244
+ bufp := fhBytes.Get().(*[]byte)
245
+ defer fhBytes.Put(bufp)
246
+ return readFrameHeader(*bufp, r)
247
+ }
248
+
249
+ func readFrameHeader(buf []byte, r io.Reader) (FrameHeader, error) {
250
+ _, err := io.ReadFull(r, buf[:frameHeaderLen])
251
+ if err != nil {
252
+ return FrameHeader{}, err
253
+ }
254
+ return FrameHeader{
255
+ Length: (uint32(buf[0])<<16 | uint32(buf[1])<<8 | uint32(buf[2])),
256
+ Type: FrameType(buf[3]),
257
+ Flags: Flags(buf[4]),
258
+ StreamID: binary.BigEndian.Uint32(buf[5:]) & (1<<31 - 1),
259
+ valid: true,
260
+ }, nil
261
+ }
262
+
263
+ // A Frame is the base interface implemented by all frame types.
264
+ // Callers will generally type-assert the specific frame type:
265
+ // *HeadersFrame, *SettingsFrame, *WindowUpdateFrame, etc.
266
+ //
267
+ // Frames are only valid until the next call to Framer.ReadFrame.
268
+ type Frame interface {
269
+ Header() FrameHeader
270
+
271
+ // invalidate is called by Framer.ReadFrame to make this
272
+ // frame's buffers as being invalid, since the subsequent
273
+ // frame will reuse them.
274
+ invalidate()
275
+ }
276
+
277
+ // A Framer reads and writes Frames.
278
+ type Framer struct {
279
+ r io.Reader
280
+ lastFrame Frame
281
+ errDetail error
282
+
283
+ // countError is a non-nil func that's called on a frame parse
284
+ // error with some unique error path token. It's initialized
285
+ // from Transport.CountError or Server.CountError.
286
+ countError func(errToken string)
287
+
288
+ // lastHeaderStream is non-zero if the last frame was an
289
+ // unfinished HEADERS/CONTINUATION.
290
+ lastHeaderStream uint32
291
+ // lastFrameType holds the type of the last frame for verifying frame order.
292
+ lastFrameType FrameType
293
+
294
+ maxReadSize uint32
295
+ headerBuf [frameHeaderLen]byte
296
+
297
+ // TODO: let getReadBuf be configurable, and use a less memory-pinning
298
+ // allocator in server.go to minimize memory pinned for many idle conns.
299
+ // Will probably also need to make frame invalidation have a hook too.
300
+ getReadBuf func(size uint32) []byte
301
+ readBuf []byte // cache for default getReadBuf
302
+
303
+ maxWriteSize uint32 // zero means unlimited; TODO: implement
304
+
305
+ w io.Writer
306
+ wbuf []byte
307
+
308
+ // AllowIllegalWrites permits the Framer's Write methods to
309
+ // write frames that do not conform to the HTTP/2 spec. This
310
+ // permits using the Framer to test other HTTP/2
311
+ // implementations' conformance to the spec.
312
+ // If false, the Write methods will prefer to return an error
313
+ // rather than comply.
314
+ AllowIllegalWrites bool
315
+
316
+ // AllowIllegalReads permits the Framer's ReadFrame method
317
+ // to return non-compliant frames or frame orders.
318
+ // This is for testing and permits using the Framer to test
319
+ // other HTTP/2 implementations' conformance to the spec.
320
+ // It is not compatible with ReadMetaHeaders.
321
+ AllowIllegalReads bool
322
+
323
+ // ReadMetaHeaders if non-nil causes ReadFrame to merge
324
+ // HEADERS and CONTINUATION frames together and return
325
+ // MetaHeadersFrame instead.
326
+ ReadMetaHeaders *hpack.Decoder
327
+
328
+ // MaxHeaderListSize is the http2 MAX_HEADER_LIST_SIZE.
329
+ // It's used only if ReadMetaHeaders is set; 0 means a sane default
330
+ // (currently 16MB)
331
+ // If the limit is hit, MetaHeadersFrame.Truncated is set true.
332
+ MaxHeaderListSize uint32
333
+
334
+ // TODO: track which type of frame & with which flags was sent
335
+ // last. Then return an error (unless AllowIllegalWrites) if
336
+ // we're in the middle of a header block and a
337
+ // non-Continuation or Continuation on a different stream is
338
+ // attempted to be written.
339
+
340
+ logReads, logWrites bool
341
+
342
+ debugFramer *Framer // only use for logging written writes
343
+ debugFramerBuf *bytes.Buffer
344
+ debugReadLoggerf func(string, ...interface{})
345
+ debugWriteLoggerf func(string, ...interface{})
346
+
347
+ frameCache *frameCache // nil if frames aren't reused (default)
348
+ }
349
+
350
+ func (fr *Framer) maxHeaderListSize() uint32 {
351
+ if fr.MaxHeaderListSize == 0 {
352
+ return 16 << 20 // sane default, per docs
353
+ }
354
+ return fr.MaxHeaderListSize
355
+ }
356
+
357
+ func (f *Framer) startWrite(ftype FrameType, flags Flags, streamID uint32) {
358
+ // Write the FrameHeader.
359
+ f.wbuf = append(f.wbuf[:0],
360
+ 0, // 3 bytes of length, filled in endWrite
361
+ 0,
362
+ 0,
363
+ byte(ftype),
364
+ byte(flags),
365
+ byte(streamID>>24),
366
+ byte(streamID>>16),
367
+ byte(streamID>>8),
368
+ byte(streamID))
369
+ }
370
+
371
+ func (f *Framer) endWrite() error {
372
+ // Now that we know the final size, fill in the FrameHeader in
373
+ // the space previously reserved for it. Abuse append.
374
+ length := len(f.wbuf) - frameHeaderLen
375
+ if length >= (1 << 24) {
376
+ return ErrFrameTooLarge
377
+ }
378
+ _ = append(f.wbuf[:0],
379
+ byte(length>>16),
380
+ byte(length>>8),
381
+ byte(length))
382
+ if f.logWrites {
383
+ f.logWrite()
384
+ }
385
+
386
+ n, err := f.w.Write(f.wbuf)
387
+ if err == nil && n != len(f.wbuf) {
388
+ err = io.ErrShortWrite
389
+ }
390
+ return err
391
+ }
392
+
393
+ func (f *Framer) logWrite() {
394
+ if f.debugFramer == nil {
395
+ f.debugFramerBuf = new(bytes.Buffer)
396
+ f.debugFramer = NewFramer(nil, f.debugFramerBuf)
397
+ f.debugFramer.logReads = false // we log it ourselves, saying "wrote" below
398
+ // Let us read anything, even if we accidentally wrote it
399
+ // in the wrong order:
400
+ f.debugFramer.AllowIllegalReads = true
401
+ }
402
+ f.debugFramerBuf.Write(f.wbuf)
403
+ fr, err := f.debugFramer.ReadFrame()
404
+ if err != nil {
405
+ f.debugWriteLoggerf("http2: Framer %p: failed to decode just-written frame", f)
406
+ return
407
+ }
408
+ f.debugWriteLoggerf("http2: Framer %p: wrote %v", f, summarizeFrame(fr))
409
+ }
410
+
411
+ func (f *Framer) writeByte(v byte) { f.wbuf = append(f.wbuf, v) }
412
+ func (f *Framer) writeBytes(v []byte) { f.wbuf = append(f.wbuf, v...) }
413
+ func (f *Framer) writeUint16(v uint16) { f.wbuf = append(f.wbuf, byte(v>>8), byte(v)) }
414
+ func (f *Framer) writeUint32(v uint32) {
415
+ f.wbuf = append(f.wbuf, byte(v>>24), byte(v>>16), byte(v>>8), byte(v))
416
+ }
417
+
418
+ const (
419
+ minMaxFrameSize = 1 << 14
420
+ maxFrameSize = 1<<24 - 1
421
+ )
422
+
423
+ // SetReuseFrames allows the Framer to reuse Frames.
424
+ // If called on a Framer, Frames returned by calls to ReadFrame are only
425
+ // valid until the next call to ReadFrame.
426
+ func (fr *Framer) SetReuseFrames() {
427
+ if fr.frameCache != nil {
428
+ return
429
+ }
430
+ fr.frameCache = &frameCache{}
431
+ }
432
+
433
+ type frameCache struct {
434
+ dataFrame DataFrame
435
+ }
436
+
437
+ func (fc *frameCache) getDataFrame() *DataFrame {
438
+ if fc == nil {
439
+ return &DataFrame{}
440
+ }
441
+ return &fc.dataFrame
442
+ }
443
+
444
+ // NewFramer returns a Framer that writes frames to w and reads them from r.
445
+ func NewFramer(w io.Writer, r io.Reader) *Framer {
446
+ fr := &Framer{
447
+ w: w,
448
+ r: r,
449
+ countError: func(string) {},
450
+ logReads: logFrameReads,
451
+ logWrites: logFrameWrites,
452
+ debugReadLoggerf: log.Printf,
453
+ debugWriteLoggerf: log.Printf,
454
+ }
455
+ fr.getReadBuf = func(size uint32) []byte {
456
+ if cap(fr.readBuf) >= int(size) {
457
+ return fr.readBuf[:size]
458
+ }
459
+ fr.readBuf = make([]byte, size)
460
+ return fr.readBuf
461
+ }
462
+ fr.SetMaxReadFrameSize(maxFrameSize)
463
+ return fr
464
+ }
465
+
466
+ // SetMaxReadFrameSize sets the maximum size of a frame
467
+ // that will be read by a subsequent call to ReadFrame.
468
+ // It is the caller's responsibility to advertise this
469
+ // limit with a SETTINGS frame.
470
+ func (fr *Framer) SetMaxReadFrameSize(v uint32) {
471
+ if v > maxFrameSize {
472
+ v = maxFrameSize
473
+ }
474
+ fr.maxReadSize = v
475
+ }
476
+
477
+ // ErrorDetail returns a more detailed error of the last error
478
+ // returned by Framer.ReadFrame. For instance, if ReadFrame
479
+ // returns a StreamError with code PROTOCOL_ERROR, ErrorDetail
480
+ // will say exactly what was invalid. ErrorDetail is not guaranteed
481
+ // to return a non-nil value and like the rest of the http2 package,
482
+ // its return value is not protected by an API compatibility promise.
483
+ // ErrorDetail is reset after the next call to ReadFrame.
484
+ func (fr *Framer) ErrorDetail() error {
485
+ return fr.errDetail
486
+ }
487
+
488
+ // ErrFrameTooLarge is returned from Framer.ReadFrame when the peer
489
+ // sends a frame that is larger than declared with SetMaxReadFrameSize.
490
+ var ErrFrameTooLarge = errors.New("http2: frame too large")
491
+
492
+ // terminalReadFrameError reports whether err is an unrecoverable
493
+ // error from ReadFrame and no other frames should be read.
494
+ func terminalReadFrameError(err error) bool {
495
+ if _, ok := err.(StreamError); ok {
496
+ return false
497
+ }
498
+ return err != nil
499
+ }
500
+
501
+ // ReadFrameHeader reads the header of the next frame.
502
+ // It reads the 9-byte fixed frame header, and does not read any portion of the
503
+ // frame payload. The caller is responsible for consuming the payload, either
504
+ // with ReadFrameForHeader or directly from the Framer's io.Reader.
505
+ //
506
+ // If the frame is larger than previously set with SetMaxReadFrameSize, it
507
+ // returns the frame header and ErrFrameTooLarge.
508
+ //
509
+ // If the returned FrameHeader.StreamID is non-zero, it indicates the stream
510
+ // responsible for the error.
511
+ func (fr *Framer) ReadFrameHeader() (FrameHeader, error) {
512
+ fr.errDetail = nil
513
+ fh, err := readFrameHeader(fr.headerBuf[:], fr.r)
514
+ if err != nil {
515
+ return fh, err
516
+ }
517
+ if fh.Length > fr.maxReadSize {
518
+ if fh == invalidHTTP1LookingFrameHeader() {
519
+ return fh, fmt.Errorf("http2: failed reading the frame payload: %w, note that the frame header looked like an HTTP/1.1 header", ErrFrameTooLarge)
520
+ }
521
+ return fh, ErrFrameTooLarge
522
+ }
523
+ if err := fr.checkFrameOrder(fh); err != nil {
524
+ return fh, err
525
+ }
526
+ return fh, nil
527
+ }
528
+
529
+ // ReadFrameForHeader reads the payload for the frame with the given FrameHeader.
530
+ //
531
+ // It behaves identically to ReadFrame, other than not checking the maximum
532
+ // frame size.
533
+ func (fr *Framer) ReadFrameForHeader(fh FrameHeader) (Frame, error) {
534
+ if fr.lastFrame != nil {
535
+ fr.lastFrame.invalidate()
536
+ }
537
+ payload := fr.getReadBuf(fh.Length)
538
+ if _, err := io.ReadFull(fr.r, payload); err != nil {
539
+ if fh == invalidHTTP1LookingFrameHeader() {
540
+ return nil, fmt.Errorf("http2: failed reading the frame payload: %w, note that the frame header looked like an HTTP/1.1 header", err)
541
+ }
542
+ return nil, err
543
+ }
544
+ f, err := typeFrameParser(fh.Type)(fr.frameCache, fh, fr.countError, payload)
545
+ if err != nil {
546
+ if ce, ok := err.(connError); ok {
547
+ return nil, fr.connError(ce.Code, ce.Reason)
548
+ }
549
+ return nil, err
550
+ }
551
+ fr.lastFrame = f
552
+ if fr.logReads {
553
+ fr.debugReadLoggerf("http2: Framer %p: read %v", fr, summarizeFrame(f))
554
+ }
555
+ if fh.Type == FrameHeaders && fr.ReadMetaHeaders != nil {
556
+ return fr.readMetaFrame(f.(*HeadersFrame))
557
+ }
558
+ return f, nil
559
+ }
560
+
561
+ // ReadFrame reads a single frame. The returned Frame is only valid
562
+ // until the next call to ReadFrame or ReadFrameBodyForHeader.
563
+ //
564
+ // If the frame is larger than previously set with SetMaxReadFrameSize, the
565
+ // returned error is ErrFrameTooLarge. Other errors may be of type
566
+ // ConnectionError, StreamError, or anything else from the underlying
567
+ // reader.
568
+ //
569
+ // If ReadFrame returns an error and a non-nil Frame, the Frame's StreamID
570
+ // indicates the stream responsible for the error.
571
+ func (fr *Framer) ReadFrame() (Frame, error) {
572
+ fh, err := fr.ReadFrameHeader()
573
+ if err != nil {
574
+ return nil, err
575
+ }
576
+ return fr.ReadFrameForHeader(fh)
577
+ }
578
+
579
+ // connError returns ConnectionError(code) but first
580
+ // stashes away a public reason to the caller can optionally relay it
581
+ // to the peer before hanging up on them. This might help others debug
582
+ // their implementations.
583
+ func (fr *Framer) connError(code ErrCode, reason string) error {
584
+ fr.errDetail = errors.New(reason)
585
+ return ConnectionError(code)
586
+ }
587
+
588
+ // checkFrameOrder reports an error if f is an invalid frame to return
589
+ // next from ReadFrame. Mostly it checks whether HEADERS and
590
+ // CONTINUATION frames are contiguous.
591
+ func (fr *Framer) checkFrameOrder(fh FrameHeader) error {
592
+ lastType := fr.lastFrameType
593
+ fr.lastFrameType = fh.Type
594
+ if fr.AllowIllegalReads {
595
+ return nil
596
+ }
597
+
598
+ if fr.lastHeaderStream != 0 {
599
+ if fh.Type != FrameContinuation {
600
+ return fr.connError(ErrCodeProtocol,
601
+ fmt.Sprintf("got %s for stream %d; expected CONTINUATION following %s for stream %d",
602
+ fh.Type, fh.StreamID,
603
+ lastType, fr.lastHeaderStream))
604
+ }
605
+ if fh.StreamID != fr.lastHeaderStream {
606
+ return fr.connError(ErrCodeProtocol,
607
+ fmt.Sprintf("got CONTINUATION for stream %d; expected stream %d",
608
+ fh.StreamID, fr.lastHeaderStream))
609
+ }
610
+ } else if fh.Type == FrameContinuation {
611
+ return fr.connError(ErrCodeProtocol, fmt.Sprintf("unexpected CONTINUATION for stream %d", fh.StreamID))
612
+ }
613
+
614
+ switch fh.Type {
615
+ case FrameHeaders, FrameContinuation:
616
+ if fh.Flags.Has(FlagHeadersEndHeaders) {
617
+ fr.lastHeaderStream = 0
618
+ } else {
619
+ fr.lastHeaderStream = fh.StreamID
620
+ }
621
+ }
622
+
623
+ return nil
624
+ }
625
+
626
+ // A DataFrame conveys arbitrary, variable-length sequences of octets
627
+ // associated with a stream.
628
+ // See https://httpwg.org/specs/rfc7540.html#rfc.section.6.1
629
+ type DataFrame struct {
630
+ FrameHeader
631
+ data []byte
632
+ }
633
+
634
+ func (f *DataFrame) StreamEnded() bool {
635
+ return f.FrameHeader.Flags.Has(FlagDataEndStream)
636
+ }
637
+
638
+ // Data returns the frame's data octets, not including any padding
639
+ // size byte or padding suffix bytes.
640
+ // The caller must not retain the returned memory past the next
641
+ // call to ReadFrame.
642
+ func (f *DataFrame) Data() []byte {
643
+ f.checkValid()
644
+ return f.data
645
+ }
646
+
647
+ func parseDataFrame(fc *frameCache, fh FrameHeader, countError func(string), payload []byte) (Frame, error) {
648
+ if fh.StreamID == 0 {
649
+ // DATA frames MUST be associated with a stream. If a
650
+ // DATA frame is received whose stream identifier
651
+ // field is 0x0, the recipient MUST respond with a
652
+ // connection error (Section 5.4.1) of type
653
+ // PROTOCOL_ERROR.
654
+ countError("frame_data_stream_0")
655
+ return nil, connError{ErrCodeProtocol, "DATA frame with stream ID 0"}
656
+ }
657
+ f := fc.getDataFrame()
658
+ f.FrameHeader = fh
659
+
660
+ var padSize byte
661
+ if fh.Flags.Has(FlagDataPadded) {
662
+ var err error
663
+ payload, padSize, err = readByte(payload)
664
+ if err != nil {
665
+ countError("frame_data_pad_byte_short")
666
+ return nil, err
667
+ }
668
+ }
669
+ if int(padSize) > len(payload) {
670
+ // If the length of the padding is greater than the
671
+ // length of the frame payload, the recipient MUST
672
+ // treat this as a connection error.
673
+ // Filed: https://github.com/http2/http2-spec/issues/610
674
+ countError("frame_data_pad_too_big")
675
+ return nil, connError{ErrCodeProtocol, "pad size larger than data payload"}
676
+ }
677
+ f.data = payload[:len(payload)-int(padSize)]
678
+ return f, nil
679
+ }
680
+
681
+ var (
682
+ errStreamID = errors.New("invalid stream ID")
683
+ errDepStreamID = errors.New("invalid dependent stream ID")
684
+ errPadLength = errors.New("pad length too large")
685
+ errPadBytes = errors.New("padding bytes must all be zeros unless AllowIllegalWrites is enabled")
686
+ )
687
+
688
+ func validStreamIDOrZero(streamID uint32) bool {
689
+ return streamID&(1<<31) == 0
690
+ }
691
+
692
+ func validStreamID(streamID uint32) bool {
693
+ return streamID != 0 && streamID&(1<<31) == 0
694
+ }
695
+
696
+ // WriteData writes a DATA frame.
697
+ //
698
+ // It will perform exactly one Write to the underlying Writer.
699
+ // It is the caller's responsibility not to violate the maximum frame size
700
+ // and to not call other Write methods concurrently.
701
+ func (f *Framer) WriteData(streamID uint32, endStream bool, data []byte) error {
702
+ return f.WriteDataPadded(streamID, endStream, data, nil)
703
+ }
704
+
705
+ // WriteDataPadded writes a DATA frame with optional padding.
706
+ //
707
+ // If pad is nil, the padding bit is not sent.
708
+ // The length of pad must not exceed 255 bytes.
709
+ // The bytes of pad must all be zero, unless f.AllowIllegalWrites is set.
710
+ //
711
+ // It will perform exactly one Write to the underlying Writer.
712
+ // It is the caller's responsibility not to violate the maximum frame size
713
+ // and to not call other Write methods concurrently.
714
+ func (f *Framer) WriteDataPadded(streamID uint32, endStream bool, data, pad []byte) error {
715
+ if err := f.startWriteDataPadded(streamID, endStream, data, pad); err != nil {
716
+ return err
717
+ }
718
+ return f.endWrite()
719
+ }
720
+
721
+ // startWriteDataPadded is WriteDataPadded, but only writes the frame to the Framer's internal buffer.
722
+ // The caller should call endWrite to flush the frame to the underlying writer.
723
+ func (f *Framer) startWriteDataPadded(streamID uint32, endStream bool, data, pad []byte) error {
724
+ if !validStreamID(streamID) && !f.AllowIllegalWrites {
725
+ return errStreamID
726
+ }
727
+ if len(pad) > 0 {
728
+ if len(pad) > 255 {
729
+ return errPadLength
730
+ }
731
+ if !f.AllowIllegalWrites {
732
+ for _, b := range pad {
733
+ if b != 0 {
734
+ // "Padding octets MUST be set to zero when sending."
735
+ return errPadBytes
736
+ }
737
+ }
738
+ }
739
+ }
740
+ var flags Flags
741
+ if endStream {
742
+ flags |= FlagDataEndStream
743
+ }
744
+ if pad != nil {
745
+ flags |= FlagDataPadded
746
+ }
747
+ f.startWrite(FrameData, flags, streamID)
748
+ if pad != nil {
749
+ f.wbuf = append(f.wbuf, byte(len(pad)))
750
+ }
751
+ f.wbuf = append(f.wbuf, data...)
752
+ f.wbuf = append(f.wbuf, pad...)
753
+ return nil
754
+ }
755
+
756
+ // A SettingsFrame conveys configuration parameters that affect how
757
+ // endpoints communicate, such as preferences and constraints on peer
758
+ // behavior.
759
+ //
760
+ // See https://httpwg.org/specs/rfc7540.html#SETTINGS
761
+ type SettingsFrame struct {
762
+ FrameHeader
763
+ p []byte
764
+ }
765
+
766
+ func parseSettingsFrame(_ *frameCache, fh FrameHeader, countError func(string), p []byte) (Frame, error) {
767
+ if fh.Flags.Has(FlagSettingsAck) && fh.Length > 0 {
768
+ // When this (ACK 0x1) bit is set, the payload of the
769
+ // SETTINGS frame MUST be empty. Receipt of a
770
+ // SETTINGS frame with the ACK flag set and a length
771
+ // field value other than 0 MUST be treated as a
772
+ // connection error (Section 5.4.1) of type
773
+ // FRAME_SIZE_ERROR.
774
+ countError("frame_settings_ack_with_length")
775
+ return nil, ConnectionError(ErrCodeFrameSize)
776
+ }
777
+ if fh.StreamID != 0 {
778
+ // SETTINGS frames always apply to a connection,
779
+ // never a single stream. The stream identifier for a
780
+ // SETTINGS frame MUST be zero (0x0). If an endpoint
781
+ // receives a SETTINGS frame whose stream identifier
782
+ // field is anything other than 0x0, the endpoint MUST
783
+ // respond with a connection error (Section 5.4.1) of
784
+ // type PROTOCOL_ERROR.
785
+ countError("frame_settings_has_stream")
786
+ return nil, ConnectionError(ErrCodeProtocol)
787
+ }
788
+ if len(p)%6 != 0 {
789
+ countError("frame_settings_mod_6")
790
+ // Expecting even number of 6 byte settings.
791
+ return nil, ConnectionError(ErrCodeFrameSize)
792
+ }
793
+ f := &SettingsFrame{FrameHeader: fh, p: p}
794
+ if v, ok := f.Value(SettingInitialWindowSize); ok && v > (1<<31)-1 {
795
+ countError("frame_settings_window_size_too_big")
796
+ // Values above the maximum flow control window size of 2^31 - 1 MUST
797
+ // be treated as a connection error (Section 5.4.1) of type
798
+ // FLOW_CONTROL_ERROR.
799
+ return nil, ConnectionError(ErrCodeFlowControl)
800
+ }
801
+ return f, nil
802
+ }
803
+
804
+ func (f *SettingsFrame) IsAck() bool {
805
+ return f.FrameHeader.Flags.Has(FlagSettingsAck)
806
+ }
807
+
808
+ func (f *SettingsFrame) Value(id SettingID) (v uint32, ok bool) {
809
+ f.checkValid()
810
+ for i := 0; i < f.NumSettings(); i++ {
811
+ if s := f.Setting(i); s.ID == id {
812
+ return s.Val, true
813
+ }
814
+ }
815
+ return 0, false
816
+ }
817
+
818
+ // Setting returns the setting from the frame at the given 0-based index.
819
+ // The index must be >= 0 and less than f.NumSettings().
820
+ func (f *SettingsFrame) Setting(i int) Setting {
821
+ buf := f.p
822
+ return Setting{
823
+ ID: SettingID(binary.BigEndian.Uint16(buf[i*6 : i*6+2])),
824
+ Val: binary.BigEndian.Uint32(buf[i*6+2 : i*6+6]),
825
+ }
826
+ }
827
+
828
+ func (f *SettingsFrame) NumSettings() int { return len(f.p) / 6 }
829
+
830
+ // HasDuplicates reports whether f contains any duplicate setting IDs.
831
+ func (f *SettingsFrame) HasDuplicates() bool {
832
+ num := f.NumSettings()
833
+ if num == 0 {
834
+ return false
835
+ }
836
+ // If it's small enough (the common case), just do the n^2
837
+ // thing and avoid a map allocation.
838
+ if num < 10 {
839
+ for i := 0; i < num; i++ {
840
+ idi := f.Setting(i).ID
841
+ for j := i + 1; j < num; j++ {
842
+ idj := f.Setting(j).ID
843
+ if idi == idj {
844
+ return true
845
+ }
846
+ }
847
+ }
848
+ return false
849
+ }
850
+ seen := map[SettingID]bool{}
851
+ for i := 0; i < num; i++ {
852
+ id := f.Setting(i).ID
853
+ if seen[id] {
854
+ return true
855
+ }
856
+ seen[id] = true
857
+ }
858
+ return false
859
+ }
860
+
861
+ // ForeachSetting runs fn for each setting.
862
+ // It stops and returns the first error.
863
+ func (f *SettingsFrame) ForeachSetting(fn func(Setting) error) error {
864
+ f.checkValid()
865
+ for i := 0; i < f.NumSettings(); i++ {
866
+ if err := fn(f.Setting(i)); err != nil {
867
+ return err
868
+ }
869
+ }
870
+ return nil
871
+ }
872
+
873
+ // WriteSettings writes a SETTINGS frame with zero or more settings
874
+ // specified and the ACK bit not set.
875
+ //
876
+ // It will perform exactly one Write to the underlying Writer.
877
+ // It is the caller's responsibility to not call other Write methods concurrently.
878
+ func (f *Framer) WriteSettings(settings ...Setting) error {
879
+ f.startWrite(FrameSettings, 0, 0)
880
+ for _, s := range settings {
881
+ f.writeUint16(uint16(s.ID))
882
+ f.writeUint32(s.Val)
883
+ }
884
+ return f.endWrite()
885
+ }
886
+
887
+ // WriteSettingsAck writes an empty SETTINGS frame with the ACK bit set.
888
+ //
889
+ // It will perform exactly one Write to the underlying Writer.
890
+ // It is the caller's responsibility to not call other Write methods concurrently.
891
+ func (f *Framer) WriteSettingsAck() error {
892
+ f.startWrite(FrameSettings, FlagSettingsAck, 0)
893
+ return f.endWrite()
894
+ }
895
+
896
+ // A PingFrame is a mechanism for measuring a minimal round trip time
897
+ // from the sender, as well as determining whether an idle connection
898
+ // is still functional.
899
+ // See https://httpwg.org/specs/rfc7540.html#rfc.section.6.7
900
+ type PingFrame struct {
901
+ FrameHeader
902
+ Data [8]byte
903
+ }
904
+
905
+ func (f *PingFrame) IsAck() bool { return f.Flags.Has(FlagPingAck) }
906
+
907
+ func parsePingFrame(_ *frameCache, fh FrameHeader, countError func(string), payload []byte) (Frame, error) {
908
+ if len(payload) != 8 {
909
+ countError("frame_ping_length")
910
+ return nil, ConnectionError(ErrCodeFrameSize)
911
+ }
912
+ if fh.StreamID != 0 {
913
+ countError("frame_ping_has_stream")
914
+ return nil, ConnectionError(ErrCodeProtocol)
915
+ }
916
+ f := &PingFrame{FrameHeader: fh}
917
+ copy(f.Data[:], payload)
918
+ return f, nil
919
+ }
920
+
921
+ func (f *Framer) WritePing(ack bool, data [8]byte) error {
922
+ var flags Flags
923
+ if ack {
924
+ flags = FlagPingAck
925
+ }
926
+ f.startWrite(FramePing, flags, 0)
927
+ f.writeBytes(data[:])
928
+ return f.endWrite()
929
+ }
930
+
931
+ // A GoAwayFrame informs the remote peer to stop creating streams on this connection.
932
+ // See https://httpwg.org/specs/rfc7540.html#rfc.section.6.8
933
+ type GoAwayFrame struct {
934
+ FrameHeader
935
+ LastStreamID uint32
936
+ ErrCode ErrCode
937
+ debugData []byte
938
+ }
939
+
940
+ // DebugData returns any debug data in the GOAWAY frame. Its contents
941
+ // are not defined.
942
+ // The caller must not retain the returned memory past the next
943
+ // call to ReadFrame.
944
+ func (f *GoAwayFrame) DebugData() []byte {
945
+ f.checkValid()
946
+ return f.debugData
947
+ }
948
+
949
+ func parseGoAwayFrame(_ *frameCache, fh FrameHeader, countError func(string), p []byte) (Frame, error) {
950
+ if fh.StreamID != 0 {
951
+ countError("frame_goaway_has_stream")
952
+ return nil, ConnectionError(ErrCodeProtocol)
953
+ }
954
+ if len(p) < 8 {
955
+ countError("frame_goaway_short")
956
+ return nil, ConnectionError(ErrCodeFrameSize)
957
+ }
958
+ return &GoAwayFrame{
959
+ FrameHeader: fh,
960
+ LastStreamID: binary.BigEndian.Uint32(p[:4]) & (1<<31 - 1),
961
+ ErrCode: ErrCode(binary.BigEndian.Uint32(p[4:8])),
962
+ debugData: p[8:],
963
+ }, nil
964
+ }
965
+
966
+ func (f *Framer) WriteGoAway(maxStreamID uint32, code ErrCode, debugData []byte) error {
967
+ f.startWrite(FrameGoAway, 0, 0)
968
+ f.writeUint32(maxStreamID & (1<<31 - 1))
969
+ f.writeUint32(uint32(code))
970
+ f.writeBytes(debugData)
971
+ return f.endWrite()
972
+ }
973
+
974
+ // An UnknownFrame is the frame type returned when the frame type is unknown
975
+ // or no specific frame type parser exists.
976
+ type UnknownFrame struct {
977
+ FrameHeader
978
+ p []byte
979
+ }
980
+
981
+ // Payload returns the frame's payload (after the header). It is not
982
+ // valid to call this method after a subsequent call to
983
+ // Framer.ReadFrame, nor is it valid to retain the returned slice.
984
+ // The memory is owned by the Framer and is invalidated when the next
985
+ // frame is read.
986
+ func (f *UnknownFrame) Payload() []byte {
987
+ f.checkValid()
988
+ return f.p
989
+ }
990
+
991
+ func parseUnknownFrame(_ *frameCache, fh FrameHeader, countError func(string), p []byte) (Frame, error) {
992
+ return &UnknownFrame{fh, p}, nil
993
+ }
994
+
995
+ // A WindowUpdateFrame is used to implement flow control.
996
+ // See https://httpwg.org/specs/rfc7540.html#rfc.section.6.9
997
+ type WindowUpdateFrame struct {
998
+ FrameHeader
999
+ Increment uint32 // never read with high bit set
1000
+ }
1001
+
1002
+ func parseWindowUpdateFrame(_ *frameCache, fh FrameHeader, countError func(string), p []byte) (Frame, error) {
1003
+ if len(p) != 4 {
1004
+ countError("frame_windowupdate_bad_len")
1005
+ return nil, ConnectionError(ErrCodeFrameSize)
1006
+ }
1007
+ inc := binary.BigEndian.Uint32(p[:4]) & 0x7fffffff // mask off high reserved bit
1008
+ if inc == 0 {
1009
+ // A receiver MUST treat the receipt of a
1010
+ // WINDOW_UPDATE frame with an flow control window
1011
+ // increment of 0 as a stream error (Section 5.4.2) of
1012
+ // type PROTOCOL_ERROR; errors on the connection flow
1013
+ // control window MUST be treated as a connection
1014
+ // error (Section 5.4.1).
1015
+ if fh.StreamID == 0 {
1016
+ countError("frame_windowupdate_zero_inc_conn")
1017
+ return nil, ConnectionError(ErrCodeProtocol)
1018
+ }
1019
+ countError("frame_windowupdate_zero_inc_stream")
1020
+ return nil, streamError(fh.StreamID, ErrCodeProtocol)
1021
+ }
1022
+ return &WindowUpdateFrame{
1023
+ FrameHeader: fh,
1024
+ Increment: inc,
1025
+ }, nil
1026
+ }
1027
+
1028
+ // WriteWindowUpdate writes a WINDOW_UPDATE frame.
1029
+ // The increment value must be between 1 and 2,147,483,647, inclusive.
1030
+ // If the Stream ID is zero, the window update applies to the
1031
+ // connection as a whole.
1032
+ func (f *Framer) WriteWindowUpdate(streamID, incr uint32) error {
1033
+ // "The legal range for the increment to the flow control window is 1 to 2^31-1 (2,147,483,647) octets."
1034
+ if (incr < 1 || incr > 2147483647) && !f.AllowIllegalWrites {
1035
+ return errors.New("illegal window increment value")
1036
+ }
1037
+ f.startWrite(FrameWindowUpdate, 0, streamID)
1038
+ f.writeUint32(incr)
1039
+ return f.endWrite()
1040
+ }
1041
+
1042
+ // A HeadersFrame is used to open a stream and additionally carries a
1043
+ // header block fragment.
1044
+ type HeadersFrame struct {
1045
+ FrameHeader
1046
+
1047
+ // Priority is set if FlagHeadersPriority is set in the FrameHeader.
1048
+ Priority PriorityParam
1049
+
1050
+ headerFragBuf []byte // not owned
1051
+ }
1052
+
1053
+ func (f *HeadersFrame) HeaderBlockFragment() []byte {
1054
+ f.checkValid()
1055
+ return f.headerFragBuf
1056
+ }
1057
+
1058
+ func (f *HeadersFrame) HeadersEnded() bool {
1059
+ return f.FrameHeader.Flags.Has(FlagHeadersEndHeaders)
1060
+ }
1061
+
1062
+ func (f *HeadersFrame) StreamEnded() bool {
1063
+ return f.FrameHeader.Flags.Has(FlagHeadersEndStream)
1064
+ }
1065
+
1066
+ func (f *HeadersFrame) HasPriority() bool {
1067
+ return f.FrameHeader.Flags.Has(FlagHeadersPriority)
1068
+ }
1069
+
1070
+ func parseHeadersFrame(_ *frameCache, fh FrameHeader, countError func(string), p []byte) (_ Frame, err error) {
1071
+ hf := &HeadersFrame{
1072
+ FrameHeader: fh,
1073
+ }
1074
+ if fh.StreamID == 0 {
1075
+ // HEADERS frames MUST be associated with a stream. If a HEADERS frame
1076
+ // is received whose stream identifier field is 0x0, the recipient MUST
1077
+ // respond with a connection error (Section 5.4.1) of type
1078
+ // PROTOCOL_ERROR.
1079
+ countError("frame_headers_zero_stream")
1080
+ return nil, connError{ErrCodeProtocol, "HEADERS frame with stream ID 0"}
1081
+ }
1082
+ var padLength uint8
1083
+ if fh.Flags.Has(FlagHeadersPadded) {
1084
+ if p, padLength, err = readByte(p); err != nil {
1085
+ countError("frame_headers_pad_short")
1086
+ return
1087
+ }
1088
+ }
1089
+ if fh.Flags.Has(FlagHeadersPriority) {
1090
+ var v uint32
1091
+ p, v, err = readUint32(p)
1092
+ if err != nil {
1093
+ countError("frame_headers_prio_short")
1094
+ return nil, err
1095
+ }
1096
+ hf.Priority.StreamDep = v & 0x7fffffff
1097
+ hf.Priority.Exclusive = (v != hf.Priority.StreamDep) // high bit was set
1098
+ p, hf.Priority.Weight, err = readByte(p)
1099
+ if err != nil {
1100
+ countError("frame_headers_prio_weight_short")
1101
+ return nil, err
1102
+ }
1103
+ }
1104
+ if len(p)-int(padLength) < 0 {
1105
+ countError("frame_headers_pad_too_big")
1106
+ return nil, streamError(fh.StreamID, ErrCodeProtocol)
1107
+ }
1108
+ hf.headerFragBuf = p[:len(p)-int(padLength)]
1109
+ return hf, nil
1110
+ }
1111
+
1112
+ // HeadersFrameParam are the parameters for writing a HEADERS frame.
1113
+ type HeadersFrameParam struct {
1114
+ // StreamID is the required Stream ID to initiate.
1115
+ StreamID uint32
1116
+ // BlockFragment is part (or all) of a Header Block.
1117
+ BlockFragment []byte
1118
+
1119
+ // EndStream indicates that the header block is the last that
1120
+ // the endpoint will send for the identified stream. Setting
1121
+ // this flag causes the stream to enter one of "half closed"
1122
+ // states.
1123
+ EndStream bool
1124
+
1125
+ // EndHeaders indicates that this frame contains an entire
1126
+ // header block and is not followed by any
1127
+ // CONTINUATION frames.
1128
+ EndHeaders bool
1129
+
1130
+ // PadLength is the optional number of bytes of zeros to add
1131
+ // to this frame.
1132
+ PadLength uint8
1133
+
1134
+ // Priority, if non-zero, includes stream priority information
1135
+ // in the HEADER frame.
1136
+ Priority PriorityParam
1137
+ }
1138
+
1139
+ // WriteHeaders writes a single HEADERS frame.
1140
+ //
1141
+ // This is a low-level header writing method. Encoding headers and
1142
+ // splitting them into any necessary CONTINUATION frames is handled
1143
+ // elsewhere.
1144
+ //
1145
+ // It will perform exactly one Write to the underlying Writer.
1146
+ // It is the caller's responsibility to not call other Write methods concurrently.
1147
+ func (f *Framer) WriteHeaders(p HeadersFrameParam) error {
1148
+ if !validStreamID(p.StreamID) && !f.AllowIllegalWrites {
1149
+ return errStreamID
1150
+ }
1151
+ var flags Flags
1152
+ if p.PadLength != 0 {
1153
+ flags |= FlagHeadersPadded
1154
+ }
1155
+ if p.EndStream {
1156
+ flags |= FlagHeadersEndStream
1157
+ }
1158
+ if p.EndHeaders {
1159
+ flags |= FlagHeadersEndHeaders
1160
+ }
1161
+ if !p.Priority.IsZero() {
1162
+ flags |= FlagHeadersPriority
1163
+ }
1164
+ f.startWrite(FrameHeaders, flags, p.StreamID)
1165
+ if p.PadLength != 0 {
1166
+ f.writeByte(p.PadLength)
1167
+ }
1168
+ if !p.Priority.IsZero() {
1169
+ v := p.Priority.StreamDep
1170
+ if !validStreamIDOrZero(v) && !f.AllowIllegalWrites {
1171
+ return errDepStreamID
1172
+ }
1173
+ if p.Priority.Exclusive {
1174
+ v |= 1 << 31
1175
+ }
1176
+ f.writeUint32(v)
1177
+ f.writeByte(p.Priority.Weight)
1178
+ }
1179
+ f.wbuf = append(f.wbuf, p.BlockFragment...)
1180
+ f.wbuf = append(f.wbuf, padZeros[:p.PadLength]...)
1181
+ return f.endWrite()
1182
+ }
1183
+
1184
+ // A PriorityFrame specifies the sender-advised priority of a stream.
1185
+ // See https://httpwg.org/specs/rfc7540.html#rfc.section.6.3
1186
+ type PriorityFrame struct {
1187
+ FrameHeader
1188
+ PriorityParam
1189
+ }
1190
+
1191
+ // defaultRFC9218Priority determines what priority we should use as the default
1192
+ // value.
1193
+ //
1194
+ // According to RFC 9218, by default, streams should be given an urgency of 3
1195
+ // and should be non-incremental. However, making streams non-incremental by
1196
+ // default would be a huge change to our historical behavior where we would
1197
+ // round-robin writes across streams. When streams are non-incremental, we
1198
+ // would process streams of the same urgency one-by-one to completion instead.
1199
+ //
1200
+ // To avoid such a sudden change which might break some HTTP/2 users, this
1201
+ // function allows the caller to specify whether they can actually use the
1202
+ // default value as specified in RFC 9218. If not, this function will return a
1203
+ // priority value where streams are incremental by default instead: effectively
1204
+ // a round-robin between stream of the same urgency.
1205
+ //
1206
+ // As an example, a server might not be able to use the RFC 9218 default value
1207
+ // when it's not sure that the client it is serving is aware of RFC 9218.
1208
+ func defaultRFC9218Priority(canUseDefault bool) PriorityParam {
1209
+ if canUseDefault {
1210
+ return PriorityParam{
1211
+ urgency: 3,
1212
+ incremental: 0,
1213
+ }
1214
+ }
1215
+ return PriorityParam{
1216
+ urgency: 3,
1217
+ incremental: 1,
1218
+ }
1219
+ }
1220
+
1221
+ // Note that HTTP/2 has had two different prioritization schemes, and
1222
+ // PriorityParam struct below is a superset of both schemes. The exported
1223
+ // symbols are from RFC 7540 and the non-exported ones are from RFC 9218.
1224
+
1225
+ // PriorityParam are the stream prioritization parameters.
1226
+ type PriorityParam struct {
1227
+ // StreamDep is a 31-bit stream identifier for the
1228
+ // stream that this stream depends on. Zero means no
1229
+ // dependency.
1230
+ StreamDep uint32
1231
+
1232
+ // Exclusive is whether the dependency is exclusive.
1233
+ Exclusive bool
1234
+
1235
+ // Weight is the stream's zero-indexed weight. It should be
1236
+ // set together with StreamDep, or neither should be set. Per
1237
+ // the spec, "Add one to the value to obtain a weight between
1238
+ // 1 and 256."
1239
+ Weight uint8
1240
+
1241
+ // "The urgency (u) parameter value is Integer (see Section 3.3.1 of
1242
+ // [STRUCTURED-FIELDS]), between 0 and 7 inclusive, in descending order of
1243
+ // priority. The default is 3."
1244
+ urgency uint8
1245
+
1246
+ // "The incremental (i) parameter value is Boolean (see Section 3.3.6 of
1247
+ // [STRUCTURED-FIELDS]). It indicates if an HTTP response can be processed
1248
+ // incrementally, i.e., provide some meaningful output as chunks of the
1249
+ // response arrive."
1250
+ //
1251
+ // We use uint8 (i.e. 0 is false, 1 is true) instead of bool so we can
1252
+ // avoid unnecessary type conversions and because either type takes 1 byte.
1253
+ incremental uint8
1254
+ }
1255
+
1256
+ func (p PriorityParam) IsZero() bool {
1257
+ return p == PriorityParam{}
1258
+ }
1259
+
1260
+ func parsePriorityFrame(_ *frameCache, fh FrameHeader, countError func(string), payload []byte) (Frame, error) {
1261
+ if fh.StreamID == 0 {
1262
+ countError("frame_priority_zero_stream")
1263
+ return nil, connError{ErrCodeProtocol, "PRIORITY frame with stream ID 0"}
1264
+ }
1265
+ if len(payload) != 5 {
1266
+ countError("frame_priority_bad_length")
1267
+ return nil, connError{ErrCodeFrameSize, fmt.Sprintf("PRIORITY frame payload size was %d; want 5", len(payload))}
1268
+ }
1269
+ v := binary.BigEndian.Uint32(payload[:4])
1270
+ streamID := v & 0x7fffffff // mask off high bit
1271
+ return &PriorityFrame{
1272
+ FrameHeader: fh,
1273
+ PriorityParam: PriorityParam{
1274
+ Weight: payload[4],
1275
+ StreamDep: streamID,
1276
+ Exclusive: streamID != v, // was high bit set?
1277
+ },
1278
+ }, nil
1279
+ }
1280
+
1281
+ // WritePriority writes a PRIORITY frame.
1282
+ //
1283
+ // It will perform exactly one Write to the underlying Writer.
1284
+ // It is the caller's responsibility to not call other Write methods concurrently.
1285
+ func (f *Framer) WritePriority(streamID uint32, p PriorityParam) error {
1286
+ if !validStreamID(streamID) && !f.AllowIllegalWrites {
1287
+ return errStreamID
1288
+ }
1289
+ if !validStreamIDOrZero(p.StreamDep) {
1290
+ return errDepStreamID
1291
+ }
1292
+ f.startWrite(FramePriority, 0, streamID)
1293
+ v := p.StreamDep
1294
+ if p.Exclusive {
1295
+ v |= 1 << 31
1296
+ }
1297
+ f.writeUint32(v)
1298
+ f.writeByte(p.Weight)
1299
+ return f.endWrite()
1300
+ }
1301
+
1302
+ // PriorityUpdateFrame is a PRIORITY_UPDATE frame as described in
1303
+ // https://www.rfc-editor.org/rfc/rfc9218.html#name-the-priority_update-frame.
1304
+ type PriorityUpdateFrame struct {
1305
+ FrameHeader
1306
+ Priority string
1307
+ PrioritizedStreamID uint32
1308
+ }
1309
+
1310
+ func parseRFC9218Priority(s string, canUseDefault bool) (p PriorityParam, ok bool) {
1311
+ p = defaultRFC9218Priority(canUseDefault)
1312
+ ok = httpsfv.ParseDictionary(s, func(key, val, _ string) {
1313
+ switch key {
1314
+ case "u":
1315
+ if u, ok := httpsfv.ParseInteger(val); ok && u >= 0 && u <= 7 {
1316
+ p.urgency = uint8(u)
1317
+ }
1318
+ case "i":
1319
+ if i, ok := httpsfv.ParseBoolean(val); ok {
1320
+ if i {
1321
+ p.incremental = 1
1322
+ } else {
1323
+ p.incremental = 0
1324
+ }
1325
+ }
1326
+ }
1327
+ })
1328
+ if !ok {
1329
+ return defaultRFC9218Priority(canUseDefault), ok
1330
+ }
1331
+ return p, true
1332
+ }
1333
+
1334
+ func parsePriorityUpdateFrame(_ *frameCache, fh FrameHeader, countError func(string), payload []byte) (Frame, error) {
1335
+ if fh.StreamID != 0 {
1336
+ countError("frame_priority_update_non_zero_stream")
1337
+ return nil, connError{ErrCodeProtocol, "PRIORITY_UPDATE frame with non-zero stream ID"}
1338
+ }
1339
+ if len(payload) < 4 {
1340
+ countError("frame_priority_update_bad_length")
1341
+ return nil, connError{ErrCodeFrameSize, fmt.Sprintf("PRIORITY_UPDATE frame payload size was %d; want at least 4", len(payload))}
1342
+ }
1343
+ v := binary.BigEndian.Uint32(payload[:4])
1344
+ streamID := v & 0x7fffffff // mask off high bit
1345
+ if streamID == 0 {
1346
+ countError("frame_priority_update_prioritizing_zero_stream")
1347
+ return nil, connError{ErrCodeProtocol, "PRIORITY_UPDATE frame with prioritized stream ID of zero"}
1348
+ }
1349
+ return &PriorityUpdateFrame{
1350
+ FrameHeader: fh,
1351
+ PrioritizedStreamID: streamID,
1352
+ Priority: string(payload[4:]),
1353
+ }, nil
1354
+ }
1355
+
1356
+ // WritePriorityUpdate writes a PRIORITY_UPDATE frame.
1357
+ //
1358
+ // It will perform exactly one Write to the underlying Writer.
1359
+ // It is the caller's responsibility to not call other Write methods concurrently.
1360
+ func (f *Framer) WritePriorityUpdate(streamID uint32, priority string) error {
1361
+ if !validStreamID(streamID) && !f.AllowIllegalWrites {
1362
+ return errStreamID
1363
+ }
1364
+ f.startWrite(FramePriorityUpdate, 0, 0)
1365
+ f.writeUint32(streamID)
1366
+ f.writeBytes([]byte(priority))
1367
+ return f.endWrite()
1368
+ }
1369
+
1370
+ // A RSTStreamFrame allows for abnormal termination of a stream.
1371
+ // See https://httpwg.org/specs/rfc7540.html#rfc.section.6.4
1372
+ type RSTStreamFrame struct {
1373
+ FrameHeader
1374
+ ErrCode ErrCode
1375
+ }
1376
+
1377
+ func parseRSTStreamFrame(_ *frameCache, fh FrameHeader, countError func(string), p []byte) (Frame, error) {
1378
+ if len(p) != 4 {
1379
+ countError("frame_rststream_bad_len")
1380
+ return nil, ConnectionError(ErrCodeFrameSize)
1381
+ }
1382
+ if fh.StreamID == 0 {
1383
+ countError("frame_rststream_zero_stream")
1384
+ return nil, ConnectionError(ErrCodeProtocol)
1385
+ }
1386
+ return &RSTStreamFrame{fh, ErrCode(binary.BigEndian.Uint32(p[:4]))}, nil
1387
+ }
1388
+
1389
+ // WriteRSTStream writes a RST_STREAM frame.
1390
+ //
1391
+ // It will perform exactly one Write to the underlying Writer.
1392
+ // It is the caller's responsibility to not call other Write methods concurrently.
1393
+ func (f *Framer) WriteRSTStream(streamID uint32, code ErrCode) error {
1394
+ if !validStreamID(streamID) && !f.AllowIllegalWrites {
1395
+ return errStreamID
1396
+ }
1397
+ f.startWrite(FrameRSTStream, 0, streamID)
1398
+ f.writeUint32(uint32(code))
1399
+ return f.endWrite()
1400
+ }
1401
+
1402
+ // A ContinuationFrame is used to continue a sequence of header block fragments.
1403
+ // See https://httpwg.org/specs/rfc7540.html#rfc.section.6.10
1404
+ type ContinuationFrame struct {
1405
+ FrameHeader
1406
+ headerFragBuf []byte
1407
+ }
1408
+
1409
+ func parseContinuationFrame(_ *frameCache, fh FrameHeader, countError func(string), p []byte) (Frame, error) {
1410
+ if fh.StreamID == 0 {
1411
+ countError("frame_continuation_zero_stream")
1412
+ return nil, connError{ErrCodeProtocol, "CONTINUATION frame with stream ID 0"}
1413
+ }
1414
+ return &ContinuationFrame{fh, p}, nil
1415
+ }
1416
+
1417
+ func (f *ContinuationFrame) HeaderBlockFragment() []byte {
1418
+ f.checkValid()
1419
+ return f.headerFragBuf
1420
+ }
1421
+
1422
+ func (f *ContinuationFrame) HeadersEnded() bool {
1423
+ return f.FrameHeader.Flags.Has(FlagContinuationEndHeaders)
1424
+ }
1425
+
1426
+ // WriteContinuation writes a CONTINUATION frame.
1427
+ //
1428
+ // It will perform exactly one Write to the underlying Writer.
1429
+ // It is the caller's responsibility to not call other Write methods concurrently.
1430
+ func (f *Framer) WriteContinuation(streamID uint32, endHeaders bool, headerBlockFragment []byte) error {
1431
+ if !validStreamID(streamID) && !f.AllowIllegalWrites {
1432
+ return errStreamID
1433
+ }
1434
+ var flags Flags
1435
+ if endHeaders {
1436
+ flags |= FlagContinuationEndHeaders
1437
+ }
1438
+ f.startWrite(FrameContinuation, flags, streamID)
1439
+ f.wbuf = append(f.wbuf, headerBlockFragment...)
1440
+ return f.endWrite()
1441
+ }
1442
+
1443
+ // A PushPromiseFrame is used to initiate a server stream.
1444
+ // See https://httpwg.org/specs/rfc7540.html#rfc.section.6.6
1445
+ type PushPromiseFrame struct {
1446
+ FrameHeader
1447
+ PromiseID uint32
1448
+ headerFragBuf []byte // not owned
1449
+ }
1450
+
1451
+ func (f *PushPromiseFrame) HeaderBlockFragment() []byte {
1452
+ f.checkValid()
1453
+ return f.headerFragBuf
1454
+ }
1455
+
1456
+ func (f *PushPromiseFrame) HeadersEnded() bool {
1457
+ return f.FrameHeader.Flags.Has(FlagPushPromiseEndHeaders)
1458
+ }
1459
+
1460
+ func parsePushPromise(_ *frameCache, fh FrameHeader, countError func(string), p []byte) (_ Frame, err error) {
1461
+ pp := &PushPromiseFrame{
1462
+ FrameHeader: fh,
1463
+ }
1464
+ if pp.StreamID == 0 {
1465
+ // PUSH_PROMISE frames MUST be associated with an existing,
1466
+ // peer-initiated stream. The stream identifier of a
1467
+ // PUSH_PROMISE frame indicates the stream it is associated
1468
+ // with. If the stream identifier field specifies the value
1469
+ // 0x0, a recipient MUST respond with a connection error
1470
+ // (Section 5.4.1) of type PROTOCOL_ERROR.
1471
+ countError("frame_pushpromise_zero_stream")
1472
+ return nil, ConnectionError(ErrCodeProtocol)
1473
+ }
1474
+ // The PUSH_PROMISE frame includes optional padding.
1475
+ // Padding fields and flags are identical to those defined for DATA frames
1476
+ var padLength uint8
1477
+ if fh.Flags.Has(FlagPushPromisePadded) {
1478
+ if p, padLength, err = readByte(p); err != nil {
1479
+ countError("frame_pushpromise_pad_short")
1480
+ return
1481
+ }
1482
+ }
1483
+
1484
+ p, pp.PromiseID, err = readUint32(p)
1485
+ if err != nil {
1486
+ countError("frame_pushpromise_promiseid_short")
1487
+ return
1488
+ }
1489
+ pp.PromiseID = pp.PromiseID & (1<<31 - 1)
1490
+
1491
+ if int(padLength) > len(p) {
1492
+ // like the DATA frame, error out if padding is longer than the body.
1493
+ countError("frame_pushpromise_pad_too_big")
1494
+ return nil, ConnectionError(ErrCodeProtocol)
1495
+ }
1496
+ pp.headerFragBuf = p[:len(p)-int(padLength)]
1497
+ return pp, nil
1498
+ }
1499
+
1500
+ // PushPromiseParam are the parameters for writing a PUSH_PROMISE frame.
1501
+ type PushPromiseParam struct {
1502
+ // StreamID is the required Stream ID to initiate.
1503
+ StreamID uint32
1504
+
1505
+ // PromiseID is the required Stream ID which this
1506
+ // Push Promises
1507
+ PromiseID uint32
1508
+
1509
+ // BlockFragment is part (or all) of a Header Block.
1510
+ BlockFragment []byte
1511
+
1512
+ // EndHeaders indicates that this frame contains an entire
1513
+ // header block and is not followed by any
1514
+ // CONTINUATION frames.
1515
+ EndHeaders bool
1516
+
1517
+ // PadLength is the optional number of bytes of zeros to add
1518
+ // to this frame.
1519
+ PadLength uint8
1520
+ }
1521
+
1522
+ // WritePushPromise writes a single PushPromise Frame.
1523
+ //
1524
+ // As with Header Frames, This is the low level call for writing
1525
+ // individual frames. Continuation frames are handled elsewhere.
1526
+ //
1527
+ // It will perform exactly one Write to the underlying Writer.
1528
+ // It is the caller's responsibility to not call other Write methods concurrently.
1529
+ func (f *Framer) WritePushPromise(p PushPromiseParam) error {
1530
+ if !validStreamID(p.StreamID) && !f.AllowIllegalWrites {
1531
+ return errStreamID
1532
+ }
1533
+ var flags Flags
1534
+ if p.PadLength != 0 {
1535
+ flags |= FlagPushPromisePadded
1536
+ }
1537
+ if p.EndHeaders {
1538
+ flags |= FlagPushPromiseEndHeaders
1539
+ }
1540
+ f.startWrite(FramePushPromise, flags, p.StreamID)
1541
+ if p.PadLength != 0 {
1542
+ f.writeByte(p.PadLength)
1543
+ }
1544
+ if !validStreamID(p.PromiseID) && !f.AllowIllegalWrites {
1545
+ return errStreamID
1546
+ }
1547
+ f.writeUint32(p.PromiseID)
1548
+ f.wbuf = append(f.wbuf, p.BlockFragment...)
1549
+ f.wbuf = append(f.wbuf, padZeros[:p.PadLength]...)
1550
+ return f.endWrite()
1551
+ }
1552
+
1553
+ // WriteRawFrame writes a raw frame. This can be used to write
1554
+ // extension frames unknown to this package.
1555
+ func (f *Framer) WriteRawFrame(t FrameType, flags Flags, streamID uint32, payload []byte) error {
1556
+ f.startWrite(t, flags, streamID)
1557
+ f.writeBytes(payload)
1558
+ return f.endWrite()
1559
+ }
1560
+
1561
+ func readByte(p []byte) (remain []byte, b byte, err error) {
1562
+ if len(p) == 0 {
1563
+ return nil, 0, io.ErrUnexpectedEOF
1564
+ }
1565
+ return p[1:], p[0], nil
1566
+ }
1567
+
1568
+ func readUint32(p []byte) (remain []byte, v uint32, err error) {
1569
+ if len(p) < 4 {
1570
+ return nil, 0, io.ErrUnexpectedEOF
1571
+ }
1572
+ return p[4:], binary.BigEndian.Uint32(p[:4]), nil
1573
+ }
1574
+
1575
+ type streamEnder interface {
1576
+ StreamEnded() bool
1577
+ }
1578
+
1579
+ type headersEnder interface {
1580
+ HeadersEnded() bool
1581
+ }
1582
+
1583
+ type headersOrContinuation interface {
1584
+ headersEnder
1585
+ HeaderBlockFragment() []byte
1586
+ }
1587
+
1588
+ // A MetaHeadersFrame is the representation of one HEADERS frame and
1589
+ // zero or more contiguous CONTINUATION frames and the decoding of
1590
+ // their HPACK-encoded contents.
1591
+ //
1592
+ // This type of frame does not appear on the wire and is only returned
1593
+ // by the Framer when Framer.ReadMetaHeaders is set.
1594
+ type MetaHeadersFrame struct {
1595
+ *HeadersFrame
1596
+
1597
+ // Fields are the fields contained in the HEADERS and
1598
+ // CONTINUATION frames. The underlying slice is owned by the
1599
+ // Framer and must not be retained after the next call to
1600
+ // ReadFrame.
1601
+ //
1602
+ // Fields are guaranteed to be in the correct http2 order and
1603
+ // not have unknown pseudo header fields or invalid header
1604
+ // field names or values. Required pseudo header fields may be
1605
+ // missing, however. Use the MetaHeadersFrame.Pseudo accessor
1606
+ // method access pseudo headers.
1607
+ Fields []hpack.HeaderField
1608
+
1609
+ // Truncated is whether the max header list size limit was hit
1610
+ // and Fields is incomplete. The hpack decoder state is still
1611
+ // valid, however.
1612
+ Truncated bool
1613
+ }
1614
+
1615
+ // PseudoValue returns the given pseudo header field's value.
1616
+ // The provided pseudo field should not contain the leading colon.
1617
+ func (mh *MetaHeadersFrame) PseudoValue(pseudo string) string {
1618
+ for _, hf := range mh.Fields {
1619
+ if !hf.IsPseudo() {
1620
+ return ""
1621
+ }
1622
+ if hf.Name[1:] == pseudo {
1623
+ return hf.Value
1624
+ }
1625
+ }
1626
+ return ""
1627
+ }
1628
+
1629
+ // RegularFields returns the regular (non-pseudo) header fields of mh.
1630
+ // The caller does not own the returned slice.
1631
+ func (mh *MetaHeadersFrame) RegularFields() []hpack.HeaderField {
1632
+ for i, hf := range mh.Fields {
1633
+ if !hf.IsPseudo() {
1634
+ return mh.Fields[i:]
1635
+ }
1636
+ }
1637
+ return nil
1638
+ }
1639
+
1640
+ // PseudoFields returns the pseudo header fields of mh.
1641
+ // The caller does not own the returned slice.
1642
+ func (mh *MetaHeadersFrame) PseudoFields() []hpack.HeaderField {
1643
+ for i, hf := range mh.Fields {
1644
+ if !hf.IsPseudo() {
1645
+ return mh.Fields[:i]
1646
+ }
1647
+ }
1648
+ return mh.Fields
1649
+ }
1650
+
1651
+ func (mh *MetaHeadersFrame) rfc9218Priority(priorityAware bool) (p PriorityParam, priorityAwareAfter, hasIntermediary bool) {
1652
+ var s string
1653
+ for _, field := range mh.Fields {
1654
+ if field.Name == "priority" {
1655
+ s = field.Value
1656
+ priorityAware = true
1657
+ }
1658
+ if slices.Contains([]string{"via", "forwarded", "x-forwarded-for"}, field.Name) {
1659
+ hasIntermediary = true
1660
+ }
1661
+ }
1662
+ // No need to check for ok. parseRFC9218Priority will return a default
1663
+ // value if there is no priority field or if the field cannot be parsed.
1664
+ p, _ = parseRFC9218Priority(s, priorityAware && !hasIntermediary)
1665
+ return p, priorityAware, hasIntermediary
1666
+ }
1667
+
1668
+ func (mh *MetaHeadersFrame) checkPseudos() error {
1669
+ var isRequest, isResponse bool
1670
+ pf := mh.PseudoFields()
1671
+ for i, hf := range pf {
1672
+ switch hf.Name {
1673
+ case ":method", ":path", ":scheme", ":authority", ":protocol":
1674
+ isRequest = true
1675
+ case ":status":
1676
+ isResponse = true
1677
+ default:
1678
+ return pseudoHeaderError(hf.Name)
1679
+ }
1680
+ // Check for duplicates.
1681
+ // This would be a bad algorithm, but N is 5.
1682
+ // And this doesn't allocate.
1683
+ for _, hf2 := range pf[:i] {
1684
+ if hf.Name == hf2.Name {
1685
+ return duplicatePseudoHeaderError(hf.Name)
1686
+ }
1687
+ }
1688
+ }
1689
+ if isRequest && isResponse {
1690
+ return errMixPseudoHeaderTypes
1691
+ }
1692
+ return nil
1693
+ }
1694
+
1695
+ func (fr *Framer) maxHeaderStringLen() int {
1696
+ v := int(fr.maxHeaderListSize())
1697
+ if v < 0 {
1698
+ // If maxHeaderListSize overflows an int, use no limit (0).
1699
+ return 0
1700
+ }
1701
+ return v
1702
+ }
1703
+
1704
+ // readMetaFrame returns 0 or more CONTINUATION frames from fr and
1705
+ // merge them into the provided hf and returns a MetaHeadersFrame
1706
+ // with the decoded hpack values.
1707
+ func (fr *Framer) readMetaFrame(hf *HeadersFrame) (Frame, error) {
1708
+ if fr.AllowIllegalReads {
1709
+ return nil, errors.New("illegal use of AllowIllegalReads with ReadMetaHeaders")
1710
+ }
1711
+ mh := &MetaHeadersFrame{
1712
+ HeadersFrame: hf,
1713
+ }
1714
+ var remainSize = fr.maxHeaderListSize()
1715
+ var sawRegular bool
1716
+
1717
+ var invalid error // pseudo header field errors
1718
+ hdec := fr.ReadMetaHeaders
1719
+ hdec.SetEmitEnabled(true)
1720
+ hdec.SetMaxStringLength(fr.maxHeaderStringLen())
1721
+ hdec.SetEmitFunc(func(hf hpack.HeaderField) {
1722
+ if VerboseLogs && fr.logReads {
1723
+ fr.debugReadLoggerf("http2: decoded hpack field %+v", hf)
1724
+ }
1725
+ if !httpguts.ValidHeaderFieldValue(hf.Value) {
1726
+ // Don't include the value in the error, because it may be sensitive.
1727
+ invalid = headerFieldValueError(hf.Name)
1728
+ }
1729
+ isPseudo := strings.HasPrefix(hf.Name, ":")
1730
+ if isPseudo {
1731
+ if sawRegular {
1732
+ invalid = errPseudoAfterRegular
1733
+ }
1734
+ } else {
1735
+ sawRegular = true
1736
+ if !validWireHeaderFieldName(hf.Name) {
1737
+ invalid = headerFieldNameError(hf.Name)
1738
+ }
1739
+ }
1740
+
1741
+ if invalid != nil {
1742
+ hdec.SetEmitEnabled(false)
1743
+ return
1744
+ }
1745
+
1746
+ size := hf.Size()
1747
+ if size > remainSize {
1748
+ hdec.SetEmitEnabled(false)
1749
+ mh.Truncated = true
1750
+ remainSize = 0
1751
+ return
1752
+ }
1753
+ remainSize -= size
1754
+
1755
+ mh.Fields = append(mh.Fields, hf)
1756
+ })
1757
+ // Lose reference to MetaHeadersFrame:
1758
+ defer hdec.SetEmitFunc(func(hf hpack.HeaderField) {})
1759
+
1760
+ var hc headersOrContinuation = hf
1761
+ for {
1762
+ frag := hc.HeaderBlockFragment()
1763
+
1764
+ // Avoid parsing large amounts of headers that we will then discard.
1765
+ // If the sender exceeds the max header list size by too much,
1766
+ // skip parsing the fragment and close the connection.
1767
+ //
1768
+ // "Too much" is either any CONTINUATION frame after we've already
1769
+ // exceeded the max header list size (in which case remainSize is 0),
1770
+ // or a frame whose encoded size is more than twice the remaining
1771
+ // header list bytes we're willing to accept.
1772
+ if int64(len(frag)) > int64(2*remainSize) {
1773
+ if VerboseLogs {
1774
+ log.Printf("http2: header list too large")
1775
+ }
1776
+ // It would be nice to send a RST_STREAM before sending the GOAWAY,
1777
+ // but the structure of the server's frame writer makes this difficult.
1778
+ return mh, ConnectionError(ErrCodeProtocol)
1779
+ }
1780
+
1781
+ // Also close the connection after any CONTINUATION frame following an
1782
+ // invalid header, since we stop tracking the size of the headers after
1783
+ // an invalid one.
1784
+ if invalid != nil {
1785
+ if VerboseLogs {
1786
+ log.Printf("http2: invalid header: %v", invalid)
1787
+ }
1788
+ // It would be nice to send a RST_STREAM before sending the GOAWAY,
1789
+ // but the structure of the server's frame writer makes this difficult.
1790
+ return mh, ConnectionError(ErrCodeProtocol)
1791
+ }
1792
+
1793
+ if _, err := hdec.Write(frag); err != nil {
1794
+ return mh, ConnectionError(ErrCodeCompression)
1795
+ }
1796
+
1797
+ if hc.HeadersEnded() {
1798
+ break
1799
+ }
1800
+ if f, err := fr.ReadFrame(); err != nil {
1801
+ return nil, err
1802
+ } else {
1803
+ hc = f.(*ContinuationFrame) // guaranteed by checkFrameOrder
1804
+ }
1805
+ }
1806
+
1807
+ mh.HeadersFrame.headerFragBuf = nil
1808
+ mh.HeadersFrame.invalidate()
1809
+
1810
+ if err := hdec.Close(); err != nil {
1811
+ return mh, ConnectionError(ErrCodeCompression)
1812
+ }
1813
+ if invalid != nil {
1814
+ fr.errDetail = invalid
1815
+ if VerboseLogs {
1816
+ log.Printf("http2: invalid header: %v", invalid)
1817
+ }
1818
+ return nil, StreamError{mh.StreamID, ErrCodeProtocol, invalid}
1819
+ }
1820
+ if err := mh.checkPseudos(); err != nil {
1821
+ fr.errDetail = err
1822
+ if VerboseLogs {
1823
+ log.Printf("http2: invalid pseudo headers: %v", err)
1824
+ }
1825
+ return nil, StreamError{mh.StreamID, ErrCodeProtocol, err}
1826
+ }
1827
+ return mh, nil
1828
+ }
1829
+
1830
+ func summarizeFrame(f Frame) string {
1831
+ var buf bytes.Buffer
1832
+ f.Header().writeDebug(&buf)
1833
+ switch f := f.(type) {
1834
+ case *SettingsFrame:
1835
+ n := 0
1836
+ f.ForeachSetting(func(s Setting) error {
1837
+ n++
1838
+ if n == 1 {
1839
+ buf.WriteString(", settings:")
1840
+ }
1841
+ fmt.Fprintf(&buf, " %v=%v,", s.ID, s.Val)
1842
+ return nil
1843
+ })
1844
+ if n > 0 {
1845
+ buf.Truncate(buf.Len() - 1) // remove trailing comma
1846
+ }
1847
+ case *DataFrame:
1848
+ data := f.Data()
1849
+ const max = 256
1850
+ if len(data) > max {
1851
+ data = data[:max]
1852
+ }
1853
+ fmt.Fprintf(&buf, " data=%q", data)
1854
+ if len(f.Data()) > max {
1855
+ fmt.Fprintf(&buf, " (%d bytes omitted)", len(f.Data())-max)
1856
+ }
1857
+ case *WindowUpdateFrame:
1858
+ if f.StreamID == 0 {
1859
+ buf.WriteString(" (conn)")
1860
+ }
1861
+ fmt.Fprintf(&buf, " incr=%v", f.Increment)
1862
+ case *PingFrame:
1863
+ fmt.Fprintf(&buf, " ping=%q", f.Data[:])
1864
+ case *GoAwayFrame:
1865
+ fmt.Fprintf(&buf, " LastStreamID=%v ErrCode=%v Debug=%q",
1866
+ f.LastStreamID, f.ErrCode, f.debugData)
1867
+ case *RSTStreamFrame:
1868
+ fmt.Fprintf(&buf, " ErrCode=%v", f.ErrCode)
1869
+ }
1870
+ return buf.String()
1871
+ }