grpc 1.33.0.pre1 → 1.37.0.pre1

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 (1106) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +1075 -2814
  3. data/etc/roots.pem +257 -573
  4. data/include/grpc/compression.h +1 -1
  5. data/include/grpc/grpc.h +29 -2
  6. data/include/grpc/grpc_security.h +215 -175
  7. data/include/grpc/impl/codegen/atm_windows.h +4 -0
  8. data/include/grpc/impl/codegen/byte_buffer.h +1 -1
  9. data/include/grpc/impl/codegen/grpc_types.h +10 -3
  10. data/include/grpc/impl/codegen/log.h +0 -2
  11. data/include/grpc/impl/codegen/port_platform.h +24 -55
  12. data/include/grpc/impl/codegen/sync_windows.h +4 -0
  13. data/include/grpc/slice_buffer.h +3 -3
  14. data/include/grpc/support/sync.h +3 -3
  15. data/include/grpc/support/time.h +7 -7
  16. data/src/core/ext/filters/client_channel/backend_metric.cc +2 -4
  17. data/src/core/ext/filters/client_channel/client_channel.cc +2829 -1588
  18. data/src/core/ext/filters/client_channel/client_channel.h +0 -6
  19. data/src/core/ext/filters/client_channel/client_channel_factory.h +2 -1
  20. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +1 -1
  21. data/src/core/ext/filters/client_channel/config_selector.h +15 -4
  22. data/src/core/ext/filters/client_channel/dynamic_filters.cc +191 -0
  23. data/src/core/ext/filters/client_channel/dynamic_filters.h +99 -0
  24. data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +24 -142
  25. data/src/core/ext/filters/client_channel/global_subchannel_pool.h +15 -10
  26. data/src/core/ext/filters/client_channel/health/health_check_client.cc +10 -7
  27. data/src/core/ext/filters/client_channel/health/health_check_client.h +4 -4
  28. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +7 -8
  29. data/src/core/ext/filters/client_channel/http_proxy.cc +21 -20
  30. data/src/core/ext/filters/client_channel/lb_policy.cc +9 -2
  31. data/src/core/ext/filters/client_channel/lb_policy.h +5 -6
  32. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +1 -1
  33. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +1 -1
  34. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +115 -106
  35. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h +1 -2
  36. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +1 -2
  37. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +3 -1
  38. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +3 -3
  39. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +1 -1
  40. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +3 -3
  41. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +55 -23
  42. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +23 -0
  43. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +27 -0
  44. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +2 -2
  45. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +8 -5
  46. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +3 -3
  47. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +370 -109
  48. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +52 -24
  49. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_args.h +29 -0
  50. data/src/core/ext/filters/client_channel/lb_policy/xds/{eds_drop.cc → xds_cluster_impl.cc} +332 -108
  51. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +22 -27
  52. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +1384 -0
  53. data/src/core/ext/filters/client_channel/local_subchannel_pool.cc +27 -67
  54. data/src/core/ext/filters/client_channel/local_subchannel_pool.h +10 -9
  55. data/src/core/ext/filters/client_channel/resolver.cc +7 -5
  56. data/src/core/ext/filters/client_channel/resolver.h +5 -13
  57. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +42 -58
  58. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +1 -32
  59. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +5 -5
  60. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +3 -1
  61. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +444 -22
  62. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +5 -0
  63. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +22 -23
  64. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +21 -18
  65. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +1 -1
  66. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +377 -0
  67. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +37 -30
  68. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +342 -133
  69. data/src/core/ext/filters/client_channel/resolver_factory.h +6 -6
  70. data/src/core/ext/filters/client_channel/resolver_registry.cc +40 -39
  71. data/src/core/ext/filters/client_channel/resolver_registry.h +2 -2
  72. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +24 -38
  73. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +8 -8
  74. data/src/core/ext/filters/client_channel/retry_throttle.cc +5 -3
  75. data/src/core/ext/filters/client_channel/retry_throttle.h +4 -2
  76. data/src/core/ext/filters/client_channel/server_address.cc +9 -0
  77. data/src/core/ext/filters/client_channel/server_address.h +31 -4
  78. data/src/core/ext/filters/client_channel/service_config.cc +3 -1
  79. data/src/core/ext/filters/client_channel/service_config.h +1 -1
  80. data/src/core/ext/filters/client_channel/service_config_call_data.h +19 -1
  81. data/src/core/ext/filters/client_channel/subchannel.cc +117 -207
  82. data/src/core/ext/filters/client_channel/subchannel.h +75 -113
  83. data/src/core/ext/filters/client_channel/subchannel_interface.h +7 -15
  84. data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +16 -2
  85. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +16 -10
  86. data/src/core/ext/filters/client_idle/client_idle_filter.cc +1 -1
  87. data/src/core/ext/filters/deadline/deadline_filter.cc +87 -79
  88. data/src/core/ext/filters/deadline/deadline_filter.h +7 -11
  89. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +495 -0
  90. data/src/core/ext/filters/fault_injection/fault_injection_filter.h +39 -0
  91. data/src/core/ext/filters/fault_injection/service_config_parser.cc +189 -0
  92. data/src/core/ext/filters/fault_injection/service_config_parser.h +85 -0
  93. data/src/core/ext/filters/http/client/http_client_filter.cc +1 -1
  94. data/src/core/ext/filters/http/client_authority_filter.cc +6 -6
  95. data/src/core/ext/filters/http/http_filters_plugin.cc +6 -3
  96. data/src/core/ext/filters/http/server/http_server_filter.cc +3 -3
  97. data/src/core/ext/filters/max_age/max_age_filter.cc +36 -33
  98. data/src/core/ext/filters/message_size/message_size_filter.cc +1 -1
  99. data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +1 -1
  100. data/src/core/ext/filters/workarounds/workaround_utils.cc +1 -1
  101. data/src/core/ext/transport/chttp2/client/authority.cc +3 -3
  102. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +2 -2
  103. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +1 -1
  104. data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +23 -10
  105. data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc +21 -10
  106. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +29 -16
  107. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +629 -211
  108. data/src/core/ext/transport/chttp2/server/chttp2_server.h +11 -2
  109. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +11 -1
  110. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +12 -5
  111. data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +62 -18
  112. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +7 -7
  113. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +50 -39
  114. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +12 -1
  115. data/src/core/ext/transport/chttp2/transport/flow_control.h +3 -3
  116. data/src/core/ext/transport/chttp2/transport/frame_data.cc +5 -1
  117. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +2 -1
  118. data/src/core/ext/transport/chttp2/transport/frame_settings.h +2 -1
  119. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +6 -6
  120. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +1 -1
  121. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +12 -8
  122. data/src/core/ext/transport/chttp2/transport/internal.h +1 -1
  123. data/src/core/ext/transport/chttp2/transport/parsing.cc +2 -1
  124. data/src/core/ext/transport/chttp2/transport/writing.cc +2 -3
  125. data/src/core/ext/transport/inproc/inproc_transport.cc +42 -8
  126. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.c +406 -0
  127. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.h +1459 -0
  128. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h +1 -0
  129. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.c +1 -1
  130. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +7 -0
  131. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +27 -28
  132. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +139 -40
  133. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.c +350 -0
  134. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +1348 -0
  135. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +13 -13
  136. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +44 -17
  137. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +119 -124
  138. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +450 -284
  139. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.c +3 -3
  140. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +13 -5
  141. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c +24 -23
  142. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +62 -21
  143. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +21 -21
  144. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +88 -39
  145. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.c +4 -4
  146. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +15 -6
  147. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +69 -45
  148. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +275 -78
  149. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +19 -19
  150. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +80 -43
  151. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +1 -1
  152. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +7 -0
  153. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.c +7 -7
  154. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.h +27 -11
  155. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +30 -30
  156. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +136 -49
  157. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +41 -41
  158. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +172 -89
  159. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.c +4 -4
  160. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +17 -9
  161. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +53 -47
  162. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +188 -78
  163. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +1 -2
  164. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +7 -0
  165. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.c +2 -2
  166. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +9 -2
  167. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +11 -5
  168. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.h +48 -7
  169. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +13 -14
  170. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +59 -36
  171. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +16 -16
  172. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +61 -29
  173. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +26 -26
  174. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +101 -66
  175. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.c +2 -2
  176. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +11 -3
  177. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +34 -32
  178. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +151 -61
  179. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +33 -29
  180. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +138 -54
  181. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +2 -3
  182. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +13 -0
  183. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.c +144 -0
  184. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.h +488 -0
  185. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.c +141 -0
  186. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.h +452 -0
  187. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +16 -16
  188. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +81 -35
  189. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +15 -13
  190. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +70 -37
  191. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +257 -216
  192. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +995 -495
  193. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +5 -5
  194. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +26 -6
  195. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +3 -4
  196. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +17 -3
  197. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.c +29 -0
  198. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.h +67 -0
  199. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.c +79 -0
  200. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.h +268 -0
  201. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c +78 -0
  202. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.h +281 -0
  203. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c +41 -0
  204. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h +113 -0
  205. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +96 -98
  206. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +378 -226
  207. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.c +0 -1
  208. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.h +1 -0
  209. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +28 -25
  210. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +124 -53
  211. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +9 -12
  212. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +29 -24
  213. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +32 -33
  214. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +118 -67
  215. data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.c +1 -1
  216. data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.h +7 -0
  217. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.c +1 -1
  218. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h +7 -0
  219. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +51 -44
  220. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +179 -129
  221. data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.c +1 -4
  222. data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.h +7 -0
  223. data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.c +1 -4
  224. data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.h +7 -0
  225. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +7 -8
  226. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +31 -16
  227. data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.c +1 -3
  228. data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.h +7 -0
  229. data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.c +1 -1
  230. data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.h +7 -0
  231. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.c +93 -0
  232. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.h +323 -0
  233. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +5 -5
  234. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +25 -11
  235. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.c +36 -0
  236. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.h +90 -0
  237. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +1 -1
  238. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +7 -0
  239. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +1 -1
  240. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +7 -0
  241. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +6 -6
  242. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +29 -8
  243. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +2 -3
  244. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +16 -3
  245. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.c +46 -0
  246. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.h +124 -0
  247. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +3 -3
  248. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +19 -0
  249. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +7 -7
  250. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +46 -3
  251. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +8 -8
  252. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +41 -8
  253. data/src/core/ext/upb-generated/envoy/type/v3/http.upb.h +1 -0
  254. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.c +3 -3
  255. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +15 -2
  256. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.c +3 -3
  257. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +19 -0
  258. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.c +1 -1
  259. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +7 -0
  260. data/src/core/ext/upb-generated/google/api/annotations.upb.h +1 -0
  261. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.c +34 -34
  262. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.h +149 -72
  263. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +54 -37
  264. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +171 -59
  265. data/src/core/ext/upb-generated/google/api/http.upb.c +3 -3
  266. data/src/core/ext/upb-generated/google/api/http.upb.h +25 -6
  267. data/src/core/ext/upb-generated/google/protobuf/any.upb.c +1 -1
  268. data/src/core/ext/upb-generated/google/protobuf/any.upb.h +7 -0
  269. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +90 -90
  270. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +455 -292
  271. data/src/core/ext/upb-generated/google/protobuf/duration.upb.c +1 -1
  272. data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +7 -0
  273. data/src/core/ext/upb-generated/google/protobuf/empty.upb.c +1 -1
  274. data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +7 -0
  275. data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +4 -4
  276. data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +22 -3
  277. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.c +1 -1
  278. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +7 -0
  279. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.c +9 -9
  280. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +55 -0
  281. data/src/core/ext/upb-generated/google/rpc/status.upb.c +1 -1
  282. data/src/core/ext/upb-generated/google/rpc/status.upb.h +10 -3
  283. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c +4 -4
  284. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +11 -3
  285. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +41 -41
  286. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +149 -76
  287. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c +5 -5
  288. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +21 -6
  289. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c +2 -2
  290. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +13 -0
  291. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c +17 -17
  292. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +82 -25
  293. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.c +3 -3
  294. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +19 -0
  295. data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +1 -1
  296. data/src/core/ext/upb-generated/udpa/annotations/security.upb.h +7 -0
  297. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h +1 -0
  298. data/src/core/ext/upb-generated/udpa/annotations/status.upb.c +2 -2
  299. data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +9 -2
  300. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +1 -1
  301. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +7 -0
  302. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.c +3 -3
  303. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.h +7 -0
  304. data/src/core/ext/upb-generated/udpa/type/v1/typed_struct.upb.c +33 -0
  305. data/src/core/ext/upb-generated/udpa/type/v1/typed_struct.upb.h +77 -0
  306. data/src/core/ext/upb-generated/validate/validate.upb.c +64 -64
  307. data/src/core/ext/upb-generated/validate/validate.upb.h +296 -157
  308. data/src/core/ext/upb-generated/{udpa/core/v1 → xds/core/v3}/authority.upb.c +6 -6
  309. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.h +60 -0
  310. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.c +52 -0
  311. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.h +143 -0
  312. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +42 -0
  313. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.h +84 -0
  314. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.c +36 -0
  315. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.h +94 -0
  316. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +54 -0
  317. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.h +166 -0
  318. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +36 -0
  319. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.h +85 -0
  320. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.c +354 -0
  321. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.h +140 -0
  322. data/src/core/ext/upbdefs-generated/envoy/annotations/deprecation.upbdefs.c +38 -0
  323. data/src/core/ext/upbdefs-generated/envoy/annotations/deprecation.upbdefs.h +30 -0
  324. data/src/core/ext/upbdefs-generated/envoy/annotations/resource.upbdefs.c +41 -0
  325. data/src/core/ext/upbdefs-generated/envoy/annotations/resource.upbdefs.h +35 -0
  326. data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.c +251 -0
  327. data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.h +105 -0
  328. data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.c +383 -0
  329. data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.h +115 -0
  330. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.c +100 -0
  331. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.h +45 -0
  332. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +543 -0
  333. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.h +145 -0
  334. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/filter.upbdefs.c +53 -0
  335. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/filter.upbdefs.h +35 -0
  336. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.c +136 -0
  337. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.h +35 -0
  338. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.c +127 -0
  339. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.h +65 -0
  340. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/backoff.upbdefs.c +56 -0
  341. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/backoff.upbdefs.h +35 -0
  342. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +272 -0
  343. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.h +135 -0
  344. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.c +143 -0
  345. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.h +55 -0
  346. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/event_service_config.upbdefs.c +56 -0
  347. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/event_service_config.upbdefs.h +35 -0
  348. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.c +66 -0
  349. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.h +40 -0
  350. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_service.upbdefs.c +263 -0
  351. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_service.upbdefs.h +100 -0
  352. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.c +233 -0
  353. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.h +70 -0
  354. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/http_uri.upbdefs.c +56 -0
  355. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/http_uri.upbdefs.h +35 -0
  356. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +231 -0
  357. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.h +85 -0
  358. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.c +43 -0
  359. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.h +35 -0
  360. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.c +59 -0
  361. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.h +35 -0
  362. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.c +68 -0
  363. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.h +35 -0
  364. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.c +107 -0
  365. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.h +50 -0
  366. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.c +113 -0
  367. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.h +50 -0
  368. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/load_report.upbdefs.c +146 -0
  369. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/load_report.upbdefs.h +55 -0
  370. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/api_listener.upbdefs.c +50 -0
  371. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/api_listener.upbdefs.h +35 -0
  372. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.c +195 -0
  373. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.h +55 -0
  374. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.c +193 -0
  375. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.h +65 -0
  376. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.c +59 -0
  377. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.h +40 -0
  378. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/stats.upbdefs.c +141 -0
  379. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/stats.upbdefs.h +70 -0
  380. data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.c +141 -0
  381. data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.h +70 -0
  382. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.c +101 -0
  383. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.h +40 -0
  384. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +944 -0
  385. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.h +290 -0
  386. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/scoped_route.upbdefs.c +71 -0
  387. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/scoped_route.upbdefs.h +45 -0
  388. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.c +61 -0
  389. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.h +40 -0
  390. data/src/core/ext/upbdefs-generated/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.c +51 -0
  391. data/src/core/ext/upbdefs-generated/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.h +35 -0
  392. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/common/fault/v3/fault.upbdefs.c +102 -0
  393. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/common/fault/v3/fault.upbdefs.h +55 -0
  394. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.c +120 -0
  395. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.h +45 -0
  396. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.c +76 -0
  397. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.h +35 -0
  398. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +505 -0
  399. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.h +115 -0
  400. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.c +44 -0
  401. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.h +30 -0
  402. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +170 -0
  403. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.h +55 -0
  404. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.c +97 -0
  405. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.h +45 -0
  406. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c +246 -0
  407. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.h +60 -0
  408. data/src/core/ext/upbdefs-generated/envoy/service/cluster/v3/cds.upbdefs.c +72 -0
  409. data/src/core/ext/upbdefs-generated/envoy/service/cluster/v3/cds.upbdefs.h +35 -0
  410. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/ads.upbdefs.c +60 -0
  411. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/ads.upbdefs.h +35 -0
  412. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.c +142 -0
  413. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.h +65 -0
  414. data/src/core/ext/upbdefs-generated/envoy/service/endpoint/v3/eds.upbdefs.c +73 -0
  415. data/src/core/ext/upbdefs-generated/envoy/service/endpoint/v3/eds.upbdefs.h +35 -0
  416. data/src/core/ext/upbdefs-generated/envoy/service/listener/v3/lds.upbdefs.c +72 -0
  417. data/src/core/ext/upbdefs-generated/envoy/service/listener/v3/lds.upbdefs.h +35 -0
  418. data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.c +80 -0
  419. data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.h +40 -0
  420. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/rds.upbdefs.c +80 -0
  421. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/rds.upbdefs.h +35 -0
  422. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/srds.upbdefs.c +74 -0
  423. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/srds.upbdefs.h +35 -0
  424. data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.c +130 -0
  425. data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.h +50 -0
  426. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/metadata.upbdefs.c +64 -0
  427. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/metadata.upbdefs.h +40 -0
  428. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/node.upbdefs.c +56 -0
  429. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/node.upbdefs.h +35 -0
  430. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/number.upbdefs.c +54 -0
  431. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/number.upbdefs.h +35 -0
  432. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/path.upbdefs.c +53 -0
  433. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/path.upbdefs.h +35 -0
  434. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.c +73 -0
  435. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.h +45 -0
  436. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.c +69 -0
  437. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.h +40 -0
  438. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/struct.upbdefs.c +63 -0
  439. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/struct.upbdefs.h +40 -0
  440. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/value.upbdefs.c +81 -0
  441. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/value.upbdefs.h +45 -0
  442. data/src/core/ext/upbdefs-generated/envoy/type/metadata/v3/metadata.upbdefs.c +92 -0
  443. data/src/core/ext/upbdefs-generated/envoy/type/metadata/v3/metadata.upbdefs.h +65 -0
  444. data/src/core/ext/upbdefs-generated/envoy/type/tracing/v3/custom_tag.upbdefs.c +95 -0
  445. data/src/core/ext/upbdefs-generated/envoy/type/tracing/v3/custom_tag.upbdefs.h +55 -0
  446. data/src/core/ext/upbdefs-generated/envoy/type/v3/http.upbdefs.c +34 -0
  447. data/src/core/ext/upbdefs-generated/envoy/type/v3/http.upbdefs.h +30 -0
  448. data/src/core/ext/upbdefs-generated/envoy/type/v3/percent.upbdefs.c +59 -0
  449. data/src/core/ext/upbdefs-generated/envoy/type/v3/percent.upbdefs.h +40 -0
  450. data/src/core/ext/upbdefs-generated/envoy/type/v3/range.upbdefs.c +54 -0
  451. data/src/core/ext/upbdefs-generated/envoy/type/v3/range.upbdefs.h +45 -0
  452. data/src/core/ext/upbdefs-generated/envoy/type/v3/semantic_version.upbdefs.c +47 -0
  453. data/src/core/ext/upbdefs-generated/envoy/type/v3/semantic_version.upbdefs.h +35 -0
  454. data/src/core/ext/upbdefs-generated/google/api/annotations.upbdefs.c +40 -0
  455. data/src/core/ext/upbdefs-generated/google/api/annotations.upbdefs.h +30 -0
  456. data/src/core/ext/upbdefs-generated/google/api/http.upbdefs.c +61 -0
  457. data/src/core/ext/upbdefs-generated/google/api/http.upbdefs.h +45 -0
  458. data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.c +39 -0
  459. data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.h +35 -0
  460. data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.c +386 -0
  461. data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.h +165 -0
  462. data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.c +40 -0
  463. data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.h +35 -0
  464. data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.c +37 -0
  465. data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.h +35 -0
  466. data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.c +65 -0
  467. data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.h +50 -0
  468. data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.c +40 -0
  469. data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.h +35 -0
  470. data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.c +66 -0
  471. data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.h +75 -0
  472. data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.c +42 -0
  473. data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.h +35 -0
  474. data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.c +70 -0
  475. data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.h +45 -0
  476. data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.c +56 -0
  477. data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.h +35 -0
  478. data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.c +33 -0
  479. data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.h +30 -0
  480. data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.c +49 -0
  481. data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.h +35 -0
  482. data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.c +43 -0
  483. data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.h +35 -0
  484. data/src/core/ext/upbdefs-generated/udpa/type/v1/typed_struct.upbdefs.c +44 -0
  485. data/src/core/ext/upbdefs-generated/udpa/type/v1/typed_struct.upbdefs.h +35 -0
  486. data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.c +310 -0
  487. data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.h +145 -0
  488. data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.c +42 -0
  489. data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.h +35 -0
  490. data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.c +62 -0
  491. data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.h +40 -0
  492. data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.c +45 -0
  493. data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.h +40 -0
  494. data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.c +49 -0
  495. data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.h +35 -0
  496. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.c +67 -0
  497. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.h +40 -0
  498. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.c +50 -0
  499. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.h +35 -0
  500. data/src/core/ext/xds/certificate_provider_factory.h +7 -5
  501. data/src/core/ext/xds/certificate_provider_store.cc +87 -0
  502. data/src/core/ext/xds/certificate_provider_store.h +70 -8
  503. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +144 -0
  504. data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +69 -0
  505. data/src/core/ext/xds/xds_api.cc +2378 -1183
  506. data/src/core/ext/xds/xds_api.h +373 -99
  507. data/src/core/ext/xds/xds_bootstrap.cc +250 -68
  508. data/src/core/ext/xds/xds_bootstrap.h +40 -13
  509. data/src/core/ext/xds/xds_certificate_provider.cc +405 -0
  510. data/src/core/ext/xds/xds_certificate_provider.h +151 -0
  511. data/src/core/ext/xds/xds_client.cc +364 -182
  512. data/src/core/ext/xds/xds_client.h +47 -12
  513. data/src/core/ext/xds/xds_client_stats.cc +43 -5
  514. data/src/core/ext/xds/xds_client_stats.h +4 -4
  515. data/src/core/ext/xds/xds_http_fault_filter.cc +226 -0
  516. data/src/core/ext/xds/xds_http_fault_filter.h +63 -0
  517. data/src/core/ext/xds/xds_http_filters.cc +114 -0
  518. data/src/core/ext/xds/xds_http_filters.h +130 -0
  519. data/src/core/ext/xds/xds_server_config_fetcher.cc +532 -0
  520. data/src/core/lib/channel/channel_args.cc +9 -8
  521. data/src/core/lib/channel/channel_stack.cc +12 -0
  522. data/src/core/lib/channel/channel_stack.h +7 -0
  523. data/src/core/lib/channel/channel_trace.cc +4 -2
  524. data/src/core/lib/channel/channel_trace.h +1 -1
  525. data/src/core/lib/channel/channelz.cc +105 -18
  526. data/src/core/lib/channel/channelz.h +32 -4
  527. data/src/core/lib/channel/channelz_registry.cc +14 -0
  528. data/src/core/lib/channel/channelz_registry.h +0 -1
  529. data/src/core/lib/channel/handshaker.cc +4 -46
  530. data/src/core/lib/channel/handshaker.h +3 -20
  531. data/src/core/lib/channel/status_util.cc +12 -2
  532. data/src/core/lib/channel/status_util.h +5 -0
  533. data/src/core/lib/compression/compression.cc +8 -4
  534. data/src/core/lib/compression/compression_args.cc +3 -2
  535. data/src/core/lib/compression/compression_internal.cc +10 -5
  536. data/src/core/lib/compression/compression_internal.h +2 -1
  537. data/src/core/lib/compression/stream_compression_identity.cc +1 -3
  538. data/src/core/lib/debug/stats.h +2 -2
  539. data/src/core/lib/debug/stats_data.cc +1 -0
  540. data/src/core/lib/debug/stats_data.h +13 -13
  541. data/src/core/lib/gpr/alloc.cc +3 -2
  542. data/src/core/lib/gpr/cpu_iphone.cc +10 -2
  543. data/src/core/lib/gpr/log.cc +59 -17
  544. data/src/core/lib/gpr/log_linux.cc +19 -3
  545. data/src/core/lib/gpr/log_posix.cc +15 -1
  546. data/src/core/lib/gpr/log_windows.cc +18 -4
  547. data/src/core/lib/gpr/murmur_hash.cc +1 -1
  548. data/src/core/lib/gpr/spinlock.h +10 -2
  549. data/src/core/lib/gpr/string.cc +23 -22
  550. data/src/core/lib/gpr/string.h +5 -6
  551. data/src/core/lib/gpr/sync.cc +4 -4
  552. data/src/core/lib/gpr/sync_abseil.cc +3 -6
  553. data/src/core/lib/gpr/sync_windows.cc +2 -2
  554. data/src/core/lib/gpr/time.cc +12 -12
  555. data/src/core/lib/gpr/time_precise.cc +3 -2
  556. data/src/core/lib/gpr/tls.h +4 -0
  557. data/src/core/lib/gpr/tls_msvc.h +2 -0
  558. data/src/core/lib/gpr/tls_stdcpp.h +48 -0
  559. data/src/core/lib/gpr/useful.h +5 -4
  560. data/src/core/lib/gprpp/arena.h +3 -2
  561. data/src/core/lib/gprpp/atomic.h +3 -3
  562. data/src/core/lib/gprpp/dual_ref_counted.h +46 -51
  563. data/src/core/lib/gprpp/examine_stack.cc +43 -0
  564. data/src/core/lib/gprpp/examine_stack.h +46 -0
  565. data/src/core/lib/gprpp/fork.cc +2 -2
  566. data/src/core/lib/gprpp/manual_constructor.h +1 -1
  567. data/src/core/lib/gprpp/mpscq.cc +2 -2
  568. data/src/core/lib/gprpp/orphanable.h +4 -8
  569. data/src/core/lib/gprpp/ref_counted.h +42 -48
  570. data/src/core/lib/gprpp/ref_counted_ptr.h +20 -12
  571. data/src/core/lib/{security/authorization/mock_cel/statusor.h → gprpp/stat.h} +13 -25
  572. data/src/core/lib/gprpp/stat_posix.cc +49 -0
  573. data/src/core/lib/gprpp/stat_windows.cc +48 -0
  574. data/src/core/lib/gprpp/sync.h +129 -40
  575. data/src/core/lib/gprpp/thd.h +3 -3
  576. data/src/core/lib/gprpp/thd_posix.cc +42 -37
  577. data/src/core/lib/gprpp/thd_windows.cc +3 -1
  578. data/src/core/lib/gprpp/time_util.cc +77 -0
  579. data/src/core/lib/gprpp/time_util.h +42 -0
  580. data/src/core/lib/http/httpcli.cc +1 -1
  581. data/src/core/lib/http/httpcli.h +2 -3
  582. data/src/core/lib/http/httpcli_security_connector.cc +3 -3
  583. data/src/core/lib/http/parser.cc +47 -27
  584. data/src/core/lib/iomgr/buffer_list.h +1 -1
  585. data/src/core/lib/iomgr/call_combiner.cc +8 -5
  586. data/src/core/lib/iomgr/cfstream_handle.cc +2 -2
  587. data/src/core/lib/iomgr/combiner.cc +2 -1
  588. data/src/core/lib/iomgr/endpoint.h +1 -1
  589. data/src/core/lib/iomgr/error.cc +17 -12
  590. data/src/core/lib/iomgr/error.h +1 -1
  591. data/src/core/lib/iomgr/error_internal.h +1 -1
  592. data/src/core/lib/iomgr/ev_apple.cc +11 -8
  593. data/src/core/lib/iomgr/ev_epoll1_linux.cc +23 -16
  594. data/src/core/lib/iomgr/ev_epollex_linux.cc +29 -21
  595. data/src/core/lib/iomgr/ev_poll_posix.cc +9 -7
  596. data/src/core/lib/iomgr/ev_posix.cc +3 -3
  597. data/src/core/lib/iomgr/exec_ctx.cc +7 -3
  598. data/src/core/lib/iomgr/exec_ctx.h +6 -4
  599. data/src/core/lib/iomgr/executor.cc +2 -1
  600. data/src/core/lib/iomgr/executor.h +1 -1
  601. data/src/core/lib/iomgr/executor/mpmcqueue.h +5 -5
  602. data/src/core/lib/iomgr/executor/threadpool.h +4 -4
  603. data/src/core/lib/iomgr/iomgr.cc +1 -1
  604. data/src/core/lib/iomgr/iomgr_posix.cc +0 -1
  605. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +0 -1
  606. data/src/core/lib/iomgr/load_file.h +1 -1
  607. data/src/core/lib/iomgr/lockfree_event.cc +19 -14
  608. data/src/core/lib/iomgr/lockfree_event.h +2 -2
  609. data/src/core/lib/iomgr/parse_address.cc +127 -43
  610. data/src/core/lib/iomgr/parse_address.h +32 -8
  611. data/src/core/lib/iomgr/poller/eventmanager_libuv.cc +2 -1
  612. data/src/core/lib/iomgr/poller/eventmanager_libuv.h +1 -1
  613. data/src/core/lib/iomgr/pollset_set_custom.cc +1 -1
  614. data/src/core/lib/iomgr/python_util.h +4 -4
  615. data/src/core/lib/iomgr/resolve_address.cc +4 -4
  616. data/src/core/lib/iomgr/resolve_address_posix.cc +1 -5
  617. data/src/core/lib/iomgr/resource_quota.cc +5 -5
  618. data/src/core/lib/iomgr/sockaddr_utils.cc +131 -11
  619. data/src/core/lib/iomgr/sockaddr_utils.h +26 -1
  620. data/src/core/lib/iomgr/socket_factory_posix.cc +3 -2
  621. data/src/core/lib/iomgr/socket_mutator.cc +3 -2
  622. data/src/core/lib/iomgr/socket_utils_common_posix.cc +1 -0
  623. data/src/core/lib/iomgr/tcp_client.cc +3 -3
  624. data/src/core/lib/iomgr/tcp_client_custom.cc +7 -6
  625. data/src/core/lib/iomgr/tcp_client_posix.cc +1 -1
  626. data/src/core/lib/iomgr/tcp_custom.cc +22 -17
  627. data/src/core/lib/iomgr/tcp_posix.cc +17 -16
  628. data/src/core/lib/iomgr/tcp_server_custom.cc +28 -22
  629. data/src/core/lib/iomgr/tcp_uv.cc +2 -2
  630. data/src/core/lib/iomgr/timer_custom.cc +5 -5
  631. data/src/core/lib/iomgr/timer_generic.cc +5 -5
  632. data/src/core/lib/iomgr/timer_manager.cc +3 -3
  633. data/src/core/lib/iomgr/udp_server.cc +1 -2
  634. data/src/core/lib/iomgr/udp_server.h +1 -2
  635. data/src/core/lib/iomgr/unix_sockets_posix.cc +32 -21
  636. data/src/core/lib/iomgr/unix_sockets_posix.h +5 -0
  637. data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +7 -0
  638. data/src/core/lib/iomgr/wakeup_fd_nospecial.cc +1 -1
  639. data/src/core/lib/iomgr/wakeup_fd_pipe.cc +2 -2
  640. data/src/core/lib/json/json.h +12 -2
  641. data/src/core/lib/json/json_reader.cc +8 -4
  642. data/src/core/lib/json/json_util.h +167 -0
  643. data/src/core/lib/json/json_writer.cc +2 -1
  644. data/src/core/lib/matchers/matchers.cc +339 -0
  645. data/src/core/lib/matchers/matchers.h +160 -0
  646. data/src/core/lib/security/context/security_context.cc +4 -3
  647. data/src/core/lib/security/context/security_context.h +3 -1
  648. data/src/core/lib/security/credentials/alts/alts_credentials.cc +2 -1
  649. data/src/core/lib/security/credentials/alts/alts_credentials.h +1 -1
  650. data/src/core/lib/security/credentials/alts/check_gcp_environment.cc +1 -1
  651. data/src/core/lib/security/credentials/credentials.cc +7 -7
  652. data/src/core/lib/security/credentials/credentials.h +5 -4
  653. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +413 -0
  654. data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +80 -0
  655. data/src/core/lib/security/credentials/external/aws_request_signer.cc +213 -0
  656. data/src/core/lib/security/credentials/external/aws_request_signer.h +72 -0
  657. data/src/core/lib/security/credentials/external/external_account_credentials.cc +497 -0
  658. data/src/core/lib/security/credentials/external/external_account_credentials.h +120 -0
  659. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +135 -0
  660. data/src/core/lib/security/credentials/external/file_external_account_credentials.h +48 -0
  661. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +213 -0
  662. data/src/core/lib/security/credentials/external/url_external_account_credentials.h +58 -0
  663. data/src/core/lib/security/credentials/fake/fake_credentials.cc +3 -2
  664. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +25 -18
  665. data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +64 -0
  666. data/src/core/lib/security/credentials/jwt/json_token.cc +3 -3
  667. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +4 -3
  668. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +5 -4
  669. data/src/core/lib/security/credentials/local/local_credentials.cc +2 -1
  670. data/src/core/lib/security/credentials/local/local_credentials.h +1 -1
  671. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +39 -46
  672. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +5 -4
  673. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +1 -1
  674. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +7 -6
  675. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +2 -2
  676. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +30 -5
  677. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +13 -14
  678. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +399 -0
  679. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +138 -0
  680. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +78 -150
  681. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +57 -187
  682. data/src/core/lib/security/credentials/tls/tls_credentials.cc +18 -13
  683. data/src/core/lib/security/credentials/tls/tls_credentials.h +3 -3
  684. data/src/core/lib/security/credentials/tls/tls_utils.cc +91 -0
  685. data/src/core/lib/security/credentials/tls/tls_utils.h +38 -0
  686. data/src/core/lib/security/credentials/xds/xds_credentials.cc +209 -10
  687. data/src/core/lib/security/credentials/xds/xds_credentials.h +27 -9
  688. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +1 -1
  689. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +3 -3
  690. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +121 -0
  691. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +87 -0
  692. data/src/core/lib/security/security_connector/load_system_roots.h +4 -0
  693. data/src/core/lib/security/security_connector/load_system_roots_linux.h +2 -0
  694. data/src/core/lib/security/security_connector/local/local_security_connector.cc +3 -3
  695. data/src/core/lib/security/security_connector/security_connector.cc +4 -3
  696. data/src/core/lib/security/security_connector/security_connector.h +4 -2
  697. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +4 -4
  698. data/src/core/lib/security/security_connector/ssl_utils.cc +11 -6
  699. data/src/core/lib/security/security_connector/ssl_utils.h +16 -21
  700. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +360 -279
  701. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +105 -61
  702. data/src/core/lib/security/transport/secure_endpoint.cc +2 -2
  703. data/src/core/lib/security/transport/security_handshaker.cc +36 -8
  704. data/src/core/lib/security/transport/server_auth_filter.cc +2 -1
  705. data/src/core/lib/security/util/json_util.h +1 -0
  706. data/src/core/lib/slice/slice.cc +7 -4
  707. data/src/core/lib/slice/slice_buffer.cc +2 -1
  708. data/src/core/lib/slice/slice_intern.cc +11 -13
  709. data/src/core/lib/slice/slice_internal.h +2 -2
  710. data/src/core/lib/surface/call.cc +41 -32
  711. data/src/core/lib/surface/call_details.cc +8 -8
  712. data/src/core/lib/surface/channel.cc +16 -10
  713. data/src/core/lib/surface/channel.h +6 -5
  714. data/src/core/lib/surface/channel_init.cc +1 -1
  715. data/src/core/lib/surface/completion_queue.cc +31 -25
  716. data/src/core/lib/surface/completion_queue.h +16 -16
  717. data/src/core/lib/surface/init.cc +19 -20
  718. data/src/core/lib/surface/lame_client.cc +47 -54
  719. data/src/core/lib/surface/lame_client.h +5 -0
  720. data/src/core/lib/surface/server.cc +106 -53
  721. data/src/core/lib/surface/server.h +114 -20
  722. data/src/core/lib/surface/validate_metadata.h +3 -0
  723. data/src/core/lib/surface/version.cc +2 -2
  724. data/src/core/lib/transport/authority_override.cc +6 -4
  725. data/src/core/lib/transport/authority_override.h +7 -2
  726. data/src/core/lib/transport/bdp_estimator.cc +1 -1
  727. data/src/core/lib/transport/byte_stream.h +3 -3
  728. data/src/core/lib/transport/connectivity_state.h +9 -7
  729. data/src/core/lib/transport/error_utils.h +1 -1
  730. data/src/core/lib/transport/metadata.cc +6 -2
  731. data/src/core/lib/transport/metadata.h +2 -2
  732. data/src/core/lib/transport/metadata_batch.cc +27 -0
  733. data/src/core/lib/transport/metadata_batch.h +18 -4
  734. data/src/core/lib/transport/static_metadata.cc +1 -1
  735. data/src/core/lib/transport/status_metadata.cc +4 -3
  736. data/src/core/lib/transport/timeout_encoding.cc +4 -4
  737. data/src/core/lib/transport/transport.cc +5 -3
  738. data/src/core/lib/transport/transport.h +8 -8
  739. data/src/core/lib/uri/uri_parser.cc +131 -249
  740. data/src/core/lib/uri/uri_parser.h +57 -21
  741. data/src/core/plugin_registry/grpc_plugin_registry.cc +26 -8
  742. data/src/core/tsi/alts/crypt/gsec.cc +5 -4
  743. data/src/core/tsi/alts/frame_protector/frame_handler.cc +8 -6
  744. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +19 -25
  745. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +43 -47
  746. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +1 -1
  747. data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +1 -3
  748. data/src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.cc +8 -6
  749. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +4 -4
  750. data/src/core/tsi/fake_transport_security.cc +17 -5
  751. data/src/core/tsi/local_transport_security.cc +5 -1
  752. data/src/core/tsi/local_transport_security.h +6 -7
  753. data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +1 -1
  754. data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +0 -2
  755. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +3 -2
  756. data/src/core/tsi/ssl_transport_security.cc +73 -56
  757. data/src/core/tsi/ssl_transport_security.h +6 -6
  758. data/src/core/tsi/transport_security.cc +10 -8
  759. data/src/core/tsi/transport_security_interface.h +1 -1
  760. data/src/ruby/ext/grpc/extconf.rb +10 -2
  761. data/src/ruby/ext/grpc/rb_channel.c +10 -1
  762. data/src/ruby/ext/grpc/rb_channel_credentials.c +11 -1
  763. data/src/ruby/ext/grpc/rb_channel_credentials.h +4 -0
  764. data/src/ruby/ext/grpc/rb_compression_options.c +1 -1
  765. data/src/ruby/ext/grpc/rb_enable_cpp.cc +1 -1
  766. data/src/ruby/ext/grpc/rb_event_thread.c +2 -0
  767. data/src/ruby/ext/grpc/rb_grpc.c +4 -0
  768. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +36 -14
  769. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +70 -37
  770. data/src/ruby/ext/grpc/rb_server.c +13 -1
  771. data/src/ruby/ext/grpc/rb_server_credentials.c +19 -3
  772. data/src/ruby/ext/grpc/rb_server_credentials.h +4 -0
  773. data/src/ruby/ext/grpc/rb_xds_channel_credentials.c +215 -0
  774. data/src/ruby/ext/grpc/rb_xds_channel_credentials.h +35 -0
  775. data/src/ruby/ext/grpc/rb_xds_server_credentials.c +169 -0
  776. data/src/ruby/ext/grpc/rb_xds_server_credentials.h +35 -0
  777. data/src/ruby/lib/grpc/generic/client_stub.rb +4 -2
  778. data/src/ruby/lib/grpc/version.rb +1 -1
  779. data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +35 -0
  780. data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +18 -0
  781. data/src/ruby/spec/call_spec.rb +1 -1
  782. data/src/ruby/spec/channel_credentials_spec.rb +32 -0
  783. data/src/ruby/spec/channel_spec.rb +17 -6
  784. data/src/ruby/spec/client_auth_spec.rb +27 -1
  785. data/src/ruby/spec/errors_spec.rb +1 -1
  786. data/src/ruby/spec/generic/active_call_spec.rb +2 -2
  787. data/src/ruby/spec/generic/client_stub_spec.rb +4 -4
  788. data/src/ruby/spec/generic/rpc_server_spec.rb +1 -1
  789. data/src/ruby/spec/pb/codegen/package_option_spec.rb +2 -6
  790. data/src/ruby/spec/server_credentials_spec.rb +25 -0
  791. data/src/ruby/spec/server_spec.rb +22 -0
  792. data/third_party/abseil-cpp/absl/algorithm/container.h +59 -22
  793. data/third_party/abseil-cpp/absl/base/attributes.h +99 -38
  794. data/third_party/abseil-cpp/absl/base/call_once.h +1 -1
  795. data/third_party/abseil-cpp/absl/base/casts.h +9 -6
  796. data/third_party/abseil-cpp/absl/base/config.h +60 -17
  797. data/third_party/abseil-cpp/absl/base/dynamic_annotations.h +428 -335
  798. data/third_party/abseil-cpp/absl/base/internal/bits.h +17 -16
  799. data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +5 -0
  800. data/third_party/abseil-cpp/absl/base/internal/dynamic_annotations.h +398 -0
  801. data/third_party/abseil-cpp/absl/base/internal/invoke.h +4 -4
  802. data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.cc +1 -1
  803. data/third_party/abseil-cpp/absl/base/internal/low_level_scheduling.h +29 -1
  804. data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +2 -2
  805. data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +7 -5
  806. data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +25 -38
  807. data/third_party/abseil-cpp/absl/base/internal/spinlock.h +19 -25
  808. data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +8 -0
  809. data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +28 -5
  810. data/third_party/abseil-cpp/absl/base/internal/sysinfo.h +8 -0
  811. data/third_party/abseil-cpp/absl/base/internal/tsan_mutex_interface.h +3 -1
  812. data/third_party/abseil-cpp/absl/base/internal/unaligned_access.h +2 -2
  813. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +3 -3
  814. data/third_party/abseil-cpp/absl/base/macros.h +36 -109
  815. data/third_party/abseil-cpp/absl/base/optimization.h +61 -1
  816. data/third_party/abseil-cpp/absl/base/options.h +31 -4
  817. data/third_party/abseil-cpp/absl/base/policy_checks.h +1 -1
  818. data/third_party/abseil-cpp/absl/base/thread_annotations.h +94 -39
  819. data/third_party/abseil-cpp/absl/container/fixed_array.h +42 -25
  820. data/third_party/abseil-cpp/absl/container/flat_hash_map.h +606 -0
  821. data/third_party/abseil-cpp/absl/container/inlined_vector.h +33 -36
  822. data/third_party/abseil-cpp/absl/container/internal/common.h +6 -2
  823. data/third_party/abseil-cpp/absl/container/internal/compressed_tuple.h +33 -8
  824. data/third_party/abseil-cpp/absl/container/internal/container_memory.h +49 -29
  825. data/third_party/abseil-cpp/absl/container/internal/hash_function_defaults.h +15 -0
  826. data/third_party/abseil-cpp/absl/container/internal/hash_policy_traits.h +24 -7
  827. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +2 -1
  828. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +35 -11
  829. data/third_party/abseil-cpp/absl/container/internal/have_sse.h +10 -9
  830. data/third_party/abseil-cpp/absl/container/internal/layout.h +7 -5
  831. data/third_party/abseil-cpp/absl/container/internal/raw_hash_map.h +197 -0
  832. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +55 -34
  833. data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.cc +5 -4
  834. data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +66 -16
  835. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +4 -0
  836. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +13 -4
  837. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +43 -24
  838. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +12 -3
  839. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_win32-inl.inc +10 -2
  840. data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +22 -1
  841. data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +0 -21
  842. data/third_party/abseil-cpp/absl/debugging/symbolize.cc +12 -1
  843. data/third_party/abseil-cpp/absl/debugging/symbolize_darwin.inc +101 -0
  844. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +100 -20
  845. data/third_party/abseil-cpp/absl/functional/bind_front.h +184 -0
  846. data/third_party/abseil-cpp/absl/functional/function_ref.h +1 -1
  847. data/third_party/abseil-cpp/absl/functional/internal/front_binder.h +95 -0
  848. data/third_party/abseil-cpp/absl/functional/internal/function_ref.h +2 -2
  849. data/third_party/abseil-cpp/absl/hash/hash.h +6 -5
  850. data/third_party/abseil-cpp/absl/hash/internal/hash.h +73 -65
  851. data/third_party/abseil-cpp/absl/memory/memory.h +4 -0
  852. data/third_party/abseil-cpp/absl/meta/type_traits.h +2 -8
  853. data/third_party/abseil-cpp/absl/numeric/int128.cc +13 -27
  854. data/third_party/abseil-cpp/absl/numeric/int128.h +16 -15
  855. data/third_party/abseil-cpp/absl/status/internal/status_internal.h +51 -0
  856. data/third_party/abseil-cpp/absl/status/internal/statusor_internal.h +399 -0
  857. data/third_party/abseil-cpp/absl/status/status.cc +4 -6
  858. data/third_party/abseil-cpp/absl/status/status.h +502 -113
  859. data/third_party/abseil-cpp/absl/status/status_payload_printer.cc +5 -10
  860. data/third_party/abseil-cpp/absl/status/statusor.cc +71 -0
  861. data/third_party/abseil-cpp/absl/status/statusor.h +760 -0
  862. data/third_party/abseil-cpp/absl/strings/charconv.cc +2 -2
  863. data/third_party/abseil-cpp/absl/strings/cord.cc +91 -112
  864. data/third_party/abseil-cpp/absl/strings/cord.h +360 -205
  865. data/third_party/abseil-cpp/absl/strings/escaping.cc +9 -9
  866. data/third_party/abseil-cpp/absl/strings/internal/char_map.h +1 -1
  867. data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.cc +1 -1
  868. data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.h +2 -2
  869. data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc +2 -2
  870. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +45 -23
  871. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +222 -136
  872. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +136 -64
  873. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +1 -1
  874. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +14 -21
  875. data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +7 -14
  876. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +31 -7
  877. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +147 -135
  878. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +999 -87
  879. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.h +3 -3
  880. data/third_party/abseil-cpp/absl/strings/internal/str_format/output.h +4 -12
  881. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc +8 -6
  882. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +13 -11
  883. data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +2 -2
  884. data/third_party/abseil-cpp/absl/strings/str_cat.cc +4 -4
  885. data/third_party/abseil-cpp/absl/strings/str_cat.h +1 -1
  886. data/third_party/abseil-cpp/absl/strings/str_format.h +289 -13
  887. data/third_party/abseil-cpp/absl/strings/str_split.cc +2 -2
  888. data/third_party/abseil-cpp/absl/strings/str_split.h +1 -0
  889. data/third_party/abseil-cpp/absl/strings/string_view.h +26 -19
  890. data/third_party/abseil-cpp/absl/strings/substitute.cc +5 -5
  891. data/third_party/abseil-cpp/absl/strings/substitute.h +32 -29
  892. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +3 -3
  893. data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc +4 -3
  894. data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +28 -28
  895. data/third_party/abseil-cpp/absl/synchronization/internal/mutex_nonprod.inc +4 -16
  896. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +1 -1
  897. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +8 -0
  898. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +2 -2
  899. data/third_party/abseil-cpp/absl/synchronization/mutex.cc +75 -64
  900. data/third_party/abseil-cpp/absl/synchronization/mutex.h +15 -6
  901. data/third_party/abseil-cpp/absl/time/civil_time.cc +9 -9
  902. data/third_party/abseil-cpp/absl/time/clock.cc +3 -3
  903. data/third_party/abseil-cpp/absl/time/duration.cc +90 -59
  904. data/third_party/abseil-cpp/absl/time/format.cc +43 -36
  905. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +26 -16
  906. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +4 -2
  907. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/zone_info_source.h +1 -1
  908. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +136 -29
  909. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.cc +13 -21
  910. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.h +1 -1
  911. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc +136 -129
  912. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.h +4 -5
  913. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.cc +8 -7
  914. data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +6 -6
  915. data/third_party/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc +2 -1
  916. data/third_party/abseil-cpp/absl/time/time.h +15 -16
  917. data/third_party/abseil-cpp/absl/types/internal/variant.h +4 -4
  918. data/third_party/abseil-cpp/absl/types/optional.h +9 -9
  919. data/third_party/abseil-cpp/absl/types/span.h +49 -36
  920. data/third_party/abseil-cpp/absl/utility/utility.h +2 -2
  921. data/third_party/address_sorting/include/address_sorting/address_sorting.h +2 -0
  922. data/third_party/boringssl-with-bazel/err_data.c +728 -722
  923. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bitstr.c +3 -3
  924. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_enum.c +2 -2
  925. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_int.c +5 -5
  926. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +3 -10
  927. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_octet.c +3 -3
  928. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_type.c +4 -2
  929. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_utctm.c +2 -2
  930. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +15 -14
  931. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_locl.h +30 -0
  932. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_dec.c +28 -79
  933. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +39 -85
  934. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_fre.c +5 -16
  935. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_new.c +10 -61
  936. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_typ.c +0 -2
  937. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_utl.c +2 -2
  938. data/third_party/boringssl-with-bazel/src/crypto/bio/bio.c +2 -0
  939. data/third_party/boringssl-with-bazel/src/crypto/bio/socket_helper.c +4 -0
  940. data/third_party/boringssl-with-bazel/src/crypto/blake2/blake2.c +158 -0
  941. data/third_party/boringssl-with-bazel/src/crypto/bn_extra/bn_asn1.c +3 -10
  942. data/third_party/boringssl-with-bazel/src/crypto/bytestring/ber.c +8 -9
  943. data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbs.c +60 -45
  944. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_chacha20poly1305.c +6 -81
  945. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/internal.h +87 -0
  946. data/third_party/boringssl-with-bazel/src/crypto/cpu-aarch64-win.c +41 -0
  947. data/third_party/boringssl-with-bazel/src/crypto/cpu-arm-linux.c +11 -2
  948. data/third_party/boringssl-with-bazel/src/crypto/cpu-arm.c +3 -3
  949. data/third_party/boringssl-with-bazel/src/crypto/{dh → dh_extra}/dh_asn1.c +0 -0
  950. data/third_party/boringssl-with-bazel/src/crypto/{dh → dh_extra}/params.c +179 -0
  951. data/third_party/boringssl-with-bazel/src/crypto/digest_extra/digest_extra.c +25 -0
  952. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/ec_asn1.c +2 -17
  953. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +3 -1
  954. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/bn.c +13 -20
  955. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/div.c +2 -3
  956. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +9 -1
  957. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/cipher.c +21 -13
  958. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_aes.c +173 -35
  959. data/third_party/boringssl-with-bazel/src/crypto/{dh → fipsmodule/dh}/check.c +0 -0
  960. data/third_party/boringssl-with-bazel/src/crypto/{dh → fipsmodule/dh}/dh.c +136 -213
  961. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +12 -0
  962. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +9 -1
  963. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/internal.h +28 -0
  964. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.c +135 -43
  965. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +0 -7
  966. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +97 -39
  967. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +155 -2
  968. data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +18 -29
  969. data/third_party/boringssl-with-bazel/src/crypto/hpke/internal.h +13 -4
  970. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305.c +10 -7
  971. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_arm.c +13 -11
  972. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_vec.c +4 -0
  973. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/passive.c +34 -0
  974. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/rand_extra.c +4 -0
  975. data/third_party/boringssl-with-bazel/src/crypto/stack/stack.c +7 -13
  976. data/third_party/boringssl-with-bazel/src/crypto/trust_token/internal.h +90 -63
  977. data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +60 -60
  978. data/third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token.c +179 -47
  979. data/third_party/boringssl-with-bazel/src/crypto/trust_token/voprf.c +766 -0
  980. data/third_party/boringssl-with-bazel/src/crypto/x509/algorithm.c +10 -0
  981. data/third_party/boringssl-with-bazel/src/crypto/x509/rsa_pss.c +5 -1
  982. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c +1 -29
  983. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_ext.c +10 -7
  984. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_r2x.c +1 -1
  985. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +8 -8
  986. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_v3.c +1 -1
  987. data/third_party/boringssl-with-bazel/src/crypto/x509/x509cset.c +29 -23
  988. data/third_party/boringssl-with-bazel/src/crypto/x509/x_attrib.c +22 -17
  989. data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +1 -2
  990. data/third_party/boringssl-with-bazel/src/crypto/x509/x_pkey.c +2 -2
  991. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509.c +39 -4
  992. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509a.c +2 -2
  993. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_data.c +5 -3
  994. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_akey.c +3 -3
  995. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_alt.c +25 -24
  996. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_bitst.c +3 -3
  997. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_conf.c +25 -25
  998. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +2 -2
  999. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_enum.c +2 -1
  1000. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_genn.c +40 -20
  1001. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ia5.c +3 -4
  1002. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_lib.c +25 -36
  1003. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_prn.c +2 -2
  1004. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c +6 -6
  1005. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_utl.c +6 -6
  1006. data/third_party/boringssl-with-bazel/src/include/openssl/aead.h +24 -0
  1007. data/third_party/boringssl-with-bazel/src/include/openssl/arm_arch.h +10 -8
  1008. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +652 -545
  1009. data/third_party/boringssl-with-bazel/src/include/openssl/asn1t.h +0 -167
  1010. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +14 -6
  1011. data/third_party/boringssl-with-bazel/src/include/openssl/bio.h +4 -0
  1012. data/third_party/boringssl-with-bazel/src/include/openssl/blake2.h +62 -0
  1013. data/third_party/boringssl-with-bazel/src/include/openssl/bytestring.h +22 -7
  1014. data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +19 -0
  1015. data/third_party/boringssl-with-bazel/src/include/openssl/cpu.h +22 -32
  1016. data/third_party/boringssl-with-bazel/src/include/openssl/des.h +6 -0
  1017. data/third_party/boringssl-with-bazel/src/include/openssl/dh.h +56 -26
  1018. data/third_party/boringssl-with-bazel/src/include/openssl/digest.h +1 -0
  1019. data/third_party/boringssl-with-bazel/src/include/openssl/ec.h +15 -0
  1020. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +12 -2
  1021. data/third_party/boringssl-with-bazel/src/include/openssl/opensslconf.h +3 -0
  1022. data/third_party/boringssl-with-bazel/src/include/openssl/pem.h +202 -134
  1023. data/third_party/boringssl-with-bazel/src/include/openssl/rand.h +3 -0
  1024. data/third_party/boringssl-with-bazel/src/include/openssl/span.h +2 -1
  1025. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +122 -34
  1026. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +31 -8
  1027. data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +31 -23
  1028. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +287 -99
  1029. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +546 -402
  1030. data/third_party/boringssl-with-bazel/src/ssl/bio_ssl.cc +18 -5
  1031. data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +35 -0
  1032. data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +4 -3
  1033. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +11 -20
  1034. data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +10 -5
  1035. data/third_party/boringssl-with-bazel/src/ssl/internal.h +73 -17
  1036. data/third_party/boringssl-with-bazel/src/ssl/s3_lib.cc +0 -1
  1037. data/third_party/boringssl-with-bazel/src/ssl/ssl_asn1.cc +49 -9
  1038. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +87 -14
  1039. data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +18 -22
  1040. data/third_party/boringssl-with-bazel/src/ssl/ssl_transcript.cc +2 -2
  1041. data/third_party/boringssl-with-bazel/src/ssl/t1_enc.cc +5 -7
  1042. data/third_party/boringssl-with-bazel/src/ssl/t1_lib.cc +570 -53
  1043. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +55 -13
  1044. data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +48 -15
  1045. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +192 -56
  1046. data/third_party/upb/third_party/wyhash/wyhash.h +145 -0
  1047. data/third_party/upb/upb/decode.c +248 -167
  1048. data/third_party/upb/upb/decode.h +20 -1
  1049. data/third_party/upb/upb/decode.int.h +163 -0
  1050. data/third_party/upb/upb/decode_fast.c +1040 -0
  1051. data/third_party/upb/upb/decode_fast.h +126 -0
  1052. data/third_party/upb/upb/def.c +2178 -0
  1053. data/third_party/upb/upb/def.h +315 -0
  1054. data/third_party/upb/upb/def.hpp +439 -0
  1055. data/third_party/upb/upb/encode.c +227 -169
  1056. data/third_party/upb/upb/encode.h +27 -2
  1057. data/third_party/upb/upb/msg.c +167 -88
  1058. data/third_party/upb/upb/msg.h +174 -34
  1059. data/third_party/upb/upb/port_def.inc +74 -61
  1060. data/third_party/upb/upb/port_undef.inc +3 -7
  1061. data/third_party/upb/upb/reflection.c +408 -0
  1062. data/third_party/upb/upb/reflection.h +168 -0
  1063. data/third_party/upb/upb/table.c +34 -197
  1064. data/third_party/upb/upb/table.int.h +14 -5
  1065. data/third_party/upb/upb/text_encode.c +421 -0
  1066. data/third_party/upb/upb/text_encode.h +38 -0
  1067. data/third_party/upb/upb/upb.c +18 -41
  1068. data/third_party/upb/upb/upb.h +36 -7
  1069. data/third_party/upb/upb/upb.hpp +4 -4
  1070. data/third_party/upb/upb/upb.int.h +29 -0
  1071. data/third_party/xxhash/xxhash.h +5443 -0
  1072. metadata +335 -75
  1073. data/src/core/ext/filters/client_channel/lb_policy/xds/eds.cc +0 -1136
  1074. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc +0 -485
  1075. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc +0 -68
  1076. data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +0 -355
  1077. data/src/core/ext/filters/client_channel/resolving_lb_policy.h +0 -138
  1078. data/src/core/ext/upb-generated/udpa/core/v1/authority.upb.h +0 -53
  1079. data/src/core/ext/upb-generated/udpa/core/v1/collection_entry.upb.c +0 -52
  1080. data/src/core/ext/upb-generated/udpa/core/v1/collection_entry.upb.h +0 -129
  1081. data/src/core/ext/upb-generated/udpa/core/v1/context_params.upb.c +0 -42
  1082. data/src/core/ext/upb-generated/udpa/core/v1/context_params.upb.h +0 -77
  1083. data/src/core/ext/upb-generated/udpa/core/v1/resource.upb.c +0 -36
  1084. data/src/core/ext/upb-generated/udpa/core/v1/resource.upb.h +0 -85
  1085. data/src/core/ext/upb-generated/udpa/core/v1/resource_locator.upb.c +0 -54
  1086. data/src/core/ext/upb-generated/udpa/core/v1/resource_locator.upb.h +0 -160
  1087. data/src/core/ext/upb-generated/udpa/core/v1/resource_name.upb.c +0 -36
  1088. data/src/core/ext/upb-generated/udpa/core/v1/resource_name.upb.h +0 -84
  1089. data/src/core/ext/xds/google_mesh_ca_certificate_provider_factory.cc +0 -377
  1090. data/src/core/ext/xds/google_mesh_ca_certificate_provider_factory.h +0 -102
  1091. data/src/core/lib/gprpp/map.h +0 -53
  1092. data/src/core/lib/iomgr/iomgr_posix.h +0 -26
  1093. data/src/core/lib/security/authorization/authorization_engine.cc +0 -177
  1094. data/src/core/lib/security/authorization/authorization_engine.h +0 -84
  1095. data/src/core/lib/security/authorization/evaluate_args.cc +0 -153
  1096. data/src/core/lib/security/authorization/evaluate_args.h +0 -59
  1097. data/src/core/lib/security/authorization/mock_cel/activation.h +0 -57
  1098. data/src/core/lib/security/authorization/mock_cel/cel_expr_builder_factory.h +0 -42
  1099. data/src/core/lib/security/authorization/mock_cel/cel_expression.h +0 -68
  1100. data/src/core/lib/security/authorization/mock_cel/cel_value.h +0 -93
  1101. data/src/core/lib/security/authorization/mock_cel/evaluator_core.h +0 -67
  1102. data/src/core/lib/security/authorization/mock_cel/flat_expr_builder.h +0 -56
  1103. data/src/core/lib/security/certificate_provider.h +0 -60
  1104. data/third_party/abseil-cpp/absl/base/dynamic_annotations.cc +0 -129
  1105. data/third_party/abseil-cpp/absl/container/flat_hash_set.h +0 -503
  1106. data/third_party/upb/upb/port.c +0 -26
