grpc 1.15.0 → 1.30.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of grpc might be problematic. Click here for more details.

Files changed (1780) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +8591 -13387
  3. data/etc/roots.pem +455 -130
  4. data/include/grpc/grpc.h +39 -9
  5. data/include/grpc/grpc_posix.h +0 -8
  6. data/include/grpc/grpc_security.h +409 -14
  7. data/include/grpc/grpc_security_constants.h +55 -22
  8. data/include/grpc/impl/codegen/atm_gcc_sync.h +2 -0
  9. data/include/grpc/impl/codegen/atm_windows.h +2 -0
  10. data/include/grpc/impl/codegen/byte_buffer.h +13 -0
  11. data/include/grpc/impl/codegen/compression_types.h +2 -1
  12. data/include/grpc/impl/codegen/gpr_types.h +1 -1
  13. data/include/grpc/impl/codegen/grpc_types.h +111 -16
  14. data/include/grpc/impl/codegen/port_platform.h +171 -9
  15. data/include/grpc/impl/codegen/slice.h +2 -22
  16. data/include/grpc/impl/codegen/status.h +2 -1
  17. data/include/grpc/impl/codegen/sync.h +5 -3
  18. data/include/grpc/impl/codegen/sync_abseil.h +36 -0
  19. data/include/grpc/impl/codegen/sync_generic.h +1 -1
  20. data/include/grpc/impl/codegen/sync_posix.h +18 -0
  21. data/include/grpc/module.modulemap +25 -37
  22. data/include/grpc/slice.h +3 -3
  23. data/include/grpc/support/alloc.h +0 -16
  24. data/include/grpc/support/sync_abseil.h +26 -0
  25. data/src/core/ext/filters/client_channel/backend_metric.cc +81 -0
  26. data/src/core/ext/filters/client_channel/backend_metric.h +36 -0
  27. data/src/core/ext/filters/client_channel/backup_poller.cc +26 -19
  28. data/src/core/ext/filters/client_channel/backup_poller.h +8 -2
  29. data/src/core/ext/filters/client_channel/channel_connectivity.cc +21 -5
  30. data/src/core/ext/filters/client_channel/client_channel.cc +2888 -2206
  31. data/src/core/ext/filters/client_channel/client_channel.h +26 -6
  32. data/src/core/ext/filters/client_channel/client_channel_channelz.cc +54 -72
  33. data/src/core/ext/filters/client_channel/client_channel_channelz.h +33 -26
  34. data/src/core/ext/filters/client_channel/client_channel_factory.cc +22 -34
  35. data/src/core/ext/filters/client_channel/client_channel_factory.h +12 -39
  36. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +13 -14
  37. data/src/core/ext/filters/client_channel/connector.h +43 -37
  38. data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +179 -0
  39. data/src/core/ext/filters/client_channel/global_subchannel_pool.h +68 -0
  40. data/src/core/ext/filters/client_channel/health/health_check_client.cc +606 -0
  41. data/src/core/ext/filters/client_channel/health/health_check_client.h +175 -0
  42. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +177 -158
  43. data/src/core/ext/filters/client_channel/http_connect_handshaker.h +1 -1
  44. data/src/core/ext/filters/client_channel/http_proxy.cc +125 -121
  45. data/src/core/ext/filters/client_channel/http_proxy.h +5 -1
  46. data/src/core/ext/filters/client_channel/lb_policy.cc +105 -26
  47. data/src/core/ext/filters/client_channel/lb_policy.h +352 -152
  48. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +83 -0
  49. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +99 -0
  50. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +297 -0
  51. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +83 -0
  52. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +64 -47
  53. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +1010 -1155
  54. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +7 -0
  55. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +89 -0
  56. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +40 -0
  57. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h +12 -3
  58. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +53 -40
  59. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +10 -5
  60. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +19 -16
  61. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +157 -271
  62. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +43 -59
  63. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +235 -384
  64. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +871 -0
  65. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +174 -409
  66. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +157 -285
  67. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +734 -0
  68. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +417 -0
  69. data/src/core/ext/filters/client_channel/lb_policy/xds/eds.cc +938 -0
  70. data/src/core/ext/filters/client_channel/lb_policy/xds/lrs.cc +528 -0
  71. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +32 -0
  72. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_routing.cc +834 -0
  73. data/src/core/ext/filters/client_channel/lb_policy_factory.h +7 -91
  74. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +93 -8
  75. data/src/core/ext/filters/client_channel/lb_policy_registry.h +13 -2
  76. data/src/core/ext/filters/client_channel/local_subchannel_pool.cc +96 -0
  77. data/src/core/ext/filters/client_channel/local_subchannel_pool.h +57 -0
  78. data/src/core/ext/filters/client_channel/parse_address.cc +76 -30
  79. data/src/core/ext/filters/client_channel/parse_address.h +4 -1
  80. data/src/core/ext/filters/client_channel/proxy_mapper.h +14 -34
  81. data/src/core/ext/filters/client_channel/proxy_mapper_registry.cc +46 -79
  82. data/src/core/ext/filters/client_channel/proxy_mapper_registry.h +23 -17
  83. data/src/core/ext/filters/client_channel/resolver.cc +55 -5
  84. data/src/core/ext/filters/client_channel/resolver.h +61 -61
  85. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +251 -226
  86. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc +200 -36
  87. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +18 -20
  88. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +177 -0
  89. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +8 -7
  90. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +491 -131
  91. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +434 -233
  92. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +20 -12
  93. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc +15 -7
  94. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_libuv.cc +38 -0
  95. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +7 -2
  96. data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.cc +28 -0
  97. data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.h +29 -0
  98. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +92 -131
  99. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +220 -134
  100. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +27 -17
  101. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +73 -99
  102. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +184 -0
  103. data/src/core/ext/filters/client_channel/resolver_factory.h +13 -11
  104. data/src/core/ext/filters/client_channel/resolver_registry.cc +33 -14
  105. data/src/core/ext/filters/client_channel/resolver_registry.h +19 -13
  106. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +443 -0
  107. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +127 -0
  108. data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +348 -0
  109. data/src/core/ext/filters/client_channel/resolving_lb_policy.h +123 -0
  110. data/src/core/ext/filters/client_channel/retry_throttle.cc +5 -5
  111. data/src/core/ext/filters/client_channel/retry_throttle.h +2 -6
  112. data/src/core/ext/filters/client_channel/server_address.cc +48 -0
  113. data/src/core/ext/filters/client_channel/server_address.h +90 -0
  114. data/src/core/ext/filters/client_channel/service_config.cc +221 -0
  115. data/src/core/ext/filters/client_channel/service_config.h +123 -0
  116. data/src/core/ext/filters/client_channel/service_config_call_data.h +68 -0
  117. data/src/core/ext/filters/client_channel/service_config_parser.cc +87 -0
  118. data/src/core/ext/filters/client_channel/service_config_parser.h +89 -0
  119. data/src/core/ext/filters/client_channel/subchannel.cc +903 -634
  120. data/src/core/ext/filters/client_channel/subchannel.h +364 -131
  121. data/src/core/ext/filters/client_channel/subchannel_interface.h +94 -0
  122. data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +97 -0
  123. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +91 -0
  124. data/src/core/ext/filters/client_channel/xds/xds_api.cc +1906 -0
  125. data/src/core/ext/filters/client_channel/xds/xds_api.h +280 -0
  126. data/src/core/ext/filters/client_channel/xds/xds_bootstrap.cc +342 -0
  127. data/src/core/ext/filters/client_channel/xds/xds_bootstrap.h +88 -0
  128. data/src/core/ext/filters/client_channel/xds/xds_channel.h +46 -0
  129. data/src/core/ext/filters/client_channel/xds/xds_channel_args.h +26 -0
  130. data/src/core/ext/filters/client_channel/xds/xds_channel_secure.cc +106 -0
  131. data/src/core/ext/filters/client_channel/xds/xds_client.cc +2367 -0
  132. data/src/core/ext/filters/client_channel/xds/xds_client.h +309 -0
  133. data/src/core/ext/filters/client_channel/xds/xds_client_stats.cc +115 -0
  134. data/src/core/ext/filters/client_channel/xds/xds_client_stats.h +211 -0
  135. data/src/core/ext/filters/client_idle/client_idle_filter.cc +440 -0
  136. data/src/core/ext/filters/deadline/deadline_filter.cc +49 -52
  137. data/src/core/ext/filters/deadline/deadline_filter.h +11 -14
  138. data/src/core/ext/filters/http/client/http_client_filter.cc +122 -85
  139. data/src/core/ext/filters/http/client/http_client_filter.h +1 -1
  140. data/src/core/ext/filters/http/client_authority_filter.cc +26 -24
  141. data/src/core/ext/filters/http/http_filters_plugin.cc +27 -12
  142. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +342 -295
  143. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +358 -0
  144. data/src/core/ext/filters/http/message_compress/message_decompress_filter.h +29 -0
  145. data/src/core/ext/filters/http/server/http_server_filter.cc +156 -54
  146. data/src/core/ext/filters/max_age/max_age_filter.cc +76 -63
  147. data/src/core/ext/filters/message_size/message_size_filter.cc +218 -119
  148. data/src/core/ext/filters/message_size/message_size_filter.h +33 -0
  149. data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +19 -17
  150. data/src/core/ext/transport/chttp2/alpn/alpn.h +1 -1
  151. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +141 -164
  152. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +31 -1
  153. data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +36 -34
  154. data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc +1 -1
  155. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +133 -138
  156. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +128 -30
  157. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +2 -2
  158. data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +8 -11
  159. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +4 -4
  160. data/src/core/ext/transport/chttp2/transport/bin_decoder.h +4 -4
  161. data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +11 -12
  162. data/src/core/ext/transport/chttp2/transport/bin_encoder.h +4 -3
  163. data/src/core/ext/transport/chttp2/transport/chttp2_plugin.cc +9 -7
  164. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +911 -716
  165. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +8 -1
  166. data/src/core/ext/transport/chttp2/transport/context_list.cc +69 -0
  167. data/src/core/ext/transport/chttp2/transport/context_list.h +53 -0
  168. data/src/core/ext/transport/chttp2/transport/flow_control.cc +5 -5
  169. data/src/core/ext/transport/chttp2/transport/flow_control.h +22 -30
  170. data/src/core/ext/transport/chttp2/transport/frame_data.cc +47 -54
  171. data/src/core/ext/transport/chttp2/transport/frame_data.h +11 -13
  172. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +9 -8
  173. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +5 -5
  174. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +7 -5
  175. data/src/core/ext/transport/chttp2/transport/frame_ping.h +3 -4
  176. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +17 -7
  177. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +11 -4
  178. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +11 -7
  179. data/src/core/ext/transport/chttp2/transport/frame_settings.h +4 -4
  180. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +7 -6
  181. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +3 -4
  182. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +548 -351
  183. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +26 -15
  184. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +201 -120
  185. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +14 -6
  186. data/src/core/ext/transport/chttp2/transport/hpack_table.cc +47 -169
  187. data/src/core/ext/transport/chttp2/transport/hpack_table.h +70 -17
  188. data/src/core/ext/transport/chttp2/transport/http2_settings.h +4 -5
  189. data/src/core/ext/transport/chttp2/transport/huffsyms.h +2 -3
  190. data/src/core/ext/transport/chttp2/transport/incoming_metadata.cc +10 -17
  191. data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +19 -10
  192. data/src/core/ext/transport/chttp2/transport/internal.h +226 -161
  193. data/src/core/ext/transport/chttp2/transport/parsing.cc +166 -110
  194. data/src/core/ext/transport/chttp2/transport/stream_lists.cc +3 -3
  195. data/src/core/ext/transport/chttp2/transport/stream_map.cc +28 -18
  196. data/src/core/ext/transport/chttp2/transport/stream_map.h +2 -3
  197. data/src/core/ext/transport/chttp2/transport/writing.cc +95 -35
  198. data/src/core/ext/transport/inproc/inproc_transport.cc +406 -388
  199. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.c +17 -0
  200. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h +30 -0
  201. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.c +27 -0
  202. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +54 -0
  203. data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.c +21 -0
  204. data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.h +35 -0
  205. data/src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.c +114 -0
  206. data/src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.h +418 -0
  207. data/src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.c +72 -0
  208. data/src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.h +197 -0
  209. data/src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.c +105 -0
  210. data/src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.h +378 -0
  211. data/src/core/ext/upb-generated/envoy/api/v2/cds.upb.c +28 -0
  212. data/src/core/ext/upb-generated/envoy/api/v2/cds.upb.h +53 -0
  213. data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.c +403 -0
  214. data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.h +1447 -0
  215. data/src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.c +74 -0
  216. data/src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.h +218 -0
  217. data/src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.c +35 -0
  218. data/src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.h +69 -0
  219. data/src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.c +55 -0
  220. data/src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.h +305 -0
  221. data/src/core/ext/upb-generated/envoy/api/v2/core/address.upb.c +112 -0
  222. data/src/core/ext/upb-generated/envoy/api/v2/core/address.upb.h +328 -0
  223. data/src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.c +35 -0
  224. data/src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.h +78 -0
  225. data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.c +313 -0
  226. data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.h +897 -0
  227. data/src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.c +96 -0
  228. data/src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.h +322 -0
  229. data/src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.c +34 -0
  230. data/src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.h +72 -0
  231. data/src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.c +197 -0
  232. data/src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.h +642 -0
  233. data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.c +172 -0
  234. data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.h +673 -0
  235. data/src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.c +36 -0
  236. data/src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.h +80 -0
  237. data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.c +152 -0
  238. data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.h +518 -0
  239. data/src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.c +34 -0
  240. data/src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.h +89 -0
  241. data/src/core/ext/upb-generated/envoy/api/v2/discovery.upb.c +129 -0
  242. data/src/core/ext/upb-generated/envoy/api/v2/discovery.upb.h +392 -0
  243. data/src/core/ext/upb-generated/envoy/api/v2/eds.upb.c +31 -0
  244. data/src/core/ext/upb-generated/envoy/api/v2/eds.upb.h +53 -0
  245. data/src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.c +92 -0
  246. data/src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.h +240 -0
  247. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.c +18 -0
  248. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.h +33 -0
  249. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.c +91 -0
  250. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.h +266 -0
  251. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.c +112 -0
  252. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.h +324 -0
  253. data/src/core/ext/upb-generated/envoy/api/v2/lds.upb.c +31 -0
  254. data/src/core/ext/upb-generated/envoy/api/v2/lds.upb.h +53 -0
  255. data/src/core/ext/upb-generated/envoy/api/v2/listener.upb.c +109 -0
  256. data/src/core/ext/upb-generated/envoy/api/v2/listener.upb.h +399 -0
  257. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.c +18 -0
  258. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.h +33 -0
  259. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.c +145 -0
  260. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.h +527 -0
  261. data/src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.c +43 -0
  262. data/src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.h +112 -0
  263. data/src/core/ext/upb-generated/envoy/api/v2/rds.upb.c +30 -0
  264. data/src/core/ext/upb-generated/envoy/api/v2/rds.upb.h +53 -0
  265. data/src/core/ext/upb-generated/envoy/api/v2/route.upb.c +63 -0
  266. data/src/core/ext/upb-generated/envoy/api/v2/route.upb.h +199 -0
  267. data/src/core/ext/upb-generated/envoy/api/v2/route/route.upb.c +18 -0
  268. data/src/core/ext/upb-generated/envoy/api/v2/route/route.upb.h +33 -0
  269. data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.c +815 -0
  270. data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.h +3032 -0
  271. data/src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.c +59 -0
  272. data/src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.h +134 -0
  273. data/src/core/ext/upb-generated/envoy/api/v2/srds.upb.c +28 -0
  274. data/src/core/ext/upb-generated/envoy/api/v2/srds.upb.h +53 -0
  275. data/src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.c +228 -0
  276. data/src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.h +725 -0
  277. data/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.c +316 -0
  278. data/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.h +1132 -0
  279. data/src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.c +33 -0
  280. data/src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.h +65 -0
  281. data/src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.c +51 -0
  282. data/src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.h +125 -0
  283. data/src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.c +24 -0
  284. data/src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.h +50 -0
  285. data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.c +54 -0
  286. data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.h +134 -0
  287. data/src/core/ext/upb-generated/envoy/type/http.upb.c +17 -0
  288. data/src/core/ext/upb-generated/envoy/type/http.upb.h +36 -0
  289. data/src/core/ext/upb-generated/envoy/type/matcher/regex.upb.c +63 -0
  290. data/src/core/ext/upb-generated/envoy/type/matcher/regex.upb.h +144 -0
  291. data/src/core/ext/upb-generated/envoy/type/matcher/string.upb.c +53 -0
  292. data/src/core/ext/upb-generated/envoy/type/matcher/string.upb.h +133 -0
  293. data/src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.c +88 -0
  294. data/src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.h +258 -0
  295. data/src/core/ext/upb-generated/envoy/type/percent.upb.c +39 -0
  296. data/src/core/ext/upb-generated/envoy/type/percent.upb.h +87 -0
  297. data/src/core/ext/upb-generated/envoy/type/range.upb.c +50 -0
  298. data/src/core/ext/upb-generated/envoy/type/range.upb.h +112 -0
  299. data/src/core/ext/upb-generated/envoy/type/semantic_version.upb.c +29 -0
  300. data/src/core/ext/upb-generated/envoy/type/semantic_version.upb.h +62 -0
  301. data/src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.c +89 -0
  302. data/src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.h +249 -0
  303. data/src/core/ext/upb-generated/gogoproto/gogo.upb.c +17 -0
  304. data/src/core/ext/upb-generated/gogoproto/gogo.upb.h +30 -0
  305. data/src/core/ext/upb-generated/google/api/annotations.upb.c +18 -0
  306. data/src/core/ext/upb-generated/google/api/annotations.upb.h +30 -0
  307. data/src/core/ext/upb-generated/google/api/http.upb.c +66 -0
  308. data/src/core/ext/upb-generated/google/api/http.upb.h +190 -0
  309. data/src/core/ext/upb-generated/google/protobuf/any.upb.c +27 -0
  310. data/src/core/ext/upb-generated/google/protobuf/any.upb.h +58 -0
  311. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +486 -0
  312. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +1696 -0
  313. data/src/core/ext/upb-generated/google/protobuf/duration.upb.c +27 -0
  314. data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +58 -0
  315. data/src/core/ext/upb-generated/google/protobuf/empty.upb.c +22 -0
  316. data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +50 -0
  317. data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +79 -0
  318. data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +215 -0
  319. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.c +27 -0
  320. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +58 -0
  321. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.c +106 -0
  322. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +238 -0
  323. data/src/core/ext/upb-generated/google/rpc/status.upb.c +33 -0
  324. data/src/core/ext/upb-generated/google/rpc/status.upb.h +74 -0
  325. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c +49 -0
  326. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +126 -0
  327. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +212 -0
  328. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +693 -0
  329. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c +42 -0
  330. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +109 -0
  331. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c +36 -0
  332. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +84 -0
  333. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c +141 -0
  334. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +393 -0
  335. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.c +48 -0
  336. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +104 -0
  337. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.c +17 -0
  338. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h +30 -0
  339. data/src/core/ext/upb-generated/udpa/annotations/status.upb.c +28 -0
  340. data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +65 -0
  341. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.c +58 -0
  342. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.h +144 -0
  343. data/src/core/ext/upb-generated/validate/validate.upb.c +448 -0
  344. data/src/core/ext/upb-generated/validate/validate.upb.h +2073 -0
  345. data/src/core/lib/avl/avl.cc +1 -1
  346. data/src/core/lib/channel/channel_args.cc +54 -115
  347. data/src/core/lib/channel/channel_args.h +44 -40
  348. data/src/core/lib/channel/channel_stack.cc +6 -5
  349. data/src/core/lib/channel/channel_stack.h +52 -28
  350. data/src/core/lib/channel/channel_stack_builder.cc +14 -2
  351. data/src/core/lib/channel/channel_stack_builder.h +8 -0
  352. data/src/core/lib/channel/channel_trace.cc +75 -85
  353. data/src/core/lib/channel/channel_trace.h +37 -32
  354. data/src/core/lib/channel/channelz.cc +496 -106
  355. data/src/core/lib/channel/channelz.h +262 -61
  356. data/src/core/lib/channel/channelz_registry.cc +191 -69
  357. data/src/core/lib/channel/channelz_registry.h +30 -53
  358. data/src/core/lib/channel/connected_channel.cc +30 -27
  359. data/src/core/lib/channel/context.h +6 -6
  360. data/src/core/lib/channel/handshaker.cc +150 -218
  361. data/src/core/lib/channel/handshaker.h +111 -102
  362. data/src/core/lib/channel/handshaker_factory.h +9 -17
  363. data/src/core/lib/channel/handshaker_registry.cc +57 -49
  364. data/src/core/lib/channel/handshaker_registry.h +21 -15
  365. data/src/core/lib/channel/status_util.cc +2 -3
  366. data/src/core/lib/compression/algorithm_metadata.h +3 -3
  367. data/src/core/lib/compression/compression.cc +17 -12
  368. data/src/core/lib/compression/compression_args.cc +134 -0
  369. data/src/core/lib/compression/compression_args.h +56 -0
  370. data/src/core/lib/compression/compression_internal.cc +17 -13
  371. data/src/core/lib/compression/compression_internal.h +9 -1
  372. data/src/core/lib/compression/message_compress.cc +8 -3
  373. data/src/core/lib/compression/stream_compression.cc +3 -2
  374. data/src/core/lib/compression/stream_compression.h +2 -2
  375. data/src/core/lib/compression/stream_compression_gzip.cc +9 -9
  376. data/src/core/lib/compression/stream_compression_identity.cc +5 -7
  377. data/src/core/lib/debug/stats.cc +21 -27
  378. data/src/core/lib/debug/stats.h +3 -1
  379. data/src/core/lib/debug/trace.cc +16 -7
  380. data/src/core/lib/debug/trace.h +20 -4
  381. data/src/core/lib/gpr/alloc.cc +4 -29
  382. data/src/core/lib/gpr/arena.h +13 -7
  383. data/src/core/lib/gpr/cpu_linux.cc +1 -1
  384. data/src/core/lib/gpr/cpu_posix.cc +5 -3
  385. data/src/core/lib/gpr/env.h +3 -6
  386. data/src/core/lib/gpr/env_linux.cc +15 -21
  387. data/src/core/lib/gpr/env_posix.cc +5 -5
  388. data/src/core/lib/gpr/env_windows.cc +7 -5
  389. data/src/core/lib/gpr/log.cc +9 -13
  390. data/src/core/lib/gpr/log_linux.cc +2 -2
  391. data/src/core/lib/gpr/log_posix.cc +4 -3
  392. data/src/core/lib/gpr/spinlock.h +2 -3
  393. data/src/core/lib/gpr/string.cc +29 -35
  394. data/src/core/lib/gpr/string.h +11 -19
  395. data/src/core/lib/gpr/sync_abseil.cc +116 -0
  396. data/src/core/lib/gpr/sync_posix.cc +78 -9
  397. data/src/core/lib/gpr/sync_windows.cc +4 -2
  398. data/src/core/lib/gpr/time.cc +12 -0
  399. data/src/core/lib/gpr/time_posix.cc +22 -3
  400. data/src/core/lib/gpr/time_precise.cc +123 -36
  401. data/src/core/lib/gpr/time_precise.h +37 -0
  402. data/src/core/lib/gprpp/arena.cc +103 -0
  403. data/src/core/lib/gprpp/arena.h +120 -0
  404. data/src/core/lib/gprpp/atomic.h +79 -5
  405. data/src/core/lib/gprpp/debug_location.h +3 -2
  406. data/src/core/lib/gprpp/fork.cc +30 -56
  407. data/src/core/lib/gprpp/fork.h +18 -3
  408. data/src/core/lib/gprpp/global_config.h +96 -0
  409. data/src/core/lib/gprpp/global_config_custom.h +29 -0
  410. data/src/core/lib/gprpp/global_config_env.cc +135 -0
  411. data/src/core/lib/gprpp/global_config_env.h +131 -0
  412. data/src/core/lib/gprpp/global_config_generic.h +44 -0
  413. data/src/core/lib/gprpp/host_port.cc +112 -0
  414. data/src/core/lib/gprpp/host_port.h +56 -0
  415. data/src/core/lib/gprpp/map.h +53 -0
  416. data/src/core/lib/gprpp/memory.h +11 -83
  417. data/src/core/lib/gprpp/mpscq.cc +108 -0
  418. data/src/core/lib/gprpp/mpscq.h +98 -0
  419. data/src/core/lib/gprpp/orphanable.h +27 -95
  420. data/src/core/lib/gprpp/ref_counted.h +228 -83
  421. data/src/core/lib/gprpp/ref_counted_ptr.h +39 -16
  422. data/src/core/lib/gprpp/sync.h +135 -0
  423. data/src/core/lib/gprpp/thd.h +54 -12
  424. data/src/core/lib/gprpp/thd_posix.cc +57 -13
  425. data/src/core/lib/gprpp/thd_windows.cc +54 -33
  426. data/src/core/lib/http/format_request.cc +46 -65
  427. data/src/core/lib/http/httpcli.cc +11 -11
  428. data/src/core/lib/http/httpcli.h +2 -3
  429. data/src/core/lib/http/httpcli_security_connector.cc +121 -107
  430. data/src/core/lib/http/parser.cc +4 -3
  431. data/src/core/lib/http/parser.h +9 -9
  432. data/src/core/lib/iomgr/buffer_list.cc +308 -0
  433. data/src/core/lib/iomgr/buffer_list.h +165 -0
  434. data/src/core/lib/iomgr/call_combiner.cc +113 -69
  435. data/src/core/lib/iomgr/call_combiner.h +96 -74
  436. data/src/core/lib/iomgr/cfstream_handle.cc +209 -0
  437. data/src/core/lib/iomgr/cfstream_handle.h +90 -0
  438. data/src/core/lib/iomgr/closure.h +44 -141
  439. data/src/core/lib/iomgr/combiner.cc +50 -86
  440. data/src/core/lib/iomgr/combiner.h +31 -9
  441. data/src/core/lib/iomgr/dualstack_socket_posix.cc +47 -0
  442. data/src/core/lib/iomgr/dynamic_annotations.h +67 -0
  443. data/src/core/lib/iomgr/endpoint.cc +8 -4
  444. data/src/core/lib/iomgr/endpoint.h +12 -4
  445. data/src/core/lib/iomgr/endpoint_cfstream.cc +376 -0
  446. data/src/core/lib/iomgr/endpoint_cfstream.h +49 -0
  447. data/src/core/lib/iomgr/endpoint_pair.h +2 -3
  448. data/src/core/lib/iomgr/endpoint_pair_posix.cc +1 -1
  449. data/src/core/lib/iomgr/endpoint_pair_windows.cc +2 -2
  450. data/src/core/lib/iomgr/error.cc +71 -64
  451. data/src/core/lib/iomgr/error.h +74 -10
  452. data/src/core/lib/iomgr/error_cfstream.cc +52 -0
  453. data/src/core/lib/iomgr/error_cfstream.h +31 -0
  454. data/src/core/lib/iomgr/error_internal.h +1 -3
  455. data/src/core/lib/iomgr/ev_apple.cc +356 -0
  456. data/src/core/lib/iomgr/ev_apple.h +43 -0
  457. data/src/core/lib/iomgr/ev_epoll1_linux.cc +99 -69
  458. data/src/core/lib/iomgr/ev_epollex_linux.cc +238 -259
  459. data/src/core/lib/iomgr/ev_poll_posix.cc +52 -504
  460. data/src/core/lib/iomgr/ev_posix.cc +54 -31
  461. data/src/core/lib/iomgr/ev_posix.h +29 -3
  462. data/src/core/lib/iomgr/ev_windows.cc +2 -2
  463. data/src/core/lib/iomgr/exec_ctx.cc +79 -8
  464. data/src/core/lib/iomgr/exec_ctx.h +163 -21
  465. data/src/core/lib/iomgr/executor.cc +137 -101
  466. data/src/core/lib/iomgr/executor.h +54 -48
  467. data/src/core/lib/iomgr/executor/mpmcqueue.cc +183 -0
  468. data/src/core/lib/iomgr/executor/mpmcqueue.h +175 -0
  469. data/src/core/lib/iomgr/executor/threadpool.cc +137 -0
  470. data/src/core/lib/iomgr/executor/threadpool.h +149 -0
  471. data/src/core/lib/iomgr/fork_posix.cc +15 -8
  472. data/src/core/lib/iomgr/grpc_if_nametoindex.h +30 -0
  473. data/src/core/lib/iomgr/grpc_if_nametoindex_posix.cc +42 -0
  474. data/src/core/lib/iomgr/grpc_if_nametoindex_unsupported.cc +38 -0
  475. data/src/core/lib/iomgr/internal_errqueue.cc +67 -0
  476. data/src/core/lib/iomgr/internal_errqueue.h +191 -0
  477. data/src/core/lib/iomgr/iocp_windows.cc +2 -2
  478. data/src/core/lib/iomgr/iomgr.cc +27 -13
  479. data/src/core/lib/iomgr/iomgr.h +19 -0
  480. data/src/core/lib/iomgr/iomgr_custom.cc +18 -2
  481. data/src/core/lib/iomgr/iomgr_custom.h +2 -0
  482. data/src/core/lib/iomgr/iomgr_internal.cc +14 -0
  483. data/src/core/lib/iomgr/iomgr_internal.h +16 -0
  484. data/src/core/lib/iomgr/iomgr_posix.cc +23 -1
  485. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +171 -0
  486. data/src/core/lib/iomgr/iomgr_uv.cc +3 -0
  487. data/src/core/lib/iomgr/iomgr_windows.cc +20 -1
  488. data/src/core/lib/iomgr/load_file.cc +1 -0
  489. data/src/core/lib/iomgr/lockfree_event.cc +16 -15
  490. data/src/core/lib/iomgr/poller/eventmanager_libuv.cc +87 -0
  491. data/src/core/lib/iomgr/poller/eventmanager_libuv.h +88 -0
  492. data/src/core/lib/iomgr/polling_entity.h +4 -4
  493. data/src/core/lib/iomgr/pollset_custom.cc +5 -5
  494. data/src/core/lib/iomgr/pollset_set_custom.cc +10 -10
  495. data/src/core/lib/iomgr/pollset_uv.h +32 -0
  496. data/src/core/lib/iomgr/pollset_windows.cc +16 -2
  497. data/src/core/lib/iomgr/port.h +49 -2
  498. data/src/core/lib/iomgr/python_util.h +46 -0
  499. data/src/core/lib/iomgr/resolve_address.h +5 -7
  500. data/src/core/lib/iomgr/resolve_address_custom.cc +36 -50
  501. data/src/core/lib/iomgr/resolve_address_custom.h +4 -2
  502. data/src/core/lib/iomgr/resolve_address_posix.cc +22 -25
  503. data/src/core/lib/iomgr/resolve_address_windows.cc +14 -26
  504. data/src/core/lib/iomgr/resource_quota.cc +175 -110
  505. data/src/core/lib/iomgr/resource_quota.h +30 -11
  506. data/src/core/lib/iomgr/sockaddr_utils.cc +26 -31
  507. data/src/core/lib/iomgr/sockaddr_utils.h +9 -14
  508. data/src/core/lib/iomgr/socket_factory_posix.h +2 -3
  509. data/src/core/lib/iomgr/socket_mutator.h +2 -3
  510. data/src/core/lib/iomgr/socket_utils_common_posix.cc +145 -27
  511. data/src/core/lib/iomgr/socket_utils_posix.h +26 -0
  512. data/src/core/lib/iomgr/socket_windows.cc +21 -2
  513. data/src/core/lib/iomgr/socket_windows.h +9 -1
  514. data/src/core/lib/iomgr/tcp_client_cfstream.cc +215 -0
  515. data/src/core/lib/iomgr/tcp_client_custom.cc +19 -7
  516. data/src/core/lib/iomgr/tcp_client_posix.cc +40 -38
  517. data/src/core/lib/iomgr/tcp_client_posix.h +6 -6
  518. data/src/core/lib/iomgr/tcp_client_windows.cc +11 -10
  519. data/src/core/lib/iomgr/tcp_custom.cc +37 -32
  520. data/src/core/lib/iomgr/tcp_custom.h +3 -0
  521. data/src/core/lib/iomgr/tcp_posix.cc +1196 -168
  522. data/src/core/lib/iomgr/tcp_posix.h +3 -0
  523. data/src/core/lib/iomgr/tcp_server.cc +5 -0
  524. data/src/core/lib/iomgr/tcp_server.h +21 -0
  525. data/src/core/lib/iomgr/tcp_server_custom.cc +43 -30
  526. data/src/core/lib/iomgr/tcp_server_posix.cc +97 -21
  527. data/src/core/lib/iomgr/tcp_server_utils_posix.h +3 -0
  528. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +19 -16
  529. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +8 -11
  530. data/src/core/lib/iomgr/tcp_server_windows.cc +19 -15
  531. data/src/core/lib/iomgr/tcp_uv.cc +8 -9
  532. data/src/core/lib/iomgr/tcp_windows.cc +110 -48
  533. data/src/core/lib/iomgr/time_averaged_stats.h +2 -3
  534. data/src/core/lib/iomgr/timer.h +2 -1
  535. data/src/core/lib/iomgr/timer_custom.cc +7 -5
  536. data/src/core/lib/iomgr/timer_generic.cc +42 -40
  537. data/src/core/lib/iomgr/timer_generic.h +39 -0
  538. data/src/core/lib/iomgr/timer_heap.cc +2 -2
  539. data/src/core/lib/iomgr/timer_heap.h +5 -6
  540. data/src/core/lib/iomgr/timer_manager.cc +34 -16
  541. data/src/core/lib/iomgr/timer_manager.h +4 -2
  542. data/src/core/lib/iomgr/udp_server.cc +31 -30
  543. data/src/core/lib/iomgr/udp_server.h +6 -12
  544. data/src/core/lib/iomgr/wakeup_fd_eventfd.cc +3 -4
  545. data/src/core/lib/iomgr/wakeup_fd_posix.cc +1 -19
  546. data/src/core/lib/iomgr/work_serializer.cc +155 -0
  547. data/src/core/lib/iomgr/work_serializer.h +65 -0
  548. data/src/core/lib/json/json.h +209 -68
  549. data/src/core/lib/json/json_reader.cc +511 -319
  550. data/src/core/lib/json/json_writer.cc +202 -110
  551. data/src/core/lib/profiling/basic_timers.cc +12 -6
  552. data/src/core/lib/security/context/security_context.cc +92 -119
  553. data/src/core/lib/security/context/security_context.h +79 -48
  554. data/src/core/lib/security/credentials/alts/alts_credentials.cc +39 -48
  555. data/src/core/lib/security/credentials/alts/alts_credentials.h +37 -10
  556. data/src/core/lib/security/credentials/alts/check_gcp_environment.cc +1 -1
  557. data/src/core/lib/security/credentials/alts/check_gcp_environment_no_op.cc +2 -2
  558. data/src/core/lib/security/credentials/alts/check_gcp_environment_windows.cc +45 -57
  559. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc +2 -1
  560. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc +3 -2
  561. data/src/core/lib/security/credentials/composite/composite_credentials.cc +119 -159
  562. data/src/core/lib/security/credentials/composite/composite_credentials.h +71 -24
  563. data/src/core/lib/security/credentials/credentials.cc +18 -142
  564. data/src/core/lib/security/credentials/credentials.h +141 -105
  565. data/src/core/lib/security/credentials/fake/fake_credentials.cc +48 -72
  566. data/src/core/lib/security/credentials/fake/fake_credentials.h +28 -5
  567. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +186 -99
  568. data/src/core/lib/security/credentials/google_default/google_default_credentials.h +32 -6
  569. data/src/core/lib/security/credentials/iam/iam_credentials.cc +33 -39
  570. data/src/core/lib/security/credentials/iam/iam_credentials.h +22 -4
  571. data/src/core/lib/security/credentials/jwt/json_token.cc +32 -58
  572. data/src/core/lib/security/credentials/jwt/json_token.h +5 -7
  573. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +70 -88
  574. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +41 -10
  575. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +159 -170
  576. data/src/core/lib/security/credentials/jwt/jwt_verifier.h +4 -5
  577. data/src/core/lib/security/credentials/local/local_credentials.cc +21 -34
  578. data/src/core/lib/security/credentials/local/local_credentials.h +32 -11
  579. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +438 -203
  580. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +98 -33
  581. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +89 -91
  582. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +43 -17
  583. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +84 -83
  584. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +60 -15
  585. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +245 -0
  586. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +313 -0
  587. data/src/core/lib/security/credentials/tls/tls_credentials.cc +128 -0
  588. data/src/core/lib/security/credentials/tls/tls_credentials.h +62 -0
  589. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +301 -0
  590. data/src/core/lib/security/security_connector/alts/alts_security_connector.h +76 -0
  591. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +324 -0
  592. data/src/core/lib/security/security_connector/fake/fake_security_connector.h +45 -0
  593. data/src/core/lib/security/security_connector/load_system_roots_fallback.cc +2 -2
  594. data/src/core/lib/security/security_connector/load_system_roots_linux.cc +15 -9
  595. data/src/core/lib/security/security_connector/local/local_security_connector.cc +281 -0
  596. data/src/core/lib/security/security_connector/local/local_security_connector.h +59 -0
  597. data/src/core/lib/security/security_connector/security_connector.cc +40 -1158
  598. data/src/core/lib/security/security_connector/security_connector.h +100 -209
  599. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +439 -0
  600. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +77 -0
  601. data/src/core/lib/security/security_connector/ssl_utils.cc +563 -0
  602. data/src/core/lib/security/security_connector/ssl_utils.h +184 -0
  603. data/src/core/lib/security/security_connector/ssl_utils_config.cc +32 -0
  604. data/src/core/lib/security/security_connector/ssl_utils_config.h +30 -0
  605. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +603 -0
  606. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +183 -0
  607. data/src/core/lib/security/transport/auth_filters.h +5 -2
  608. data/src/core/lib/security/transport/client_auth_filter.cc +164 -116
  609. data/src/core/lib/security/transport/secure_endpoint.cc +70 -53
  610. data/src/core/lib/security/transport/security_handshaker.cc +340 -297
  611. data/src/core/lib/security/transport/security_handshaker.h +14 -3
  612. data/src/core/lib/security/transport/server_auth_filter.cc +115 -55
  613. data/src/core/lib/security/transport/target_authority_table.h +1 -1
  614. data/src/core/lib/security/util/json_util.cc +34 -13
  615. data/src/core/lib/security/util/json_util.h +5 -3
  616. data/src/core/lib/slice/b64.cc +3 -4
  617. data/src/core/lib/slice/b64.h +3 -4
  618. data/src/core/lib/slice/percent_encoding.cc +3 -3
  619. data/src/core/lib/slice/percent_encoding.h +3 -3
  620. data/src/core/lib/slice/slice.cc +219 -153
  621. data/src/core/lib/slice/slice_buffer.cc +60 -26
  622. data/src/core/lib/slice/slice_hash_table.h +9 -15
  623. data/src/core/lib/slice/slice_intern.cc +186 -143
  624. data/src/core/lib/slice/slice_internal.h +318 -3
  625. data/src/core/lib/slice/slice_string_helpers.cc +10 -1
  626. data/src/core/lib/slice/slice_string_helpers.h +3 -1
  627. data/src/core/lib/slice/slice_utils.h +200 -0
  628. data/src/core/lib/slice/slice_weak_hash_table.h +10 -17
  629. data/src/core/lib/surface/api_trace.h +1 -1
  630. data/src/core/lib/surface/byte_buffer_reader.cc +15 -43
  631. data/src/core/lib/surface/call.cc +419 -438
  632. data/src/core/lib/surface/call.h +14 -5
  633. data/src/core/lib/surface/call_details.cc +0 -1
  634. data/src/core/lib/surface/call_log_batch.cc +51 -60
  635. data/src/core/lib/surface/channel.cc +205 -144
  636. data/src/core/lib/surface/channel.h +85 -14
  637. data/src/core/lib/surface/channel_init.h +5 -0
  638. data/src/core/lib/surface/channel_ping.cc +3 -4
  639. data/src/core/lib/surface/completion_queue.cc +322 -281
  640. data/src/core/lib/surface/completion_queue.h +7 -21
  641. data/src/core/lib/surface/completion_queue_factory.cc +4 -4
  642. data/src/core/lib/surface/event_string.cc +18 -25
  643. data/src/core/lib/surface/event_string.h +3 -1
  644. data/src/core/lib/surface/init.cc +86 -31
  645. data/src/core/lib/surface/init.h +1 -0
  646. data/src/core/lib/surface/init_secure.cc +4 -4
  647. data/src/core/lib/surface/lame_client.cc +46 -35
  648. data/src/core/lib/surface/server.cc +815 -476
  649. data/src/core/lib/surface/server.h +50 -9
  650. data/src/core/lib/surface/validate_metadata.cc +18 -8
  651. data/src/core/lib/surface/validate_metadata.h +13 -2
  652. data/src/core/lib/surface/version.cc +2 -2
  653. data/src/core/lib/transport/bdp_estimator.cc +3 -3
  654. data/src/core/lib/transport/bdp_estimator.h +2 -2
  655. data/src/core/lib/transport/byte_stream.cc +5 -7
  656. data/src/core/lib/transport/byte_stream.h +13 -12
  657. data/src/core/lib/transport/connectivity_state.cc +114 -129
  658. data/src/core/lib/transport/connectivity_state.h +102 -58
  659. data/src/core/lib/transport/error_utils.cc +25 -2
  660. data/src/core/lib/transport/metadata.cc +428 -288
  661. data/src/core/lib/transport/metadata.h +307 -26
  662. data/src/core/lib/transport/metadata_batch.cc +81 -18
  663. data/src/core/lib/transport/metadata_batch.h +47 -6
  664. data/src/core/lib/transport/static_metadata.cc +1150 -521
  665. data/src/core/lib/transport/static_metadata.h +311 -317
  666. data/src/core/lib/transport/status_conversion.cc +7 -15
  667. data/src/core/lib/transport/status_metadata.cc +11 -4
  668. data/src/core/lib/transport/status_metadata.h +18 -0
  669. data/src/core/lib/transport/timeout_encoding.cc +8 -1
  670. data/src/core/lib/transport/timeout_encoding.h +4 -3
  671. data/src/core/lib/transport/transport.cc +49 -80
  672. data/src/core/lib/transport/transport.h +132 -54
  673. data/src/core/lib/transport/transport_impl.h +1 -1
  674. data/src/core/lib/transport/transport_op_string.cc +67 -105
  675. data/src/core/lib/uri/uri_parser.cc +314 -0
  676. data/src/core/lib/uri/uri_parser.h +49 -0
  677. data/src/core/plugin_registry/grpc_plugin_registry.cc +32 -4
  678. data/src/core/tsi/alts/crypt/aes_gcm.cc +0 -2
  679. data/src/core/tsi/alts/frame_protector/alts_unseal_privacy_integrity_crypter.cc +1 -1
  680. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +715 -144
  681. data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +49 -35
  682. data/src/core/tsi/alts/handshaker/alts_shared_resource.cc +83 -0
  683. data/src/core/tsi/alts/handshaker/alts_shared_resource.h +73 -0
  684. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +373 -217
  685. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +45 -24
  686. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +43 -10
  687. data/src/core/tsi/alts/handshaker/alts_tsi_utils.cc +13 -7
  688. data/src/core/tsi/alts/handshaker/alts_tsi_utils.h +4 -3
  689. data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +75 -48
  690. data/src/core/tsi/alts/handshaker/transport_security_common_api.h +35 -27
  691. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.cc +2 -2
  692. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.h +2 -3
  693. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +13 -3
  694. data/src/core/tsi/fake_transport_security.cc +26 -25
  695. data/src/core/tsi/fake_transport_security.h +2 -0
  696. data/src/core/tsi/local_transport_security.cc +8 -6
  697. data/src/core/tsi/ssl/session_cache/ssl_session.h +2 -6
  698. data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +2 -3
  699. data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +14 -11
  700. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +4 -13
  701. data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +2 -3
  702. data/src/core/tsi/ssl_transport_security.cc +289 -125
  703. data/src/core/tsi/ssl_transport_security.h +52 -13
  704. data/src/core/tsi/ssl_types.h +0 -2
  705. data/src/core/tsi/transport_security.cc +31 -1
  706. data/src/core/tsi/transport_security.h +8 -10
  707. data/src/core/tsi/transport_security_grpc.cc +7 -0
  708. data/src/core/tsi/transport_security_grpc.h +8 -3
  709. data/src/core/tsi/transport_security_interface.h +15 -3
  710. data/src/ruby/bin/math_pb.rb +23 -21
  711. data/src/ruby/ext/grpc/ext-export.clang +1 -0
  712. data/src/ruby/ext/grpc/ext-export.gcc +6 -0
  713. data/src/ruby/ext/grpc/extconf.rb +18 -4
  714. data/src/ruby/ext/grpc/rb_call.c +11 -2
  715. data/src/ruby/ext/grpc/rb_call_credentials.c +12 -6
  716. data/src/ruby/ext/grpc/rb_channel.c +18 -11
  717. data/src/ruby/ext/grpc/rb_channel_credentials.c +8 -4
  718. data/src/ruby/ext/grpc/rb_compression_options.c +9 -7
  719. data/src/ruby/ext/grpc/rb_enable_cpp.cc +22 -0
  720. data/src/ruby/ext/grpc/rb_event_thread.c +2 -0
  721. data/src/ruby/ext/grpc/rb_grpc.c +48 -60
  722. data/src/ruby/ext/grpc/rb_grpc.h +5 -1
  723. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +42 -6
  724. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +67 -13
  725. data/src/ruby/ext/grpc/rb_server.c +10 -4
  726. data/src/ruby/lib/grpc.rb +2 -0
  727. data/src/ruby/lib/grpc/core/status_codes.rb +135 -0
  728. data/src/ruby/lib/grpc/errors.rb +122 -46
  729. data/src/ruby/lib/grpc/generic/active_call.rb +2 -3
  730. data/src/ruby/lib/grpc/generic/bidi_call.rb +2 -2
  731. data/src/ruby/lib/grpc/generic/interceptors.rb +4 -4
  732. data/src/ruby/lib/grpc/generic/rpc_desc.rb +3 -3
  733. data/src/ruby/lib/grpc/generic/rpc_server.rb +64 -4
  734. data/src/ruby/lib/grpc/generic/service.rb +6 -5
  735. data/src/ruby/lib/grpc/google_rpc_status_utils.rb +9 -4
  736. data/src/ruby/lib/grpc/grpc.rb +1 -1
  737. data/src/ruby/lib/grpc/structs.rb +15 -0
  738. data/src/ruby/lib/grpc/version.rb +1 -1
  739. data/src/ruby/pb/README.md +1 -1
  740. data/src/ruby/pb/generate_proto_ruby.sh +5 -3
  741. data/src/ruby/pb/grpc/health/checker.rb +2 -3
  742. data/src/ruby/pb/grpc/health/v1/health_pb.rb +16 -13
  743. data/src/ruby/pb/grpc/health/v1/health_services_pb.rb +18 -0
  744. data/src/ruby/pb/src/proto/grpc/testing/empty_pb.rb +4 -2
  745. data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +92 -69
  746. data/src/ruby/pb/src/proto/grpc/testing/test_pb.rb +2 -0
  747. data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +16 -0
  748. data/src/ruby/spec/channel_spec.rb +44 -0
  749. data/src/ruby/spec/client_auth_spec.rb +5 -5
  750. data/src/ruby/spec/debug_message_spec.rb +134 -0
  751. data/src/ruby/spec/errors_spec.rb +142 -0
  752. data/src/ruby/spec/generic/client_stub_spec.rb +13 -9
  753. data/src/ruby/spec/generic/rpc_server_spec.rb +25 -3
  754. data/src/ruby/spec/generic/service_spec.rb +2 -0
  755. data/src/ruby/spec/google_rpc_status_utils_spec.rb +2 -2
  756. data/src/ruby/spec/pb/codegen/grpc/testing/package_options.proto +28 -0
  757. data/src/ruby/spec/pb/codegen/grpc/testing/package_options_import.proto +22 -0
  758. data/src/ruby/spec/pb/codegen/grpc/testing/package_options_ruby_style.proto +39 -0
  759. data/src/ruby/spec/pb/codegen/package_option_spec.rb +78 -0
  760. data/src/ruby/spec/support/services.rb +29 -22
  761. data/src/ruby/spec/testdata/ca.pem +18 -13
  762. data/src/ruby/spec/testdata/client.key +26 -14
  763. data/src/ruby/spec/testdata/client.pem +18 -12
  764. data/src/ruby/spec/testdata/server1.key +26 -14
  765. data/src/ruby/spec/testdata/server1.pem +20 -14
  766. data/third_party/abseil-cpp/absl/algorithm/algorithm.h +159 -0
  767. data/third_party/abseil-cpp/absl/base/attributes.h +621 -0
  768. data/third_party/abseil-cpp/absl/base/call_once.h +226 -0
  769. data/third_party/abseil-cpp/absl/base/casts.h +184 -0
  770. data/third_party/abseil-cpp/absl/base/config.h +671 -0
  771. data/third_party/abseil-cpp/absl/base/const_init.h +76 -0
  772. data/third_party/abseil-cpp/absl/base/dynamic_annotations.cc +129 -0
  773. data/third_party/abseil-cpp/absl/base/dynamic_annotations.h +389 -0
  774. data/third_party/abseil-cpp/absl/base/internal/atomic_hook.h +200 -0
  775. data/third_party/abseil-cpp/absl/base/internal/bits.h +218 -0
  776. data/third_party/abseil-cpp/absl/base/internal/cycleclock.cc +107 -0
  777. data/third_party/abseil-cpp/absl/base/internal/cycleclock.h +94 -0
  778. data/third_party/abseil-cpp/absl/base/internal/endian.h +266 -0
  779. data/third_party/abseil-cpp/absl/base/internal/errno_saver.h +43 -0
  780. data/third_party/abseil-cpp/absl/base/internal/hide_ptr.h +51 -0
  781. data/third_party/abseil-cpp/absl/base/internal/identity.h +37 -0
  782. data/third_party/abseil-cpp/absl/base/internal/inline_variable.h +107 -0
  783. data/third_party/abseil-cpp/absl/base/internal/invoke.h +187 -0
  784. data/third_party/abseil-cpp/absl/base/internal/low_level_scheduling.h +107 -0
  785. data/third_party/abseil-cpp/absl/base/internal/per_thread_tls.h +52 -0
  786. data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +240 -0
  787. data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +183 -0
  788. data/third_party/abseil-cpp/absl/base/internal/scheduling_mode.h +58 -0
  789. data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +233 -0
  790. data/third_party/abseil-cpp/absl/base/internal/spinlock.h +243 -0
  791. data/third_party/abseil-cpp/absl/base/internal/spinlock_akaros.inc +35 -0
  792. data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +66 -0
  793. data/third_party/abseil-cpp/absl/base/internal/spinlock_posix.inc +46 -0
  794. data/third_party/abseil-cpp/absl/base/internal/spinlock_wait.cc +81 -0
  795. data/third_party/abseil-cpp/absl/base/internal/spinlock_wait.h +93 -0
  796. data/third_party/abseil-cpp/absl/base/internal/spinlock_win32.inc +37 -0
  797. data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +416 -0
  798. data/third_party/abseil-cpp/absl/base/internal/sysinfo.h +66 -0
  799. data/third_party/abseil-cpp/absl/base/internal/thread_annotations.h +271 -0
  800. data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +152 -0
  801. data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +259 -0
  802. data/third_party/abseil-cpp/absl/base/internal/throw_delegate.cc +108 -0
  803. data/third_party/abseil-cpp/absl/base/internal/throw_delegate.h +75 -0
  804. data/third_party/abseil-cpp/absl/base/internal/tsan_mutex_interface.h +66 -0
  805. data/third_party/abseil-cpp/absl/base/internal/unaligned_access.h +158 -0
  806. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +140 -0
  807. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +124 -0
  808. data/third_party/abseil-cpp/absl/base/log_severity.cc +27 -0
  809. data/third_party/abseil-cpp/absl/base/log_severity.h +121 -0
  810. data/third_party/abseil-cpp/absl/base/macros.h +220 -0
  811. data/third_party/abseil-cpp/absl/base/optimization.h +181 -0
  812. data/third_party/abseil-cpp/absl/base/options.h +211 -0
  813. data/third_party/abseil-cpp/absl/base/policy_checks.h +111 -0
  814. data/third_party/abseil-cpp/absl/base/port.h +26 -0
  815. data/third_party/abseil-cpp/absl/base/thread_annotations.h +280 -0
  816. data/third_party/abseil-cpp/absl/container/inlined_vector.h +848 -0
  817. data/third_party/abseil-cpp/absl/container/internal/compressed_tuple.h +265 -0
  818. data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +892 -0
  819. data/third_party/abseil-cpp/absl/memory/memory.h +695 -0
  820. data/third_party/abseil-cpp/absl/meta/type_traits.h +759 -0
  821. data/third_party/abseil-cpp/absl/numeric/int128.cc +404 -0
  822. data/third_party/abseil-cpp/absl/numeric/int128.h +1091 -0
  823. data/third_party/abseil-cpp/absl/numeric/int128_have_intrinsic.inc +302 -0
  824. data/third_party/abseil-cpp/absl/numeric/int128_no_intrinsic.inc +308 -0
  825. data/third_party/abseil-cpp/absl/strings/ascii.cc +200 -0
  826. data/third_party/abseil-cpp/absl/strings/ascii.h +242 -0
  827. data/third_party/abseil-cpp/absl/strings/charconv.cc +984 -0
  828. data/third_party/abseil-cpp/absl/strings/charconv.h +119 -0
  829. data/third_party/abseil-cpp/absl/strings/escaping.cc +949 -0
  830. data/third_party/abseil-cpp/absl/strings/escaping.h +164 -0
  831. data/third_party/abseil-cpp/absl/strings/internal/char_map.h +156 -0
  832. data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.cc +359 -0
  833. data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.h +423 -0
  834. data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc +504 -0
  835. data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.h +99 -0
  836. data/third_party/abseil-cpp/absl/strings/internal/escaping.cc +180 -0
  837. data/third_party/abseil-cpp/absl/strings/internal/escaping.h +58 -0
  838. data/third_party/abseil-cpp/absl/strings/internal/memutil.cc +112 -0
  839. data/third_party/abseil-cpp/absl/strings/internal/memutil.h +148 -0
  840. data/third_party/abseil-cpp/absl/strings/internal/ostringstream.cc +36 -0
  841. data/third_party/abseil-cpp/absl/strings/internal/ostringstream.h +89 -0
  842. data/third_party/abseil-cpp/absl/strings/internal/resize_uninitialized.h +73 -0
  843. data/third_party/abseil-cpp/absl/strings/internal/stl_type_traits.h +248 -0
  844. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +388 -0
  845. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +432 -0
  846. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +245 -0
  847. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +209 -0
  848. data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +326 -0
  849. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +51 -0
  850. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +415 -0
  851. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +493 -0
  852. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.h +23 -0
  853. data/third_party/abseil-cpp/absl/strings/internal/str_format/output.cc +72 -0
  854. data/third_party/abseil-cpp/absl/strings/internal/str_format/output.h +104 -0
  855. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc +334 -0
  856. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +333 -0
  857. data/third_party/abseil-cpp/absl/strings/internal/str_join_internal.h +314 -0
  858. data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +455 -0
  859. data/third_party/abseil-cpp/absl/strings/internal/utf8.cc +53 -0
  860. data/third_party/abseil-cpp/absl/strings/internal/utf8.h +50 -0
  861. data/third_party/abseil-cpp/absl/strings/match.cc +40 -0
  862. data/third_party/abseil-cpp/absl/strings/match.h +90 -0
  863. data/third_party/abseil-cpp/absl/strings/numbers.cc +965 -0
  864. data/third_party/abseil-cpp/absl/strings/numbers.h +266 -0
  865. data/third_party/abseil-cpp/absl/strings/str_cat.cc +246 -0
  866. data/third_party/abseil-cpp/absl/strings/str_cat.h +408 -0
  867. data/third_party/abseil-cpp/absl/strings/str_format.h +537 -0
  868. data/third_party/abseil-cpp/absl/strings/str_join.h +293 -0
  869. data/third_party/abseil-cpp/absl/strings/str_replace.cc +82 -0
  870. data/third_party/abseil-cpp/absl/strings/str_replace.h +219 -0
  871. data/third_party/abseil-cpp/absl/strings/str_split.cc +139 -0
  872. data/third_party/abseil-cpp/absl/strings/str_split.h +513 -0
  873. data/third_party/abseil-cpp/absl/strings/string_view.cc +235 -0
  874. data/third_party/abseil-cpp/absl/strings/string_view.h +622 -0
  875. data/third_party/abseil-cpp/absl/strings/strip.h +91 -0
  876. data/third_party/abseil-cpp/absl/strings/substitute.cc +171 -0
  877. data/third_party/abseil-cpp/absl/strings/substitute.h +693 -0
  878. data/third_party/abseil-cpp/absl/time/civil_time.cc +175 -0
  879. data/third_party/abseil-cpp/absl/time/civil_time.h +538 -0
  880. data/third_party/abseil-cpp/absl/time/clock.cc +569 -0
  881. data/third_party/abseil-cpp/absl/time/clock.h +74 -0
  882. data/third_party/abseil-cpp/absl/time/duration.cc +922 -0
  883. data/third_party/abseil-cpp/absl/time/format.cc +153 -0
  884. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time.h +332 -0
  885. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +622 -0
  886. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +384 -0
  887. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/zone_info_source.h +102 -0
  888. data/third_party/abseil-cpp/absl/time/internal/cctz/src/civil_time_detail.cc +94 -0
  889. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.cc +140 -0
  890. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.h +52 -0
  891. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +922 -0
  892. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.cc +45 -0
  893. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.h +76 -0
  894. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.cc +121 -0
  895. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.h +93 -0
  896. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc +958 -0
  897. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.h +138 -0
  898. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.cc +308 -0
  899. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.h +55 -0
  900. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +187 -0
  901. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_posix.cc +159 -0
  902. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_posix.h +132 -0
  903. data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +122 -0
  904. data/third_party/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc +115 -0
  905. data/third_party/abseil-cpp/absl/time/internal/get_current_time_chrono.inc +31 -0
  906. data/third_party/abseil-cpp/absl/time/internal/get_current_time_posix.inc +24 -0
  907. data/third_party/abseil-cpp/absl/time/time.cc +499 -0
  908. data/third_party/abseil-cpp/absl/time/time.h +1584 -0
  909. data/third_party/abseil-cpp/absl/types/bad_optional_access.cc +48 -0
  910. data/third_party/abseil-cpp/absl/types/bad_optional_access.h +78 -0
  911. data/third_party/abseil-cpp/absl/types/internal/optional.h +396 -0
  912. data/third_party/abseil-cpp/absl/types/internal/span.h +128 -0
  913. data/third_party/abseil-cpp/absl/types/optional.h +776 -0
  914. data/third_party/abseil-cpp/absl/types/span.h +713 -0
  915. data/third_party/abseil-cpp/absl/utility/utility.h +350 -0
  916. data/third_party/boringssl-with-bazel/err_data.c +1439 -0
  917. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/a_bitstr.c +0 -0
  918. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bool.c +123 -0
  919. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_d2i_fp.c +93 -0
  920. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_dup.c +87 -0
  921. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_enum.c +195 -0
  922. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/a_gentm.c +0 -0
  923. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_i2d_fp.c +88 -0
  924. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_int.c +420 -0
  925. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_mbstr.c +305 -0
  926. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +286 -0
  927. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/a_octet.c +0 -0
  928. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/a_print.c +0 -0
  929. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_strnid.c +313 -0
  930. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_time.c +212 -0
  931. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/a_type.c +0 -0
  932. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/a_utctm.c +0 -0
  933. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/a_utf8.c +0 -0
  934. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +446 -0
  935. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/asn1_locl.h +0 -0
  936. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/asn1_par.c +0 -0
  937. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/asn_pack.c +0 -0
  938. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/f_enum.c +0 -0
  939. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/f_int.c +0 -0
  940. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/f_string.c +0 -0
  941. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/tasn_dec.c +0 -0
  942. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +664 -0
  943. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/tasn_fre.c +0 -0
  944. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/tasn_new.c +0 -0
  945. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/tasn_typ.c +0 -0
  946. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/tasn_utl.c +0 -0
  947. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/time_support.c +0 -0
  948. data/third_party/boringssl-with-bazel/src/crypto/base64/base64.c +466 -0
  949. data/third_party/boringssl-with-bazel/src/crypto/bio/bio.c +700 -0
  950. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/bio/bio_mem.c +0 -0
  951. data/third_party/boringssl-with-bazel/src/crypto/bio/connect.c +545 -0
  952. data/third_party/boringssl-with-bazel/src/crypto/bio/fd.c +279 -0
  953. data/third_party/boringssl-with-bazel/src/crypto/bio/file.c +317 -0
  954. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/bio/hexdump.c +0 -0
  955. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/bio/internal.h +0 -0
  956. data/third_party/boringssl-with-bazel/src/crypto/bio/pair.c +488 -0
  957. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/bio/printf.c +0 -0
  958. data/third_party/boringssl-with-bazel/src/crypto/bio/socket.c +206 -0
  959. data/third_party/boringssl-with-bazel/src/crypto/bio/socket_helper.c +118 -0
  960. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/bn_extra/bn_asn1.c +0 -0
  961. data/third_party/boringssl-with-bazel/src/crypto/bn_extra/convert.c +470 -0
  962. data/third_party/boringssl-with-bazel/src/crypto/buf/buf.c +172 -0
  963. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/bytestring/asn1_compat.c +0 -0
  964. data/third_party/boringssl-with-bazel/src/crypto/bytestring/ber.c +265 -0
  965. data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbb.c +719 -0
  966. data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbs.c +688 -0
  967. data/third_party/boringssl-with-bazel/src/crypto/bytestring/internal.h +96 -0
  968. data/third_party/boringssl-with-bazel/src/crypto/bytestring/unicode.c +155 -0
  969. data/third_party/boringssl-with-bazel/src/crypto/chacha/chacha.c +184 -0
  970. data/third_party/boringssl-with-bazel/src/crypto/chacha/internal.h +45 -0
  971. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/cipher_extra.c +143 -0
  972. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/derive_key.c +152 -0
  973. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_aesccm.c +447 -0
  974. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_aesctrhmac.c +283 -0
  975. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_aesgcmsiv.c +891 -0
  976. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_chacha20poly1305.c +418 -0
  977. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cipher_extra/e_null.c +0 -0
  978. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cipher_extra/e_rc2.c +0 -0
  979. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cipher_extra/e_rc4.c +0 -0
  980. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_tls.c +688 -0
  981. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cipher_extra/internal.h +0 -0
  982. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/tls_cbc.c +491 -0
  983. data/third_party/boringssl-with-bazel/src/crypto/cmac/cmac.c +278 -0
  984. data/third_party/boringssl-with-bazel/src/crypto/conf/conf.c +810 -0
  985. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/conf/conf_def.h +0 -0
  986. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/conf/internal.h +0 -0
  987. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cpu-aarch64-fuchsia.c +0 -0
  988. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cpu-aarch64-linux.c +0 -0
  989. data/third_party/boringssl-with-bazel/src/crypto/cpu-arm-linux.c +220 -0
  990. data/third_party/boringssl-with-bazel/src/crypto/cpu-arm-linux.h +201 -0
  991. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cpu-arm.c +0 -0
  992. data/third_party/boringssl-with-bazel/src/crypto/cpu-intel.c +291 -0
  993. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cpu-ppc64le.c +0 -0
  994. data/third_party/boringssl-with-bazel/src/crypto/crypto.c +226 -0
  995. data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519.c +2159 -0
  996. data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519_tables.h +7872 -0
  997. data/third_party/boringssl-with-bazel/src/crypto/curve25519/internal.h +146 -0
  998. data/third_party/boringssl-with-bazel/src/crypto/curve25519/spake25519.c +539 -0
  999. data/third_party/boringssl-with-bazel/src/crypto/dh/check.c +217 -0
  1000. data/third_party/boringssl-with-bazel/src/crypto/dh/dh.c +533 -0
  1001. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/dh/dh_asn1.c +0 -0
  1002. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/dh/params.c +0 -0
  1003. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/digest_extra/digest_extra.c +0 -0
  1004. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +980 -0
  1005. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/dsa/dsa_asn1.c +0 -0
  1006. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/ec_asn1.c +574 -0
  1007. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/ec_derive.c +95 -0
  1008. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/hash_to_curve.c +425 -0
  1009. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/internal.h +78 -0
  1010. data/third_party/boringssl-with-bazel/src/crypto/ecdh_extra/ecdh_extra.c +124 -0
  1011. data/third_party/boringssl-with-bazel/src/crypto/ecdsa_extra/ecdsa_asn1.c +267 -0
  1012. data/third_party/boringssl-with-bazel/src/crypto/engine/engine.c +99 -0
  1013. data/third_party/boringssl-with-bazel/src/crypto/err/err.c +850 -0
  1014. data/third_party/boringssl-with-bazel/src/crypto/err/internal.h +58 -0
  1015. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/evp/digestsign.c +0 -0
  1016. data/third_party/boringssl-with-bazel/src/crypto/evp/evp.c +443 -0
  1017. data/third_party/boringssl-with-bazel/src/crypto/evp/evp_asn1.c +388 -0
  1018. data/third_party/boringssl-with-bazel/src/crypto/evp/evp_ctx.c +484 -0
  1019. data/third_party/boringssl-with-bazel/src/crypto/evp/internal.h +269 -0
  1020. data/third_party/boringssl-with-bazel/src/crypto/evp/p_dsa_asn1.c +273 -0
  1021. data/third_party/boringssl-with-bazel/src/crypto/evp/p_ec.c +286 -0
  1022. data/third_party/boringssl-with-bazel/src/crypto/evp/p_ec_asn1.c +255 -0
  1023. data/third_party/boringssl-with-bazel/src/crypto/evp/p_ed25519.c +104 -0
  1024. data/third_party/boringssl-with-bazel/src/crypto/evp/p_ed25519_asn1.c +221 -0
  1025. data/third_party/boringssl-with-bazel/src/crypto/evp/p_rsa.c +648 -0
  1026. data/third_party/boringssl-with-bazel/src/crypto/evp/p_rsa_asn1.c +194 -0
  1027. data/third_party/boringssl-with-bazel/src/crypto/evp/p_x25519.c +110 -0
  1028. data/third_party/boringssl-with-bazel/src/crypto/evp/p_x25519_asn1.c +248 -0
  1029. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/evp/pbkdf.c +0 -0
  1030. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/evp/print.c +0 -0
  1031. data/third_party/boringssl-with-bazel/src/crypto/evp/scrypt.c +213 -0
  1032. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/evp/sign.c +0 -0
  1033. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/ex_data.c +0 -0
  1034. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/aes.c +108 -0
  1035. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/aes_nohw.c +1282 -0
  1036. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/internal.h +238 -0
  1037. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/key_wrap.c +236 -0
  1038. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/mode_wrappers.c +106 -0
  1039. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +263 -0
  1040. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/add.c +0 -0
  1041. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/asm/x86_64-gcc.c +0 -0
  1042. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/bn.c +445 -0
  1043. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/bytes.c +0 -0
  1044. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/cmp.c +200 -0
  1045. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/ctx.c +236 -0
  1046. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/div.c +886 -0
  1047. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/div_extra.c +87 -0
  1048. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/exponentiation.c +1288 -0
  1049. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/gcd.c +378 -0
  1050. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/gcd_extra.c +325 -0
  1051. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/generic.c +0 -0
  1052. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +694 -0
  1053. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/jacobi.c +0 -0
  1054. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/montgomery.c +502 -0
  1055. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/montgomery_inv.c +186 -0
  1056. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/mul.c +749 -0
  1057. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/prime.c +1068 -0
  1058. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/random.c +341 -0
  1059. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/rsaz_exp.c +226 -0
  1060. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/rsaz_exp.h +104 -0
  1061. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/shift.c +364 -0
  1062. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/sqrt.c +0 -0
  1063. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/cipher/aead.c +0 -0
  1064. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/cipher.c +620 -0
  1065. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_aes.c +1302 -0
  1066. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_des.c +237 -0
  1067. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/internal.h +128 -0
  1068. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/delocate.h +89 -0
  1069. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/des/des.c +0 -0
  1070. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/des/internal.h +0 -0
  1071. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digest.c +271 -0
  1072. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digests.c +296 -0
  1073. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/digest/internal.h +0 -0
  1074. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/md32_common.h +268 -0
  1075. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +1252 -0
  1076. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +465 -0
  1077. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_montgomery.c +524 -0
  1078. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/felem.c +100 -0
  1079. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +775 -0
  1080. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/oct.c +328 -0
  1081. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p224-64.c +1178 -0
  1082. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-x86_64-table.h +9497 -0
  1083. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-x86_64.c +632 -0
  1084. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-x86_64.h +153 -0
  1085. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256.c +736 -0
  1086. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256_table.h +297 -0
  1087. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/scalar.c +175 -0
  1088. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple.c +357 -0
  1089. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple_mul.c +270 -0
  1090. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/util.c +255 -0
  1091. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/wnaf.c +270 -0
  1092. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdh/ecdh.c +122 -0
  1093. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +328 -0
  1094. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/fips_shared_support.c +32 -0
  1095. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/hmac/hmac.c +0 -0
  1096. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/is_fips.c +29 -0
  1097. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md4/md4.c +256 -0
  1098. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md5/internal.h +37 -0
  1099. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md5/md5.c +301 -0
  1100. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cbc.c +167 -0
  1101. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cfb.c +202 -0
  1102. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ctr.c +200 -0
  1103. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm.c +729 -0
  1104. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm_nohw.c +304 -0
  1105. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/internal.h +441 -0
  1106. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ofb.c +96 -0
  1107. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/modes/polyval.c +0 -0
  1108. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/ctrdrbg.c +202 -0
  1109. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/fork_detect.c +137 -0
  1110. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/fork_detect.h +49 -0
  1111. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/getrandom_fillin.h +64 -0
  1112. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/internal.h +163 -0
  1113. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.c +378 -0
  1114. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +391 -0
  1115. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/blinding.c +243 -0
  1116. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/internal.h +127 -0
  1117. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/padding.c +695 -0
  1118. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +898 -0
  1119. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +1358 -0
  1120. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +654 -0
  1121. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/internal.h +53 -0
  1122. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/sha/sha1-altivec.c +0 -0
  1123. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha1.c +371 -0
  1124. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha256.c +343 -0
  1125. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +544 -0
  1126. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/tls/internal.h +0 -0
  1127. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/tls/kdf.c +0 -0
  1128. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/hkdf/hkdf.c +0 -0
  1129. data/third_party/boringssl-with-bazel/src/crypto/hrss/hrss.c +2100 -0
  1130. data/third_party/boringssl-with-bazel/src/crypto/hrss/internal.h +61 -0
  1131. data/third_party/boringssl-with-bazel/src/crypto/internal.h +834 -0
  1132. data/third_party/boringssl-with-bazel/src/crypto/lhash/lhash.c +348 -0
  1133. data/third_party/boringssl-with-bazel/src/crypto/mem.c +359 -0
  1134. data/third_party/boringssl-with-bazel/src/crypto/obj/obj.c +549 -0
  1135. data/third_party/boringssl-with-bazel/src/crypto/obj/obj_dat.h +11585 -0
  1136. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/obj/obj_xref.c +0 -0
  1137. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_all.c +261 -0
  1138. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_info.c +360 -0
  1139. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_lib.c +777 -0
  1140. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_oth.c +87 -0
  1141. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_pk8.c +257 -0
  1142. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_pkey.c +218 -0
  1143. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/pem/pem_x509.c +0 -0
  1144. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/pem/pem_xaux.c +0 -0
  1145. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/pkcs7/internal.h +0 -0
  1146. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7.c +159 -0
  1147. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7_x509.c +385 -0
  1148. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/internal.h +131 -0
  1149. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/p5_pbev2.c +316 -0
  1150. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8.c +530 -0
  1151. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +1305 -0
  1152. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/poly1305/internal.h +0 -0
  1153. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305.c +318 -0
  1154. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_arm.c +305 -0
  1155. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_vec.c +856 -0
  1156. data/third_party/boringssl-with-bazel/src/crypto/pool/internal.h +45 -0
  1157. data/third_party/boringssl-with-bazel/src/crypto/pool/pool.c +220 -0
  1158. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/deterministic.c +52 -0
  1159. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/rand_extra/forkunsafe.c +0 -0
  1160. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/fuchsia.c +30 -0
  1161. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/rand_extra/rand_extra.c +0 -0
  1162. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/windows.c +69 -0
  1163. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/rc4/rc4.c +0 -0
  1164. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/refcount_c11.c +0 -0
  1165. data/third_party/boringssl-with-bazel/src/crypto/refcount_lock.c +53 -0
  1166. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/rsa_extra/rsa_asn1.c +0 -0
  1167. data/third_party/boringssl-with-bazel/src/crypto/rsa_extra/rsa_print.c +22 -0
  1168. data/third_party/boringssl-with-bazel/src/crypto/siphash/siphash.c +82 -0
  1169. data/third_party/boringssl-with-bazel/src/crypto/stack/stack.c +431 -0
  1170. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/thread.c +0 -0
  1171. data/third_party/boringssl-with-bazel/src/crypto/thread_none.c +59 -0
  1172. data/third_party/boringssl-with-bazel/src/crypto/thread_pthread.c +210 -0
  1173. data/third_party/boringssl-with-bazel/src/crypto/thread_win.c +260 -0
  1174. data/third_party/boringssl-with-bazel/src/crypto/trust_token/internal.h +278 -0
  1175. data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +1474 -0
  1176. data/third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token.c +720 -0
  1177. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/a_digest.c +0 -0
  1178. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/a_sign.c +0 -0
  1179. data/third_party/boringssl-with-bazel/src/crypto/x509/a_strex.c +653 -0
  1180. data/third_party/boringssl-with-bazel/src/crypto/x509/a_verify.c +114 -0
  1181. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/algorithm.c +0 -0
  1182. data/third_party/boringssl-with-bazel/src/crypto/x509/asn1_gen.c +842 -0
  1183. data/third_party/boringssl-with-bazel/src/crypto/x509/by_dir.c +458 -0
  1184. data/third_party/boringssl-with-bazel/src/crypto/x509/by_file.c +275 -0
  1185. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/charmap.h +0 -0
  1186. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/i2d_pr.c +0 -0
  1187. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/internal.h +0 -0
  1188. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/rsa_pss.c +0 -0
  1189. data/third_party/boringssl-with-bazel/src/crypto/x509/t_crl.c +125 -0
  1190. data/third_party/boringssl-with-bazel/src/crypto/x509/t_req.c +244 -0
  1191. data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509.c +544 -0
  1192. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/t_x509a.c +0 -0
  1193. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/vpm_int.h +0 -0
  1194. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x509.c +0 -0
  1195. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x509_att.c +0 -0
  1196. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c +476 -0
  1197. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x509_d2.c +0 -0
  1198. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_def.c +103 -0
  1199. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x509_ext.c +0 -0
  1200. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_lu.c +834 -0
  1201. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_obj.c +198 -0
  1202. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_r2x.c +116 -0
  1203. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c +341 -0
  1204. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +185 -0
  1205. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_trs.c +326 -0
  1206. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_txt.c +204 -0
  1207. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x509_v3.c +0 -0
  1208. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +2487 -0
  1209. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vpm.c +671 -0
  1210. data/third_party/boringssl-with-bazel/src/crypto/x509/x509cset.c +210 -0
  1211. data/third_party/boringssl-with-bazel/src/crypto/x509/x509name.c +389 -0
  1212. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x509rset.c +0 -0
  1213. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x509spki.c +0 -0
  1214. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_algor.c +0 -0
  1215. data/third_party/boringssl-with-bazel/src/crypto/x509/x_all.c +399 -0
  1216. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_attrib.c +0 -0
  1217. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_crl.c +0 -0
  1218. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_exten.c +0 -0
  1219. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_info.c +0 -0
  1220. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_name.c +0 -0
  1221. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_pkey.c +0 -0
  1222. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_pubkey.c +0 -0
  1223. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_req.c +0 -0
  1224. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_sig.c +0 -0
  1225. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_spki.c +0 -0
  1226. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_val.c +0 -0
  1227. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509.c +334 -0
  1228. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_x509a.c +0 -0
  1229. data/third_party/boringssl-with-bazel/src/crypto/x509v3/ext_dat.h +141 -0
  1230. data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +56 -0
  1231. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_cache.c +286 -0
  1232. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/pcy_data.c +0 -0
  1233. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/pcy_int.h +0 -0
  1234. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/pcy_lib.c +0 -0
  1235. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/pcy_map.c +0 -0
  1236. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_node.c +189 -0
  1237. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_tree.c +842 -0
  1238. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_akey.c +207 -0
  1239. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_akeya.c +0 -0
  1240. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_alt.c +629 -0
  1241. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_bcons.c +0 -0
  1242. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_bitst.c +0 -0
  1243. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_conf.c +463 -0
  1244. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +503 -0
  1245. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_crld.c +0 -0
  1246. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_enum.c +100 -0
  1247. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_extku.c +0 -0
  1248. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_genn.c +246 -0
  1249. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_ia5.c +0 -0
  1250. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_info.c +218 -0
  1251. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_int.c +0 -0
  1252. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_lib.c +371 -0
  1253. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_ncons.c +0 -0
  1254. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ocsp.c +68 -0
  1255. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pci.c +288 -0
  1256. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_pcia.c +0 -0
  1257. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_pcons.c +0 -0
  1258. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_pku.c +0 -0
  1259. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_pmaps.c +0 -0
  1260. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_prn.c +0 -0
  1261. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +843 -0
  1262. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c +155 -0
  1263. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_sxnet.c +0 -0
  1264. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_utl.c +1395 -0
  1265. data/third_party/boringssl-with-bazel/src/include/openssl/aead.h +459 -0
  1266. data/third_party/boringssl-with-bazel/src/include/openssl/aes.h +195 -0
  1267. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/arm_arch.h +0 -0
  1268. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +911 -0
  1269. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/asn1_mac.h +0 -0
  1270. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/asn1t.h +0 -0
  1271. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +575 -0
  1272. data/third_party/boringssl-with-bazel/src/include/openssl/base64.h +190 -0
  1273. data/third_party/boringssl-with-bazel/src/include/openssl/bio.h +933 -0
  1274. data/third_party/boringssl-with-bazel/src/include/openssl/blowfish.h +93 -0
  1275. data/third_party/boringssl-with-bazel/src/include/openssl/bn.h +1057 -0
  1276. data/third_party/boringssl-with-bazel/src/include/openssl/buf.h +137 -0
  1277. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/buffer.h +0 -0
  1278. data/third_party/boringssl-with-bazel/src/include/openssl/bytestring.h +561 -0
  1279. data/third_party/boringssl-with-bazel/src/include/openssl/cast.h +96 -0
  1280. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/chacha.h +0 -0
  1281. data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +638 -0
  1282. data/third_party/boringssl-with-bazel/src/include/openssl/cmac.h +91 -0
  1283. data/third_party/boringssl-with-bazel/src/include/openssl/conf.h +180 -0
  1284. data/third_party/boringssl-with-bazel/src/include/openssl/cpu.h +212 -0
  1285. data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +149 -0
  1286. data/third_party/boringssl-with-bazel/src/include/openssl/curve25519.h +201 -0
  1287. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/des.h +0 -0
  1288. data/third_party/boringssl-with-bazel/src/include/openssl/dh.h +319 -0
  1289. data/third_party/boringssl-with-bazel/src/include/openssl/digest.h +331 -0
  1290. data/third_party/boringssl-with-bazel/src/include/openssl/dsa.h +457 -0
  1291. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/dtls1.h +0 -0
  1292. data/third_party/boringssl-with-bazel/src/include/openssl/e_os2.h +18 -0
  1293. data/third_party/boringssl-with-bazel/src/include/openssl/ec.h +424 -0
  1294. data/third_party/boringssl-with-bazel/src/include/openssl/ec_key.h +372 -0
  1295. data/third_party/boringssl-with-bazel/src/include/openssl/ecdh.h +118 -0
  1296. data/third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h +205 -0
  1297. data/third_party/boringssl-with-bazel/src/include/openssl/engine.h +109 -0
  1298. data/third_party/boringssl-with-bazel/src/include/openssl/err.h +465 -0
  1299. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +1050 -0
  1300. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/ex_data.h +0 -0
  1301. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/hkdf.h +0 -0
  1302. data/third_party/boringssl-with-bazel/src/include/openssl/hmac.h +186 -0
  1303. data/third_party/boringssl-with-bazel/src/include/openssl/hrss.h +100 -0
  1304. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/is_boringssl.h +0 -0
  1305. data/third_party/boringssl-with-bazel/src/include/openssl/lhash.h +282 -0
  1306. data/third_party/boringssl-with-bazel/src/include/openssl/md4.h +108 -0
  1307. data/third_party/boringssl-with-bazel/src/include/openssl/md5.h +109 -0
  1308. data/third_party/boringssl-with-bazel/src/include/openssl/mem.h +175 -0
  1309. data/third_party/boringssl-with-bazel/src/include/openssl/nid.h +4259 -0
  1310. data/third_party/boringssl-with-bazel/src/include/openssl/obj.h +236 -0
  1311. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/obj_mac.h +0 -0
  1312. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/objects.h +0 -0
  1313. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/opensslconf.h +0 -0
  1314. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/opensslv.h +0 -0
  1315. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/ossl_typ.h +0 -0
  1316. data/third_party/boringssl-with-bazel/src/include/openssl/pem.h +435 -0
  1317. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/pkcs12.h +0 -0
  1318. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs7.h +215 -0
  1319. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs8.h +269 -0
  1320. data/third_party/boringssl-with-bazel/src/include/openssl/poly1305.h +49 -0
  1321. data/third_party/boringssl-with-bazel/src/include/openssl/pool.h +102 -0
  1322. data/third_party/boringssl-with-bazel/src/include/openssl/rand.h +111 -0
  1323. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/rc4.h +0 -0
  1324. data/third_party/boringssl-with-bazel/src/include/openssl/ripemd.h +108 -0
  1325. data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +818 -0
  1326. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/safestack.h +0 -0
  1327. data/third_party/boringssl-with-bazel/src/include/openssl/sha.h +294 -0
  1328. data/third_party/boringssl-with-bazel/src/include/openssl/siphash.h +37 -0
  1329. data/third_party/boringssl-with-bazel/src/include/openssl/span.h +199 -0
  1330. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/srtp.h +0 -0
  1331. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +5198 -0
  1332. data/third_party/boringssl-with-bazel/src/include/openssl/ssl3.h +333 -0
  1333. data/third_party/boringssl-with-bazel/src/include/openssl/stack.h +542 -0
  1334. data/third_party/boringssl-with-bazel/src/include/openssl/thread.h +191 -0
  1335. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +632 -0
  1336. data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +291 -0
  1337. data/third_party/boringssl-with-bazel/src/include/openssl/type_check.h +90 -0
  1338. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +1207 -0
  1339. data/third_party/boringssl-with-bazel/src/include/openssl/x509_vfy.h +681 -0
  1340. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +831 -0
  1341. data/third_party/{boringssl → boringssl-with-bazel/src}/ssl/bio_ssl.cc +0 -0
  1342. data/third_party/boringssl-with-bazel/src/ssl/d1_both.cc +837 -0
  1343. data/third_party/boringssl-with-bazel/src/ssl/d1_lib.cc +268 -0
  1344. data/third_party/boringssl-with-bazel/src/ssl/d1_pkt.cc +273 -0
  1345. data/third_party/boringssl-with-bazel/src/ssl/d1_srtp.cc +232 -0
  1346. data/third_party/boringssl-with-bazel/src/ssl/dtls_method.cc +200 -0
  1347. data/third_party/boringssl-with-bazel/src/ssl/dtls_record.cc +353 -0
  1348. data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +675 -0
  1349. data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +703 -0
  1350. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +1890 -0
  1351. data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +1805 -0
  1352. data/third_party/boringssl-with-bazel/src/ssl/internal.h +3572 -0
  1353. data/third_party/boringssl-with-bazel/src/ssl/s3_both.cc +724 -0
  1354. data/third_party/boringssl-with-bazel/src/ssl/s3_lib.cc +221 -0
  1355. data/third_party/boringssl-with-bazel/src/ssl/s3_pkt.cc +458 -0
  1356. data/third_party/boringssl-with-bazel/src/ssl/ssl_aead_ctx.cc +432 -0
  1357. data/third_party/boringssl-with-bazel/src/ssl/ssl_asn1.cc +856 -0
  1358. data/third_party/boringssl-with-bazel/src/ssl/ssl_buffer.cc +306 -0
  1359. data/third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc +1019 -0
  1360. data/third_party/boringssl-with-bazel/src/ssl/ssl_cipher.cc +1718 -0
  1361. data/third_party/boringssl-with-bazel/src/ssl/ssl_file.cc +585 -0
  1362. data/third_party/boringssl-with-bazel/src/ssl/ssl_key_share.cc +397 -0
  1363. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +3015 -0
  1364. data/third_party/boringssl-with-bazel/src/ssl/ssl_privkey.cc +835 -0
  1365. data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +1333 -0
  1366. data/third_party/boringssl-with-bazel/src/ssl/ssl_stat.cc +230 -0
  1367. data/third_party/boringssl-with-bazel/src/ssl/ssl_transcript.cc +277 -0
  1368. data/third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc +394 -0
  1369. data/third_party/boringssl-with-bazel/src/ssl/ssl_x509.cc +1358 -0
  1370. data/third_party/boringssl-with-bazel/src/ssl/t1_enc.cc +365 -0
  1371. data/third_party/boringssl-with-bazel/src/ssl/t1_lib.cc +3870 -0
  1372. data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +689 -0
  1373. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +1017 -0
  1374. data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +513 -0
  1375. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +1096 -0
  1376. data/third_party/boringssl-with-bazel/src/ssl/tls_method.cc +317 -0
  1377. data/third_party/boringssl-with-bazel/src/ssl/tls_record.cc +703 -0
  1378. data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_32.h +981 -0
  1379. data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_64.h +619 -0
  1380. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_32.h +3147 -0
  1381. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_64.h +1226 -0
  1382. data/third_party/cares/cares/ares.h +12 -0
  1383. data/third_party/cares/cares/ares_create_query.c +5 -1
  1384. data/third_party/cares/cares/ares_data.c +74 -73
  1385. data/third_party/cares/cares/ares_destroy.c +6 -1
  1386. data/third_party/cares/cares/ares_gethostbyaddr.c +5 -5
  1387. data/third_party/cares/cares/ares_gethostbyname.c +15 -4
  1388. data/third_party/cares/cares/ares_getnameinfo.c +11 -0
  1389. data/third_party/cares/cares/ares_init.c +274 -173
  1390. data/third_party/cares/cares/ares_library_init.c +21 -3
  1391. data/third_party/cares/cares/ares_options.c +6 -2
  1392. data/third_party/cares/cares/ares_parse_naptr_reply.c +7 -6
  1393. data/third_party/cares/cares/ares_parse_ptr_reply.c +4 -2
  1394. data/third_party/cares/cares/ares_platform.c +7 -0
  1395. data/third_party/cares/cares/ares_private.h +19 -11
  1396. data/third_party/cares/cares/ares_process.c +27 -2
  1397. data/third_party/cares/cares/ares_rules.h +1 -1
  1398. data/third_party/cares/cares/ares_search.c +7 -0
  1399. data/third_party/cares/cares/ares_send.c +6 -0
  1400. data/third_party/cares/cares/ares_strsplit.c +174 -0
  1401. data/third_party/cares/cares/ares_strsplit.h +43 -0
  1402. data/third_party/cares/cares/ares_version.h +4 -4
  1403. data/third_party/cares/cares/config-win32.h +1 -1
  1404. data/third_party/cares/cares/inet_ntop.c +2 -3
  1405. data/third_party/cares/config_darwin/ares_config.h +3 -0
  1406. data/third_party/cares/config_freebsd/ares_config.h +3 -0
  1407. data/third_party/cares/config_linux/ares_config.h +3 -0
  1408. data/third_party/cares/config_openbsd/ares_config.h +3 -0
  1409. data/third_party/upb/upb/decode.c +609 -0
  1410. data/third_party/upb/upb/decode.h +21 -0
  1411. data/third_party/upb/upb/encode.c +378 -0
  1412. data/third_party/upb/upb/encode.h +21 -0
  1413. data/third_party/upb/upb/generated_util.h +105 -0
  1414. data/third_party/upb/upb/msg.c +111 -0
  1415. data/third_party/upb/upb/msg.h +69 -0
  1416. data/third_party/upb/upb/port.c +26 -0
  1417. data/third_party/upb/upb/port_def.inc +150 -0
  1418. data/third_party/upb/upb/port_undef.inc +21 -0
  1419. data/third_party/upb/upb/table.c +913 -0
  1420. data/third_party/upb/upb/table.int.h +507 -0
  1421. data/third_party/upb/upb/upb.c +261 -0
  1422. data/third_party/upb/upb/upb.h +364 -0
  1423. metadata +968 -542
  1424. data/src/boringssl/err_data.c +0 -1362
  1425. data/src/core/ext/filters/client_channel/connector.cc +0 -41
  1426. data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/google/protobuf/duration.pb.c +0 -19
  1427. data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/google/protobuf/duration.pb.h +0 -54
  1428. data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/google/protobuf/timestamp.pb.c +0 -19
  1429. data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/google/protobuf/timestamp.pb.h +0 -54
  1430. data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.c +0 -89
  1431. data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.h +0 -164
  1432. data/src/core/ext/filters/client_channel/lb_policy_factory.cc +0 -163
  1433. data/src/core/ext/filters/client_channel/method_params.cc +0 -178
  1434. data/src/core/ext/filters/client_channel/method_params.h +0 -78
  1435. data/src/core/ext/filters/client_channel/proxy_mapper.cc +0 -48
  1436. data/src/core/ext/filters/client_channel/subchannel_index.cc +0 -254
  1437. data/src/core/ext/filters/client_channel/subchannel_index.h +0 -79
  1438. data/src/core/ext/filters/client_channel/uri_parser.cc +0 -314
  1439. data/src/core/ext/filters/client_channel/uri_parser.h +0 -50
  1440. data/src/core/lib/channel/handshaker_factory.cc +0 -41
  1441. data/src/core/lib/gpr/arena.cc +0 -145
  1442. data/src/core/lib/gpr/host_port.cc +0 -98
  1443. data/src/core/lib/gpr/host_port.h +0 -43
  1444. data/src/core/lib/gpr/mpscq.cc +0 -117
  1445. data/src/core/lib/gpr/mpscq.h +0 -86
  1446. data/src/core/lib/gprpp/abstract.h +0 -37
  1447. data/src/core/lib/gprpp/atomic_with_atm.h +0 -57
  1448. data/src/core/lib/gprpp/atomic_with_std.h +0 -35
  1449. data/src/core/lib/gprpp/inlined_vector.h +0 -186
  1450. data/src/core/lib/gprpp/mutex_lock.h +0 -42
  1451. data/src/core/lib/iomgr/ev_epollsig_linux.cc +0 -1743
  1452. data/src/core/lib/iomgr/ev_epollsig_linux.h +0 -35
  1453. data/src/core/lib/iomgr/network_status_tracker.cc +0 -36
  1454. data/src/core/lib/iomgr/network_status_tracker.h +0 -32
  1455. data/src/core/lib/iomgr/wakeup_fd_cv.cc +0 -107
  1456. data/src/core/lib/iomgr/wakeup_fd_cv.h +0 -69
  1457. data/src/core/lib/json/json.cc +0 -97
  1458. data/src/core/lib/json/json_common.h +0 -34
  1459. data/src/core/lib/json/json_reader.h +0 -146
  1460. data/src/core/lib/json/json_string.cc +0 -367
  1461. data/src/core/lib/json/json_writer.h +0 -84
  1462. data/src/core/lib/security/security_connector/alts_security_connector.cc +0 -288
  1463. data/src/core/lib/security/security_connector/alts_security_connector.h +0 -69
  1464. data/src/core/lib/security/security_connector/local_security_connector.cc +0 -245
  1465. data/src/core/lib/security/security_connector/local_security_connector.h +0 -58
  1466. data/src/core/lib/transport/service_config.cc +0 -106
  1467. data/src/core/lib/transport/service_config.h +0 -249
  1468. data/src/core/tsi/alts/handshaker/alts_handshaker_service_api.cc +0 -520
  1469. data/src/core/tsi/alts/handshaker/alts_handshaker_service_api.h +0 -323
  1470. data/src/core/tsi/alts/handshaker/alts_handshaker_service_api_util.cc +0 -143
  1471. data/src/core/tsi/alts/handshaker/alts_handshaker_service_api_util.h +0 -149
  1472. data/src/core/tsi/alts/handshaker/alts_tsi_event.cc +0 -73
  1473. data/src/core/tsi/alts/handshaker/alts_tsi_event.h +0 -93
  1474. data/src/core/tsi/alts/handshaker/altscontext.pb.c +0 -47
  1475. data/src/core/tsi/alts/handshaker/altscontext.pb.h +0 -63
  1476. data/src/core/tsi/alts/handshaker/handshaker.pb.c +0 -122
  1477. data/src/core/tsi/alts/handshaker/handshaker.pb.h +0 -254
  1478. data/src/core/tsi/alts/handshaker/transport_security_common.pb.c +0 -49
  1479. data/src/core/tsi/alts/handshaker/transport_security_common.pb.h +0 -78
  1480. data/src/core/tsi/alts_transport_security.cc +0 -63
  1481. data/src/core/tsi/alts_transport_security.h +0 -47
  1482. data/src/core/tsi/grpc_shadow_boringssl.h +0 -3006
  1483. data/third_party/boringssl/crypto/asn1/a_bool.c +0 -110
  1484. data/third_party/boringssl/crypto/asn1/a_d2i_fp.c +0 -297
  1485. data/third_party/boringssl/crypto/asn1/a_dup.c +0 -111
  1486. data/third_party/boringssl/crypto/asn1/a_enum.c +0 -195
  1487. data/third_party/boringssl/crypto/asn1/a_i2d_fp.c +0 -150
  1488. data/third_party/boringssl/crypto/asn1/a_int.c +0 -479
  1489. data/third_party/boringssl/crypto/asn1/a_mbstr.c +0 -411
  1490. data/third_party/boringssl/crypto/asn1/a_object.c +0 -275
  1491. data/third_party/boringssl/crypto/asn1/a_strnid.c +0 -312
  1492. data/third_party/boringssl/crypto/asn1/a_time.c +0 -213
  1493. data/third_party/boringssl/crypto/asn1/asn1_lib.c +0 -442
  1494. data/third_party/boringssl/crypto/asn1/tasn_enc.c +0 -662
  1495. data/third_party/boringssl/crypto/base64/base64.c +0 -466
  1496. data/third_party/boringssl/crypto/bio/bio.c +0 -636
  1497. data/third_party/boringssl/crypto/bio/connect.c +0 -542
  1498. data/third_party/boringssl/crypto/bio/fd.c +0 -276
  1499. data/third_party/boringssl/crypto/bio/file.c +0 -315
  1500. data/third_party/boringssl/crypto/bio/pair.c +0 -489
  1501. data/third_party/boringssl/crypto/bio/socket.c +0 -202
  1502. data/third_party/boringssl/crypto/bio/socket_helper.c +0 -114
  1503. data/third_party/boringssl/crypto/bn_extra/convert.c +0 -466
  1504. data/third_party/boringssl/crypto/buf/buf.c +0 -231
  1505. data/third_party/boringssl/crypto/bytestring/ber.c +0 -261
  1506. data/third_party/boringssl/crypto/bytestring/cbb.c +0 -668
  1507. data/third_party/boringssl/crypto/bytestring/cbs.c +0 -618
  1508. data/third_party/boringssl/crypto/bytestring/internal.h +0 -75
  1509. data/third_party/boringssl/crypto/chacha/chacha.c +0 -167
  1510. data/third_party/boringssl/crypto/cipher_extra/cipher_extra.c +0 -114
  1511. data/third_party/boringssl/crypto/cipher_extra/derive_key.c +0 -152
  1512. data/third_party/boringssl/crypto/cipher_extra/e_aesccm.c +0 -203
  1513. data/third_party/boringssl/crypto/cipher_extra/e_aesctrhmac.c +0 -281
  1514. data/third_party/boringssl/crypto/cipher_extra/e_aesgcmsiv.c +0 -867
  1515. data/third_party/boringssl/crypto/cipher_extra/e_chacha20poly1305.c +0 -326
  1516. data/third_party/boringssl/crypto/cipher_extra/e_ssl3.c +0 -460
  1517. data/third_party/boringssl/crypto/cipher_extra/e_tls.c +0 -680
  1518. data/third_party/boringssl/crypto/cipher_extra/tls_cbc.c +0 -482
  1519. data/third_party/boringssl/crypto/cmac/cmac.c +0 -241
  1520. data/third_party/boringssl/crypto/conf/conf.c +0 -803
  1521. data/third_party/boringssl/crypto/cpu-arm-linux.c +0 -363
  1522. data/third_party/boringssl/crypto/cpu-intel.c +0 -288
  1523. data/third_party/boringssl/crypto/crypto.c +0 -198
  1524. data/third_party/boringssl/crypto/curve25519/spake25519.c +0 -539
  1525. data/third_party/boringssl/crypto/dh/check.c +0 -217
  1526. data/third_party/boringssl/crypto/dh/dh.c +0 -519
  1527. data/third_party/boringssl/crypto/dsa/dsa.c +0 -946
  1528. data/third_party/boringssl/crypto/ec_extra/ec_asn1.c +0 -562
  1529. data/third_party/boringssl/crypto/ecdh/ecdh.c +0 -162
  1530. data/third_party/boringssl/crypto/ecdsa_extra/ecdsa_asn1.c +0 -275
  1531. data/third_party/boringssl/crypto/engine/engine.c +0 -98
  1532. data/third_party/boringssl/crypto/err/err.c +0 -847
  1533. data/third_party/boringssl/crypto/err/internal.h +0 -58
  1534. data/third_party/boringssl/crypto/evp/evp.c +0 -362
  1535. data/third_party/boringssl/crypto/evp/evp_asn1.c +0 -337
  1536. data/third_party/boringssl/crypto/evp/evp_ctx.c +0 -446
  1537. data/third_party/boringssl/crypto/evp/internal.h +0 -252
  1538. data/third_party/boringssl/crypto/evp/p_dsa_asn1.c +0 -268
  1539. data/third_party/boringssl/crypto/evp/p_ec.c +0 -239
  1540. data/third_party/boringssl/crypto/evp/p_ec_asn1.c +0 -256
  1541. data/third_party/boringssl/crypto/evp/p_ed25519.c +0 -71
  1542. data/third_party/boringssl/crypto/evp/p_ed25519_asn1.c +0 -190
  1543. data/third_party/boringssl/crypto/evp/p_rsa.c +0 -634
  1544. data/third_party/boringssl/crypto/evp/p_rsa_asn1.c +0 -189
  1545. data/third_party/boringssl/crypto/evp/scrypt.c +0 -209
  1546. data/third_party/boringssl/crypto/fipsmodule/aes/aes.c +0 -1100
  1547. data/third_party/boringssl/crypto/fipsmodule/aes/internal.h +0 -100
  1548. data/third_party/boringssl/crypto/fipsmodule/aes/key_wrap.c +0 -138
  1549. data/third_party/boringssl/crypto/fipsmodule/aes/mode_wrappers.c +0 -112
  1550. data/third_party/boringssl/crypto/fipsmodule/bcm.c +0 -148
  1551. data/third_party/boringssl/crypto/fipsmodule/bn/bn.c +0 -428
  1552. data/third_party/boringssl/crypto/fipsmodule/bn/cmp.c +0 -200
  1553. data/third_party/boringssl/crypto/fipsmodule/bn/ctx.c +0 -303
  1554. data/third_party/boringssl/crypto/fipsmodule/bn/div.c +0 -895
  1555. data/third_party/boringssl/crypto/fipsmodule/bn/exponentiation.c +0 -1356
  1556. data/third_party/boringssl/crypto/fipsmodule/bn/gcd.c +0 -683
  1557. data/third_party/boringssl/crypto/fipsmodule/bn/internal.h +0 -573
  1558. data/third_party/boringssl/crypto/fipsmodule/bn/montgomery.c +0 -526
  1559. data/third_party/boringssl/crypto/fipsmodule/bn/montgomery_inv.c +0 -185
  1560. data/third_party/boringssl/crypto/fipsmodule/bn/mul.c +0 -876
  1561. data/third_party/boringssl/crypto/fipsmodule/bn/prime.c +0 -1154
  1562. data/third_party/boringssl/crypto/fipsmodule/bn/random.c +0 -351
  1563. data/third_party/boringssl/crypto/fipsmodule/bn/rsaz_exp.c +0 -231
  1564. data/third_party/boringssl/crypto/fipsmodule/bn/rsaz_exp.h +0 -33
  1565. data/third_party/boringssl/crypto/fipsmodule/bn/shift.c +0 -364
  1566. data/third_party/boringssl/crypto/fipsmodule/cipher/cipher.c +0 -615
  1567. data/third_party/boringssl/crypto/fipsmodule/cipher/e_aes.c +0 -1437
  1568. data/third_party/boringssl/crypto/fipsmodule/cipher/e_des.c +0 -233
  1569. data/third_party/boringssl/crypto/fipsmodule/cipher/internal.h +0 -129
  1570. data/third_party/boringssl/crypto/fipsmodule/delocate.h +0 -88
  1571. data/third_party/boringssl/crypto/fipsmodule/digest/digest.c +0 -256
  1572. data/third_party/boringssl/crypto/fipsmodule/digest/digests.c +0 -280
  1573. data/third_party/boringssl/crypto/fipsmodule/digest/md32_common.h +0 -268
  1574. data/third_party/boringssl/crypto/fipsmodule/ec/ec.c +0 -974
  1575. data/third_party/boringssl/crypto/fipsmodule/ec/ec_key.c +0 -453
  1576. data/third_party/boringssl/crypto/fipsmodule/ec/ec_montgomery.c +0 -270
  1577. data/third_party/boringssl/crypto/fipsmodule/ec/internal.h +0 -337
  1578. data/third_party/boringssl/crypto/fipsmodule/ec/oct.c +0 -373
  1579. data/third_party/boringssl/crypto/fipsmodule/ec/p224-64.c +0 -1104
  1580. data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64-table.h +0 -9503
  1581. data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64.c +0 -447
  1582. data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64.h +0 -117
  1583. data/third_party/boringssl/crypto/fipsmodule/ec/simple.c +0 -1046
  1584. data/third_party/boringssl/crypto/fipsmodule/ec/util.c +0 -104
  1585. data/third_party/boringssl/crypto/fipsmodule/ec/wnaf.c +0 -354
  1586. data/third_party/boringssl/crypto/fipsmodule/ecdsa/ecdsa.c +0 -458
  1587. data/third_party/boringssl/crypto/fipsmodule/is_fips.c +0 -27
  1588. data/third_party/boringssl/crypto/fipsmodule/md4/md4.c +0 -254
  1589. data/third_party/boringssl/crypto/fipsmodule/md5/md5.c +0 -298
  1590. data/third_party/boringssl/crypto/fipsmodule/modes/cbc.c +0 -211
  1591. data/third_party/boringssl/crypto/fipsmodule/modes/ccm.c +0 -256
  1592. data/third_party/boringssl/crypto/fipsmodule/modes/cfb.c +0 -234
  1593. data/third_party/boringssl/crypto/fipsmodule/modes/ctr.c +0 -220
  1594. data/third_party/boringssl/crypto/fipsmodule/modes/gcm.c +0 -1063
  1595. data/third_party/boringssl/crypto/fipsmodule/modes/internal.h +0 -388
  1596. data/third_party/boringssl/crypto/fipsmodule/modes/ofb.c +0 -95
  1597. data/third_party/boringssl/crypto/fipsmodule/rand/ctrdrbg.c +0 -202
  1598. data/third_party/boringssl/crypto/fipsmodule/rand/internal.h +0 -92
  1599. data/third_party/boringssl/crypto/fipsmodule/rand/rand.c +0 -358
  1600. data/third_party/boringssl/crypto/fipsmodule/rand/urandom.c +0 -302
  1601. data/third_party/boringssl/crypto/fipsmodule/rsa/blinding.c +0 -239
  1602. data/third_party/boringssl/crypto/fipsmodule/rsa/internal.h +0 -126
  1603. data/third_party/boringssl/crypto/fipsmodule/rsa/padding.c +0 -692
  1604. data/third_party/boringssl/crypto/fipsmodule/rsa/rsa.c +0 -875
  1605. data/third_party/boringssl/crypto/fipsmodule/rsa/rsa_impl.c +0 -1218
  1606. data/third_party/boringssl/crypto/fipsmodule/self_check/self_check.c +0 -581
  1607. data/third_party/boringssl/crypto/fipsmodule/sha/sha1.c +0 -375
  1608. data/third_party/boringssl/crypto/fipsmodule/sha/sha256.c +0 -337
  1609. data/third_party/boringssl/crypto/fipsmodule/sha/sha512.c +0 -608
  1610. data/third_party/boringssl/crypto/internal.h +0 -739
  1611. data/third_party/boringssl/crypto/lhash/lhash.c +0 -336
  1612. data/third_party/boringssl/crypto/mem.c +0 -235
  1613. data/third_party/boringssl/crypto/obj/obj.c +0 -554
  1614. data/third_party/boringssl/crypto/obj/obj_dat.h +0 -6244
  1615. data/third_party/boringssl/crypto/pem/pem_all.c +0 -262
  1616. data/third_party/boringssl/crypto/pem/pem_info.c +0 -379
  1617. data/third_party/boringssl/crypto/pem/pem_lib.c +0 -776
  1618. data/third_party/boringssl/crypto/pem/pem_oth.c +0 -88
  1619. data/third_party/boringssl/crypto/pem/pem_pk8.c +0 -258
  1620. data/third_party/boringssl/crypto/pem/pem_pkey.c +0 -227
  1621. data/third_party/boringssl/crypto/pkcs7/pkcs7.c +0 -166
  1622. data/third_party/boringssl/crypto/pkcs7/pkcs7_x509.c +0 -233
  1623. data/third_party/boringssl/crypto/pkcs8/internal.h +0 -120
  1624. data/third_party/boringssl/crypto/pkcs8/p5_pbev2.c +0 -307
  1625. data/third_party/boringssl/crypto/pkcs8/pkcs8.c +0 -513
  1626. data/third_party/boringssl/crypto/pkcs8/pkcs8_x509.c +0 -789
  1627. data/third_party/boringssl/crypto/poly1305/poly1305.c +0 -318
  1628. data/third_party/boringssl/crypto/poly1305/poly1305_arm.c +0 -304
  1629. data/third_party/boringssl/crypto/poly1305/poly1305_vec.c +0 -839
  1630. data/third_party/boringssl/crypto/pool/internal.h +0 -45
  1631. data/third_party/boringssl/crypto/pool/pool.c +0 -200
  1632. data/third_party/boringssl/crypto/rand_extra/deterministic.c +0 -48
  1633. data/third_party/boringssl/crypto/rand_extra/fuchsia.c +0 -43
  1634. data/third_party/boringssl/crypto/rand_extra/windows.c +0 -53
  1635. data/third_party/boringssl/crypto/refcount_lock.c +0 -53
  1636. data/third_party/boringssl/crypto/stack/stack.c +0 -380
  1637. data/third_party/boringssl/crypto/thread_none.c +0 -59
  1638. data/third_party/boringssl/crypto/thread_pthread.c +0 -206
  1639. data/third_party/boringssl/crypto/thread_win.c +0 -237
  1640. data/third_party/boringssl/crypto/x509/a_strex.c +0 -633
  1641. data/third_party/boringssl/crypto/x509/a_verify.c +0 -115
  1642. data/third_party/boringssl/crypto/x509/asn1_gen.c +0 -841
  1643. data/third_party/boringssl/crypto/x509/by_dir.c +0 -451
  1644. data/third_party/boringssl/crypto/x509/by_file.c +0 -274
  1645. data/third_party/boringssl/crypto/x509/t_crl.c +0 -128
  1646. data/third_party/boringssl/crypto/x509/t_req.c +0 -246
  1647. data/third_party/boringssl/crypto/x509/t_x509.c +0 -547
  1648. data/third_party/boringssl/crypto/x509/x509_cmp.c +0 -477
  1649. data/third_party/boringssl/crypto/x509/x509_def.c +0 -103
  1650. data/third_party/boringssl/crypto/x509/x509_lu.c +0 -725
  1651. data/third_party/boringssl/crypto/x509/x509_obj.c +0 -198
  1652. data/third_party/boringssl/crypto/x509/x509_r2x.c +0 -117
  1653. data/third_party/boringssl/crypto/x509/x509_req.c +0 -322
  1654. data/third_party/boringssl/crypto/x509/x509_set.c +0 -164
  1655. data/third_party/boringssl/crypto/x509/x509_trs.c +0 -326
  1656. data/third_party/boringssl/crypto/x509/x509_txt.c +0 -205
  1657. data/third_party/boringssl/crypto/x509/x509_vfy.c +0 -2476
  1658. data/third_party/boringssl/crypto/x509/x509_vpm.c +0 -670
  1659. data/third_party/boringssl/crypto/x509/x509cset.c +0 -170
  1660. data/third_party/boringssl/crypto/x509/x509name.c +0 -389
  1661. data/third_party/boringssl/crypto/x509/x_all.c +0 -501
  1662. data/third_party/boringssl/crypto/x509/x_x509.c +0 -328
  1663. data/third_party/boringssl/crypto/x509v3/ext_dat.h +0 -143
  1664. data/third_party/boringssl/crypto/x509v3/pcy_cache.c +0 -284
  1665. data/third_party/boringssl/crypto/x509v3/pcy_node.c +0 -188
  1666. data/third_party/boringssl/crypto/x509v3/pcy_tree.c +0 -840
  1667. data/third_party/boringssl/crypto/x509v3/v3_akey.c +0 -204
  1668. data/third_party/boringssl/crypto/x509v3/v3_alt.c +0 -623
  1669. data/third_party/boringssl/crypto/x509v3/v3_conf.c +0 -462
  1670. data/third_party/boringssl/crypto/x509v3/v3_cpols.c +0 -502
  1671. data/third_party/boringssl/crypto/x509v3/v3_enum.c +0 -100
  1672. data/third_party/boringssl/crypto/x509v3/v3_genn.c +0 -251
  1673. data/third_party/boringssl/crypto/x509v3/v3_info.c +0 -219
  1674. data/third_party/boringssl/crypto/x509v3/v3_lib.c +0 -370
  1675. data/third_party/boringssl/crypto/x509v3/v3_pci.c +0 -287
  1676. data/third_party/boringssl/crypto/x509v3/v3_purp.c +0 -866
  1677. data/third_party/boringssl/crypto/x509v3/v3_skey.c +0 -152
  1678. data/third_party/boringssl/crypto/x509v3/v3_utl.c +0 -1352
  1679. data/third_party/boringssl/include/openssl/aead.h +0 -433
  1680. data/third_party/boringssl/include/openssl/aes.h +0 -170
  1681. data/third_party/boringssl/include/openssl/asn1.h +0 -981
  1682. data/third_party/boringssl/include/openssl/base.h +0 -457
  1683. data/third_party/boringssl/include/openssl/base64.h +0 -187
  1684. data/third_party/boringssl/include/openssl/bio.h +0 -902
  1685. data/third_party/boringssl/include/openssl/blowfish.h +0 -93
  1686. data/third_party/boringssl/include/openssl/bn.h +0 -1019
  1687. data/third_party/boringssl/include/openssl/buf.h +0 -137
  1688. data/third_party/boringssl/include/openssl/bytestring.h +0 -505
  1689. data/third_party/boringssl/include/openssl/cast.h +0 -96
  1690. data/third_party/boringssl/include/openssl/cipher.h +0 -608
  1691. data/third_party/boringssl/include/openssl/cmac.h +0 -87
  1692. data/third_party/boringssl/include/openssl/conf.h +0 -183
  1693. data/third_party/boringssl/include/openssl/cpu.h +0 -196
  1694. data/third_party/boringssl/include/openssl/crypto.h +0 -122
  1695. data/third_party/boringssl/include/openssl/curve25519.h +0 -201
  1696. data/third_party/boringssl/include/openssl/dh.h +0 -298
  1697. data/third_party/boringssl/include/openssl/digest.h +0 -316
  1698. data/third_party/boringssl/include/openssl/dsa.h +0 -435
  1699. data/third_party/boringssl/include/openssl/ec.h +0 -413
  1700. data/third_party/boringssl/include/openssl/ec_key.h +0 -342
  1701. data/third_party/boringssl/include/openssl/ecdh.h +0 -101
  1702. data/third_party/boringssl/include/openssl/ecdsa.h +0 -199
  1703. data/third_party/boringssl/include/openssl/engine.h +0 -109
  1704. data/third_party/boringssl/include/openssl/err.h +0 -458
  1705. data/third_party/boringssl/include/openssl/evp.h +0 -873
  1706. data/third_party/boringssl/include/openssl/hmac.h +0 -186
  1707. data/third_party/boringssl/include/openssl/lhash.h +0 -174
  1708. data/third_party/boringssl/include/openssl/lhash_macros.h +0 -174
  1709. data/third_party/boringssl/include/openssl/md4.h +0 -106
  1710. data/third_party/boringssl/include/openssl/md5.h +0 -107
  1711. data/third_party/boringssl/include/openssl/mem.h +0 -156
  1712. data/third_party/boringssl/include/openssl/nid.h +0 -4242
  1713. data/third_party/boringssl/include/openssl/obj.h +0 -233
  1714. data/third_party/boringssl/include/openssl/pem.h +0 -397
  1715. data/third_party/boringssl/include/openssl/pkcs7.h +0 -82
  1716. data/third_party/boringssl/include/openssl/pkcs8.h +0 -230
  1717. data/third_party/boringssl/include/openssl/poly1305.h +0 -51
  1718. data/third_party/boringssl/include/openssl/pool.h +0 -91
  1719. data/third_party/boringssl/include/openssl/rand.h +0 -125
  1720. data/third_party/boringssl/include/openssl/ripemd.h +0 -107
  1721. data/third_party/boringssl/include/openssl/rsa.h +0 -756
  1722. data/third_party/boringssl/include/openssl/sha.h +0 -256
  1723. data/third_party/boringssl/include/openssl/span.h +0 -191
  1724. data/third_party/boringssl/include/openssl/ssl.h +0 -4740
  1725. data/third_party/boringssl/include/openssl/ssl3.h +0 -332
  1726. data/third_party/boringssl/include/openssl/stack.h +0 -485
  1727. data/third_party/boringssl/include/openssl/thread.h +0 -191
  1728. data/third_party/boringssl/include/openssl/tls1.h +0 -618
  1729. data/third_party/boringssl/include/openssl/type_check.h +0 -91
  1730. data/third_party/boringssl/include/openssl/x509.h +0 -1180
  1731. data/third_party/boringssl/include/openssl/x509_vfy.h +0 -614
  1732. data/third_party/boringssl/include/openssl/x509v3.h +0 -827
  1733. data/third_party/boringssl/ssl/custom_extensions.cc +0 -265
  1734. data/third_party/boringssl/ssl/d1_both.cc +0 -851
  1735. data/third_party/boringssl/ssl/d1_lib.cc +0 -267
  1736. data/third_party/boringssl/ssl/d1_pkt.cc +0 -274
  1737. data/third_party/boringssl/ssl/d1_srtp.cc +0 -232
  1738. data/third_party/boringssl/ssl/dtls_method.cc +0 -193
  1739. data/third_party/boringssl/ssl/dtls_record.cc +0 -353
  1740. data/third_party/boringssl/ssl/handoff.cc +0 -285
  1741. data/third_party/boringssl/ssl/handshake.cc +0 -630
  1742. data/third_party/boringssl/ssl/handshake_client.cc +0 -1842
  1743. data/third_party/boringssl/ssl/handshake_server.cc +0 -1674
  1744. data/third_party/boringssl/ssl/internal.h +0 -3064
  1745. data/third_party/boringssl/ssl/s3_both.cc +0 -585
  1746. data/third_party/boringssl/ssl/s3_lib.cc +0 -226
  1747. data/third_party/boringssl/ssl/s3_pkt.cc +0 -425
  1748. data/third_party/boringssl/ssl/ssl_aead_ctx.cc +0 -412
  1749. data/third_party/boringssl/ssl/ssl_asn1.cc +0 -844
  1750. data/third_party/boringssl/ssl/ssl_buffer.cc +0 -286
  1751. data/third_party/boringssl/ssl/ssl_cert.cc +0 -913
  1752. data/third_party/boringssl/ssl/ssl_cipher.cc +0 -1781
  1753. data/third_party/boringssl/ssl/ssl_file.cc +0 -583
  1754. data/third_party/boringssl/ssl/ssl_key_share.cc +0 -252
  1755. data/third_party/boringssl/ssl/ssl_lib.cc +0 -2719
  1756. data/third_party/boringssl/ssl/ssl_privkey.cc +0 -494
  1757. data/third_party/boringssl/ssl/ssl_session.cc +0 -1221
  1758. data/third_party/boringssl/ssl/ssl_stat.cc +0 -224
  1759. data/third_party/boringssl/ssl/ssl_transcript.cc +0 -398
  1760. data/third_party/boringssl/ssl/ssl_versions.cc +0 -399
  1761. data/third_party/boringssl/ssl/ssl_x509.cc +0 -1297
  1762. data/third_party/boringssl/ssl/t1_enc.cc +0 -452
  1763. data/third_party/boringssl/ssl/t1_lib.cc +0 -3783
  1764. data/third_party/boringssl/ssl/tls13_both.cc +0 -559
  1765. data/third_party/boringssl/ssl/tls13_client.cc +0 -891
  1766. data/third_party/boringssl/ssl/tls13_enc.cc +0 -493
  1767. data/third_party/boringssl/ssl/tls13_server.cc +0 -1022
  1768. data/third_party/boringssl/ssl/tls_method.cc +0 -274
  1769. data/third_party/boringssl/ssl/tls_record.cc +0 -703
  1770. data/third_party/boringssl/third_party/fiat/curve25519.c +0 -3230
  1771. data/third_party/boringssl/third_party/fiat/curve25519_tables.h +0 -7880
  1772. data/third_party/boringssl/third_party/fiat/internal.h +0 -154
  1773. data/third_party/boringssl/third_party/fiat/p256.c +0 -1824
  1774. data/third_party/nanopb/pb.h +0 -579
  1775. data/third_party/nanopb/pb_common.c +0 -97
  1776. data/third_party/nanopb/pb_common.h +0 -42
  1777. data/third_party/nanopb/pb_decode.c +0 -1347
  1778. data/third_party/nanopb/pb_decode.h +0 -149
  1779. data/third_party/nanopb/pb_encode.c +0 -696
  1780. data/third_party/nanopb/pb_encode.h +0 -154
