grpc 1.45.0 → 1.53.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 (1842) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +437 -254
  3. data/include/grpc/byte_buffer.h +76 -1
  4. data/include/grpc/byte_buffer_reader.h +19 -1
  5. data/include/grpc/compression.h +2 -2
  6. data/include/grpc/event_engine/endpoint_config.h +11 -5
  7. data/include/grpc/event_engine/event_engine.h +129 -39
  8. data/include/grpc/event_engine/internal/memory_allocator_impl.h +1 -1
  9. data/include/grpc/event_engine/internal/slice_cast.h +67 -0
  10. data/include/grpc/event_engine/memory_allocator.h +1 -16
  11. data/include/grpc/event_engine/port.h +1 -1
  12. data/include/grpc/event_engine/slice.h +306 -0
  13. data/include/grpc/event_engine/slice_buffer.h +159 -0
  14. data/include/grpc/fork.h +25 -1
  15. data/include/grpc/grpc.h +4 -14
  16. data/include/grpc/grpc_posix.h +1 -1
  17. data/include/grpc/grpc_security.h +11 -0
  18. data/include/grpc/impl/codegen/atm.h +3 -71
  19. data/include/grpc/impl/codegen/atm_gcc_atomic.h +3 -67
  20. data/include/grpc/impl/codegen/atm_gcc_sync.h +3 -61
  21. data/include/grpc/impl/codegen/atm_windows.h +3 -108
  22. data/include/grpc/impl/codegen/byte_buffer.h +4 -78
  23. data/include/grpc/impl/codegen/byte_buffer_reader.h +4 -19
  24. data/include/grpc/impl/codegen/compression_types.h +5 -83
  25. data/include/grpc/impl/codegen/connectivity_state.h +5 -21
  26. data/include/grpc/impl/codegen/fork.h +4 -25
  27. data/include/grpc/impl/codegen/gpr_types.h +4 -35
  28. data/include/grpc/impl/codegen/grpc_types.h +5 -797
  29. data/include/grpc/impl/codegen/log.h +3 -86
  30. data/include/grpc/impl/codegen/port_platform.h +3 -699
  31. data/include/grpc/impl/codegen/propagation_bits.h +3 -28
  32. data/include/grpc/impl/codegen/slice.h +4 -107
  33. data/include/grpc/impl/codegen/status.h +4 -131
  34. data/include/grpc/impl/codegen/sync.h +3 -42
  35. data/include/grpc/impl/codegen/sync_abseil.h +3 -12
  36. data/include/grpc/impl/codegen/sync_custom.h +3 -14
  37. data/include/grpc/impl/codegen/sync_generic.h +3 -25
  38. data/include/grpc/impl/codegen/sync_posix.h +3 -28
  39. data/include/grpc/impl/codegen/sync_windows.h +3 -16
  40. data/include/grpc/impl/compression_types.h +109 -0
  41. data/include/grpc/impl/connectivity_state.h +47 -0
  42. data/include/grpc/impl/grpc_types.h +827 -0
  43. data/include/grpc/impl/propagation_bits.h +54 -0
  44. data/include/grpc/impl/slice_type.h +112 -0
  45. data/include/grpc/load_reporting.h +1 -1
  46. data/include/grpc/module.modulemap +5 -1
  47. data/include/grpc/slice.h +1 -1
  48. data/include/grpc/status.h +131 -1
  49. data/include/grpc/support/atm.h +70 -1
  50. data/include/grpc/support/atm_gcc_atomic.h +59 -1
  51. data/include/grpc/support/atm_gcc_sync.h +58 -1
  52. data/include/grpc/support/atm_windows.h +105 -1
  53. data/include/grpc/support/log.h +87 -1
  54. data/include/grpc/support/log_windows.h +1 -1
  55. data/include/grpc/support/port_platform.h +767 -1
  56. data/include/grpc/support/string_util.h +1 -1
  57. data/include/grpc/support/sync.h +35 -2
  58. data/include/grpc/support/sync_abseil.h +11 -1
  59. data/include/grpc/support/sync_custom.h +13 -1
  60. data/include/grpc/support/sync_generic.h +24 -1
  61. data/include/grpc/support/sync_posix.h +27 -1
  62. data/include/grpc/support/sync_windows.h +15 -1
  63. data/include/grpc/support/time.h +31 -6
  64. data/src/core/ext/filters/backend_metrics/backend_metric_filter.cc +148 -0
  65. data/src/core/ext/filters/backend_metrics/backend_metric_filter.h +52 -0
  66. data/src/core/ext/filters/backend_metrics/backend_metric_provider.h +29 -0
  67. data/src/core/ext/filters/census/grpc_context.cc +19 -17
  68. data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +315 -0
  69. data/src/core/ext/filters/channel_idle/channel_idle_filter.h +142 -0
  70. data/src/core/ext/filters/{client_idle → channel_idle}/idle_filter_state.cc +1 -1
  71. data/src/core/ext/filters/{client_idle → channel_idle}/idle_filter_state.h +6 -4
  72. data/src/core/ext/filters/client_channel/backend_metric.cc +19 -12
  73. data/src/core/ext/filters/client_channel/backend_metric.h +21 -11
  74. data/src/core/ext/filters/client_channel/backup_poller.cc +34 -34
  75. data/src/core/ext/filters/client_channel/backup_poller.h +26 -28
  76. data/src/core/ext/filters/client_channel/channel_connectivity.cc +89 -44
  77. data/src/core/ext/filters/client_channel/client_channel.cc +557 -540
  78. data/src/core/ext/filters/client_channel/client_channel.h +70 -26
  79. data/src/core/ext/filters/client_channel/client_channel_channelz.cc +19 -23
  80. data/src/core/ext/filters/client_channel/client_channel_channelz.h +33 -23
  81. data/src/core/ext/filters/client_channel/client_channel_factory.cc +19 -43
  82. data/src/core/ext/filters/client_channel/client_channel_factory.h +11 -11
  83. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +22 -47
  84. data/src/core/ext/filters/client_channel/client_channel_service_config.cc +153 -0
  85. data/src/core/ext/filters/client_channel/{resolver_result_parsing.h → client_channel_service_config.h} +33 -27
  86. data/src/core/ext/filters/client_channel/config_selector.cc +1 -0
  87. data/src/core/ext/filters/client_channel/config_selector.h +29 -23
  88. data/src/core/ext/filters/client_channel/connector.h +19 -10
  89. data/src/core/ext/filters/client_channel/dynamic_filters.cc +40 -54
  90. data/src/core/ext/filters/client_channel/dynamic_filters.h +20 -11
  91. data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +2 -0
  92. data/src/core/ext/filters/client_channel/global_subchannel_pool.h +24 -21
  93. data/src/core/ext/filters/client_channel/health/health_check_client.cc +137 -582
  94. data/src/core/ext/filters/client_channel/health/health_check_client.h +29 -163
  95. data/src/core/ext/filters/client_channel/http_proxy.cc +130 -164
  96. data/src/core/ext/filters/client_channel/http_proxy.h +46 -22
  97. data/src/core/ext/filters/client_channel/lb_call_state_internal.h +39 -0
  98. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +8 -5
  99. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +4 -3
  100. data/src/core/ext/filters/client_channel/lb_policy/backend_metric_data.h +49 -0
  101. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +37 -16
  102. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +18 -13
  103. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +71 -131
  104. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h +41 -24
  105. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +410 -375
  106. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +26 -27
  107. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +15 -3
  108. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +9 -7
  109. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +18 -20
  110. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +27 -22
  111. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +28 -19
  112. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +26 -25
  113. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +338 -0
  114. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.h +57 -0
  115. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric_internal.h +117 -0
  116. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +1129 -0
  117. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h +94 -0
  118. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +174 -180
  119. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +478 -479
  120. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +491 -409
  121. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +19 -9
  122. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +618 -642
  123. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +261 -234
  124. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +165 -143
  125. data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/static_stride_scheduler.cc +128 -0
  126. data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/static_stride_scheduler.h +71 -0
  127. data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/weighted_round_robin.cc +972 -0
  128. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +280 -248
  129. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +251 -187
  130. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_attributes.cc +42 -0
  131. data/src/core/ext/filters/client_channel/lb_policy/xds/{xds.h → xds_attributes.h} +19 -15
  132. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_args.h +3 -3
  133. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +178 -256
  134. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +212 -216
  135. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +543 -584
  136. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_override_host.cc +819 -0
  137. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_override_host.h +67 -0
  138. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_wrr_locality.cc +369 -0
  139. data/src/core/ext/filters/client_channel/local_subchannel_pool.cc +4 -0
  140. data/src/core/ext/filters/client_channel/local_subchannel_pool.h +22 -21
  141. data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +34 -19
  142. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +579 -376
  143. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +50 -44
  144. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +31 -30
  145. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +89 -84
  146. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +300 -209
  147. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +82 -61
  148. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_posix.cc +18 -18
  149. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +20 -19
  150. data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.cc +2 -0
  151. data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.h +22 -22
  152. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +86 -224
  153. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +21 -34
  154. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +19 -5
  155. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +135 -63
  156. data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +269 -0
  157. data/src/core/ext/filters/client_channel/resolver/polling_resolver.h +121 -0
  158. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +21 -27
  159. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +413 -303
  160. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.h +6 -4
  161. data/src/core/ext/filters/client_channel/retry_filter.cc +184 -166
  162. data/src/core/ext/filters/client_channel/retry_filter.h +4 -3
  163. data/src/core/ext/filters/client_channel/retry_service_config.cc +197 -229
  164. data/src/core/ext/filters/client_channel/retry_service_config.h +29 -26
  165. data/src/core/ext/filters/client_channel/retry_throttle.cc +28 -37
  166. data/src/core/ext/filters/client_channel/retry_throttle.h +36 -29
  167. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +34 -17
  168. data/src/core/ext/filters/client_channel/subchannel.cc +336 -388
  169. data/src/core/ext/filters/client_channel/subchannel.h +112 -82
  170. data/src/core/ext/filters/client_channel/subchannel_interface_internal.h +38 -0
  171. data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +17 -77
  172. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +41 -47
  173. data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +470 -0
  174. data/src/core/ext/filters/client_channel/subchannel_stream_client.h +222 -0
  175. data/src/core/ext/filters/deadline/deadline_filter.cc +94 -76
  176. data/src/core/ext/filters/deadline/deadline_filter.h +14 -12
  177. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +154 -372
  178. data/src/core/ext/filters/fault_injection/fault_injection_filter.h +41 -9
  179. data/src/core/ext/filters/fault_injection/fault_injection_service_config_parser.cc +118 -0
  180. data/src/core/ext/filters/fault_injection/{service_config_parser.h → fault_injection_service_config_parser.h} +34 -13
  181. data/src/core/ext/filters/http/client/http_client_filter.cc +119 -477
  182. data/src/core/ext/filters/http/client/http_client_filter.h +55 -25
  183. data/src/core/ext/filters/http/client_authority_filter.cc +48 -58
  184. data/src/core/ext/filters/http/client_authority_filter.h +32 -28
  185. data/src/core/ext/filters/http/http_filters_plugin.cc +46 -52
  186. data/src/core/ext/filters/http/message_compress/compression_filter.cc +307 -0
  187. data/src/core/ext/filters/http/message_compress/compression_filter.h +139 -0
  188. data/src/core/ext/filters/http/server/http_server_filter.cc +111 -385
  189. data/src/core/ext/filters/http/server/http_server_filter.h +58 -24
  190. data/src/core/ext/filters/message_size/message_size_filter.cc +117 -137
  191. data/src/core/ext/filters/message_size/message_size_filter.h +34 -17
  192. data/src/core/ext/filters/rbac/rbac_filter.cc +29 -16
  193. data/src/core/ext/filters/rbac/rbac_filter.h +11 -3
  194. data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +736 -523
  195. data/src/core/ext/filters/rbac/rbac_service_config_parser.h +18 -7
  196. data/src/core/ext/filters/server_config_selector/server_config_selector.h +20 -8
  197. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +90 -202
  198. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.h +4 -3
  199. data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +219 -0
  200. data/src/core/ext/filters/stateful_session/stateful_session_filter.h +66 -0
  201. data/src/core/ext/filters/stateful_session/stateful_session_service_config_parser.cc +82 -0
  202. data/src/core/ext/filters/stateful_session/stateful_session_service_config_parser.h +93 -0
  203. data/src/core/ext/transport/chttp2/alpn/alpn.cc +18 -18
  204. data/src/core/ext/transport/chttp2/alpn/alpn.h +24 -24
  205. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +186 -241
  206. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +38 -30
  207. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +209 -215
  208. data/src/core/ext/transport/chttp2/server/chttp2_server.h +26 -26
  209. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +24 -24
  210. data/src/core/ext/transport/chttp2/transport/bin_decoder.h +35 -34
  211. data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +31 -30
  212. data/src/core/ext/transport/chttp2/transport/bin_encoder.h +29 -29
  213. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +893 -1079
  214. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +28 -23
  215. data/src/core/ext/transport/chttp2/transport/context_list.cc +23 -19
  216. data/src/core/ext/transport/chttp2/transport/context_list.h +32 -29
  217. data/src/core/ext/transport/chttp2/transport/decode_huff.cc +251 -0
  218. data/src/core/ext/transport/chttp2/transport/decode_huff.h +971 -0
  219. data/src/core/ext/transport/chttp2/transport/flow_control.cc +350 -300
  220. data/src/core/ext/transport/chttp2/transport/flow_control.h +248 -325
  221. data/src/core/ext/transport/chttp2/transport/frame.h +22 -26
  222. data/src/core/ext/transport/chttp2/transport/frame_data.cc +85 -234
  223. data/src/core/ext/transport/chttp2/transport/frame_data.h +38 -61
  224. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +41 -36
  225. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +24 -22
  226. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +31 -25
  227. data/src/core/ext/transport/chttp2/transport/frame_ping.h +25 -22
  228. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +35 -26
  229. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +24 -21
  230. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +46 -77
  231. data/src/core/ext/transport/chttp2/transport/frame_settings.h +27 -23
  232. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +34 -33
  233. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +24 -21
  234. data/src/core/ext/transport/chttp2/transport/hpack_constants.h +10 -4
  235. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +169 -220
  236. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +59 -61
  237. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +4 -1
  238. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.h +14 -5
  239. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +114 -542
  240. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +31 -24
  241. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +75 -67
  242. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +70 -48
  243. data/src/core/ext/transport/chttp2/transport/http2_settings.cc +21 -19
  244. data/src/core/ext/transport/chttp2/transport/http2_settings.h +39 -38
  245. data/src/core/ext/transport/chttp2/transport/http_trace.cc +19 -0
  246. data/src/core/ext/transport/chttp2/transport/http_trace.h +24 -0
  247. data/src/core/ext/transport/chttp2/transport/huffsyms.cc +20 -20
  248. data/src/core/ext/transport/chttp2/transport/huffsyms.h +21 -21
  249. data/src/core/ext/transport/chttp2/transport/internal.h +250 -298
  250. data/src/core/ext/transport/chttp2/transport/parsing.cc +365 -132
  251. data/src/core/ext/transport/chttp2/transport/stream_lists.cc +30 -30
  252. data/src/core/ext/transport/chttp2/transport/stream_map.cc +24 -24
  253. data/src/core/ext/transport/chttp2/transport/stream_map.h +34 -33
  254. data/src/core/ext/transport/chttp2/transport/varint.cc +19 -20
  255. data/src/core/ext/transport/chttp2/transport/varint.h +39 -34
  256. data/src/core/ext/transport/chttp2/transport/writing.cc +144 -106
  257. data/src/core/ext/transport/inproc/inproc_plugin.cc +17 -18
  258. data/src/core/ext/transport/inproc/inproc_transport.cc +227 -274
  259. data/src/core/ext/transport/inproc/inproc_transport.h +23 -21
  260. data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.c +27 -24
  261. data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.h +173 -73
  262. data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.c +39 -36
  263. data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.h +210 -85
  264. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.c +29 -344
  265. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.h +189 -1489
  266. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump_shared.upb.c +388 -0
  267. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump_shared.upb.h +1953 -0
  268. data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.c +5 -5
  269. data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.h +38 -17
  270. data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.c +9 -7
  271. data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.h +56 -13
  272. data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.c +7 -7
  273. data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.h +24 -2
  274. data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.c +4 -4
  275. data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.h +19 -6
  276. data/src/core/ext/upb-generated/envoy/admin/v3/mutex_stats.upb.c +4 -4
  277. data/src/core/ext/upb-generated/envoy/admin/v3/mutex_stats.upb.h +15 -2
  278. data/src/core/ext/upb-generated/envoy/admin/v3/server_info.upb.c +49 -46
  279. data/src/core/ext/upb-generated/envoy/admin/v3/server_info.upb.h +229 -82
  280. data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.c +3 -3
  281. data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.h +16 -4
  282. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.c +12 -12
  283. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h +40 -8
  284. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.c +5 -5
  285. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +26 -4
  286. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +55 -55
  287. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +379 -140
  288. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.c +140 -126
  289. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +824 -301
  290. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +24 -18
  291. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +114 -29
  292. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +195 -191
  293. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +1042 -412
  294. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.c +3 -3
  295. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +16 -4
  296. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c +44 -24
  297. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +171 -42
  298. data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.c +72 -63
  299. data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.h +517 -202
  300. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +61 -36
  301. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +333 -66
  302. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.c +5 -4
  303. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +20 -6
  304. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +93 -91
  305. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +615 -213
  306. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +76 -33
  307. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +417 -79
  308. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +2 -2
  309. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +20 -8
  310. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.c +5 -25
  311. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.h +16 -93
  312. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.c +5 -5
  313. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.h +38 -17
  314. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +70 -68
  315. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +447 -157
  316. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +98 -66
  317. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +545 -191
  318. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.c +4 -4
  319. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +33 -13
  320. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +108 -87
  321. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +502 -149
  322. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +2 -2
  323. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +9 -2
  324. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.c +6 -6
  325. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.h +42 -17
  326. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.c +24 -9
  327. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +110 -18
  328. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +8 -8
  329. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.h +64 -26
  330. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.c +4 -4
  331. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.h +20 -6
  332. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +18 -18
  333. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +118 -49
  334. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +39 -32
  335. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +242 -87
  336. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +32 -32
  337. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +226 -105
  338. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.c +2 -2
  339. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +13 -4
  340. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +86 -53
  341. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +475 -141
  342. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +56 -50
  343. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +379 -160
  344. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.c +16 -12
  345. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.h +77 -16
  346. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +9 -6
  347. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +50 -8
  348. data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.c +5 -5
  349. data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.h +26 -6
  350. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.c +33 -32
  351. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.h +253 -102
  352. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.c +34 -34
  353. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.h +229 -92
  354. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +74 -55
  355. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +494 -160
  356. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +38 -30
  357. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +232 -124
  358. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +458 -351
  359. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +2879 -947
  360. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +11 -11
  361. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +67 -22
  362. data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.c +79 -54
  363. data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.h +454 -133
  364. data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.c +5 -4
  365. data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.h +21 -2
  366. data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.c +3 -3
  367. data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.h +16 -4
  368. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +5 -5
  369. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +38 -14
  370. data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.c +5 -5
  371. data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.h +33 -14
  372. data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.c +17 -16
  373. data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.h +89 -38
  374. data/src/core/ext/upb-generated/envoy/config/trace/v3/opentelemetry.upb.c +47 -0
  375. data/src/core/ext/upb-generated/envoy/config/trace/v3/opentelemetry.upb.h +107 -0
  376. data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.c +2 -2
  377. data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.h +13 -4
  378. data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.c +8 -8
  379. data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.h +58 -21
  380. data/src/core/ext/upb-generated/envoy/config/trace/v3/trace.upb.c +1 -0
  381. data/src/core/ext/upb-generated/envoy/config/trace/v3/trace.upb.h +1 -0
  382. data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.c +9 -9
  383. data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.h +50 -16
  384. data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.c +9 -8
  385. data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.h +43 -10
  386. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.c +2 -2
  387. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.h +16 -8
  388. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.c +15 -15
  389. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.h +101 -38
  390. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c +25 -25
  391. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.h +167 -71
  392. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.c +16 -8
  393. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.h +88 -16
  394. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c +14 -11
  395. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h +71 -17
  396. data/src/core/ext/upb-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb.c +62 -0
  397. data/src/core/ext/upb-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb.h +179 -0
  398. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +184 -144
  399. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +1091 -361
  400. data/src/core/ext/upb-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upb.c +46 -0
  401. data/src/core/ext/upb-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upb.h +98 -0
  402. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/client_side_weighted_round_robin/v3/client_side_weighted_round_robin.upb.c +54 -0
  403. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/client_side_weighted_round_robin/v3/client_side_weighted_round_robin.upb.h +188 -0
  404. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/common/v3/common.upb.c +111 -0
  405. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/common/v3/common.upb.h +444 -0
  406. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.c +56 -0
  407. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.h +192 -0
  408. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.c +46 -0
  409. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.h +98 -0
  410. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +56 -48
  411. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +327 -130
  412. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +13 -13
  413. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +88 -31
  414. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +83 -56
  415. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +472 -136
  416. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.c +5 -5
  417. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.h +35 -13
  418. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.c +1 -1
  419. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h +6 -2
  420. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +171 -54
  421. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +917 -134
  422. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +8 -8
  423. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +59 -25
  424. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.c +33 -33
  425. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.h +205 -76
  426. data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.c +4 -4
  427. data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.h +23 -8
  428. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.c +8 -8
  429. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.h +62 -25
  430. data/src/core/ext/upb-generated/envoy/type/matcher/v3/filter_state.upb.c +47 -0
  431. data/src/core/ext/upb-generated/envoy/type/matcher/v3/filter_state.upb.h +113 -0
  432. data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.c +8 -8
  433. data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.h +36 -8
  434. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +7 -7
  435. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +55 -22
  436. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.c +3 -3
  437. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.h +26 -11
  438. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +3 -3
  439. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +30 -11
  440. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +2 -2
  441. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +20 -8
  442. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +8 -8
  443. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +58 -22
  444. data/src/core/ext/upb-generated/envoy/type/matcher/v3/status_code_input.upb.c +43 -0
  445. data/src/core/ext/upb-generated/envoy/type/matcher/v3/status_code_input.upb.h +114 -0
  446. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +9 -9
  447. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +82 -29
  448. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.c +5 -5
  449. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.h +49 -22
  450. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +12 -12
  451. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +99 -36
  452. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +16 -16
  453. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +118 -44
  454. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +20 -20
  455. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +120 -40
  456. data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.c +7 -7
  457. data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.h +46 -16
  458. data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.c +2 -2
  459. data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.h +9 -2
  460. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.c +5 -5
  461. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +25 -8
  462. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.c +9 -9
  463. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +36 -6
  464. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_strategy.upb.c +63 -0
  465. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_strategy.upb.h +202 -0
  466. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_unit.upb.h +3 -1
  467. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.c +4 -4
  468. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +15 -2
  469. data/src/core/ext/upb-generated/envoy/type/v3/token_bucket.upb.c +5 -5
  470. data/src/core/ext/upb-generated/envoy/type/v3/token_bucket.upb.h +23 -6
  471. data/src/core/ext/upb-generated/google/api/annotations.upb.c +3 -3
  472. data/src/core/ext/upb-generated/google/api/annotations.upb.h +17 -2
  473. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.c +70 -66
  474. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.h +477 -185
  475. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +80 -74
  476. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +512 -182
  477. data/src/core/ext/upb-generated/google/api/http.upb.c +17 -17
  478. data/src/core/ext/upb-generated/google/api/http.upb.h +134 -49
  479. data/src/core/ext/upb-generated/google/api/httpbody.upb.c +4 -4
  480. data/src/core/ext/upb-generated/google/api/httpbody.upb.h +25 -9
  481. data/src/core/ext/upb-generated/google/protobuf/any.upb.c +3 -3
  482. data/src/core/ext/upb-generated/google/protobuf/any.upb.h +12 -2
  483. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +183 -181
  484. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +1332 -488
  485. data/src/core/ext/upb-generated/google/protobuf/duration.upb.c +3 -3
  486. data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +16 -6
  487. data/src/core/ext/upb-generated/google/protobuf/empty.upb.c +1 -1
  488. data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +6 -2
  489. data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +15 -15
  490. data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +126 -46
  491. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.c +3 -3
  492. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +16 -6
  493. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.c +18 -18
  494. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +81 -18
  495. data/src/core/ext/upb-generated/google/rpc/status.upb.c +4 -4
  496. data/src/core/ext/upb-generated/google/rpc/status.upb.h +25 -9
  497. data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.c +15 -15
  498. data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.h +89 -30
  499. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c +12 -12
  500. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +55 -14
  501. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +69 -65
  502. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +424 -169
  503. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c +8 -7
  504. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +32 -8
  505. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c +4 -4
  506. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +18 -4
  507. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c +31 -31
  508. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +204 -76
  509. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.c +11 -11
  510. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.h +63 -22
  511. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.c +175 -0
  512. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.h +792 -0
  513. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.c +22 -22
  514. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +115 -16
  515. data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +6 -6
  516. data/src/core/ext/upb-generated/udpa/annotations/security.upb.h +29 -4
  517. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.c +3 -3
  518. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h +10 -2
  519. data/src/core/ext/upb-generated/udpa/annotations/status.upb.c +6 -6
  520. data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +33 -8
  521. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +5 -5
  522. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +26 -4
  523. data/src/core/ext/upb-generated/validate/validate.upb.c +264 -253
  524. data/src/core/ext/upb-generated/validate/validate.upb.h +1974 -709
  525. data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.c +22 -22
  526. data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.h +115 -16
  527. data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.c +6 -6
  528. data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.h +29 -4
  529. data/src/core/ext/upb-generated/xds/annotations/v3/sensitive.upb.c +3 -3
  530. data/src/core/ext/upb-generated/xds/annotations/v3/sensitive.upb.h +10 -2
  531. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.c +18 -18
  532. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.h +94 -18
  533. data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.c +5 -5
  534. data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.h +26 -4
  535. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.c +2 -2
  536. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.h +9 -2
  537. data/src/core/ext/upb-generated/xds/core/v3/cidr.upb.c +47 -0
  538. data/src/core/ext/upb-generated/xds/core/v3/cidr.upb.h +107 -0
  539. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.c +8 -8
  540. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.h +50 -16
  541. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +5 -5
  542. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.h +33 -12
  543. data/src/core/ext/upb-generated/xds/core/v3/extension.upb.c +3 -3
  544. data/src/core/ext/upb-generated/xds/core/v3/extension.upb.h +16 -4
  545. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.c +5 -5
  546. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.h +27 -10
  547. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +10 -10
  548. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.h +83 -34
  549. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +5 -5
  550. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.h +22 -4
  551. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.c +14 -13
  552. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +84 -28
  553. data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.c +46 -0
  554. data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.h +113 -0
  555. data/src/core/ext/upb-generated/xds/type/matcher/v3/cel.upb.c +46 -0
  556. data/src/core/ext/upb-generated/xds/type/matcher/v3/cel.upb.h +98 -0
  557. data/src/core/ext/upb-generated/xds/type/matcher/v3/domain.upb.c +62 -0
  558. data/src/core/ext/upb-generated/xds/type/matcher/v3/domain.upb.h +174 -0
  559. data/src/core/ext/upb-generated/xds/type/matcher/v3/http_inputs.upb.c +36 -0
  560. data/src/core/ext/upb-generated/xds/type/matcher/v3/http_inputs.upb.h +74 -0
  561. data/src/core/ext/upb-generated/xds/type/matcher/v3/ip.upb.c +65 -0
  562. data/src/core/ext/upb-generated/xds/type/matcher/v3/ip.upb.h +191 -0
  563. data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.c +43 -39
  564. data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.h +309 -121
  565. data/src/core/ext/upb-generated/xds/type/matcher/v3/range.upb.c +127 -0
  566. data/src/core/ext/upb-generated/xds/type/matcher/v3/range.upb.h +474 -0
  567. data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.c +4 -4
  568. data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.h +31 -12
  569. data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.c +9 -9
  570. data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.h +82 -29
  571. data/src/core/ext/upb-generated/xds/type/v3/cel.upb.c +67 -0
  572. data/src/core/ext/upb-generated/xds/type/v3/cel.upb.h +214 -0
  573. data/src/core/ext/upb-generated/xds/type/v3/range.upb.c +64 -0
  574. data/src/core/ext/upb-generated/xds/type/v3/range.upb.h +208 -0
  575. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.c +3 -4
  576. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.h +16 -4
  577. data/src/core/ext/upbdefs-generated/envoy/admin/v3/clusters.upbdefs.c +54 -53
  578. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.c +67 -274
  579. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.h +0 -85
  580. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump_shared.upbdefs.c +277 -0
  581. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump_shared.upbdefs.h +125 -0
  582. data/src/core/ext/upbdefs-generated/envoy/admin/v3/listeners.upbdefs.c +14 -11
  583. data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.c +107 -107
  584. data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.c +199 -187
  585. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.c +50 -46
  586. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +149 -129
  587. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.h +0 -5
  588. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.c +16 -12
  589. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.c +95 -75
  590. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.h +5 -0
  591. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +187 -183
  592. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.c +129 -94
  593. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.h +10 -0
  594. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.c +18 -33
  595. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.h +0 -5
  596. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.c +168 -154
  597. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.h +5 -0
  598. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +190 -186
  599. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.c +7 -3
  600. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.h +5 -0
  601. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.c +16 -16
  602. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.c +71 -66
  603. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.c +164 -137
  604. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.h +5 -0
  605. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.c +141 -138
  606. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/quic_config.upbdefs.c +16 -12
  607. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.c +39 -31
  608. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.c +140 -129
  609. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.h +5 -0
  610. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.c +82 -68
  611. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.h +2 -2
  612. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +828 -747
  613. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.h +20 -0
  614. data/src/core/ext/upbdefs-generated/envoy/config/tap/v3/common.upbdefs.c +150 -139
  615. data/src/core/ext/upbdefs-generated/envoy/config/tap/v3/common.upbdefs.h +5 -0
  616. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/datadog.upbdefs.c +16 -14
  617. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opentelemetry.upbdefs.c +48 -0
  618. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opentelemetry.upbdefs.h +35 -0
  619. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/trace.upbdefs.c +16 -12
  620. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/zipkin.upbdefs.c +20 -18
  621. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.c +46 -25
  622. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.c +53 -42
  623. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upbdefs.c +60 -0
  624. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upbdefs.h +40 -0
  625. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +483 -445
  626. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.h +5 -0
  627. data/src/core/ext/upbdefs-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upbdefs.c +50 -0
  628. data/src/core/ext/upbdefs-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upbdefs.h +35 -0
  629. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +21 -18
  630. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c +211 -193
  631. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.h +5 -0
  632. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.c +156 -84
  633. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.h +35 -0
  634. data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.c +113 -113
  635. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/filter_state.upbdefs.c +48 -0
  636. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/filter_state.upbdefs.h +35 -0
  637. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.c +29 -28
  638. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/status_code_input.upbdefs.c +40 -0
  639. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/status_code_input.upbdefs.h +40 -0
  640. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_strategy.upbdefs.c +69 -0
  641. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_strategy.upbdefs.h +40 -0
  642. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_unit.upbdefs.c +10 -9
  643. data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.c +92 -90
  644. data/src/core/ext/upbdefs-generated/src/proto/grpc/lookup/v1/rls_config.upbdefs.c +99 -0
  645. data/src/core/ext/upbdefs-generated/src/proto/grpc/lookup/v1/rls_config.upbdefs.h +75 -0
  646. data/src/core/ext/upbdefs-generated/xds/core/v3/cidr.upbdefs.c +45 -0
  647. data/src/core/ext/upbdefs-generated/xds/core/v3/cidr.upbdefs.h +35 -0
  648. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/cel.upbdefs.c +43 -0
  649. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/cel.upbdefs.h +35 -0
  650. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/domain.upbdefs.c +51 -0
  651. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/domain.upbdefs.h +40 -0
  652. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/http_inputs.upbdefs.c +36 -0
  653. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/http_inputs.upbdefs.h +35 -0
  654. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/ip.upbdefs.c +55 -0
  655. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/ip.upbdefs.h +40 -0
  656. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/matcher.upbdefs.c +9 -9
  657. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/range.upbdefs.c +71 -0
  658. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/range.upbdefs.h +60 -0
  659. data/src/core/ext/upbdefs-generated/xds/type/v3/cel.upbdefs.c +60 -0
  660. data/src/core/ext/upbdefs-generated/xds/type/v3/cel.upbdefs.h +40 -0
  661. data/src/core/ext/upbdefs-generated/xds/type/v3/range.upbdefs.c +36 -0
  662. data/src/core/ext/upbdefs-generated/xds/type/v3/range.upbdefs.h +45 -0
  663. data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.c +4 -7
  664. data/src/core/ext/xds/certificate_provider_store.cc +75 -3
  665. data/src/core/ext/xds/certificate_provider_store.h +30 -4
  666. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +17 -10
  667. data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +12 -4
  668. data/src/core/ext/xds/upb_utils.h +3 -25
  669. data/src/core/ext/xds/xds_api.cc +106 -192
  670. data/src/core/ext/xds/xds_api.h +41 -39
  671. data/src/core/ext/xds/xds_bootstrap.cc +5 -537
  672. data/src/core/ext/xds/xds_bootstrap.h +42 -95
  673. data/src/core/ext/xds/xds_bootstrap_grpc.cc +362 -0
  674. data/src/core/ext/xds/xds_bootstrap_grpc.h +184 -0
  675. data/src/core/ext/xds/xds_certificate_provider.cc +36 -25
  676. data/src/core/ext/xds/xds_certificate_provider.h +36 -4
  677. data/src/core/ext/xds/xds_channel_args.h +3 -3
  678. data/src/core/ext/xds/xds_channel_stack_modifier.cc +17 -7
  679. data/src/core/ext/xds/xds_channel_stack_modifier.h +16 -4
  680. data/src/core/ext/xds/xds_client.cc +885 -1360
  681. data/src/core/ext/xds/xds_client.h +69 -65
  682. data/src/core/ext/xds/xds_client_grpc.cc +235 -0
  683. data/src/core/ext/xds/xds_client_grpc.h +79 -0
  684. data/src/core/ext/xds/xds_client_stats.cc +24 -25
  685. data/src/core/ext/xds/xds_client_stats.h +26 -24
  686. data/src/core/ext/xds/xds_cluster.cc +505 -247
  687. data/src/core/ext/xds/xds_cluster.h +69 -40
  688. data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +132 -0
  689. data/src/core/ext/xds/xds_cluster_specifier_plugin.h +97 -0
  690. data/src/core/ext/xds/xds_common_types.cc +238 -123
  691. data/src/core/ext/xds/xds_common_types.h +29 -16
  692. data/src/core/ext/xds/xds_endpoint.cc +266 -156
  693. data/src/core/ext/xds/xds_endpoint.h +19 -15
  694. data/src/core/ext/xds/xds_health_status.cc +80 -0
  695. data/src/core/ext/xds/xds_health_status.h +109 -0
  696. data/src/core/ext/xds/xds_http_fault_filter.cc +68 -59
  697. data/src/core/ext/xds/xds_http_fault_filter.h +19 -25
  698. data/src/core/ext/xds/xds_http_filters.cc +70 -71
  699. data/src/core/ext/xds/xds_http_filters.h +73 -25
  700. data/src/core/ext/xds/xds_http_rbac_filter.cc +168 -225
  701. data/src/core/ext/xds/xds_http_rbac_filter.h +22 -18
  702. data/src/core/ext/xds/xds_http_stateful_session_filter.cc +218 -0
  703. data/src/core/ext/xds/xds_http_stateful_session_filter.h +58 -0
  704. data/src/core/ext/xds/xds_lb_policy_registry.cc +334 -0
  705. data/src/core/ext/xds/xds_lb_policy_registry.h +71 -0
  706. data/src/core/ext/xds/xds_listener.cc +573 -481
  707. data/src/core/ext/xds/xds_listener.h +57 -51
  708. data/src/core/ext/xds/xds_resource_type.h +28 -22
  709. data/src/core/ext/xds/xds_resource_type_impl.h +18 -17
  710. data/src/core/ext/xds/xds_route_config.cc +638 -479
  711. data/src/core/ext/xds/xds_route_config.h +79 -42
  712. data/src/core/ext/xds/xds_routing.cc +21 -7
  713. data/src/core/ext/xds/xds_routing.h +17 -12
  714. data/src/core/ext/xds/xds_server_config_fetcher.cc +244 -200
  715. data/src/core/ext/xds/xds_transport.h +86 -0
  716. data/src/core/ext/xds/xds_transport_grpc.cc +356 -0
  717. data/src/core/ext/xds/xds_transport_grpc.h +135 -0
  718. data/src/core/lib/address_utils/parse_address.cc +52 -52
  719. data/src/core/lib/address_utils/parse_address.h +46 -42
  720. data/src/core/lib/address_utils/sockaddr_utils.cc +90 -54
  721. data/src/core/lib/address_utils/sockaddr_utils.h +45 -40
  722. data/src/core/lib/avl/avl.h +100 -13
  723. data/src/core/lib/backoff/backoff.cc +19 -21
  724. data/src/core/lib/backoff/backoff.h +21 -21
  725. data/src/core/lib/channel/call_finalization.h +6 -4
  726. data/src/core/lib/channel/call_tracer.h +27 -9
  727. data/src/core/lib/channel/channel_args.cc +268 -101
  728. data/src/core/lib/channel/channel_args.h +461 -56
  729. data/src/core/lib/channel/channel_args_preconditioning.cc +6 -11
  730. data/src/core/lib/channel/channel_args_preconditioning.h +7 -7
  731. data/src/core/lib/channel/channel_fwd.h +26 -0
  732. data/src/core/lib/channel/channel_stack.cc +92 -52
  733. data/src/core/lib/channel/channel_stack.h +186 -140
  734. data/src/core/lib/channel/channel_stack_builder.cc +26 -104
  735. data/src/core/lib/channel/channel_stack_builder.h +45 -31
  736. data/src/core/lib/channel/channel_stack_builder_impl.cc +126 -0
  737. data/src/core/lib/channel/channel_stack_builder_impl.h +48 -0
  738. data/src/core/lib/channel/channel_trace.cc +29 -36
  739. data/src/core/lib/channel/channel_trace.h +27 -24
  740. data/src/core/lib/channel/channelz.cc +50 -65
  741. data/src/core/lib/channel/channelz.h +50 -33
  742. data/src/core/lib/channel/channelz_registry.cc +28 -36
  743. data/src/core/lib/channel/channelz_registry.h +31 -30
  744. data/src/core/lib/channel/connected_channel.cc +1267 -78
  745. data/src/core/lib/channel/connected_channel.h +22 -23
  746. data/src/core/lib/channel/context.h +25 -21
  747. data/src/core/lib/channel/promise_based_filter.cc +2155 -303
  748. data/src/core/lib/channel/promise_based_filter.h +636 -122
  749. data/src/core/lib/channel/status_util.cc +64 -17
  750. data/src/core/lib/channel/status_util.h +38 -24
  751. data/src/core/lib/compression/compression.cc +24 -19
  752. data/src/core/lib/compression/compression_internal.cc +89 -70
  753. data/src/core/lib/compression/compression_internal.h +28 -27
  754. data/src/core/lib/compression/message_compress.cc +28 -26
  755. data/src/core/lib/compression/message_compress.h +28 -29
  756. data/src/core/lib/config/core_configuration.cc +8 -1
  757. data/src/core/lib/config/core_configuration.h +86 -39
  758. data/src/core/lib/debug/event_log.cc +88 -0
  759. data/src/core/lib/debug/event_log.h +81 -0
  760. data/src/core/lib/debug/histogram_view.cc +69 -0
  761. data/src/core/lib/debug/histogram_view.h +37 -0
  762. data/src/core/lib/debug/stats.cc +48 -152
  763. data/src/core/lib/debug/stats.h +50 -57
  764. data/src/core/lib/debug/stats_data.cc +302 -649
  765. data/src/core/lib/debug/stats_data.h +293 -548
  766. data/src/core/lib/debug/trace.cc +18 -20
  767. data/src/core/lib/debug/trace.h +27 -48
  768. data/src/core/lib/event_engine/channel_args_endpoint_config.cc +16 -17
  769. data/src/core/lib/event_engine/channel_args_endpoint_config.h +16 -9
  770. data/src/core/lib/event_engine/common_closures.h +71 -0
  771. data/src/core/lib/event_engine/default_event_engine.cc +99 -0
  772. data/src/core/lib/event_engine/default_event_engine.h +73 -0
  773. data/src/core/lib/event_engine/default_event_engine_factory.cc +24 -3
  774. data/src/core/lib/event_engine/{event_engine_factory.h → default_event_engine_factory.h} +6 -9
  775. data/src/core/lib/event_engine/event_engine.cc +3 -30
  776. data/src/core/lib/event_engine/executor/executor.h +38 -0
  777. data/src/core/lib/event_engine/forkable.cc +106 -0
  778. data/src/core/lib/event_engine/forkable.h +61 -0
  779. data/src/core/lib/event_engine/handle_containers.h +74 -0
  780. data/src/core/lib/event_engine/memory_allocator.cc +11 -3
  781. data/src/core/lib/event_engine/poller.h +62 -0
  782. data/src/core/lib/event_engine/posix.h +158 -0
  783. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +642 -0
  784. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.h +139 -0
  785. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +899 -0
  786. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.h +97 -0
  787. data/src/core/lib/event_engine/posix_engine/event_poller.h +111 -0
  788. data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc +74 -0
  789. data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.h +33 -0
  790. data/src/core/lib/event_engine/posix_engine/internal_errqueue.cc +77 -0
  791. data/src/core/lib/event_engine/posix_engine/internal_errqueue.h +179 -0
  792. data/src/core/lib/event_engine/posix_engine/lockfree_event.cc +265 -0
  793. data/src/core/lib/event_engine/posix_engine/lockfree_event.h +73 -0
  794. data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +1305 -0
  795. data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +717 -0
  796. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +640 -0
  797. data/src/core/lib/event_engine/posix_engine/posix_engine.h +259 -0
  798. data/src/core/lib/event_engine/posix_engine/posix_engine_closure.h +80 -0
  799. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +289 -0
  800. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.h +279 -0
  801. data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.cc +379 -0
  802. data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.h +91 -0
  803. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +853 -0
  804. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +316 -0
  805. data/src/core/lib/event_engine/posix_engine/timer.cc +311 -0
  806. data/src/core/lib/event_engine/posix_engine/timer.h +194 -0
  807. data/src/core/lib/event_engine/posix_engine/timer_heap.cc +107 -0
  808. data/src/core/lib/event_engine/posix_engine/timer_heap.h +56 -0
  809. data/src/core/lib/event_engine/posix_engine/timer_manager.cc +173 -0
  810. data/src/core/lib/event_engine/posix_engine/timer_manager.h +114 -0
  811. data/src/core/lib/event_engine/posix_engine/traced_buffer_list.cc +332 -0
  812. data/src/core/lib/event_engine/posix_engine/traced_buffer_list.h +185 -0
  813. data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.cc +127 -0
  814. data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.h +45 -0
  815. data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.cc +150 -0
  816. data/src/core/lib/{iomgr/event_engine/promise.h → event_engine/posix_engine/wakeup_fd_pipe.h} +19 -25
  817. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix.h +76 -0
  818. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.cc +67 -0
  819. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.h +37 -0
  820. data/src/core/lib/event_engine/resolved_address.cc +23 -2
  821. data/src/core/lib/{iomgr/event_engine → event_engine}/resolved_address_internal.h +5 -8
  822. data/src/core/lib/event_engine/shim.cc +56 -0
  823. data/src/core/lib/event_engine/shim.h +33 -0
  824. data/src/core/lib/event_engine/slice.cc +103 -0
  825. data/src/core/lib/event_engine/slice_buffer.cc +50 -0
  826. data/src/core/lib/event_engine/tcp_socket_utils.cc +389 -0
  827. data/src/core/lib/event_engine/tcp_socket_utils.h +90 -0
  828. data/src/core/lib/event_engine/thread_local.cc +29 -0
  829. data/src/core/lib/event_engine/thread_local.h +32 -0
  830. data/src/core/lib/event_engine/thread_pool.cc +253 -0
  831. data/src/core/lib/event_engine/thread_pool.h +141 -0
  832. data/src/core/lib/event_engine/time_util.cc +30 -0
  833. data/src/core/lib/event_engine/time_util.h +32 -0
  834. data/src/core/{ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_event_engine.cc → lib/event_engine/trace.cc} +9 -13
  835. data/src/core/lib/event_engine/trace.h +43 -0
  836. data/src/core/lib/event_engine/utils.cc +44 -0
  837. data/src/core/lib/event_engine/utils.h +44 -0
  838. data/src/core/lib/event_engine/windows/iocp.cc +140 -0
  839. data/src/core/lib/event_engine/windows/iocp.h +69 -0
  840. data/src/core/lib/event_engine/windows/win_socket.cc +219 -0
  841. data/src/core/lib/event_engine/windows/win_socket.h +129 -0
  842. data/src/core/lib/event_engine/windows/windows_endpoint.cc +331 -0
  843. data/src/core/lib/event_engine/windows/windows_endpoint.h +103 -0
  844. data/src/core/lib/event_engine/windows/windows_engine.cc +388 -0
  845. data/src/core/lib/event_engine/windows/windows_engine.h +163 -0
  846. data/src/core/lib/experiments/config.cc +161 -0
  847. data/src/core/lib/experiments/config.h +53 -0
  848. data/src/core/lib/experiments/experiments.cc +81 -0
  849. data/src/core/lib/experiments/experiments.h +117 -0
  850. data/src/core/lib/gpr/alloc.cc +19 -25
  851. data/src/core/lib/gpr/alloc.h +20 -20
  852. data/src/core/lib/gpr/atm.cc +17 -17
  853. data/src/core/lib/gpr/cpu_iphone.cc +24 -24
  854. data/src/core/lib/gpr/cpu_linux.cc +28 -23
  855. data/src/core/lib/gpr/cpu_posix.cc +23 -22
  856. data/src/core/lib/gpr/cpu_windows.cc +20 -18
  857. data/src/core/lib/gpr/log.cc +30 -17
  858. data/src/core/lib/gpr/log_android.cc +22 -20
  859. data/src/core/lib/gpr/log_linux.cc +24 -24
  860. data/src/core/lib/gpr/log_posix.cc +20 -19
  861. data/src/core/lib/gpr/log_windows.cc +25 -25
  862. data/src/core/lib/gpr/spinlock.h +20 -20
  863. data/src/core/lib/gpr/string.cc +25 -24
  864. data/src/core/lib/gpr/string.h +61 -61
  865. data/src/core/lib/gpr/string_posix.cc +24 -24
  866. data/src/core/lib/gpr/string_util_windows.cc +25 -52
  867. data/src/core/lib/gpr/string_windows.cc +24 -24
  868. data/src/core/lib/gpr/sync.cc +25 -25
  869. data/src/core/lib/gpr/sync_abseil.cc +36 -40
  870. data/src/core/lib/gpr/sync_posix.cc +22 -34
  871. data/src/core/lib/gpr/sync_windows.cc +29 -27
  872. data/src/core/lib/gpr/time.cc +34 -30
  873. data/src/core/lib/gpr/time_posix.cc +41 -45
  874. data/src/core/lib/gpr/time_precise.cc +22 -22
  875. data/src/core/lib/gpr/time_precise.h +21 -22
  876. data/src/core/lib/gpr/time_windows.cc +35 -29
  877. data/src/core/lib/gpr/tmpfile.h +24 -24
  878. data/src/core/lib/gpr/tmpfile_msys.cc +21 -20
  879. data/src/core/lib/gpr/tmpfile_posix.cc +22 -20
  880. data/src/core/lib/gpr/tmpfile_windows.cc +28 -29
  881. data/src/core/lib/gpr/useful.h +83 -30
  882. data/src/core/lib/gpr/wrap_memcpy.cc +23 -23
  883. data/src/core/lib/gprpp/atomic_utils.h +20 -20
  884. data/src/core/lib/gprpp/bitset.h +47 -17
  885. data/src/core/lib/gprpp/chunked_vector.h +7 -3
  886. data/src/core/lib/gprpp/construct_destruct.h +4 -3
  887. data/src/core/lib/gprpp/cpp_impl_of.h +7 -3
  888. data/src/core/{ext/xds/xds_resource_type.cc → lib/gprpp/crash.cc} +12 -12
  889. data/src/core/lib/gprpp/crash.h +34 -0
  890. data/src/core/lib/gprpp/debug_location.h +60 -31
  891. data/src/core/lib/gprpp/dual_ref_counted.h +4 -7
  892. data/src/core/lib/gprpp/env.h +53 -0
  893. data/src/core/lib/gprpp/env_linux.cc +80 -0
  894. data/src/core/{ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_event_engine.cc → lib/gprpp/env_posix.cc} +25 -9
  895. data/src/core/lib/gprpp/env_windows.cc +56 -0
  896. data/src/core/lib/gprpp/examine_stack.cc +17 -17
  897. data/src/core/lib/gprpp/examine_stack.h +21 -22
  898. data/src/core/lib/gprpp/fork.cc +58 -53
  899. data/src/core/lib/gprpp/fork.h +29 -35
  900. data/src/core/lib/gprpp/global_config.h +22 -24
  901. data/src/core/lib/gprpp/global_config_custom.h +20 -20
  902. data/src/core/lib/gprpp/global_config_env.cc +28 -25
  903. data/src/core/lib/gprpp/global_config_env.h +29 -27
  904. data/src/core/lib/gprpp/global_config_generic.h +21 -25
  905. data/src/core/lib/gprpp/host_port.cc +30 -26
  906. data/src/core/lib/gprpp/host_port.h +32 -31
  907. data/src/core/lib/gprpp/load_file.cc +75 -0
  908. data/src/core/lib/gprpp/load_file.h +33 -0
  909. data/src/core/lib/gprpp/manual_constructor.h +21 -89
  910. data/src/core/lib/gprpp/match.h +75 -0
  911. data/src/core/lib/gprpp/memory.h +22 -26
  912. data/src/core/lib/gprpp/mpscq.cc +17 -17
  913. data/src/core/lib/gprpp/mpscq.h +21 -21
  914. data/src/core/lib/gprpp/no_destruct.h +95 -0
  915. data/src/core/lib/gprpp/notification.h +67 -0
  916. data/src/core/lib/gprpp/orphanable.h +22 -25
  917. data/src/core/lib/gprpp/overload.h +59 -0
  918. data/src/core/lib/gprpp/packed_table.h +40 -0
  919. data/src/core/lib/gprpp/per_cpu.h +46 -0
  920. data/src/core/lib/gprpp/ref_counted.h +24 -24
  921. data/src/core/lib/gprpp/ref_counted_ptr.h +42 -55
  922. data/src/core/lib/gprpp/single_set_ptr.h +87 -0
  923. data/src/core/lib/gprpp/sorted_pack.h +98 -0
  924. data/src/core/lib/gprpp/stat.h +3 -5
  925. data/src/core/lib/gprpp/stat_posix.cc +10 -4
  926. data/src/core/lib/gprpp/stat_windows.cc +4 -2
  927. data/src/core/lib/gprpp/status_helper.cc +56 -20
  928. data/src/core/lib/gprpp/status_helper.h +13 -5
  929. data/src/core/lib/gprpp/strerror.cc +43 -0
  930. data/src/core/lib/gprpp/strerror.h +29 -0
  931. data/src/core/lib/gprpp/sync.h +26 -24
  932. data/src/core/lib/gprpp/table.h +22 -4
  933. data/src/core/lib/gprpp/tchar.cc +49 -0
  934. data/src/core/lib/gprpp/tchar.h +33 -0
  935. data/src/core/lib/gprpp/thd.h +25 -28
  936. data/src/core/lib/gprpp/thd_posix.cc +33 -32
  937. data/src/core/lib/gprpp/thd_windows.cc +28 -26
  938. data/src/core/lib/gprpp/time.cc +64 -9
  939. data/src/core/lib/gprpp/time.h +79 -5
  940. data/src/core/lib/gprpp/time_averaged_stats.cc +60 -0
  941. data/src/core/lib/gprpp/time_averaged_stats.h +79 -0
  942. data/src/core/lib/gprpp/time_util.cc +4 -0
  943. data/src/core/lib/gprpp/time_util.h +3 -3
  944. data/src/core/lib/gprpp/unique_type_name.h +104 -0
  945. data/src/core/lib/gprpp/validation_errors.cc +61 -0
  946. data/src/core/lib/gprpp/validation_errors.h +127 -0
  947. data/src/core/lib/{iomgr → gprpp}/work_serializer.cc +34 -18
  948. data/src/core/lib/{iomgr → gprpp}/work_serializer.h +21 -28
  949. data/src/core/lib/handshaker/proxy_mapper.h +53 -0
  950. data/src/core/lib/handshaker/proxy_mapper_registry.cc +71 -0
  951. data/src/core/lib/handshaker/proxy_mapper_registry.h +75 -0
  952. data/src/core/lib/http/format_request.cc +54 -24
  953. data/src/core/lib/http/format_request.h +23 -21
  954. data/src/core/lib/http/httpcli.cc +139 -141
  955. data/src/core/lib/http/httpcli.h +86 -38
  956. data/src/core/lib/http/httpcli_security_connector.cc +53 -45
  957. data/src/core/lib/http/httpcli_ssl_credentials.h +6 -4
  958. data/src/core/lib/http/parser.cc +144 -85
  959. data/src/core/lib/http/parser.h +51 -35
  960. data/src/core/lib/iomgr/block_annotate.h +23 -23
  961. data/src/core/lib/iomgr/buffer_list.cc +156 -136
  962. data/src/core/lib/iomgr/buffer_list.h +123 -101
  963. data/src/core/lib/iomgr/call_combiner.cc +32 -64
  964. data/src/core/lib/iomgr/call_combiner.h +24 -25
  965. data/src/core/lib/iomgr/cfstream_handle.cc +33 -36
  966. data/src/core/lib/iomgr/cfstream_handle.h +25 -25
  967. data/src/core/lib/iomgr/{event_engine/pollset.h → closure.cc} +9 -7
  968. data/src/core/lib/iomgr/closure.h +95 -58
  969. data/src/core/lib/iomgr/combiner.cc +20 -39
  970. data/src/core/lib/iomgr/combiner.h +20 -20
  971. data/src/core/lib/iomgr/dualstack_socket_posix.cc +21 -21
  972. data/src/core/lib/iomgr/dynamic_annotations.h +22 -22
  973. data/src/core/lib/iomgr/endpoint.cc +21 -21
  974. data/src/core/lib/iomgr/endpoint.h +53 -51
  975. data/src/core/lib/iomgr/endpoint_cfstream.cc +51 -47
  976. data/src/core/lib/iomgr/endpoint_cfstream.h +32 -32
  977. data/src/core/lib/iomgr/endpoint_pair.h +20 -20
  978. data/src/core/lib/iomgr/endpoint_pair_posix.cc +34 -27
  979. data/src/core/lib/iomgr/endpoint_pair_windows.cc +30 -21
  980. data/src/core/lib/iomgr/error.cc +51 -834
  981. data/src/core/lib/iomgr/error.h +45 -317
  982. data/src/core/lib/iomgr/error_cfstream.cc +18 -23
  983. data/src/core/lib/iomgr/error_cfstream.h +21 -21
  984. data/src/core/lib/iomgr/ev_apple.cc +21 -21
  985. data/src/core/lib/iomgr/ev_apple.h +21 -21
  986. data/src/core/lib/iomgr/ev_epoll1_linux.cc +263 -248
  987. data/src/core/lib/iomgr/ev_epoll1_linux.h +21 -21
  988. data/src/core/lib/iomgr/ev_poll_posix.cc +296 -271
  989. data/src/core/lib/iomgr/ev_poll_posix.h +22 -22
  990. data/src/core/lib/iomgr/ev_posix.cc +88 -122
  991. data/src/core/lib/iomgr/ev_posix.h +93 -87
  992. data/src/core/lib/iomgr/ev_windows.cc +18 -18
  993. data/src/core/lib/iomgr/{event_engine → event_engine_shims}/closure.cc +15 -30
  994. data/src/core/lib/iomgr/{event_engine → event_engine_shims}/closure.h +10 -13
  995. data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +430 -0
  996. data/src/core/lib/iomgr/event_engine_shims/endpoint.h +43 -0
  997. data/src/core/lib/iomgr/event_engine_shims/tcp_client.cc +91 -0
  998. data/src/core/lib/iomgr/event_engine_shims/tcp_client.h +44 -0
  999. data/src/core/lib/iomgr/exec_ctx.cc +34 -56
  1000. data/src/core/lib/iomgr/exec_ctx.h +152 -177
  1001. data/src/core/lib/iomgr/executor.cc +21 -31
  1002. data/src/core/lib/iomgr/executor.h +27 -30
  1003. data/src/core/lib/iomgr/fork_posix.cc +31 -28
  1004. data/src/core/lib/iomgr/fork_windows.cc +21 -21
  1005. data/src/core/lib/iomgr/gethostname.h +20 -20
  1006. data/src/core/lib/iomgr/gethostname_fallback.cc +17 -17
  1007. data/src/core/lib/iomgr/gethostname_host_name_max.cc +17 -17
  1008. data/src/core/lib/iomgr/gethostname_sysconf.cc +17 -17
  1009. data/src/core/lib/iomgr/grpc_if_nametoindex.h +22 -22
  1010. data/src/core/lib/iomgr/grpc_if_nametoindex_posix.cc +20 -19
  1011. data/src/core/lib/iomgr/grpc_if_nametoindex_unsupported.cc +20 -19
  1012. data/src/core/lib/iomgr/internal_errqueue.cc +41 -48
  1013. data/src/core/lib/iomgr/internal_errqueue.h +84 -89
  1014. data/src/core/lib/iomgr/iocp_windows.cc +23 -23
  1015. data/src/core/lib/iomgr/iocp_windows.h +21 -21
  1016. data/src/core/lib/iomgr/iomgr.cc +25 -20
  1017. data/src/core/lib/iomgr/iomgr.h +35 -35
  1018. data/src/core/lib/iomgr/iomgr_fwd.h +26 -0
  1019. data/src/core/lib/iomgr/iomgr_internal.cc +17 -17
  1020. data/src/core/lib/iomgr/iomgr_internal.h +28 -28
  1021. data/src/core/lib/iomgr/iomgr_posix.cc +21 -20
  1022. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +21 -19
  1023. data/src/core/lib/iomgr/iomgr_windows.cc +24 -22
  1024. data/src/core/lib/iomgr/load_file.cc +24 -27
  1025. data/src/core/lib/iomgr/load_file.h +22 -22
  1026. data/src/core/lib/iomgr/lockfree_event.cc +114 -131
  1027. data/src/core/lib/iomgr/lockfree_event.h +23 -23
  1028. data/src/core/lib/iomgr/nameser.h +86 -86
  1029. data/src/core/lib/iomgr/polling_entity.cc +25 -21
  1030. data/src/core/lib/iomgr/polling_entity.h +29 -29
  1031. data/src/core/lib/iomgr/pollset.cc +17 -17
  1032. data/src/core/lib/iomgr/pollset.h +55 -55
  1033. data/src/core/lib/iomgr/pollset_set.cc +17 -17
  1034. data/src/core/lib/iomgr/pollset_set.h +26 -28
  1035. data/src/core/lib/iomgr/pollset_set_windows.cc +18 -18
  1036. data/src/core/lib/iomgr/pollset_set_windows.h +20 -20
  1037. data/src/core/lib/iomgr/pollset_windows.cc +32 -31
  1038. data/src/core/lib/iomgr/pollset_windows.h +24 -24
  1039. data/src/core/lib/iomgr/port.h +59 -39
  1040. data/src/core/lib/iomgr/python_util.h +24 -24
  1041. data/src/core/lib/iomgr/resolve_address.cc +34 -20
  1042. data/src/core/lib/iomgr/resolve_address.h +73 -43
  1043. data/src/core/lib/iomgr/resolve_address_impl.h +7 -7
  1044. data/src/core/lib/iomgr/resolve_address_posix.cc +81 -62
  1045. data/src/core/lib/iomgr/resolve_address_posix.h +26 -10
  1046. data/src/core/lib/iomgr/resolve_address_windows.cc +64 -38
  1047. data/src/core/lib/iomgr/resolve_address_windows.h +26 -10
  1048. data/src/core/lib/iomgr/resolved_address.h +3 -3
  1049. data/src/core/lib/iomgr/sockaddr.h +25 -26
  1050. data/src/core/lib/iomgr/sockaddr_posix.h +23 -21
  1051. data/src/core/lib/iomgr/sockaddr_utils_posix.cc +20 -18
  1052. data/src/core/lib/iomgr/sockaddr_windows.h +23 -21
  1053. data/src/core/lib/iomgr/socket_factory_posix.cc +18 -18
  1054. data/src/core/lib/iomgr/socket_factory_posix.h +32 -32
  1055. data/src/core/lib/iomgr/socket_mutator.cc +19 -18
  1056. data/src/core/lib/iomgr/socket_mutator.h +39 -39
  1057. data/src/core/lib/iomgr/socket_utils.h +27 -27
  1058. data/src/core/lib/iomgr/socket_utils_common_posix.cc +82 -101
  1059. data/src/core/lib/iomgr/socket_utils_linux.cc +18 -17
  1060. data/src/core/lib/iomgr/socket_utils_posix.cc +103 -19
  1061. data/src/core/lib/iomgr/socket_utils_posix.h +176 -84
  1062. data/src/core/lib/iomgr/socket_utils_windows.cc +20 -19
  1063. data/src/core/lib/iomgr/socket_windows.cc +37 -36
  1064. data/src/core/lib/iomgr/socket_windows.h +59 -61
  1065. data/src/core/lib/iomgr/systemd_utils.cc +116 -0
  1066. data/src/core/lib/iomgr/systemd_utils.h +33 -0
  1067. data/src/core/lib/iomgr/tcp_client.cc +28 -24
  1068. data/src/core/lib/iomgr/tcp_client.h +49 -38
  1069. data/src/core/lib/iomgr/tcp_client_cfstream.cc +46 -35
  1070. data/src/core/lib/iomgr/tcp_client_posix.cc +244 -106
  1071. data/src/core/lib/iomgr/tcp_client_posix.h +55 -52
  1072. data/src/core/lib/iomgr/tcp_client_windows.cc +73 -53
  1073. data/src/core/lib/iomgr/tcp_posix.cc +562 -361
  1074. data/src/core/lib/iomgr/tcp_posix.h +32 -30
  1075. data/src/core/lib/iomgr/tcp_server.cc +33 -24
  1076. data/src/core/lib/iomgr/tcp_server.h +78 -69
  1077. data/src/core/lib/iomgr/tcp_server_posix.cc +402 -145
  1078. data/src/core/lib/iomgr/tcp_server_utils_posix.h +68 -55
  1079. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +120 -82
  1080. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +46 -43
  1081. data/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc +19 -19
  1082. data/src/core/lib/iomgr/tcp_server_windows.cc +116 -118
  1083. data/src/core/lib/iomgr/tcp_windows.cc +116 -98
  1084. data/src/core/lib/iomgr/tcp_windows.h +34 -35
  1085. data/src/core/lib/iomgr/timer.cc +17 -17
  1086. data/src/core/lib/iomgr/timer.h +68 -68
  1087. data/src/core/lib/iomgr/timer_generic.cc +125 -134
  1088. data/src/core/lib/iomgr/timer_generic.h +21 -21
  1089. data/src/core/lib/iomgr/timer_heap.cc +25 -25
  1090. data/src/core/lib/iomgr/timer_heap.h +22 -22
  1091. data/src/core/lib/iomgr/timer_manager.cc +31 -31
  1092. data/src/core/lib/iomgr/timer_manager.h +27 -27
  1093. data/src/core/lib/iomgr/unix_sockets_posix.cc +20 -21
  1094. data/src/core/lib/iomgr/unix_sockets_posix.h +21 -21
  1095. data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +19 -17
  1096. data/src/core/lib/iomgr/wakeup_fd_eventfd.cc +23 -23
  1097. data/src/core/lib/iomgr/wakeup_fd_nospecial.cc +23 -23
  1098. data/src/core/lib/iomgr/wakeup_fd_pipe.cc +29 -26
  1099. data/src/core/lib/iomgr/wakeup_fd_pipe.h +20 -20
  1100. data/src/core/lib/iomgr/wakeup_fd_posix.cc +33 -30
  1101. data/src/core/lib/iomgr/wakeup_fd_posix.h +52 -54
  1102. data/src/core/lib/json/json.h +23 -27
  1103. data/src/core/{ext/filters/http/message_compress/message_decompress_filter.h → lib/json/json_args.h} +13 -10
  1104. data/src/core/lib/json/json_channel_args.h +42 -0
  1105. data/src/core/lib/json/json_object_loader.cc +217 -0
  1106. data/src/core/lib/json/json_object_loader.h +634 -0
  1107. data/src/core/lib/json/json_reader.cc +123 -90
  1108. data/src/core/lib/json/json_util.cc +14 -34
  1109. data/src/core/lib/json/json_util.h +19 -10
  1110. data/src/core/lib/json/json_writer.cc +62 -57
  1111. data/src/core/{ext/filters/client_channel → lib/load_balancing}/lb_policy.cc +30 -60
  1112. data/src/core/{ext/filters/client_channel → lib/load_balancing}/lb_policy.h +47 -62
  1113. data/src/core/lib/load_balancing/lb_policy_factory.h +49 -0
  1114. data/src/core/lib/load_balancing/lb_policy_registry.cc +142 -0
  1115. data/src/core/lib/load_balancing/lb_policy_registry.h +82 -0
  1116. data/src/core/{ext/filters/client_channel → lib/load_balancing}/subchannel_interface.h +57 -52
  1117. data/src/core/lib/matchers/matchers.cc +12 -7
  1118. data/src/core/lib/matchers/matchers.h +5 -3
  1119. data/src/core/lib/promise/activity.cc +23 -8
  1120. data/src/core/lib/promise/activity.h +116 -58
  1121. data/src/core/lib/promise/arena_promise.h +115 -72
  1122. data/src/core/lib/promise/context.h +18 -11
  1123. data/src/core/lib/promise/detail/basic_join.h +197 -0
  1124. data/src/core/lib/promise/detail/basic_seq.h +28 -33
  1125. data/src/core/lib/promise/detail/promise_factory.h +61 -14
  1126. data/src/core/lib/promise/detail/promise_like.h +3 -3
  1127. data/src/core/lib/promise/detail/status.h +33 -4
  1128. data/src/core/lib/promise/detail/switch.h +21 -21
  1129. data/src/core/lib/promise/exec_ctx_wakeup_scheduler.h +23 -15
  1130. data/src/core/lib/promise/if.h +195 -0
  1131. data/src/core/lib/promise/interceptor_list.h +308 -0
  1132. data/src/core/lib/promise/intra_activity_waiter.h +55 -0
  1133. data/src/core/lib/promise/latch.h +191 -0
  1134. data/src/core/lib/promise/loop.h +13 -9
  1135. data/src/core/lib/promise/map.h +4 -6
  1136. data/src/core/lib/promise/pipe.h +608 -0
  1137. data/src/core/lib/promise/poll.h +129 -11
  1138. data/src/core/lib/promise/promise.h +5 -5
  1139. data/src/core/lib/promise/race.h +6 -10
  1140. data/src/core/lib/promise/seq.h +32 -14
  1141. data/src/core/lib/promise/sleep.cc +58 -42
  1142. data/src/core/lib/promise/sleep.h +44 -26
  1143. data/src/core/lib/promise/trace.cc +20 -0
  1144. data/src/core/{ext/filters/max_age/max_age_filter.h → lib/promise/trace.h} +6 -8
  1145. data/src/core/lib/promise/try_join.h +82 -0
  1146. data/src/core/lib/promise/try_seq.h +41 -23
  1147. data/src/core/lib/resolver/resolver.cc +17 -59
  1148. data/src/core/lib/resolver/resolver.h +21 -18
  1149. data/src/core/lib/resolver/resolver_factory.h +11 -10
  1150. data/src/core/lib/resolver/resolver_registry.cc +17 -9
  1151. data/src/core/lib/resolver/resolver_registry.h +15 -5
  1152. data/src/core/lib/resolver/server_address.cc +46 -34
  1153. data/src/core/lib/resolver/server_address.h +36 -35
  1154. data/src/core/lib/resource_quota/api.cc +25 -29
  1155. data/src/core/lib/resource_quota/api.h +14 -5
  1156. data/src/core/lib/resource_quota/arena.cc +85 -27
  1157. data/src/core/lib/resource_quota/arena.h +197 -25
  1158. data/src/core/lib/resource_quota/memory_quota.cc +322 -101
  1159. data/src/core/lib/resource_quota/memory_quota.h +191 -56
  1160. data/src/core/lib/resource_quota/periodic_update.cc +78 -0
  1161. data/src/core/lib/resource_quota/periodic_update.h +71 -0
  1162. data/src/core/lib/resource_quota/resource_quota.h +20 -4
  1163. data/src/core/lib/resource_quota/thread_quota.cc +2 -0
  1164. data/src/core/lib/resource_quota/thread_quota.h +7 -3
  1165. data/src/core/lib/resource_quota/trace.h +3 -3
  1166. data/src/core/lib/security/authorization/authorization_engine.h +3 -3
  1167. data/src/core/lib/security/authorization/authorization_policy_provider.h +17 -3
  1168. data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +3 -0
  1169. data/src/core/lib/security/authorization/evaluate_args.cc +17 -8
  1170. data/src/core/lib/security/authorization/evaluate_args.h +9 -6
  1171. data/src/core/lib/security/authorization/grpc_authorization_engine.cc +5 -1
  1172. data/src/core/lib/security/authorization/grpc_authorization_engine.h +10 -3
  1173. data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +26 -13
  1174. data/src/core/lib/security/authorization/grpc_server_authz_filter.h +20 -10
  1175. data/src/core/lib/security/authorization/matchers.cc +44 -30
  1176. data/src/core/lib/security/authorization/matchers.h +10 -3
  1177. data/src/core/lib/security/authorization/rbac_policy.cc +6 -2
  1178. data/src/core/lib/security/authorization/rbac_policy.h +10 -3
  1179. data/src/core/{ext/xds → lib/security/certificate_provider}/certificate_provider_factory.h +9 -4
  1180. data/src/core/lib/security/certificate_provider/certificate_provider_registry.cc +60 -0
  1181. data/src/core/lib/security/certificate_provider/certificate_provider_registry.h +70 -0
  1182. data/src/core/lib/security/context/security_context.cc +27 -25
  1183. data/src/core/lib/security/context/security_context.h +64 -35
  1184. data/src/core/lib/security/credentials/alts/alts_credentials.cc +35 -27
  1185. data/src/core/lib/security/credentials/alts/alts_credentials.h +65 -57
  1186. data/src/core/lib/security/credentials/alts/check_gcp_environment.cc +19 -19
  1187. data/src/core/lib/security/credentials/alts/check_gcp_environment.h +43 -43
  1188. data/src/core/lib/security/credentials/alts/check_gcp_environment_linux.cc +17 -17
  1189. data/src/core/lib/security/credentials/alts/check_gcp_environment_no_op.cc +18 -17
  1190. data/src/core/lib/security/credentials/alts/check_gcp_environment_windows.cc +18 -17
  1191. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc +20 -22
  1192. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_options.cc +18 -18
  1193. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_options.h +38 -39
  1194. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc +19 -22
  1195. data/src/core/lib/security/credentials/call_creds_util.cc +13 -3
  1196. data/src/core/lib/security/credentials/call_creds_util.h +6 -5
  1197. data/src/core/lib/security/credentials/channel_creds_registry.h +10 -4
  1198. data/src/core/lib/security/credentials/channel_creds_registry_init.cc +13 -3
  1199. data/src/core/lib/security/credentials/composite/composite_credentials.cc +46 -41
  1200. data/src/core/lib/security/credentials/composite/composite_credentials.h +51 -38
  1201. data/src/core/lib/security/credentials/credentials.cc +23 -26
  1202. data/src/core/lib/security/credentials/credentials.h +91 -94
  1203. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +202 -74
  1204. data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +21 -3
  1205. data/src/core/lib/security/credentials/external/aws_request_signer.cc +14 -3
  1206. data/src/core/lib/security/credentials/external/aws_request_signer.h +3 -3
  1207. data/src/core/lib/security/credentials/external/external_account_credentials.cc +86 -68
  1208. data/src/core/lib/security/credentials/external/external_account_credentials.h +14 -3
  1209. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +29 -26
  1210. data/src/core/lib/security/credentials/external/file_external_account_credentials.h +9 -3
  1211. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +44 -31
  1212. data/src/core/lib/security/credentials/external/url_external_account_credentials.h +13 -3
  1213. data/src/core/lib/security/credentials/fake/fake_credentials.cc +48 -48
  1214. data/src/core/lib/security/credentials/fake/fake_credentials.h +57 -47
  1215. data/src/core/lib/security/credentials/google_default/credentials_generic.cc +23 -25
  1216. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +148 -112
  1217. data/src/core/lib/security/credentials/google_default/google_default_credentials.h +35 -29
  1218. data/src/core/lib/security/credentials/iam/iam_credentials.cc +35 -24
  1219. data/src/core/lib/security/credentials/iam/iam_credentials.h +37 -23
  1220. data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +32 -29
  1221. data/src/core/lib/security/credentials/insecure/insecure_credentials.h +61 -0
  1222. data/src/core/lib/security/credentials/jwt/json_token.cc +40 -29
  1223. data/src/core/lib/security/credentials/jwt/json_token.h +36 -36
  1224. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +37 -30
  1225. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +41 -23
  1226. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +113 -89
  1227. data/src/core/lib/security/credentials/jwt/jwt_verifier.h +49 -47
  1228. data/src/core/lib/security/credentials/local/local_credentials.cc +36 -30
  1229. data/src/core/lib/security/credentials/local/local_credentials.h +36 -26
  1230. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +107 -91
  1231. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +56 -27
  1232. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +42 -36
  1233. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +55 -29
  1234. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +48 -44
  1235. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +43 -23
  1236. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +22 -30
  1237. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +16 -17
  1238. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +65 -48
  1239. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +69 -9
  1240. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +44 -4
  1241. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +75 -13
  1242. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +22 -23
  1243. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +69 -98
  1244. data/src/core/lib/security/credentials/tls/tls_credentials.cc +55 -50
  1245. data/src/core/lib/security/credentials/tls/tls_credentials.h +33 -30
  1246. data/src/core/lib/security/credentials/tls/tls_utils.cc +5 -1
  1247. data/src/core/lib/security/credentials/tls/tls_utils.h +4 -4
  1248. data/src/core/lib/security/credentials/xds/xds_credentials.cc +77 -81
  1249. data/src/core/lib/security/credentials/xds/xds_credentials.h +50 -10
  1250. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +60 -54
  1251. data/src/core/lib/security/security_connector/alts/alts_security_connector.h +49 -47
  1252. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +75 -79
  1253. data/src/core/lib/security/security_connector/fake/fake_security_connector.h +25 -26
  1254. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +15 -6
  1255. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +26 -15
  1256. data/src/core/lib/security/security_connector/load_system_roots.h +20 -20
  1257. data/src/core/lib/security/security_connector/load_system_roots_fallback.cc +22 -20
  1258. data/src/core/lib/security/security_connector/{load_system_roots_linux.cc → load_system_roots_supported.cc} +43 -38
  1259. data/src/core/lib/security/security_connector/load_system_roots_supported.h +45 -0
  1260. data/src/core/lib/security/security_connector/local/local_security_connector.cc +66 -49
  1261. data/src/core/lib/security/security_connector/local/local_security_connector.h +49 -46
  1262. data/src/core/lib/security/security_connector/security_connector.cc +37 -35
  1263. data/src/core/lib/security/security_connector/security_connector.h +67 -45
  1264. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +59 -48
  1265. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +44 -43
  1266. data/src/core/lib/security/security_connector/ssl_utils.cc +47 -39
  1267. data/src/core/lib/security/security_connector/ssl_utils.h +45 -42
  1268. data/src/core/lib/security/security_connector/ssl_utils_config.cc +22 -22
  1269. data/src/core/lib/security/security_connector/ssl_utils_config.h +21 -22
  1270. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +62 -58
  1271. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +48 -28
  1272. data/src/core/lib/security/transport/auth_filters.h +59 -30
  1273. data/src/core/lib/security/transport/client_auth_filter.cc +73 -48
  1274. data/src/core/lib/security/transport/secure_endpoint.cc +305 -181
  1275. data/src/core/lib/security/transport/secure_endpoint.h +29 -28
  1276. data/src/core/lib/security/transport/security_handshaker.cc +142 -110
  1277. data/src/core/lib/security/transport/security_handshaker.h +28 -23
  1278. data/src/core/lib/security/transport/server_auth_filter.cc +157 -266
  1279. data/src/core/lib/security/transport/tsi_error.cc +23 -20
  1280. data/src/core/lib/security/transport/tsi_error.h +20 -20
  1281. data/src/core/lib/security/util/json_util.cc +24 -24
  1282. data/src/core/lib/security/util/json_util.h +21 -23
  1283. data/src/core/lib/service_config/service_config.h +19 -12
  1284. data/src/core/lib/service_config/service_config_call_data.h +15 -5
  1285. data/src/core/lib/service_config/service_config_impl.cc +111 -150
  1286. data/src/core/lib/service_config/service_config_impl.h +27 -27
  1287. data/src/core/lib/service_config/service_config_parser.cc +16 -28
  1288. data/src/core/lib/service_config/service_config_parser.h +18 -19
  1289. data/src/core/lib/slice/b64.cc +26 -26
  1290. data/src/core/lib/slice/b64.h +34 -32
  1291. data/src/core/lib/slice/percent_encoding.cc +24 -30
  1292. data/src/core/lib/slice/percent_encoding.h +28 -34
  1293. data/src/core/lib/slice/slice.cc +59 -46
  1294. data/src/core/lib/slice/slice.h +64 -20
  1295. data/src/core/lib/slice/slice_buffer.cc +136 -76
  1296. data/src/core/lib/slice/slice_buffer.h +168 -0
  1297. data/src/core/lib/slice/slice_internal.h +38 -45
  1298. data/src/core/lib/slice/slice_refcount.cc +3 -18
  1299. data/src/core/lib/slice/slice_refcount.h +53 -19
  1300. data/src/core/lib/slice/slice_string_helpers.cc +17 -33
  1301. data/src/core/lib/slice/slice_string_helpers.h +23 -30
  1302. data/src/core/lib/surface/api_trace.cc +17 -17
  1303. data/src/core/lib/surface/api_trace.h +25 -25
  1304. data/src/core/lib/surface/builtins.cc +7 -2
  1305. data/src/core/lib/surface/builtins.h +3 -3
  1306. data/src/core/lib/surface/byte_buffer.cc +26 -21
  1307. data/src/core/lib/surface/byte_buffer_reader.cc +24 -24
  1308. data/src/core/lib/surface/call.cc +3000 -1131
  1309. data/src/core/lib/surface/call.h +135 -56
  1310. data/src/core/lib/surface/call_details.cc +22 -23
  1311. data/src/core/lib/surface/call_log_batch.cc +25 -18
  1312. data/src/core/lib/surface/call_test_only.h +34 -31
  1313. data/src/core/lib/surface/call_trace.cc +123 -0
  1314. data/src/core/lib/surface/call_trace.h +30 -0
  1315. data/src/core/lib/surface/channel.cc +218 -284
  1316. data/src/core/lib/surface/channel.h +137 -90
  1317. data/src/core/lib/surface/channel_init.cc +19 -20
  1318. data/src/core/lib/surface/channel_init.h +24 -26
  1319. data/src/core/lib/surface/channel_ping.cc +26 -20
  1320. data/src/core/lib/surface/channel_stack_type.cc +21 -19
  1321. data/src/core/lib/surface/channel_stack_type.h +22 -22
  1322. data/src/core/lib/surface/completion_queue.cc +200 -222
  1323. data/src/core/lib/surface/completion_queue.h +42 -40
  1324. data/src/core/lib/surface/completion_queue_factory.cc +34 -28
  1325. data/src/core/lib/surface/completion_queue_factory.h +21 -23
  1326. data/src/core/lib/surface/event_string.cc +19 -24
  1327. data/src/core/lib/surface/event_string.h +21 -21
  1328. data/src/core/lib/surface/init.cc +57 -114
  1329. data/src/core/lib/surface/init.h +20 -28
  1330. data/src/core/lib/surface/init_internally.cc +25 -0
  1331. data/src/core/lib/surface/init_internally.h +37 -0
  1332. data/src/core/lib/surface/lame_client.cc +87 -130
  1333. data/src/core/lib/surface/lame_client.h +62 -24
  1334. data/src/core/lib/surface/metadata_array.cc +18 -17
  1335. data/src/core/lib/surface/server.cc +409 -188
  1336. data/src/core/lib/surface/server.h +57 -26
  1337. data/src/core/lib/surface/validate_metadata.cc +34 -48
  1338. data/src/core/lib/surface/validate_metadata.h +24 -21
  1339. data/src/core/lib/surface/version.cc +21 -21
  1340. data/src/core/lib/transport/bdp_estimator.cc +19 -19
  1341. data/src/core/lib/transport/bdp_estimator.h +22 -24
  1342. data/src/core/lib/transport/connectivity_state.cc +24 -23
  1343. data/src/core/lib/transport/connectivity_state.h +24 -25
  1344. data/src/core/lib/transport/error_utils.cc +57 -79
  1345. data/src/core/lib/transport/error_utils.h +29 -25
  1346. data/src/core/lib/{channel → transport}/handshaker.cc +75 -58
  1347. data/src/core/lib/{channel → transport}/handshaker.h +59 -48
  1348. data/src/core/lib/transport/handshaker_factory.h +74 -0
  1349. data/src/core/lib/transport/handshaker_registry.cc +61 -0
  1350. data/src/core/lib/transport/handshaker_registry.h +69 -0
  1351. data/src/core/lib/transport/http2_errors.h +22 -22
  1352. data/src/core/{ext/filters/client_channel → lib/transport}/http_connect_handshaker.cc +78 -65
  1353. data/src/core/lib/transport/http_connect_handshaker.h +42 -0
  1354. data/src/core/lib/transport/metadata_batch.cc +305 -0
  1355. data/src/core/lib/transport/metadata_batch.h +269 -302
  1356. data/src/core/lib/transport/parsed_metadata.cc +2 -4
  1357. data/src/core/lib/transport/parsed_metadata.h +17 -8
  1358. data/src/core/lib/transport/pid_controller.cc +20 -20
  1359. data/src/core/lib/transport/pid_controller.h +27 -27
  1360. data/src/core/lib/transport/status_conversion.cc +23 -23
  1361. data/src/core/lib/transport/status_conversion.h +24 -24
  1362. data/src/core/lib/transport/tcp_connect_handshaker.cc +245 -0
  1363. data/src/core/lib/transport/tcp_connect_handshaker.h +39 -0
  1364. data/src/core/lib/transport/timeout_encoding.cc +24 -28
  1365. data/src/core/lib/transport/timeout_encoding.h +25 -21
  1366. data/src/core/lib/transport/transport.cc +97 -57
  1367. data/src/core/lib/transport/transport.h +252 -207
  1368. data/src/core/lib/transport/transport_fwd.h +20 -0
  1369. data/src/core/lib/transport/transport_impl.h +59 -48
  1370. data/src/core/lib/transport/transport_op_string.cc +40 -39
  1371. data/src/core/lib/uri/uri_parser.cc +12 -4
  1372. data/src/core/lib/uri/uri_parser.h +3 -5
  1373. data/src/core/plugin_registry/grpc_plugin_registry.cc +62 -73
  1374. data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +20 -39
  1375. data/src/core/tsi/alts/crypt/aes_gcm.cc +20 -20
  1376. data/src/core/tsi/alts/crypt/gsec.cc +26 -26
  1377. data/src/core/tsi/alts/crypt/gsec.h +336 -336
  1378. data/src/core/tsi/alts/frame_protector/alts_counter.cc +23 -23
  1379. data/src/core/tsi/alts/frame_protector/alts_counter.h +68 -68
  1380. data/src/core/tsi/alts/frame_protector/alts_crypter.cc +19 -19
  1381. data/src/core/tsi/alts/frame_protector/alts_crypter.h +209 -209
  1382. data/src/core/tsi/alts/frame_protector/alts_frame_protector.cc +72 -71
  1383. data/src/core/tsi/alts/frame_protector/alts_frame_protector.h +40 -40
  1384. data/src/core/tsi/alts/frame_protector/alts_record_protocol_crypter_common.cc +18 -18
  1385. data/src/core/tsi/alts/frame_protector/alts_record_protocol_crypter_common.h +82 -83
  1386. data/src/core/tsi/alts/frame_protector/alts_seal_privacy_integrity_crypter.cc +22 -22
  1387. data/src/core/tsi/alts/frame_protector/alts_unseal_privacy_integrity_crypter.cc +22 -22
  1388. data/src/core/tsi/alts/frame_protector/frame_handler.cc +26 -25
  1389. data/src/core/tsi/alts/frame_protector/frame_handler.h +169 -169
  1390. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +117 -97
  1391. data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +104 -104
  1392. data/src/core/tsi/alts/handshaker/alts_shared_resource.cc +18 -17
  1393. data/src/core/tsi/alts/handshaker/alts_shared_resource.h +43 -44
  1394. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +53 -45
  1395. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +60 -60
  1396. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +24 -24
  1397. data/src/core/tsi/alts/handshaker/alts_tsi_utils.cc +21 -20
  1398. data/src/core/tsi/alts/handshaker/alts_tsi_utils.h +38 -38
  1399. data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +19 -19
  1400. data/src/core/tsi/alts/handshaker/transport_security_common_api.h +105 -104
  1401. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.cc +45 -44
  1402. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.h +40 -41
  1403. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.cc +38 -36
  1404. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.h +35 -36
  1405. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol.h +67 -68
  1406. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc +32 -31
  1407. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.h +55 -56
  1408. data/src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.cc +54 -53
  1409. data/src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.h +141 -142
  1410. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +67 -58
  1411. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.h +43 -44
  1412. data/src/core/tsi/fake_transport_security.cc +146 -110
  1413. data/src/core/tsi/fake_transport_security.h +36 -30
  1414. data/src/core/tsi/local_transport_security.cc +43 -38
  1415. data/src/core/tsi/local_transport_security.h +33 -33
  1416. data/src/core/tsi/ssl/key_logging/ssl_key_logging.cc +9 -4
  1417. data/src/core/tsi/ssl/key_logging/ssl_key_logging.h +3 -3
  1418. data/src/core/tsi/ssl/session_cache/ssl_session.h +23 -21
  1419. data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +21 -19
  1420. data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +18 -17
  1421. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +31 -22
  1422. data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +27 -20
  1423. data/src/core/tsi/ssl_transport_security.cc +356 -390
  1424. data/src/core/tsi/ssl_transport_security.h +210 -201
  1425. data/src/core/tsi/ssl_transport_security_utils.cc +250 -0
  1426. data/src/core/tsi/ssl_transport_security_utils.h +147 -0
  1427. data/src/core/tsi/ssl_types.h +27 -27
  1428. data/src/core/tsi/transport_security.cc +44 -32
  1429. data/src/core/tsi/transport_security.h +49 -48
  1430. data/src/core/tsi/transport_security_grpc.cc +23 -22
  1431. data/src/core/tsi/transport_security_grpc.h +44 -41
  1432. data/src/core/tsi/transport_security_interface.h +346 -332
  1433. data/src/ruby/ext/grpc/ext-export-truffleruby-with-ruby-abi-version.clang +2 -0
  1434. data/src/ruby/ext/grpc/ext-export-truffleruby-with-ruby-abi-version.gcc +7 -0
  1435. data/src/ruby/ext/grpc/ext-export-with-ruby-abi-version.clang +2 -0
  1436. data/src/ruby/ext/grpc/ext-export-with-ruby-abi-version.gcc +7 -0
  1437. data/src/ruby/ext/grpc/ext-export.gcc +1 -1
  1438. data/src/ruby/ext/grpc/extconf.rb +98 -20
  1439. data/src/ruby/ext/grpc/rb_call.c +1 -0
  1440. data/src/ruby/ext/grpc/rb_channel.c +1 -0
  1441. data/src/ruby/ext/grpc/rb_channel_args.c +1 -0
  1442. data/src/ruby/ext/grpc/rb_compression_options.c +1 -1
  1443. data/src/ruby/ext/grpc/rb_grpc.c +1 -0
  1444. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +38 -38
  1445. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +60 -60
  1446. data/src/ruby/ext/grpc/rb_loader.c +6 -2
  1447. data/src/ruby/lib/grpc/errors.rb +1 -1
  1448. data/src/ruby/lib/grpc/generic/active_call.rb +7 -1
  1449. data/src/ruby/lib/grpc/generic/bidi_call.rb +2 -0
  1450. data/src/ruby/lib/grpc/grpc.rb +1 -1
  1451. data/src/ruby/lib/grpc/version.rb +1 -1
  1452. data/src/ruby/pb/generate_proto_ruby.sh +1 -6
  1453. data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +4 -0
  1454. data/src/ruby/pb/test/client.rb +769 -0
  1455. data/src/ruby/pb/test/server.rb +252 -0
  1456. data/src/ruby/pb/test/xds_client.rb +415 -0
  1457. data/src/ruby/spec/channel_spec.rb +5 -43
  1458. data/src/ruby/spec/client_server_spec.rb +20 -8
  1459. data/src/ruby/spec/generic/active_call_spec.rb +12 -3
  1460. data/src/ruby/spec/generic/client_stub_spec.rb +23 -23
  1461. data/src/ruby/spec/generic/server_interceptors_spec.rb +1 -1
  1462. data/src/ruby/spec/user_agent_spec.rb +1 -1
  1463. data/third_party/abseil-cpp/absl/algorithm/container.h +57 -58
  1464. data/third_party/abseil-cpp/absl/base/attributes.h +88 -41
  1465. data/third_party/abseil-cpp/absl/base/casts.h +61 -68
  1466. data/third_party/abseil-cpp/absl/base/config.h +221 -39
  1467. data/third_party/abseil-cpp/absl/base/internal/cycleclock.cc +12 -42
  1468. data/third_party/abseil-cpp/absl/base/internal/cycleclock.h +52 -2
  1469. data/third_party/abseil-cpp/absl/base/internal/cycleclock_config.h +55 -0
  1470. data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +5 -4
  1471. data/third_party/abseil-cpp/absl/base/internal/endian.h +17 -62
  1472. data/third_party/abseil-cpp/absl/base/internal/fast_type_id.h +2 -0
  1473. data/third_party/abseil-cpp/absl/base/internal/inline_variable.h +3 -3
  1474. data/third_party/abseil-cpp/absl/base/internal/invoke.h +54 -0
  1475. data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.cc +2 -2
  1476. data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.h +1 -1
  1477. data/third_party/abseil-cpp/absl/base/internal/prefetch.h +138 -0
  1478. data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +39 -28
  1479. data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +36 -36
  1480. data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +6 -3
  1481. data/third_party/abseil-cpp/absl/base/internal/spinlock.h +10 -6
  1482. data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +2 -5
  1483. data/third_party/abseil-cpp/absl/base/internal/spinlock_win32.inc +4 -1
  1484. data/third_party/abseil-cpp/absl/base/internal/strerror.cc +88 -0
  1485. data/third_party/abseil-cpp/absl/base/internal/strerror.h +39 -0
  1486. data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +14 -11
  1487. data/third_party/abseil-cpp/absl/base/internal/thread_annotations.h +9 -0
  1488. data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +2 -1
  1489. data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +4 -0
  1490. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +6 -7
  1491. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +12 -40
  1492. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock_config.h +62 -0
  1493. data/third_party/abseil-cpp/absl/base/log_severity.cc +28 -0
  1494. data/third_party/abseil-cpp/absl/base/log_severity.h +51 -0
  1495. data/third_party/abseil-cpp/absl/base/macros.h +4 -21
  1496. data/third_party/abseil-cpp/absl/base/optimization.h +76 -16
  1497. data/third_party/abseil-cpp/absl/base/options.h +1 -7
  1498. data/third_party/abseil-cpp/absl/base/policy_checks.h +15 -13
  1499. data/third_party/abseil-cpp/absl/base/thread_annotations.h +2 -2
  1500. data/third_party/abseil-cpp/absl/cleanup/cleanup.h +140 -0
  1501. data/third_party/abseil-cpp/absl/cleanup/internal/cleanup.h +100 -0
  1502. data/third_party/abseil-cpp/absl/container/fixed_array.h +9 -5
  1503. data/third_party/abseil-cpp/absl/container/flat_hash_map.h +11 -4
  1504. data/third_party/abseil-cpp/absl/container/flat_hash_set.h +503 -0
  1505. data/third_party/abseil-cpp/absl/container/inlined_vector.h +84 -25
  1506. data/third_party/abseil-cpp/absl/container/internal/common.h +9 -8
  1507. data/third_party/abseil-cpp/absl/container/internal/common_policy_traits.h +132 -0
  1508. data/third_party/abseil-cpp/absl/container/internal/container_memory.h +23 -29
  1509. data/third_party/abseil-cpp/absl/container/internal/hash_policy_traits.h +4 -55
  1510. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +116 -23
  1511. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +40 -54
  1512. data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +165 -66
  1513. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +159 -4
  1514. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +1121 -470
  1515. data/third_party/abseil-cpp/absl/crc/crc32c.cc +99 -0
  1516. data/third_party/abseil-cpp/absl/crc/crc32c.h +183 -0
  1517. data/third_party/abseil-cpp/absl/crc/internal/cpu_detect.cc +256 -0
  1518. data/third_party/abseil-cpp/absl/crc/internal/cpu_detect.h +57 -0
  1519. data/third_party/abseil-cpp/absl/crc/internal/crc.cc +468 -0
  1520. data/third_party/abseil-cpp/absl/crc/internal/crc.h +91 -0
  1521. data/third_party/abseil-cpp/absl/crc/internal/crc32_x86_arm_combined_simd.h +269 -0
  1522. data/third_party/abseil-cpp/absl/crc/internal/crc32c.h +39 -0
  1523. data/third_party/abseil-cpp/absl/crc/internal/crc32c_inline.h +72 -0
  1524. data/third_party/abseil-cpp/absl/crc/internal/crc_cord_state.cc +130 -0
  1525. data/third_party/abseil-cpp/absl/crc/internal/crc_cord_state.h +159 -0
  1526. data/third_party/abseil-cpp/absl/crc/internal/crc_internal.h +179 -0
  1527. data/third_party/abseil-cpp/absl/crc/internal/crc_memcpy.h +119 -0
  1528. data/third_party/abseil-cpp/absl/crc/internal/crc_memcpy_fallback.cc +75 -0
  1529. data/third_party/abseil-cpp/absl/crc/internal/crc_memcpy_x86_64.cc +434 -0
  1530. data/third_party/abseil-cpp/absl/crc/internal/crc_non_temporal_memcpy.cc +93 -0
  1531. data/third_party/abseil-cpp/absl/crc/internal/crc_x86_arm_combined.cc +725 -0
  1532. data/third_party/abseil-cpp/absl/crc/internal/non_temporal_arm_intrinsics.h +79 -0
  1533. data/third_party/abseil-cpp/absl/crc/internal/non_temporal_memcpy.h +180 -0
  1534. data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.cc +45 -88
  1535. data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +67 -38
  1536. data/third_party/abseil-cpp/absl/debugging/internal/demangle.h +1 -1
  1537. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.cc +16 -13
  1538. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +3 -2
  1539. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +19 -12
  1540. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +8 -3
  1541. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +2 -1
  1542. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +1 -1
  1543. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +8 -3
  1544. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +59 -102
  1545. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_win32-inl.inc +5 -4
  1546. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +41 -11
  1547. data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +18 -4
  1548. data/third_party/abseil-cpp/absl/debugging/symbolize.cc +6 -1
  1549. data/third_party/abseil-cpp/absl/debugging/symbolize_darwin.inc +3 -2
  1550. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +164 -101
  1551. data/third_party/abseil-cpp/absl/debugging/symbolize_win32.inc +7 -6
  1552. data/third_party/abseil-cpp/absl/functional/any_invocable.h +316 -0
  1553. data/third_party/abseil-cpp/absl/functional/bind_front.h +10 -1
  1554. data/third_party/abseil-cpp/absl/functional/function_ref.h +2 -1
  1555. data/third_party/abseil-cpp/absl/functional/internal/any_invocable.h +878 -0
  1556. data/third_party/abseil-cpp/absl/hash/hash.h +82 -8
  1557. data/third_party/abseil-cpp/absl/hash/internal/city.cc +10 -10
  1558. data/third_party/abseil-cpp/absl/hash/internal/hash.h +235 -26
  1559. data/third_party/abseil-cpp/absl/hash/internal/low_level_hash.cc +3 -14
  1560. data/third_party/abseil-cpp/absl/memory/memory.h +26 -447
  1561. data/third_party/abseil-cpp/absl/meta/type_traits.h +104 -12
  1562. data/third_party/abseil-cpp/absl/numeric/bits.h +1 -1
  1563. data/third_party/abseil-cpp/absl/numeric/int128.cc +14 -10
  1564. data/third_party/abseil-cpp/absl/numeric/int128.h +2 -2
  1565. data/third_party/abseil-cpp/absl/profiling/internal/sample_recorder.h +33 -10
  1566. data/third_party/abseil-cpp/absl/random/bernoulli_distribution.h +4 -4
  1567. data/third_party/abseil-cpp/absl/random/distributions.h +3 -3
  1568. data/third_party/abseil-cpp/absl/random/internal/distribution_caller.h +3 -0
  1569. data/third_party/abseil-cpp/absl/random/internal/fast_uniform_bits.h +4 -2
  1570. data/third_party/abseil-cpp/absl/random/internal/generate_real.h +2 -2
  1571. data/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +59 -48
  1572. data/third_party/abseil-cpp/absl/random/internal/pcg_engine.h +3 -24
  1573. data/third_party/abseil-cpp/absl/random/internal/pool_urbg.cc +9 -9
  1574. data/third_party/abseil-cpp/absl/random/internal/randen.h +5 -11
  1575. data/third_party/abseil-cpp/absl/random/internal/randen_detect.cc +6 -2
  1576. data/third_party/abseil-cpp/absl/random/internal/randen_engine.h +48 -23
  1577. data/third_party/abseil-cpp/absl/random/internal/salted_seed_seq.h +24 -26
  1578. data/third_party/abseil-cpp/absl/random/internal/seed_material.cc +2 -2
  1579. data/third_party/abseil-cpp/absl/random/internal/traits.h +53 -5
  1580. data/third_party/abseil-cpp/absl/random/internal/uniform_helper.h +5 -5
  1581. data/third_party/abseil-cpp/absl/random/internal/wide_multiply.h +33 -48
  1582. data/third_party/abseil-cpp/absl/random/log_uniform_int_distribution.h +9 -10
  1583. data/third_party/abseil-cpp/absl/random/poisson_distribution.h +7 -4
  1584. data/third_party/abseil-cpp/absl/random/random.h +6 -6
  1585. data/third_party/abseil-cpp/absl/random/seed_sequences.h +1 -0
  1586. data/third_party/abseil-cpp/absl/random/uniform_int_distribution.h +2 -2
  1587. data/third_party/abseil-cpp/absl/random/uniform_real_distribution.h +1 -1
  1588. data/third_party/abseil-cpp/absl/random/zipf_distribution.h +4 -3
  1589. data/third_party/abseil-cpp/absl/status/internal/status_internal.h +18 -0
  1590. data/third_party/abseil-cpp/absl/status/status.cc +193 -14
  1591. data/third_party/abseil-cpp/absl/status/status.h +24 -14
  1592. data/third_party/abseil-cpp/absl/status/statusor.h +9 -3
  1593. data/third_party/abseil-cpp/absl/strings/ascii.cc +5 -5
  1594. data/third_party/abseil-cpp/absl/strings/ascii.h +4 -4
  1595. data/third_party/abseil-cpp/absl/strings/charconv.cc +534 -96
  1596. data/third_party/abseil-cpp/absl/strings/cord.cc +257 -924
  1597. data/third_party/abseil-cpp/absl/strings/cord.h +268 -156
  1598. data/third_party/abseil-cpp/absl/strings/cord_analysis.cc +188 -0
  1599. data/third_party/abseil-cpp/absl/strings/cord_analysis.h +44 -0
  1600. data/third_party/abseil-cpp/absl/strings/cord_buffer.cc +30 -0
  1601. data/third_party/abseil-cpp/absl/strings/cord_buffer.h +575 -0
  1602. data/third_party/abseil-cpp/absl/strings/escaping.cc +73 -62
  1603. data/third_party/abseil-cpp/absl/strings/escaping.h +24 -19
  1604. data/third_party/abseil-cpp/absl/strings/internal/char_map.h +14 -12
  1605. data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.cc +4 -4
  1606. data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc +2 -2
  1607. data/third_party/abseil-cpp/absl/strings/internal/cord_data_edge.h +63 -0
  1608. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.cc +20 -32
  1609. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +441 -150
  1610. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +157 -53
  1611. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.h +70 -73
  1612. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.cc +8 -6
  1613. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.h +4 -2
  1614. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.cc +3 -2
  1615. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.h +5 -4
  1616. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_consume.cc +7 -74
  1617. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.cc +56 -0
  1618. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.h +103 -0
  1619. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_flat.h +58 -17
  1620. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.cc +13 -11
  1621. data/third_party/abseil-cpp/absl/strings/internal/cordz_functions.h +7 -15
  1622. data/third_party/abseil-cpp/absl/strings/internal/cordz_handle.h +3 -3
  1623. data/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc +19 -43
  1624. data/third_party/abseil-cpp/absl/strings/internal/cordz_info.h +7 -7
  1625. data/third_party/abseil-cpp/absl/strings/internal/cordz_statistics.h +5 -4
  1626. data/third_party/abseil-cpp/absl/strings/internal/cordz_update_tracker.h +4 -2
  1627. data/third_party/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance.cc +93 -0
  1628. data/third_party/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance.h +34 -0
  1629. data/third_party/abseil-cpp/absl/strings/internal/escaping.cc +18 -15
  1630. data/third_party/abseil-cpp/absl/strings/internal/escaping.h +7 -9
  1631. data/third_party/abseil-cpp/absl/strings/internal/has_absl_stringify.h +55 -0
  1632. data/third_party/abseil-cpp/absl/strings/internal/memutil.cc +9 -6
  1633. data/third_party/abseil-cpp/absl/strings/internal/ostringstream.cc +14 -7
  1634. data/third_party/abseil-cpp/absl/strings/internal/ostringstream.h +35 -10
  1635. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +113 -46
  1636. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +127 -30
  1637. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +3 -2
  1638. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +42 -10
  1639. data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +56 -289
  1640. data/third_party/abseil-cpp/absl/strings/internal/str_format/constexpr_parser.h +351 -0
  1641. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +6 -6
  1642. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +9 -4
  1643. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +215 -181
  1644. data/third_party/abseil-cpp/absl/strings/internal/str_format/output.h +2 -1
  1645. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc +10 -209
  1646. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +14 -103
  1647. data/third_party/abseil-cpp/absl/strings/internal/str_join_internal.h +9 -6
  1648. data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +2 -1
  1649. data/third_party/abseil-cpp/absl/strings/internal/string_constant.h +10 -2
  1650. data/third_party/abseil-cpp/absl/strings/internal/stringify_sink.cc +28 -0
  1651. data/third_party/abseil-cpp/absl/strings/internal/stringify_sink.h +57 -0
  1652. data/third_party/abseil-cpp/absl/strings/internal/utf8.cc +9 -9
  1653. data/third_party/abseil-cpp/absl/strings/numbers.cc +42 -39
  1654. data/third_party/abseil-cpp/absl/strings/numbers.h +26 -23
  1655. data/third_party/abseil-cpp/absl/strings/str_cat.cc +9 -6
  1656. data/third_party/abseil-cpp/absl/strings/str_cat.h +70 -16
  1657. data/third_party/abseil-cpp/absl/strings/str_format.h +71 -9
  1658. data/third_party/abseil-cpp/absl/strings/str_join.h +9 -15
  1659. data/third_party/abseil-cpp/absl/strings/str_split.h +1 -2
  1660. data/third_party/abseil-cpp/absl/strings/string_view.cc +8 -19
  1661. data/third_party/abseil-cpp/absl/strings/string_view.h +6 -12
  1662. data/third_party/abseil-cpp/absl/strings/strip.h +8 -6
  1663. data/third_party/abseil-cpp/absl/strings/substitute.cc +8 -6
  1664. data/third_party/abseil-cpp/absl/strings/substitute.h +55 -21
  1665. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +9 -6
  1666. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.h +0 -4
  1667. data/third_party/abseil-cpp/absl/synchronization/internal/futex.h +20 -17
  1668. data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc +37 -31
  1669. data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +22 -8
  1670. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +0 -4
  1671. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +1 -6
  1672. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +0 -25
  1673. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +10 -4
  1674. data/third_party/abseil-cpp/absl/synchronization/mutex.cc +172 -88
  1675. data/third_party/abseil-cpp/absl/synchronization/mutex.h +102 -55
  1676. data/third_party/abseil-cpp/absl/synchronization/notification.cc +0 -1
  1677. data/third_party/abseil-cpp/absl/synchronization/notification.h +3 -3
  1678. data/third_party/abseil-cpp/absl/time/civil_time.cc +26 -0
  1679. data/third_party/abseil-cpp/absl/time/civil_time.h +25 -0
  1680. data/third_party/abseil-cpp/absl/time/clock.cc +17 -11
  1681. data/third_party/abseil-cpp/absl/time/duration.cc +12 -11
  1682. data/third_party/abseil-cpp/absl/time/format.cc +2 -1
  1683. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +11 -7
  1684. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +1 -1
  1685. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc +26 -5
  1686. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +7 -6
  1687. data/third_party/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc +36 -35
  1688. data/third_party/abseil-cpp/absl/time/time.cc +2 -2
  1689. data/third_party/abseil-cpp/absl/time/time.h +268 -169
  1690. data/third_party/abseil-cpp/absl/types/internal/optional.h +8 -0
  1691. data/third_party/abseil-cpp/absl/types/internal/span.h +30 -19
  1692. data/third_party/abseil-cpp/absl/types/internal/variant.h +28 -40
  1693. data/third_party/abseil-cpp/absl/types/optional.h +17 -14
  1694. data/third_party/abseil-cpp/absl/types/span.h +31 -8
  1695. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_genn.c +1 -1
  1696. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +1 -2
  1697. data/third_party/re2/re2/bitstate.cc +3 -3
  1698. data/third_party/re2/re2/dfa.cc +13 -13
  1699. data/third_party/re2/re2/nfa.cc +4 -4
  1700. data/third_party/re2/re2/onepass.cc +2 -2
  1701. data/third_party/re2/re2/prefilter_tree.cc +27 -59
  1702. data/third_party/re2/re2/prefilter_tree.h +3 -2
  1703. data/third_party/re2/re2/prog.cc +11 -2
  1704. data/third_party/re2/re2/prog.h +17 -5
  1705. data/third_party/re2/re2/re2.cc +6 -11
  1706. data/third_party/re2/re2/re2.h +1 -1
  1707. data/third_party/re2/re2/regexp.cc +1 -2
  1708. data/third_party/re2/re2/stringpiece.h +10 -7
  1709. data/third_party/re2/re2/unicode_casefold.cc +25 -11
  1710. data/third_party/re2/re2/unicode_groups.cc +319 -151
  1711. data/third_party/re2/re2/walker-inl.h +3 -2
  1712. data/third_party/re2/util/mutex.h +4 -4
  1713. data/third_party/upb/upb/arena.c +277 -0
  1714. data/third_party/upb/upb/arena.h +225 -0
  1715. data/third_party/upb/upb/array.c +114 -0
  1716. data/third_party/upb/upb/array.h +83 -0
  1717. data/third_party/upb/upb/collections.h +36 -0
  1718. data/third_party/upb/upb/decode.c +188 -76
  1719. data/third_party/upb/upb/decode.h +1 -0
  1720. data/third_party/upb/upb/decode_fast.c +1 -1
  1721. data/third_party/upb/upb/def.c +128 -57
  1722. data/third_party/upb/upb/def.h +20 -4
  1723. data/third_party/upb/upb/def.hpp +7 -4
  1724. data/third_party/upb/upb/encode.c +43 -28
  1725. data/third_party/upb/upb/encode.h +16 -6
  1726. data/third_party/upb/upb/extension_registry.c +93 -0
  1727. data/third_party/upb/upb/extension_registry.h +84 -0
  1728. data/third_party/upb/upb/{decode_internal.h → internal/decode.h} +5 -5
  1729. data/third_party/upb/upb/internal/table.h +385 -0
  1730. data/third_party/upb/upb/{upb_internal.h → internal/upb.h} +3 -3
  1731. data/third_party/upb/upb/internal/vsnprintf_compat.h +52 -0
  1732. data/third_party/upb/upb/json_decode.c +1512 -0
  1733. data/third_party/upb/upb/json_decode.h +47 -0
  1734. data/third_party/upb/upb/json_encode.c +780 -0
  1735. data/third_party/upb/upb/json_encode.h +65 -0
  1736. data/third_party/upb/upb/map.c +108 -0
  1737. data/third_party/upb/upb/map.h +117 -0
  1738. data/third_party/upb/upb/message_value.h +66 -0
  1739. data/third_party/upb/upb/mini_table.c +1147 -0
  1740. data/third_party/upb/upb/mini_table.h +189 -0
  1741. data/third_party/upb/upb/mini_table.hpp +112 -0
  1742. data/third_party/upb/upb/msg.c +6 -68
  1743. data/third_party/upb/upb/msg.h +2 -46
  1744. data/third_party/upb/upb/msg_internal.h +77 -58
  1745. data/third_party/upb/upb/port_def.inc +10 -1
  1746. data/third_party/upb/upb/port_undef.inc +2 -0
  1747. data/third_party/upb/upb/reflection.c +2 -159
  1748. data/third_party/upb/upb/reflection.h +2 -112
  1749. data/third_party/upb/upb/status.c +86 -0
  1750. data/third_party/upb/upb/status.h +66 -0
  1751. data/third_party/upb/upb/table.c +12 -8
  1752. data/third_party/upb/upb/table_internal.h +3 -350
  1753. data/third_party/upb/upb/text_encode.c +3 -2
  1754. data/third_party/upb/upb/upb.c +4 -290
  1755. data/third_party/upb/upb/upb.h +8 -167
  1756. data/third_party/zlib/compress.c +3 -3
  1757. data/third_party/zlib/crc32.c +975 -292
  1758. data/third_party/zlib/crc32.h +9441 -436
  1759. data/third_party/zlib/deflate.c +183 -129
  1760. data/third_party/zlib/deflate.h +12 -15
  1761. data/third_party/zlib/gzguts.h +3 -2
  1762. data/third_party/zlib/gzlib.c +6 -4
  1763. data/third_party/zlib/gzread.c +8 -12
  1764. data/third_party/zlib/gzwrite.c +26 -14
  1765. data/third_party/zlib/infback.c +12 -8
  1766. data/third_party/zlib/inffast.c +14 -14
  1767. data/third_party/zlib/inflate.c +44 -10
  1768. data/third_party/zlib/inflate.h +3 -2
  1769. data/third_party/zlib/inftrees.c +3 -3
  1770. data/third_party/zlib/inftrees.h +1 -1
  1771. data/third_party/zlib/trees.c +85 -107
  1772. data/third_party/zlib/uncompr.c +2 -2
  1773. data/third_party/zlib/zconf.h +16 -3
  1774. data/third_party/zlib/zlib.h +129 -106
  1775. data/third_party/zlib/zutil.c +11 -9
  1776. data/third_party/zlib/zutil.h +13 -9
  1777. metadata +424 -135
  1778. data/include/grpc/impl/codegen/gpr_slice.h +0 -71
  1779. data/src/core/ext/filters/client_channel/http_connect_handshaker.h +0 -42
  1780. data/src/core/ext/filters/client_channel/lb_policy_factory.h +0 -48
  1781. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +0 -185
  1782. data/src/core/ext/filters/client_channel/lb_policy_registry.h +0 -65
  1783. data/src/core/ext/filters/client_channel/proxy_mapper.h +0 -54
  1784. data/src/core/ext/filters/client_channel/proxy_mapper_registry.cc +0 -89
  1785. data/src/core/ext/filters/client_channel/proxy_mapper_registry.h +0 -50
  1786. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +0 -186
  1787. data/src/core/ext/filters/client_idle/client_idle_filter.cc +0 -201
  1788. data/src/core/ext/filters/fault_injection/service_config_parser.cc +0 -179
  1789. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +0 -456
  1790. data/src/core/ext/filters/http/message_compress/message_compress_filter.h +0 -53
  1791. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +0 -386
  1792. data/src/core/ext/filters/max_age/max_age_filter.cc +0 -566
  1793. data/src/core/ext/filters/server_config_selector/server_config_selector.cc +0 -67
  1794. data/src/core/ext/xds/certificate_provider_registry.cc +0 -103
  1795. data/src/core/ext/xds/certificate_provider_registry.h +0 -57
  1796. data/src/core/lib/channel/handshaker_factory.h +0 -50
  1797. data/src/core/lib/channel/handshaker_registry.cc +0 -50
  1798. data/src/core/lib/channel/handshaker_registry.h +0 -71
  1799. data/src/core/lib/event_engine/sockaddr.cc +0 -40
  1800. data/src/core/lib/event_engine/sockaddr.h +0 -44
  1801. data/src/core/lib/gpr/env.h +0 -40
  1802. data/src/core/lib/gpr/env_linux.cc +0 -75
  1803. data/src/core/lib/gpr/env_posix.cc +0 -46
  1804. data/src/core/lib/gpr/env_windows.cc +0 -74
  1805. data/src/core/lib/gpr/murmur_hash.cc +0 -82
  1806. data/src/core/lib/gpr/murmur_hash.h +0 -29
  1807. data/src/core/lib/gpr/string_windows.h +0 -32
  1808. data/src/core/lib/gpr/tls.h +0 -157
  1809. data/src/core/lib/gprpp/capture.h +0 -76
  1810. data/src/core/lib/iomgr/endpoint_pair_event_engine.cc +0 -32
  1811. data/src/core/lib/iomgr/error_internal.h +0 -66
  1812. data/src/core/lib/iomgr/ev_epollex_linux.cc +0 -1657
  1813. data/src/core/lib/iomgr/ev_epollex_linux.h +0 -30
  1814. data/src/core/lib/iomgr/event_engine/endpoint.cc +0 -172
  1815. data/src/core/lib/iomgr/event_engine/endpoint.h +0 -52
  1816. data/src/core/lib/iomgr/event_engine/iomgr.cc +0 -85
  1817. data/src/core/lib/iomgr/event_engine/pollset.cc +0 -87
  1818. data/src/core/lib/iomgr/event_engine/resolved_address_internal.cc +0 -47
  1819. data/src/core/lib/iomgr/event_engine/resolver.cc +0 -133
  1820. data/src/core/lib/iomgr/event_engine/resolver.h +0 -56
  1821. data/src/core/lib/iomgr/event_engine/tcp.cc +0 -296
  1822. data/src/core/lib/iomgr/event_engine/timer.cc +0 -62
  1823. data/src/core/lib/iomgr/executor/mpmcqueue.cc +0 -182
  1824. data/src/core/lib/iomgr/executor/mpmcqueue.h +0 -171
  1825. data/src/core/lib/iomgr/executor/threadpool.cc +0 -136
  1826. data/src/core/lib/iomgr/executor/threadpool.h +0 -150
  1827. data/src/core/lib/iomgr/is_epollexclusive_available.cc +0 -119
  1828. data/src/core/lib/iomgr/is_epollexclusive_available.h +0 -36
  1829. data/src/core/lib/iomgr/sys_epoll_wrapper.h +0 -30
  1830. data/src/core/lib/iomgr/time_averaged_stats.cc +0 -64
  1831. data/src/core/lib/iomgr/time_averaged_stats.h +0 -72
  1832. data/src/core/lib/profiling/basic_timers.cc +0 -295
  1833. data/src/core/lib/profiling/stap_timers.cc +0 -50
  1834. data/src/core/lib/profiling/timers.h +0 -94
  1835. data/src/core/lib/security/security_connector/load_system_roots_linux.h +0 -46
  1836. data/src/core/lib/slice/slice_api.cc +0 -39
  1837. data/src/core/lib/slice/slice_refcount_base.h +0 -61
  1838. data/src/core/lib/slice/slice_split.cc +0 -100
  1839. data/src/core/lib/slice/slice_split.h +0 -40
  1840. data/src/core/lib/transport/byte_stream.cc +0 -162
  1841. data/src/core/lib/transport/byte_stream.h +0 -166
  1842. data/third_party/abseil-cpp/absl/container/internal/have_sse.h +0 -50
