grpc 1.32.0 → 1.36.0

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

Potentially problematic release.


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

Files changed (1031) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +1086 -3054
  3. data/etc/roots.pem +257 -573
  4. data/include/grpc/compression.h +1 -1
  5. data/include/grpc/grpc.h +15 -7
  6. data/include/grpc/grpc_security.h +227 -171
  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 -8
  10. data/include/grpc/impl/codegen/log.h +0 -2
  11. data/include/grpc/impl/codegen/port_platform.h +22 -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 +2788 -1535
  18. data/src/core/ext/filters/client_channel/client_channel.h +0 -6
  19. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +1 -1
  20. data/src/core/ext/filters/client_channel/config_selector.cc +0 -4
  21. data/src/core/ext/filters/client_channel/config_selector.h +40 -8
  22. data/src/core/ext/filters/client_channel/dynamic_filters.cc +186 -0
  23. data/src/core/ext/filters/client_channel/dynamic_filters.h +99 -0
  24. data/src/core/ext/filters/client_channel/health/health_check_client.cc +10 -7
  25. data/src/core/ext/filters/client_channel/health/health_check_client.h +4 -4
  26. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +7 -8
  27. data/src/core/ext/filters/client_channel/http_proxy.cc +21 -20
  28. data/src/core/ext/filters/client_channel/lb_policy.cc +6 -2
  29. data/src/core/ext/filters/client_channel/lb_policy.h +6 -7
  30. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +48 -35
  31. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +7 -5
  32. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +4 -3
  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 +204 -195
  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 +5 -5
  41. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +58 -26
  42. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +5 -5
  43. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +14 -34
  44. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +6 -6
  45. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +478 -145
  46. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +52 -24
  47. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_args.h +29 -0
  48. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +810 -0
  49. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +722 -0
  50. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +1384 -0
  51. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +8 -1
  52. data/src/core/ext/filters/client_channel/resolver.cc +4 -5
  53. data/src/core/ext/filters/client_channel/resolver.h +5 -13
  54. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +43 -59
  55. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +1 -32
  56. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +3 -3
  57. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +443 -17
  58. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +5 -0
  59. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +22 -23
  60. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +21 -18
  61. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +1 -1
  62. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +362 -0
  63. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +37 -30
  64. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +566 -366
  65. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.h +28 -0
  66. data/src/core/ext/filters/client_channel/resolver_factory.h +6 -6
  67. data/src/core/ext/filters/client_channel/resolver_registry.cc +40 -39
  68. data/src/core/ext/filters/client_channel/resolver_registry.h +2 -2
  69. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +29 -74
  70. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +12 -10
  71. data/src/core/ext/filters/client_channel/retry_throttle.cc +5 -3
  72. data/src/core/ext/filters/client_channel/retry_throttle.h +4 -2
  73. data/src/core/ext/filters/client_channel/server_address.cc +86 -0
  74. data/src/core/ext/filters/client_channel/server_address.h +52 -36
  75. data/src/core/ext/filters/client_channel/service_config.cc +18 -13
  76. data/src/core/ext/filters/client_channel/service_config.h +8 -5
  77. data/src/core/ext/filters/client_channel/service_config_call_data.h +19 -1
  78. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +2 -2
  79. data/src/core/ext/filters/client_channel/service_config_parser.cc +8 -6
  80. data/src/core/ext/filters/client_channel/service_config_parser.h +8 -5
  81. data/src/core/ext/filters/client_channel/subchannel.cc +53 -66
  82. data/src/core/ext/filters/client_channel/subchannel.h +14 -20
  83. data/src/core/ext/filters/client_channel/subchannel_interface.h +41 -5
  84. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +6 -2
  85. data/src/core/ext/filters/deadline/deadline_filter.cc +87 -79
  86. data/src/core/ext/filters/deadline/deadline_filter.h +7 -11
  87. data/src/core/ext/filters/http/client/http_client_filter.cc +1 -1
  88. data/src/core/ext/filters/http/client_authority_filter.cc +6 -6
  89. data/src/core/ext/filters/http/http_filters_plugin.cc +6 -3
  90. data/src/core/ext/filters/http/server/http_server_filter.cc +3 -3
  91. data/src/core/ext/filters/max_age/max_age_filter.cc +36 -33
  92. data/src/core/ext/filters/message_size/message_size_filter.cc +3 -2
  93. data/src/core/ext/filters/message_size/message_size_filter.h +2 -1
  94. data/src/core/ext/filters/workarounds/workaround_utils.cc +1 -1
  95. data/src/core/ext/transport/chttp2/client/authority.cc +3 -3
  96. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +1 -1
  97. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +1 -1
  98. data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +20 -8
  99. data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc +21 -10
  100. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +26 -14
  101. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +226 -95
  102. data/src/core/ext/transport/chttp2/server/chttp2_server.h +11 -2
  103. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +11 -1
  104. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +12 -5
  105. data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +62 -18
  106. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +7 -7
  107. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +28 -42
  108. data/src/core/ext/transport/chttp2/transport/flow_control.cc +10 -2
  109. data/src/core/ext/transport/chttp2/transport/flow_control.h +13 -3
  110. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +2 -1
  111. data/src/core/ext/transport/chttp2/transport/frame_settings.h +2 -1
  112. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +6 -6
  113. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +12 -8
  114. data/src/core/ext/transport/chttp2/transport/internal.h +5 -1
  115. data/src/core/ext/transport/chttp2/transport/parsing.cc +18 -3
  116. data/src/core/ext/transport/chttp2/transport/writing.cc +2 -3
  117. data/src/core/ext/transport/inproc/inproc_transport.cc +42 -8
  118. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h +1 -0
  119. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.c +1 -1
  120. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +7 -0
  121. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +52 -33
  122. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +199 -34
  123. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +13 -13
  124. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +44 -17
  125. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +171 -98
  126. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +625 -202
  127. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.c +3 -3
  128. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +13 -5
  129. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c +24 -23
  130. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +62 -21
  131. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +36 -24
  132. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +133 -39
  133. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.c +4 -4
  134. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +15 -6
  135. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +70 -45
  136. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +275 -78
  137. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +31 -24
  138. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +107 -47
  139. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +1 -1
  140. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +7 -0
  141. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.c +53 -0
  142. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.h +149 -0
  143. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +74 -28
  144. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +248 -43
  145. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +41 -41
  146. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +172 -89
  147. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.c +4 -4
  148. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +17 -9
  149. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +63 -39
  150. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +254 -60
  151. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +1 -2
  152. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +7 -0
  153. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.c +2 -2
  154. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +9 -2
  155. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +42 -0
  156. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.h +126 -0
  157. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +13 -14
  158. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +59 -36
  159. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +16 -16
  160. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +61 -29
  161. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +26 -26
  162. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +101 -66
  163. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.c +2 -2
  164. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +11 -3
  165. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +49 -27
  166. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +204 -48
  167. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +47 -26
  168. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +181 -48
  169. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +2 -3
  170. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +13 -0
  171. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +21 -17
  172. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +96 -33
  173. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +15 -13
  174. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +70 -37
  175. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +352 -199
  176. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +1334 -443
  177. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +8 -7
  178. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +34 -10
  179. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +3 -4
  180. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +17 -3
  181. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.c +29 -0
  182. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.h +67 -0
  183. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +129 -80
  184. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +525 -166
  185. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.c +0 -1
  186. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.h +1 -0
  187. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +26 -24
  188. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +121 -64
  189. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +7 -6
  190. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +29 -8
  191. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +70 -29
  192. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +296 -63
  193. data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.c +1 -1
  194. data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.h +7 -0
  195. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.c +1 -1
  196. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h +7 -0
  197. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +51 -34
  198. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +188 -75
  199. data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.c +1 -4
  200. data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.h +7 -0
  201. data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.c +1 -4
  202. data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.h +7 -0
  203. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +7 -8
  204. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +31 -16
  205. data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.c +1 -3
  206. data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.h +7 -0
  207. data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.c +1 -1
  208. data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.h +7 -0
  209. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +5 -5
  210. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +25 -11
  211. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +1 -1
  212. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +7 -0
  213. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +1 -1
  214. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +7 -0
  215. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +6 -6
  216. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +29 -8
  217. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +4 -4
  218. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +22 -3
  219. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +3 -3
  220. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +19 -0
  221. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +7 -7
  222. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +46 -3
  223. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +8 -8
  224. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +41 -8
  225. data/src/core/ext/upb-generated/envoy/type/v3/http.upb.h +1 -0
  226. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.c +3 -3
  227. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +15 -2
  228. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.c +3 -3
  229. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +19 -0
  230. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.c +1 -1
  231. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +7 -0
  232. data/src/core/ext/upb-generated/google/api/annotations.upb.h +1 -0
  233. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.c +242 -0
  234. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.h +830 -0
  235. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +54 -37
  236. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +171 -59
  237. data/src/core/ext/upb-generated/google/api/http.upb.c +3 -3
  238. data/src/core/ext/upb-generated/google/api/http.upb.h +25 -6
  239. data/src/core/ext/upb-generated/google/protobuf/any.upb.c +1 -1
  240. data/src/core/ext/upb-generated/google/protobuf/any.upb.h +7 -0
  241. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +90 -90
  242. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +455 -292
  243. data/src/core/ext/upb-generated/google/protobuf/duration.upb.c +1 -1
  244. data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +7 -0
  245. data/src/core/ext/upb-generated/google/protobuf/empty.upb.c +1 -1
  246. data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +7 -0
  247. data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +4 -4
  248. data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +22 -3
  249. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.c +1 -1
  250. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +7 -0
  251. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.c +9 -9
  252. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +55 -0
  253. data/src/core/ext/upb-generated/google/rpc/status.upb.c +1 -1
  254. data/src/core/ext/upb-generated/google/rpc/status.upb.h +10 -3
  255. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c +4 -4
  256. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +11 -3
  257. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +41 -41
  258. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +149 -76
  259. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c +5 -5
  260. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +21 -6
  261. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c +2 -2
  262. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +13 -0
  263. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c +17 -17
  264. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +82 -25
  265. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.c +3 -3
  266. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +19 -0
  267. data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +31 -0
  268. data/src/core/ext/upb-generated/udpa/annotations/security.upb.h +64 -0
  269. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h +1 -0
  270. data/src/core/ext/upb-generated/udpa/annotations/status.upb.c +2 -2
  271. data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +9 -2
  272. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +1 -1
  273. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +7 -0
  274. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.c +3 -3
  275. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.h +7 -0
  276. data/src/core/ext/upb-generated/validate/validate.upb.c +64 -64
  277. data/src/core/ext/upb-generated/validate/validate.upb.h +296 -157
  278. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.c +28 -0
  279. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.h +60 -0
  280. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.c +52 -0
  281. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.h +143 -0
  282. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +42 -0
  283. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.h +84 -0
  284. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.c +36 -0
  285. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.h +94 -0
  286. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +54 -0
  287. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.h +166 -0
  288. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +36 -0
  289. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.h +85 -0
  290. data/src/core/ext/upbdefs-generated/envoy/annotations/deprecation.upbdefs.c +38 -0
  291. data/src/core/ext/upbdefs-generated/envoy/annotations/deprecation.upbdefs.h +30 -0
  292. data/src/core/ext/upbdefs-generated/envoy/annotations/resource.upbdefs.c +41 -0
  293. data/src/core/ext/upbdefs-generated/envoy/annotations/resource.upbdefs.h +35 -0
  294. data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.c +251 -0
  295. data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.h +105 -0
  296. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.c +100 -0
  297. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.h +45 -0
  298. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +543 -0
  299. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.h +145 -0
  300. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/filter.upbdefs.c +53 -0
  301. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/filter.upbdefs.h +35 -0
  302. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.c +136 -0
  303. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.h +35 -0
  304. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.c +127 -0
  305. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.h +65 -0
  306. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/backoff.upbdefs.c +56 -0
  307. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/backoff.upbdefs.h +35 -0
  308. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +272 -0
  309. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.h +135 -0
  310. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.c +143 -0
  311. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.h +55 -0
  312. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/event_service_config.upbdefs.c +56 -0
  313. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/event_service_config.upbdefs.h +35 -0
  314. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.c +66 -0
  315. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.h +40 -0
  316. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_service.upbdefs.c +263 -0
  317. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_service.upbdefs.h +100 -0
  318. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.c +233 -0
  319. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.h +70 -0
  320. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/http_uri.upbdefs.c +56 -0
  321. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/http_uri.upbdefs.h +35 -0
  322. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +228 -0
  323. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.h +80 -0
  324. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.c +43 -0
  325. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.h +35 -0
  326. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.c +59 -0
  327. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.h +35 -0
  328. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.c +68 -0
  329. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.h +35 -0
  330. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.c +107 -0
  331. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.h +50 -0
  332. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.c +113 -0
  333. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.h +50 -0
  334. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/load_report.upbdefs.c +146 -0
  335. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/load_report.upbdefs.h +55 -0
  336. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/api_listener.upbdefs.c +50 -0
  337. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/api_listener.upbdefs.h +35 -0
  338. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.c +195 -0
  339. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.h +55 -0
  340. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.c +193 -0
  341. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.h +65 -0
  342. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.c +59 -0
  343. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.h +40 -0
  344. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.c +101 -0
  345. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.h +40 -0
  346. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +938 -0
  347. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.h +285 -0
  348. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/scoped_route.upbdefs.c +71 -0
  349. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/scoped_route.upbdefs.h +45 -0
  350. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.c +61 -0
  351. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.h +40 -0
  352. data/src/core/ext/upbdefs-generated/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.c +51 -0
  353. data/src/core/ext/upbdefs-generated/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.h +35 -0
  354. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +504 -0
  355. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.h +115 -0
  356. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.c +44 -0
  357. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.h +30 -0
  358. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +170 -0
  359. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.h +55 -0
  360. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.c +97 -0
  361. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.h +45 -0
  362. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c +246 -0
  363. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.h +60 -0
  364. data/src/core/ext/upbdefs-generated/envoy/service/cluster/v3/cds.upbdefs.c +72 -0
  365. data/src/core/ext/upbdefs-generated/envoy/service/cluster/v3/cds.upbdefs.h +35 -0
  366. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/ads.upbdefs.c +60 -0
  367. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/ads.upbdefs.h +35 -0
  368. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.c +142 -0
  369. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.h +65 -0
  370. data/src/core/ext/upbdefs-generated/envoy/service/endpoint/v3/eds.upbdefs.c +73 -0
  371. data/src/core/ext/upbdefs-generated/envoy/service/endpoint/v3/eds.upbdefs.h +35 -0
  372. data/src/core/ext/upbdefs-generated/envoy/service/listener/v3/lds.upbdefs.c +72 -0
  373. data/src/core/ext/upbdefs-generated/envoy/service/listener/v3/lds.upbdefs.h +35 -0
  374. data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.c +80 -0
  375. data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.h +40 -0
  376. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/rds.upbdefs.c +80 -0
  377. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/rds.upbdefs.h +35 -0
  378. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/srds.upbdefs.c +74 -0
  379. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/srds.upbdefs.h +35 -0
  380. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/metadata.upbdefs.c +64 -0
  381. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/metadata.upbdefs.h +40 -0
  382. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/number.upbdefs.c +54 -0
  383. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/number.upbdefs.h +35 -0
  384. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/path.upbdefs.c +53 -0
  385. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/path.upbdefs.h +35 -0
  386. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.c +73 -0
  387. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.h +45 -0
  388. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.c +69 -0
  389. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.h +40 -0
  390. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/value.upbdefs.c +81 -0
  391. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/value.upbdefs.h +45 -0
  392. data/src/core/ext/upbdefs-generated/envoy/type/metadata/v3/metadata.upbdefs.c +92 -0
  393. data/src/core/ext/upbdefs-generated/envoy/type/metadata/v3/metadata.upbdefs.h +65 -0
  394. data/src/core/ext/upbdefs-generated/envoy/type/tracing/v3/custom_tag.upbdefs.c +95 -0
  395. data/src/core/ext/upbdefs-generated/envoy/type/tracing/v3/custom_tag.upbdefs.h +55 -0
  396. data/src/core/ext/upbdefs-generated/envoy/type/v3/http.upbdefs.c +34 -0
  397. data/src/core/ext/{upb-generated/gogoproto/gogo.upb.h → upbdefs-generated/envoy/type/v3/http.upbdefs.h} +10 -9
  398. data/src/core/ext/upbdefs-generated/envoy/type/v3/percent.upbdefs.c +59 -0
  399. data/src/core/ext/upbdefs-generated/envoy/type/v3/percent.upbdefs.h +40 -0
  400. data/src/core/ext/upbdefs-generated/envoy/type/v3/range.upbdefs.c +54 -0
  401. data/src/core/ext/upbdefs-generated/envoy/type/v3/range.upbdefs.h +45 -0
  402. data/src/core/ext/upbdefs-generated/envoy/type/v3/semantic_version.upbdefs.c +47 -0
  403. data/src/core/ext/upbdefs-generated/envoy/type/v3/semantic_version.upbdefs.h +35 -0
  404. data/src/core/ext/upbdefs-generated/google/api/annotations.upbdefs.c +40 -0
  405. data/src/core/ext/upbdefs-generated/google/api/annotations.upbdefs.h +30 -0
  406. data/src/core/ext/upbdefs-generated/google/api/http.upbdefs.c +61 -0
  407. data/src/core/ext/upbdefs-generated/google/api/http.upbdefs.h +45 -0
  408. data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.c +39 -0
  409. data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.h +35 -0
  410. data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.c +386 -0
  411. data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.h +165 -0
  412. data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.c +40 -0
  413. data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.h +35 -0
  414. data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.c +37 -0
  415. data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.h +35 -0
  416. data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.c +65 -0
  417. data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.h +50 -0
  418. data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.c +40 -0
  419. data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.h +35 -0
  420. data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.c +66 -0
  421. data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.h +75 -0
  422. data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.c +42 -0
  423. data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.h +35 -0
  424. data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.c +70 -0
  425. data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.h +45 -0
  426. data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.c +56 -0
  427. data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.h +35 -0
  428. data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.c +33 -0
  429. data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.h +30 -0
  430. data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.c +49 -0
  431. data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.h +35 -0
  432. data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.c +43 -0
  433. data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.h +35 -0
  434. data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.c +310 -0
  435. data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.h +145 -0
  436. data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.c +42 -0
  437. data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.h +35 -0
  438. data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.c +62 -0
  439. data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.h +40 -0
  440. data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.c +45 -0
  441. data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.h +40 -0
  442. data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.c +49 -0
  443. data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.h +35 -0
  444. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.c +67 -0
  445. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.h +40 -0
  446. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.c +50 -0
  447. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.h +35 -0
  448. data/src/core/ext/xds/certificate_provider_factory.h +61 -0
  449. data/src/core/ext/xds/certificate_provider_registry.cc +103 -0
  450. data/src/core/ext/xds/certificate_provider_registry.h +57 -0
  451. data/src/core/ext/xds/certificate_provider_store.cc +87 -0
  452. data/src/core/ext/xds/certificate_provider_store.h +112 -0
  453. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +144 -0
  454. data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +69 -0
  455. data/src/core/ext/xds/xds_api.cc +1149 -1058
  456. data/src/core/ext/xds/xds_api.h +215 -144
  457. data/src/core/ext/xds/xds_bootstrap.cc +228 -62
  458. data/src/core/ext/xds/xds_bootstrap.h +35 -12
  459. data/src/core/ext/xds/xds_certificate_provider.cc +405 -0
  460. data/src/core/ext/xds/xds_certificate_provider.h +151 -0
  461. data/src/core/ext/xds/xds_channel_args.h +6 -3
  462. data/src/core/ext/xds/xds_client.cc +620 -495
  463. data/src/core/ext/xds/xds_client.h +121 -58
  464. data/src/core/ext/xds/xds_client_stats.cc +61 -17
  465. data/src/core/ext/xds/xds_client_stats.h +35 -7
  466. data/src/core/ext/xds/xds_server_config_fetcher.cc +267 -0
  467. data/src/core/lib/channel/channel_args.cc +9 -8
  468. data/src/core/lib/channel/channel_args.h +0 -1
  469. data/src/core/lib/channel/channel_trace.cc +4 -2
  470. data/src/core/lib/channel/channel_trace.h +1 -1
  471. data/src/core/lib/channel/channelz.cc +23 -59
  472. data/src/core/lib/channel/channelz.h +13 -22
  473. data/src/core/lib/channel/channelz_registry.cc +12 -11
  474. data/src/core/lib/channel/channelz_registry.h +3 -1
  475. data/src/core/lib/channel/handshaker.cc +4 -7
  476. data/src/core/lib/channel/handshaker.h +3 -3
  477. data/src/core/lib/compression/compression.cc +8 -4
  478. data/src/core/lib/compression/compression_args.cc +3 -2
  479. data/src/core/lib/compression/compression_internal.cc +10 -5
  480. data/src/core/lib/compression/compression_internal.h +2 -1
  481. data/src/core/lib/compression/stream_compression_identity.cc +1 -3
  482. data/src/core/lib/debug/stats.h +2 -2
  483. data/src/core/lib/debug/stats_data.cc +1 -0
  484. data/src/core/lib/debug/stats_data.h +13 -13
  485. data/src/core/lib/gpr/alloc.cc +3 -2
  486. data/src/core/lib/gpr/cpu_iphone.cc +10 -2
  487. data/src/core/lib/gpr/log.cc +59 -17
  488. data/src/core/lib/gpr/log_linux.cc +19 -3
  489. data/src/core/lib/gpr/log_posix.cc +15 -1
  490. data/src/core/lib/gpr/log_windows.cc +18 -4
  491. data/src/core/lib/gpr/murmur_hash.cc +1 -1
  492. data/src/core/lib/gpr/spinlock.h +10 -2
  493. data/src/core/lib/gpr/string.cc +23 -22
  494. data/src/core/lib/gpr/string.h +5 -6
  495. data/src/core/lib/gpr/sync.cc +4 -4
  496. data/src/core/lib/gpr/time.cc +12 -12
  497. data/src/core/lib/gpr/time_precise.cc +5 -2
  498. data/src/core/lib/gpr/time_precise.h +6 -2
  499. data/src/core/lib/gpr/tls.h +4 -0
  500. data/src/core/lib/gpr/tls_msvc.h +2 -0
  501. data/src/core/lib/gpr/tls_stdcpp.h +48 -0
  502. data/src/core/lib/gpr/useful.h +5 -4
  503. data/src/core/lib/gprpp/arena.h +3 -2
  504. data/src/core/lib/gprpp/dual_ref_counted.h +331 -0
  505. data/src/core/lib/gprpp/examine_stack.cc +43 -0
  506. data/src/core/lib/gprpp/examine_stack.h +46 -0
  507. data/src/core/lib/gprpp/fork.cc +2 -2
  508. data/src/core/lib/gprpp/manual_constructor.h +1 -1
  509. data/src/core/lib/gprpp/mpscq.cc +2 -2
  510. data/src/core/lib/gprpp/orphanable.h +4 -8
  511. data/src/core/lib/gprpp/ref_counted.h +91 -68
  512. data/src/core/lib/gprpp/ref_counted_ptr.h +166 -7
  513. data/src/core/lib/{security/authorization/mock_cel/statusor.h → gprpp/stat.h} +13 -25
  514. data/src/core/lib/gprpp/stat_posix.cc +49 -0
  515. data/src/core/lib/gprpp/stat_windows.cc +48 -0
  516. data/src/core/lib/gprpp/sync.h +129 -40
  517. data/src/core/lib/gprpp/thd.h +2 -2
  518. data/src/core/lib/gprpp/thd_posix.cc +42 -37
  519. data/src/core/lib/gprpp/thd_windows.cc +3 -1
  520. data/src/core/lib/gprpp/time_util.cc +77 -0
  521. data/src/core/lib/gprpp/time_util.h +42 -0
  522. data/src/core/lib/http/httpcli.cc +1 -1
  523. data/src/core/lib/http/httpcli.h +2 -3
  524. data/src/core/lib/http/httpcli_security_connector.cc +3 -3
  525. data/src/core/lib/http/parser.cc +47 -27
  526. data/src/core/lib/iomgr/call_combiner.cc +8 -5
  527. data/src/core/lib/iomgr/combiner.cc +2 -1
  528. data/src/core/lib/iomgr/endpoint.h +1 -1
  529. data/src/core/lib/iomgr/endpoint_cfstream.cc +9 -5
  530. data/src/core/lib/iomgr/error.cc +17 -12
  531. data/src/core/lib/iomgr/error_internal.h +1 -1
  532. data/src/core/lib/iomgr/ev_apple.cc +10 -7
  533. data/src/core/lib/iomgr/ev_epoll1_linux.cc +20 -13
  534. data/src/core/lib/iomgr/ev_epollex_linux.cc +29 -21
  535. data/src/core/lib/iomgr/ev_poll_posix.cc +9 -7
  536. data/src/core/lib/iomgr/exec_ctx.cc +1 -1
  537. data/src/core/lib/iomgr/exec_ctx.h +16 -12
  538. data/src/core/lib/iomgr/executor.cc +2 -1
  539. data/src/core/lib/iomgr/executor.h +1 -1
  540. data/src/core/lib/iomgr/executor/mpmcqueue.h +5 -5
  541. data/src/core/lib/iomgr/executor/threadpool.h +4 -4
  542. data/src/core/lib/iomgr/iomgr.cc +1 -1
  543. data/src/core/lib/iomgr/iomgr_posix.cc +0 -1
  544. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +0 -1
  545. data/src/core/lib/iomgr/load_file.h +1 -1
  546. data/src/core/lib/iomgr/lockfree_event.cc +19 -14
  547. data/src/core/lib/iomgr/lockfree_event.h +2 -2
  548. data/src/core/lib/iomgr/parse_address.cc +127 -43
  549. data/src/core/lib/iomgr/parse_address.h +32 -8
  550. data/src/core/lib/iomgr/poller/eventmanager_libuv.cc +2 -1
  551. data/src/core/lib/iomgr/poller/eventmanager_libuv.h +1 -1
  552. data/src/core/lib/iomgr/pollset_set_custom.cc +1 -1
  553. data/src/core/lib/iomgr/python_util.h +4 -4
  554. data/src/core/lib/iomgr/resolve_address.cc +4 -4
  555. data/src/core/lib/iomgr/resolve_address_posix.cc +1 -5
  556. data/src/core/lib/iomgr/resource_quota.cc +4 -4
  557. data/src/core/lib/iomgr/sockaddr_utils.cc +11 -11
  558. data/src/core/lib/iomgr/sockaddr_utils.h +1 -1
  559. data/src/core/lib/iomgr/socket_factory_posix.cc +3 -2
  560. data/src/core/lib/iomgr/socket_mutator.cc +3 -2
  561. data/src/core/lib/iomgr/socket_utils_common_posix.cc +1 -0
  562. data/src/core/lib/iomgr/tcp_client.cc +3 -3
  563. data/src/core/lib/iomgr/tcp_client_custom.cc +7 -6
  564. data/src/core/lib/iomgr/tcp_client_posix.cc +1 -1
  565. data/src/core/lib/iomgr/tcp_custom.cc +22 -17
  566. data/src/core/lib/iomgr/tcp_posix.cc +16 -12
  567. data/src/core/lib/iomgr/tcp_server_custom.cc +28 -22
  568. data/src/core/lib/iomgr/timer_custom.cc +5 -5
  569. data/src/core/lib/iomgr/timer_generic.cc +3 -3
  570. data/src/core/lib/iomgr/timer_manager.cc +2 -2
  571. data/src/core/lib/iomgr/udp_server.cc +1 -2
  572. data/src/core/lib/iomgr/udp_server.h +1 -2
  573. data/src/core/lib/iomgr/unix_sockets_posix.cc +32 -21
  574. data/src/core/lib/iomgr/unix_sockets_posix.h +5 -0
  575. data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +7 -0
  576. data/src/core/lib/iomgr/wakeup_fd_pipe.cc +2 -2
  577. data/src/core/lib/json/json.h +12 -2
  578. data/src/core/lib/json/json_reader.cc +8 -4
  579. data/src/core/lib/json/json_util.cc +58 -0
  580. data/src/core/lib/json/json_util.h +204 -0
  581. data/src/core/lib/json/json_writer.cc +2 -1
  582. data/src/core/lib/security/authorization/evaluate_args.cc +5 -10
  583. data/src/core/lib/security/authorization/evaluate_args.h +1 -1
  584. data/src/core/lib/security/authorization/matchers.cc +339 -0
  585. data/src/core/lib/security/authorization/matchers.h +158 -0
  586. data/src/core/lib/security/authorization/mock_cel/activation.h +1 -1
  587. data/src/core/lib/security/authorization/mock_cel/cel_expr_builder_factory.h +3 -1
  588. data/src/core/lib/security/authorization/mock_cel/cel_expression.h +5 -4
  589. data/src/core/lib/security/authorization/mock_cel/cel_value.h +13 -7
  590. data/src/core/lib/security/authorization/mock_cel/evaluator_core.h +6 -6
  591. data/src/core/lib/security/authorization/mock_cel/flat_expr_builder.h +10 -9
  592. data/src/core/lib/security/context/security_context.cc +4 -3
  593. data/src/core/lib/security/context/security_context.h +3 -1
  594. data/src/core/lib/security/credentials/alts/alts_credentials.cc +2 -1
  595. data/src/core/lib/security/credentials/alts/alts_credentials.h +1 -1
  596. data/src/core/lib/security/credentials/alts/check_gcp_environment.cc +1 -1
  597. data/src/core/lib/security/credentials/credentials.cc +7 -7
  598. data/src/core/lib/security/credentials/credentials.h +5 -4
  599. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +413 -0
  600. data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +80 -0
  601. data/src/core/lib/security/credentials/external/aws_request_signer.cc +213 -0
  602. data/src/core/lib/security/credentials/external/aws_request_signer.h +72 -0
  603. data/src/core/lib/security/credentials/external/external_account_credentials.cc +497 -0
  604. data/src/core/lib/security/credentials/external/external_account_credentials.h +120 -0
  605. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +135 -0
  606. data/src/core/lib/security/credentials/external/file_external_account_credentials.h +48 -0
  607. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +213 -0
  608. data/src/core/lib/security/credentials/external/url_external_account_credentials.h +58 -0
  609. data/src/core/lib/security/credentials/fake/fake_credentials.cc +3 -2
  610. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +25 -18
  611. data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +64 -0
  612. data/src/core/lib/security/credentials/jwt/json_token.cc +3 -3
  613. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +4 -3
  614. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +5 -4
  615. data/src/core/lib/security/credentials/local/local_credentials.cc +2 -1
  616. data/src/core/lib/security/credentials/local/local_credentials.h +1 -1
  617. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +39 -46
  618. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +5 -4
  619. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +1 -1
  620. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +7 -6
  621. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +2 -2
  622. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +346 -0
  623. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +213 -0
  624. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +399 -0
  625. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +138 -0
  626. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +78 -150
  627. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +57 -187
  628. data/src/core/lib/security/credentials/tls/tls_credentials.cc +18 -13
  629. data/src/core/lib/security/credentials/tls/tls_credentials.h +3 -3
  630. data/src/core/lib/security/credentials/tls/tls_utils.cc +91 -0
  631. data/src/core/lib/security/credentials/tls/tls_utils.h +38 -0
  632. data/src/core/lib/security/credentials/xds/xds_credentials.cc +244 -0
  633. data/src/core/lib/security/credentials/xds/xds_credentials.h +69 -0
  634. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +1 -1
  635. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +9 -13
  636. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +121 -0
  637. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +87 -0
  638. data/src/core/lib/security/security_connector/load_system_roots.h +4 -0
  639. data/src/core/lib/security/security_connector/load_system_roots_linux.h +2 -0
  640. data/src/core/lib/security/security_connector/local/local_security_connector.cc +3 -3
  641. data/src/core/lib/security/security_connector/security_connector.cc +4 -3
  642. data/src/core/lib/security/security_connector/security_connector.h +4 -2
  643. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +4 -4
  644. data/src/core/lib/security/security_connector/ssl_utils.cc +5 -2
  645. data/src/core/lib/security/security_connector/ssl_utils.h +19 -19
  646. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +354 -279
  647. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +105 -61
  648. data/src/core/lib/security/transport/secure_endpoint.cc +2 -2
  649. data/src/core/lib/security/transport/security_handshaker.cc +4 -6
  650. data/src/core/lib/security/transport/server_auth_filter.cc +2 -1
  651. data/src/core/lib/security/util/json_util.h +1 -0
  652. data/src/core/lib/slice/slice.cc +7 -4
  653. data/src/core/lib/slice/slice_buffer.cc +2 -1
  654. data/src/core/lib/slice/slice_intern.cc +7 -8
  655. data/src/core/lib/slice/slice_internal.h +2 -2
  656. data/src/core/lib/surface/call.cc +41 -32
  657. data/src/core/lib/surface/call_details.cc +8 -8
  658. data/src/core/lib/surface/channel.cc +25 -41
  659. data/src/core/lib/surface/channel.h +9 -3
  660. data/src/core/lib/surface/channel_init.cc +1 -1
  661. data/src/core/lib/surface/completion_queue.cc +30 -24
  662. data/src/core/lib/surface/completion_queue.h +16 -16
  663. data/src/core/lib/surface/init.cc +45 -29
  664. data/src/core/lib/surface/lame_client.cc +20 -46
  665. data/src/core/lib/surface/lame_client.h +4 -0
  666. data/src/core/lib/surface/server.cc +66 -20
  667. data/src/core/lib/surface/server.h +42 -7
  668. data/src/core/lib/surface/validate_metadata.h +3 -0
  669. data/src/core/lib/surface/version.cc +2 -2
  670. data/src/core/lib/transport/authority_override.cc +6 -4
  671. data/src/core/lib/transport/authority_override.h +7 -2
  672. data/src/core/lib/transport/bdp_estimator.cc +1 -1
  673. data/src/core/lib/transport/bdp_estimator.h +2 -1
  674. data/src/core/lib/transport/byte_stream.h +3 -3
  675. data/src/core/lib/transport/connectivity_state.h +11 -9
  676. data/src/core/lib/transport/error_utils.h +1 -1
  677. data/src/core/lib/transport/metadata.cc +16 -2
  678. data/src/core/lib/transport/metadata.h +2 -2
  679. data/src/core/lib/transport/metadata_batch.h +4 -4
  680. data/src/core/lib/transport/static_metadata.cc +1 -1
  681. data/src/core/lib/transport/status_metadata.cc +4 -3
  682. data/src/core/lib/transport/timeout_encoding.cc +4 -4
  683. data/src/core/lib/transport/transport.cc +5 -3
  684. data/src/core/lib/transport/transport.h +8 -8
  685. data/src/core/lib/uri/uri_parser.cc +131 -249
  686. data/src/core/lib/uri/uri_parser.h +57 -21
  687. data/src/core/plugin_registry/grpc_plugin_registry.cc +47 -20
  688. data/src/core/tsi/alts/crypt/gsec.cc +5 -4
  689. data/src/core/tsi/alts/frame_protector/frame_handler.cc +8 -6
  690. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +18 -21
  691. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +43 -47
  692. data/src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.cc +8 -6
  693. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +4 -4
  694. data/src/core/tsi/fake_transport_security.cc +7 -4
  695. data/src/core/tsi/local_transport_security.cc +5 -1
  696. data/src/core/tsi/local_transport_security.h +6 -7
  697. data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +1 -1
  698. data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +0 -2
  699. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +3 -2
  700. data/src/core/tsi/ssl_transport_security.cc +75 -58
  701. data/src/core/tsi/ssl_transport_security.h +6 -6
  702. data/src/core/tsi/transport_security.cc +10 -8
  703. data/src/core/tsi/transport_security_interface.h +1 -1
  704. data/src/ruby/ext/grpc/extconf.rb +1 -1
  705. data/src/ruby/ext/grpc/rb_event_thread.c +2 -0
  706. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +36 -16
  707. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +70 -40
  708. data/src/ruby/lib/grpc/version.rb +1 -1
  709. data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +35 -0
  710. data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +18 -0
  711. data/src/ruby/spec/pb/codegen/package_option_spec.rb +2 -6
  712. data/third_party/abseil-cpp/absl/algorithm/container.h +59 -22
  713. data/third_party/abseil-cpp/absl/base/attributes.h +99 -38
  714. data/third_party/abseil-cpp/absl/base/call_once.h +1 -1
  715. data/third_party/abseil-cpp/absl/base/casts.h +9 -6
  716. data/third_party/abseil-cpp/absl/base/config.h +60 -17
  717. data/third_party/abseil-cpp/absl/base/dynamic_annotations.h +428 -335
  718. data/third_party/abseil-cpp/absl/base/internal/bits.h +17 -16
  719. data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +5 -0
  720. data/third_party/abseil-cpp/absl/base/internal/dynamic_annotations.h +398 -0
  721. data/third_party/abseil-cpp/absl/base/internal/invoke.h +4 -4
  722. data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.cc +1 -1
  723. data/third_party/abseil-cpp/absl/base/internal/low_level_scheduling.h +29 -1
  724. data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +2 -2
  725. data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +7 -5
  726. data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +25 -38
  727. data/third_party/abseil-cpp/absl/base/internal/spinlock.h +19 -25
  728. data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +8 -0
  729. data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +28 -5
  730. data/third_party/abseil-cpp/absl/base/internal/sysinfo.h +8 -0
  731. data/third_party/abseil-cpp/absl/base/internal/tsan_mutex_interface.h +3 -1
  732. data/third_party/abseil-cpp/absl/base/internal/unaligned_access.h +2 -2
  733. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +3 -3
  734. data/third_party/abseil-cpp/absl/base/macros.h +36 -109
  735. data/third_party/abseil-cpp/absl/base/optimization.h +61 -1
  736. data/third_party/abseil-cpp/absl/base/options.h +31 -4
  737. data/third_party/abseil-cpp/absl/base/policy_checks.h +1 -1
  738. data/third_party/abseil-cpp/absl/base/thread_annotations.h +94 -39
  739. data/third_party/abseil-cpp/absl/container/fixed_array.h +42 -25
  740. data/third_party/abseil-cpp/absl/container/flat_hash_map.h +606 -0
  741. data/third_party/abseil-cpp/absl/container/flat_hash_set.h +2 -1
  742. data/third_party/abseil-cpp/absl/container/inlined_vector.h +33 -36
  743. data/third_party/abseil-cpp/absl/container/internal/common.h +6 -2
  744. data/third_party/abseil-cpp/absl/container/internal/compressed_tuple.h +33 -8
  745. data/third_party/abseil-cpp/absl/container/internal/container_memory.h +49 -29
  746. data/third_party/abseil-cpp/absl/container/internal/hash_function_defaults.h +15 -0
  747. data/third_party/abseil-cpp/absl/container/internal/hash_policy_traits.h +24 -7
  748. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +2 -1
  749. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +35 -11
  750. data/third_party/abseil-cpp/absl/container/internal/have_sse.h +10 -9
  751. data/third_party/abseil-cpp/absl/container/internal/layout.h +7 -5
  752. data/third_party/abseil-cpp/absl/container/internal/raw_hash_map.h +197 -0
  753. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +55 -34
  754. data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.cc +5 -4
  755. data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +66 -16
  756. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +4 -0
  757. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +13 -4
  758. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +43 -24
  759. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +12 -3
  760. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_win32-inl.inc +10 -2
  761. data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +22 -1
  762. data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +0 -21
  763. data/third_party/abseil-cpp/absl/debugging/symbolize.cc +12 -1
  764. data/third_party/abseil-cpp/absl/debugging/symbolize_darwin.inc +101 -0
  765. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +100 -20
  766. data/third_party/abseil-cpp/absl/functional/bind_front.h +184 -0
  767. data/third_party/abseil-cpp/absl/functional/function_ref.h +1 -1
  768. data/third_party/abseil-cpp/absl/functional/internal/front_binder.h +95 -0
  769. data/third_party/abseil-cpp/absl/functional/internal/function_ref.h +2 -2
  770. data/third_party/abseil-cpp/absl/hash/hash.h +6 -5
  771. data/third_party/abseil-cpp/absl/hash/internal/hash.h +73 -65
  772. data/third_party/abseil-cpp/absl/memory/memory.h +4 -0
  773. data/third_party/abseil-cpp/absl/meta/type_traits.h +2 -8
  774. data/third_party/abseil-cpp/absl/numeric/int128.cc +13 -27
  775. data/third_party/abseil-cpp/absl/numeric/int128.h +16 -15
  776. data/third_party/abseil-cpp/absl/status/internal/status_internal.h +51 -0
  777. data/third_party/abseil-cpp/absl/status/internal/statusor_internal.h +399 -0
  778. data/third_party/abseil-cpp/absl/status/status.cc +4 -6
  779. data/third_party/abseil-cpp/absl/status/status.h +502 -113
  780. data/third_party/abseil-cpp/absl/status/status_payload_printer.cc +5 -10
  781. data/third_party/abseil-cpp/absl/status/statusor.cc +71 -0
  782. data/third_party/abseil-cpp/absl/status/statusor.h +760 -0
  783. data/third_party/abseil-cpp/absl/strings/charconv.cc +2 -2
  784. data/third_party/abseil-cpp/absl/strings/cord.cc +91 -112
  785. data/third_party/abseil-cpp/absl/strings/cord.h +360 -205
  786. data/third_party/abseil-cpp/absl/strings/escaping.cc +9 -9
  787. data/third_party/abseil-cpp/absl/strings/internal/char_map.h +1 -1
  788. data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.cc +1 -1
  789. data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.h +2 -2
  790. data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc +2 -2
  791. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +45 -23
  792. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +222 -136
  793. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +136 -64
  794. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +1 -1
  795. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +14 -21
  796. data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +7 -14
  797. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +31 -7
  798. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +147 -135
  799. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +999 -87
  800. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.h +3 -3
  801. data/third_party/abseil-cpp/absl/strings/internal/str_format/output.h +4 -12
  802. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc +8 -6
  803. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +13 -11
  804. data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +2 -2
  805. data/third_party/abseil-cpp/absl/strings/str_cat.cc +4 -4
  806. data/third_party/abseil-cpp/absl/strings/str_cat.h +1 -1
  807. data/third_party/abseil-cpp/absl/strings/str_format.h +289 -13
  808. data/third_party/abseil-cpp/absl/strings/str_split.cc +2 -2
  809. data/third_party/abseil-cpp/absl/strings/str_split.h +1 -0
  810. data/third_party/abseil-cpp/absl/strings/string_view.h +26 -19
  811. data/third_party/abseil-cpp/absl/strings/substitute.cc +5 -5
  812. data/third_party/abseil-cpp/absl/strings/substitute.h +32 -29
  813. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +3 -3
  814. data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc +4 -3
  815. data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +28 -28
  816. data/third_party/abseil-cpp/absl/synchronization/internal/mutex_nonprod.inc +4 -16
  817. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +1 -1
  818. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +8 -0
  819. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +2 -2
  820. data/third_party/abseil-cpp/absl/synchronization/mutex.cc +75 -64
  821. data/third_party/abseil-cpp/absl/synchronization/mutex.h +15 -6
  822. data/third_party/abseil-cpp/absl/time/civil_time.cc +9 -9
  823. data/third_party/abseil-cpp/absl/time/clock.cc +3 -3
  824. data/third_party/abseil-cpp/absl/time/duration.cc +90 -59
  825. data/third_party/abseil-cpp/absl/time/format.cc +43 -36
  826. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +26 -16
  827. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +4 -2
  828. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/zone_info_source.h +1 -1
  829. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +136 -29
  830. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.cc +13 -21
  831. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.h +1 -1
  832. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc +136 -129
  833. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.h +4 -5
  834. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.cc +8 -7
  835. data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +6 -6
  836. data/third_party/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc +2 -1
  837. data/third_party/abseil-cpp/absl/time/time.h +15 -16
  838. data/third_party/abseil-cpp/absl/types/internal/variant.h +4 -4
  839. data/third_party/abseil-cpp/absl/types/optional.h +9 -9
  840. data/third_party/abseil-cpp/absl/types/span.h +49 -36
  841. data/third_party/abseil-cpp/absl/utility/utility.h +2 -2
  842. data/third_party/address_sorting/include/address_sorting/address_sorting.h +2 -0
  843. data/third_party/boringssl-with-bazel/err_data.c +728 -720
  844. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bitstr.c +3 -3
  845. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_enum.c +2 -2
  846. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_int.c +5 -5
  847. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +3 -10
  848. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_octet.c +3 -3
  849. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_type.c +4 -2
  850. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_utctm.c +2 -2
  851. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +15 -20
  852. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_locl.h +30 -0
  853. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_dec.c +28 -79
  854. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +39 -85
  855. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_fre.c +5 -16
  856. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_new.c +10 -61
  857. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_typ.c +0 -2
  858. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_utl.c +2 -2
  859. data/third_party/boringssl-with-bazel/src/crypto/bio/bio.c +2 -0
  860. data/third_party/boringssl-with-bazel/src/crypto/bio/socket_helper.c +4 -0
  861. data/third_party/boringssl-with-bazel/src/crypto/blake2/blake2.c +158 -0
  862. data/third_party/boringssl-with-bazel/src/crypto/bn_extra/bn_asn1.c +3 -10
  863. data/third_party/boringssl-with-bazel/src/crypto/bytestring/ber.c +8 -9
  864. data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbs.c +60 -45
  865. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_chacha20poly1305.c +6 -81
  866. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/internal.h +87 -0
  867. data/third_party/boringssl-with-bazel/src/crypto/cpu-aarch64-win.c +41 -0
  868. data/third_party/boringssl-with-bazel/src/crypto/{dh → dh_extra}/dh_asn1.c +0 -0
  869. data/third_party/boringssl-with-bazel/src/crypto/{dh → dh_extra}/params.c +179 -0
  870. data/third_party/boringssl-with-bazel/src/crypto/digest_extra/digest_extra.c +25 -0
  871. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +9 -43
  872. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa_asn1.c +55 -4
  873. data/third_party/boringssl-with-bazel/src/crypto/dsa/internal.h +34 -0
  874. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/ec_asn1.c +2 -17
  875. data/third_party/boringssl-with-bazel/src/crypto/evp/evp.c +4 -0
  876. data/third_party/boringssl-with-bazel/src/crypto/evp/p_dsa_asn1.c +6 -2
  877. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +3 -1
  878. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/bn.c +13 -20
  879. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/div.c +2 -3
  880. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +9 -1
  881. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_aes.c +173 -35
  882. data/third_party/boringssl-with-bazel/src/crypto/{dh → fipsmodule/dh}/check.c +0 -0
  883. data/third_party/boringssl-with-bazel/src/crypto/{dh → fipsmodule/dh}/dh.c +136 -213
  884. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digest.c +2 -0
  885. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +12 -0
  886. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +9 -1
  887. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/internal.h +28 -0
  888. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.c +128 -38
  889. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +0 -7
  890. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/internal.h +4 -0
  891. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +30 -10
  892. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +107 -54
  893. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +155 -2
  894. data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +112 -36
  895. data/third_party/boringssl-with-bazel/src/crypto/hpke/internal.h +63 -9
  896. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305.c +10 -7
  897. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_arm.c +13 -11
  898. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_vec.c +4 -0
  899. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/passive.c +34 -0
  900. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/rand_extra.c +4 -0
  901. data/third_party/boringssl-with-bazel/src/crypto/stack/stack.c +7 -13
  902. data/third_party/boringssl-with-bazel/src/crypto/trust_token/internal.h +118 -49
  903. data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +267 -95
  904. data/third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token.c +210 -34
  905. data/third_party/boringssl-with-bazel/src/crypto/trust_token/voprf.c +766 -0
  906. data/third_party/boringssl-with-bazel/src/crypto/x509/a_strex.c +3 -3
  907. data/third_party/boringssl-with-bazel/src/crypto/x509/algorithm.c +6 -4
  908. data/third_party/boringssl-with-bazel/src/crypto/x509/rsa_pss.c +5 -1
  909. data/third_party/boringssl-with-bazel/src/crypto/x509/t_crl.c +3 -3
  910. data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509.c +1 -1
  911. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c +8 -3
  912. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_ext.c +27 -21
  913. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_obj.c +1 -1
  914. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_r2x.c +1 -1
  915. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +32 -11
  916. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_trs.c +3 -3
  917. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_txt.c +67 -67
  918. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_v3.c +4 -4
  919. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +29 -35
  920. data/third_party/boringssl-with-bazel/src/crypto/x509/x509cset.c +42 -25
  921. data/third_party/boringssl-with-bazel/src/crypto/x509/x509name.c +9 -8
  922. data/third_party/boringssl-with-bazel/src/crypto/x509/x_all.c +10 -10
  923. data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +3 -4
  924. data/third_party/boringssl-with-bazel/src/crypto/x509/x_name.c +28 -40
  925. data/third_party/boringssl-with-bazel/src/crypto/x509/x_pkey.c +2 -2
  926. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509.c +38 -3
  927. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509a.c +2 -2
  928. data/third_party/boringssl-with-bazel/src/crypto/x509v3/ext_dat.h +1 -4
  929. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_data.c +5 -3
  930. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_akey.c +3 -3
  931. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_alt.c +25 -24
  932. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_bitst.c +3 -3
  933. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_conf.c +32 -28
  934. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +2 -2
  935. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_enum.c +2 -1
  936. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_genn.c +42 -22
  937. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ia5.c +3 -4
  938. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_info.c +1 -1
  939. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_lib.c +25 -36
  940. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_prn.c +2 -2
  941. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +55 -8
  942. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c +7 -7
  943. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_utl.c +6 -6
  944. data/third_party/boringssl-with-bazel/src/include/openssl/aead.h +24 -0
  945. data/third_party/boringssl-with-bazel/src/include/openssl/arm_arch.h +10 -8
  946. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +652 -546
  947. data/third_party/boringssl-with-bazel/src/include/openssl/asn1t.h +0 -167
  948. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +15 -7
  949. data/third_party/boringssl-with-bazel/src/include/openssl/bio.h +4 -0
  950. data/third_party/boringssl-with-bazel/src/include/openssl/blake2.h +62 -0
  951. data/third_party/boringssl-with-bazel/src/include/openssl/bytestring.h +22 -7
  952. data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +21 -0
  953. data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +1 -1
  954. data/third_party/boringssl-with-bazel/src/include/openssl/des.h +6 -0
  955. data/third_party/boringssl-with-bazel/src/include/openssl/dh.h +62 -20
  956. data/third_party/boringssl-with-bazel/src/include/openssl/digest.h +10 -0
  957. data/third_party/boringssl-with-bazel/src/include/openssl/ec.h +15 -0
  958. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +16 -3
  959. data/third_party/boringssl-with-bazel/src/include/openssl/opensslconf.h +3 -0
  960. data/third_party/boringssl-with-bazel/src/include/openssl/pem.h +202 -134
  961. data/third_party/boringssl-with-bazel/src/include/openssl/rand.h +3 -0
  962. data/third_party/boringssl-with-bazel/src/include/openssl/span.h +2 -1
  963. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +106 -27
  964. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +31 -8
  965. data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +42 -14
  966. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +462 -163
  967. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +593 -440
  968. data/third_party/boringssl-with-bazel/src/ssl/bio_ssl.cc +18 -5
  969. data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +35 -0
  970. data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +22 -21
  971. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +13 -23
  972. data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +11 -6
  973. data/third_party/boringssl-with-bazel/src/ssl/internal.h +82 -26
  974. data/third_party/boringssl-with-bazel/src/ssl/s3_lib.cc +0 -1
  975. data/third_party/boringssl-with-bazel/src/ssl/ssl_asn1.cc +49 -9
  976. data/third_party/boringssl-with-bazel/src/ssl/ssl_cipher.cc +8 -9
  977. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +87 -14
  978. data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +18 -22
  979. data/third_party/boringssl-with-bazel/src/ssl/ssl_transcript.cc +2 -2
  980. data/third_party/boringssl-with-bazel/src/ssl/t1_enc.cc +5 -7
  981. data/third_party/boringssl-with-bazel/src/ssl/t1_lib.cc +537 -34
  982. data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +1 -2
  983. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +59 -21
  984. data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +48 -15
  985. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +194 -58
  986. data/third_party/upb/third_party/wyhash/wyhash.h +145 -0
  987. data/third_party/upb/upb/decode.c +248 -167
  988. data/third_party/upb/upb/decode.h +20 -1
  989. data/third_party/upb/upb/decode.int.h +163 -0
  990. data/third_party/upb/upb/decode_fast.c +1040 -0
  991. data/third_party/upb/upb/decode_fast.h +126 -0
  992. data/third_party/upb/upb/def.c +2178 -0
  993. data/third_party/upb/upb/def.h +315 -0
  994. data/third_party/upb/upb/def.hpp +439 -0
  995. data/third_party/upb/upb/encode.c +227 -169
  996. data/third_party/upb/upb/encode.h +27 -2
  997. data/third_party/upb/upb/json_decode.c +1443 -0
  998. data/third_party/upb/upb/json_decode.h +23 -0
  999. data/third_party/upb/upb/json_encode.c +713 -0
  1000. data/third_party/upb/upb/json_encode.h +36 -0
  1001. data/third_party/upb/upb/msg.c +167 -88
  1002. data/third_party/upb/upb/msg.h +174 -34
  1003. data/third_party/upb/upb/port_def.inc +74 -61
  1004. data/third_party/upb/upb/port_undef.inc +3 -7
  1005. data/third_party/upb/upb/reflection.c +408 -0
  1006. data/third_party/upb/upb/reflection.h +168 -0
  1007. data/third_party/upb/upb/table.c +34 -197
  1008. data/third_party/upb/upb/table.int.h +14 -5
  1009. data/third_party/upb/upb/text_encode.c +421 -0
  1010. data/third_party/upb/upb/text_encode.h +38 -0
  1011. data/third_party/upb/upb/upb.c +18 -41
  1012. data/third_party/upb/upb/upb.h +36 -7
  1013. data/third_party/upb/upb/upb.hpp +4 -4
  1014. data/third_party/upb/upb/upb.int.h +29 -0
  1015. metadata +309 -63
  1016. data/src/core/ext/filters/client_channel/lb_policy/xds/eds.cc +0 -946
  1017. data/src/core/ext/filters/client_channel/lb_policy/xds/lrs.cc +0 -537
  1018. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_routing.cc +0 -1141
  1019. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc +0 -485
  1020. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc +0 -68
  1021. data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +0 -354
  1022. data/src/core/ext/filters/client_channel/resolving_lb_policy.h +0 -142
  1023. data/src/core/ext/upb-generated/gogoproto/gogo.upb.c +0 -17
  1024. data/src/core/ext/xds/xds_channel.h +0 -46
  1025. data/src/core/ext/xds/xds_channel_secure.cc +0 -103
  1026. data/src/core/lib/gprpp/map.h +0 -53
  1027. data/src/core/lib/iomgr/iomgr_posix.h +0 -26
  1028. data/third_party/abseil-cpp/absl/base/dynamic_annotations.cc +0 -129
  1029. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pku.c +0 -110
  1030. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_sxnet.c +0 -274
  1031. data/third_party/upb/upb/port.c +0 -26