@@ -302,7 +302,7 @@ static grpc_error* message_size_init_call_elem(
302
302
  static void message_size_destroy_call_elem(
303
303
  grpc_call_element* elem, const grpc_call_final_info* /*final_info*/,
304
304
  grpc_closure* /*ignored*/) {
305
- call_data* calld = (call_data*)elem->call_data;
305
+ call_data* calld = static_cast<call_data*>(elem->call_data);
306
306
  calld->~call_data();
307
307
  }
308
308
 
@@ -192,7 +192,7 @@ static bool register_workaround_cronet_compression(
192
192
  if (a == nullptr) {
193
193
  return true;
194
194
  }
195
- if (grpc_channel_arg_get_bool(a, false) == false) {
195
+ if (!grpc_channel_arg_get_bool(a, false)) {
196
196
  return true;
197
197
  }
198
198
  return grpc_channel_stack_builder_prepend_filter(
@@ -42,7 +42,7 @@ grpc_workaround_user_agent_md* grpc_parse_user_agent(grpc_mdelem md) {
42
42
  user_agent_md->workaround_active[i] = ua_parser[i](md);
43
43
  }
44
44
  }
45
- grpc_mdelem_set_user_data(md, destroy_user_agent_md, (void*)user_agent_md);
45
+ grpc_mdelem_set_user_data(md, destroy_user_agent_md, user_agent_md);
46
46
 
47
47
  return user_agent_md;
48
48
  }
@@ -26,7 +26,7 @@ grpc_channel_args* grpc_default_authority_add_if_not_present(
26
26
  grpc_channel_args_find(args, GRPC_ARG_DEFAULT_AUTHORITY) != nullptr;
27
27
  grpc_arg new_args[1];
28
28
  size_t num_new_args = 0;
29
- grpc_core::UniquePtr<char> default_authority;
29
+ std::string default_authority;
30
30
  if (!has_default_authority) {
31
31
  const grpc_arg* server_uri_arg =
32
32
  grpc_channel_args_find(args, GRPC_ARG_SERVER_URI);
@@ -34,9 +34,9 @@ grpc_channel_args* grpc_default_authority_add_if_not_present(
34
34
  GPR_ASSERT(server_uri_str != nullptr);
35
35
  default_authority =
36
36
  grpc_core::ResolverRegistry::GetDefaultAuthority(server_uri_str);
37
- GPR_ASSERT(default_authority != nullptr);
38
37
  new_args[num_new_args++] = grpc_channel_arg_string_create(
39
- const_cast<char*>(GRPC_ARG_DEFAULT_AUTHORITY), default_authority.get());
38
+ const_cast<char*>(GRPC_ARG_DEFAULT_AUTHORITY),
39
+ const_cast<char*>(default_authority.c_str()));
40
40
  }
41
41
  return grpc_channel_args_copy_and_add(args, new_args, num_new_args);
42
42
  }
@@ -178,7 +178,7 @@ void Chttp2Connector::OnHandshakeDone(void* arg, grpc_error* error) {
178
178
  self->Ref().release(); // Ref held by OnTimeout()
179
179
  grpc_chttp2_transport_start_reading(self->result_->transport,
180
180
  args->read_buffer,
181
- &self->on_receive_settings_);
181
+ &self->on_receive_settings_, nullptr);
182
182
  GRPC_CLOSURE_INIT(&self->on_timeout_, OnTimeout, self,
183
183
  grpc_schedule_on_exec_ctx);
184
184
  grpc_timer_init(&self->timer_, self->args_.deadline, &self->on_timeout_);
@@ -220,7 +220,7 @@ void Chttp2Connector::OnReceiveSettings(void* arg, grpc_error* error) {
220
220
  self->Unref();
221
221
  }
222
222
 
223
- void Chttp2Connector::OnTimeout(void* arg, grpc_error* error) {
223
+ void Chttp2Connector::OnTimeout(void* arg, grpc_error* /*error*/) {
224
224
  Chttp2Connector* self = static_cast<Chttp2Connector*>(arg);
225
225
  {
226
226
  MutexLock lock(&self->mu_);
@@ -30,7 +30,7 @@ namespace grpc_core {
30
30
  class Chttp2Connector : public SubchannelConnector {
31
31
  public:
32
32
  Chttp2Connector();
33
- ~Chttp2Connector();
33
+ ~Chttp2Connector() override;
34
34
 
35
35
  void Connect(const Args& args, Result* result, grpc_closure* notify) override;
36
36
  void Shutdown(grpc_error* error) override;
@@ -37,10 +37,11 @@ namespace grpc_core {
37
37
 
38
38
  class Chttp2InsecureClientChannelFactory : public ClientChannelFactory {
39
39
  public:
40
- Subchannel* CreateSubchannel(const grpc_channel_args* args) override {
40
+ RefCountedPtr<Subchannel> CreateSubchannel(
41
+ const grpc_channel_args* args) override {
41
42
  grpc_channel_args* new_args =
42
43
  grpc_default_authority_add_if_not_present(args);
43
- Subchannel* s =
44
+ RefCountedPtr<Subchannel> s =
44
45
  Subchannel::Create(MakeOrphanable<Chttp2Connector>(), new_args);
45
46
  grpc_channel_args_destroy(new_args);
46
47
  return s;
@@ -49,9 +50,13 @@ class Chttp2InsecureClientChannelFactory : public ClientChannelFactory {
49
50
 
50
51
  namespace {
51
52
 
52
- grpc_channel* CreateChannel(const char* target, const grpc_channel_args* args) {
53
+ grpc_channel* CreateChannel(const char* target, const grpc_channel_args* args,
54
+ grpc_error** error) {
53
55
  if (target == nullptr) {
54
56
  gpr_log(GPR_ERROR, "cannot create channel with NULL target name");
57
+ if (error != nullptr) {
58
+ *error = GRPC_ERROR_CREATE_FROM_STATIC_STRING("channel target is NULL");
59
+ }
55
60
  return nullptr;
56
61
  }
57
62
  // Add channel arg containing the server URI.
@@ -62,8 +67,8 @@ grpc_channel* CreateChannel(const char* target, const grpc_channel_args* args) {
62
67
  const char* to_remove[] = {GRPC_ARG_SERVER_URI};
63
68
  grpc_channel_args* new_args =
64
69
  grpc_channel_args_copy_and_add_and_remove(args, to_remove, 1, &arg, 1);
65
- grpc_channel* channel =
66
- grpc_channel_create(target, new_args, GRPC_CLIENT_CHANNEL, nullptr);
70
+ grpc_channel* channel = grpc_channel_create(
71
+ target, new_args, GRPC_CLIENT_CHANNEL, nullptr, nullptr, error);
67
72
  grpc_channel_args_destroy(new_args);
68
73
  return channel;
69
74
  }
@@ -101,12 +106,20 @@ grpc_channel* grpc_insecure_channel_create(const char* target,
101
106
  const char* arg_to_remove = arg.key;
102
107
  grpc_channel_args* new_args = grpc_channel_args_copy_and_add_and_remove(
103
108
  args, &arg_to_remove, 1, &arg, 1);
109
+ grpc_error* error = GRPC_ERROR_NONE;
104
110
  // Create channel.
105
- grpc_channel* channel = grpc_core::CreateChannel(target, new_args);
111
+ grpc_channel* channel = grpc_core::CreateChannel(target, new_args, &error);
106
112
  // Clean up.
107
113
  grpc_channel_args_destroy(new_args);
108
- return channel != nullptr ? channel
109
- : grpc_lame_client_channel_create(
110
- target, GRPC_STATUS_INTERNAL,
111
- "Failed to create client channel");
114
+ if (channel == nullptr) {
115
+ intptr_t integer;
116
+ grpc_status_code status = GRPC_STATUS_INTERNAL;
117
+ if (grpc_error_get_int(error, GRPC_ERROR_INT_GRPC_STATUS, &integer)) {
118
+ status = static_cast<grpc_status_code>(integer);
119
+ }
120
+ GRPC_ERROR_UNREF(error);
121
+ channel = grpc_lame_client_channel_create(
122
+ target, status, "Failed to create client channel");
123
+ }
124
+ return channel;
112
125
  }
@@ -42,7 +42,8 @@ grpc_channel* grpc_insecure_channel_create_from_fd(
42
42
  (target, fd, args));
43
43
 
44
44
  grpc_arg default_authority_arg = grpc_channel_arg_string_create(
45
- (char*)GRPC_ARG_DEFAULT_AUTHORITY, (char*)"test.authority");
45
+ const_cast<char*>(GRPC_ARG_DEFAULT_AUTHORITY),
46
+ const_cast<char*>("test.authority"));
46
47
  grpc_channel_args* final_args =
47
48
  grpc_channel_args_copy_and_add(args, &default_authority_arg, 1);
48
49
 
@@ -55,17 +56,27 @@ grpc_channel* grpc_insecure_channel_create_from_fd(
55
56
  grpc_transport* transport =
56
57
  grpc_create_chttp2_transport(final_args, client, true);
57
58
  GPR_ASSERT(transport);
58
- grpc_channel* channel = grpc_channel_create(
59
- target, final_args, GRPC_CLIENT_DIRECT_CHANNEL, transport);
59
+ grpc_error* error = nullptr;
60
+ grpc_channel* channel =
61
+ grpc_channel_create(target, final_args, GRPC_CLIENT_DIRECT_CHANNEL,
62
+ transport, nullptr, &error);
60
63
  grpc_channel_args_destroy(final_args);
61
- grpc_chttp2_transport_start_reading(transport, nullptr, nullptr);
64
+ if (channel != nullptr) {
65
+ grpc_chttp2_transport_start_reading(transport, nullptr, nullptr, nullptr);
66
+ grpc_core::ExecCtx::Get()->Flush();
67
+ } else {
68
+ intptr_t integer;
69
+ grpc_status_code status = GRPC_STATUS_INTERNAL;
70
+ if (grpc_error_get_int(error, GRPC_ERROR_INT_GRPC_STATUS, &integer)) {
71
+ status = static_cast<grpc_status_code>(integer);
72
+ }
73
+ GRPC_ERROR_UNREF(error);
74
+ grpc_transport_destroy(transport);
75
+ channel = grpc_lame_client_channel_create(
76
+ target, status, "Failed to create client channel");
77
+ }
62
78
 
63
- grpc_core::ExecCtx::Get()->Flush();
64
-
65
- return channel != nullptr ? channel
66
- : grpc_lame_client_channel_create(
67
- target, GRPC_STATUS_INTERNAL,
68
- "Failed to create client channel");
79
+ return channel;
69
80
  }
70
81
 
71
82
  #else // !GPR_SUPPORT_CHANNELS_FROM_FD
@@ -43,14 +43,15 @@ namespace grpc_core {
43
43
 
44
44
  class Chttp2SecureClientChannelFactory : public ClientChannelFactory {
45
45
  public:
46
- Subchannel* CreateSubchannel(const grpc_channel_args* args) override {
46
+ RefCountedPtr<Subchannel> CreateSubchannel(
47
+ const grpc_channel_args* args) override {
47
48
  grpc_channel_args* new_args = GetSecureNamingChannelArgs(args);
48
49
  if (new_args == nullptr) {
49
50
  gpr_log(GPR_ERROR,
50
51
  "Failed to create channel args during subchannel creation.");
51
52
  return nullptr;
52
53
  }
53
- Subchannel* s =
54
+ RefCountedPtr<Subchannel> s =
54
55
  Subchannel::Create(MakeOrphanable<Chttp2Connector>(), new_args);
55
56
  grpc_channel_args_destroy(new_args);
56
57
  return s;
@@ -78,9 +79,8 @@ class Chttp2SecureClientChannelFactory : public ClientChannelFactory {
78
79
  // First, check the authority override channel arg.
79
80
  // Otherwise, get it from the server name used to construct the
80
81
  // channel.
81
- grpc_core::UniquePtr<char> authority(
82
- gpr_strdup(FindAuthorityOverrideInArgs(args)));
83
- if (authority == nullptr) {
82
+ std::string authority(FindAuthorityOverrideInArgs(args));
83
+ if (authority.empty()) {
84
84
  const char* server_uri_str =
85
85
  grpc_channel_args_find_string(args, GRPC_ARG_SERVER_URI);
86
86
  GPR_ASSERT(server_uri_str != nullptr);
@@ -92,7 +92,8 @@ class Chttp2SecureClientChannelFactory : public ClientChannelFactory {
92
92
  // If the channel args don't already contain GRPC_ARG_DEFAULT_AUTHORITY,
93
93
  // add the arg, setting it to the value just obtained.
94
94
  args_to_add[num_args_to_add++] = grpc_channel_arg_string_create(
95
- const_cast<char*>(GRPC_ARG_DEFAULT_AUTHORITY), authority.get());
95
+ const_cast<char*>(GRPC_ARG_DEFAULT_AUTHORITY),
96
+ const_cast<char*>(authority.c_str()));
96
97
  }
97
98
  grpc_channel_args* args_with_authority =
98
99
  grpc_channel_args_copy_and_add(args, args_to_add, num_args_to_add);
@@ -101,12 +102,12 @@ class Chttp2SecureClientChannelFactory : public ClientChannelFactory {
101
102
  RefCountedPtr<grpc_channel_security_connector>
102
103
  subchannel_security_connector =
103
104
  channel_credentials->create_security_connector(
104
- /*call_creds=*/nullptr, authority.get(), args_with_authority,
105
+ /*call_creds=*/nullptr, authority.c_str(), args_with_authority,
105
106
  &new_args_from_connector);
106
107
  if (subchannel_security_connector == nullptr) {
107
108
  gpr_log(GPR_ERROR,
108
109
  "Failed to create secure subchannel for secure name '%s'",
109
- authority.get());
110
+ authority.c_str());
110
111
  grpc_channel_args_destroy(args_with_authority);
111
112
  return nullptr;
112
113
  }
@@ -127,9 +128,13 @@ class Chttp2SecureClientChannelFactory : public ClientChannelFactory {
127
128
 
128
129
  namespace {
129
130
 
130
- grpc_channel* CreateChannel(const char* target, const grpc_channel_args* args) {
131
+ grpc_channel* CreateChannel(const char* target, const grpc_channel_args* args,
132
+ grpc_error** error) {
131
133
  if (target == nullptr) {
132
134
  gpr_log(GPR_ERROR, "cannot create channel with NULL target name");
135
+ if (error != nullptr) {
136
+ *error = GRPC_ERROR_CREATE_FROM_STATIC_STRING("channel target is NULL");
137
+ }
133
138
  return nullptr;
134
139
  }
135
140
  // Add channel arg containing the server URI.
@@ -140,8 +145,8 @@ grpc_channel* CreateChannel(const char* target, const grpc_channel_args* args) {
140
145
  const char* to_remove[] = {GRPC_ARG_SERVER_URI};
141
146
  grpc_channel_args* new_args =
142
147
  grpc_channel_args_copy_and_add_and_remove(args, to_remove, 1, &arg, 1);
143
- grpc_channel* channel =
144
- grpc_channel_create(target, new_args, GRPC_CLIENT_CHANNEL, nullptr);
148
+ grpc_channel* channel = grpc_channel_create(
149
+ target, new_args, GRPC_CLIENT_CHANNEL, nullptr, nullptr, error);
145
150
  grpc_channel_args_destroy(new_args);
146
151
  return channel;
147
152
  }
@@ -176,6 +181,7 @@ grpc_channel* grpc_secure_channel_create(grpc_channel_credentials* creds,
176
181
  4, ((void*)creds, target, (void*)args, (void*)reserved));
177
182
  GPR_ASSERT(reserved == nullptr);
178
183
  grpc_channel* channel = nullptr;
184
+ grpc_error* error = GRPC_ERROR_NONE;
179
185
  if (creds != nullptr) {
180
186
  // Add channel args containing the client channel factory and channel
181
187
  // credentials.
@@ -189,12 +195,19 @@ grpc_channel* grpc_secure_channel_create(grpc_channel_credentials* creds,
189
195
  args, &arg_to_remove, 1, args_to_add, GPR_ARRAY_SIZE(args_to_add));
190
196
  new_args = creds->update_arguments(new_args);
191
197
  // Create channel.
192
- channel = grpc_core::CreateChannel(target, new_args);
198
+ channel = grpc_core::CreateChannel(target, new_args, &error);
193
199
  // Clean up.
194
200
  grpc_channel_args_destroy(new_args);
195
201
  }
196
- return channel != nullptr ? channel
197
- : grpc_lame_client_channel_create(
198
- target, GRPC_STATUS_INTERNAL,
199
- "Failed to create secure client channel");
202
+ if (channel == nullptr) {
203
+ intptr_t integer;
204
+ grpc_status_code status = GRPC_STATUS_INTERNAL;
205
+ if (grpc_error_get_int(error, GRPC_ERROR_INT_GRPC_STATUS, &integer)) {
206
+ status = static_cast<grpc_status_code>(integer);
207
+ }
208
+ GRPC_ERROR_UNREF(error);
209
+ channel = grpc_lame_client_channel_create(
210
+ target, status, "Failed to create secure client channel");
211
+ }
212
+ return channel;
200
213
  }
@@ -25,6 +25,7 @@
25
25
  #include <string.h>
26
26
  #include <vector>
27
27
 
28
+ #include "absl/strings/match.h"
28
29
  #include "absl/strings/str_cat.h"
29
30
  #include "absl/strings/str_format.h"
30
31
 
@@ -45,7 +46,9 @@
45
46
  #include "src/core/lib/iomgr/endpoint.h"
46
47
  #include "src/core/lib/iomgr/resolve_address.h"
47
48
  #include "src/core/lib/iomgr/resource_quota.h"
49
+ #include "src/core/lib/iomgr/sockaddr_utils.h"
48
50
  #include "src/core/lib/iomgr/tcp_server.h"
51
+ #include "src/core/lib/iomgr/unix_sockets_posix.h"
49
52
  #include "src/core/lib/slice/slice_internal.h"
50
53
  #include "src/core/lib/surface/api_trace.h"
51
54
  #include "src/core/lib/surface/server.h"
@@ -53,17 +56,24 @@
53
56
  namespace grpc_core {
54
57
  namespace {
55
58
 
59
+ const char kUnixUriPrefix[] = "unix:";
60
+ const char kUnixAbstractUriPrefix[] = "unix-abstract:";
61
+
56
62
  class Chttp2ServerListener : public Server::ListenerInterface {
57
63
  public:
58
- static grpc_error* Create(Server* server, const char* addr,
59
- grpc_channel_args* args, int* port_num);
64
+ static grpc_error* Create(Server* server, grpc_resolved_address* addr,
65
+ grpc_channel_args* args,
66
+ Chttp2ServerArgsModifier args_modifier,
67
+ int* port_num);
60
68
 
61
69
  static grpc_error* CreateWithAcceptor(Server* server, const char* name,
62
- grpc_channel_args* args);
70
+ grpc_channel_args* args,
71
+ Chttp2ServerArgsModifier args_modifier);
63
72
 
64
73
  // Do not instantiate directly. Use one of the factory methods above.
65
- Chttp2ServerListener(Server* server, grpc_channel_args* args);
66
- ~Chttp2ServerListener();
74
+ Chttp2ServerListener(Server* server, grpc_channel_args* args,
75
+ Chttp2ServerArgsModifier args_modifier);
76
+ ~Chttp2ServerListener() override;
67
77
 
68
78
  void Start(Server* server,
69
79
  const std::vector<grpc_pollset*>* pollsets) override;
@@ -77,58 +87,212 @@ class Chttp2ServerListener : public Server::ListenerInterface {
77
87
  void Orphan() override;
78
88
 
79
89
  private:
80
- class ConnectionState : public RefCounted<ConnectionState> {
90
+ class ConfigFetcherWatcher
91
+ : public grpc_server_config_fetcher::WatcherInterface {
81
92
  public:
82
- ConnectionState(Chttp2ServerListener* listener,
83
- grpc_pollset* accepting_pollset,
84
- grpc_tcp_server_acceptor* acceptor,
85
- RefCountedPtr<HandshakeManager> handshake_mgr,
86
- grpc_channel_args* args, grpc_endpoint* endpoint);
93
+ explicit ConfigFetcherWatcher(RefCountedPtr<Chttp2ServerListener> listener)
94
+ : listener_(std::move(listener)) {}
95
+
96
+ void UpdateConnectionManager(
97
+ RefCountedPtr<grpc_server_config_fetcher::ConnectionManager>
98
+ connection_manager) override;
87
99
 
88
- ~ConnectionState();
100
+ void StopServing() override;
89
101
 
90
102
  private:
91
- static void OnTimeout(void* arg, grpc_error* error);
92
- static void OnReceiveSettings(void* arg, grpc_error* error);
93
- static void OnHandshakeDone(void* arg, grpc_error* error);
94
-
95
- Chttp2ServerListener* const listener_;
96
- grpc_pollset* const accepting_pollset_;
97
- grpc_tcp_server_acceptor* const acceptor_;
98
- RefCountedPtr<HandshakeManager> handshake_mgr_;
99
- // State for enforcing handshake timeout on receiving HTTP/2 settings.
100
- grpc_chttp2_transport* transport_ = nullptr;
101
- grpc_millis deadline_;
102
- grpc_timer timer_;
103
- grpc_closure on_timeout_;
104
- grpc_closure on_receive_settings_;
105
- grpc_pollset_set* const interested_parties_;
103
+ RefCountedPtr<Chttp2ServerListener> listener_;
106
104
  };
107
105
 
106
+ class ActiveConnection : public InternallyRefCounted<ActiveConnection> {
107
+ public:
108
+ class HandshakingState : public InternallyRefCounted<HandshakingState> {
109
+ public:
110
+ HandshakingState(RefCountedPtr<ActiveConnection> connection_ref,
111
+ grpc_pollset* accepting_pollset,
112
+ grpc_tcp_server_acceptor* acceptor,
113
+ grpc_channel_args* args);
114
+
115
+ ~HandshakingState() override;
116
+
117
+ void Orphan() override;
118
+
119
+ void Start(grpc_endpoint* endpoint, grpc_channel_args* args);
120
+
121
+ // Needed to be able to grab an external ref in ActiveConnection::Start()
122
+ using InternallyRefCounted<HandshakingState>::Ref;
123
+
124
+ private:
125
+ static void OnTimeout(void* arg, grpc_error* error);
126
+ static void OnReceiveSettings(void* arg, grpc_error* /* error */);
127
+ static void OnHandshakeDone(void* arg, grpc_error* error);
128
+ RefCountedPtr<ActiveConnection> const connection_;
129
+ grpc_pollset* const accepting_pollset_;
130
+ grpc_tcp_server_acceptor* const acceptor_;
131
+ RefCountedPtr<HandshakeManager> handshake_mgr_
132
+ ABSL_GUARDED_BY(&connection_->mu_);
133
+ // State for enforcing handshake timeout on receiving HTTP/2 settings.
134
+ grpc_millis const deadline_;
135
+ grpc_timer timer_ ABSL_GUARDED_BY(&connection_->mu_);
136
+ grpc_closure on_timeout_ ABSL_GUARDED_BY(&connection_->mu_);
137
+ grpc_closure on_receive_settings_ ABSL_GUARDED_BY(&connection_->mu_);
138
+ grpc_pollset_set* const interested_parties_;
139
+ };
140
+
141
+ ActiveConnection(grpc_pollset* accepting_pollset,
142
+ grpc_tcp_server_acceptor* acceptor,
143
+ grpc_channel_args* args);
144
+ ~ActiveConnection() override;
145
+
146
+ void Orphan() override;
147
+
148
+ void SendGoAway();
149
+
150
+ void Start(RefCountedPtr<Chttp2ServerListener> listener,
151
+ grpc_endpoint* endpoint, grpc_channel_args* args);
152
+
153
+ // Needed to be able to grab an external ref in
154
+ // Chttp2ServerListener::OnAccept()
155
+ using InternallyRefCounted<ActiveConnection>::Ref;
156
+
157
+ private:
158
+ static void OnClose(void* arg, grpc_error* error);
159
+
160
+ RefCountedPtr<Chttp2ServerListener> listener_;
161
+ Mutex mu_ ABSL_ACQUIRED_AFTER(&listener_->mu_);
162
+ // Set by HandshakingState before the handshaking begins and reset when
163
+ // handshaking is done.
164
+ OrphanablePtr<HandshakingState> handshaking_state_ ABSL_GUARDED_BY(&mu_);
165
+ // Set by HandshakingState when handshaking is done and a valid transport is
166
+ // created.
167
+ grpc_chttp2_transport* transport_ ABSL_GUARDED_BY(&mu_) = nullptr;
168
+ grpc_closure on_close_;
169
+ bool shutdown_ ABSL_GUARDED_BY(&mu_) = false;
170
+ };
171
+
172
+ // To allow access to RefCounted<> like interface.
173
+ friend class RefCountedPtr<Chttp2ServerListener>;
174
+
175
+ // Should only be called once so as to start the TCP server.
176
+ void StartListening();
177
+
108
178
  static void OnAccept(void* arg, grpc_endpoint* tcp,
109
179
  grpc_pollset* accepting_pollset,
110
180
  grpc_tcp_server_acceptor* acceptor);
111
181
 
112
- RefCountedPtr<HandshakeManager> CreateHandshakeManager();
113
-
114
182
  static void TcpServerShutdownComplete(void* arg, grpc_error* error);
115
183
 
116
184
  static void DestroyListener(Server* /*server*/, void* arg,
117
185
  grpc_closure* destroy_done);
118
186
 
187
+ // The interface required by RefCountedPtr<> has been manually implemented
188
+ // here to take a ref on tcp_server_ instead. Note that, the handshaker needs
189
+ // tcp_server_ to exist for the lifetime of the handshake since it's needed by
190
+ // acceptor. Sharing refs between the listener and tcp_server_ is just an
191
+ // optimization to avoid taking additional refs on the listener, since
192
+ // TcpServerShutdownComplete already holds a ref to the listener.
193
+ void IncrementRefCount() { grpc_tcp_server_ref(tcp_server_); }
194
+ void IncrementRefCount(const DebugLocation& /* location */,
195
+ const char* /* reason */) {
196
+ IncrementRefCount();
197
+ }
198
+
199
+ RefCountedPtr<Chttp2ServerListener> Ref() GRPC_MUST_USE_RESULT {
200
+ IncrementRefCount();
201
+ return RefCountedPtr<Chttp2ServerListener>(this);
202
+ }
203
+ RefCountedPtr<Chttp2ServerListener> Ref(const DebugLocation& /* location */,
204
+ const char* /* reason */)
205
+ GRPC_MUST_USE_RESULT {
206
+ return Ref();
207
+ }
208
+
209
+ void Unref() { grpc_tcp_server_unref(tcp_server_); }
210
+ void Unref(const DebugLocation& /* location */, const char* /* reason */) {
211
+ Unref();
212
+ }
213
+
119
214
  Server* const server_;
120
- grpc_channel_args* const args_;
121
215
  grpc_tcp_server* tcp_server_;
216
+ grpc_resolved_address resolved_address_;
217
+ Chttp2ServerArgsModifier const args_modifier_;
218
+ ConfigFetcherWatcher* config_fetcher_watcher_ = nullptr;
219
+ Mutex channel_args_mu_;
220
+ grpc_channel_args* args_ ABSL_GUARDED_BY(channel_args_mu_);
221
+ RefCountedPtr<grpc_server_config_fetcher::ConnectionManager>
222
+ connection_manager_ ABSL_GUARDED_BY(channel_args_mu_);
122
223
  Mutex mu_;
123
- bool shutdown_ = true;
124
- grpc_closure tcp_server_shutdown_complete_;
125
- grpc_closure* on_destroy_done_ = nullptr;
126
- HandshakeManager* pending_handshake_mgrs_ = nullptr;
224
+ // Signals whether grpc_tcp_server_start() has been called.
225
+ bool started_ ABSL_GUARDED_BY(mu_) = false;
226
+ // Signals whether grpc_tcp_server_start() has completed.
227
+ CondVar started_cv_ ABSL_GUARDED_BY(mu_);
228
+ // Signals whether new requests/connections are to be accepted.
229
+ bool is_serving_ ABSL_GUARDED_BY(mu_) = false;
230
+ // Signals whether the application has triggered shutdown.
231
+ bool shutdown_ ABSL_GUARDED_BY(mu_) = false;
232
+ std::map<ActiveConnection*, OrphanablePtr<ActiveConnection>> connections_
233
+ ABSL_GUARDED_BY(mu_);
234
+ grpc_closure tcp_server_shutdown_complete_ ABSL_GUARDED_BY(mu_);
235
+ grpc_closure* on_destroy_done_ ABSL_GUARDED_BY(mu_) = nullptr;
127
236
  RefCountedPtr<channelz::ListenSocketNode> channelz_listen_socket_;
128
237
  };
129
238
 
130
239
  //
131
- // Chttp2ServerListener::ConnectionState
240
+ // Chttp2ServerListener::ConfigFetcherWatcher
241
+ //
242
+
243
+ void Chttp2ServerListener::ConfigFetcherWatcher::UpdateConnectionManager(
244
+ RefCountedPtr<grpc_server_config_fetcher::ConnectionManager>
245
+ connection_manager) {
246
+ RefCountedPtr<grpc_server_config_fetcher::ConnectionManager>
247
+ connection_manager_to_destroy;
248
+ {
249
+ MutexLock lock(&listener_->channel_args_mu_);
250
+ connection_manager_to_destroy = listener_->connection_manager_;
251
+ listener_->connection_manager_ = std::move(connection_manager);
252
+ }
253
+ {
254
+ MutexLock lock(&listener_->mu_);
255
+ if (listener_->shutdown_) {
256
+ return;
257
+ }
258
+ listener_->is_serving_ = true;
259
+ if (listener_->started_) return;
260
+ }
261
+ int port_temp;
262
+ grpc_error* error = grpc_tcp_server_add_port(
263
+ listener_->tcp_server_, &listener_->resolved_address_, &port_temp);
264
+ if (error != GRPC_ERROR_NONE) {
265
+ GRPC_ERROR_UNREF(error);
266
+ gpr_log(GPR_ERROR, "Error adding port to server: %s",
267
+ grpc_error_string(error));
268
+ // TODO(yashykt): We wouldn't need to assert here if we bound to the
269
+ // port earlier during AddPort.
270
+ GPR_ASSERT(0);
271
+ }
272
+ listener_->StartListening();
273
+ {
274
+ MutexLock lock(&listener_->mu_);
275
+ listener_->started_ = true;
276
+ listener_->started_cv_.SignalAll();
277
+ }
278
+ }
279
+
280
+ void Chttp2ServerListener::ConfigFetcherWatcher::StopServing() {
281
+ std::map<ActiveConnection*, OrphanablePtr<ActiveConnection>> connections;
282
+ {
283
+ MutexLock lock(&listener_->mu_);
284
+ listener_->is_serving_ = false;
285
+ connections = std::move(listener_->connections_);
286
+ }
287
+ // Send GOAWAYs on the transports so that they disconnected when existing RPCs
288
+ // finish.
289
+ for (auto& connection : connections) {
290
+ connection.first->SendGoAway();
291
+ }
292
+ }
293
+
294
+ //
295
+ // Chttp2ServerListener::ActiveConnection::HandshakingState
132
296
  //
133
297
 
134
298
  grpc_millis GetConnectionDeadline(const grpc_channel_args* args) {
@@ -138,73 +302,96 @@ grpc_millis GetConnectionDeadline(const grpc_channel_args* args) {
138
302
  return ExecCtx::Get()->Now() + timeout_ms;
139
303
  }
140
304
 
141
- Chttp2ServerListener::ConnectionState::ConnectionState(
142
- Chttp2ServerListener* listener, grpc_pollset* accepting_pollset,
143
- grpc_tcp_server_acceptor* acceptor,
144
- RefCountedPtr<HandshakeManager> handshake_mgr, grpc_channel_args* args,
145
- grpc_endpoint* endpoint)
146
- : listener_(listener),
305
+ Chttp2ServerListener::ActiveConnection::HandshakingState::HandshakingState(
306
+ RefCountedPtr<ActiveConnection> connection_ref,
307
+ grpc_pollset* accepting_pollset, grpc_tcp_server_acceptor* acceptor,
308
+ grpc_channel_args* args)
309
+ : connection_(std::move(connection_ref)),
147
310
  accepting_pollset_(accepting_pollset),
148
311
  acceptor_(acceptor),
149
- handshake_mgr_(std::move(handshake_mgr)),
312
+ handshake_mgr_(MakeRefCounted<HandshakeManager>()),
150
313
  deadline_(GetConnectionDeadline(args)),
151
314
  interested_parties_(grpc_pollset_set_create()) {
152
315
  grpc_pollset_set_add_pollset(interested_parties_, accepting_pollset_);
153
316
  HandshakerRegistry::AddHandshakers(HANDSHAKER_SERVER, args,
154
317
  interested_parties_, handshake_mgr_.get());
155
- handshake_mgr_->DoHandshake(endpoint, args, deadline_, acceptor_,
156
- OnHandshakeDone, this);
157
318
  }
158
319
 
159
- Chttp2ServerListener::ConnectionState::~ConnectionState() {
160
- if (transport_ != nullptr) {
161
- GRPC_CHTTP2_UNREF_TRANSPORT(transport_, "receive settings timeout");
162
- }
320
+ Chttp2ServerListener::ActiveConnection::HandshakingState::~HandshakingState() {
163
321
  grpc_pollset_set_del_pollset(interested_parties_, accepting_pollset_);
164
322
  grpc_pollset_set_destroy(interested_parties_);
165
323
  }
166
324
 
167
- void Chttp2ServerListener::ConnectionState::OnTimeout(void* arg,
168
- grpc_error* error) {
169
- ConnectionState* self = static_cast<ConnectionState*>(arg);
325
+ void Chttp2ServerListener::ActiveConnection::HandshakingState::Orphan() {
326
+ {
327
+ MutexLock lock(&connection_->mu_);
328
+ if (handshake_mgr_ != nullptr) {
329
+ handshake_mgr_->Shutdown(
330
+ GRPC_ERROR_CREATE_FROM_STATIC_STRING("Listener stopped serving."));
331
+ }
332
+ }
333
+ Unref();
334
+ }
335
+
336
+ void Chttp2ServerListener::ActiveConnection::HandshakingState::Start(
337
+ grpc_endpoint* endpoint, grpc_channel_args* args) {
338
+ Ref().release(); // Held by OnHandshakeDone
339
+ RefCountedPtr<HandshakeManager> handshake_mgr;
340
+ {
341
+ MutexLock lock(&connection_->mu_);
342
+ if (handshake_mgr_ == nullptr) return;
343
+ handshake_mgr = handshake_mgr_;
344
+ }
345
+ handshake_mgr->DoHandshake(endpoint, args, deadline_, acceptor_,
346
+ OnHandshakeDone, this);
347
+ }
348
+
349
+ void Chttp2ServerListener::ActiveConnection::HandshakingState::OnTimeout(
350
+ void* arg, grpc_error* error) {
351
+ HandshakingState* self = static_cast<HandshakingState*>(arg);
170
352
  // Note that we may be called with GRPC_ERROR_NONE when the timer fires
171
353
  // or with an error indicating that the timer system is being shut down.
172
354
  if (error != GRPC_ERROR_CANCELLED) {
173
355
  grpc_transport_op* op = grpc_make_transport_op(nullptr);
174
356
  op->disconnect_with_error = GRPC_ERROR_CREATE_FROM_STATIC_STRING(
175
357
  "Did not receive HTTP/2 settings before handshake timeout");
176
- grpc_transport_perform_op(&self->transport_->base, op);
358
+ grpc_chttp2_transport* transport = nullptr;
359
+ {
360
+ MutexLock lock(&self->connection_->mu_);
361
+ transport = self->connection_->transport_;
362
+ }
363
+ grpc_transport_perform_op(&transport->base, op);
177
364
  }
178
365
  self->Unref();
179
366
  }
180
367
 
181
- void Chttp2ServerListener::ConnectionState::OnReceiveSettings(
182
- void* arg, grpc_error* error) {
183
- ConnectionState* self = static_cast<ConnectionState*>(arg);
184
- if (error == GRPC_ERROR_NONE) {
185
- grpc_timer_cancel(&self->timer_);
186
- }
368
+ void Chttp2ServerListener::ActiveConnection::HandshakingState::
369
+ OnReceiveSettings(void* arg, grpc_error* /* error */) {
370
+ HandshakingState* self = static_cast<HandshakingState*>(arg);
371
+ grpc_timer_cancel(&self->timer_);
187
372
  self->Unref();
188
373
  }
189
374
 
190
- void Chttp2ServerListener::ConnectionState::OnHandshakeDone(void* arg,
191
- grpc_error* error) {
375
+ void Chttp2ServerListener::ActiveConnection::HandshakingState::OnHandshakeDone(
376
+ void* arg, grpc_error* error) {
192
377
  auto* args = static_cast<HandshakerArgs*>(arg);
193
- ConnectionState* self = static_cast<ConnectionState*>(args->user_data);
378
+ HandshakingState* self = static_cast<HandshakingState*>(args->user_data);
379
+ OrphanablePtr<HandshakingState> handshaking_state_ref;
380
+ RefCountedPtr<HandshakeManager> handshake_mgr;
381
+ bool cleanup_connection = false;
382
+ bool free_resource_quota = false;
383
+ grpc_resource_user* resource_user =
384
+ self->connection_->listener_->server_->default_resource_user();
194
385
  {
195
- MutexLock lock(&self->listener_->mu_);
196
- grpc_resource_user* resource_user =
197
- self->listener_->server_->default_resource_user();
198
- if (error != GRPC_ERROR_NONE || self->listener_->shutdown_) {
386
+ MutexLock connection_lock(&self->connection_->mu_);
387
+ if (error != GRPC_ERROR_NONE || self->connection_->shutdown_) {
199
388
  const char* error_str = grpc_error_string(error);
200
389
  gpr_log(GPR_DEBUG, "Handshaking failed: %s", error_str);
201
- if (resource_user != nullptr) {
202
- grpc_resource_user_free(resource_user,
203
- GRPC_RESOURCE_QUOTA_CHANNEL_SIZE);
204
- }
390
+ cleanup_connection = true;
391
+ free_resource_quota = true;
205
392
  if (error == GRPC_ERROR_NONE && args->endpoint != nullptr) {
206
- // We were shut down after handshaking completed successfully, so
207
- // destroy the endpoint here.
393
+ // We were shut down or stopped serving after handshaking completed
394
+ // successfully, so destroy the endpoint here.
208
395
  // TODO(ctiller): It is currently necessary to shutdown endpoints
209
396
  // before destroying them, even if we know that there are no
210
397
  // pending read/write callbacks. This should be fixed, at which
@@ -222,44 +409,167 @@ void Chttp2ServerListener::ConnectionState::OnHandshakeDone(void* arg,
222
409
  if (args->endpoint != nullptr) {
223
410
  grpc_transport* transport = grpc_create_chttp2_transport(
224
411
  args->args, args->endpoint, false, resource_user);
225
- self->listener_->server_->SetupTransport(
226
- transport, self->accepting_pollset_, args->args,
227
- grpc_chttp2_transport_get_socket_node(transport), resource_user);
228
- // Use notify_on_receive_settings callback to enforce the
229
- // handshake deadline.
230
- // Note: The reinterpret_cast<>s here are safe, because
231
- // grpc_chttp2_transport is a C-style extension of
232
- // grpc_transport, so this is morally equivalent of a
233
- // static_cast<> to a derived class.
234
- // TODO(roth): Change to static_cast<> when we C++-ify the
235
- // transport API.
236
- self->transport_ = reinterpret_cast<grpc_chttp2_transport*>(transport);
237
- self->Ref().release(); // Held by OnReceiveSettings().
238
- GRPC_CLOSURE_INIT(&self->on_receive_settings_, OnReceiveSettings, self,
239
- grpc_schedule_on_exec_ctx);
240
- grpc_chttp2_transport_start_reading(transport, args->read_buffer,
241
- &self->on_receive_settings_);
242
- grpc_channel_args_destroy(args->args);
243
- self->Ref().release(); // Held by OnTimeout().
244
- GRPC_CHTTP2_REF_TRANSPORT(
245
- reinterpret_cast<grpc_chttp2_transport*>(transport),
246
- "receive settings timeout");
247
- GRPC_CLOSURE_INIT(&self->on_timeout_, OnTimeout, self,
248
- grpc_schedule_on_exec_ctx);
249
- grpc_timer_init(&self->timer_, self->deadline_, &self->on_timeout_);
250
- } else {
251
- if (resource_user != nullptr) {
252
- grpc_resource_user_free(resource_user,
253
- GRPC_RESOURCE_QUOTA_CHANNEL_SIZE);
412
+ grpc_error* channel_init_err =
413
+ self->connection_->listener_->server_->SetupTransport(
414
+ transport, self->accepting_pollset_, args->args,
415
+ grpc_chttp2_transport_get_socket_node(transport),
416
+ resource_user);
417
+ if (channel_init_err == GRPC_ERROR_NONE) {
418
+ // Use notify_on_receive_settings callback to enforce the
419
+ // handshake deadline.
420
+ // Note: The reinterpret_cast<>s here are safe, because
421
+ // grpc_chttp2_transport is a C-style extension of
422
+ // grpc_transport, so this is morally equivalent of a
423
+ // static_cast<> to a derived class.
424
+ // TODO(roth): Change to static_cast<> when we C++-ify the
425
+ // transport API.
426
+ self->connection_->transport_ =
427
+ reinterpret_cast<grpc_chttp2_transport*>(transport);
428
+ GRPC_CHTTP2_REF_TRANSPORT(self->connection_->transport_,
429
+ "ActiveConnection"); // Held by connection_
430
+ self->Ref().release(); // Held by OnReceiveSettings().
431
+ GRPC_CLOSURE_INIT(&self->on_receive_settings_, OnReceiveSettings,
432
+ self, grpc_schedule_on_exec_ctx);
433
+ // If the listener has been configured with a config fetcher, we need
434
+ // to watch on the transport being closed so that we can an updated
435
+ // list of active connections.
436
+ grpc_closure* on_close = nullptr;
437
+ if (self->connection_->listener_->config_fetcher_watcher_ !=
438
+ nullptr) {
439
+ // Refs helds by OnClose()
440
+ self->connection_->Ref().release();
441
+ on_close = &self->connection_->on_close_;
442
+ } else {
443
+ // Remove the connection from the connections_ map since OnClose()
444
+ // will not be invoked when a config fetcher is set.
445
+ cleanup_connection = true;
446
+ }
447
+ grpc_chttp2_transport_start_reading(transport, args->read_buffer,
448
+ &self->on_receive_settings_,
449
+ on_close);
450
+ grpc_channel_args_destroy(args->args);
451
+ self->Ref().release(); // Held by OnTimeout().
452
+ GRPC_CLOSURE_INIT(&self->on_timeout_, OnTimeout, self,
453
+ grpc_schedule_on_exec_ctx);
454
+ grpc_timer_init(&self->timer_, self->deadline_, &self->on_timeout_);
455
+ } else {
456
+ // Failed to create channel from transport. Clean up.
457
+ gpr_log(GPR_ERROR, "Failed to create channel: %s",
458
+ grpc_error_string(channel_init_err));
459
+ GRPC_ERROR_UNREF(channel_init_err);
460
+ grpc_transport_destroy(transport);
461
+ grpc_slice_buffer_destroy_internal(args->read_buffer);
462
+ gpr_free(args->read_buffer);
463
+ cleanup_connection = true;
464
+ free_resource_quota = true;
465
+ grpc_channel_args_destroy(args->args);
254
466
  }
467
+ } else {
468
+ cleanup_connection = true;
469
+ free_resource_quota = true;
255
470
  }
256
471
  }
257
- self->handshake_mgr_->RemoveFromPendingMgrList(
258
- &self->listener_->pending_handshake_mgrs_);
472
+ // Since the handshake manager is done, the connection no longer needs to
473
+ // shutdown the handshake when the listener needs to stop serving.
474
+ // Avoid calling the destructor of HandshakeManager and HandshakingState
475
+ // from within the critical region.
476
+ handshake_mgr = std::move(self->handshake_mgr_);
477
+ handshaking_state_ref = std::move(self->connection_->handshaking_state_);
259
478
  }
260
- self->handshake_mgr_.reset();
261
479
  gpr_free(self->acceptor_);
262
- grpc_tcp_server_unref(self->listener_->tcp_server_);
480
+ OrphanablePtr<ActiveConnection> connection;
481
+ if (free_resource_quota && resource_user != nullptr) {
482
+ grpc_resource_user_free(resource_user, GRPC_RESOURCE_QUOTA_CHANNEL_SIZE);
483
+ }
484
+ if (cleanup_connection) {
485
+ MutexLock listener_lock(&self->connection_->listener_->mu_);
486
+ auto it = self->connection_->listener_->connections_.find(
487
+ self->connection_.get());
488
+ if (it != self->connection_->listener_->connections_.end()) {
489
+ connection = std::move(it->second);
490
+ self->connection_->listener_->connections_.erase(it);
491
+ }
492
+ }
493
+ self->Unref();
494
+ }
495
+
496
+ //
497
+ // Chttp2ServerListener::ActiveConnection
498
+ //
499
+
500
+ Chttp2ServerListener::ActiveConnection::ActiveConnection(
501
+ grpc_pollset* accepting_pollset, grpc_tcp_server_acceptor* acceptor,
502
+ grpc_channel_args* args)
503
+ : handshaking_state_(MakeOrphanable<HandshakingState>(
504
+ Ref(), accepting_pollset, acceptor, args)) {
505
+ GRPC_CLOSURE_INIT(&on_close_, ActiveConnection::OnClose, this,
506
+ grpc_schedule_on_exec_ctx);
507
+ }
508
+
509
+ Chttp2ServerListener::ActiveConnection::~ActiveConnection() {
510
+ if (transport_ != nullptr) {
511
+ GRPC_CHTTP2_UNREF_TRANSPORT(transport_, "ActiveConnection");
512
+ }
513
+ }
514
+
515
+ void Chttp2ServerListener::ActiveConnection::Orphan() {
516
+ OrphanablePtr<HandshakingState> handshaking_state;
517
+ {
518
+ MutexLock lock(&mu_);
519
+ shutdown_ = true;
520
+ // Reset handshaking_state_ since we have been orphaned by the listener
521
+ // signaling that the listener has stopped serving.
522
+ handshaking_state = std::move(handshaking_state_);
523
+ }
524
+ Unref();
525
+ }
526
+
527
+ void Chttp2ServerListener::ActiveConnection::SendGoAway() {
528
+ grpc_chttp2_transport* transport = nullptr;
529
+ {
530
+ MutexLock lock(&mu_);
531
+ transport = transport_;
532
+ }
533
+ if (transport != nullptr) {
534
+ grpc_transport_op* op = grpc_make_transport_op(nullptr);
535
+ op->goaway_error = GRPC_ERROR_CREATE_FROM_STATIC_STRING(
536
+ "Server is stopping to serve requests.");
537
+ grpc_transport_perform_op(&transport->base, op);
538
+ }
539
+ }
540
+
541
+ void Chttp2ServerListener::ActiveConnection::Start(
542
+ RefCountedPtr<Chttp2ServerListener> listener, grpc_endpoint* endpoint,
543
+ grpc_channel_args* args) {
544
+ RefCountedPtr<HandshakingState> handshaking_state_ref;
545
+ listener_ = std::move(listener);
546
+ {
547
+ MutexLock lock(&mu_);
548
+ if (shutdown_) return;
549
+ // Hold a ref to HandshakingState to allow starting the handshake outside
550
+ // the critical region.
551
+ handshaking_state_ref = handshaking_state_->Ref();
552
+ }
553
+ handshaking_state_ref->Start(endpoint, args);
554
+ }
555
+
556
+ void Chttp2ServerListener::ActiveConnection::OnClose(void* arg,
557
+ grpc_error* /* error */) {
558
+ ActiveConnection* self = static_cast<ActiveConnection*>(arg);
559
+ OrphanablePtr<ActiveConnection> connection;
560
+ {
561
+ MutexLock listener_lock(&self->listener_->mu_);
562
+ MutexLock connection_lock(&self->mu_);
563
+ // The node was already deleted from the connections_ list if the connection
564
+ // is shutdown.
565
+ if (!self->shutdown_) {
566
+ auto it = self->listener_->connections_.find(self);
567
+ if (it != self->listener_->connections_.end()) {
568
+ connection = std::move(it->second);
569
+ self->listener_->connections_.erase(it);
570
+ }
571
+ }
572
+ }
263
573
  self->Unref();
264
574
  }
265
575
 
@@ -267,72 +577,45 @@ void Chttp2ServerListener::ConnectionState::OnHandshakeDone(void* arg,
267
577
  // Chttp2ServerListener
268
578
  //
269
579
 
270
- grpc_error* Chttp2ServerListener::Create(Server* server, const char* addr,
580
+ grpc_error* Chttp2ServerListener::Create(Server* server,
581
+ grpc_resolved_address* addr,
271
582
  grpc_channel_args* args,
583
+ Chttp2ServerArgsModifier args_modifier,
272
584
  int* port_num) {
273
- std::vector<grpc_error*> error_list;
274
- grpc_resolved_addresses* resolved = nullptr;
275
585
  Chttp2ServerListener* listener = nullptr;
276
586
  // The bulk of this method is inside of a lambda to make cleanup
277
587
  // easier without using goto.
278
588
  grpc_error* error = [&]() {
279
- *port_num = -1;
280
- /* resolve address */
281
- grpc_error* error = grpc_blocking_resolve_address(addr, "https", &resolved);
282
- if (error != GRPC_ERROR_NONE) return error;
283
589
  // Create Chttp2ServerListener.
284
- listener = new Chttp2ServerListener(server, args);
590
+ listener = new Chttp2ServerListener(server, args, args_modifier);
285
591
  error = grpc_tcp_server_create(&listener->tcp_server_shutdown_complete_,
286
592
  args, &listener->tcp_server_);
287
593
  if (error != GRPC_ERROR_NONE) return error;
288
- for (size_t i = 0; i < resolved->naddrs; i++) {
289
- int port_temp;
290
- error = grpc_tcp_server_add_port(listener->tcp_server_,
291
- &resolved->addrs[i], &port_temp);
292
- if (error != GRPC_ERROR_NONE) {
293
- error_list.push_back(error);
294
- } else {
295
- if (*port_num == -1) {
296
- *port_num = port_temp;
297
- } else {
298
- GPR_ASSERT(*port_num == port_temp);
299
- }
300
- }
301
- }
302
- if (error_list.size() == resolved->naddrs) {
303
- std::string msg =
304
- absl::StrFormat("No address added out of total %" PRIuPTR " resolved",
305
- resolved->naddrs);
306
- return GRPC_ERROR_CREATE_REFERENCING_FROM_COPIED_STRING(
307
- msg.c_str(), error_list.data(), error_list.size());
308
- } else if (!error_list.empty()) {
309
- std::string msg = absl::StrFormat(
310
- "Only %" PRIuPTR " addresses added out of total %" PRIuPTR
311
- " resolved",
312
- resolved->naddrs - error_list.size(), resolved->naddrs);
313
- error = GRPC_ERROR_CREATE_REFERENCING_FROM_COPIED_STRING(
314
- msg.c_str(), error_list.data(), error_list.size());
315
- gpr_log(GPR_INFO, "WARNING: %s", grpc_error_string(error));
316
- GRPC_ERROR_UNREF(error);
317
- /* we managed to bind some addresses: continue */
594
+ if (server->config_fetcher() != nullptr) {
595
+ listener->resolved_address_ = *addr;
596
+ // TODO(yashykt): Consider binding so as to be able to return the port
597
+ // number.
598
+ } else {
599
+ error = grpc_tcp_server_add_port(listener->tcp_server_, addr, port_num);
600
+ if (error != GRPC_ERROR_NONE) return error;
318
601
  }
319
602
  // Create channelz node.
320
603
  if (grpc_channel_args_find_bool(args, GRPC_ARG_ENABLE_CHANNELZ,
321
604
  GRPC_ENABLE_CHANNELZ_DEFAULT)) {
605
+ std::string string_address = grpc_sockaddr_to_uri(addr);
322
606
  listener->channelz_listen_socket_ =
323
607
  MakeRefCounted<channelz::ListenSocketNode>(
324
- addr, absl::StrFormat("chttp2 listener %s", addr));
608
+ string_address.c_str(),
609
+ absl::StrFormat("chttp2 listener %s", string_address.c_str()));
325
610
  }
326
- /* Register with the server only upon success */
611
+ // Register with the server only upon success
327
612
  server->AddListener(OrphanablePtr<Server::ListenerInterface>(listener));
328
613
  return GRPC_ERROR_NONE;
329
614
  }();
330
- if (resolved != nullptr) {
331
- grpc_resolved_addresses_destroy(resolved);
332
- }
333
615
  if (error != GRPC_ERROR_NONE) {
334
616
  if (listener != nullptr) {
335
617
  if (listener->tcp_server_ != nullptr) {
618
+ // listener is deleted when tcp_server_ is shutdown.
336
619
  grpc_tcp_server_unref(listener->tcp_server_);
337
620
  } else {
338
621
  delete listener;
@@ -340,18 +623,15 @@ grpc_error* Chttp2ServerListener::Create(Server* server, const char* addr,
340
623
  } else {
341
624
  grpc_channel_args_destroy(args);
342
625
  }
343
- *port_num = 0;
344
- }
345
- for (grpc_error* error : error_list) {
346
- GRPC_ERROR_UNREF(error);
347
626
  }
348
627
  return error;
349
628
  }
350
629
 
351
- grpc_error* Chttp2ServerListener::CreateWithAcceptor(Server* server,
352
- const char* name,
353
- grpc_channel_args* args) {
354
- Chttp2ServerListener* listener = new Chttp2ServerListener(server, args);
630
+ grpc_error* Chttp2ServerListener::CreateWithAcceptor(
631
+ Server* server, const char* name, grpc_channel_args* args,
632
+ Chttp2ServerArgsModifier args_modifier) {
633
+ Chttp2ServerListener* listener =
634
+ new Chttp2ServerListener(server, args, args_modifier);
355
635
  grpc_error* error = grpc_tcp_server_create(
356
636
  &listener->tcp_server_shutdown_complete_, args, &listener->tcp_server_);
357
637
  if (error != GRPC_ERROR_NONE) {
@@ -366,97 +646,170 @@ grpc_error* Chttp2ServerListener::CreateWithAcceptor(Server* server,
366
646
  return GRPC_ERROR_NONE;
367
647
  }
368
648
 
369
- Chttp2ServerListener::Chttp2ServerListener(Server* server,
370
- grpc_channel_args* args)
371
- : server_(server), args_(args) {
649
+ Chttp2ServerListener::Chttp2ServerListener(
650
+ Server* server, grpc_channel_args* args,
651
+ Chttp2ServerArgsModifier args_modifier)
652
+ : server_(server), args_modifier_(args_modifier), args_(args) {
372
653
  GRPC_CLOSURE_INIT(&tcp_server_shutdown_complete_, TcpServerShutdownComplete,
373
654
  this, grpc_schedule_on_exec_ctx);
374
655
  }
375
656
 
376
657
  Chttp2ServerListener::~Chttp2ServerListener() {
658
+ // Flush queued work before destroying handshaker factory, since that
659
+ // may do a synchronous unref.
660
+ ExecCtx::Get()->Flush();
661
+ if (on_destroy_done_ != nullptr) {
662
+ ExecCtx::Run(DEBUG_LOCATION, on_destroy_done_, GRPC_ERROR_NONE);
663
+ ExecCtx::Get()->Flush();
664
+ }
377
665
  grpc_channel_args_destroy(args_);
378
666
  }
379
667
 
380
668
  /* Server callback: start listening on our ports */
381
- void Chttp2ServerListener::Start(Server* /*server*/,
382
- const std::vector<grpc_pollset*>* pollsets) {
383
- {
384
- MutexLock lock(&mu_);
385
- shutdown_ = false;
669
+ void Chttp2ServerListener::Start(
670
+ Server* /*server*/, const std::vector<grpc_pollset*>* /* pollsets */) {
671
+ if (server_->config_fetcher() != nullptr) {
672
+ grpc_channel_args* args = nullptr;
673
+ auto watcher = absl::make_unique<ConfigFetcherWatcher>(Ref());
674
+ config_fetcher_watcher_ = watcher.get();
675
+ {
676
+ MutexLock lock(&channel_args_mu_);
677
+ args = grpc_channel_args_copy(args_);
678
+ }
679
+ server_->config_fetcher()->StartWatch(
680
+ grpc_sockaddr_to_string(&resolved_address_, false), args,
681
+ std::move(watcher));
682
+ } else {
683
+ {
684
+ MutexLock lock(&mu_);
685
+ started_ = true;
686
+ is_serving_ = true;
687
+ }
688
+ StartListening();
386
689
  }
387
- grpc_tcp_server_start(tcp_server_, pollsets, OnAccept, this);
388
690
  }
389
691
 
390
- void Chttp2ServerListener::SetOnDestroyDone(grpc_closure* on_destroy_done) {
391
- MutexLock lock(&mu_);
392
- on_destroy_done_ = on_destroy_done;
692
+ void Chttp2ServerListener::StartListening() {
693
+ grpc_tcp_server_start(tcp_server_, &server_->pollsets(), OnAccept, this);
393
694
  }
394
695
 
395
- RefCountedPtr<HandshakeManager> Chttp2ServerListener::CreateHandshakeManager() {
696
+ void Chttp2ServerListener::SetOnDestroyDone(grpc_closure* on_destroy_done) {
396
697
  MutexLock lock(&mu_);
397
- if (shutdown_) return nullptr;
398
- grpc_resource_user* resource_user = server_->default_resource_user();
399
- if (resource_user != nullptr &&
400
- !grpc_resource_user_safe_alloc(resource_user,
401
- GRPC_RESOURCE_QUOTA_CHANNEL_SIZE)) {
402
- gpr_log(GPR_ERROR,
403
- "Memory quota exhausted, rejecting connection, no handshaking.");
404
- return nullptr;
405
- }
406
- auto handshake_mgr = MakeRefCounted<HandshakeManager>();
407
- handshake_mgr->AddToPendingMgrList(&pending_handshake_mgrs_);
408
- grpc_tcp_server_ref(tcp_server_); // Ref held by ConnectionState.
409
- return handshake_mgr;
698
+ on_destroy_done_ = on_destroy_done;
410
699
  }
411
700
 
412
701
  void Chttp2ServerListener::OnAccept(void* arg, grpc_endpoint* tcp,
413
702
  grpc_pollset* accepting_pollset,
414
703
  grpc_tcp_server_acceptor* acceptor) {
415
704
  Chttp2ServerListener* self = static_cast<Chttp2ServerListener*>(arg);
416
- RefCountedPtr<HandshakeManager> handshake_mgr =
417
- self->CreateHandshakeManager();
418
- if (handshake_mgr == nullptr) {
419
- grpc_endpoint_shutdown(tcp, GRPC_ERROR_NONE);
705
+ grpc_channel_args* args = nullptr;
706
+ RefCountedPtr<grpc_server_config_fetcher::ConnectionManager>
707
+ connection_manager;
708
+ {
709
+ MutexLock lock(&self->channel_args_mu_);
710
+ args = grpc_channel_args_copy(self->args_);
711
+ connection_manager = self->connection_manager_;
712
+ }
713
+ auto endpoint_cleanup = [&](grpc_error* error) {
714
+ grpc_endpoint_shutdown(tcp, error);
420
715
  grpc_endpoint_destroy(tcp);
421
716
  gpr_free(acceptor);
422
- return;
717
+ };
718
+ if (self->server_->config_fetcher() != nullptr) {
719
+ if (connection_manager == nullptr) {
720
+ grpc_error* error = GRPC_ERROR_CREATE_FROM_STATIC_STRING(
721
+ "No ConnectionManager configured. Closing connection.");
722
+ endpoint_cleanup(error);
723
+ grpc_channel_args_destroy(args);
724
+ return;
725
+ }
726
+ // TODO(yashykt): Maybe combine the following two arg modifiers into a
727
+ // single one.
728
+ absl::StatusOr<grpc_channel_args*> args_result =
729
+ connection_manager->UpdateChannelArgsForConnection(args, tcp);
730
+ if (!args_result.ok()) {
731
+ gpr_log(GPR_DEBUG, "Closing connection: %s",
732
+ args_result.status().ToString().c_str());
733
+ endpoint_cleanup(GRPC_ERROR_CREATE_FROM_COPIED_STRING(
734
+ args_result.status().ToString().c_str()));
735
+ return;
736
+ }
737
+ grpc_error* error = GRPC_ERROR_NONE;
738
+ args = self->args_modifier_(*args_result, &error);
739
+ if (error != GRPC_ERROR_NONE) {
740
+ gpr_log(GPR_DEBUG, "Closing connection: %s", grpc_error_string(error));
741
+ endpoint_cleanup(error);
742
+ grpc_channel_args_destroy(args);
743
+ return;
744
+ }
423
745
  }
424
- // Deletes itself when done.
425
- new ConnectionState(self, accepting_pollset, acceptor,
426
- std::move(handshake_mgr), self->args_, tcp);
427
- }
428
-
429
- void Chttp2ServerListener::TcpServerShutdownComplete(void* arg,
430
- grpc_error* error) {
431
- Chttp2ServerListener* self = static_cast<Chttp2ServerListener*>(arg);
432
- /* ensure all threads have unlocked */
433
- grpc_closure* destroy_done = nullptr;
746
+ auto connection =
747
+ MakeOrphanable<ActiveConnection>(accepting_pollset, acceptor, args);
748
+ // Hold a ref to connection to allow starting handshake outside the
749
+ // critical region
750
+ RefCountedPtr<ActiveConnection> connection_ref = connection->Ref();
751
+ RefCountedPtr<Chttp2ServerListener> listener_ref;
434
752
  {
435
753
  MutexLock lock(&self->mu_);
436
- destroy_done = self->on_destroy_done_;
437
- GPR_ASSERT(self->shutdown_);
438
- if (self->pending_handshake_mgrs_ != nullptr) {
439
- self->pending_handshake_mgrs_->ShutdownAllPending(GRPC_ERROR_REF(error));
754
+ // Shutdown the the connection if listener's stopped serving.
755
+ if (!self->shutdown_ && self->is_serving_) {
756
+ grpc_resource_user* resource_user =
757
+ self->server_->default_resource_user();
758
+ if (resource_user != nullptr &&
759
+ !grpc_resource_user_safe_alloc(resource_user,
760
+ GRPC_RESOURCE_QUOTA_CHANNEL_SIZE)) {
761
+ gpr_log(
762
+ GPR_ERROR,
763
+ "Memory quota exhausted, rejecting connection, no handshaking.");
764
+ } else {
765
+ // This ref needs to be taken in the critical region after having made
766
+ // sure that the listener has not been Orphaned, so as to avoid
767
+ // heap-use-after-free issues where `Ref()` is invoked when the ref of
768
+ // tcp_server_ has already reached 0. (Ref() implementation of
769
+ // Chttp2ServerListener is grpc_tcp_server_ref().)
770
+ listener_ref = self->Ref();
771
+ self->connections_.emplace(connection.get(), std::move(connection));
772
+ }
440
773
  }
441
- self->channelz_listen_socket_.reset();
442
774
  }
443
- // Flush queued work before destroying handshaker factory, since that
444
- // may do a synchronous unref.
445
- ExecCtx::Get()->Flush();
446
- if (destroy_done != nullptr) {
447
- ExecCtx::Run(DEBUG_LOCATION, destroy_done, GRPC_ERROR_REF(error));
448
- ExecCtx::Get()->Flush();
775
+ if (connection != nullptr) {
776
+ endpoint_cleanup(GRPC_ERROR_NONE);
777
+ } else {
778
+ connection_ref->Start(std::move(listener_ref), tcp, args);
449
779
  }
780
+ grpc_channel_args_destroy(args);
781
+ }
782
+
783
+ void Chttp2ServerListener::TcpServerShutdownComplete(void* arg,
784
+ grpc_error* error) {
785
+ Chttp2ServerListener* self = static_cast<Chttp2ServerListener*>(arg);
786
+ self->channelz_listen_socket_.reset();
787
+ GRPC_ERROR_UNREF(error);
450
788
  delete self;
451
789
  }
452
790
 
453
791
  /* Server callback: destroy the tcp listener (so we don't generate further
454
792
  callbacks) */
455
793
  void Chttp2ServerListener::Orphan() {
794
+ // Cancel the watch before shutting down so as to avoid holding a ref to the
795
+ // listener in the watcher.
796
+ if (config_fetcher_watcher_ != nullptr) {
797
+ server_->config_fetcher()->CancelWatch(config_fetcher_watcher_);
798
+ }
799
+ std::map<ActiveConnection*, OrphanablePtr<ActiveConnection>> connections;
456
800
  grpc_tcp_server* tcp_server;
457
801
  {
458
802
  MutexLock lock(&mu_);
459
803
  shutdown_ = true;
804
+ is_serving_ = false;
805
+ // Orphan the connections so that they can start cleaning up.
806
+ connections = std::move(connections_);
807
+ // If the listener is currently set to be serving but has not been started
808
+ // yet, it means that `grpc_tcp_server_start` is in progress. Wait for the
809
+ // operation to finish to avoid causing races.
810
+ while (is_serving_ && !started_) {
811
+ started_cv_.Wait(&mu_);
812
+ }
460
813
  tcp_server = tcp_server_;
461
814
  }
462
815
  grpc_tcp_server_shutdown_listeners(tcp_server);
@@ -470,12 +823,77 @@ void Chttp2ServerListener::Orphan() {
470
823
  //
471
824
 
472
825
  grpc_error* Chttp2ServerAddPort(Server* server, const char* addr,
473
- grpc_channel_args* args, int* port_num) {
826
+ grpc_channel_args* args,
827
+ Chttp2ServerArgsModifier args_modifier,
828
+ int* port_num) {
474
829
  if (strncmp(addr, "external:", 9) == 0) {
475
- return grpc_core::Chttp2ServerListener::CreateWithAcceptor(server, addr,
476
- args);
830
+ return grpc_core::Chttp2ServerListener::CreateWithAcceptor(
831
+ server, addr, args, args_modifier);
832
+ }
833
+ *port_num = -1;
834
+ grpc_resolved_addresses* resolved = nullptr;
835
+ std::vector<grpc_error*> error_list;
836
+ // Using lambda to avoid use of goto.
837
+ grpc_error* error = [&]() {
838
+ if (absl::StartsWith(addr, kUnixUriPrefix)) {
839
+ error = grpc_resolve_unix_domain_address(
840
+ addr + sizeof(kUnixUriPrefix) - 1, &resolved);
841
+ } else if (absl::StartsWith(addr, kUnixAbstractUriPrefix)) {
842
+ error = grpc_resolve_unix_abstract_domain_address(
843
+ addr + sizeof(kUnixAbstractUriPrefix) - 1, &resolved);
844
+ } else {
845
+ error = grpc_blocking_resolve_address(addr, "https", &resolved);
846
+ }
847
+ if (error != GRPC_ERROR_NONE) return error;
848
+ // Create a listener for each resolved address.
849
+ for (size_t i = 0; i < resolved->naddrs; i++) {
850
+ // If address has a wildcard port (0), use the same port as a previous
851
+ // listener.
852
+ if (*port_num != -1 && grpc_sockaddr_get_port(&resolved->addrs[i]) == 0) {
853
+ grpc_sockaddr_set_port(&resolved->addrs[i], *port_num);
854
+ }
855
+ int port_temp = -1;
856
+ error = grpc_core::Chttp2ServerListener::Create(
857
+ server, &resolved->addrs[i], grpc_channel_args_copy(args),
858
+ args_modifier, &port_temp);
859
+ if (error != GRPC_ERROR_NONE) {
860
+ error_list.push_back(error);
861
+ } else {
862
+ if (*port_num == -1) {
863
+ *port_num = port_temp;
864
+ } else {
865
+ GPR_ASSERT(*port_num == port_temp);
866
+ }
867
+ }
868
+ }
869
+ if (error_list.size() == resolved->naddrs) {
870
+ std::string msg =
871
+ absl::StrFormat("No address added out of total %" PRIuPTR " resolved",
872
+ resolved->naddrs);
873
+ return GRPC_ERROR_CREATE_REFERENCING_FROM_COPIED_STRING(
874
+ msg.c_str(), error_list.data(), error_list.size());
875
+ } else if (!error_list.empty()) {
876
+ std::string msg = absl::StrFormat(
877
+ "Only %" PRIuPTR " addresses added out of total %" PRIuPTR
878
+ " resolved",
879
+ resolved->naddrs - error_list.size(), resolved->naddrs);
880
+ error = GRPC_ERROR_CREATE_REFERENCING_FROM_COPIED_STRING(
881
+ msg.c_str(), error_list.data(), error_list.size());
882
+ gpr_log(GPR_INFO, "WARNING: %s", grpc_error_string(error));
883
+ GRPC_ERROR_UNREF(error);
884
+ // we managed to bind some addresses: continue without error
885
+ }
886
+ return GRPC_ERROR_NONE;
887
+ }(); // lambda end
888
+ for (grpc_error* error : error_list) {
889
+ GRPC_ERROR_UNREF(error);
477
890
  }
478
- return grpc_core::Chttp2ServerListener::Create(server, addr, args, port_num);
891
+ grpc_channel_args_destroy(args);
892
+ if (resolved != nullptr) {
893
+ grpc_resolved_addresses_destroy(resolved);
894
+ }
895
+ if (error != GRPC_ERROR_NONE) *port_num = 0;
896
+ return error;
479
897
  }
480
898
 
481
899
  } // namespace grpc_core