@@ -1,20 +1,20 @@
1
- /*
2
- *
3
- * Copyright 2015 gRPC authors.
4
- *
5
- * Licensed under the Apache License, Version 2.0 (the "License");
6
- * you may not use this file except in compliance with the License.
7
- * You may obtain a copy of the License at
8
- *
9
- * http://www.apache.org/licenses/LICENSE-2.0
10
- *
11
- * Unless required by applicable law or agreed to in writing, software
12
- * distributed under the License is distributed on an "AS IS" BASIS,
13
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
- * See the License for the specific language governing permissions and
15
- * limitations under the License.
16
- *
17
- */
1
+ //
2
+ //
3
+ // Copyright 2015 gRPC authors.
4
+ //
5
+ // Licensed under the Apache License, Version 2.0 (the "License");
6
+ // you may not use this file except in compliance with the License.
7
+ // You may obtain a copy of the License at
8
+ //
9
+ // http://www.apache.org/licenses/LICENSE-2.0
10
+ //
11
+ // Unless required by applicable law or agreed to in writing, software
12
+ // distributed under the License is distributed on an "AS IS" BASIS,
13
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ // See the License for the specific language governing permissions and
15
+ // limitations under the License.
16
+ //
17
+ //
18
18
 
19
19
  #include <grpc/support/port_platform.h>