@@ -395,6 +395,9 @@ grpc_security_status grpc_ssl_tsi_client_handshaker_factory_init(
395
395
  const char* root_certs;
396
396
  const tsi_ssl_root_certs_store* root_store;
397
397
  if (pem_root_certs == nullptr) {
398
+ gpr_log(GPR_INFO,
399
+ "No root certificates specified; use ones stored in system default "
400
+ "locations instead");
398
401
  // Use default root certificates.
399
402
  root_certs = grpc_core::DefaultSslRootStore::GetPemRootCerts();
400
403
  if (root_certs == nullptr) {
@@ -427,7 +430,7 @@ grpc_security_status grpc_ssl_tsi_client_handshaker_factory_init(
427
430
  const tsi_result result =
428
431
  tsi_create_ssl_client_handshaker_factory_with_options(&options,
429
432
  handshaker_factory);
430
- gpr_free((void*)options.alpn_protocols);
433
+ gpr_free(options.alpn_protocols);
431
434
  if (result != TSI_OK) {
432
435
  gpr_log(GPR_ERROR, "Handshaker factory creation failed with %s.",
433
436
  tsi_result_to_string(result));
@@ -459,7 +462,7 @@ grpc_security_status grpc_ssl_tsi_server_handshaker_factory_init(
459
462
  const tsi_result result =
460
463
  tsi_create_ssl_server_handshaker_factory_with_options(&options,
461
464
  handshaker_factory);
462
- gpr_free((void*)alpn_protocol_strings);
465
+ gpr_free(alpn_protocol_strings);
463
466
  if (result != TSI_OK) {
464
467
  gpr_log(GPR_ERROR, "Handshaker factory creation failed with %s.",
465
468
  tsi_result_to_string(result));
@@ -145,20 +145,15 @@ class DefaultSslRootStore {
145
145
 
146
146
  class PemKeyCertPair {
147
147
  public:
148
- // Construct from the C struct. We steal its members and then immediately
149
- // free it.
150
- explicit PemKeyCertPair(grpc_ssl_pem_key_cert_pair* pair)
151
- : private_key_(const_cast<char*>(pair->private_key)),
152
- cert_chain_(const_cast<char*>(pair->cert_chain)) {
153
- gpr_free(pair);
154
- }
148
+ PemKeyCertPair(absl::string_view private_key, absl::string_view cert_chain)
149
+ : private_key_(private_key), cert_chain_(cert_chain) {}
155
150
 
156
151
  // Movable.
157
- PemKeyCertPair(PemKeyCertPair&& other) {
152
+ PemKeyCertPair(PemKeyCertPair&& other) noexcept {
158
153
  private_key_ = std::move(other.private_key_);
159
154
  cert_chain_ = std::move(other.cert_chain_);
160
155
  }
161
- PemKeyCertPair& operator=(PemKeyCertPair&& other) {
156
+ PemKeyCertPair& operator=(PemKeyCertPair&& other) noexcept {
162
157
  private_key_ = std::move(other.private_key_);
163
158
  cert_chain_ = std::move(other.cert_chain_);
164
159
  return *this;
@@ -166,23 +161,28 @@ class PemKeyCertPair {
166
161
 
167
162
  // Copyable.
168
163
  PemKeyCertPair(const PemKeyCertPair& other)
169
- : private_key_(gpr_strdup(other.private_key())),
170
- cert_chain_(gpr_strdup(other.cert_chain())) {}
164
+ : private_key_(other.private_key()), cert_chain_(other.cert_chain()) {}
171
165
  PemKeyCertPair& operator=(const PemKeyCertPair& other) {
172
- private_key_ = grpc_core::UniquePtr<char>(gpr_strdup(other.private_key()));
173
- cert_chain_ = grpc_core::UniquePtr<char>(gpr_strdup(other.cert_chain()));
166
+ private_key_ = other.private_key();
167
+ cert_chain_ = other.cert_chain();
174
168
  return *this;
175
169
  }
176
170
 
177
- char* private_key() const { return private_key_.get(); }
178
- char* cert_chain() const { return cert_chain_.get(); }
171
+ bool operator==(const PemKeyCertPair& other) const {
172
+ return this->private_key() == other.private_key() &&
173
+ this->cert_chain() == other.cert_chain();
174
+ }
175
+
176
+ const std::string& private_key() const { return private_key_; }
177
+ const std::string& cert_chain() const { return cert_chain_; }
179
178
 
180
179
  private:
181
- grpc_core::UniquePtr<char> private_key_;
182
- grpc_core::UniquePtr<char> cert_chain_;
180
+ std::string private_key_;
181
+ std::string cert_chain_;
183
182
  };
184
183
 
184
+ typedef absl::InlinedVector<grpc_core::PemKeyCertPair, 1> PemKeyCertPairList;
185
+
185
186
  } // namespace grpc_core
186
187
 
187
- #endif /* GRPC_CORE_LIB_SECURITY_SECURITY_CONNECTOR_SSL_UTILS_H \
188
- */
188
+ #endif // GRPC_CORE_LIB_SECURITY_SECURITY_CONNECTOR_SSL_UTILS_H
@@ -46,7 +46,7 @@ namespace grpc_core {
46
46
  namespace {
47
47
 
48
48
  tsi_ssl_pem_key_cert_pair* ConvertToTsiPemKeyCertPair(
49
- const grpc_tls_key_materials_config::PemKeyCertPairList& cert_pair_list) {
49
+ const grpc_core::PemKeyCertPairList& cert_pair_list) {
50
50
  tsi_ssl_pem_key_cert_pair* tsi_pairs = nullptr;
51
51
  size_t num_key_cert_pairs = cert_pair_list.size();
52
52
  if (num_key_cert_pairs > 0) {
@@ -55,137 +55,146 @@ tsi_ssl_pem_key_cert_pair* ConvertToTsiPemKeyCertPair(
55
55
  gpr_zalloc(num_key_cert_pairs * sizeof(tsi_ssl_pem_key_cert_pair)));
56
56
  }
57
57
  for (size_t i = 0; i < num_key_cert_pairs; i++) {
58
- GPR_ASSERT(cert_pair_list[i].private_key() != nullptr);
59
- GPR_ASSERT(cert_pair_list[i].cert_chain() != nullptr);
60
- tsi_pairs[i].cert_chain = gpr_strdup(cert_pair_list[i].cert_chain());
61
- tsi_pairs[i].private_key = gpr_strdup(cert_pair_list[i].private_key());
58
+ GPR_ASSERT(!cert_pair_list[i].private_key().empty());
59
+ GPR_ASSERT(!cert_pair_list[i].cert_chain().empty());
60
+ tsi_pairs[i].cert_chain =
61
+ gpr_strdup(cert_pair_list[i].cert_chain().c_str());
62
+ tsi_pairs[i].private_key =
63
+ gpr_strdup(cert_pair_list[i].private_key().c_str());
62
64
  }
63
65
  return tsi_pairs;
64
66
  }
65
67
 
66
68
  } // namespace
67
69
 
68
- grpc_status_code TlsFetchKeyMaterials(
69
- const grpc_core::RefCountedPtr<grpc_tls_key_materials_config>&
70
- key_materials_config,
71
- const grpc_tls_credentials_options& options, bool is_server,
72
- grpc_ssl_certificate_config_reload_status* status) {
73
- GPR_ASSERT(key_materials_config != nullptr);
74
- GPR_ASSERT(status != nullptr);
75
- bool is_key_materials_empty =
76
- key_materials_config->pem_key_cert_pair_list().empty();
77
- grpc_tls_credential_reload_config* credential_reload_config =
78
- options.credential_reload_config();
79
- /** If there are no key materials and no credential reload config and the
80
- * caller is a server, then return an error. We do not require that a client
81
- * always provision certificates. **/
82
- if (credential_reload_config == nullptr && is_key_materials_empty &&
83
- is_server) {
70
+ // -------------------channel security connector-------------------
71
+ grpc_core::RefCountedPtr<grpc_channel_security_connector>
72
+ TlsChannelSecurityConnector::CreateTlsChannelSecurityConnector(
73
+ grpc_core::RefCountedPtr<grpc_channel_credentials> channel_creds,
74
+ grpc_core::RefCountedPtr<grpc_tls_credentials_options> options,
75
+ grpc_core::RefCountedPtr<grpc_call_credentials> request_metadata_creds,
76
+ const char* target_name, const char* overridden_target_name,
77
+ tsi_ssl_session_cache* ssl_session_cache) {
78
+ if (channel_creds == nullptr) {
84
79
  gpr_log(GPR_ERROR,
85
- "Either credential reload config or key materials should be "
86
- "provisioned.");
87
- return GRPC_STATUS_FAILED_PRECONDITION;
88
- }
89
- grpc_status_code reload_status = GRPC_STATUS_OK;
90
- /** Use |credential_reload_config| to update |key_materials_config|. **/
91
- if (credential_reload_config != nullptr) {
92
- grpc_tls_credential_reload_arg* arg = new grpc_tls_credential_reload_arg();
93
- arg->key_materials_config = key_materials_config.get();
94
- arg->error_details = new grpc_tls_error_details();
95
- int result = credential_reload_config->Schedule(arg);
96
- if (result) {
97
- /** Credential reloading is performed async. This is not yet supported.
98
- * **/
99
- gpr_log(GPR_ERROR, "Async credential reload is unsupported now.");
100
- *status = GRPC_SSL_CERTIFICATE_CONFIG_RELOAD_UNCHANGED;
101
- reload_status =
102
- is_key_materials_empty ? GRPC_STATUS_UNIMPLEMENTED : GRPC_STATUS_OK;
103
- } else {
104
- /** Credential reloading is performed sync. **/
105
- *status = arg->status;
106
- if (arg->status == GRPC_SSL_CERTIFICATE_CONFIG_RELOAD_UNCHANGED) {
107
- /* Key materials is not empty. */
108
- gpr_log(GPR_DEBUG, "Credential does not change after reload.");
109
- } else if (arg->status == GRPC_SSL_CERTIFICATE_CONFIG_RELOAD_FAIL) {
110
- gpr_log(GPR_ERROR, "Credential reload failed with an error:");
111
- if (arg->error_details != nullptr) {
112
- gpr_log(GPR_ERROR, "%s", arg->error_details->error_details().c_str());
113
- }
114
- reload_status =
115
- is_key_materials_empty ? GRPC_STATUS_INTERNAL : GRPC_STATUS_OK;
116
- }
117
- }
118
- delete arg->error_details;
119
- /** If the credential reload config was constructed via a wrapped language,
120
- * then |arg->context| and |arg->destroy_context| will not be nullptr. In
121
- * this case, we must destroy |arg->context|, which stores the wrapped
122
- * language-version of the credential reload arg. **/
123
- if (arg->destroy_context != nullptr) {
124
- arg->destroy_context(arg->context);
125
- }
126
- delete arg;
80
+ "channel_creds is nullptr in "
81
+ "TlsChannelSecurityConnectorCreate()");
82
+ return nullptr;
127
83
  }
128
- return reload_status;
129
- }
130
-
131
- grpc_error* TlsCheckHostName(const char* peer_name, const tsi_peer* peer) {
132
- /* Check the peer name if specified. */
133
- if (peer_name != nullptr && !grpc_ssl_host_matches_name(peer, peer_name)) {
134
- return GRPC_ERROR_CREATE_FROM_COPIED_STRING(
135
- absl::StrCat("Peer name ", peer_name, " is not in peer certificate")
136
- .c_str());
84
+ if (options == nullptr) {
85
+ gpr_log(GPR_ERROR,
86
+ "options is nullptr in "
87
+ "TlsChannelSecurityConnectorCreate()");
88
+ return nullptr;
137
89
  }
138
- return GRPC_ERROR_NONE;
90
+ if (target_name == nullptr) {
91
+ gpr_log(GPR_ERROR,
92
+ "target_name is nullptr in "
93
+ "TlsChannelSecurityConnectorCreate()");
94
+ return nullptr;
95
+ }
96
+ grpc_core::RefCountedPtr<TlsChannelSecurityConnector> c =
97
+ grpc_core::MakeRefCounted<TlsChannelSecurityConnector>(
98
+ std::move(channel_creds), std::move(options),
99
+ std::move(request_metadata_creds), target_name,
100
+ overridden_target_name, ssl_session_cache);
101
+ return c;
139
102
  }
140
103
 
141
104
  TlsChannelSecurityConnector::TlsChannelSecurityConnector(
142
105
  grpc_core::RefCountedPtr<grpc_channel_credentials> channel_creds,
106
+ grpc_core::RefCountedPtr<grpc_tls_credentials_options> options,
143
107
  grpc_core::RefCountedPtr<grpc_call_credentials> request_metadata_creds,
144
- const char* target_name, const char* overridden_target_name)
108
+ const char* target_name, const char* overridden_target_name,
109
+ tsi_ssl_session_cache* ssl_session_cache)
145
110
  : grpc_channel_security_connector(GRPC_SSL_URL_SCHEME,
146
111
  std::move(channel_creds),
147
112
  std::move(request_metadata_creds)),
113
+ options_(std::move(options)),
148
114
  overridden_target_name_(
149
- overridden_target_name == nullptr ? "" : overridden_target_name) {
150
- key_materials_config_ = grpc_tls_key_materials_config_create()->Ref();
115
+ overridden_target_name == nullptr ? "" : overridden_target_name),
116
+ ssl_session_cache_(ssl_session_cache) {
117
+ if (ssl_session_cache_ != nullptr) {
118
+ tsi_ssl_session_cache_ref(ssl_session_cache_);
119
+ }
151
120
  check_arg_ = ServerAuthorizationCheckArgCreate(this);
152
121
  absl::string_view host;
153
122
  absl::string_view port;
154
123
  grpc_core::SplitHostPort(target_name, &host, &port);
155
124
  target_name_ = std::string(host);
125
+ // Create a watcher.
126
+ auto watcher_ptr = absl::make_unique<TlsChannelCertificateWatcher>(this);
127
+ certificate_watcher_ = watcher_ptr.get();
128
+ // Register the watcher with the distributor.
129
+ grpc_tls_certificate_distributor* distributor =
130
+ options_->certificate_distributor();
131
+ absl::optional<std::string> watched_root_cert_name;
132
+ if (options_->watch_root_cert()) {
133
+ watched_root_cert_name = options_->root_cert_name();
134
+ }
135
+ absl::optional<std::string> watched_identity_cert_name;
136
+ if (options_->watch_identity_pair()) {
137
+ watched_identity_cert_name = options_->identity_cert_name();
138
+ }
139
+ // We will use the root certs stored in system default locations if not
140
+ // watching root certs on the client side. We will handle this case
141
+ // differently here, because "watching a default roots without the identity
142
+ // certs" is a valid case(and hence we will need to call
143
+ // OnCertificatesChanged), but it requires nothing from the provider, and
144
+ // hence no need to register the watcher.
145
+ bool use_default_roots = !options_->watch_root_cert();
146
+ if (use_default_roots && !options_->watch_identity_pair()) {
147
+ watcher_ptr->OnCertificatesChanged(absl::nullopt, absl::nullopt);
148
+ } else {
149
+ distributor->WatchTlsCertificates(std::move(watcher_ptr),
150
+ watched_root_cert_name,
151
+ watched_identity_cert_name);
152
+ }
156
153
  }
157
154
 
158
155
  TlsChannelSecurityConnector::~TlsChannelSecurityConnector() {
156
+ if (ssl_session_cache_ != nullptr) {
157
+ tsi_ssl_session_cache_unref(ssl_session_cache_);
158
+ }
159
+ // Cancel all the watchers.
160
+ grpc_tls_certificate_distributor* distributor =
161
+ options_->certificate_distributor();
162
+ if (distributor != nullptr) {
163
+ distributor->CancelTlsCertificatesWatch(certificate_watcher_);
164
+ }
159
165
  if (client_handshaker_factory_ != nullptr) {
160
166
  tsi_ssl_client_handshaker_factory_unref(client_handshaker_factory_);
161
167
  }
162
- if (key_materials_config_.get() != nullptr) {
163
- key_materials_config_.get()->Unref();
168
+ if (check_arg_ != nullptr) {
169
+ ServerAuthorizationCheckArgDestroy(check_arg_);
164
170
  }
165
- ServerAuthorizationCheckArgDestroy(check_arg_);
166
171
  }
167
172
 
168
173
  void TlsChannelSecurityConnector::add_handshakers(
169
174
  const grpc_channel_args* args, grpc_pollset_set* /*interested_parties*/,
170
175
  grpc_core::HandshakeManager* handshake_mgr) {
171
- if (RefreshHandshakerFactory() != GRPC_SECURITY_OK) {
172
- gpr_log(GPR_ERROR, "Handshaker factory refresh failed.");
173
- return;
174
- }
175
- // Instantiate TSI handshaker.
176
- tsi_handshaker* tsi_hs = nullptr;
177
- tsi_result result = tsi_ssl_client_handshaker_factory_create_handshaker(
178
- client_handshaker_factory_,
179
- overridden_target_name_.empty() ? target_name_.c_str()
180
- : overridden_target_name_.c_str(),
181
- &tsi_hs);
182
- if (result != TSI_OK) {
183
- gpr_log(GPR_ERROR, "Handshaker creation failed with error %s.",
184
- tsi_result_to_string(result));
176
+ grpc_core::MutexLock lock(&mu_);
177
+ if (client_handshaker_factory_ != nullptr) {
178
+ // Instantiate TSI handshaker.
179
+ tsi_handshaker* tsi_hs = nullptr;
180
+ tsi_result result = tsi_ssl_client_handshaker_factory_create_handshaker(
181
+ client_handshaker_factory_,
182
+ overridden_target_name_.empty() ? target_name_.c_str()
183
+ : overridden_target_name_.c_str(),
184
+ &tsi_hs);
185
+ if (result != TSI_OK) {
186
+ gpr_log(GPR_ERROR, "Handshaker creation failed with error %s.",
187
+ tsi_result_to_string(result));
188
+ return;
189
+ }
190
+ // Create handshakers.
191
+ handshake_mgr->Add(grpc_core::SecurityHandshakerCreate(tsi_hs, this, args));
185
192
  return;
186
193
  }
187
- // Create handshakers.
188
- handshake_mgr->Add(grpc_core::SecurityHandshakerCreate(tsi_hs, this, args));
194
+ // TODO(ZhenLian): Implement the logic(delegation to
195
+ // BlockOnInitialCredentialHandshaker) when certificates are not ready.
196
+ gpr_log(GPR_ERROR, "%s not supported yet.",
197
+ "Client BlockOnInitialCredentialHandshaker");
189
198
  }
190
199
 
191
200
  void TlsChannelSecurityConnector::check_peer(
@@ -203,12 +212,9 @@ void TlsChannelSecurityConnector::check_peer(
203
212
  }
204
213
  *auth_context =
205
214
  grpc_ssl_peer_to_auth_context(&peer, GRPC_TLS_TRANSPORT_SECURITY_TYPE);
206
- const TlsCredentials* creds =
207
- static_cast<const TlsCredentials*>(channel_creds());
208
- if (creds->options().server_verification_option() ==
209
- GRPC_TLS_SERVER_VERIFICATION) {
215
+ if (options_->server_verification_option() == GRPC_TLS_SERVER_VERIFICATION) {
210
216
  /* Do the default host name check if specifying the target name. */
211
- error = TlsCheckHostName(target_name, &peer);
217
+ error = internal::TlsCheckHostName(target_name, &peer);
212
218
  if (error != GRPC_ERROR_NONE) {
213
219
  grpc_core::ExecCtx::Run(DEBUG_LOCATION, on_peer_checked, error);
214
220
  tsi_peer_destruct(&peer);
@@ -217,7 +223,7 @@ void TlsChannelSecurityConnector::check_peer(
217
223
  }
218
224
  /* Do the custom server authorization check, if specified by the user. */
219
225
  const grpc_tls_server_authorization_check_config* config =
220
- creds->options().server_authorization_check_config();
226
+ options_->server_authorization_check_config();
221
227
  /* If server authorization config is not null, use it to perform
222
228
  * server authorization check. */
223
229
  if (config != nullptr) {
@@ -250,6 +256,39 @@ void TlsChannelSecurityConnector::check_peer(
250
256
  : check_arg_->peer_cert_full_chain;
251
257
  gpr_free(peer_pem_chain);
252
258
  }
259
+ // TODO(zhenlian) - This should be cleaned up as part of the custom
260
+ // verification changes. Fill in the subject alternative names
261
+ std::vector<char*> subject_alternative_names;
262
+ for (size_t i = 0; i < peer.property_count; i++) {
263
+ const tsi_peer_property* prop = &peer.properties[i];
264
+ if (strcmp(prop->name,
265
+ TSI_X509_SUBJECT_ALTERNATIVE_NAME_PEER_PROPERTY) == 0) {
266
+ char* san = new char[prop->value.length + 1];
267
+ memcpy(san, prop->value.data, prop->value.length);
268
+ san[prop->value.length] = '\0';
269
+ subject_alternative_names.emplace_back(san);
270
+ }
271
+ }
272
+ if (check_arg_->subject_alternative_names != nullptr) {
273
+ for (size_t i = 0; i < check_arg_->subject_alternative_names_size;
274
+ ++i) {
275
+ delete[] check_arg_->subject_alternative_names[i];
276
+ }
277
+ delete[] check_arg_->subject_alternative_names;
278
+ }
279
+ check_arg_->subject_alternative_names_size =
280
+ subject_alternative_names.size();
281
+ if (subject_alternative_names.empty()) {
282
+ check_arg_->subject_alternative_names = nullptr;
283
+ } else {
284
+ check_arg_->subject_alternative_names =
285
+ new char*[check_arg_->subject_alternative_names_size];
286
+ for (size_t i = 0; i < check_arg_->subject_alternative_names_size;
287
+ ++i) {
288
+ check_arg_->subject_alternative_names[i] =
289
+ subject_alternative_names[i];
290
+ }
291
+ }
253
292
  int callback_status = config->Schedule(check_arg_);
254
293
  /* Server authorization check is handled asynchronously. */
255
294
  if (callback_status) {
@@ -289,105 +328,84 @@ void TlsChannelSecurityConnector::cancel_check_call_host(
289
328
  GRPC_ERROR_UNREF(error);
290
329
  }
291
330
 
292
- grpc_core::RefCountedPtr<grpc_channel_security_connector>
293
- TlsChannelSecurityConnector::CreateTlsChannelSecurityConnector(
294
- grpc_core::RefCountedPtr<grpc_channel_credentials> channel_creds,
295
- grpc_core::RefCountedPtr<grpc_call_credentials> request_metadata_creds,
296
- const char* target_name, const char* overridden_target_name,
297
- tsi_ssl_session_cache* ssl_session_cache) {
298
- if (channel_creds == nullptr) {
299
- gpr_log(GPR_ERROR,
300
- "channel_creds is nullptr in "
301
- "TlsChannelSecurityConnectorCreate()");
302
- return nullptr;
331
+ void TlsChannelSecurityConnector::TlsChannelCertificateWatcher::
332
+ OnCertificatesChanged(
333
+ absl::optional<absl::string_view> root_certs,
334
+ absl::optional<grpc_core::PemKeyCertPairList> key_cert_pairs) {
335
+ GPR_ASSERT(security_connector_ != nullptr);
336
+ grpc_core::MutexLock lock(&security_connector_->mu_);
337
+ if (root_certs.has_value()) {
338
+ security_connector_->pem_root_certs_ = root_certs;
339
+ }
340
+ if (key_cert_pairs.has_value()) {
341
+ security_connector_->pem_key_cert_pair_list_ = std::move(key_cert_pairs);
342
+ }
343
+ const bool root_ready = !security_connector_->options_->watch_root_cert() ||
344
+ security_connector_->pem_root_certs_.has_value();
345
+ const bool identity_ready =
346
+ !security_connector_->options_->watch_identity_pair() ||
347
+ security_connector_->pem_key_cert_pair_list_.has_value();
348
+ if (root_ready && identity_ready) {
349
+ if (security_connector_->UpdateHandshakerFactoryLocked() !=
350
+ GRPC_SECURITY_OK) {
351
+ gpr_log(GPR_ERROR, "Update handshaker factory failed.");
352
+ }
303
353
  }
304
- if (target_name == nullptr) {
354
+ }
355
+
356
+ // TODO(ZhenLian): implement the logic to signal waiting handshakers once
357
+ // BlockOnInitialCredentialHandshaker is implemented.
358
+ void TlsChannelSecurityConnector::TlsChannelCertificateWatcher::OnError(
359
+ grpc_error* root_cert_error, grpc_error* identity_cert_error) {
360
+ if (root_cert_error != GRPC_ERROR_NONE) {
305
361
  gpr_log(GPR_ERROR,
306
- "target_name is nullptr in "
307
- "TlsChannelSecurityConnectorCreate()");
308
- return nullptr;
362
+ "TlsChannelCertificateWatcher getting root_cert_error: %s",
363
+ grpc_error_string(root_cert_error));
309
364
  }
310
- grpc_core::RefCountedPtr<TlsChannelSecurityConnector> c =
311
- grpc_core::MakeRefCounted<TlsChannelSecurityConnector>(
312
- std::move(channel_creds), std::move(request_metadata_creds),
313
- target_name, overridden_target_name);
314
- if (c->InitializeHandshakerFactory(ssl_session_cache) != GRPC_SECURITY_OK) {
315
- gpr_log(GPR_ERROR, "Could not initialize client handshaker factory.");
316
- return nullptr;
365
+ if (identity_cert_error != GRPC_ERROR_NONE) {
366
+ gpr_log(GPR_ERROR,
367
+ "TlsChannelCertificateWatcher getting identity_cert_error: %s",
368
+ grpc_error_string(identity_cert_error));
317
369
  }
318
- return c;
370
+ GRPC_ERROR_UNREF(root_cert_error);
371
+ GRPC_ERROR_UNREF(identity_cert_error);
319
372
  }
320
373
 
321
- grpc_security_status TlsChannelSecurityConnector::ReplaceHandshakerFactory(
322
- tsi_ssl_session_cache* ssl_session_cache) {
323
- const TlsCredentials* creds =
324
- static_cast<const TlsCredentials*>(channel_creds());
374
+ // TODO(ZhenLian): implement the logic to signal waiting handshakers once
375
+ // BlockOnInitialCredentialHandshaker is implemented.
376
+ grpc_security_status
377
+ TlsChannelSecurityConnector::UpdateHandshakerFactoryLocked() {
325
378
  bool skip_server_certificate_verification =
326
- creds->options().server_verification_option() ==
379
+ options_->server_verification_option() ==
327
380
  GRPC_TLS_SKIP_ALL_SERVER_VERIFICATION;
328
381
  /* Free the client handshaker factory if exists. */
329
- if (client_handshaker_factory_) {
382
+ if (client_handshaker_factory_ != nullptr) {
330
383
  tsi_ssl_client_handshaker_factory_unref(client_handshaker_factory_);
331
384
  }
332
- tsi_ssl_pem_key_cert_pair* pem_key_cert_pair = ConvertToTsiPemKeyCertPair(
333
- key_materials_config_->pem_key_cert_pair_list());
385
+ std::string pem_root_certs;
386
+ if (pem_root_certs_.has_value()) {
387
+ // TODO(ZhenLian): update the underlying TSI layer to use C++ types like
388
+ // std::string and absl::string_view to avoid making another copy here.
389
+ pem_root_certs = std::string(*pem_root_certs_);
390
+ }
391
+ tsi_ssl_pem_key_cert_pair* pem_key_cert_pair = nullptr;
392
+ if (pem_key_cert_pair_list_.has_value()) {
393
+ pem_key_cert_pair = ConvertToTsiPemKeyCertPair(*pem_key_cert_pair_list_);
394
+ }
395
+ bool use_default_roots = !options_->watch_root_cert();
334
396
  grpc_security_status status = grpc_ssl_tsi_client_handshaker_factory_init(
335
- pem_key_cert_pair, key_materials_config_->pem_root_certs(),
397
+ pem_key_cert_pair,
398
+ pem_root_certs.empty() || use_default_roots ? nullptr
399
+ : pem_root_certs.c_str(),
336
400
  skip_server_certificate_verification,
337
- grpc_get_tsi_tls_version(creds->options().min_tls_version()),
338
- grpc_get_tsi_tls_version(creds->options().max_tls_version()),
339
- ssl_session_cache, &client_handshaker_factory_);
401
+ grpc_get_tsi_tls_version(options_->min_tls_version()),
402
+ grpc_get_tsi_tls_version(options_->max_tls_version()), ssl_session_cache_,
403
+ &client_handshaker_factory_);
340
404
  /* Free memory. */
341
- grpc_tsi_ssl_pem_key_cert_pairs_destroy(pem_key_cert_pair, 1);
342
- return status;
343
- }
344
-
345
- grpc_security_status TlsChannelSecurityConnector::InitializeHandshakerFactory(
346
- tsi_ssl_session_cache* ssl_session_cache) {
347
- grpc_core::MutexLock lock(&mu_);
348
- const TlsCredentials* creds =
349
- static_cast<const TlsCredentials*>(channel_creds());
350
- grpc_tls_key_materials_config* key_materials_config =
351
- creds->options().key_materials_config();
352
- // key_materials_config_->set_key_materials will handle the copying of the key
353
- // materials users provided
354
- if (key_materials_config != nullptr) {
355
- key_materials_config_->set_key_materials(
356
- key_materials_config->pem_root_certs(),
357
- key_materials_config->pem_key_cert_pair_list());
358
- }
359
- grpc_ssl_certificate_config_reload_status reload_status =
360
- GRPC_SSL_CERTIFICATE_CONFIG_RELOAD_UNCHANGED;
361
- /** If |creds->options()| has a credential reload config, then the call to
362
- * |TlsFetchKeyMaterials| will use it to update the root cert and
363
- * pem-key-cert-pair list stored in |key_materials_config_|. **/
364
- if (TlsFetchKeyMaterials(key_materials_config_, creds->options(), false,
365
- &reload_status) != GRPC_STATUS_OK) {
366
- /* Raise an error if key materials are not populated. */
367
- return GRPC_SECURITY_ERROR;
368
- }
369
- return ReplaceHandshakerFactory(ssl_session_cache);
370
- }
371
-
372
- grpc_security_status TlsChannelSecurityConnector::RefreshHandshakerFactory() {
373
- grpc_core::MutexLock lock(&mu_);
374
- const TlsCredentials* creds =
375
- static_cast<const TlsCredentials*>(channel_creds());
376
- grpc_ssl_certificate_config_reload_status reload_status =
377
- GRPC_SSL_CERTIFICATE_CONFIG_RELOAD_UNCHANGED;
378
- /** If |creds->options()| has a credential reload config, then the call to
379
- * |TlsFetchKeyMaterials| will use it to update the root cert and
380
- * pem-key-cert-pair list stored in |key_materials_config_|. **/
381
- if (TlsFetchKeyMaterials(key_materials_config_, creds->options(), false,
382
- &reload_status) != GRPC_STATUS_OK) {
383
- return GRPC_SECURITY_ERROR;
384
- }
385
- if (reload_status != GRPC_SSL_CERTIFICATE_CONFIG_RELOAD_NEW) {
386
- // Re-use existing handshaker factory.
387
- return GRPC_SECURITY_OK;
388
- } else {
389
- return ReplaceHandshakerFactory(nullptr);
405
+ if (pem_key_cert_pair != nullptr) {
406
+ grpc_tsi_ssl_pem_key_cert_pairs_destroy(pem_key_cert_pair, 1);
390
407
  }
408
+ return status;
391
409
  }
392
410
 
393
411
  void TlsChannelSecurityConnector::ServerAuthorizationCheckDone(
@@ -435,6 +453,11 @@ TlsChannelSecurityConnector::ServerAuthorizationCheckArgCreate(
435
453
  void* user_data) {
436
454
  grpc_tls_server_authorization_check_arg* arg =
437
455
  new grpc_tls_server_authorization_check_arg();
456
+ arg->target_name = nullptr;
457
+ arg->peer_cert = nullptr;
458
+ arg->peer_cert_full_chain = nullptr;
459
+ arg->subject_alternative_names = nullptr;
460
+ arg->subject_alternative_names_size = 0;
438
461
  arg->error_details = new grpc_tls_error_details();
439
462
  arg->cb = ServerAuthorizationCheckDone;
440
463
  arg->cb_user_data = user_data;
@@ -447,9 +470,13 @@ void TlsChannelSecurityConnector::ServerAuthorizationCheckArgDestroy(
447
470
  if (arg == nullptr) {
448
471
  return;
449
472
  }
450
- gpr_free((void*)arg->target_name);
451
- gpr_free((void*)arg->peer_cert);
452
- if (arg->peer_cert_full_chain) gpr_free((void*)arg->peer_cert_full_chain);
473
+ gpr_free(const_cast<char*>(arg->target_name));
474
+ gpr_free(const_cast<char*>(arg->peer_cert));
475
+ gpr_free(const_cast<char*>(arg->peer_cert_full_chain));
476
+ for (size_t i = 0; i < arg->subject_alternative_names_size; ++i) {
477
+ delete[] arg->subject_alternative_names[i];
478
+ }
479
+ delete[] arg->subject_alternative_names;
453
480
  delete arg->error_details;
454
481
  if (arg->destroy_context != nullptr) {
455
482
  arg->destroy_context(arg->context);
@@ -457,40 +484,87 @@ void TlsChannelSecurityConnector::ServerAuthorizationCheckArgDestroy(
457
484
  delete arg;
458
485
  }
459
486
 
487
+ // -------------------server security connector-------------------
488
+ grpc_core::RefCountedPtr<grpc_server_security_connector>
489
+ TlsServerSecurityConnector::CreateTlsServerSecurityConnector(
490
+ grpc_core::RefCountedPtr<grpc_server_credentials> server_creds,
491
+ grpc_core::RefCountedPtr<grpc_tls_credentials_options> options) {
492
+ if (server_creds == nullptr) {
493
+ gpr_log(GPR_ERROR,
494
+ "server_creds is nullptr in "
495
+ "TlsServerSecurityConnectorCreate()");
496
+ return nullptr;
497
+ }
498
+ if (options == nullptr) {
499
+ gpr_log(GPR_ERROR,
500
+ "options is nullptr in "
501
+ "TlsServerSecurityConnectorCreate()");
502
+ return nullptr;
503
+ }
504
+ grpc_core::RefCountedPtr<TlsServerSecurityConnector> c =
505
+ grpc_core::MakeRefCounted<TlsServerSecurityConnector>(
506
+ std::move(server_creds), std::move(options));
507
+ return c;
508
+ }
509
+
460
510
  TlsServerSecurityConnector::TlsServerSecurityConnector(
461
- grpc_core::RefCountedPtr<grpc_server_credentials> server_creds)
511
+ grpc_core::RefCountedPtr<grpc_server_credentials> server_creds,
512
+ grpc_core::RefCountedPtr<grpc_tls_credentials_options> options)
462
513
  : grpc_server_security_connector(GRPC_SSL_URL_SCHEME,
463
- std::move(server_creds)) {
464
- key_materials_config_ = grpc_tls_key_materials_config_create()->Ref();
514
+ std::move(server_creds)),
515
+ options_(std::move(options)) {
516
+ // Create a watcher.
517
+ auto watcher_ptr = absl::make_unique<TlsServerCertificateWatcher>(this);
518
+ certificate_watcher_ = watcher_ptr.get();
519
+ // Register the watcher with the distributor.
520
+ grpc_tls_certificate_distributor* distributor =
521
+ options_->certificate_distributor();
522
+ absl::optional<std::string> watched_root_cert_name;
523
+ if (options_->watch_root_cert()) {
524
+ watched_root_cert_name = options_->root_cert_name();
525
+ }
526
+ absl::optional<std::string> watched_identity_cert_name;
527
+ if (options_->watch_identity_pair()) {
528
+ watched_identity_cert_name = options_->identity_cert_name();
529
+ }
530
+ // Server side won't use default system roots at any time.
531
+ distributor->WatchTlsCertificates(std::move(watcher_ptr),
532
+ watched_root_cert_name,
533
+ watched_identity_cert_name);
465
534
  }
466
535
 
467
536
  TlsServerSecurityConnector::~TlsServerSecurityConnector() {
537
+ // Cancel all the watchers.
538
+ grpc_tls_certificate_distributor* distributor =
539
+ options_->certificate_distributor();
540
+ distributor->CancelTlsCertificatesWatch(certificate_watcher_);
468
541
  if (server_handshaker_factory_ != nullptr) {
469
542
  tsi_ssl_server_handshaker_factory_unref(server_handshaker_factory_);
470
543
  }
471
- if (key_materials_config_.get() != nullptr) {
472
- key_materials_config_.get()->Unref();
473
- }
474
544
  }
475
545
 
476
546
  void TlsServerSecurityConnector::add_handshakers(
477
547
  const grpc_channel_args* args, grpc_pollset_set* /*interested_parties*/,
478
548
  grpc_core::HandshakeManager* handshake_mgr) {
479
- /* Refresh handshaker factory if needed. */
480
- if (RefreshHandshakerFactory() != GRPC_SECURITY_OK) {
481
- gpr_log(GPR_ERROR, "Handshaker factory refresh failed.");
482
- return;
483
- }
484
- /* Create a TLS TSI handshaker for server. */
485
- tsi_handshaker* tsi_hs = nullptr;
486
- tsi_result result = tsi_ssl_server_handshaker_factory_create_handshaker(
487
- server_handshaker_factory_, &tsi_hs);
488
- if (result != TSI_OK) {
489
- gpr_log(GPR_ERROR, "Handshaker creation failed with error %s.",
490
- tsi_result_to_string(result));
549
+ grpc_core::MutexLock lock(&mu_);
550
+ if (server_handshaker_factory_ != nullptr) {
551
+ // Instantiate TSI handshaker.
552
+ tsi_handshaker* tsi_hs = nullptr;
553
+ tsi_result result = tsi_ssl_server_handshaker_factory_create_handshaker(
554
+ server_handshaker_factory_, &tsi_hs);
555
+ if (result != TSI_OK) {
556
+ gpr_log(GPR_ERROR, "Handshaker creation failed with error %s.",
557
+ tsi_result_to_string(result));
558
+ return;
559
+ }
560
+ // Create handshakers.
561
+ handshake_mgr->Add(grpc_core::SecurityHandshakerCreate(tsi_hs, this, args));
491
562
  return;
492
563
  }
493
- handshake_mgr->Add(grpc_core::SecurityHandshakerCreate(tsi_hs, this, args));
564
+ // TODO(ZhenLian): Implement the logic(delegation to
565
+ // BlockOnInitialCredentialHandshaker) when certificates are not ready.
566
+ gpr_log(GPR_ERROR, "%s not supported yet.",
567
+ "Server BlockOnInitialCredentialHandshaker");
494
568
  }
495
569
 
496
570
  void TlsServerSecurityConnector::check_peer(
@@ -510,43 +584,79 @@ int TlsServerSecurityConnector::cmp(
510
584
  static_cast<const grpc_server_security_connector*>(other));
511
585
  }
512
586
 
513
- grpc_core::RefCountedPtr<grpc_server_security_connector>
514
- TlsServerSecurityConnector::CreateTlsServerSecurityConnector(
515
- grpc_core::RefCountedPtr<grpc_server_credentials> server_creds) {
516
- if (server_creds == nullptr) {
587
+ void TlsServerSecurityConnector::TlsServerCertificateWatcher::
588
+ OnCertificatesChanged(
589
+ absl::optional<absl::string_view> root_certs,
590
+ absl::optional<grpc_core::PemKeyCertPairList> key_cert_pairs) {
591
+ GPR_ASSERT(security_connector_ != nullptr);
592
+ grpc_core::MutexLock lock(&security_connector_->mu_);
593
+ if (root_certs.has_value()) {
594
+ security_connector_->pem_root_certs_ = root_certs;
595
+ }
596
+ if (key_cert_pairs.has_value()) {
597
+ security_connector_->pem_key_cert_pair_list_ = std::move(key_cert_pairs);
598
+ }
599
+ bool root_being_watched = security_connector_->options_->watch_root_cert();
600
+ bool root_has_value = security_connector_->pem_root_certs_.has_value();
601
+ bool identity_being_watched =
602
+ security_connector_->options_->watch_identity_pair();
603
+ bool identity_has_value =
604
+ security_connector_->pem_key_cert_pair_list_.has_value();
605
+ if ((root_being_watched && root_has_value && identity_being_watched &&
606
+ identity_has_value) ||
607
+ (root_being_watched && root_has_value && !identity_being_watched) ||
608
+ (!root_being_watched && identity_being_watched && identity_has_value)) {
609
+ if (security_connector_->UpdateHandshakerFactoryLocked() !=
610
+ GRPC_SECURITY_OK) {
611
+ gpr_log(GPR_ERROR, "Update handshaker factory failed.");
612
+ }
613
+ }
614
+ }
615
+
616
+ // TODO(ZhenLian): implement the logic to signal waiting handshakers once
617
+ // BlockOnInitialCredentialHandshaker is implemented.
618
+ void TlsServerSecurityConnector::TlsServerCertificateWatcher::OnError(
619
+ grpc_error* root_cert_error, grpc_error* identity_cert_error) {
620
+ if (root_cert_error != GRPC_ERROR_NONE) {
517
621
  gpr_log(GPR_ERROR,
518
- "server_creds is nullptr in "
519
- "TlsServerSecurityConnectorCreate()");
520
- return nullptr;
622
+ "TlsServerCertificateWatcher getting root_cert_error: %s",
623
+ grpc_error_string(root_cert_error));
521
624
  }
522
- grpc_core::RefCountedPtr<TlsServerSecurityConnector> c =
523
- grpc_core::MakeRefCounted<TlsServerSecurityConnector>(
524
- std::move(server_creds));
525
- if (c->InitializeHandshakerFactory() != GRPC_SECURITY_OK) {
526
- gpr_log(GPR_ERROR, "Could not initialize server handshaker factory.");
527
- return nullptr;
625
+ if (identity_cert_error != GRPC_ERROR_NONE) {
626
+ gpr_log(GPR_ERROR,
627
+ "TlsServerCertificateWatcher getting identity_cert_error: %s",
628
+ grpc_error_string(identity_cert_error));
528
629
  }
529
- return c;
630
+ GRPC_ERROR_UNREF(root_cert_error);
631
+ GRPC_ERROR_UNREF(identity_cert_error);
530
632
  }
531
633
 
532
- grpc_security_status TlsServerSecurityConnector::ReplaceHandshakerFactory() {
533
- const TlsServerCredentials* creds =
534
- static_cast<const TlsServerCredentials*>(server_creds());
634
+ // TODO(ZhenLian): implement the logic to signal waiting handshakers once
635
+ // BlockOnInitialCredentialHandshaker is implemented.
636
+ grpc_security_status
637
+ TlsServerSecurityConnector::UpdateHandshakerFactoryLocked() {
535
638
  /* Free the server handshaker factory if exists. */
536
- if (server_handshaker_factory_) {
639
+ if (server_handshaker_factory_ != nullptr) {
537
640
  tsi_ssl_server_handshaker_factory_unref(server_handshaker_factory_);
538
641
  }
539
- GPR_ASSERT(!key_materials_config_->pem_key_cert_pair_list().empty());
540
- tsi_ssl_pem_key_cert_pair* pem_key_cert_pairs = ConvertToTsiPemKeyCertPair(
541
- key_materials_config_->pem_key_cert_pair_list());
542
- size_t num_key_cert_pairs =
543
- key_materials_config_->pem_key_cert_pair_list().size();
642
+ // The identity certs on the server side shouldn't be empty.
643
+ GPR_ASSERT(pem_key_cert_pair_list_.has_value());
644
+ GPR_ASSERT(!(*pem_key_cert_pair_list_).empty());
645
+ std::string pem_root_certs;
646
+ if (pem_root_certs_.has_value()) {
647
+ // TODO(ZhenLian): update the underlying TSI layer to use C++ types like
648
+ // std::string and absl::string_view to avoid making another copy here.
649
+ pem_root_certs = std::string(*pem_root_certs_);
650
+ }
651
+ tsi_ssl_pem_key_cert_pair* pem_key_cert_pairs = nullptr;
652
+ pem_key_cert_pairs = ConvertToTsiPemKeyCertPair(*pem_key_cert_pair_list_);
653
+ size_t num_key_cert_pairs = (*pem_key_cert_pair_list_).size();
544
654
  grpc_security_status status = grpc_ssl_tsi_server_handshaker_factory_init(
545
655
  pem_key_cert_pairs, num_key_cert_pairs,
546
- key_materials_config_->pem_root_certs(),
547
- creds->options().cert_request_type(),
548
- grpc_get_tsi_tls_version(creds->options().min_tls_version()),
549
- grpc_get_tsi_tls_version(creds->options().max_tls_version()),
656
+ pem_root_certs.empty() ? nullptr : pem_root_certs.c_str(),
657
+ options_->cert_request_type(),
658
+ grpc_get_tsi_tls_version(options_->min_tls_version()),
659
+ grpc_get_tsi_tls_version(options_->max_tls_version()),
550
660
  &server_handshaker_factory_);
551
661
  /* Free memory. */
552
662
  grpc_tsi_ssl_pem_key_cert_pairs_destroy(pem_key_cert_pairs,
@@ -554,53 +664,18 @@ grpc_security_status TlsServerSecurityConnector::ReplaceHandshakerFactory() {
554
664
  return status;
555
665
  }
556
666
 
557
- grpc_security_status TlsServerSecurityConnector::InitializeHandshakerFactory() {
558
- grpc_core::MutexLock lock(&mu_);
559
- const TlsServerCredentials* creds =
560
- static_cast<const TlsServerCredentials*>(server_creds());
561
- grpc_tls_key_materials_config* key_materials_config =
562
- creds->options().key_materials_config();
563
- if (key_materials_config != nullptr) {
564
- key_materials_config_->set_key_materials(
565
- key_materials_config->pem_root_certs(),
566
- key_materials_config->pem_key_cert_pair_list());
567
- }
568
- grpc_ssl_certificate_config_reload_status reload_status =
569
- GRPC_SSL_CERTIFICATE_CONFIG_RELOAD_UNCHANGED;
570
- /** If |creds->options()| has a credential reload config, then the call to
571
- * |TlsFetchKeyMaterials| will use it to update the root cert and
572
- * pem-key-cert-pair list stored in |key_materials_config_|. Otherwise, it
573
- * will return |GRPC_STATUS_OK| if |key_materials_config_| already has
574
- * credentials, and an error code if not. **/
575
- if (TlsFetchKeyMaterials(key_materials_config_, creds->options(), true,
576
- &reload_status) != GRPC_STATUS_OK) {
577
- /* Raise an error if key materials are not populated. */
578
- return GRPC_SECURITY_ERROR;
579
- }
580
- return ReplaceHandshakerFactory();
581
- }
667
+ namespace internal {
582
668
 
583
- grpc_security_status TlsServerSecurityConnector::RefreshHandshakerFactory() {
584
- grpc_core::MutexLock lock(&mu_);
585
- const TlsServerCredentials* creds =
586
- static_cast<const TlsServerCredentials*>(server_creds());
587
- grpc_ssl_certificate_config_reload_status reload_status =
588
- GRPC_SSL_CERTIFICATE_CONFIG_RELOAD_UNCHANGED;
589
- /** If |creds->options()| has a credential reload config, then the call to
590
- * |TlsFetchKeyMaterials| will use it to update the root cert and
591
- * pem-key-cert-pair list stored in |key_materials_config_|. Otherwise, it
592
- * will return |GRPC_STATUS_OK| if |key_materials_config_| already has
593
- * credentials, and an error code if not. **/
594
- if (TlsFetchKeyMaterials(key_materials_config_, creds->options(), true,
595
- &reload_status) != GRPC_STATUS_OK) {
596
- return GRPC_SECURITY_ERROR;
597
- }
598
- if (reload_status != GRPC_SSL_CERTIFICATE_CONFIG_RELOAD_NEW) {
599
- /* At this point, we should have key materials populated. */
600
- return GRPC_SECURITY_OK;
601
- } else {
602
- return ReplaceHandshakerFactory();
669
+ grpc_error* TlsCheckHostName(const char* peer_name, const tsi_peer* peer) {
670
+ /* Check the peer name if specified. */
671
+ if (peer_name != nullptr && !grpc_ssl_host_matches_name(peer, peer_name)) {
672
+ return GRPC_ERROR_CREATE_FROM_COPIED_STRING(
673
+ absl::StrCat("Peer name ", peer_name, " is not in peer certificate")
674
+ .c_str());
603
675
  }
676
+ return GRPC_ERROR_NONE;
604
677
  }
605
678
 
679
+ } // namespace internal
680
+
606
681
  } // namespace grpc_core