@@ -43,20 +43,18 @@ namespace grpc_core {
43
43
  class Chttp2IncomingByteStream;
44
44
  } // namespace grpc_core
45
45
 
46
- typedef struct {
47
- grpc_chttp2_stream_state state;
48
- uint8_t frame_type;
49
- uint32_t frame_size;
50
- grpc_error* error;
46
+ struct grpc_chttp2_data_parser {
47
+ grpc_chttp2_data_parser() = default;
48
+ ~grpc_chttp2_data_parser();
51
49
 
52
- bool is_frame_compressed;
53
- grpc_core::Chttp2IncomingByteStream* parsing_frame;
54
- } grpc_chttp2_data_parser;
50
+ grpc_chttp2_stream_state state = GRPC_CHTTP2_DATA_FH_0;
51
+ uint8_t frame_type = 0;
52
+ uint32_t frame_size = 0;
53
+ grpc_error* error = GRPC_ERROR_NONE;
55
54
 
56
- /* initialize per-stream state for data frame parsing */
57
- grpc_error* grpc_chttp2_data_parser_init(grpc_chttp2_data_parser* parser);
58
-
59
- void grpc_chttp2_data_parser_destroy(grpc_chttp2_data_parser* parser);
55
+ bool is_frame_compressed = false;
56
+ grpc_core::Chttp2IncomingByteStream* parsing_frame = nullptr;
57
+ };
60
58
 