20
20
 
@@ -23,9 +23,9 @@
23
23
  #include <limits.h>
24
24
  #include <string.h>
25
25
 
26
- /* TODO(jboeuf): refactor inet_ntop into a portability header. */
27
- /* Note: for whomever reads this and tries to refactor this, this
28
- can't be in grpc, it has to be in gpr. */
26
+ // TODO(jboeuf): refactor inet_ntop into a portability header.
27
+ // Note: for whomever reads this and tries to refactor this, this
28
+ // can't be in grpc, it has to be in gpr.
29
29
  #ifdef GPR_WINDOWS
30
30
  #include <ws2tcpip.h>
31
31
  #else
@@ -36,7 +36,7 @@
36
36
  #include <string>
37
37
 
38
38
  #include <openssl/bio.h>
39
- #include <openssl/crypto.h> /* For OPENSSL_free */
39
+ #include <openssl/crypto.h> // For OPENSSL_free
40
40
  #include <openssl/engine.h>
41
41
  #include <openssl/err.h>
42
42
  #include <openssl/ssl.h>
@@ -45,6 +45,7 @@
45
45
  #include <openssl/x509v3.h>
46
46
 
47
47
  #include "absl/strings/match.h"
48
+ #include "absl/strings/str_cat.h"
48
49
  #include "absl/strings/string_view.h"