61
59
  /* start processing a new data frame */
62
60
  grpc_error* grpc_chttp2_data_parser_begin_frame(grpc_chttp2_data_parser* parser,
@@ -69,7 +67,7 @@ grpc_error* grpc_chttp2_data_parser_begin_frame(grpc_chttp2_data_parser* parser,
69
67
  grpc_error* grpc_chttp2_data_parser_parse(void* parser,
70
68
  grpc_chttp2_transport* t,
71
69
  grpc_chttp2_stream* s,
72
- grpc_slice slice, int is_last);
70
+ const grpc_slice& slice, int is_last);
73
71
 
74
72
  void grpc_chttp2_encode_data(uint32_t id, grpc_slice_buffer* inbuf,
75
73
  uint32_t write_bytes, int is_eof,
@@ -37,7 +37,7 @@ void grpc_chttp2_goaway_parser_destroy(grpc_chttp2_goaway_parser* p) {
37
37
 
38
38
  grpc_error* grpc_chttp2_goaway_parser_begin_frame(grpc_chttp2_goaway_parser* p,
39
39
  uint32_t length,
40
- uint8_t flags) {
40
+ uint8_t /*flags*/) {
41
41
  if (length < 8) {
42
42
  char* msg;
43
43
  gpr_asprintf(&msg, "goaway frame too short (%d bytes)", length);
@@ -56,11 +56,12 @@ grpc_error* grpc_chttp2_goaway_parser_begin_frame(grpc_chttp2_goaway_parser* p,
56
56
 
57
57
  grpc_error* grpc_chttp2_goaway_parser_parse(void* parser,
58
58
  grpc_chttp2_transport* t,
59
- grpc_chttp2_stream* s,
60
- grpc_slice slice, int is_last) {
61
- uint8_t* const beg = GRPC_SLICE_START_PTR(slice);
62
- uint8_t* const end = GRPC_SLICE_END_PTR(slice);
63
- uint8_t* cur = beg;
59
+ grpc_chttp2_stream* /*s*/,
60
+ const grpc_slice& slice,
61
+ int is_last) {
62
+ const uint8_t* const beg = GRPC_SLICE_START_PTR(slice);
63
+ const uint8_t* const end = GRPC_SLICE_END_PTR(slice);
64
+ const uint8_t* cur = beg;
64
65
  grpc_chttp2_goaway_parser* p =
65
66
  static_cast<grpc_chttp2_goaway_parser*>(parser);
66
67
 
@@ -138,7 +139,7 @@ grpc_error* grpc_chttp2_goaway_parser_parse(void* parser,
138
139
  p->state = GRPC_CHTTP2_GOAWAY_DEBUG;
139
140
  if (is_last) {
140
141
  grpc_chttp2_add_incoming_goaway(
141
- t, p->error_code,
142
+ t, p->error_code, p->last_stream_id,
142
143
  grpc_slice_new(p->debug_data, p->debug_length, gpr_free));
143
144
  p->debug_data = nullptr;
144
145
  }
@@ -149,7 +150,7 @@ grpc_error* grpc_chttp2_goaway_parser_parse(void* parser,
149
150
  }
150
151
 
151
152
  void grpc_chttp2_goaway_append(uint32_t last_stream_id, uint32_t error_code,
152
- grpc_slice debug_data,
153
+ const grpc_slice& debug_data,
153
154
  grpc_slice_buffer* slice_buffer) {
154
155
  grpc_slice header = GRPC_SLICE_MALLOC(9 + 4 + 4);
155
156
  uint8_t* p = GRPC_SLICE_START_PTR(header);
@@ -37,15 +37,14 @@ typedef enum {
37
37
  GRPC_CHTTP2_GOAWAY_DEBUG
38
38
  } grpc_chttp2_goaway_parse_state;
39
39
 
40
- typedef struct {
40
+ struct grpc_chttp2_goaway_parser {
41
41
  grpc_chttp2_goaway_parse_state state;
42
42
  uint32_t last_stream_id;
43
43
  uint32_t error_code;
44
44
  char* debug_data;
45
45
  uint32_t debug_length;
46
46
  uint32_t debug_pos;
47
- } grpc_chttp2_goaway_parser;
48
-
47
+ };
49
48
  void grpc_chttp2_goaway_parser_init(grpc_chttp2_goaway_parser* p);
50
49
  void grpc_chttp2_goaway_parser_destroy(grpc_chttp2_goaway_parser* p);
51
50
  grpc_error* grpc_chttp2_goaway_parser_begin_frame(
@@ -53,10 +52,11 @@ grpc_error* grpc_chttp2_goaway_parser_begin_frame(
53
52
  grpc_error* grpc_chttp2_goaway_parser_parse(void* parser,
54
53
  grpc_chttp2_transport* t,
55
54
  grpc_chttp2_stream* s,
56
- grpc_slice slice, int is_last);
55
+ const grpc_slice& slice,
56
+ int is_last);
57
57
 
58
58
  void grpc_chttp2_goaway_append(uint32_t last_stream_id, uint32_t error_code,
59
- grpc_slice debug_data,
59
+ const grpc_slice& debug_data,
60
60
  grpc_slice_buffer* slice_buffer);
61
61
 
62
62
  #endif /* GRPC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_FRAME_GOAWAY_H */
@@ -72,11 +72,12 @@ grpc_error* grpc_chttp2_ping_parser_begin_frame(grpc_chttp2_ping_parser* parser,
72
72
 
73
73
  grpc_error* grpc_chttp2_ping_parser_parse(void* parser,
74
74
  grpc_chttp2_transport* t,
75
- grpc_chttp2_stream* s,
76
- grpc_slice slice, int is_last) {
77
- uint8_t* const beg = GRPC_SLICE_START_PTR(slice);
78
- uint8_t* const end = GRPC_SLICE_END_PTR(slice);
79
- uint8_t* cur = beg;
75
+ grpc_chttp2_stream* /*s*/,
76
+ const grpc_slice& slice,
77
+ int is_last) {
78
+ const uint8_t* const beg = GRPC_SLICE_START_PTR(slice);
79
+ const uint8_t* const end = GRPC_SLICE_END_PTR(slice);
80
+ const uint8_t* cur = beg;
80
81
  grpc_chttp2_ping_parser* p = static_cast<grpc_chttp2_ping_parser*>(parser);
81
82
 
82
83
  while (p->byte != 8 && cur != end) {
@@ -117,6 +118,7 @@ grpc_error* grpc_chttp2_ping_parser_parse(void* parser,
117
118
  t->ping_acks = static_cast<uint64_t*>(gpr_realloc(
118
119
  t->ping_acks, t->ping_ack_capacity * sizeof(*t->ping_acks)));
119
120
  }
121
+ t->num_pending_induced_frames++;
120
122
  t->ping_acks[t->ping_ack_count++] = p->opaque_8bytes;
121
123
  grpc_chttp2_initiate_write(t, GRPC_CHTTP2_INITIATE_WRITE_PING_RESPONSE);
122
124
  }
@@ -24,12 +24,11 @@
24
24
  #include <grpc/slice.h>
25
25
  #include "src/core/ext/transport/chttp2/transport/frame.h"
26
26
 
27
- typedef struct {
27
+ struct grpc_chttp2_ping_parser {
28
28
  uint8_t byte;
29
29
  uint8_t is_ack;
30
30
  uint64_t opaque_8bytes;
31
- } grpc_chttp2_ping_parser;
32
-
31
+ };
33
32
  grpc_slice grpc_chttp2_ping_create(uint8_t ack, uint64_t opaque_8bytes);
34
33
 
35
34
  grpc_error* grpc_chttp2_ping_parser_begin_frame(grpc_chttp2_ping_parser* parser,
@@ -37,7 +36,7 @@ grpc_error* grpc_chttp2_ping_parser_begin_frame(grpc_chttp2_ping_parser* parser,
37
36
  grpc_error* grpc_chttp2_ping_parser_parse(void* parser,
38
37
  grpc_chttp2_transport* t,
39
38
  grpc_chttp2_stream* s,
40
- grpc_slice slice, int is_last);
39
+ const grpc_slice& slice, int is_last);
41
40
 
42
41
  /* Test-only function for disabling ping ack */
43
42
  void grpc_set_disable_ping_ack(bool disable_ping_ack);
@@ -26,13 +26,14 @@
26
26
  #include <grpc/support/string_util.h>
27
27
 
28
28
  #include "src/core/ext/transport/chttp2/transport/frame.h"
29
+ #include "src/core/lib/gprpp/memory.h"
29
30
  #include "src/core/lib/transport/http2_errors.h"
30
31
 
31
32
  grpc_slice grpc_chttp2_rst_stream_create(uint32_t id, uint32_t code,
32
33
  grpc_transport_one_way_stats* stats) {
33
34
  static const size_t frame_size = 13;
34
35
  grpc_slice slice = GRPC_SLICE_MALLOC(frame_size);
35
- stats->framing_bytes += frame_size;
36
+ if (stats != nullptr) stats->framing_bytes += frame_size;
36
37
  uint8_t* p = GRPC_SLICE_START_PTR(slice);
37
38
 
38
39
  // Frame size.
@@ -57,6 +58,14 @@ grpc_slice grpc_chttp2_rst_stream_create(uint32_t id, uint32_t code,
57
58
  return slice;
58
59
  }
59
60
 
61
+ void grpc_chttp2_add_rst_stream_to_next_write(
62
+ grpc_chttp2_transport* t, uint32_t id, uint32_t code,
63
+ grpc_transport_one_way_stats* stats) {
64
+ t->num_pending_induced_frames++;
65
+ grpc_slice_buffer_add(&t->qbuf,
66
+ grpc_chttp2_rst_stream_create(id, code, stats));
67
+ }
68
+
60
69
  grpc_error* grpc_chttp2_rst_stream_parser_begin_frame(
61
70
  grpc_chttp2_rst_stream_parser* parser, uint32_t length, uint8_t flags) {
62
71
  if (length != 4) {
@@ -74,10 +83,11 @@ grpc_error* grpc_chttp2_rst_stream_parser_begin_frame(
74
83
  grpc_error* grpc_chttp2_rst_stream_parser_parse(void* parser,
75
84
  grpc_chttp2_transport* t,
76
85
  grpc_chttp2_stream* s,
77
- grpc_slice slice, int is_last) {
78
- uint8_t* const beg = GRPC_SLICE_START_PTR(slice);
79
- uint8_t* const end = GRPC_SLICE_END_PTR(slice);
80
- uint8_t* cur = beg;
86
+ const grpc_slice& slice,
87
+ int is_last) {
88
+ const uint8_t* const beg = GRPC_SLICE_START_PTR(slice);
89
+ const uint8_t* const end = GRPC_SLICE_END_PTR(slice);
90
+ const uint8_t* cur = beg;
81
91
  grpc_chttp2_rst_stream_parser* p =
82
92
  static_cast<grpc_chttp2_rst_stream_parser*>(parser);
83
93
 
@@ -101,9 +111,9 @@ grpc_error* grpc_chttp2_rst_stream_parser_parse(void* parser,
101
111
  error = grpc_error_set_int(
102
112
  grpc_error_set_str(GRPC_ERROR_CREATE_FROM_STATIC_STRING("RST_STREAM"),
103
113
  GRPC_ERROR_STR_GRPC_MESSAGE,
104
- grpc_slice_from_copied_string(message)),
114
+ grpc_slice_from_moved_string(
115
+ grpc_core::UniquePtr<char>(message))),
105
116
  GRPC_ERROR_INT_HTTP2_ERROR, static_cast<intptr_t>(reason));
106
- gpr_free(message);
107
117
  }
108
118
  grpc_chttp2_mark_stream_closed(t, s, true, true, error);
109
119
  }
@@ -25,19 +25,26 @@
25
25
  #include "src/core/ext/transport/chttp2/transport/frame.h"
26
26
  #include "src/core/lib/transport/transport.h"
27
27
 
28
- typedef struct {
28
+ struct grpc_chttp2_rst_stream_parser {
29
29
  uint8_t byte;
30
30
  uint8_t reason_bytes[4];
31
- } grpc_chttp2_rst_stream_parser;
32
-
31
+ };
33
32
  grpc_slice grpc_chttp2_rst_stream_create(uint32_t stream_id, uint32_t code,
34
33
  grpc_transport_one_way_stats* stats);
35
34
 
35
+ // Adds RST_STREAM frame to t->qbuf (buffer for the next write). Should be
36
+ // called when we want to add RST_STREAM and we are not in
37
+ // write_action_begin_locked.
38
+ void grpc_chttp2_add_rst_stream_to_next_write(
39
+ grpc_chttp2_transport* t, uint32_t id, uint32_t code,
40
+ grpc_transport_one_way_stats* stats);
41
+
36
42
  grpc_error* grpc_chttp2_rst_stream_parser_begin_frame(
37
43
  grpc_chttp2_rst_stream_parser* parser, uint32_t length, uint8_t flags);
38
44
  grpc_error* grpc_chttp2_rst_stream_parser_parse(void* parser,
39
45
  grpc_chttp2_transport* t,
40
46
  grpc_chttp2_stream* s,
41
- grpc_slice slice, int is_last);
47
+ const grpc_slice& slice,
48
+ int is_last);
42
49
 
43
50
  #endif /* GRPC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_FRAME_RST_STREAM_H */
@@ -110,8 +110,9 @@ grpc_error* grpc_chttp2_settings_parser_begin_frame(
110
110
  }
111
111
 
112
112
  grpc_error* grpc_chttp2_settings_parser_parse(void* p, grpc_chttp2_transport* t,
113
- grpc_chttp2_stream* s,
114
- grpc_slice slice, int is_last) {
113
+ grpc_chttp2_stream* /*s*/,
114
+ const grpc_slice& slice,
115
+ int is_last) {
115
116
  grpc_chttp2_settings_parser* parser =
116
117
  static_cast<grpc_chttp2_settings_parser*>(p);
117
118
  const uint8_t* cur = GRPC_SLICE_START_PTR(slice);
@@ -131,10 +132,12 @@ grpc_error* grpc_chttp2_settings_parser_parse(void* p, grpc_chttp2_transport* t,
131
132
  if (is_last) {
132
133
  memcpy(parser->target_settings, parser->incoming_settings,
133
134
  GRPC_CHTTP2_NUM_SETTINGS * sizeof(uint32_t));
135
+ t->num_pending_induced_frames++;
134
136
  grpc_slice_buffer_add(&t->qbuf, grpc_chttp2_settings_ack_create());
135
137
  if (t->notify_on_receive_settings != nullptr) {
136
- GRPC_CLOSURE_SCHED(t->notify_on_receive_settings,
137
- GRPC_ERROR_NONE);
138
+ grpc_core::ExecCtx::Run(DEBUG_LOCATION,
139
+ t->notify_on_receive_settings,
140
+ GRPC_ERROR_NONE);
138
141
  t->notify_on_receive_settings = nullptr;
139
142
  }
140
143
  }
@@ -216,19 +219,20 @@ grpc_error* grpc_chttp2_settings_parser_parse(void* p, grpc_chttp2_transport* t,
216
219
  parser->incoming_settings[id] != parser->value) {
217
220
  t->initial_window_update += static_cast<int64_t>(parser->value) -
218
221
  parser->incoming_settings[id];
219
- if (grpc_http_trace.enabled() || grpc_flowctl_trace.enabled()) {
222
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_http_trace) ||
223
+ GRPC_TRACE_FLAG_ENABLED(grpc_flowctl_trace)) {
220
224
  gpr_log(GPR_INFO, "%p[%s] adding %d for initial_window change", t,
221
225
  t->is_client ? "cli" : "svr",
222
226
  static_cast<int>(t->initial_window_update));
223
227
  }
224
228
  }
225
229
  parser->incoming_settings[id] = parser->value;
226
- if (grpc_http_trace.enabled()) {
230
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_http_trace)) {
227
231
  gpr_log(GPR_INFO, "CHTTP2:%s:%s: got setting %s = %d",
228
232
  t->is_client ? "CLI" : "SVR", t->peer_string, sp->name,
229
233
  parser->value);
230
234
  }
231
- } else if (grpc_http_trace.enabled()) {
235
+ } else if (GRPC_TRACE_FLAG_ENABLED(grpc_http_trace)) {
232
236
  gpr_log(GPR_ERROR, "CHTTP2: Ignoring unknown setting %d (value %d)",
233
237
  parser->id, parser->value);
234
238
  }
@@ -34,15 +34,14 @@ typedef enum {
34
34
  GRPC_CHTTP2_SPS_VAL3
35
35
  } grpc_chttp2_settings_parse_state;
36
36
 
37
- typedef struct {
37
+ struct grpc_chttp2_settings_parser {
38
38
  grpc_chttp2_settings_parse_state state;
39
39
  uint32_t* target_settings;
40
40
  uint8_t is_ack;
41
41
  uint16_t id;
42
42
  uint32_t value;
43
43
  uint32_t incoming_settings[GRPC_CHTTP2_NUM_SETTINGS];
44
- } grpc_chttp2_settings_parser;
45
-
44
+ };
46
45
  /* Create a settings frame by diffing old & new, and updating old to be new */
47
46
  grpc_slice grpc_chttp2_settings_create(uint32_t* old, const uint32_t* newval,
48
47
  uint32_t force_mask, size_t count);
@@ -55,6 +54,7 @@ grpc_error* grpc_chttp2_settings_parser_begin_frame(
55
54
  grpc_error* grpc_chttp2_settings_parser_parse(void* parser,
56
55
  grpc_chttp2_transport* t,
57
56
  grpc_chttp2_stream* s,
58
- grpc_slice slice, int is_last);
57
+ const grpc_slice& slice,
58
+ int is_last);
59
59
 
60
60
  #endif /* GRPC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_FRAME_SETTINGS_H */
@@ -69,11 +69,11 @@ grpc_error* grpc_chttp2_window_update_parser_begin_frame(
69
69
  grpc_error* grpc_chttp2_window_update_parser_parse(void* parser,
70
70
  grpc_chttp2_transport* t,
71
71
  grpc_chttp2_stream* s,
72
- grpc_slice slice,
72
+ const grpc_slice& slice,
73
73
  int is_last) {
74
- uint8_t* const beg = GRPC_SLICE_START_PTR(slice);
75
- uint8_t* const end = GRPC_SLICE_END_PTR(slice);
76
- uint8_t* cur = beg;
74
+ const uint8_t* const beg = GRPC_SLICE_START_PTR(slice);
75
+ const uint8_t* const end = GRPC_SLICE_END_PTR(slice);
76
+ const uint8_t* cur = beg;
77
77
  grpc_chttp2_window_update_parser* p =
78
78
  static_cast<grpc_chttp2_window_update_parser*>(parser);
79
79
 
@@ -88,8 +88,9 @@ grpc_error* grpc_chttp2_window_update_parser_parse(void* parser,
88
88
  }
89
89
 
90
90
  if (p->byte == 4) {
91
- uint32_t received_update = p->amount;
92
- if (received_update == 0 || (received_update & 0x80000000u)) {
91
+ // top bit is reserved and must be ignored.
92
+ uint32_t received_update = p->amount & 0x7fffffffu;
93
+ if (received_update == 0) {
93
94
  char* msg;
94
95
  gpr_asprintf(&msg, "invalid window update bytes: %d", p->amount);
95
96
  grpc_error* err = GRPC_ERROR_CREATE_FROM_COPIED_STRING(msg);
@@ -25,12 +25,11 @@
25
25
  #include "src/core/ext/transport/chttp2/transport/frame.h"
26
26
  #include "src/core/lib/transport/transport.h"
27
27
 
28
- typedef struct {
28
+ struct grpc_chttp2_window_update_parser {
29
29
  uint8_t byte;
30
30
  uint8_t is_connection_update;
31
31
  uint32_t amount;
32
- } grpc_chttp2_window_update_parser;
33
-
32
+ };
34
33
  grpc_slice grpc_chttp2_window_update_create(
35
34
  uint32_t id, uint32_t window_delta, grpc_transport_one_way_stats* stats);
36
35
 
@@ -39,7 +38,7 @@ grpc_error* grpc_chttp2_window_update_parser_begin_frame(
39
38
  grpc_error* grpc_chttp2_window_update_parser_parse(void* parser,
40
39
  grpc_chttp2_transport* t,
41
40
  grpc_chttp2_stream* s,
42
- grpc_slice slice,
41
+ const grpc_slice& slice,
43
42
  int is_last);
44
43
 
45
44
  #endif /* GRPC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_FRAME_WINDOW_UPDATE_H */
@@ -37,10 +37,25 @@
37
37
  #include "src/core/lib/debug/stats.h"
38
38
  #include "src/core/lib/slice/slice_internal.h"
39
39
  #include "src/core/lib/slice/slice_string_helpers.h"
40
+ #include "src/core/lib/surface/validate_metadata.h"
40
41
  #include "src/core/lib/transport/metadata.h"
41
42
  #include "src/core/lib/transport/static_metadata.h"
42
43
  #include "src/core/lib/transport/timeout_encoding.h"
43
44
 
45
+ namespace {
46
+ /* (Maybe-cuckoo) hpack encoder hash table implementation.
47
+
48
+ This hashtable implementation is a subset of a proper cuckoo hash; while we
49
+ have fallback cells that a value can be hashed to if the first cell is full,
50
+ we do not attempt to iteratively rearrange entries into backup cells to get
51
+ things to fit. Instead, if both a cell and the backup cell for a value are
52
+ occupied, the older existing entry is evicted.
53
+
54
+ Note that we can disable backup-cell picking by setting
55
+ GRPC_HPACK_ENCODER_USE_CUCKOO_HASH to 0. In that case, we simply evict an
56
+ existing entry rather than try to use a backup. Hence, "maybe-cuckoo."
57
+ TODO(arjunroy): Add unit tests for hashtable implementation. */
58
+ #define GRPC_HPACK_ENCODER_USE_CUCKOO_HASH 1
44
59
  #define HASH_FRAGMENT_MASK (GRPC_CHTTP2_HPACKC_NUM_VALUES - 1)
45
60
  #define HASH_FRAGMENT_1(x) ((x)&HASH_FRAGMENT_MASK)
46
61
  #define HASH_FRAGMENT_2(x) \
@@ -50,27 +65,211 @@
50
65
  #define HASH_FRAGMENT_4(x) \
51
66
  (((x) >> (GRPC_CHTTP2_HPACKC_NUM_VALUES_BITS * 3)) & HASH_FRAGMENT_MASK)
52
67
 
68
+ /* don't consider adding anything bigger than this to the hpack table */
69
+ constexpr size_t kMaxDecoderSpaceUsage = 512;
70
+ constexpr size_t kDataFrameHeaderSize = 9;
71
+ constexpr uint8_t kMaxFilterValue = 255;
72
+
53
73
  /* if the probability of this item being seen again is < 1/x then don't add
54
74
  it to the table */
55
75
  #define ONE_ON_ADD_PROBABILITY (GRPC_CHTTP2_HPACKC_NUM_VALUES >> 1)
56
- /* don't consider adding anything bigger than this to the hpack table */
57
- #define MAX_DECODER_SPACE_USAGE 512
76
+ /* The hpack index we encode over the wire. Meaningful to the hpack encoder and
77
+ parser on the remote end as well as HTTP2. *Not* the same as
78
+ HpackEncoderSlotHash, which is only meaningful to the hpack encoder
79
+ implementation (HpackEncoderSlotHash is used for the hashtable implementation
80
+ when mapping from metadata to HpackEncoderIndex. */
81
+ typedef uint32_t HpackEncoderIndex;
82
+ /* Internal-table bookkeeping (*not* the hpack index). */
83
+ typedef uint32_t HpackEncoderSlotHash;
84
+
85
+ struct SliceRefComparator {
86
+ typedef grpc_slice_refcount* Type;
87
+ static grpc_slice_refcount* Null() { return nullptr; }
88
+ static bool IsNull(const grpc_slice_refcount* sref) {
89
+ return sref == nullptr;
90
+ }
91
+ static bool Equals(const grpc_slice_refcount* s1,
92
+ const grpc_slice_refcount* s2) {
93
+ return s1 == s2;
94
+ }
95
+ static void Ref(grpc_slice_refcount* sref) {
96
+ GPR_DEBUG_ASSERT(sref != nullptr);
97
+ sref->Ref();
98
+ }
99
+ static void Unref(grpc_slice_refcount* sref) {
100
+ GPR_DEBUG_ASSERT(sref != nullptr);
101
+ sref->Unref();
102
+ }
103
+ };
58
104
 
59
- static grpc_slice_refcount terminal_slice_refcount = {nullptr, nullptr};
60
- static const grpc_slice terminal_slice = {
61
- &terminal_slice_refcount, /* refcount */
62
- {{nullptr, 0}} /* data.refcounted */
105
+ struct MetadataComparator {
106
+ typedef grpc_mdelem Type;
107
+ static const grpc_mdelem Null() { return {0}; }
108
+ static bool IsNull(const grpc_mdelem md) { return md.payload == 0; }
109
+ static bool Equals(const grpc_mdelem md1, const grpc_mdelem md2) {
110
+ return md1.payload == md2.payload;
111
+ }
112
+ static void Ref(grpc_mdelem md) {
113
+ GPR_DEBUG_ASSERT(md.payload != 0);
114
+ GRPC_MDELEM_REF(md);
115
+ }
116
+ static void Unref(grpc_mdelem md) {
117
+ GPR_DEBUG_ASSERT(md.payload != 0);
118
+ GRPC_MDELEM_UNREF(md);
119
+ }
63
120
  };
64
121
 
65
- typedef struct {
122
+ /* Index table management */
123
+ template <typename Hashtable>
124
+ static HpackEncoderIndex HpackIndex(const Hashtable* hashtable,
125
+ HpackEncoderSlotHash hash_index) {
126
+ return hashtable[hash_index].index;
127
+ }
128
+
129
+ template <typename ValueType, typename Hashtable>
130
+ static const ValueType& GetEntry(const Hashtable* hashtable,
131
+ HpackEncoderSlotHash hash_index) {
132
+ return hashtable[hash_index].value;
133
+ }
134
+
135
+ template <typename Cmp, typename Hashtable>
136
+ static bool TableEmptyAt(const Hashtable* hashtable,
137
+ HpackEncoderSlotHash hash_index) {
138
+ return Cmp::Equals(hashtable[hash_index].value, Cmp::Null());
139
+ }
140
+
141
+ template <typename Cmp, typename Hashtable, typename ValueType>
142
+ static bool Matches(const Hashtable* hashtable, const ValueType& value,
143
+ HpackEncoderSlotHash hash_index) {
144
+ return Cmp::Equals(value, hashtable[hash_index].value);
145
+ }
146
+
147
+ template <typename Hashtable>
148
+ static void UpdateIndex(Hashtable* hashtable, HpackEncoderSlotHash hash_index,
149
+ HpackEncoderIndex hpack_index) {
150
+ hashtable[hash_index].index = hpack_index;
151
+ }
152
+
153
+ template <typename Hashtable, typename ValueType>
154
+ static void SetIndex(Hashtable* hashtable, HpackEncoderSlotHash hash_index,
155
+ const ValueType& value, HpackEncoderIndex hpack_index) {
156
+ hashtable[hash_index].value = value;
157
+ UpdateIndex(hashtable, hash_index, hpack_index);
158
+ }
159
+
160
+ template <typename Cmp, typename Hashtable, typename ValueType>
161
+ static bool GetMatchingIndex(Hashtable* hashtable, const ValueType& value,
162
+ uint32_t value_hash, HpackEncoderIndex* index) {
163
+ const HpackEncoderSlotHash cuckoo_first = HASH_FRAGMENT_2(value_hash);
164
+ if (Matches<Cmp>(hashtable, value, cuckoo_first)) {
165
+ *index = HpackIndex(hashtable, cuckoo_first);
166
+ return true;
167
+ }
168
+ #if GRPC_HPACK_ENCODER_USE_CUCKOO_HASH
169
+ const HpackEncoderSlotHash cuckoo_second = HASH_FRAGMENT_3(value_hash);
170
+
171
+ if (Matches<Cmp>(hashtable, value, cuckoo_second)) {
172
+ *index = HpackIndex(hashtable, cuckoo_second);
173
+ return true;
174
+ }
175
+ #endif
176
+ return false;
177
+ }
178
+
179
+ template <typename Cmp, typename Hashtable, typename ValueType>
180
+ static ValueType ReplaceOlderIndex(Hashtable* hashtable, const ValueType& value,
181
+ HpackEncoderSlotHash hash_index_a,
182
+ HpackEncoderSlotHash hash_index_b,
183
+ HpackEncoderIndex new_index) {
184
+ const HpackEncoderIndex hpack_idx_a = hashtable[hash_index_a].index;
185
+ const HpackEncoderIndex hpack_idx_b = hashtable[hash_index_b].index;
186
+ const HpackEncoderSlotHash id =
187
+ hpack_idx_a < hpack_idx_b ? hash_index_a : hash_index_b;
188
+ ValueType old = GetEntry<typename Cmp::Type>(hashtable, id);
189
+ SetIndex(hashtable, id, value, new_index);
190
+ return old;
191
+ }
192
+
193
+ template <typename Cmp, typename Hashtable, typename ValueType>
194
+ static void UpdateAddOrEvict(Hashtable hashtable, const ValueType& value,
195
+ uint32_t value_hash, HpackEncoderIndex new_index) {
196
+ const HpackEncoderSlotHash cuckoo_first = HASH_FRAGMENT_2(value_hash);
197
+ if (Matches<Cmp>(hashtable, value, cuckoo_first)) {
198
+ UpdateIndex(hashtable, cuckoo_first, new_index);
199
+ return;
200
+ }
201
+ if (TableEmptyAt<Cmp>(hashtable, cuckoo_first)) {
202
+ Cmp::Ref(value);
203
+ SetIndex(hashtable, cuckoo_first, value, new_index);
204
+ return;
205
+ }
206
+ #if GRPC_HPACK_ENCODER_USE_CUCKOO_HASH
207
+ const HpackEncoderSlotHash cuckoo_second = HASH_FRAGMENT_3(value_hash);
208
+ if (Matches<Cmp>(hashtable, value, cuckoo_second)) {
209
+ UpdateIndex(hashtable, cuckoo_second, new_index);
210
+ return;
211
+ }
212
+ Cmp::Ref(value);
213
+ if (TableEmptyAt<Cmp>(hashtable, cuckoo_second)) {
214
+ SetIndex(hashtable, cuckoo_second, value, new_index);
215
+ return;
216
+ }
217
+ Cmp::Unref(ReplaceOlderIndex<Cmp>(hashtable, value, cuckoo_first,
218
+ cuckoo_second, new_index));
219
+ #else
220
+ ValueType old = GetEntry<typename Cmp::Type>(hashtable, cuckoo_first);
221
+ SetIndex(hashtable, cuckoo_first, value, new_index);
222
+ Cmp::Unref(old);
223
+ #endif
224
+ }
225
+
226
+ /* halve all counts because an element reached max */
227
+ static void HalveFilter(uint8_t /*idx*/, uint32_t* sum, uint8_t* elems) {
228
+ *sum = 0;
229
+ for (int i = 0; i < GRPC_CHTTP2_HPACKC_NUM_VALUES; i++) {
230
+ elems[i] /= 2;
231
+ (*sum) += elems[i];
232
+ }
233
+ }
234
+
235
+ /* increment a filter count, halve all counts if one element reaches max */
236
+ static void IncrementFilter(uint8_t idx, uint32_t* sum, uint8_t* elems) {
237
+ elems[idx]++;
238
+ if (GPR_LIKELY(elems[idx] < kMaxFilterValue)) {
239
+ (*sum)++;
240
+ } else {
241
+ HalveFilter(idx, sum, elems);
242
+ }
243
+ }
244
+
245
+ static uint32_t UpdateHashtablePopularity(
246
+ grpc_chttp2_hpack_compressor* hpack_compressor, uint32_t elem_hash) {
247
+ const uint32_t popularity_hash = HASH_FRAGMENT_1(elem_hash);
248
+ IncrementFilter(popularity_hash, &hpack_compressor->filter_elems_sum,
249
+ hpack_compressor->filter_elems);
250
+ return popularity_hash;
251
+ }
252
+
253
+ static bool CanAddToHashtable(grpc_chttp2_hpack_compressor* hpack_compressor,
254
+ uint32_t popularity_hash) {
255
+ const bool can_add =
256
+ hpack_compressor->filter_elems[popularity_hash] >=
257
+ hpack_compressor->filter_elems_sum / ONE_ON_ADD_PROBABILITY;
258
+ return can_add;
259
+ }
260
+ } /* namespace */
261
+
262
+ struct framer_state {
66
263
  int is_first_frame;
67
264
  /* number of bytes in 'output' when we started the frame - used to calculate
68
265
  frame length */
69
266
  size_t output_length_at_start_of_frame;
70
267
  /* index (in output) of the header for the current frame */
71
268
  size_t header_idx;
269
+ #ifndef NDEBUG
72
270
  /* have we seen a regular (non-colon-prefixed) header yet? */
73
271
  uint8_t seen_regular_header;
272
+ #endif
74
273
  /* output stream id */
75
274
  uint32_t stream_id;
76
275
  grpc_slice_buffer* output;
@@ -78,12 +277,25 @@ typedef struct {
78
277
  /* maximum size of a frame */
79
278
  size_t max_frame_size;
80
279
  bool use_true_binary_metadata;
81
- } framer_state;
82
-
83
- /* fills p (which is expected to be 9 bytes long) with a data frame header */
280
+ bool is_end_of_stream;
281
+ };
282
+ /* fills p (which is expected to be kDataFrameHeaderSize bytes long)
283
+ * with a data frame header */
84
284
  static void fill_header(uint8_t* p, uint8_t type, uint32_t id, size_t len,
85
285
  uint8_t flags) {
86
- GPR_ASSERT(len < 16777316);
286
+ /* len is the current frame size (i.e. for the frame we're finishing).
287
+ We finish a frame if:
288
+ 1) We called ensure_space(), (i.e. add_tiny_header_data()) and adding
289
+ 'need_bytes' to the frame would cause us to exceed st->max_frame_size.
290
+ 2) We called add_header_data, and adding the slice would cause us to exceed
291
+ st->max_frame_size.
292
+ 3) We're done encoding the header.
293
+
294
+ Thus, len is always <= st->max_frame_size.
295
+ st->max_frame_size is derived from GRPC_CHTTP2_SETTINGS_MAX_FRAME_SIZE,
296
+ which has a max allowable value of 16777215 (see chttp_transport.cc).
297
+ Thus, the following assert can be a debug assert. */
298
+ GPR_DEBUG_ASSERT(len < 16777316);
87
299
  *p++ = static_cast<uint8_t>(len >> 16);
88
300
  *p++ = static_cast<uint8_t>(len >> 8);
89
301
  *p++ = static_cast<uint8_t>(len);
@@ -95,27 +307,48 @@ static void fill_header(uint8_t* p, uint8_t type, uint32_t id, size_t len,
95
307
  *p++ = static_cast<uint8_t>(id);
96
308
  }
97
309
 
310
+ static size_t current_frame_size(framer_state* st) {
311
+ const size_t frame_size =
312
+ st->output->length - st->output_length_at_start_of_frame;
313
+ GPR_DEBUG_ASSERT(frame_size <= st->max_frame_size);
314
+ return frame_size;
315
+ }
316
+
98
317
  /* finish a frame - fill in the previously reserved header */
99
- static void finish_frame(framer_state* st, int is_header_boundary,
100
- int is_last_in_stream) {
318
+ static void finish_frame(framer_state* st, int is_header_boundary) {
101
319
  uint8_t type = 0xff;
102
- type = st->is_first_frame ? GRPC_CHTTP2_FRAME_HEADER
103
- : GRPC_CHTTP2_FRAME_CONTINUATION;
104
- fill_header(
105
- GRPC_SLICE_START_PTR(st->output->slices[st->header_idx]), type,
106
- st->stream_id, st->output->length - st->output_length_at_start_of_frame,
107
- static_cast<uint8_t>(
108
- (is_last_in_stream ? GRPC_CHTTP2_DATA_FLAG_END_STREAM : 0) |
109
- (is_header_boundary ? GRPC_CHTTP2_DATA_FLAG_END_HEADERS : 0)));
110
- st->stats->framing_bytes += 9;
320
+ type =
321
+ static_cast<uint8_t>(st->is_first_frame ? GRPC_CHTTP2_FRAME_HEADER
322
+ : GRPC_CHTTP2_FRAME_CONTINUATION);
323
+ uint8_t flags = 0xff;
324
+ /* per the HTTP/2 spec:
325
+ A HEADERS frame carries the END_STREAM flag that signals the end of a
326
+ stream. However, a HEADERS frame with the END_STREAM flag set can be
327
+ followed by CONTINUATION frames on the same stream. Logically, the
328
+ CONTINUATION frames are part of the HEADERS frame.
329
+ Thus, we add the END_STREAM flag to the HEADER frame (the first frame). */
330
+ flags = static_cast<uint8_t>(st->is_first_frame && st->is_end_of_stream
331
+ ? GRPC_CHTTP2_DATA_FLAG_END_STREAM
332
+ : 0);
333
+ /* per the HTTP/2 spec:
334
+ A HEADERS frame without the END_HEADERS flag set MUST be followed by
335
+ a CONTINUATION frame for the same stream.
336
+ Thus, we add the END_HEADER flag to the last frame. */
337
+ flags |= static_cast<uint8_t>(
338
+ is_header_boundary ? GRPC_CHTTP2_DATA_FLAG_END_HEADERS : 0);
339
+ fill_header(GRPC_SLICE_START_PTR(st->output->slices[st->header_idx]), type,
340
+ st->stream_id, current_frame_size(st), flags);
341
+ st->stats->framing_bytes += kDataFrameHeaderSize;
111
342
  st->is_first_frame = 0;
112
343
  }
113
344
 
114
345
  /* begin a new frame: reserve off header space, remember how many bytes we'd
115
346
  output before beginning */
116
347
  static void begin_frame(framer_state* st) {
117
- st->header_idx =
118
- grpc_slice_buffer_add_indexed(st->output, GRPC_SLICE_MALLOC(9));
348
+ grpc_slice reserved;
349
+ reserved.refcount = nullptr;
350
+ reserved.data.inlined.length = kDataFrameHeaderSize;
351
+ st->header_idx = grpc_slice_buffer_add_indexed(st->output, reserved);
119
352
  st->output_length_at_start_of_frame = st->output->length;
120
353
  }
121
354
 
@@ -123,42 +356,25 @@ static void begin_frame(framer_state* st) {
123
356
  space to add at least about_to_add bytes -- finishes the current frame if
124
357
  needed */
125
358
  static void ensure_space(framer_state* st, size_t need_bytes) {
126
- if (st->output->length - st->output_length_at_start_of_frame + need_bytes <=
127
- st->max_frame_size) {
359
+ if (GPR_LIKELY(current_frame_size(st) + need_bytes <= st->max_frame_size)) {
128
360
  return;
129
361
  }
130
- finish_frame(st, 0, 0);
362
+ finish_frame(st, 0);
131
363
  begin_frame(st);
132
364
  }
133
365
 
134
- /* increment a filter count, halve all counts if one element reaches max */
135
- static void inc_filter(uint8_t idx, uint32_t* sum, uint8_t* elems) {
136
- elems[idx]++;
137
- if (elems[idx] < 255) {
138
- (*sum)++;
139
- } else {
140
- int i;
141
- *sum = 0;
142
- for (i = 0; i < GRPC_CHTTP2_HPACKC_NUM_VALUES; i++) {
143
- elems[i] /= 2;
144
- (*sum) += elems[i];
145
- }
146
- }
147
- }
148
-
149
366
  static void add_header_data(framer_state* st, grpc_slice slice) {
150
367
  size_t len = GRPC_SLICE_LENGTH(slice);
151
368
  size_t remaining;
152
369
  if (len == 0) return;
153
- remaining = st->max_frame_size + st->output_length_at_start_of_frame -
154
- st->output->length;
370
+ remaining = st->max_frame_size - current_frame_size(st);
155
371
  if (len <= remaining) {
156
372
  st->stats->header_bytes += len;
157
373
  grpc_slice_buffer_add(st->output, slice);
158
374
  } else {
159
375
  st->stats->header_bytes += remaining;
160
376
  grpc_slice_buffer_add(st->output, grpc_slice_split_head(&slice, remaining));
161
- finish_frame(st, 0, 0);
377
+ finish_frame(st, 0);
162
378
  begin_frame(st);
163
379
  add_header_data(st, slice);
164
380
  }
@@ -188,8 +404,9 @@ static void evict_entry(grpc_chttp2_hpack_compressor* c) {
188
404
  static uint32_t prepare_space_for_new_elem(grpc_chttp2_hpack_compressor* c,
189
405
  size_t elem_size) {
190
406
  uint32_t new_index = c->tail_remote_index + c->table_elems + 1;
191
- GPR_ASSERT(elem_size < 65536);
407
+ GPR_DEBUG_ASSERT(elem_size < 65536);
192
408
 
409
+ // TODO(arjunroy): Re-examine semantics
193
410
  if (elem_size > c->max_table_size) {
194
411
  while (c->table_size > 0) {
195
412
  evict_entry(c);
@@ -212,232 +429,172 @@ static uint32_t prepare_space_for_new_elem(grpc_chttp2_hpack_compressor* c,
212
429
  return new_index;
213
430
  }
214
431
 
215
- /* dummy function */
216
- static void add_nothing(grpc_chttp2_hpack_compressor* c, grpc_mdelem elem,
217
- size_t elem_size) {}
218
-
219
432
  // Add a key to the dynamic table. Both key and value will be added to table at
220
433
  // the decoder.
221
- static void add_key_with_index(grpc_chttp2_hpack_compressor* c,
222
- grpc_mdelem elem, uint32_t new_index) {
223
- if (new_index == 0) {
224
- return;
225
- }
226
-
227
- uint32_t key_hash = grpc_slice_hash(GRPC_MDKEY(elem));
228
-
229
- /* Store the key into {entries,indices}_keys */
230
- if (grpc_slice_eq(c->entries_keys[HASH_FRAGMENT_2(key_hash)],
231
- GRPC_MDKEY(elem))) {
232
- c->indices_keys[HASH_FRAGMENT_2(key_hash)] = new_index;
233
- } else if (grpc_slice_eq(c->entries_keys[HASH_FRAGMENT_3(key_hash)],
234
- GRPC_MDKEY(elem))) {
235
- c->indices_keys[HASH_FRAGMENT_3(key_hash)] = new_index;
236
- } else if (c->entries_keys[HASH_FRAGMENT_2(key_hash)].refcount ==
237
- &terminal_slice_refcount) {
238
- c->entries_keys[HASH_FRAGMENT_2(key_hash)] =
239
- grpc_slice_ref_internal(GRPC_MDKEY(elem));
240
- c->indices_keys[HASH_FRAGMENT_2(key_hash)] = new_index;
241
- } else if (c->entries_keys[HASH_FRAGMENT_3(key_hash)].refcount ==
242
- &terminal_slice_refcount) {
243
- c->entries_keys[HASH_FRAGMENT_3(key_hash)] =
244
- grpc_slice_ref_internal(GRPC_MDKEY(elem));
245
- c->indices_keys[HASH_FRAGMENT_3(key_hash)] = new_index;
246
- } else if (c->indices_keys[HASH_FRAGMENT_2(key_hash)] <
247
- c->indices_keys[HASH_FRAGMENT_3(key_hash)]) {
248
- grpc_slice_unref_internal(c->entries_keys[HASH_FRAGMENT_2(key_hash)]);
249
- c->entries_keys[HASH_FRAGMENT_2(key_hash)] =
250
- grpc_slice_ref_internal(GRPC_MDKEY(elem));
251
- c->indices_keys[HASH_FRAGMENT_2(key_hash)] = new_index;
252
- } else {
253
- grpc_slice_unref_internal(c->entries_keys[HASH_FRAGMENT_3(key_hash)]);
254
- c->entries_keys[HASH_FRAGMENT_3(key_hash)] =
255
- grpc_slice_ref_internal(GRPC_MDKEY(elem));
256
- c->indices_keys[HASH_FRAGMENT_3(key_hash)] = new_index;
257
- }
434
+ static void AddKeyWithIndex(grpc_chttp2_hpack_compressor* c,
435
+ grpc_slice_refcount* key_ref, uint32_t new_index,
436
+ uint32_t key_hash) {
437
+ UpdateAddOrEvict<SliceRefComparator>(c->key_table.entries, key_ref, key_hash,
438
+ new_index);
258
439
  }
259
440
 
260
441
  /* add an element to the decoder table */
261
- static void add_elem_with_index(grpc_chttp2_hpack_compressor* c,
262
- grpc_mdelem elem, uint32_t new_index) {
263
- if (new_index == 0) {
264
- return;
265
- }
266
- GPR_ASSERT(GRPC_MDELEM_IS_INTERNED(elem));
267
-
268
- uint32_t key_hash = grpc_slice_hash(GRPC_MDKEY(elem));
269
- uint32_t value_hash = grpc_slice_hash(GRPC_MDVALUE(elem));
270
- uint32_t elem_hash = GRPC_MDSTR_KV_HASH(key_hash, value_hash);
271
-
272
- /* Store this element into {entries,indices}_elem */
273
- if (grpc_mdelem_eq(c->entries_elems[HASH_FRAGMENT_2(elem_hash)], elem)) {
274
- /* already there: update with new index */
275
- c->indices_elems[HASH_FRAGMENT_2(elem_hash)] = new_index;
276
- } else if (grpc_mdelem_eq(c->entries_elems[HASH_FRAGMENT_3(elem_hash)],
277
- elem)) {
278
- /* already there (cuckoo): update with new index */
279
- c->indices_elems[HASH_FRAGMENT_3(elem_hash)] = new_index;
280
- } else if (GRPC_MDISNULL(c->entries_elems[HASH_FRAGMENT_2(elem_hash)])) {
281
- /* not there, but a free element: add */
282
- c->entries_elems[HASH_FRAGMENT_2(elem_hash)] = GRPC_MDELEM_REF(elem);
283
- c->indices_elems[HASH_FRAGMENT_2(elem_hash)] = new_index;
284
- } else if (GRPC_MDISNULL(c->entries_elems[HASH_FRAGMENT_3(elem_hash)])) {
285
- /* not there (cuckoo), but a free element: add */
286
- c->entries_elems[HASH_FRAGMENT_3(elem_hash)] = GRPC_MDELEM_REF(elem);
287
- c->indices_elems[HASH_FRAGMENT_3(elem_hash)] = new_index;
288
- } else if (c->indices_elems[HASH_FRAGMENT_2(elem_hash)] <
289
- c->indices_elems[HASH_FRAGMENT_3(elem_hash)]) {
290
- /* not there: replace oldest */
291
- GRPC_MDELEM_UNREF(c->entries_elems[HASH_FRAGMENT_2(elem_hash)]);
292
- c->entries_elems[HASH_FRAGMENT_2(elem_hash)] = GRPC_MDELEM_REF(elem);
293
- c->indices_elems[HASH_FRAGMENT_2(elem_hash)] = new_index;
294
- } else {
295
- /* not there: replace oldest */
296
- GRPC_MDELEM_UNREF(c->entries_elems[HASH_FRAGMENT_3(elem_hash)]);
297
- c->entries_elems[HASH_FRAGMENT_3(elem_hash)] = GRPC_MDELEM_REF(elem);
298
- c->indices_elems[HASH_FRAGMENT_3(elem_hash)] = new_index;
299
- }
300
-
301
- add_key_with_index(c, elem, new_index);
442
+ static void AddElemWithIndex(grpc_chttp2_hpack_compressor* c, grpc_mdelem elem,
443
+ uint32_t new_index, uint32_t elem_hash,
444
+ uint32_t key_hash) {
445
+ GPR_DEBUG_ASSERT(GRPC_MDELEM_IS_INTERNED(elem));
446
+ UpdateAddOrEvict<MetadataComparator>(c->elem_table.entries, elem, elem_hash,
447
+ new_index);
448
+ AddKeyWithIndex(c, GRPC_MDKEY(elem).refcount, new_index, key_hash);
302
449
  }
303
450
 
304
451
  static void add_elem(grpc_chttp2_hpack_compressor* c, grpc_mdelem elem,
305
- size_t elem_size) {
452
+ size_t elem_size, uint32_t elem_hash, uint32_t key_hash) {
306
453
  uint32_t new_index = prepare_space_for_new_elem(c, elem_size);
307
- add_elem_with_index(c, elem, new_index);
454
+ if (new_index != 0) {
455
+ AddElemWithIndex(c, elem, new_index, elem_hash, key_hash);
456
+ }
308
457
  }
309
458
 
310
459
  static void add_key(grpc_chttp2_hpack_compressor* c, grpc_mdelem elem,
311
- size_t elem_size) {
460
+ size_t elem_size, uint32_t key_hash) {
312
461
  uint32_t new_index = prepare_space_for_new_elem(c, elem_size);
313
- add_key_with_index(c, elem, new_index);
462
+ if (new_index != 0) {
463
+ AddKeyWithIndex(c, GRPC_MDKEY(elem).refcount, new_index, key_hash);
464
+ }
314
465
  }
315
466
 
316
- static void emit_indexed(grpc_chttp2_hpack_compressor* c, uint32_t elem_index,
317
- framer_state* st) {
467
+ static void emit_indexed(grpc_chttp2_hpack_compressor* /*c*/,
468
+ uint32_t elem_index, framer_state* st) {
318
469
  GRPC_STATS_INC_HPACK_SEND_INDEXED();
319
470
  uint32_t len = GRPC_CHTTP2_VARINT_LENGTH(elem_index, 1);
320
471
  GRPC_CHTTP2_WRITE_VARINT(elem_index, 1, 0x80, add_tiny_header_data(st, len),
321
472
  len);
322
473
  }
323
474
 
324
- typedef struct {
325
- grpc_slice data;
326
- uint8_t huffman_prefix;
327
- bool insert_null_before_wire_value;
328
- } wire_value;
475
+ struct wire_value {
476
+ wire_value(uint8_t huffman_prefix, bool insert_null_before_wire_value,
477
+ const grpc_slice& slice)
478
+ : data(slice),
479
+ huffman_prefix(huffman_prefix),
480
+ insert_null_before_wire_value(insert_null_before_wire_value),
481
+ length(GRPC_SLICE_LENGTH(slice) +
482
+ (insert_null_before_wire_value ? 1 : 0)) {}
483
+ // While wire_value is const from the POV of hpack encoder code, actually
484
+ // adding it to a slice buffer will possibly split the slice.
485
+ const grpc_slice data;
486
+ const uint8_t huffman_prefix;
487
+ const bool insert_null_before_wire_value;
488
+ const size_t length;
489
+ };
329
490
 
491
+ template <bool mdkey_definitely_interned>
330
492
  static wire_value get_wire_value(grpc_mdelem elem, bool true_binary_enabled) {
331
- wire_value wire_val;
332
- if (grpc_is_binary_header(GRPC_MDKEY(elem))) {
493
+ const bool is_bin_hdr =
494
+ mdkey_definitely_interned
495
+ ? grpc_is_refcounted_slice_binary_header(GRPC_MDKEY(elem))
496
+ : grpc_is_binary_header_internal(GRPC_MDKEY(elem));
497
+ const grpc_slice& value = GRPC_MDVALUE(elem);
498
+ if (is_bin_hdr) {
333
499
  if (true_binary_enabled) {
334
500
  GRPC_STATS_INC_HPACK_SEND_BINARY();
335
- wire_val.huffman_prefix = 0x00;
336
- wire_val.insert_null_before_wire_value = true;
337
- wire_val.data = grpc_slice_ref_internal(GRPC_MDVALUE(elem));
338
-
501
+ return wire_value(0x00, true, grpc_slice_ref_internal(value));
339
502
  } else {
340
503
  GRPC_STATS_INC_HPACK_SEND_BINARY_BASE64();
341
- wire_val.huffman_prefix = 0x80;
342
- wire_val.insert_null_before_wire_value = false;
343
- wire_val.data =
344
- grpc_chttp2_base64_encode_and_huffman_compress(GRPC_MDVALUE(elem));
504
+ return wire_value(0x80, false,
505
+ grpc_chttp2_base64_encode_and_huffman_compress(value));
345
506
  }
346
507
  } else {
347
508
  /* TODO(ctiller): opportunistically compress non-binary headers */
348
509
  GRPC_STATS_INC_HPACK_SEND_UNCOMPRESSED();
349
- wire_val.huffman_prefix = 0x00;
350
- wire_val.insert_null_before_wire_value = false;
351
- wire_val.data = grpc_slice_ref_internal(GRPC_MDVALUE(elem));
352
- }
353
- return wire_val;
354
- }
355
-
356
- static size_t wire_value_length(wire_value v) {
357
- return GPR_SLICE_LENGTH(v.data) + v.insert_null_before_wire_value;
358
- }
359
-
360
- static void add_wire_value(framer_state* st, wire_value v) {
361
- if (v.insert_null_before_wire_value) *add_tiny_header_data(st, 1) = 0;
362
- add_header_data(st, v.data);
363
- }
364
-
365
- static void emit_lithdr_incidx(grpc_chttp2_hpack_compressor* c,
366
- uint32_t key_index, grpc_mdelem elem,
367
- framer_state* st) {
368
- GRPC_STATS_INC_HPACK_SEND_LITHDR_INCIDX();
369
- uint32_t len_pfx = GRPC_CHTTP2_VARINT_LENGTH(key_index, 2);
370
- wire_value value = get_wire_value(elem, st->use_true_binary_metadata);
371
- size_t len_val = wire_value_length(value);
372
- uint32_t len_val_len;
373
- GPR_ASSERT(len_val <= UINT32_MAX);
374
- len_val_len = GRPC_CHTTP2_VARINT_LENGTH((uint32_t)len_val, 1);
375
- GRPC_CHTTP2_WRITE_VARINT(key_index, 2, 0x40,
376
- add_tiny_header_data(st, len_pfx), len_pfx);
377
- GRPC_CHTTP2_WRITE_VARINT((uint32_t)len_val, 1, value.huffman_prefix,
378
- add_tiny_header_data(st, len_val_len), len_val_len);
379
- add_wire_value(st, value);
380
- }
381
-
382
- static void emit_lithdr_noidx(grpc_chttp2_hpack_compressor* c,
383
- uint32_t key_index, grpc_mdelem elem,
384
- framer_state* st) {
385
- GRPC_STATS_INC_HPACK_SEND_LITHDR_NOTIDX();
386
- uint32_t len_pfx = GRPC_CHTTP2_VARINT_LENGTH(key_index, 4);
387
- wire_value value = get_wire_value(elem, st->use_true_binary_metadata);
388
- size_t len_val = wire_value_length(value);
389
- uint32_t len_val_len;
390
- GPR_ASSERT(len_val <= UINT32_MAX);
391
- len_val_len = GRPC_CHTTP2_VARINT_LENGTH((uint32_t)len_val, 1);
392
- GRPC_CHTTP2_WRITE_VARINT(key_index, 4, 0x00,
393
- add_tiny_header_data(st, len_pfx), len_pfx);
394
- GRPC_CHTTP2_WRITE_VARINT((uint32_t)len_val, 1, value.huffman_prefix,
395
- add_tiny_header_data(st, len_val_len), len_val_len);
396
- add_wire_value(st, value);
397
- }
398
-
399
- static void emit_lithdr_incidx_v(grpc_chttp2_hpack_compressor* c,
400
- uint32_t unused_index, grpc_mdelem elem,
401
- framer_state* st) {
402
- GPR_ASSERT(unused_index == 0);
403
- GRPC_STATS_INC_HPACK_SEND_LITHDR_INCIDX_V();
404
- GRPC_STATS_INC_HPACK_SEND_UNCOMPRESSED();
405
- uint32_t len_key = static_cast<uint32_t> GRPC_SLICE_LENGTH(GRPC_MDKEY(elem));
406
- wire_value value = get_wire_value(elem, st->use_true_binary_metadata);
407
- uint32_t len_val = static_cast<uint32_t>(wire_value_length(value));
408
- uint32_t len_key_len = GRPC_CHTTP2_VARINT_LENGTH(len_key, 1);
409
- uint32_t len_val_len = GRPC_CHTTP2_VARINT_LENGTH(len_val, 1);
410
- GPR_ASSERT(len_key <= UINT32_MAX);
411
- GPR_ASSERT(wire_value_length(value) <= UINT32_MAX);
412
- *add_tiny_header_data(st, 1) = 0x40;
413
- GRPC_CHTTP2_WRITE_VARINT(len_key, 1, 0x00,
414
- add_tiny_header_data(st, len_key_len), len_key_len);
415
- add_header_data(st, grpc_slice_ref_internal(GRPC_MDKEY(elem)));
416
- GRPC_CHTTP2_WRITE_VARINT(len_val, 1, value.huffman_prefix,
417
- add_tiny_header_data(st, len_val_len), len_val_len);
418
- add_wire_value(st, value);
510
+ return wire_value(0x00, false, grpc_slice_ref_internal(value));
511
+ }
512
+ }
513
+
514
+ static uint32_t wire_value_length(const wire_value& v) {
515
+ GPR_DEBUG_ASSERT(v.length <= UINT32_MAX);
516
+ return static_cast<uint32_t>(v.length);
419
517
  }
420
518
 
421
- static void emit_lithdr_noidx_v(grpc_chttp2_hpack_compressor* c,
422
- uint32_t unused_index, grpc_mdelem elem,
423
- framer_state* st) {
424
- GPR_ASSERT(unused_index == 0);
425
- GRPC_STATS_INC_HPACK_SEND_LITHDR_NOTIDX_V();
519
+ namespace {
520
+ enum class EmitLitHdrType { INC_IDX, NO_IDX };
521
+
522
+ enum class EmitLitHdrVType { INC_IDX_V, NO_IDX_V };
523
+ } // namespace
524
+
525
+ template <EmitLitHdrType type>
526
+ static void emit_lithdr(grpc_chttp2_hpack_compressor* /*c*/, uint32_t key_index,
527
+ grpc_mdelem elem, framer_state* st) {
528
+ switch (type) {
529
+ case EmitLitHdrType::INC_IDX:
530
+ GRPC_STATS_INC_HPACK_SEND_LITHDR_INCIDX();
531
+ break;
532
+ case EmitLitHdrType::NO_IDX:
533
+ GRPC_STATS_INC_HPACK_SEND_LITHDR_NOTIDX();
534
+ break;
535
+ }
536
+ const uint32_t len_pfx = type == EmitLitHdrType::INC_IDX
537
+ ? GRPC_CHTTP2_VARINT_LENGTH(key_index, 2)
538
+ : GRPC_CHTTP2_VARINT_LENGTH(key_index, 4);
539
+ const wire_value value =
540
+ get_wire_value<true>(elem, st->use_true_binary_metadata);
541
+ const uint32_t len_val = wire_value_length(value);
542
+ const uint32_t len_val_len = GRPC_CHTTP2_VARINT_LENGTH(len_val, 1);
543
+ GPR_DEBUG_ASSERT(len_pfx + len_val_len < GRPC_SLICE_INLINED_SIZE);
544
+ uint8_t* data = add_tiny_header_data(
545
+ st,
546
+ len_pfx + len_val_len + (value.insert_null_before_wire_value ? 1 : 0));
547
+ switch (type) {
548
+ case EmitLitHdrType::INC_IDX:
549
+ GRPC_CHTTP2_WRITE_VARINT(key_index, 2, 0x40, data, len_pfx);
550
+ break;
551
+ case EmitLitHdrType::NO_IDX:
552
+ GRPC_CHTTP2_WRITE_VARINT(key_index, 4, 0x00, data, len_pfx);
553
+ break;
554
+ }
555
+ GRPC_CHTTP2_WRITE_VARINT(len_val, 1, value.huffman_prefix, &data[len_pfx],
556
+ len_val_len);
557
+ if (value.insert_null_before_wire_value) {
558
+ data[len_pfx + len_val_len] = 0;
559
+ }
560
+ add_header_data(st, value.data);
561
+ }
562
+
563
+ template <EmitLitHdrVType type>
564
+ static void emit_lithdr_v(grpc_chttp2_hpack_compressor* /*c*/, grpc_mdelem elem,
565
+ framer_state* st) {
566
+ switch (type) {
567
+ case EmitLitHdrVType::INC_IDX_V:
568
+ GRPC_STATS_INC_HPACK_SEND_LITHDR_INCIDX_V();
569
+ break;
570
+ case EmitLitHdrVType::NO_IDX_V:
571
+ GRPC_STATS_INC_HPACK_SEND_LITHDR_NOTIDX_V();
572
+ break;
573
+ }
426
574
  GRPC_STATS_INC_HPACK_SEND_UNCOMPRESSED();
427
- uint32_t len_key = static_cast<uint32_t> GRPC_SLICE_LENGTH(GRPC_MDKEY(elem));
428
- wire_value value = get_wire_value(elem, st->use_true_binary_metadata);
429
- uint32_t len_val = static_cast<uint32_t>(wire_value_length(value));
430
- uint32_t len_key_len = GRPC_CHTTP2_VARINT_LENGTH(len_key, 1);
431
- uint32_t len_val_len = GRPC_CHTTP2_VARINT_LENGTH(len_val, 1);
432
- GPR_ASSERT(len_key <= UINT32_MAX);
433
- GPR_ASSERT(wire_value_length(value) <= UINT32_MAX);
434
- *add_tiny_header_data(st, 1) = 0x00;
435
- GRPC_CHTTP2_WRITE_VARINT(len_key, 1, 0x00,
436
- add_tiny_header_data(st, len_key_len), len_key_len);
575
+ const uint32_t len_key =
576
+ static_cast<uint32_t>(GRPC_SLICE_LENGTH(GRPC_MDKEY(elem)));
577
+ const wire_value value =
578
+ type == EmitLitHdrVType::INC_IDX_V
579
+ ? get_wire_value<true>(elem, st->use_true_binary_metadata)
580
+ : get_wire_value<false>(elem, st->use_true_binary_metadata);
581
+ const uint32_t len_val = wire_value_length(value);
582
+ const uint32_t len_key_len = GRPC_CHTTP2_VARINT_LENGTH(len_key, 1);
583
+ const uint32_t len_val_len = GRPC_CHTTP2_VARINT_LENGTH(len_val, 1);
584
+ GPR_DEBUG_ASSERT(len_key <= UINT32_MAX);
585
+ GPR_DEBUG_ASSERT(1 + len_key_len < GRPC_SLICE_INLINED_SIZE);
586
+ uint8_t* key_buf = add_tiny_header_data(st, 1 + len_key_len);
587
+ key_buf[0] = type == EmitLitHdrVType::INC_IDX_V ? 0x40 : 0x00;
588
+ GRPC_CHTTP2_WRITE_VARINT(len_key, 1, 0x00, &key_buf[1], len_key_len);
437
589
  add_header_data(st, grpc_slice_ref_internal(GRPC_MDKEY(elem)));
438
- GRPC_CHTTP2_WRITE_VARINT(len_val, 1, value.huffman_prefix,
439
- add_tiny_header_data(st, len_val_len), len_val_len);
440
- add_wire_value(st, value);
590
+ uint8_t* value_buf = add_tiny_header_data(
591
+ st, len_val_len + (value.insert_null_before_wire_value ? 1 : 0));
592
+ GRPC_CHTTP2_WRITE_VARINT(len_val, 1, value.huffman_prefix, value_buf,
593
+ len_val_len);
594
+ if (value.insert_null_before_wire_value) {
595
+ value_buf[len_val_len] = 0;
596
+ }
597
+ add_header_data(st, value.data);
441
598
  }
442
599
 
443
600
  static void emit_advertise_table_size_change(grpc_chttp2_hpack_compressor* c,
@@ -448,124 +605,140 @@ static void emit_advertise_table_size_change(grpc_chttp2_hpack_compressor* c,
448
605
  c->advertise_table_size_change = 0;
449
606
  }
450
607
 
608
+ static void GPR_ATTRIBUTE_NOINLINE hpack_enc_log(grpc_mdelem elem) {
609
+ char* k = grpc_slice_to_c_string(GRPC_MDKEY(elem));
610
+ char* v = nullptr;
611
+ if (grpc_is_binary_header_internal(GRPC_MDKEY(elem))) {
612
+ v = grpc_dump_slice(GRPC_MDVALUE(elem), GPR_DUMP_HEX);
613
+ } else {
614
+ v = grpc_slice_to_c_string(GRPC_MDVALUE(elem));
615
+ }
616
+ gpr_log(
617
+ GPR_INFO,
618
+ "Encode: '%s: %s', elem_interned=%d [%d], k_interned=%d, v_interned=%d",
619
+ k, v, GRPC_MDELEM_IS_INTERNED(elem), GRPC_MDELEM_STORAGE(elem),
620
+ grpc_slice_is_interned(GRPC_MDKEY(elem)),
621
+ grpc_slice_is_interned(GRPC_MDVALUE(elem)));
622
+ gpr_free(k);
623
+ gpr_free(v);
624
+ }
625
+
451
626
  static uint32_t dynidx(grpc_chttp2_hpack_compressor* c, uint32_t elem_index) {
452
627
  return 1 + GRPC_CHTTP2_LAST_STATIC_ENTRY + c->tail_remote_index +
453
628
  c->table_elems - elem_index;
454
629
  }
455
630
 
631
+ struct EmitIndexedStatus {
632
+ EmitIndexedStatus() = default;
633
+ EmitIndexedStatus(uint32_t elem_hash, bool emitted, bool can_add)
634
+ : elem_hash(elem_hash), emitted(emitted), can_add(can_add) {}
635
+ const uint32_t elem_hash = 0;
636
+ const bool emitted = false;
637
+ const bool can_add = false;
638
+ };
639
+
640
+ static EmitIndexedStatus maybe_emit_indexed(grpc_chttp2_hpack_compressor* c,
641
+ grpc_mdelem elem,
642
+ framer_state* st) {
643
+ const uint32_t elem_hash =
644
+ GRPC_MDELEM_STORAGE(elem) == GRPC_MDELEM_STORAGE_INTERNED
645
+ ? reinterpret_cast<grpc_core::InternedMetadata*>(
646
+ GRPC_MDELEM_DATA(elem))
647
+ ->hash()
648
+ : reinterpret_cast<grpc_core::StaticMetadata*>(GRPC_MDELEM_DATA(elem))
649
+ ->hash();
650
+ /* Update filter to see if we can perhaps add this elem. */
651
+ const uint32_t popularity_hash = UpdateHashtablePopularity(c, elem_hash);
652
+ /* is this elem currently in the decoders table? */
653
+ HpackEncoderIndex indices_key;
654
+ if (GetMatchingIndex<MetadataComparator>(c->elem_table.entries, elem,
655
+ elem_hash, &indices_key) &&
656
+ indices_key > c->tail_remote_index) {
657
+ emit_indexed(c, dynidx(c, indices_key), st);
658
+ return EmitIndexedStatus(elem_hash, true, false);
659
+ }
660
+ /* Didn't hit either cuckoo index, so no emit. */
661
+ return EmitIndexedStatus(elem_hash, false,
662
+ CanAddToHashtable(c, popularity_hash));
663
+ }
664
+
665
+ static void emit_maybe_add(grpc_chttp2_hpack_compressor* c, grpc_mdelem elem,
666
+ framer_state* st, uint32_t indices_key,
667
+ bool should_add_elem, size_t decoder_space_usage,
668
+ uint32_t elem_hash, uint32_t key_hash) {
669
+ if (should_add_elem) {
670
+ emit_lithdr<EmitLitHdrType::INC_IDX>(c, dynidx(c, indices_key), elem, st);
671
+ add_elem(c, elem, decoder_space_usage, elem_hash, key_hash);
672
+ } else {
673
+ emit_lithdr<EmitLitHdrType::NO_IDX>(c, dynidx(c, indices_key), elem, st);
674
+ }
675
+ }
676
+
456
677
  /* encode an mdelem */
457
678
  static void hpack_enc(grpc_chttp2_hpack_compressor* c, grpc_mdelem elem,
458
679
  framer_state* st) {
459
- GPR_ASSERT(GRPC_SLICE_LENGTH(GRPC_MDKEY(elem)) > 0);
460
- if (GRPC_SLICE_START_PTR(GRPC_MDKEY(elem))[0] != ':') { /* regular header */
680
+ const grpc_slice& elem_key = GRPC_MDKEY(elem);
681
+ /* User-provided key len validated in grpc_validate_header_key_is_legal(). */
682
+ GPR_DEBUG_ASSERT(GRPC_SLICE_LENGTH(elem_key) > 0);
683
+ /* Header ordering: all reserved headers (prefixed with ':') must precede
684
+ * regular headers. This can be a debug assert, since:
685
+ * 1) User cannot give us ':' headers (grpc_validate_header_key_is_legal()).
686
+ * 2) grpc filters/core should be checked during debug builds. */
687
+ #ifndef NDEBUG
688
+ if (GRPC_SLICE_START_PTR(elem_key)[0] != ':') { /* regular header */
461
689
  st->seen_regular_header = 1;
462
690
  } else {
463
- GPR_ASSERT(
691
+ GPR_DEBUG_ASSERT(
464
692
  st->seen_regular_header == 0 &&
465
693
  "Reserved header (colon-prefixed) happening after regular ones.");
466
694
  }
467
-
468
- if (grpc_http_trace.enabled()) {
469
- char* k = grpc_slice_to_c_string(GRPC_MDKEY(elem));
470
- char* v = nullptr;
471
- if (grpc_is_binary_header(GRPC_MDKEY(elem))) {
472
- v = grpc_dump_slice(GRPC_MDVALUE(elem), GPR_DUMP_HEX);
473
- } else {
474
- v = grpc_slice_to_c_string(GRPC_MDVALUE(elem));
475
- }
476
- gpr_log(
477
- GPR_INFO,
478
- "Encode: '%s: %s', elem_interned=%d [%d], k_interned=%d, v_interned=%d",
479
- k, v, GRPC_MDELEM_IS_INTERNED(elem), GRPC_MDELEM_STORAGE(elem),
480
- grpc_slice_is_interned(GRPC_MDKEY(elem)),
481
- grpc_slice_is_interned(GRPC_MDVALUE(elem)));
482
- gpr_free(k);
483
- gpr_free(v);
695
+ #endif
696
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_http_trace)) {
697
+ hpack_enc_log(elem);
484
698
  }
485
-
486
- bool elem_interned = GRPC_MDELEM_IS_INTERNED(elem);
487
- bool key_interned = elem_interned || grpc_slice_is_interned(GRPC_MDKEY(elem));
488
-
489
- // Key is not interned, emit literals.
699
+ const bool elem_interned = GRPC_MDELEM_IS_INTERNED(elem);
700
+ const bool key_interned = elem_interned || grpc_slice_is_interned(elem_key);
701
+ /* Key is not interned, emit literals. */
490
702
  if (!key_interned) {
491
- emit_lithdr_noidx_v(c, 0, elem, st);
703
+ emit_lithdr_v<EmitLitHdrVType::NO_IDX_V>(c, elem, st);
492
704
  return;
493
705
  }
494
-
495
- uint32_t key_hash = grpc_slice_hash(GRPC_MDKEY(elem));
496
- uint32_t elem_hash = 0;
497
-
498
- if (elem_interned) {
499
- uint32_t value_hash = grpc_slice_hash(GRPC_MDVALUE(elem));
500
- elem_hash = GRPC_MDSTR_KV_HASH(key_hash, value_hash);
501
-
502
- inc_filter(HASH_FRAGMENT_1(elem_hash), &c->filter_elems_sum,
503
- c->filter_elems);
504
-
505
- /* is this elem currently in the decoders table? */
506
-
507
- if (grpc_mdelem_eq(c->entries_elems[HASH_FRAGMENT_2(elem_hash)], elem) &&
508
- c->indices_elems[HASH_FRAGMENT_2(elem_hash)] > c->tail_remote_index) {
509
- /* HIT: complete element (first cuckoo hash) */
510
- emit_indexed(c, dynidx(c, c->indices_elems[HASH_FRAGMENT_2(elem_hash)]),
511
- st);
512
- return;
513
- }
514
-
515
- if (grpc_mdelem_eq(c->entries_elems[HASH_FRAGMENT_3(elem_hash)], elem) &&
516
- c->indices_elems[HASH_FRAGMENT_3(elem_hash)] > c->tail_remote_index) {
517
- /* HIT: complete element (second cuckoo hash) */
518
- emit_indexed(c, dynidx(c, c->indices_elems[HASH_FRAGMENT_3(elem_hash)]),
519
- st);
520
- return;
521
- }
706
+ /* Interned metadata => maybe already indexed. */
707
+ const EmitIndexedStatus ret =
708
+ elem_interned ? maybe_emit_indexed(c, elem, st) : EmitIndexedStatus();
709
+ if (ret.emitted) {
710
+ return;
522
711
  }
523
-
524
- uint32_t indices_key;
525
-
526
712
  /* should this elem be in the table? */
527
- size_t decoder_space_usage =
528
- grpc_mdelem_get_size_in_hpack_table(elem, st->use_true_binary_metadata);
529
- bool should_add_elem = elem_interned &&
530
- decoder_space_usage < MAX_DECODER_SPACE_USAGE &&
531
- c->filter_elems[HASH_FRAGMENT_1(elem_hash)] >=
532
- c->filter_elems_sum / ONE_ON_ADD_PROBABILITY;
533
- void (*maybe_add)(grpc_chttp2_hpack_compressor*, grpc_mdelem, size_t) =
534
- should_add_elem ? add_elem : add_nothing;
535
- void (*emit)(grpc_chttp2_hpack_compressor*, uint32_t, grpc_mdelem,
536
- framer_state*) =
537
- should_add_elem ? emit_lithdr_incidx : emit_lithdr_noidx;
538
-
713
+ const size_t decoder_space_usage =
714
+ grpc_chttp2_get_size_in_hpack_table(elem, st->use_true_binary_metadata);
715
+ const bool decoder_space_available =
716
+ decoder_space_usage < kMaxDecoderSpaceUsage;
717
+ const bool should_add_elem =
718
+ elem_interned && decoder_space_available && ret.can_add;
719
+ const uint32_t elem_hash = ret.elem_hash;
539
720
  /* no hits for the elem... maybe there's a key? */
540
- indices_key = c->indices_keys[HASH_FRAGMENT_2(key_hash)];
541
- if (grpc_slice_eq(c->entries_keys[HASH_FRAGMENT_2(key_hash)],
542
- GRPC_MDKEY(elem)) &&
721
+ const uint32_t key_hash = elem_key.refcount->Hash(elem_key);
722
+ HpackEncoderIndex indices_key;
723
+ if (GetMatchingIndex<SliceRefComparator>(
724
+ c->key_table.entries, elem_key.refcount, key_hash, &indices_key) &&
543
725
  indices_key > c->tail_remote_index) {
544
- /* HIT: key (first cuckoo hash) */
545
- emit(c, dynidx(c, indices_key), elem, st);
546
- maybe_add(c, elem, decoder_space_usage);
726
+ emit_maybe_add(c, elem, st, indices_key, should_add_elem,
727
+ decoder_space_usage, elem_hash, key_hash);
547
728
  return;
548
729
  }
549
-
550
- indices_key = c->indices_keys[HASH_FRAGMENT_3(key_hash)];
551
- if (grpc_slice_eq(c->entries_keys[HASH_FRAGMENT_3(key_hash)],
552
- GRPC_MDKEY(elem)) &&
553
- indices_key > c->tail_remote_index) {
554
- /* HIT: key (first cuckoo hash) */
555
- emit(c, dynidx(c, indices_key), elem, st);
556
- maybe_add(c, elem, decoder_space_usage);
557
- return;
558
- }
559
-
560
730
  /* no elem, key in the table... fall back to literal emission */
561
- bool should_add_key =
562
- !elem_interned && decoder_space_usage < MAX_DECODER_SPACE_USAGE;
563
- emit = (should_add_elem || should_add_key) ? emit_lithdr_incidx_v
564
- : emit_lithdr_noidx_v;
565
- maybe_add =
566
- should_add_elem ? add_elem : (should_add_key ? add_key : add_nothing);
567
- emit(c, 0, elem, st);
568
- maybe_add(c, elem, decoder_space_usage);
731
+ const bool should_add_key = !elem_interned && decoder_space_available;
732
+ if (should_add_elem || should_add_key) {
733
+ emit_lithdr_v<EmitLitHdrVType::INC_IDX_V>(c, elem, st);
734
+ } else {
735
+ emit_lithdr_v<EmitLitHdrVType::NO_IDX_V>(c, elem, st);
736
+ }
737
+ if (should_add_elem) {
738
+ add_elem(c, elem, decoder_space_usage, elem_hash, key_hash);
739
+ } else if (should_add_key) {
740
+ add_key(c, elem, decoder_space_usage, key_hash);
741
+ }
569
742
  }
570
743
 
571
744
  #define STRLEN_LIT(x) (sizeof(x) - 1)
@@ -577,8 +750,8 @@ static void deadline_enc(grpc_chttp2_hpack_compressor* c, grpc_millis deadline,
577
750
  grpc_mdelem mdelem;
578
751
  grpc_http2_encode_timeout(deadline - grpc_core::ExecCtx::Get()->Now(),
579
752
  timeout_str);
580
- mdelem = grpc_mdelem_from_slices(GRPC_MDSTR_GRPC_TIMEOUT,
581
- grpc_slice_from_copied_string(timeout_str));
753
+ mdelem = grpc_mdelem_from_slices(
754
+ GRPC_MDSTR_GRPC_TIMEOUT, grpc_core::UnmanagedMemorySlice(timeout_str));
582
755
  hpack_enc(c, mdelem, st);
583
756
  GRPC_MDELEM_UNREF(mdelem);
584
757
  }
@@ -591,22 +764,18 @@ void grpc_chttp2_hpack_compressor_init(grpc_chttp2_hpack_compressor* c) {
591
764
  c->cap_table_elems = elems_for_bytes(c->max_table_size);
592
765
  c->max_table_elems = c->cap_table_elems;
593
766
  c->max_usable_size = GRPC_CHTTP2_HPACKC_INITIAL_TABLE_SIZE;
594
- c->table_elem_size = static_cast<uint16_t*>(
595
- gpr_malloc(sizeof(*c->table_elem_size) * c->cap_table_elems));
596
- memset(c->table_elem_size, 0,
597
- sizeof(*c->table_elem_size) * c->cap_table_elems);
598
- for (size_t i = 0; i < GPR_ARRAY_SIZE(c->entries_keys); i++) {
599
- c->entries_keys[i] = terminal_slice;
600
- }
767
+ const size_t alloc_size = sizeof(*c->table_elem_size) * c->cap_table_elems;
768
+ c->table_elem_size = static_cast<uint16_t*>(gpr_malloc(alloc_size));
769
+ memset(c->table_elem_size, 0, alloc_size);
601
770
  }
602
771
 
603
772
  void grpc_chttp2_hpack_compressor_destroy(grpc_chttp2_hpack_compressor* c) {
604
- int i;
605
- for (i = 0; i < GRPC_CHTTP2_HPACKC_NUM_VALUES; i++) {
606
- if (c->entries_keys[i].refcount != &terminal_slice_refcount) {
607
- grpc_slice_unref_internal(c->entries_keys[i]);
773
+ for (int i = 0; i < GRPC_CHTTP2_HPACKC_NUM_VALUES; i++) {
774
+ auto* const key = GetEntry<grpc_slice_refcount*>(c->key_table.entries, i);
775
+ if (key != nullptr) {
776
+ key->Unref();
608
777
  }
609
- GRPC_MDELEM_UNREF(c->entries_elems[i]);
778
+ GRPC_MDELEM_UNREF(GetEntry<grpc_mdelem>(c->elem_table.entries, i));
610
779
  }
611
780
  gpr_free(c->table_elem_size);
612
781
  }
@@ -657,7 +826,7 @@ void grpc_chttp2_hpack_compressor_set_max_table_size(
657
826
  }
658
827
  }
659
828
  c->advertise_table_size_change = 1;
660
- if (grpc_http_trace.enabled()) {
829
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_http_trace)) {
661
830
  gpr_log(GPR_INFO, "set max table size from encoder to %d", max_table_size);
662
831
  }
663
832
  }
@@ -668,16 +837,23 @@ void grpc_chttp2_encode_header(grpc_chttp2_hpack_compressor* c,
668
837
  grpc_metadata_batch* metadata,
669
838
  const grpc_encode_header_options* options,
670
839
  grpc_slice_buffer* outbuf) {
671
- GPR_ASSERT(options->stream_id != 0);
672
-
840
+ /* grpc_chttp2_encode_header is called by FlushInitial/TrailingMetadata in
841
+ writing.cc. Specifically, on streams returned by NextStream(), which
842
+ returns streams from the list GRPC_CHTTP2_LIST_WRITABLE. The only way to be
843
+ added to the list is via grpc_chttp2_list_add_writable_stream(), which
844
+ validates that stream_id is not 0. So, this can be a debug assert. */
845
+ GPR_DEBUG_ASSERT(options->stream_id != 0);
673
846
  framer_state st;
847
+ #ifndef NDEBUG
674
848
  st.seen_regular_header = 0;
849
+ #endif
675
850
  st.stream_id = options->stream_id;
676
851
  st.output = outbuf;
677
852
  st.is_first_frame = 1;
678
853
  st.stats = options->stats;
679
854
  st.max_frame_size = options->max_frame_size;
680
855
  st.use_true_binary_metadata = options->use_true_binary_metadata;
856
+ st.is_end_of_stream = options->is_eof;
681
857
 
682
858
  /* Encode a metadata batch; store the returned values, representing
683
859
  a metadata element that needs to be unreffed back into the metadata
@@ -688,16 +864,37 @@ void grpc_chttp2_encode_header(grpc_chttp2_hpack_compressor* c,
688
864
  emit_advertise_table_size_change(c, &st);
689
865
  }
690
866
  for (size_t i = 0; i < extra_headers_size; ++i) {
691
- hpack_enc(c, *extra_headers[i], &st);
867
+ grpc_mdelem md = *extra_headers[i];
868
+ const bool is_static =
869
+ GRPC_MDELEM_STORAGE(md) == GRPC_MDELEM_STORAGE_STATIC;
870
+ uintptr_t static_index;
871
+ if (is_static &&
872
+ (static_index =
873
+ reinterpret_cast<grpc_core::StaticMetadata*>(GRPC_MDELEM_DATA(md))
874
+ ->StaticIndex()) < GRPC_CHTTP2_LAST_STATIC_ENTRY) {
875
+ emit_indexed(c, static_cast<uint32_t>(static_index + 1), &st);
876
+ } else {
877
+ hpack_enc(c, md, &st);
878
+ }
692
879
  }
693
880
  grpc_metadata_batch_assert_ok(metadata);
694
881
  for (grpc_linked_mdelem* l = metadata->list.head; l; l = l->next) {
695
- hpack_enc(c, l->md, &st);
882
+ const bool is_static =
883
+ GRPC_MDELEM_STORAGE(l->md) == GRPC_MDELEM_STORAGE_STATIC;
884
+ uintptr_t static_index;
885
+ if (is_static &&
886
+ (static_index = reinterpret_cast<grpc_core::StaticMetadata*>(
887
+ GRPC_MDELEM_DATA(l->md))
888
+ ->StaticIndex()) < GRPC_CHTTP2_LAST_STATIC_ENTRY) {
889
+ emit_indexed(c, static_cast<uint32_t>(static_index + 1), &st);
890
+ } else {
891
+ hpack_enc(c, l->md, &st);
892
+ }
696
893
  }
697
894
  grpc_millis deadline = metadata->deadline;
698
895
  if (deadline != GRPC_MILLIS_INF_FUTURE) {
699
896
  deadline_enc(c, deadline, &st);
700
897
  }
701
898
 
702
- finish_frame(&st, 1, options->is_eof);
899
+ finish_frame(&st, 1);
703
900
  }