49
50
 
50
51
  #include <grpc/grpc_security.h>
@@ -55,31 +56,33 @@
55
56
  #include <grpc/support/thd_id.h>
56
57
 
57
58
  #include "src/core/lib/gpr/useful.h"
59
+ #include "src/core/lib/gprpp/crash.h"
58
60
  #include "src/core/tsi/ssl/key_logging/ssl_key_logging.h"
59
61
  #include "src/core/tsi/ssl/session_cache/ssl_session_cache.h"
62
+ #include "src/core/tsi/ssl_transport_security_utils.h"
60
63
  #include "src/core/tsi/ssl_types.h"
61
64
  #include "src/core/tsi/transport_security.h"
62
65
 
63
- /* --- Constants. ---*/
66
+ // --- Constants. ---
64
67
 
65
68
  #define TSI_SSL_MAX_PROTECTED_FRAME_SIZE_UPPER_BOUND 16384
66
69
  #define TSI_SSL_MAX_PROTECTED_FRAME_SIZE_LOWER_BOUND 1024
67
70
  #define TSI_SSL_HANDSHAKER_OUTGOING_BUFFER_INITIAL_SIZE 1024
68
71
 
69
- /* Putting a macro like this and littering the source file with #if is really
70
- bad practice.
71
- TODO(jboeuf): refactor all the #if / #endif in a separate module. */
72
+ // Putting a macro like this and littering the source file with #if is really
73
+ // bad practice.
74
+ // TODO(jboeuf): refactor all the #if / #endif in a separate module.
72
75
  #ifndef TSI_OPENSSL_ALPN_SUPPORT
73
76
  #define TSI_OPENSSL_ALPN_SUPPORT 1
74
77
  #endif
75
78
 
76
- /* TODO(jboeuf): I have not found a way to get this number dynamically from the
77
- SSL structure. This is what we would ultimately want though... */
79
+ // TODO(jboeuf): I have not found a way to get this number dynamically from the
80
+ // SSL structure. This is what we would ultimately want though...
78
81
  #define TSI_SSL_MAX_PROTECTION_OVERHEAD 100
79
82
 
80
83
  using TlsSessionKeyLogger = tsi::TlsSessionKeyLoggerCache::TlsSessionKeyLogger;
81
84
 
82
- /* --- Structure definitions. ---*/
85
+ // --- Structure definitions. ---
83
86
 
84
87
  struct tsi_ssl_root_certs_store {
85
88
  X509_STORE* store;
@@ -100,9 +103,9 @@ struct tsi_ssl_client_handshaker_factory {
100
103
  };
101
104
 
102
105
  struct tsi_ssl_server_handshaker_factory {
103
- /* Several contexts to support SNI.
104
- The tsi_peer array contains the subject names of the server certificates
105
- associated with the contexts at the same index. */
106
+ // Several contexts to support SNI.
107
+ // The tsi_peer array contains the subject names of the server certificates
108
+ // associated with the contexts at the same index.
106
109
  tsi_ssl_handshaker_factory base;
107
110
  SSL_CTX** ssl_contexts;
108
111
  tsi_peer* ssl_context_x509_subject_names;
@@ -136,11 +139,12 @@ struct tsi_ssl_frame_protector {
136
139
  size_t buffer_size;
137
140
  size_t buffer_offset;
138
141
  };
139
- /* --- Library Initialization. ---*/
142
+ // --- Library Initialization. ---
140
143
 
141
144
  static gpr_once g_init_openssl_once = GPR_ONCE_INIT;
142
145
  static int g_ssl_ctx_ex_factory_index = -1;
143
146
  static const unsigned char kSslSessionIdContext[] = {'g', 'r', 'p', 'c'};
147
+ static int g_ssl_ex_verified_root_cert_index = -1;
144
148
  #if !defined(OPENSSL_IS_BORINGSSL) && !defined(OPENSSL_NO_ENGINE)
145
149
  static const char kSslEnginePrefix[] = "engine:";
146
150
  #endif
@@ -190,36 +194,15 @@ static void init_openssl(void) {
190
194
  g_ssl_ctx_ex_factory_index =
191
195
  SSL_CTX_get_ex_new_index(0, nullptr, nullptr, nullptr, nullptr);
192
196
  GPR_ASSERT(g_ssl_ctx_ex_factory_index != -1);
193
- }
194
197
 
195
- /* --- Ssl utils. ---*/
196
-
197
- static const char* ssl_error_string(int error) {
198
- switch (error) {
199
- case SSL_ERROR_NONE:
200
- return "SSL_ERROR_NONE";
201
- case SSL_ERROR_ZERO_RETURN:
202
- return "SSL_ERROR_ZERO_RETURN";
203
- case SSL_ERROR_WANT_READ:
204
- return "SSL_ERROR_WANT_READ";
205
- case SSL_ERROR_WANT_WRITE:
206
- return "SSL_ERROR_WANT_WRITE";
207
- case SSL_ERROR_WANT_CONNECT:
208
- return "SSL_ERROR_WANT_CONNECT";
209
- case SSL_ERROR_WANT_ACCEPT:
210
- return "SSL_ERROR_WANT_ACCEPT";
211
- case SSL_ERROR_WANT_X509_LOOKUP:
212
- return "SSL_ERROR_WANT_X509_LOOKUP";
213
- case SSL_ERROR_SYSCALL:
214
- return "SSL_ERROR_SYSCALL";
215
- case SSL_ERROR_SSL:
216
- return "SSL_ERROR_SSL";
217
- default:
218
- return "Unknown error";
219
- }
198
+ g_ssl_ex_verified_root_cert_index =
199
+ SSL_get_ex_new_index(0, nullptr, nullptr, nullptr, nullptr);
200
+ GPR_ASSERT(g_ssl_ex_verified_root_cert_index != -1);
220
201
  }
221
202
 
222
- /* TODO(jboeuf): Remove when we are past the debugging phase with this code. */
203
+ // --- Ssl utils. ---
204
+
205
+ // TODO(jboeuf): Remove when we are past the debugging phase with this code.
223
206
  static void ssl_log_where_info(const SSL* ssl, int where, int flag,
224
207
  const char* msg) {
225
208
  if ((where & flag) && GRPC_TRACE_FLAG_ENABLED(tsi_tracing_enabled)) {
@@ -228,7 +211,7 @@ static void ssl_log_where_info(const SSL* ssl, int where, int flag,
228
211
  }
229
212
  }
230
213
 
231
- /* Used for debugging. TODO(jboeuf): Remove when code is mature enough. */
214
+ // Used for debugging. TODO(jboeuf): Remove when code is mature enough.
232
215
  static void ssl_info_callback(const SSL* ssl, int where, int ret) {
233
216
  if (ret == 0) {
234
217
  gpr_log(GPR_ERROR, "ssl_info_callback: error occurred.\n");
@@ -240,14 +223,14 @@ static void ssl_info_callback(const SSL* ssl, int where, int ret) {
240
223
  ssl_log_where_info(ssl, where, SSL_CB_HANDSHAKE_DONE, "HANDSHAKE DONE");
241
224
  }
242
225
 
243
- /* Returns 1 if name looks like an IP address, 0 otherwise.
244
- This is a very rough heuristic, and only handles IPv6 in hexadecimal form. */
226
+ // Returns 1 if name looks like an IP address, 0 otherwise.
227
+ // This is a very rough heuristic, and only handles IPv6 in hexadecimal form.
245
228
  static int looks_like_ip_address(absl::string_view name) {
246
229
  size_t dot_count = 0;
247
230
  size_t num_size = 0;
248
231
  for (size_t i = 0; i < name.size(); ++i) {
249
232
  if (name[i] == ':') {
250
- /* IPv6 Address in hexadecimal form, : is not allowed in DNS names. */
233
+ // IPv6 Address in hexadecimal form, : is not allowed in DNS names.
251
234
  return 1;
252
235
  }
253
236
  if (name[i] >= '0' && name[i] <= '9') {
@@ -265,7 +248,7 @@ static int looks_like_ip_address(absl::string_view name) {
265
248
  return 1;
266
249
  }
267
250
 
268
- /* Gets the subject CN from an X509 cert. */
251
+ // Gets the subject CN from an X509 cert.
269
252
  static tsi_result ssl_get_x509_common_name(X509* cert, unsigned char** utf8,
270
253
  size_t* utf8_size) {
271
254
  int common_name_index = -1;
@@ -303,7 +286,7 @@ static tsi_result ssl_get_x509_common_name(X509* cert, unsigned char** utf8,
303
286
  return TSI_OK;
304
287
  }
305
288
 
306
- /* Gets the subject CN of an X509 cert as a tsi_peer_property. */
289
+ // Gets the subject CN of an X509 cert as a tsi_peer_property.
307
290
  static tsi_result peer_property_from_x509_common_name(
308
291
  X509* cert, tsi_peer_property* property) {
309
292
  unsigned char* common_name;
@@ -326,9 +309,10 @@ static tsi_result peer_property_from_x509_common_name(
326
309
  return result;
327
310
  }
328
311
 
329
- /* Gets the subject of an X509 cert as a tsi_peer_property. */
312
+ // Gets the subject of an X509 cert as a tsi_peer_property.
330
313
  static tsi_result peer_property_from_x509_subject(X509* cert,
331
- tsi_peer_property* property) {
314
+ tsi_peer_property* property,
315
+ bool is_verified_root_cert) {
332
316
  X509_NAME* subject_name = X509_get_subject_name(cert);
333
317
  if (subject_name == nullptr) {
334
318
  gpr_log(GPR_INFO, "Could not get subject name from certificate.");
@@ -343,14 +327,21 @@ static tsi_result peer_property_from_x509_subject(X509* cert,
343
327
  BIO_free(bio);
344
328
  return TSI_INTERNAL_ERROR;
345
329
  }
346
- tsi_result result = tsi_construct_string_peer_property(
347
- TSI_X509_SUBJECT_PEER_PROPERTY, contents, static_cast<size_t>(len),
348
- property);
330
+ tsi_result result;
331
+ if (!is_verified_root_cert) {
332
+ result = tsi_construct_string_peer_property(
333
+ TSI_X509_SUBJECT_PEER_PROPERTY, contents, static_cast<size_t>(len),
334
+ property);
335
+ } else {
336
+ result = tsi_construct_string_peer_property(
337
+ TSI_X509_VERIFIED_ROOT_CERT_SUBECT_PEER_PROPERTY, contents,
338
+ static_cast<size_t>(len), property);
339
+ }
349
340
  BIO_free(bio);
350
341
  return result;
351
342
  }
352
343
 
353
- /* Gets the X509 cert in PEM format as a tsi_peer_property. */
344
+ // Gets the X509 cert in PEM format as a tsi_peer_property.
354
345
  static tsi_result add_pem_certificate(X509* cert, tsi_peer_property* property) {
355
346
  BIO* bio = BIO_new(BIO_s_mem());
356
347
  if (!PEM_write_bio_X509(bio, cert)) {
@@ -369,7 +360,7 @@ static tsi_result add_pem_certificate(X509* cert, tsi_peer_property* property) {
369
360
  return result;
370
361
  }
371
362
 
372
- /* Gets the subject SANs from an X509 cert as a tsi_peer_property. */
363
+ // Gets the subject SANs from an X509 cert as a tsi_peer_property.
373
364
  static tsi_result add_subject_alt_names_properties_to_peer(
374
365
  tsi_peer* peer, GENERAL_NAMES* subject_alt_names,
375
366
  size_t subject_alt_name_count, int* current_insert_index) {
@@ -452,10 +443,10 @@ static tsi_result add_subject_alt_names_properties_to_peer(
452
443
  return result;
453
444
  }
454
445
 
455
- /* Gets information about the peer's X509 cert as a tsi_peer object. */
446
+ // Gets information about the peer's X509 cert as a tsi_peer object.
456
447
  static tsi_result peer_from_x509(X509* cert, int include_certificate_type,
457
448
  tsi_peer* peer) {
458
- /* TODO(jboeuf): Maybe add more properties. */
449
+ // TODO(jboeuf): Maybe add more properties.
459
450
  GENERAL_NAMES* subject_alt_names = static_cast<GENERAL_NAMES*>(
460
451
  X509_get_ext_d2i(cert, NID_subject_alt_name, nullptr, nullptr));
461
452
  int subject_alt_name_count =
@@ -465,7 +456,7 @@ static tsi_result peer_from_x509(X509* cert, int include_certificate_type,
465
456
  size_t property_count;
466
457
  tsi_result result;
467
458
  GPR_ASSERT(subject_alt_name_count >= 0);
468
- property_count = (include_certificate_type ? static_cast<size_t>(1) : 0) +
459
+ property_count = (include_certificate_type ? size_t{1} : 0) +
469
460
  3 /* subject, common name, certificate */ +
470
461
  static_cast<size_t>(subject_alt_name_count);
471
462
  for (int i = 0; i < subject_alt_name_count; i++) {
@@ -494,7 +485,8 @@ static tsi_result peer_from_x509(X509* cert, int include_certificate_type,
494
485
  }
495
486
 
496
487
  result = peer_property_from_x509_subject(
497
- cert, &peer->properties[current_insert_index++]);
488
+ cert, &peer->properties[current_insert_index++],
489
+ /*is_verified_root_cert=*/false);
498
490
  if (result != TSI_OK) break;
499
491
 
500
492
  result = peer_property_from_x509_common_name(
@@ -522,72 +514,7 @@ static tsi_result peer_from_x509(X509* cert, int include_certificate_type,
522
514
  return result;
523
515
  }
524
516
 
525
- /* Logs the SSL error stack. */
526
- static void log_ssl_error_stack(void) {
527
- unsigned long err;
528
- while ((err = ERR_get_error()) != 0) {
529
- char details[256];
530
- ERR_error_string_n(static_cast<uint32_t>(err), details, sizeof(details));
531
- gpr_log(GPR_ERROR, "%s", details);
532
- }
533
- }
534
-
535
- /* Performs an SSL_read and handle errors. */
536
- static tsi_result do_ssl_read(SSL* ssl, unsigned char* unprotected_bytes,
537
- size_t* unprotected_bytes_size) {
538
- GPR_ASSERT(*unprotected_bytes_size <= INT_MAX);
539
- ERR_clear_error();
540
- int read_from_ssl = SSL_read(ssl, unprotected_bytes,
541
- static_cast<int>(*unprotected_bytes_size));
542
- if (read_from_ssl <= 0) {
543
- read_from_ssl = SSL_get_error(ssl, read_from_ssl);
544
- switch (read_from_ssl) {
545
- case SSL_ERROR_ZERO_RETURN: /* Received a close_notify alert. */
546
- case SSL_ERROR_WANT_READ: /* We need more data to finish the frame. */
547
- *unprotected_bytes_size = 0;
548
- return TSI_OK;
549
- case SSL_ERROR_WANT_WRITE:
550
- gpr_log(
551
- GPR_ERROR,
552
- "Peer tried to renegotiate SSL connection. This is unsupported.");
553
- return TSI_UNIMPLEMENTED;
554
- case SSL_ERROR_SSL:
555
- gpr_log(GPR_ERROR, "Corruption detected.");
556
- log_ssl_error_stack();
557
- return TSI_DATA_CORRUPTED;
558
- default:
559
- gpr_log(GPR_ERROR, "SSL_read failed with error %s.",
560
- ssl_error_string(read_from_ssl));
561
- return TSI_PROTOCOL_FAILURE;
562
- }
563
- }
564
- *unprotected_bytes_size = static_cast<size_t>(read_from_ssl);
565
- return TSI_OK;
566
- }
567
-
568
- /* Performs an SSL_write and handle errors. */
569
- static tsi_result do_ssl_write(SSL* ssl, unsigned char* unprotected_bytes,
570
- size_t unprotected_bytes_size) {
571
- GPR_ASSERT(unprotected_bytes_size <= INT_MAX);
572
- ERR_clear_error();
573
- int ssl_write_result = SSL_write(ssl, unprotected_bytes,
574
- static_cast<int>(unprotected_bytes_size));
575
- if (ssl_write_result < 0) {
576
- ssl_write_result = SSL_get_error(ssl, ssl_write_result);
577
- if (ssl_write_result == SSL_ERROR_WANT_READ) {
578
- gpr_log(GPR_ERROR,
579
- "Peer tried to renegotiate SSL connection. This is unsupported.");
580
- return TSI_UNIMPLEMENTED;
581
- } else {
582
- gpr_log(GPR_ERROR, "SSL_write failed with error %s.",
583
- ssl_error_string(ssl_write_result));
584
- return TSI_INTERNAL_ERROR;
585
- }
586
- }
587
- return TSI_OK;
588
- }
589
-
590
- /* Loads an in-memory PEM certificate chain into the SSL context. */
517
+ // Loads an in-memory PEM certificate chain into the SSL context.
591
518
  static tsi_result ssl_ctx_use_certificate_chain(SSL_CTX* context,
592
519
  const char* pem_cert_chain,
593
520
  size_t pem_cert_chain_size) {
@@ -614,17 +541,17 @@ static tsi_result ssl_ctx_use_certificate_chain(SSL_CTX* context,
614
541
  PEM_read_bio_X509(pem, nullptr, nullptr, const_cast<char*>(""));
615
542
  if (certificate_authority == nullptr) {
616
543
  ERR_clear_error();
617
- break; /* Done reading. */
544
+ break; // Done reading.
618
545
  }
619
546
  if (!SSL_CTX_add_extra_chain_cert(context, certificate_authority)) {
620
547
  X509_free(certificate_authority);
621
548
  result = TSI_INVALID_ARGUMENT;
622
549
  break;
623
550
  }
624
- /* We don't need to free certificate_authority as its ownership has been
625
- transferred to the context. That is not the case for certificate
626
- though.
627
- */
551
+ // We don't need to free certificate_authority as its ownership has been
552
+ // transferred to the context. That is not the case for certificate
553
+ // though.
554
+ //
628
555
  }
629
556
  } while (false);
630
557
 
@@ -706,7 +633,7 @@ static tsi_result ssl_ctx_use_engine_private_key(SSL_CTX* context,
706
633
  if (engine_name != nullptr) gpr_free(engine_name);
707
634
  return result;
708
635
  }
709
- #endif /* !defined(OPENSSL_IS_BORINGSSL) && !defined(OPENSSL_NO_ENGINE) */
636
+ #endif // !defined(OPENSSL_IS_BORINGSSL) && !defined(OPENSSL_NO_ENGINE)
710
637
 
711
638
  static tsi_result ssl_ctx_use_pem_private_key(SSL_CTX* context,
712
639
  const char* pem_key,
@@ -734,7 +661,7 @@ static tsi_result ssl_ctx_use_pem_private_key(SSL_CTX* context,
734
661
  return result;
735
662
  }
736
663
 
737
- /* Loads an in-memory PEM private key into the SSL context. */
664
+ // Loads an in-memory PEM private key into the SSL context.
738
665
  static tsi_result ssl_ctx_use_private_key(SSL_CTX* context, const char* pem_key,
739
666
  size_t pem_key_size) {
740
667
  // BoringSSL does not have ENGINE support
@@ -742,14 +669,14 @@ static tsi_result ssl_ctx_use_private_key(SSL_CTX* context, const char* pem_key,
742
669
  if (strncmp(pem_key, kSslEnginePrefix, strlen(kSslEnginePrefix)) == 0) {
743
670
  return ssl_ctx_use_engine_private_key(context, pem_key, pem_key_size);
744
671
  } else
745
- #endif /* !defined(OPENSSL_IS_BORINGSSL) && !defined(OPENSSL_NO_ENGINE) */
672
+ #endif // !defined(OPENSSL_IS_BORINGSSL) && !defined(OPENSSL_NO_ENGINE)
746
673
  {
747
674
  return ssl_ctx_use_pem_private_key(context, pem_key, pem_key_size);
748
675
  }
749
676
  }
750
677
 
751
- /* Loads in-memory PEM verification certs into the SSL context and optionally
752
- returns the verification cert names (root_names can be NULL). */
678
+ // Loads in-memory PEM verification certs into the SSL context and optionally
679
+ // returns the verification cert names (root_names can be NULL).
753
680
  static tsi_result x509_store_load_certs(X509_STORE* cert_store,
754
681
  const char* pem_roots,
755
682
  size_t pem_roots_size,
@@ -772,7 +699,7 @@ static tsi_result x509_store_load_certs(X509_STORE* cert_store,
772
699
  root = PEM_read_bio_X509_AUX(pem, nullptr, nullptr, const_cast<char*>(""));
773
700
  if (root == nullptr) {
774
701
  ERR_clear_error();
775
- break; /* We're at the end of stream. */
702
+ break; // We're at the end of stream.
776
703
  }
777
704
  if (root_names != nullptr) {
778
705
  root_name = X509_get_subject_name(root);
@@ -831,8 +758,8 @@ static tsi_result ssl_ctx_load_verification_certs(SSL_CTX* context,
831
758
  root_name);
832
759
  }
833
760
 
834
- /* Populates the SSL context with a private key and a cert chain, and sets the
835
- cipher list and the ephemeral ECDH key. */
761
+ // Populates the SSL context with a private key and a cert chain, and sets the
762
+ // cipher list and the ephemeral ECDH key.
836
763
  static tsi_result populate_ssl_context(
837
764
  SSL_CTX* context, const tsi_ssl_pem_key_cert_pair* key_cert_pair,
838
765
  const char* cipher_list) {
@@ -873,7 +800,7 @@ static tsi_result populate_ssl_context(
873
800
  return TSI_OK;
874
801
  }
875
802
 
876
- /* Extracts the CN and the SANs from an X509 cert as a peer object. */
803
+ // Extracts the CN and the SANs from an X509 cert as a peer object.
877
804
  tsi_result tsi_ssl_extract_x509_subject_names_from_pem_cert(
878
805
  const char* pem_cert, tsi_peer* peer) {
879
806
  tsi_result result = TSI_OK;
@@ -894,7 +821,7 @@ tsi_result tsi_ssl_extract_x509_subject_names_from_pem_cert(
894
821
  return result;
895
822
  }
896
823
 
897
- /* Builds the alpn protocol name list according to rfc 7301. */
824
+ // Builds the alpn protocol name list according to rfc 7301.
898
825
  static tsi_result build_alpn_protocol_name_list(
899
826
  const char** alpn_protocols, uint16_t num_alpn_protocols,
900
827
  unsigned char** protocol_name_list, size_t* protocol_name_list_length) {
@@ -919,11 +846,11 @@ static tsi_result build_alpn_protocol_name_list(
919
846
  current = *protocol_name_list;
920
847
  for (i = 0; i < num_alpn_protocols; i++) {
921
848
  size_t length = strlen(alpn_protocols[i]);
922
- *(current++) = static_cast<uint8_t>(length); /* max checked above. */
849
+ *(current++) = static_cast<uint8_t>(length); // max checked above.
923
850
  memcpy(current, alpn_protocols[i], length);
924
851
  current += length;
925
852
  }
926
- /* Safety check. */
853
+ // Safety check.
927
854
  if ((current < *protocol_name_list) ||
928
855
  (static_cast<uintptr_t>(current - *protocol_name_list) !=
929
856
  *protocol_name_list_length)) {
@@ -932,6 +859,22 @@ static tsi_result build_alpn_protocol_name_list(
932
859
  return TSI_OK;
933
860
  }
934
861
 
862
+ // This callback is invoked when the CRL has been verified and will soft-fail
863
+ // errors in verification depending on certain error types.
864
+ static int verify_cb(int ok, X509_STORE_CTX* ctx) {
865
+ int cert_error = X509_STORE_CTX_get_error(ctx);
866
+ if (cert_error == X509_V_ERR_UNABLE_TO_GET_CRL) {
867
+ gpr_log(
868
+ GPR_INFO,
869
+ "Certificate verification failed to get CRL files. Ignoring error.");
870
+ return 1;
871
+ }
872
+ if (cert_error != 0) {
873
+ gpr_log(GPR_ERROR, "Certificate verify failed with code %d", cert_error);
874
+ }
875
+ return ok;
876
+ }
877
+
935
878
  // The verification callback is used for clients that don't really care about
936
879
  // the server's certificate, but we need to pull it anyway, in case a higher
937
880
  // layer wants to look at it. In this case the verification may fail, but
@@ -940,6 +883,64 @@ static int NullVerifyCallback(int /*preverify_ok*/, X509_STORE_CTX* /*ctx*/) {
940
883
  return 1;
941
884
  }
942
885
 
886
+ static int RootCertExtractCallback(int preverify_ok, X509_STORE_CTX* ctx) {
887
+ if (ctx == nullptr) {
888
+ return preverify_ok;
889
+ }
890
+
891
+ // There's a case where this function is set in SSL_CTX_set_verify and a CRL
892
+ // related callback is set with X509_STORE_set_verify_cb. They overlap and
893
+ // this will take precedence, thus we need to ensure the CRL related callback
894
+ // is still called
895
+ X509_VERIFY_PARAM* param = X509_STORE_CTX_get0_param(ctx);
896
+ auto flags = X509_VERIFY_PARAM_get_flags(param);
897
+ if (flags & X509_V_FLAG_CRL_CHECK) {
898
+ preverify_ok = verify_cb(preverify_ok, ctx);
899
+ }
900
+
901
+ // If preverify_ok == 0, verification failed. We shouldn't expect to have a
902
+ // verified chain, so there is no need to attempt to extract the root cert
903
+ // from it
904
+ if (preverify_ok == 0) {
905
+ return preverify_ok;
906
+ }
907
+
908
+ // If we're here, verification was successful
909
+ // Get the verified chain from the X509_STORE_CTX and put it on the SSL object
910
+ // so that we have access to it when populating the tsi_peer
911
+ #if OPENSSL_VERSION_NUMBER >= 0x10100000
912
+ STACK_OF(X509)* chain = X509_STORE_CTX_get0_chain(ctx);
913
+ #else
914
+ STACK_OF(X509)* chain = X509_STORE_CTX_get_chain(ctx);
915
+ #endif
916
+
917
+ if (chain == nullptr) {
918
+ return preverify_ok;
919
+ }
920
+
921
+ // The root cert is the last in the chain
922
+ size_t chain_length = sk_X509_num(chain);
923
+ if (chain_length == 0) {
924
+ return preverify_ok;
925
+ }
926
+ X509* root_cert = sk_X509_value(chain, chain_length - 1);
927
+ if (root_cert == nullptr) {
928
+ return preverify_ok;
929
+ }
930
+
931
+ SSL* ssl = static_cast<SSL*>(
932
+ X509_STORE_CTX_get_ex_data(ctx, SSL_get_ex_data_X509_STORE_CTX_idx()));
933
+ if (ssl == nullptr) {
934
+ return preverify_ok;
935
+ }
936
+ int success =
937
+ SSL_set_ex_data(ssl, g_ssl_ex_verified_root_cert_index, root_cert);
938
+ if (success == 0) {
939
+ gpr_log(GPR_INFO, "Could not set verified root cert in SSL's ex_data");
940
+ }
941
+ return preverify_ok;
942
+ }
943
+
943
944
  // Sets the min and max TLS version of |ssl_context| to |min_tls_version| and
944
945
  // |max_tls_version|, respectively. Calling this method is a no-op when using
945
946
  // OpenSSL versions < 1.1.
@@ -995,7 +996,7 @@ static tsi_result tsi_set_min_and_max_tls_versions(
995
996
  return TSI_OK;
996
997
  }
997
998
 
998
- /* --- tsi_ssl_root_certs_store methods implementation. ---*/
999
+ // --- tsi_ssl_root_certs_store methods implementation. ---
999
1000
 
1000
1001
  tsi_ssl_root_certs_store* tsi_ssl_root_certs_store_create(
1001
1002
  const char* pem_roots) {
@@ -1032,24 +1033,23 @@ void tsi_ssl_root_certs_store_destroy(tsi_ssl_root_certs_store* self) {
1032
1033
  gpr_free(self);
1033
1034
  }
1034
1035
 
1035
- /* --- tsi_ssl_session_cache methods implementation. ---*/
1036
+ // --- tsi_ssl_session_cache methods implementation. ---
1036
1037
 
1037
1038
  tsi_ssl_session_cache* tsi_ssl_session_cache_create_lru(size_t capacity) {
1038
- /* Pointer will be dereferenced by unref call. */
1039
- return reinterpret_cast<tsi_ssl_session_cache*>(
1040
- tsi::SslSessionLRUCache::Create(capacity).release());
1039
+ // Pointer will be dereferenced by unref call.
1040
+ return tsi::SslSessionLRUCache::Create(capacity).release()->c_ptr();
1041
1041
  }
1042
1042
 
1043
1043
  void tsi_ssl_session_cache_ref(tsi_ssl_session_cache* cache) {
1044
- /* Pointer will be dereferenced by unref call. */
1045
- reinterpret_cast<tsi::SslSessionLRUCache*>(cache)->Ref().release();
1044
+ // Pointer will be dereferenced by unref call.
1045
+ tsi::SslSessionLRUCache::FromC(cache)->Ref().release();
1046
1046
  }
1047
1047
 
1048
1048
  void tsi_ssl_session_cache_unref(tsi_ssl_session_cache* cache) {
1049
- reinterpret_cast<tsi::SslSessionLRUCache*>(cache)->Unref();
1049
+ tsi::SslSessionLRUCache::FromC(cache)->Unref();
1050
1050
  }
1051
1051
 
1052
- /* --- tsi_frame_protector methods implementation. ---*/
1052
+ // --- tsi_frame_protector methods implementation. ---
1053
1053
 
1054
1054
  static tsi_result ssl_protector_protect(tsi_frame_protector* self,
1055
1055
  const unsigned char* unprotected_bytes,
@@ -1058,130 +1058,33 @@ static tsi_result ssl_protector_protect(tsi_frame_protector* self,
1058
1058
  size_t* protected_output_frames_size) {
1059
1059
  tsi_ssl_frame_protector* impl =
1060
1060
  reinterpret_cast<tsi_ssl_frame_protector*>(self);
1061
- int read_from_ssl;
1062
- size_t available;
1063
- tsi_result result = TSI_OK;
1064
-
1065
- /* First see if we have some pending data in the SSL BIO. */
1066
- int pending_in_ssl = static_cast<int>(BIO_pending(impl->network_io));
1067
- if (pending_in_ssl > 0) {
1068
- *unprotected_bytes_size = 0;
1069
- GPR_ASSERT(*protected_output_frames_size <= INT_MAX);
1070
- read_from_ssl = BIO_read(impl->network_io, protected_output_frames,
1071
- static_cast<int>(*protected_output_frames_size));
1072
- if (read_from_ssl < 0) {
1073
- gpr_log(GPR_ERROR,
1074
- "Could not read from BIO even though some data is pending");
1075
- return TSI_INTERNAL_ERROR;
1076
- }
1077
- *protected_output_frames_size = static_cast<size_t>(read_from_ssl);
1078
- return TSI_OK;
1079
- }
1080
1061
 
1081
- /* Now see if we can send a complete frame. */
1082
- available = impl->buffer_size - impl->buffer_offset;
1083
- if (available > *unprotected_bytes_size) {
1084
- /* If we cannot, just copy the data in our internal buffer. */
1085
- memcpy(impl->buffer + impl->buffer_offset, unprotected_bytes,
1086
- *unprotected_bytes_size);
1087
- impl->buffer_offset += *unprotected_bytes_size;
1088
- *protected_output_frames_size = 0;
1089
- return TSI_OK;
1090
- }
1091
-
1092
- /* If we can, prepare the buffer, send it to SSL_write and read. */
1093
- memcpy(impl->buffer + impl->buffer_offset, unprotected_bytes, available);
1094
- result = do_ssl_write(impl->ssl, impl->buffer, impl->buffer_size);
1095
- if (result != TSI_OK) return result;
1096
-
1097
- GPR_ASSERT(*protected_output_frames_size <= INT_MAX);
1098
- read_from_ssl = BIO_read(impl->network_io, protected_output_frames,
1099
- static_cast<int>(*protected_output_frames_size));
1100
- if (read_from_ssl < 0) {
1101
- gpr_log(GPR_ERROR, "Could not read from BIO after SSL_write.");
1102
- return TSI_INTERNAL_ERROR;
1103
- }
1104
- *protected_output_frames_size = static_cast<size_t>(read_from_ssl);
1105
- *unprotected_bytes_size = available;
1106
- impl->buffer_offset = 0;
1107
- return TSI_OK;
1062
+ return grpc_core::SslProtectorProtect(
1063
+ unprotected_bytes, impl->buffer_size, impl->buffer_offset, impl->buffer,
1064
+ impl->ssl, impl->network_io, unprotected_bytes_size,
1065
+ protected_output_frames, protected_output_frames_size);
1108
1066
  }
1109
1067
 
1110
1068
  static tsi_result ssl_protector_protect_flush(
1111
1069
  tsi_frame_protector* self, unsigned char* protected_output_frames,
1112
1070
  size_t* protected_output_frames_size, size_t* still_pending_size) {
1113
- tsi_result result = TSI_OK;
1114
1071
  tsi_ssl_frame_protector* impl =
1115
1072
  reinterpret_cast<tsi_ssl_frame_protector*>(self);
1116
- int read_from_ssl = 0;
1117
- int pending;
1118
-
1119
- if (impl->buffer_offset != 0) {
1120
- result = do_ssl_write(impl->ssl, impl->buffer, impl->buffer_offset);
1121
- if (result != TSI_OK) return result;
1122
- impl->buffer_offset = 0;
1123
- }
1124
-
1125
- pending = static_cast<int>(BIO_pending(impl->network_io));
1126
- GPR_ASSERT(pending >= 0);
1127
- *still_pending_size = static_cast<size_t>(pending);
1128
- if (*still_pending_size == 0) return TSI_OK;
1129
-
1130
- GPR_ASSERT(*protected_output_frames_size <= INT_MAX);
1131
- read_from_ssl = BIO_read(impl->network_io, protected_output_frames,
1132
- static_cast<int>(*protected_output_frames_size));
1133
- if (read_from_ssl <= 0) {
1134
- gpr_log(GPR_ERROR, "Could not read from BIO after SSL_write.");
1135
- return TSI_INTERNAL_ERROR;
1136
- }
1137
- *protected_output_frames_size = static_cast<size_t>(read_from_ssl);
1138
- pending = static_cast<int>(BIO_pending(impl->network_io));
1139
- GPR_ASSERT(pending >= 0);
1140
- *still_pending_size = static_cast<size_t>(pending);
1141
- return TSI_OK;
1073
+ return grpc_core::SslProtectorProtectFlush(
1074
+ impl->buffer_offset, impl->buffer, impl->ssl, impl->network_io,
1075
+ protected_output_frames, protected_output_frames_size,
1076
+ still_pending_size);
1142
1077
  }
1143
1078
 
1144
1079
  static tsi_result ssl_protector_unprotect(
1145
1080
  tsi_frame_protector* self, const unsigned char* protected_frames_bytes,
1146
1081
  size_t* protected_frames_bytes_size, unsigned char* unprotected_bytes,
1147
1082
  size_t* unprotected_bytes_size) {
1148
- tsi_result result = TSI_OK;
1149
- int written_into_ssl = 0;
1150
- size_t output_bytes_size = *unprotected_bytes_size;
1151
- size_t output_bytes_offset = 0;
1152
1083
  tsi_ssl_frame_protector* impl =
1153
1084
  reinterpret_cast<tsi_ssl_frame_protector*>(self);
1154
-
1155
- /* First, try to read remaining data from ssl. */
1156
- result = do_ssl_read(impl->ssl, unprotected_bytes, unprotected_bytes_size);
1157
- if (result != TSI_OK) return result;
1158
- if (*unprotected_bytes_size == output_bytes_size) {
1159
- /* We have read everything we could and cannot process any more input. */
1160
- *protected_frames_bytes_size = 0;
1161
- return TSI_OK;
1162
- }
1163
- output_bytes_offset = *unprotected_bytes_size;
1164
- unprotected_bytes += output_bytes_offset;
1165
- *unprotected_bytes_size = output_bytes_size - output_bytes_offset;
1166
-
1167
- /* Then, try to write some data to ssl. */
1168
- GPR_ASSERT(*protected_frames_bytes_size <= INT_MAX);
1169
- written_into_ssl = BIO_write(impl->network_io, protected_frames_bytes,
1170
- static_cast<int>(*protected_frames_bytes_size));
1171
- if (written_into_ssl < 0) {
1172
- gpr_log(GPR_ERROR, "Sending protected frame to ssl failed with %d",
1173
- written_into_ssl);
1174
- return TSI_INTERNAL_ERROR;
1175
- }
1176
- *protected_frames_bytes_size = static_cast<size_t>(written_into_ssl);
1177
-
1178
- /* Now try to read some data again. */
1179
- result = do_ssl_read(impl->ssl, unprotected_bytes, unprotected_bytes_size);
1180
- if (result == TSI_OK) {
1181
- /* Don't forget to output the total number of bytes read. */
1182
- *unprotected_bytes_size += output_bytes_offset;
1183
- }
1184
- return result;
1085
+ return grpc_core::SslProtectorUnprotect(
1086
+ protected_frames_bytes, impl->ssl, impl->network_io,
1087
+ protected_frames_bytes_size, unprotected_bytes, unprotected_bytes_size);
1185
1088
  }
1186
1089
 
1187
1090
  static void ssl_protector_destroy(tsi_frame_protector* self) {
@@ -1200,7 +1103,7 @@ static const tsi_frame_protector_vtable frame_protector_vtable = {
1200
1103
  ssl_protector_destroy,
1201
1104
  };
1202
1105
 
1203
- /* --- tsi_server_handshaker_factory methods implementation. --- */
1106
+ // --- tsi_server_handshaker_factory methods implementation. ---
1204
1107
 
1205
1108
  static void tsi_ssl_handshaker_factory_destroy(
1206
1109
  tsi_ssl_handshaker_factory* factory) {
@@ -1209,9 +1112,9 @@ static void tsi_ssl_handshaker_factory_destroy(
1209
1112
  if (factory->vtable != nullptr && factory->vtable->destroy != nullptr) {
1210
1113
  factory->vtable->destroy(factory);
1211
1114
  }
1212
- /* Note, we don't free(self) here because this object is always directly
1213
- * embedded in another object. If tsi_ssl_handshaker_factory_init allocates
1214
- * any memory, it should be free'd here. */
1115
+ // Note, we don't free(self) here because this object is always directly
1116
+ // embedded in another object. If tsi_ssl_handshaker_factory_init allocates
1117
+ // any memory, it should be free'd here.
1215
1118
  }
1216
1119
 
1217
1120
  static tsi_ssl_handshaker_factory* tsi_ssl_handshaker_factory_ref(
@@ -1232,8 +1135,8 @@ static void tsi_ssl_handshaker_factory_unref(
1232
1135
 
1233
1136
  static tsi_ssl_handshaker_factory_vtable handshaker_factory_vtable = {nullptr};
1234
1137
 
1235
- /* Initializes a tsi_ssl_handshaker_factory object. Caller is responsible for
1236
- * allocating memory for the factory. */
1138
+ // Initializes a tsi_ssl_handshaker_factory object. Caller is responsible for
1139
+ // allocating memory for the factory.
1237
1140
  static void tsi_ssl_handshaker_factory_init(
1238
1141
  tsi_ssl_handshaker_factory* factory) {
1239
1142
  GPR_ASSERT(factory != nullptr);
@@ -1242,7 +1145,7 @@ static void tsi_ssl_handshaker_factory_init(
1242
1145
  gpr_ref_init(&factory->refcount, 1);
1243
1146
  }
1244
1147
 
1245
- /* Gets the X509 cert chain in PEM format as a tsi_peer_property. */
1148
+ // Gets the X509 cert chain in PEM format as a tsi_peer_property.
1246
1149
  tsi_result tsi_ssl_get_cert_chain_contents(STACK_OF(X509) * peer_chain,
1247
1150
  tsi_peer_property* property) {
1248
1151
  BIO* bio = BIO_new(BIO_s_mem());
@@ -1266,7 +1169,7 @@ tsi_result tsi_ssl_get_cert_chain_contents(STACK_OF(X509) * peer_chain,
1266
1169
  return result;
1267
1170
  }
1268
1171
 
1269
- /* --- tsi_handshaker_result methods implementation. ---*/
1172
+ // --- tsi_handshaker_result methods implementation. ---
1270
1173
  static tsi_result ssl_handshaker_result_extract_peer(
1271
1174
  const tsi_handshaker_result* self, tsi_peer* peer) {
1272
1175
  tsi_result result = TSI_OK;
@@ -1282,9 +1185,9 @@ static tsi_result ssl_handshaker_result_extract_peer(
1282
1185
  }
1283
1186
  #if TSI_OPENSSL_ALPN_SUPPORT
1284
1187
  SSL_get0_alpn_selected(impl->ssl, &alpn_selected, &alpn_selected_len);
1285
- #endif /* TSI_OPENSSL_ALPN_SUPPORT */
1188
+ #endif // TSI_OPENSSL_ALPN_SUPPORT
1286
1189
  if (alpn_selected == nullptr) {
1287
- /* Try npn. */
1190
+ // Try npn.
1288
1191
  SSL_get0_next_proto_negotiated(impl->ssl, &alpn_selected,
1289
1192
  &alpn_selected_len);
1290
1193
  }
@@ -1292,10 +1195,14 @@ static tsi_result ssl_handshaker_result_extract_peer(
1292
1195
  // peer's certificate; When called on the server side,
1293
1196
  // the peer's certificate is not present in the stack
1294
1197
  STACK_OF(X509)* peer_chain = SSL_get_peer_cert_chain(impl->ssl);
1198
+
1199
+ X509* verified_root_cert = static_cast<X509*>(
1200
+ SSL_get_ex_data(impl->ssl, g_ssl_ex_verified_root_cert_index));
1295
1201
  // 1 is for session reused property.
1296
1202
  size_t new_property_count = peer->property_count + 3;
1297
1203
  if (alpn_selected != nullptr) new_property_count++;
1298
1204
  if (peer_chain != nullptr) new_property_count++;
1205
+ if (verified_root_cert != nullptr) new_property_count++;
1299
1206
  tsi_peer_property* new_properties = static_cast<tsi_peer_property*>(
1300
1207
  gpr_zalloc(sizeof(*new_properties) * new_property_count));
1301
1208
  for (size_t i = 0; i < peer->property_count; i++) {
@@ -1331,6 +1238,18 @@ static tsi_result ssl_handshaker_result_extract_peer(
1331
1238
  &peer->properties[peer->property_count]);
1332
1239
  if (result != TSI_OK) return result;
1333
1240
  peer->property_count++;
1241
+
1242
+ if (verified_root_cert != nullptr) {
1243
+ result = peer_property_from_x509_subject(
1244
+ verified_root_cert, &peer->properties[peer->property_count], true);
1245
+ if (result != TSI_OK) {
1246
+ gpr_log(GPR_DEBUG,
1247
+ "Problem extracting subject from verified_root_cert. result: %d",
1248
+ static_cast<int>(result));
1249
+ }
1250
+ peer->property_count++;
1251
+ }
1252
+
1334
1253
  return result;
1335
1254
  }
1336
1255
 
@@ -1376,7 +1295,7 @@ static tsi_result ssl_handshaker_result_create_frame_protector(
1376
1295
  return TSI_INTERNAL_ERROR;
1377
1296
  }
1378
1297
 
1379
- /* Transfer ownership of ssl and network_io to the frame protector. */
1298
+ // Transfer ownership of ssl and network_io to the frame protector.
1380
1299
  protector_impl->ssl = impl->ssl;
1381
1300
  impl->ssl = nullptr;
1382
1301
  protector_impl->network_io = impl->network_io;
@@ -1408,7 +1327,7 @@ static void ssl_handshaker_result_destroy(tsi_handshaker_result* self) {
1408
1327
  static const tsi_handshaker_result_vtable handshaker_result_vtable = {
1409
1328
  ssl_handshaker_result_extract_peer,
1410
1329
  ssl_handshaker_result_get_frame_protector_type,
1411
- nullptr, /* create_zero_copy_grpc_protector */
1330
+ nullptr, // create_zero_copy_grpc_protector
1412
1331
  ssl_handshaker_result_create_frame_protector,
1413
1332
  ssl_handshaker_result_get_unused_bytes,
1414
1333
  ssl_handshaker_result_destroy,
@@ -1416,33 +1335,36 @@ static const tsi_handshaker_result_vtable handshaker_result_vtable = {
1416
1335
 
1417
1336
  static tsi_result ssl_handshaker_result_create(
1418
1337
  tsi_ssl_handshaker* handshaker, unsigned char* unused_bytes,
1419
- size_t unused_bytes_size, tsi_handshaker_result** handshaker_result) {
1338
+ size_t unused_bytes_size, tsi_handshaker_result** handshaker_result,
1339
+ std::string* error) {
1420
1340
  if (handshaker == nullptr || handshaker_result == nullptr ||
1421
1341
  (unused_bytes_size > 0 && unused_bytes == nullptr)) {
1342
+ if (error != nullptr) *error = "invalid argument";
1422
1343
  return TSI_INVALID_ARGUMENT;
1423
1344
  }
1424
1345
  tsi_ssl_handshaker_result* result =
1425
1346
  grpc_core::Zalloc<tsi_ssl_handshaker_result>();
1426
1347
  result->base.vtable = &handshaker_result_vtable;
1427
- /* Transfer ownership of ssl and network_io to the handshaker result. */
1348
+ // Transfer ownership of ssl and network_io to the handshaker result.
1428
1349
  result->ssl = handshaker->ssl;
1429
1350
  handshaker->ssl = nullptr;
1430
1351
  result->network_io = handshaker->network_io;
1431
1352
  handshaker->network_io = nullptr;
1432
- /* Transfer ownership of |unused_bytes| to the handshaker result. */
1353
+ // Transfer ownership of |unused_bytes| to the handshaker result.
1433
1354
  result->unused_bytes = unused_bytes;
1434
1355
  result->unused_bytes_size = unused_bytes_size;
1435
1356
  *handshaker_result = &result->base;
1436
1357
  return TSI_OK;
1437
1358
  }
1438
1359
 
1439
- /* --- tsi_handshaker methods implementation. ---*/
1360
+ // --- tsi_handshaker methods implementation. ---
1440
1361
 
1441
1362
  static tsi_result ssl_handshaker_get_bytes_to_send_to_peer(
1442
- tsi_ssl_handshaker* impl, unsigned char* bytes, size_t* bytes_size) {
1363
+ tsi_ssl_handshaker* impl, unsigned char* bytes, size_t* bytes_size,
1364
+ std::string* error) {
1443
1365
  int bytes_read_from_ssl = 0;
1444
- if (bytes == nullptr || bytes_size == nullptr || *bytes_size == 0 ||
1445
- *bytes_size > INT_MAX) {
1366
+ if (bytes == nullptr || bytes_size == nullptr || *bytes_size > INT_MAX) {
1367
+ if (error != nullptr) *error = "invalid argument";
1446
1368
  return TSI_INVALID_ARGUMENT;
1447
1369
  }
1448
1370
  GPR_ASSERT(*bytes_size <= INT_MAX);
@@ -1451,6 +1373,7 @@ static tsi_result ssl_handshaker_get_bytes_to_send_to_peer(
1451
1373
  if (bytes_read_from_ssl < 0) {
1452
1374
  *bytes_size = 0;
1453
1375
  if (!BIO_should_retry(impl->network_io)) {
1376
+ if (error != nullptr) *error = "error reading from BIO";
1454
1377
  impl->result = TSI_INTERNAL_ERROR;
1455
1378
  return impl->result;
1456
1379
  } else {
@@ -1469,45 +1392,37 @@ static tsi_result ssl_handshaker_get_result(tsi_ssl_handshaker* impl) {
1469
1392
  return impl->result;
1470
1393
  }
1471
1394
 
1472
- static tsi_result ssl_handshaker_process_bytes_from_peer(
1473
- tsi_ssl_handshaker* impl, const unsigned char* bytes, size_t* bytes_size) {
1474
- int bytes_written_into_ssl_size = 0;
1475
- if (bytes == nullptr || bytes_size == nullptr || *bytes_size > INT_MAX) {
1476
- return TSI_INVALID_ARGUMENT;
1477
- }
1478
- GPR_ASSERT(*bytes_size <= INT_MAX);
1479
- bytes_written_into_ssl_size =
1480
- BIO_write(impl->network_io, bytes, static_cast<int>(*bytes_size));
1481
- if (bytes_written_into_ssl_size < 0) {
1482
- gpr_log(GPR_ERROR, "Could not write to memory BIO.");
1483
- impl->result = TSI_INTERNAL_ERROR;
1484
- return impl->result;
1485
- }
1486
- *bytes_size = static_cast<size_t>(bytes_written_into_ssl_size);
1487
-
1395
+ static tsi_result ssl_handshaker_do_handshake(tsi_ssl_handshaker* impl,
1396
+ std::string* error) {
1488
1397
  if (ssl_handshaker_get_result(impl) != TSI_HANDSHAKE_IN_PROGRESS) {
1489
1398
  impl->result = TSI_OK;
1490
1399
  return impl->result;
1491
1400
  } else {
1492
1401
  ERR_clear_error();
1493
- /* Get ready to get some bytes from SSL. */
1402
+ // Get ready to get some bytes from SSL.
1494
1403
  int ssl_result = SSL_do_handshake(impl->ssl);
1495
1404
  ssl_result = SSL_get_error(impl->ssl, ssl_result);
1496
1405
  switch (ssl_result) {
1497
1406
  case SSL_ERROR_WANT_READ:
1498
1407
  if (BIO_pending(impl->network_io) == 0) {
1499
- /* We need more data. */
1408
+ // We need more data.
1500
1409
  return TSI_INCOMPLETE_DATA;
1501
1410
  } else {
1502
1411
  return TSI_OK;
1503
1412
  }
1504
1413
  case SSL_ERROR_NONE:
1505
1414
  return TSI_OK;
1415
+ case SSL_ERROR_WANT_WRITE:
1416
+ return TSI_DRAIN_BUFFER;
1506
1417
  default: {
1507
1418
  char err_str[256];
1508
1419
  ERR_error_string_n(ERR_get_error(), err_str, sizeof(err_str));
1509
1420
  gpr_log(GPR_ERROR, "Handshake failed with fatal error %s: %s.",
1510
- ssl_error_string(ssl_result), err_str);
1421
+ grpc_core::SslErrorString(ssl_result), err_str);
1422
+ if (error != nullptr) {
1423
+ *error = absl::StrCat(grpc_core::SslErrorString(ssl_result), ": ",
1424
+ err_str);
1425
+ }
1511
1426
  impl->result = TSI_PROTOCOL_FAILURE;
1512
1427
  return impl->result;
1513
1428
  }
@@ -1515,6 +1430,27 @@ static tsi_result ssl_handshaker_process_bytes_from_peer(
1515
1430
  }
1516
1431
  }
1517
1432
 
1433
+ static tsi_result ssl_handshaker_process_bytes_from_peer(
1434
+ tsi_ssl_handshaker* impl, const unsigned char* bytes, size_t* bytes_size,
1435
+ std::string* error) {
1436
+ int bytes_written_into_ssl_size = 0;
1437
+ if (bytes == nullptr || bytes_size == nullptr || *bytes_size > INT_MAX) {
1438
+ if (error != nullptr) *error = "invalid argument";
1439
+ return TSI_INVALID_ARGUMENT;
1440
+ }
1441
+ GPR_ASSERT(*bytes_size <= INT_MAX);
1442
+ bytes_written_into_ssl_size =
1443
+ BIO_write(impl->network_io, bytes, static_cast<int>(*bytes_size));
1444
+ if (bytes_written_into_ssl_size < 0) {
1445
+ gpr_log(GPR_ERROR, "Could not write to memory BIO.");
1446
+ if (error != nullptr) *error = "could not write to memory BIO";
1447
+ impl->result = TSI_INTERNAL_ERROR;
1448
+ return impl->result;
1449
+ }
1450
+ *bytes_size = static_cast<size_t>(bytes_written_into_ssl_size);
1451
+ return ssl_handshaker_do_handshake(impl, error);
1452
+ }
1453
+
1518
1454
  static void ssl_handshaker_destroy(tsi_handshaker* self) {
1519
1455
  tsi_ssl_handshaker* impl = reinterpret_cast<tsi_ssl_handshaker*>(self);
1520
1456
  SSL_free(impl->ssl);
@@ -1528,9 +1464,11 @@ static void ssl_handshaker_destroy(tsi_handshaker* self) {
1528
1464
  // |bytes_remaining|.
1529
1465
  static tsi_result ssl_bytes_remaining(tsi_ssl_handshaker* impl,
1530
1466
  unsigned char** bytes_remaining,
1531
- size_t* bytes_remaining_size) {
1467
+ size_t* bytes_remaining_size,
1468
+ std::string* error) {
1532
1469
  if (impl == nullptr || bytes_remaining == nullptr ||
1533
1470
  bytes_remaining_size == nullptr) {
1471
+ if (error != nullptr) *error = "invalid argument";
1534
1472
  return TSI_INVALID_ARGUMENT;
1535
1473
  }
1536
1474
  // Atempt to read all of the bytes in SSL's read BIO. These bytes should
@@ -1548,38 +1486,29 @@ static tsi_result ssl_bytes_remaining(tsi_ssl_handshaker* impl,
1548
1486
  "Failed to read the expected number of bytes from SSL object.");
1549
1487
  gpr_free(*bytes_remaining);
1550
1488
  *bytes_remaining = nullptr;
1489
+ if (error != nullptr) {
1490
+ *error = "Failed to read the expected number of bytes from SSL object.";
1491
+ }
1551
1492
  return TSI_INTERNAL_ERROR;
1552
1493
  }
1553
1494
  *bytes_remaining_size = static_cast<size_t>(bytes_read);
1554
1495
  return TSI_OK;
1555
1496
  }
1556
1497
 
1557
- static tsi_result ssl_handshaker_next(
1558
- tsi_handshaker* self, const unsigned char* received_bytes,
1559
- size_t received_bytes_size, const unsigned char** bytes_to_send,
1560
- size_t* bytes_to_send_size, tsi_handshaker_result** handshaker_result,
1561
- tsi_handshaker_on_next_done_cb /*cb*/, void* /*user_data*/) {
1562
- /* Input sanity check. */
1563
- if ((received_bytes_size > 0 && received_bytes == nullptr) ||
1564
- bytes_to_send == nullptr || bytes_to_send_size == nullptr ||
1565
- handshaker_result == nullptr) {
1566
- return TSI_INVALID_ARGUMENT;
1567
- }
1568
- /* If there are received bytes, process them first. */
1498
+ // Write handshake data received from SSL to an unbound output buffer.
1499
+ // By doing that, we drain SSL bio buffer used to hold handshake data.
1500
+ // This API needs to be repeatedly called until all handshake data are
1501
+ // received from SSL.
1502
+ static tsi_result ssl_handshaker_write_output_buffer(tsi_handshaker* self,
1503
+ size_t* bytes_written,
1504
+ std::string* error) {
1569
1505
  tsi_ssl_handshaker* impl = reinterpret_cast<tsi_ssl_handshaker*>(self);
1570
1506
  tsi_result status = TSI_OK;
1571
- size_t bytes_consumed = received_bytes_size;
1572
- if (received_bytes_size > 0) {
1573
- status = ssl_handshaker_process_bytes_from_peer(impl, received_bytes,
1574
- &bytes_consumed);
1575
- if (status != TSI_OK) return status;
1576
- }
1577
- /* Get bytes to send to the peer, if available. */
1578
- size_t offset = 0;
1507
+ size_t offset = *bytes_written;
1579
1508
  do {
1580
1509
  size_t to_send_size = impl->outgoing_bytes_buffer_size - offset;
1581
1510
  status = ssl_handshaker_get_bytes_to_send_to_peer(
1582
- impl, impl->outgoing_bytes_buffer + offset, &to_send_size);
1511
+ impl, impl->outgoing_bytes_buffer + offset, &to_send_size, error);
1583
1512
  offset += to_send_size;
1584
1513
  if (status == TSI_INCOMPLETE_DATA) {
1585
1514
  impl->outgoing_bytes_buffer_size *= 2;
@@ -1587,10 +1516,46 @@ static tsi_result ssl_handshaker_next(
1587
1516
  impl->outgoing_bytes_buffer, impl->outgoing_bytes_buffer_size));
1588
1517
  }
1589
1518
  } while (status == TSI_INCOMPLETE_DATA);
1519
+ *bytes_written = offset;
1520
+ return status;
1521
+ }
1522
+
1523
+ static tsi_result ssl_handshaker_next(tsi_handshaker* self,
1524
+ const unsigned char* received_bytes,
1525
+ size_t received_bytes_size,
1526
+ const unsigned char** bytes_to_send,
1527
+ size_t* bytes_to_send_size,
1528
+ tsi_handshaker_result** handshaker_result,
1529
+ tsi_handshaker_on_next_done_cb /*cb*/,
1530
+ void* /*user_data*/, std::string* error) {
1531
+ // Input sanity check.
1532
+ if ((received_bytes_size > 0 && received_bytes == nullptr) ||
1533
+ bytes_to_send == nullptr || bytes_to_send_size == nullptr ||
1534
+ handshaker_result == nullptr) {
1535
+ if (error != nullptr) *error = "invalid argument";
1536
+ return TSI_INVALID_ARGUMENT;
1537
+ }
1538
+ // If there are received bytes, process them first.
1539
+ tsi_ssl_handshaker* impl = reinterpret_cast<tsi_ssl_handshaker*>(self);
1540
+ tsi_result status = TSI_OK;
1541
+ size_t bytes_consumed = received_bytes_size;
1542
+ size_t bytes_written = 0;
1543
+ if (received_bytes_size > 0) {
1544
+ status = ssl_handshaker_process_bytes_from_peer(impl, received_bytes,
1545
+ &bytes_consumed, error);
1546
+ while (status == TSI_DRAIN_BUFFER) {
1547
+ status = ssl_handshaker_write_output_buffer(self, &bytes_written, error);
1548
+ if (status != TSI_OK) return status;
1549
+ status = ssl_handshaker_do_handshake(impl, error);
1550
+ }
1551
+ }
1552
+ if (status != TSI_OK) return status;
1553
+ // Get bytes to send to the peer, if available.
1554
+ status = ssl_handshaker_write_output_buffer(self, &bytes_written, error);
1590
1555
  if (status != TSI_OK) return status;
1591
1556
  *bytes_to_send = impl->outgoing_bytes_buffer;
1592
- *bytes_to_send_size = offset;
1593
- /* If handshake completes, create tsi_handshaker_result. */
1557
+ *bytes_to_send_size = bytes_written;
1558
+ // If handshake completes, create tsi_handshaker_result.
1594
1559
  if (ssl_handshaker_get_result(impl) == TSI_HANDSHAKE_IN_PROGRESS) {
1595
1560
  *handshaker_result = nullptr;
1596
1561
  } else {
@@ -1600,18 +1565,20 @@ static tsi_result ssl_handshaker_next(
1600
1565
  // peer that must be processed.
1601
1566
  unsigned char* unused_bytes = nullptr;
1602
1567
  size_t unused_bytes_size = 0;
1603
- status = ssl_bytes_remaining(impl, &unused_bytes, &unused_bytes_size);
1568
+ status =
1569
+ ssl_bytes_remaining(impl, &unused_bytes, &unused_bytes_size, error);
1604
1570
  if (status != TSI_OK) return status;
1605
1571
  if (unused_bytes_size > received_bytes_size) {
1606
1572
  gpr_log(GPR_ERROR, "More unused bytes than received bytes.");
1607
1573
  gpr_free(unused_bytes);
1574
+ if (error != nullptr) *error = "More unused bytes than received bytes.";
1608
1575
  return TSI_INTERNAL_ERROR;
1609
1576
  }
1610
1577
  status = ssl_handshaker_result_create(impl, unused_bytes, unused_bytes_size,
1611
- handshaker_result);
1578
+ handshaker_result, error);
1612
1579
  if (status == TSI_OK) {
1613
- /* Indicates that the handshake has completed and that a handshaker_result
1614
- * has been created. */
1580
+ // Indicates that the handshake has completed and that a handshaker_result
1581
+ // has been created.
1615
1582
  self->handshaker_result_created = true;
1616
1583
  }
1617
1584
  }
@@ -1619,17 +1586,17 @@ static tsi_result ssl_handshaker_next(
1619
1586
  }
1620
1587
 
1621
1588
  static const tsi_handshaker_vtable handshaker_vtable = {
1622
- nullptr, /* get_bytes_to_send_to_peer -- deprecated */
1623
- nullptr, /* process_bytes_from_peer -- deprecated */
1624
- nullptr, /* get_result -- deprecated */
1625
- nullptr, /* extract_peer -- deprecated */
1626
- nullptr, /* create_frame_protector -- deprecated */
1589
+ nullptr, // get_bytes_to_send_to_peer -- deprecated
1590
+ nullptr, // process_bytes_from_peer -- deprecated
1591
+ nullptr, // get_result -- deprecated
1592
+ nullptr, // extract_peer -- deprecated
1593
+ nullptr, // create_frame_protector -- deprecated
1627
1594
  ssl_handshaker_destroy,
1628
1595
  ssl_handshaker_next,
1629
- nullptr, /* shutdown */
1596
+ nullptr, // shutdown
1630
1597
  };
1631
1598
 
1632
- /* --- tsi_ssl_handshaker_factory common methods. --- */
1599
+ // --- tsi_ssl_handshaker_factory common methods. ---
1633
1600
 
1634
1601
  static void tsi_ssl_handshaker_resume_session(
1635
1602
  SSL* ssl, tsi::SslSessionLRUCache* session_cache) {
@@ -1646,6 +1613,8 @@ static void tsi_ssl_handshaker_resume_session(
1646
1613
 
1647
1614
  static tsi_result create_tsi_ssl_handshaker(SSL_CTX* ctx, int is_client,
1648
1615
  const char* server_name_indication,
1616
+ size_t network_bio_buf_size,
1617
+ size_t ssl_bio_buf_size,
1649
1618
  tsi_ssl_handshaker_factory* factory,
1650
1619
  tsi_handshaker** handshaker) {
1651
1620
  SSL* ssl = SSL_new(ctx);
@@ -1662,7 +1631,8 @@ static tsi_result create_tsi_ssl_handshaker(SSL_CTX* ctx, int is_client,
1662
1631
  }
1663
1632
  SSL_set_info_callback(ssl, ssl_info_callback);
1664
1633
 
1665
- if (!BIO_new_bio_pair(&network_io, 0, &ssl_io, 0)) {
1634
+ if (!BIO_new_bio_pair(&network_io, network_bio_buf_size, &ssl_io,
1635
+ ssl_bio_buf_size)) {
1666
1636
  gpr_log(GPR_ERROR, "BIO_new_bio_pair failed.");
1667
1637
  SSL_free(ssl);
1668
1638
  return TSI_OUT_OF_RESOURCES;
@@ -1692,7 +1662,7 @@ static tsi_result create_tsi_ssl_handshaker(SSL_CTX* ctx, int is_client,
1692
1662
  if (ssl_result != SSL_ERROR_WANT_READ) {
1693
1663
  gpr_log(GPR_ERROR,
1694
1664
  "Unexpected error received from first SSL_do_handshake call: %s",
1695
- ssl_error_string(ssl_result));
1665
+ grpc_core::SslErrorString(ssl_result));
1696
1666
  SSL_free(ssl);
1697
1667
  BIO_free(network_io);
1698
1668
  return TSI_INTERNAL_ERROR;
@@ -1743,14 +1713,15 @@ static int select_protocol_list(const unsigned char** out,
1743
1713
  return SSL_TLSEXT_ERR_NOACK;
1744
1714
  }
1745
1715
 
1746
- /* --- tsi_ssl_client_handshaker_factory methods implementation. --- */
1716
+ // --- tsi_ssl_client_handshaker_factory methods implementation. ---
1747
1717
 
1748
1718
  tsi_result tsi_ssl_client_handshaker_factory_create_handshaker(
1749
1719
  tsi_ssl_client_handshaker_factory* factory,
1750
- const char* server_name_indication, tsi_handshaker** handshaker) {
1751
- return create_tsi_ssl_handshaker(factory->ssl_context, 1,
1752
- server_name_indication, &factory->base,
1753
- handshaker);
1720
+ const char* server_name_indication, size_t network_bio_buf_size,
1721
+ size_t ssl_bio_buf_size, tsi_handshaker** handshaker) {
1722
+ return create_tsi_ssl_handshaker(
1723
+ factory->ssl_context, 1, server_name_indication, network_bio_buf_size,
1724
+ ssl_bio_buf_size, &factory->base, handshaker);
1754
1725
  }
1755
1726
 
1756
1727
  void tsi_ssl_client_handshaker_factory_unref(
@@ -1781,14 +1752,16 @@ static int client_handshaker_factory_npn_callback(
1781
1752
  factory->alpn_protocol_list_length, in, inlen);
1782
1753
  }
1783
1754
 
1784
- /* --- tsi_ssl_server_handshaker_factory methods implementation. --- */
1755
+ // --- tsi_ssl_server_handshaker_factory methods implementation. ---
1785
1756
 
1786
1757
  tsi_result tsi_ssl_server_handshaker_factory_create_handshaker(
1787
- tsi_ssl_server_handshaker_factory* factory, tsi_handshaker** handshaker) {
1758
+ tsi_ssl_server_handshaker_factory* factory, size_t network_bio_buf_size,
1759
+ size_t ssl_bio_buf_size, tsi_handshaker** handshaker) {
1788
1760
  if (factory->ssl_context_count == 0) return TSI_INVALID_ARGUMENT;
1789
- /* Create the handshaker with the first context. We will switch if needed
1790
- because of SNI in ssl_server_handshaker_factory_servername_callback. */
1761
+ // Create the handshaker with the first context. We will switch if needed
1762
+ // because of SNI in ssl_server_handshaker_factory_servername_callback.
1791
1763
  return create_tsi_ssl_handshaker(factory->ssl_contexts[0], 0, nullptr,
1764
+ network_bio_buf_size, ssl_bio_buf_size,
1792
1765
  &factory->base, handshaker);
1793
1766
  }
1794
1767
 
@@ -1823,7 +1796,7 @@ static int does_entry_match_name(absl::string_view entry,
1823
1796
  absl::string_view name) {
1824
1797
  if (entry.empty()) return 0;
1825
1798
 
1826
- /* Take care of '.' terminations. */
1799
+ // Take care of '.' terminations.
1827
1800
  if (name.back() == '.') {
1828
1801
  name.remove_suffix(1);
1829
1802
  }
@@ -1833,12 +1806,12 @@ static int does_entry_match_name(absl::string_view entry,
1833
1806
  }
1834
1807
 
1835
1808
  if (absl::EqualsIgnoreCase(name, entry)) {
1836
- return 1; /* Perfect match. */
1809
+ return 1; // Perfect match.
1837
1810
  }
1838
1811
  if (entry.front() != '*') return 0;
1839
1812
 
1840
- /* Wildchar subdomain matching. */
1841
- if (entry.size() < 3 || entry[1] != '.') { /* At least *.x */
1813
+ // Wildchar subdomain matching.
1814
+ if (entry.size() < 3 || entry[1] != '.') { // At least *.x
1842
1815
  gpr_log(GPR_ERROR, "Invalid wildchar entry.");
1843
1816
  return 0;
1844
1817
  }
@@ -1846,8 +1819,8 @@ static int does_entry_match_name(absl::string_view entry,
1846
1819
  if (name_subdomain_pos == absl::string_view::npos) return 0;
1847
1820
  if (name_subdomain_pos >= name.size() - 2) return 0;
1848
1821
  absl::string_view name_subdomain =
1849
- name.substr(name_subdomain_pos + 1); /* Starts after the dot. */
1850
- entry.remove_prefix(2); /* Remove *. */
1822
+ name.substr(name_subdomain_pos + 1); // Starts after the dot.
1823
+ entry.remove_prefix(2); // Remove *.
1851
1824
  size_t dot = name_subdomain.find('.');
1852
1825
  if (dot == absl::string_view::npos || dot == name_subdomain.size() - 1) {
1853
1826
  gpr_log(GPR_ERROR, "Invalid toplevel subdomain: %s",
@@ -1892,7 +1865,7 @@ static int server_handshaker_factory_alpn_callback(
1892
1865
  factory->alpn_protocol_list,
1893
1866
  factory->alpn_protocol_list_length);
1894
1867
  }
1895
- #endif /* TSI_OPENSSL_ALPN_SUPPORT */
1868
+ #endif // TSI_OPENSSL_ALPN_SUPPORT
1896
1869
 
1897
1870
  static int server_handshaker_factory_npn_advertised_callback(
1898
1871
  SSL* /*ssl*/, const unsigned char** out, unsigned int* outlen, void* arg) {
@@ -1939,15 +1912,7 @@ static void ssl_keylogging_callback(const SSL* ssl, const char* info) {
1939
1912
  factory->key_logger->LogSessionKeys(ssl_context, info);
1940
1913
  }
1941
1914
 
1942
- static int verify_cb(int ok, X509_STORE_CTX* ctx) {
1943
- int cert_error = X509_STORE_CTX_get_error(ctx);
1944
- if (cert_error != 0) {
1945
- gpr_log(GPR_ERROR, "Certificate verify failed with code %d", cert_error);
1946
- }
1947
- return ok;
1948
- }
1949
-
1950
- /* --- tsi_ssl_handshaker_factory constructors. --- */
1915
+ // --- tsi_ssl_handshaker_factory constructors. ---
1951
1916
 
1952
1917
  static tsi_ssl_handshaker_factory_vtable client_handshaker_factory_vtable = {
1953
1918
  tsi_ssl_client_handshaker_factory_destroy};
@@ -1988,7 +1953,7 @@ tsi_result tsi_create_ssl_client_handshaker_factory_with_options(
1988
1953
  ssl_context = SSL_CTX_new(TLSv1_2_method());
1989
1954
  #endif
1990
1955
  if (ssl_context == nullptr) {
1991
- log_ssl_error_stack();
1956
+ grpc_core::LogSslErrorStack();
1992
1957
  gpr_log(GPR_ERROR, "Could not create ssl context.");
1993
1958
  return TSI_INVALID_ARGUMENT;
1994
1959
  }
@@ -2068,7 +2033,7 @@ tsi_result tsi_create_ssl_client_handshaker_factory_with_options(
2068
2033
  result = TSI_INVALID_ARGUMENT;
2069
2034
  break;
2070
2035
  }
2071
- #endif /* TSI_OPENSSL_ALPN_SUPPORT */
2036
+ #endif // TSI_OPENSSL_ALPN_SUPPORT
2072
2037
  SSL_CTX_set_next_proto_select_cb(
2073
2038
  ssl_context, client_handshaker_factory_npn_callback, impl);
2074
2039
  }
@@ -2080,7 +2045,7 @@ tsi_result tsi_create_ssl_client_handshaker_factory_with_options(
2080
2045
  if (options->skip_server_certificate_verification) {
2081
2046
  SSL_CTX_set_verify(ssl_context, SSL_VERIFY_PEER, NullVerifyCallback);
2082
2047
  } else {
2083
- SSL_CTX_set_verify(ssl_context, SSL_VERIFY_PEER, nullptr);
2048
+ SSL_CTX_set_verify(ssl_context, SSL_VERIFY_PEER, RootCertExtractCallback);
2084
2049
  }
2085
2050
 
2086
2051
  #if OPENSSL_VERSION_NUMBER >= 0x10100000
@@ -2193,7 +2158,7 @@ tsi_result tsi_create_ssl_server_handshaker_factory_with_options(
2193
2158
  impl->ssl_contexts[i] = SSL_CTX_new(TLSv1_2_method());
2194
2159
  #endif
2195
2160
  if (impl->ssl_contexts[i] == nullptr) {
2196
- log_ssl_error_stack();
2161
+ grpc_core::LogSslErrorStack();
2197
2162
  gpr_log(GPR_ERROR, "Could not create ssl context.");
2198
2163
  result = TSI_OUT_OF_RESOURCES;
2199
2164
  break;
@@ -2252,7 +2217,8 @@ tsi_result tsi_create_ssl_server_handshaker_factory_with_options(
2252
2217
  NullVerifyCallback);
2253
2218
  break;
2254
2219
  case TSI_REQUEST_CLIENT_CERTIFICATE_AND_VERIFY:
2255
- SSL_CTX_set_verify(impl->ssl_contexts[i], SSL_VERIFY_PEER, nullptr);
2220
+ SSL_CTX_set_verify(impl->ssl_contexts[i], SSL_VERIFY_PEER,
2221
+ RootCertExtractCallback);
2256
2222
  break;
2257
2223
  case TSI_REQUEST_AND_REQUIRE_CLIENT_CERTIFICATE_BUT_DONT_VERIFY:
2258
2224
  SSL_CTX_set_verify(impl->ssl_contexts[i],
@@ -2262,7 +2228,7 @@ tsi_result tsi_create_ssl_server_handshaker_factory_with_options(
2262
2228
  case TSI_REQUEST_AND_REQUIRE_CLIENT_CERTIFICATE_AND_VERIFY:
2263
2229
  SSL_CTX_set_verify(impl->ssl_contexts[i],
2264
2230
  SSL_VERIFY_PEER | SSL_VERIFY_FAIL_IF_NO_PEER_CERT,
2265
- nullptr);
2231
+ RootCertExtractCallback);
2266
2232
  break;
2267
2233
  }
2268
2234
 
@@ -2296,13 +2262,13 @@ tsi_result tsi_create_ssl_server_handshaker_factory_with_options(
2296
2262
  #if TSI_OPENSSL_ALPN_SUPPORT
2297
2263
  SSL_CTX_set_alpn_select_cb(impl->ssl_contexts[i],
2298
2264
  server_handshaker_factory_alpn_callback, impl);
2299
- #endif /* TSI_OPENSSL_ALPN_SUPPORT */
2265
+ #endif // TSI_OPENSSL_ALPN_SUPPORT
2300
2266
  SSL_CTX_set_next_protos_advertised_cb(
2301
2267
  impl->ssl_contexts[i],
2302
2268
  server_handshaker_factory_npn_advertised_callback, impl);
2303
2269
 
2304
2270
  #if OPENSSL_VERSION_NUMBER >= 0x10101000 && !defined(LIBRESSL_VERSION_NUMBER)
2305
- /* Register factory at index */
2271
+ // Register factory at index
2306
2272
  if (options->key_logger != nullptr) {
2307
2273
  // Need to set factory at g_ssl_ctx_ex_factory_index
2308
2274
  SSL_CTX_set_ex_data(impl->ssl_contexts[i], g_ssl_ctx_ex_factory_index,
@@ -2326,7 +2292,7 @@ tsi_result tsi_create_ssl_server_handshaker_factory_with_options(
2326
2292
  return TSI_OK;
2327
2293
  }
2328
2294
 
2329
- /* --- tsi_ssl utils. --- */
2295
+ // --- tsi_ssl utils. ---
2330
2296
 
2331
2297
  int tsi_ssl_peer_matches_name(const tsi_peer* peer, absl::string_view name) {
2332
2298
  size_t i = 0;
@@ -2334,7 +2300,7 @@ int tsi_ssl_peer_matches_name(const tsi_peer* peer, absl::string_view name) {
2334
2300
  const tsi_peer_property* cn_property = nullptr;
2335
2301
  int like_ip = looks_like_ip_address(name);
2336
2302
 
2337
- /* Check the SAN first. */
2303
+ // Check the SAN first.
2338
2304
  for (i = 0; i < peer->property_count; i++) {
2339
2305
  const tsi_peer_property* property = &peer->properties[i];
2340
2306
  if (property->name == nullptr) continue;
@@ -2346,7 +2312,7 @@ int tsi_ssl_peer_matches_name(const tsi_peer* peer, absl::string_view name) {
2346
2312
  if (!like_ip && does_entry_match_name(entry, name)) {
2347
2313
  return 1;
2348
2314
  } else if (like_ip && name == entry) {
2349
- /* IP Addresses are exact matches only. */
2315
+ // IP Addresses are exact matches only.
2350
2316
  return 1;
2351
2317
  }
2352
2318
  } else if (strcmp(property->name,
@@ -2355,7 +2321,7 @@ int tsi_ssl_peer_matches_name(const tsi_peer* peer, absl::string_view name) {
2355
2321
  }
2356
2322
  }
2357
2323
 
2358
- /* If there's no SAN, try the CN, but only if its not like an IP Address */
2324
+ // If there's no SAN, try the CN, but only if its not like an IP Address
2359
2325
  if (san_count == 0 && cn_property != nullptr && !like_ip) {
2360
2326
  if (does_entry_match_name(absl::string_view(cn_property->value.data,
2361
2327
  cn_property->value.length),
@@ -2364,10 +2330,10 @@ int tsi_ssl_peer_matches_name(const tsi_peer* peer, absl::string_view name) {
2364
2330
  }
2365
2331
  }
2366
2332
 
2367
- return 0; /* Not found. */
2333
+ return 0; // Not found.
2368
2334
  }
2369
2335
 
2370
- /* --- Testing support. --- */
2336
+ // --- Testing support. ---
2371
2337
  const tsi_ssl_handshaker_factory_vtable* tsi_ssl_handshaker_factory_swap_vtable(
2372
2338
  tsi_ssl_handshaker_factory* factory,
2373
2339
  tsi_ssl_handshaker_factory_vtable* new_vtable) {