grpc 1.36.0 → 1.38.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 (680) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +126 -92
  3. data/include/grpc/event_engine/README.md +38 -0
  4. data/include/grpc/event_engine/channel_args.h +28 -0
  5. data/include/grpc/event_engine/event_engine.h +336 -0
  6. data/include/grpc/event_engine/port.h +39 -0
  7. data/include/grpc/event_engine/slice_allocator.h +81 -0
  8. data/include/grpc/grpc.h +15 -1
  9. data/include/grpc/grpc_security_constants.h +14 -0
  10. data/include/grpc/impl/codegen/grpc_types.h +11 -0
  11. data/include/grpc/impl/codegen/port_platform.h +7 -0
  12. data/include/grpc/module.modulemap +14 -14
  13. data/src/core/ext/filters/client_channel/backup_poller.cc +3 -3
  14. data/src/core/ext/filters/client_channel/channel_connectivity.cc +177 -202
  15. data/src/core/ext/filters/client_channel/client_channel.cc +715 -3166
  16. data/src/core/ext/filters/client_channel/client_channel.h +489 -55
  17. data/src/core/ext/filters/client_channel/client_channel_channelz.h +1 -1
  18. data/src/core/ext/filters/client_channel/client_channel_factory.h +2 -1
  19. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +4 -1
  20. data/src/core/ext/filters/client_channel/config_selector.h +9 -1
  21. data/src/core/ext/filters/client_channel/connector.h +1 -1
  22. data/src/core/ext/filters/client_channel/dynamic_filters.cc +18 -14
  23. data/src/core/ext/filters/client_channel/dynamic_filters.h +3 -3
  24. data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +24 -142
  25. data/src/core/ext/filters/client_channel/global_subchannel_pool.h +15 -10
  26. data/src/core/ext/filters/client_channel/health/health_check_client.cc +26 -27
  27. data/src/core/ext/filters/client_channel/health/health_check_client.h +27 -26
  28. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +24 -21
  29. data/src/core/ext/filters/client_channel/lb_policy.cc +4 -1
  30. data/src/core/ext/filters/client_channel/lb_policy.h +4 -4
  31. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +6 -6
  32. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +46 -43
  33. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +1 -1
  34. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +2 -1
  35. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +5 -5
  36. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +14 -12
  37. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +23 -0
  38. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +27 -0
  39. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +4 -4
  40. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +1 -1
  41. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +15 -15
  42. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +36 -30
  43. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +29 -44
  44. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +32 -47
  45. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +86 -63
  46. data/src/core/ext/filters/client_channel/lb_policy_factory.h +1 -1
  47. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +4 -4
  48. data/src/core/ext/filters/client_channel/lb_policy_registry.h +1 -1
  49. data/src/core/ext/filters/client_channel/local_subchannel_pool.cc +27 -67
  50. data/src/core/ext/filters/client_channel/local_subchannel_pool.h +10 -9
  51. data/src/core/ext/filters/client_channel/resolver.cc +3 -0
  52. data/src/core/ext/filters/client_channel/resolver.h +2 -2
  53. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +23 -15
  54. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +1 -1
  55. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +3 -3
  56. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +4 -4
  57. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +17 -15
  58. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +38 -33
  59. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +1 -1
  60. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_libuv.cc +1 -1
  61. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +1 -1
  62. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +17 -9
  63. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +20 -28
  64. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +7 -5
  65. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +31 -14
  66. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +1 -1
  67. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +334 -114
  68. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +32 -239
  69. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +20 -49
  70. data/src/core/ext/filters/client_channel/retry_filter.cc +2188 -0
  71. data/src/core/ext/filters/client_channel/retry_filter.h +30 -0
  72. data/src/core/ext/filters/client_channel/retry_service_config.cc +287 -0
  73. data/src/core/ext/filters/client_channel/retry_service_config.h +90 -0
  74. data/src/core/ext/filters/client_channel/server_address.cc +4 -1
  75. data/src/core/ext/filters/client_channel/service_config.cc +15 -14
  76. data/src/core/ext/filters/client_channel/service_config.h +7 -6
  77. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +5 -4
  78. data/src/core/ext/filters/client_channel/service_config_parser.cc +6 -6
  79. data/src/core/ext/filters/client_channel/service_config_parser.h +7 -4
  80. data/src/core/ext/filters/client_channel/subchannel.cc +86 -162
  81. data/src/core/ext/filters/client_channel/subchannel.h +68 -99
  82. data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +16 -2
  83. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +10 -8
  84. data/src/core/ext/filters/client_idle/client_idle_filter.cc +17 -16
  85. data/src/core/ext/filters/deadline/deadline_filter.cc +10 -10
  86. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +501 -0
  87. data/src/core/ext/filters/fault_injection/fault_injection_filter.h +39 -0
  88. data/src/core/ext/filters/fault_injection/service_config_parser.cc +189 -0
  89. data/src/core/ext/filters/fault_injection/service_config_parser.h +85 -0
  90. data/src/core/ext/filters/http/client/http_client_filter.cc +28 -21
  91. data/src/core/ext/filters/http/client_authority_filter.cc +3 -3
  92. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +23 -22
  93. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +21 -21
  94. data/src/core/ext/filters/http/server/http_server_filter.cc +27 -23
  95. data/src/core/ext/filters/max_age/max_age_filter.cc +12 -10
  96. data/src/core/ext/filters/message_size/message_size_filter.cc +14 -11
  97. data/src/core/ext/filters/message_size/message_size_filter.h +1 -1
  98. data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +5 -4
  99. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +8 -8
  100. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +7 -7
  101. data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +5 -4
  102. data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc +2 -2
  103. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +6 -5
  104. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +485 -199
  105. data/src/core/ext/transport/chttp2/server/chttp2_server.h +2 -2
  106. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +3 -4
  107. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +3 -3
  108. data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +3 -4
  109. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +167 -122
  110. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +12 -1
  111. data/src/core/ext/transport/chttp2/transport/context_list.cc +4 -5
  112. data/src/core/ext/transport/chttp2/transport/context_list.h +4 -4
  113. data/src/core/ext/transport/chttp2/transport/flow_control.cc +3 -3
  114. data/src/core/ext/transport/chttp2/transport/flow_control.h +8 -8
  115. data/src/core/ext/transport/chttp2/transport/frame_data.cc +13 -9
  116. data/src/core/ext/transport/chttp2/transport/frame_data.h +10 -10
  117. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +7 -8
  118. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +6 -6
  119. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +7 -8
  120. data/src/core/ext/transport/chttp2/transport/frame_ping.h +7 -6
  121. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +7 -7
  122. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +6 -6
  123. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +6 -5
  124. data/src/core/ext/transport/chttp2/transport/frame_settings.h +6 -6
  125. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +4 -6
  126. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +4 -6
  127. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +1 -1
  128. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +237 -208
  129. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +10 -10
  130. data/src/core/ext/transport/chttp2/transport/hpack_table.cc +4 -3
  131. data/src/core/ext/transport/chttp2/transport/hpack_table.h +4 -4
  132. data/src/core/ext/transport/chttp2/transport/incoming_metadata.cc +2 -2
  133. data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +2 -2
  134. data/src/core/ext/transport/chttp2/transport/internal.h +32 -27
  135. data/src/core/ext/transport/chttp2/transport/parsing.cc +63 -56
  136. data/src/core/ext/transport/chttp2/transport/writing.cc +7 -3
  137. data/src/core/ext/transport/inproc/inproc_transport.cc +30 -29
  138. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.c +406 -0
  139. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.h +1459 -0
  140. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.c +350 -0
  141. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +1348 -0
  142. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +6 -0
  143. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +25 -0
  144. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.c +144 -0
  145. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.h +488 -0
  146. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.c +141 -0
  147. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.h +452 -0
  148. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +15 -0
  149. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +44 -0
  150. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.c +79 -0
  151. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.h +268 -0
  152. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c +78 -0
  153. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.h +281 -0
  154. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c +41 -0
  155. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h +113 -0
  156. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +6 -5
  157. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +13 -9
  158. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.c +93 -0
  159. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.h +323 -0
  160. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.c +36 -0
  161. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.h +90 -0
  162. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.c +46 -0
  163. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.h +124 -0
  164. data/src/core/ext/upb-generated/udpa/type/v1/typed_struct.upb.c +33 -0
  165. data/src/core/ext/upb-generated/udpa/type/v1/typed_struct.upb.h +77 -0
  166. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.c +354 -0
  167. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.h +140 -0
  168. data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.c +383 -0
  169. data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.h +115 -0
  170. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +10 -7
  171. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.h +5 -0
  172. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/stats.upbdefs.c +141 -0
  173. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/stats.upbdefs.h +70 -0
  174. data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.c +141 -0
  175. data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.h +70 -0
  176. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +13 -7
  177. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.h +5 -0
  178. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/common/fault/v3/fault.upbdefs.c +102 -0
  179. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/common/fault/v3/fault.upbdefs.h +55 -0
  180. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.c +120 -0
  181. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.h +45 -0
  182. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.c +76 -0
  183. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.h +35 -0
  184. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +21 -20
  185. data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.c +130 -0
  186. data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.h +50 -0
  187. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/node.upbdefs.c +56 -0
  188. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/node.upbdefs.h +35 -0
  189. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/struct.upbdefs.c +63 -0
  190. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/struct.upbdefs.h +40 -0
  191. data/src/core/ext/upbdefs-generated/udpa/type/v1/typed_struct.upbdefs.c +44 -0
  192. data/src/core/ext/upbdefs-generated/udpa/type/v1/typed_struct.upbdefs.h +35 -0
  193. data/src/core/ext/xds/certificate_provider_factory.h +1 -1
  194. data/src/core/ext/xds/certificate_provider_store.h +3 -3
  195. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +3 -3
  196. data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +2 -2
  197. data/src/core/ext/xds/xds_api.cc +1649 -329
  198. data/src/core/ext/xds/xds_api.h +284 -44
  199. data/src/core/ext/xds/xds_bootstrap.cc +110 -156
  200. data/src/core/ext/xds/xds_bootstrap.h +24 -25
  201. data/src/core/ext/xds/xds_certificate_provider.cc +4 -4
  202. data/src/core/ext/xds/xds_certificate_provider.h +4 -4
  203. data/src/core/ext/xds/xds_channel_args.h +5 -2
  204. data/src/core/ext/xds/xds_client.cc +454 -177
  205. data/src/core/ext/xds/xds_client.h +62 -22
  206. data/src/core/ext/xds/xds_client_stats.h +5 -4
  207. data/src/core/ext/xds/xds_http_fault_filter.cc +226 -0
  208. data/src/core/ext/xds/xds_http_fault_filter.h +63 -0
  209. data/src/core/ext/xds/xds_http_filters.cc +114 -0
  210. data/src/core/ext/xds/xds_http_filters.h +130 -0
  211. data/src/core/ext/xds/xds_server_config_fetcher.cc +410 -131
  212. data/src/core/lib/{iomgr → address_utils}/parse_address.cc +17 -17
  213. data/src/core/lib/{iomgr → address_utils}/parse_address.h +7 -7
  214. data/src/core/lib/{iomgr → address_utils}/sockaddr_utils.cc +107 -4
  215. data/src/core/lib/{iomgr → address_utils}/sockaddr_utils.h +26 -6
  216. data/src/core/lib/channel/channel_stack.cc +22 -9
  217. data/src/core/lib/channel/channel_stack.h +17 -9
  218. data/src/core/lib/channel/channel_stack_builder.cc +2 -2
  219. data/src/core/lib/channel/channel_stack_builder.h +1 -1
  220. data/src/core/lib/channel/channelz.cc +108 -12
  221. data/src/core/lib/channel/channelz.h +30 -1
  222. data/src/core/lib/channel/channelz_registry.cc +14 -0
  223. data/src/core/lib/channel/connected_channel.cc +4 -4
  224. data/src/core/lib/channel/handshaker.cc +7 -45
  225. data/src/core/lib/channel/handshaker.h +5 -22
  226. data/src/core/lib/channel/status_util.cc +12 -2
  227. data/src/core/lib/channel/status_util.h +5 -0
  228. data/src/core/lib/event_engine/slice_allocator.cc +59 -0
  229. data/src/core/lib/event_engine/sockaddr.cc +38 -0
  230. data/src/core/lib/gpr/sync_abseil.cc +3 -6
  231. data/src/core/lib/gpr/sync_windows.cc +2 -2
  232. data/src/core/lib/gprpp/atomic.h +3 -3
  233. data/src/core/lib/gprpp/dual_ref_counted.h +3 -3
  234. data/src/core/lib/gprpp/ref_counted.h +28 -14
  235. data/src/core/lib/gprpp/ref_counted_ptr.h +2 -0
  236. data/src/core/lib/gprpp/status_helper.cc +407 -0
  237. data/src/core/lib/gprpp/status_helper.h +180 -0
  238. data/src/core/lib/gprpp/thd.h +1 -1
  239. data/src/core/lib/http/httpcli.cc +11 -11
  240. data/src/core/lib/http/httpcli_security_connector.cc +11 -7
  241. data/src/core/lib/http/parser.cc +16 -16
  242. data/src/core/lib/http/parser.h +4 -4
  243. data/src/core/lib/iomgr/buffer_list.cc +7 -9
  244. data/src/core/lib/iomgr/buffer_list.h +5 -6
  245. data/src/core/lib/iomgr/call_combiner.cc +15 -12
  246. data/src/core/lib/iomgr/call_combiner.h +12 -14
  247. data/src/core/lib/iomgr/cfstream_handle.cc +5 -5
  248. data/src/core/lib/iomgr/cfstream_handle.h +1 -1
  249. data/src/core/lib/iomgr/closure.h +7 -6
  250. data/src/core/lib/iomgr/combiner.cc +14 -12
  251. data/src/core/lib/iomgr/combiner.h +2 -2
  252. data/src/core/lib/iomgr/endpoint.cc +1 -1
  253. data/src/core/lib/iomgr/endpoint.h +2 -2
  254. data/src/core/lib/iomgr/endpoint_cfstream.cc +11 -13
  255. data/src/core/lib/iomgr/endpoint_pair_windows.cc +1 -1
  256. data/src/core/lib/iomgr/error.cc +167 -61
  257. data/src/core/lib/iomgr/error.h +218 -107
  258. data/src/core/lib/iomgr/error_cfstream.cc +3 -2
  259. data/src/core/lib/iomgr/error_cfstream.h +2 -2
  260. data/src/core/lib/iomgr/error_internal.h +5 -1
  261. data/src/core/lib/iomgr/ev_apple.cc +6 -6
  262. data/src/core/lib/iomgr/ev_epoll1_linux.cc +22 -22
  263. data/src/core/lib/iomgr/ev_epollex_linux.cc +48 -45
  264. data/src/core/lib/iomgr/ev_poll_posix.cc +26 -23
  265. data/src/core/lib/iomgr/ev_posix.cc +12 -11
  266. data/src/core/lib/iomgr/ev_posix.h +9 -9
  267. data/src/core/lib/iomgr/exec_ctx.cc +10 -6
  268. data/src/core/lib/iomgr/exec_ctx.h +1 -1
  269. data/src/core/lib/iomgr/executor.cc +8 -8
  270. data/src/core/lib/iomgr/executor.h +2 -2
  271. data/src/core/lib/iomgr/iomgr.cc +1 -1
  272. data/src/core/lib/iomgr/iomgr.h +1 -1
  273. data/src/core/lib/iomgr/iomgr_custom.cc +1 -1
  274. data/src/core/lib/iomgr/iomgr_internal.cc +2 -2
  275. data/src/core/lib/iomgr/iomgr_internal.h +3 -3
  276. data/src/core/lib/iomgr/iomgr_posix.cc +1 -1
  277. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +2 -2
  278. data/src/core/lib/iomgr/iomgr_windows.cc +1 -1
  279. data/src/core/lib/iomgr/load_file.cc +4 -4
  280. data/src/core/lib/iomgr/load_file.h +2 -2
  281. data/src/core/lib/iomgr/lockfree_event.cc +5 -5
  282. data/src/core/lib/iomgr/lockfree_event.h +1 -1
  283. data/src/core/lib/iomgr/pollset.cc +5 -5
  284. data/src/core/lib/iomgr/pollset.h +9 -9
  285. data/src/core/lib/iomgr/pollset_custom.cc +5 -5
  286. data/src/core/lib/iomgr/pollset_windows.cc +5 -5
  287. data/src/core/lib/iomgr/port.h +1 -1
  288. data/src/core/lib/iomgr/python_util.h +1 -1
  289. data/src/core/lib/iomgr/resolve_address.cc +3 -3
  290. data/src/core/lib/iomgr/resolve_address.h +6 -6
  291. data/src/core/lib/iomgr/resolve_address_custom.cc +10 -9
  292. data/src/core/lib/iomgr/resolve_address_custom.h +3 -3
  293. data/src/core/lib/iomgr/resolve_address_posix.cc +3 -3
  294. data/src/core/lib/iomgr/resolve_address_windows.cc +4 -4
  295. data/src/core/lib/iomgr/resource_quota.cc +12 -11
  296. data/src/core/lib/iomgr/socket_utils_common_posix.cc +22 -20
  297. data/src/core/lib/iomgr/socket_utils_posix.h +20 -20
  298. data/src/core/lib/iomgr/tcp_client_cfstream.cc +4 -4
  299. data/src/core/lib/iomgr/tcp_client_custom.cc +5 -6
  300. data/src/core/lib/iomgr/tcp_client_posix.cc +15 -17
  301. data/src/core/lib/iomgr/tcp_client_posix.h +3 -4
  302. data/src/core/lib/iomgr/tcp_client_windows.cc +5 -5
  303. data/src/core/lib/iomgr/tcp_custom.cc +14 -16
  304. data/src/core/lib/iomgr/tcp_custom.h +13 -12
  305. data/src/core/lib/iomgr/tcp_posix.cc +37 -38
  306. data/src/core/lib/iomgr/tcp_server.cc +6 -6
  307. data/src/core/lib/iomgr/tcp_server.h +12 -11
  308. data/src/core/lib/iomgr/tcp_server_custom.cc +23 -21
  309. data/src/core/lib/iomgr/tcp_server_posix.cc +22 -21
  310. data/src/core/lib/iomgr/tcp_server_utils_posix.h +13 -12
  311. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +19 -17
  312. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +9 -9
  313. data/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc +4 -4
  314. data/src/core/lib/iomgr/tcp_server_windows.cc +26 -25
  315. data/src/core/lib/iomgr/tcp_uv.cc +27 -25
  316. data/src/core/lib/iomgr/tcp_windows.cc +13 -13
  317. data/src/core/lib/iomgr/tcp_windows.h +2 -2
  318. data/src/core/lib/iomgr/timer_custom.cc +2 -1
  319. data/src/core/lib/iomgr/timer_custom.h +1 -1
  320. data/src/core/lib/iomgr/timer_generic.cc +8 -8
  321. data/src/core/lib/iomgr/timer_manager.cc +1 -1
  322. data/src/core/lib/iomgr/udp_server.cc +21 -20
  323. data/src/core/lib/iomgr/unix_sockets_posix.cc +3 -3
  324. data/src/core/lib/iomgr/unix_sockets_posix.h +2 -2
  325. data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +10 -7
  326. data/src/core/lib/iomgr/wakeup_fd_eventfd.cc +3 -3
  327. data/src/core/lib/iomgr/wakeup_fd_nospecial.cc +1 -1
  328. data/src/core/lib/iomgr/wakeup_fd_pipe.cc +4 -4
  329. data/src/core/lib/iomgr/wakeup_fd_posix.cc +3 -3
  330. data/src/core/lib/iomgr/wakeup_fd_posix.h +8 -6
  331. data/src/core/lib/iomgr/work_serializer.h +17 -1
  332. data/src/core/lib/json/json.h +1 -1
  333. data/src/core/lib/json/json_reader.cc +4 -4
  334. data/src/core/lib/{security/authorization → matchers}/matchers.cc +47 -47
  335. data/src/core/lib/{security/authorization → matchers}/matchers.h +42 -40
  336. data/src/core/lib/security/credentials/composite/composite_credentials.cc +4 -4
  337. data/src/core/lib/security/credentials/composite/composite_credentials.h +2 -2
  338. data/src/core/lib/security/credentials/credentials.h +2 -2
  339. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +17 -13
  340. data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +13 -11
  341. data/src/core/lib/security/credentials/external/aws_request_signer.cc +2 -1
  342. data/src/core/lib/security/credentials/external/aws_request_signer.h +1 -1
  343. data/src/core/lib/security/credentials/external/external_account_credentials.cc +15 -12
  344. data/src/core/lib/security/credentials/external/external_account_credentials.h +9 -8
  345. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +5 -4
  346. data/src/core/lib/security/credentials/external/file_external_account_credentials.h +4 -3
  347. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +8 -8
  348. data/src/core/lib/security/credentials/external/url_external_account_credentials.h +9 -7
  349. data/src/core/lib/security/credentials/fake/fake_credentials.cc +2 -2
  350. data/src/core/lib/security/credentials/fake/fake_credentials.h +2 -2
  351. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +9 -9
  352. data/src/core/lib/security/credentials/iam/iam_credentials.cc +2 -2
  353. data/src/core/lib/security/credentials/iam/iam_credentials.h +2 -2
  354. data/src/core/lib/security/credentials/jwt/json_token.cc +2 -2
  355. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +3 -3
  356. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +2 -2
  357. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +7 -5
  358. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +21 -19
  359. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +5 -5
  360. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +5 -5
  361. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +2 -2
  362. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +8 -7
  363. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +9 -9
  364. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +19 -13
  365. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +4 -0
  366. data/src/core/lib/security/credentials/xds/xds_credentials.cc +3 -3
  367. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +13 -3
  368. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +13 -3
  369. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +2 -2
  370. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +12 -2
  371. data/src/core/lib/security/security_connector/load_system_roots_linux.cc +1 -1
  372. data/src/core/lib/security/security_connector/local/local_security_connector.cc +14 -4
  373. data/src/core/lib/security/security_connector/security_connector.h +9 -4
  374. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +16 -6
  375. data/src/core/lib/security/security_connector/ssl_utils.cc +28 -8
  376. data/src/core/lib/security/security_connector/ssl_utils.h +4 -4
  377. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +62 -60
  378. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +66 -48
  379. data/src/core/lib/security/transport/client_auth_filter.cc +18 -10
  380. data/src/core/lib/security/transport/secure_endpoint.cc +4 -4
  381. data/src/core/lib/security/transport/security_handshaker.cc +65 -34
  382. data/src/core/lib/security/transport/server_auth_filter.cc +24 -11
  383. data/src/core/lib/security/transport/tsi_error.cc +2 -1
  384. data/src/core/lib/security/transport/tsi_error.h +2 -1
  385. data/src/core/lib/security/util/json_util.cc +2 -2
  386. data/src/core/lib/security/util/json_util.h +1 -1
  387. data/src/core/lib/slice/slice_intern.cc +6 -7
  388. data/src/core/lib/surface/call.cc +46 -45
  389. data/src/core/lib/surface/call.h +2 -2
  390. data/src/core/lib/surface/channel.cc +6 -6
  391. data/src/core/lib/surface/channel.h +6 -5
  392. data/src/core/lib/surface/channel_ping.cc +1 -1
  393. data/src/core/lib/surface/completion_queue.cc +46 -47
  394. data/src/core/lib/surface/completion_queue.h +2 -1
  395. data/src/core/lib/surface/lame_client.cc +43 -24
  396. data/src/core/lib/surface/lame_client.h +4 -3
  397. data/src/core/lib/surface/server.cc +68 -55
  398. data/src/core/lib/surface/server.h +89 -29
  399. data/src/core/lib/surface/validate_metadata.cc +7 -7
  400. data/src/core/lib/surface/validate_metadata.h +3 -2
  401. data/src/core/lib/surface/version.cc +4 -2
  402. data/src/core/lib/transport/byte_stream.cc +5 -5
  403. data/src/core/lib/transport/byte_stream.h +8 -8
  404. data/src/core/lib/transport/connectivity_state.cc +1 -1
  405. data/src/core/lib/transport/error_utils.cc +19 -8
  406. data/src/core/lib/transport/error_utils.h +11 -5
  407. data/src/core/lib/transport/metadata_batch.cc +64 -37
  408. data/src/core/lib/transport/metadata_batch.h +33 -18
  409. data/src/core/lib/transport/transport.cc +4 -3
  410. data/src/core/lib/transport/transport.h +4 -4
  411. data/src/core/lib/transport/transport_op_string.cc +5 -5
  412. data/src/core/plugin_registry/grpc_plugin_registry.cc +6 -0
  413. data/src/core/tsi/alts/crypt/gsec.h +4 -0
  414. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +6 -8
  415. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +7 -6
  416. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +1 -1
  417. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +2 -1
  418. data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +1 -3
  419. data/src/core/tsi/fake_transport_security.cc +10 -1
  420. data/src/core/tsi/ssl_transport_security.cc +32 -14
  421. data/src/core/tsi/ssl_transport_security.h +3 -4
  422. data/src/ruby/bin/math_services_pb.rb +1 -1
  423. data/src/ruby/ext/grpc/extconf.rb +9 -1
  424. data/src/ruby/ext/grpc/rb_channel.c +10 -1
  425. data/src/ruby/ext/grpc/rb_channel_credentials.c +11 -1
  426. data/src/ruby/ext/grpc/rb_channel_credentials.h +4 -0
  427. data/src/ruby/ext/grpc/rb_compression_options.c +1 -1
  428. data/src/ruby/ext/grpc/rb_enable_cpp.cc +1 -1
  429. data/src/ruby/ext/grpc/rb_grpc.c +4 -0
  430. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +2 -0
  431. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +4 -1
  432. data/src/ruby/ext/grpc/rb_server.c +13 -1
  433. data/src/ruby/ext/grpc/rb_server_credentials.c +19 -3
  434. data/src/ruby/ext/grpc/rb_server_credentials.h +4 -0
  435. data/src/ruby/ext/grpc/rb_xds_channel_credentials.c +215 -0
  436. data/src/ruby/ext/grpc/rb_xds_channel_credentials.h +35 -0
  437. data/src/ruby/ext/grpc/rb_xds_server_credentials.c +169 -0
  438. data/src/ruby/ext/grpc/rb_xds_server_credentials.h +35 -0
  439. data/src/ruby/lib/grpc/generic/client_stub.rb +4 -2
  440. data/src/ruby/lib/grpc/version.rb +1 -1
  441. data/src/ruby/pb/grpc/health/v1/health_services_pb.rb +1 -1
  442. data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +6 -6
  443. data/src/ruby/spec/call_spec.rb +1 -1
  444. data/src/ruby/spec/channel_credentials_spec.rb +32 -0
  445. data/src/ruby/spec/channel_spec.rb +17 -6
  446. data/src/ruby/spec/client_auth_spec.rb +27 -1
  447. data/src/ruby/spec/errors_spec.rb +1 -1
  448. data/src/ruby/spec/generic/active_call_spec.rb +2 -2
  449. data/src/ruby/spec/generic/client_stub_spec.rb +4 -4
  450. data/src/ruby/spec/generic/rpc_server_spec.rb +1 -1
  451. data/src/ruby/spec/server_credentials_spec.rb +25 -0
  452. data/src/ruby/spec/server_spec.rb +22 -0
  453. data/third_party/abseil-cpp/absl/algorithm/container.h +3 -3
  454. data/third_party/abseil-cpp/absl/base/attributes.h +24 -4
  455. data/third_party/abseil-cpp/absl/base/call_once.h +2 -9
  456. data/third_party/abseil-cpp/absl/base/config.h +37 -9
  457. data/third_party/abseil-cpp/absl/base/dynamic_annotations.h +24 -10
  458. data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +4 -1
  459. data/third_party/abseil-cpp/absl/base/internal/endian.h +61 -0
  460. data/third_party/abseil-cpp/absl/base/internal/low_level_scheduling.h +2 -3
  461. data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +34 -32
  462. data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +16 -6
  463. data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +11 -2
  464. data/third_party/abseil-cpp/absl/base/internal/spinlock.h +14 -5
  465. data/third_party/abseil-cpp/absl/base/internal/spinlock_akaros.inc +2 -2
  466. data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +3 -3
  467. data/third_party/abseil-cpp/absl/base/internal/spinlock_posix.inc +2 -2
  468. data/third_party/abseil-cpp/absl/base/internal/spinlock_wait.h +11 -11
  469. data/third_party/abseil-cpp/absl/base/internal/spinlock_win32.inc +5 -5
  470. data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +1 -1
  471. data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +5 -2
  472. data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +43 -42
  473. data/third_party/abseil-cpp/absl/base/internal/throw_delegate.cc +111 -7
  474. data/third_party/abseil-cpp/absl/base/internal/unaligned_access.h +0 -76
  475. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +1 -3
  476. data/third_party/abseil-cpp/absl/base/log_severity.h +4 -4
  477. data/third_party/abseil-cpp/absl/base/macros.h +11 -0
  478. data/third_party/abseil-cpp/absl/base/optimization.h +10 -7
  479. data/third_party/abseil-cpp/absl/base/options.h +1 -1
  480. data/third_party/abseil-cpp/absl/base/port.h +0 -1
  481. data/third_party/abseil-cpp/absl/base/thread_annotations.h +1 -1
  482. data/third_party/abseil-cpp/absl/container/fixed_array.h +2 -2
  483. data/third_party/abseil-cpp/absl/container/inlined_vector.h +5 -3
  484. data/third_party/abseil-cpp/absl/container/internal/compressed_tuple.h +1 -1
  485. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +5 -1
  486. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +2 -1
  487. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler_force_weak_definition.cc +2 -1
  488. data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +141 -66
  489. data/third_party/abseil-cpp/absl/container/internal/layout.h +4 -4
  490. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +14 -1
  491. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +136 -136
  492. data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +16 -12
  493. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +5 -2
  494. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +3 -12
  495. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +6 -1
  496. data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +3 -5
  497. data/third_party/abseil-cpp/absl/debugging/symbolize_darwin.inc +2 -2
  498. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +2 -2
  499. data/third_party/abseil-cpp/absl/hash/internal/city.cc +15 -12
  500. data/third_party/abseil-cpp/absl/hash/internal/city.h +1 -19
  501. data/third_party/abseil-cpp/absl/hash/internal/hash.cc +25 -10
  502. data/third_party/abseil-cpp/absl/hash/internal/hash.h +86 -37
  503. data/third_party/abseil-cpp/absl/hash/internal/wyhash.cc +111 -0
  504. data/third_party/abseil-cpp/absl/hash/internal/wyhash.h +48 -0
  505. data/third_party/abseil-cpp/absl/meta/type_traits.h +16 -2
  506. data/third_party/abseil-cpp/absl/numeric/bits.h +177 -0
  507. data/third_party/abseil-cpp/absl/numeric/int128.cc +3 -3
  508. data/third_party/abseil-cpp/absl/numeric/internal/bits.h +358 -0
  509. data/third_party/abseil-cpp/absl/numeric/internal/representation.h +55 -0
  510. data/third_party/abseil-cpp/absl/status/internal/status_internal.h +18 -0
  511. data/third_party/abseil-cpp/absl/status/internal/statusor_internal.h +4 -7
  512. data/third_party/abseil-cpp/absl/status/status.cc +29 -22
  513. data/third_party/abseil-cpp/absl/status/status.h +81 -20
  514. data/third_party/abseil-cpp/absl/status/statusor.h +3 -3
  515. data/third_party/abseil-cpp/absl/strings/charconv.cc +5 -5
  516. data/third_party/abseil-cpp/absl/strings/cord.cc +326 -371
  517. data/third_party/abseil-cpp/absl/strings/cord.h +182 -64
  518. data/third_party/abseil-cpp/absl/strings/escaping.cc +4 -4
  519. data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc +6 -6
  520. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.cc +83 -0
  521. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +387 -17
  522. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_flat.h +146 -0
  523. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.cc +897 -0
  524. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.h +589 -0
  525. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring_reader.h +114 -0
  526. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +14 -0
  527. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +14 -0
  528. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +15 -1
  529. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +19 -4
  530. data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +14 -0
  531. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +36 -18
  532. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.h +14 -0
  533. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc +14 -0
  534. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +14 -0
  535. data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +15 -40
  536. data/third_party/abseil-cpp/absl/strings/internal/string_constant.h +64 -0
  537. data/third_party/abseil-cpp/absl/strings/match.cc +6 -3
  538. data/third_party/abseil-cpp/absl/strings/match.h +16 -6
  539. data/third_party/abseil-cpp/absl/strings/numbers.cc +132 -4
  540. data/third_party/abseil-cpp/absl/strings/numbers.h +10 -10
  541. data/third_party/abseil-cpp/absl/strings/str_join.h +1 -1
  542. data/third_party/abseil-cpp/absl/strings/str_split.h +38 -4
  543. data/third_party/abseil-cpp/absl/synchronization/internal/futex.h +154 -0
  544. data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +2 -1
  545. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +2 -2
  546. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +4 -4
  547. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +1 -65
  548. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +2 -6
  549. data/third_party/abseil-cpp/absl/synchronization/mutex.cc +71 -59
  550. data/third_party/abseil-cpp/absl/synchronization/mutex.h +79 -62
  551. data/third_party/abseil-cpp/absl/time/clock.cc +146 -130
  552. data/third_party/abseil-cpp/absl/time/clock.h +2 -2
  553. data/third_party/abseil-cpp/absl/time/duration.cc +3 -2
  554. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +7 -11
  555. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.cc +7 -1
  556. data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +4 -4
  557. data/third_party/abseil-cpp/absl/time/time.cc +4 -3
  558. data/third_party/abseil-cpp/absl/time/time.h +26 -24
  559. data/third_party/abseil-cpp/absl/types/internal/variant.h +1 -1
  560. data/third_party/abseil-cpp/absl/types/variant.h +9 -4
  561. data/third_party/boringssl-with-bazel/err_data.c +478 -462
  562. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bool.c +1 -1
  563. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +1 -1
  564. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_type.c +18 -8
  565. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +1 -2
  566. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_locl.h +5 -0
  567. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +1 -1
  568. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_fre.c +1 -1
  569. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_tls.c +1 -88
  570. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/internal.h +14 -3
  571. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/tls_cbc.c +119 -273
  572. data/third_party/boringssl-with-bazel/src/crypto/cpu-arm-linux.c +11 -2
  573. data/third_party/boringssl-with-bazel/src/crypto/cpu-arm.c +3 -3
  574. data/third_party/boringssl-with-bazel/src/crypto/err/err.c +87 -80
  575. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +1 -0
  576. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +1 -1
  577. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/cipher.c +32 -16
  578. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_aes.c +25 -2
  579. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digests.c +10 -2
  580. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/md32_common.h +4 -43
  581. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +4 -0
  582. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +0 -1
  583. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +0 -4
  584. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +104 -93
  585. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/internal.h +39 -0
  586. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md4/md4.c +43 -46
  587. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md5/md5.c +43 -46
  588. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cbc.c +33 -22
  589. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cfb.c +9 -8
  590. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ctr.c +9 -8
  591. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm.c +17 -13
  592. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/internal.h +1 -22
  593. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ofb.c +2 -1
  594. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.c +7 -5
  595. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +26 -7
  596. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/fips.c +79 -0
  597. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +14 -9
  598. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha1.c +45 -48
  599. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha256.c +38 -43
  600. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +37 -45
  601. data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +103 -42
  602. data/third_party/boringssl-with-bazel/src/crypto/hpke/internal.h +58 -37
  603. data/third_party/boringssl-with-bazel/src/crypto/internal.h +65 -0
  604. data/third_party/boringssl-with-bazel/src/crypto/mem.c +14 -0
  605. data/third_party/boringssl-with-bazel/src/crypto/obj/obj.c +3 -3
  606. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7_x509.c +1 -1
  607. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +95 -48
  608. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/rand_extra.c +1 -1
  609. data/third_party/boringssl-with-bazel/src/crypto/thread_pthread.c +0 -28
  610. data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +19 -0
  611. data/third_party/boringssl-with-bazel/src/crypto/x509/t_req.c +2 -0
  612. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_att.c +19 -25
  613. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c +3 -30
  614. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c +39 -89
  615. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +9 -16
  616. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +1 -1
  617. data/third_party/boringssl-with-bazel/src/crypto/x509/x_algor.c +21 -17
  618. data/third_party/boringssl-with-bazel/src/crypto/x509/x_attrib.c +21 -34
  619. data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +5 -0
  620. data/third_party/boringssl-with-bazel/src/crypto/x509/x_pubkey.c +25 -22
  621. data/third_party/boringssl-with-bazel/src/crypto/x509/x_val.c +2 -0
  622. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509.c +3 -1
  623. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +2 -4
  624. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +1 -1
  625. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c +1 -0
  626. data/third_party/boringssl-with-bazel/src/include/openssl/aead.h +0 -3
  627. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +120 -41
  628. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +9 -0
  629. data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +0 -4
  630. data/third_party/boringssl-with-bazel/src/include/openssl/cpu.h +22 -32
  631. data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +24 -4
  632. data/third_party/boringssl-with-bazel/src/include/openssl/ec.h +5 -2
  633. data/third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h +19 -0
  634. data/third_party/boringssl-with-bazel/src/include/openssl/err.h +3 -2
  635. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +1 -38
  636. data/third_party/boringssl-with-bazel/src/{crypto/x509/x509_r2x.c → include/openssl/evp_errors.h} +41 -58
  637. data/third_party/boringssl-with-bazel/src/include/openssl/obj.h +24 -5
  638. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs7.h +2 -0
  639. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs8.h +9 -1
  640. data/third_party/boringssl-with-bazel/src/include/openssl/rand.h +2 -2
  641. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +210 -26
  642. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +1 -0
  643. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +416 -122
  644. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +2 -0
  645. data/third_party/boringssl-with-bazel/src/ssl/d1_both.cc +5 -0
  646. data/third_party/boringssl-with-bazel/src/ssl/encrypted_client_hello.cc +444 -0
  647. data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +244 -1
  648. data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +43 -12
  649. data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +149 -8
  650. data/third_party/boringssl-with-bazel/src/ssl/internal.h +220 -46
  651. data/third_party/boringssl-with-bazel/src/ssl/s3_both.cc +7 -1
  652. data/third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc +4 -6
  653. data/third_party/boringssl-with-bazel/src/ssl/ssl_key_share.cc +23 -26
  654. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +74 -15
  655. data/third_party/boringssl-with-bazel/src/ssl/t1_lib.cc +131 -83
  656. data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +34 -4
  657. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +205 -100
  658. data/third_party/boringssl-with-bazel/src/ssl/tls_method.cc +4 -2
  659. data/third_party/xxhash/xxhash.h +5443 -0
  660. metadata +128 -61
  661. data/src/core/lib/iomgr/poller/eventmanager_libuv.cc +0 -88
  662. data/src/core/lib/iomgr/poller/eventmanager_libuv.h +0 -88
  663. data/src/core/lib/security/authorization/authorization_engine.cc +0 -177
  664. data/src/core/lib/security/authorization/authorization_engine.h +0 -84
  665. data/src/core/lib/security/authorization/evaluate_args.cc +0 -148
  666. data/src/core/lib/security/authorization/evaluate_args.h +0 -59
  667. data/src/core/lib/security/authorization/mock_cel/activation.h +0 -57
  668. data/src/core/lib/security/authorization/mock_cel/cel_expr_builder_factory.h +0 -44
  669. data/src/core/lib/security/authorization/mock_cel/cel_expression.h +0 -69
  670. data/src/core/lib/security/authorization/mock_cel/cel_value.h +0 -99
  671. data/src/core/lib/security/authorization/mock_cel/evaluator_core.h +0 -67
  672. data/src/core/lib/security/authorization/mock_cel/flat_expr_builder.h +0 -57
  673. data/third_party/abseil-cpp/absl/base/internal/bits.h +0 -219
  674. data/third_party/abseil-cpp/absl/container/flat_hash_set.h +0 -504
  675. data/third_party/abseil-cpp/absl/synchronization/internal/mutex_nonprod.inc +0 -249
  676. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/is_fips.c +0 -29
  677. data/third_party/upb/upb/json_decode.c +0 -1443
  678. data/third_party/upb/upb/json_decode.h +0 -23
  679. data/third_party/upb/upb/json_encode.c +0 -713
  680. data/third_party/upb/upb/json_encode.h +0 -36
@@ -0,0 +1,63 @@
1
+ //
2
+ // Copyright 2021 gRPC authors.
3
+ //
4
+ // Licensed under the Apache License, Version 2.0 (the "License");
5
+ // you may not use this file except in compliance with the License.
6
+ // You may obtain a copy of the License at
7
+ //
8
+ // http://www.apache.org/licenses/LICENSE-2.0
9
+ //
10
+ // Unless required by applicable law or agreed to in writing, software
11
+ // distributed under the License is distributed on an "AS IS" BASIS,
12
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ // See the License for the specific language governing permissions and
14
+ // limitations under the License.
15
+ //
16
+
17
+ #ifndef GRPC_CORE_EXT_XDS_XDS_HTTP_FAULT_FILTER_H
18
+ #define GRPC_CORE_EXT_XDS_XDS_HTTP_FAULT_FILTER_H
19
+
20
+ #include <grpc/support/port_platform.h>
21
+
22
+ #include <grpc/grpc.h>
23
+
24
+ #include "absl/status/statusor.h"
25
+ #include "src/core/ext/xds/xds_http_filters.h"
26
+ #include "upb/def.h"
27
+
28
+ namespace grpc_core {
29
+
30
+ extern const char* kXdsHttpFaultFilterConfigName;
31
+
32
+ class XdsHttpFaultFilter : public XdsHttpFilterImpl {
33
+ public:
34
+ // Overrides the PopulateSymtab method
35
+ void PopulateSymtab(upb_symtab* symtab) const override;
36
+
37
+ // Overrides the GenerateFilterConfig method
38
+ absl::StatusOr<FilterConfig> GenerateFilterConfig(
39
+ upb_strview serialized_filter_config, upb_arena* arena) const override;
40
+
41
+ // Overrides the GenerateFilterConfigOverride method
42
+ absl::StatusOr<FilterConfig> GenerateFilterConfigOverride(
43
+ upb_strview serialized_filter_config, upb_arena* arena) const override;
44
+
45
+ // Overrides the channel_filter method
46
+ const grpc_channel_filter* channel_filter() const override;
47
+
48
+ // Overrides the ModifyChannelArgs method
49
+ grpc_channel_args* ModifyChannelArgs(grpc_channel_args* args) const override;
50
+
51
+ // Overrides the GenerateServiceConfig method
52
+ absl::StatusOr<ServiceConfigJsonEntry> GenerateServiceConfig(
53
+ const FilterConfig& hcm_filter_config,
54
+ const FilterConfig* filter_config_override) const override;
55
+
56
+ bool IsSupportedOnClients() const override { return true; }
57
+
58
+ bool IsSupportedOnServers() const override { return false; }
59
+ };
60
+
61
+ } // namespace grpc_core
62
+
63
+ #endif /* GRPC_CORE_EXT_XDS_XDS_HTTP_FAULT_FILTER_H */
@@ -0,0 +1,114 @@
1
+ //
2
+ // Copyright 2021 gRPC authors.
3
+ //
4
+ // Licensed under the Apache License, Version 2.0 (the "License");
5
+ // you may not use this file except in compliance with the License.
6
+ // You may obtain a copy of the License at
7
+ //
8
+ // http://www.apache.org/licenses/LICENSE-2.0
9
+ //
10
+ // Unless required by applicable law or agreed to in writing, software
11
+ // distributed under the License is distributed on an "AS IS" BASIS,
12
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ // See the License for the specific language governing permissions and
14
+ // limitations under the License.
15
+ //
16
+
17
+ #include <grpc/support/port_platform.h>
18
+
19
+ #include "src/core/ext/xds/xds_http_filters.h"
20
+
21
+ #include "envoy/extensions/filters/http/router/v3/router.upb.h"
22
+ #include "envoy/extensions/filters/http/router/v3/router.upbdefs.h"
23
+ #include "src/core/ext/xds/xds_http_fault_filter.h"
24
+
25
+ namespace grpc_core {
26
+
27
+ const char* kXdsHttpRouterFilterConfigName =
28
+ "envoy.extensions.filters.http.router.v3.Router";
29
+
30
+ namespace {
31
+
32
+ class XdsHttpRouterFilter : public XdsHttpFilterImpl {
33
+ public:
34
+ void PopulateSymtab(upb_symtab* symtab) const override {
35
+ envoy_extensions_filters_http_router_v3_Router_getmsgdef(symtab);
36
+ }
37
+
38
+ absl::StatusOr<FilterConfig> GenerateFilterConfig(
39
+ upb_strview serialized_filter_config, upb_arena* arena) const override {
40
+ if (envoy_extensions_filters_http_router_v3_Router_parse(
41
+ serialized_filter_config.data, serialized_filter_config.size,
42
+ arena) == nullptr) {
43
+ return absl::InvalidArgumentError("could not parse router filter config");
44
+ }
45
+ return FilterConfig{kXdsHttpRouterFilterConfigName, Json()};
46
+ }
47
+
48
+ absl::StatusOr<FilterConfig> GenerateFilterConfigOverride(
49
+ upb_strview /*serialized_filter_config*/,
50
+ upb_arena* /*arena*/) const override {
51
+ return absl::InvalidArgumentError(
52
+ "router filter does not support config override");
53
+ }
54
+
55
+ // No-op -- this filter is special-cased by the xds resolver.
56
+ const grpc_channel_filter* channel_filter() const override { return nullptr; }
57
+
58
+ // No-op -- this filter is special-cased by the xds resolver.
59
+ absl::StatusOr<ServiceConfigJsonEntry> GenerateServiceConfig(
60
+ const FilterConfig& /*hcm_filter_config*/,
61
+ const FilterConfig* /*filter_config_override*/) const override {
62
+ return absl::UnimplementedError("router filter should never be called");
63
+ }
64
+
65
+ bool IsSupportedOnClients() const override { return true; }
66
+
67
+ bool IsSupportedOnServers() const override { return true; }
68
+ };
69
+
70
+ using FilterOwnerList = std::vector<std::unique_ptr<XdsHttpFilterImpl>>;
71
+ using FilterRegistryMap = std::map<absl::string_view, XdsHttpFilterImpl*>;
72
+
73
+ FilterOwnerList* g_filters = nullptr;
74
+ FilterRegistryMap* g_filter_registry = nullptr;
75
+
76
+ } // namespace
77
+
78
+ void XdsHttpFilterRegistry::RegisterFilter(
79
+ std::unique_ptr<XdsHttpFilterImpl> filter,
80
+ const std::set<absl::string_view>& config_proto_type_names) {
81
+ for (auto config_proto_type_name : config_proto_type_names) {
82
+ (*g_filter_registry)[config_proto_type_name] = filter.get();
83
+ }
84
+ g_filters->push_back(std::move(filter));
85
+ }
86
+
87
+ const XdsHttpFilterImpl* XdsHttpFilterRegistry::GetFilterForType(
88
+ absl::string_view proto_type_name) {
89
+ auto it = g_filter_registry->find(proto_type_name);
90
+ if (it == g_filter_registry->end()) return nullptr;
91
+ return it->second;
92
+ }
93
+
94
+ void XdsHttpFilterRegistry::PopulateSymtab(upb_symtab* symtab) {
95
+ for (const auto& filter : *g_filters) {
96
+ filter->PopulateSymtab(symtab);
97
+ }
98
+ }
99
+
100
+ void XdsHttpFilterRegistry::Init() {
101
+ g_filters = new FilterOwnerList;
102
+ g_filter_registry = new FilterRegistryMap;
103
+ RegisterFilter(absl::make_unique<XdsHttpRouterFilter>(),
104
+ {kXdsHttpRouterFilterConfigName});
105
+ RegisterFilter(absl::make_unique<XdsHttpFaultFilter>(),
106
+ {kXdsHttpFaultFilterConfigName});
107
+ }
108
+
109
+ void XdsHttpFilterRegistry::Shutdown() {
110
+ delete g_filter_registry;
111
+ delete g_filters;
112
+ }
113
+
114
+ } // namespace grpc_core
@@ -0,0 +1,130 @@
1
+ //
2
+ // Copyright 2021 gRPC authors.
3
+ //
4
+ // Licensed under the Apache License, Version 2.0 (the "License");
5
+ // you may not use this file except in compliance with the License.
6
+ // You may obtain a copy of the License at
7
+ //
8
+ // http://www.apache.org/licenses/LICENSE-2.0
9
+ //
10
+ // Unless required by applicable law or agreed to in writing, software
11
+ // distributed under the License is distributed on an "AS IS" BASIS,
12
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ // See the License for the specific language governing permissions and
14
+ // limitations under the License.
15
+ //
16
+
17
+ #ifndef GRPC_CORE_EXT_XDS_XDS_HTTP_FILTERS_H
18
+ #define GRPC_CORE_EXT_XDS_XDS_HTTP_FILTERS_H
19
+
20
+ #include <grpc/support/port_platform.h>
21
+
22
+ #include <memory>
23
+ #include <set>
24
+ #include <string>
25
+
26
+ #include "absl/status/statusor.h"
27
+ #include "absl/strings/str_cat.h"
28
+ #include "absl/strings/string_view.h"
29
+ #include "google/protobuf/any.upb.h"
30
+ #include "upb/def.h"
31
+
32
+ #include <grpc/grpc.h>
33
+
34
+ #include "src/core/lib/channel/channel_stack.h"
35
+ #include "src/core/lib/json/json.h"
36
+
37
+ namespace grpc_core {
38
+
39
+ extern const char* kXdsHttpRouterFilterConfigName;
40
+
41
+ class XdsHttpFilterImpl {
42
+ public:
43
+ struct FilterConfig {
44
+ absl::string_view config_proto_type_name;
45
+ Json config;
46
+
47
+ bool operator==(const FilterConfig& other) const {
48
+ return config_proto_type_name == other.config_proto_type_name &&
49
+ config == other.config;
50
+ }
51
+ std::string ToString() const {
52
+ return absl::StrCat("{config_proto_type_name=", config_proto_type_name,
53
+ " config=", config.Dump(), "}");
54
+ }
55
+ };
56
+
57
+ // Service config data for the filter, returned by GenerateServiceConfig().
58
+ struct ServiceConfigJsonEntry {
59
+ // The top-level field name in the method config.
60
+ // Filter implementations should use their primary config proto type
61
+ // name for this.
62
+ // The value of this field in the method config will be a JSON array,
63
+ // which will be populated with the elements returned by each filter
64
+ // instance.
65
+ std::string service_config_field_name;
66
+ // The element to add to the JSON array.
67
+ std::string element;
68
+ };
69
+
70
+ virtual ~XdsHttpFilterImpl() = default;
71
+
72
+ // Loads the proto message into the upb symtab.
73
+ virtual void PopulateSymtab(upb_symtab* symtab) const = 0;
74
+
75
+ // Generates a Config from the xDS filter config proto.
76
+ // Used for the top-level config in the HCM HTTP filter list.
77
+ virtual absl::StatusOr<FilterConfig> GenerateFilterConfig(
78
+ upb_strview serialized_filter_config, upb_arena* arena) const = 0;
79
+
80
+ // Generates a Config from the xDS filter config proto.
81
+ // Used for the typed_per_filter_config override in VirtualHost and Route.
82
+ virtual absl::StatusOr<FilterConfig> GenerateFilterConfigOverride(
83
+ upb_strview serialized_filter_config, upb_arena* arena) const = 0;
84
+
85
+ // C-core channel filter implementation.
86
+ virtual const grpc_channel_filter* channel_filter() const = 0;
87
+
88
+ // Modifies channel args that may affect service config parsing (not
89
+ // visible to the channel as a whole).
90
+ // Takes ownership of args. Caller takes ownership of return value.
91
+ virtual grpc_channel_args* ModifyChannelArgs(grpc_channel_args* args) const {
92
+ return args;
93
+ }
94
+
95
+ // Function to convert the Configs into a JSON string to be added to the
96
+ // per-method part of the service config.
97
+ // The hcm_filter_config comes from the HttpConnectionManager config.
98
+ // The filter_config_override comes from the first of the ClusterWeight,
99
+ // Route, or VirtualHost entries that it is found in, or null if
100
+ // there is no override in any of those locations.
101
+ virtual absl::StatusOr<ServiceConfigJsonEntry> GenerateServiceConfig(
102
+ const FilterConfig& hcm_filter_config,
103
+ const FilterConfig* filter_config_override) const = 0;
104
+
105
+ // Returns true if the filter is supported on clients; false otherwise
106
+ virtual bool IsSupportedOnClients() const = 0;
107
+
108
+ // Returns true if the filter is supported on servers; false otherwise
109
+ virtual bool IsSupportedOnServers() const = 0;
110
+ };
111
+
112
+ class XdsHttpFilterRegistry {
113
+ public:
114
+ static void RegisterFilter(
115
+ std::unique_ptr<XdsHttpFilterImpl> filter,
116
+ const std::set<absl::string_view>& config_proto_type_names);
117
+
118
+ static const XdsHttpFilterImpl* GetFilterForType(
119
+ absl::string_view proto_type_name);
120
+
121
+ static void PopulateSymtab(upb_symtab* symtab);
122
+
123
+ // Global init and shutdown.
124
+ static void Init();
125
+ static void Shutdown();
126
+ };
127
+
128
+ } // namespace grpc_core
129
+
130
+ #endif /* GRPC_CORE_EXT_XDS_XDS_HTTP_FILTERS_H */
@@ -18,12 +18,19 @@
18
18
 
19
19
  #include <grpc/support/port_platform.h>
20
20
 
21
+ #include "absl/strings/str_replace.h"
22
+
21
23
  #include "src/core/ext/xds/xds_certificate_provider.h"
22
24
  #include "src/core/ext/xds/xds_client.h"
25
+ #include "src/core/lib/address_utils/sockaddr_utils.h"
23
26
  #include "src/core/lib/channel/channel_args.h"
27
+ #include "src/core/lib/gprpp/host_port.h"
28
+ #include "src/core/lib/iomgr/sockaddr.h"
29
+ #include "src/core/lib/iomgr/socket_utils.h"
24
30
  #include "src/core/lib/security/credentials/xds/xds_credentials.h"
25
31
  #include "src/core/lib/surface/api_trace.h"
26
32
  #include "src/core/lib/surface/server.h"
33
+ #include "src/core/lib/uri/uri_parser.h"
27
34
 
28
35
  namespace grpc_core {
29
36
 
@@ -32,10 +39,317 @@ TraceFlag grpc_xds_server_config_fetcher_trace(false,
32
39
 
33
40
  namespace {
34
41
 
42
+ class FilterChainMatchManager
43
+ : public grpc_server_config_fetcher::ConnectionManager {
44
+ public:
45
+ FilterChainMatchManager(
46
+ RefCountedPtr<XdsClient> xds_client,
47
+ XdsApi::LdsUpdate::FilterChainMap filter_chain_map,
48
+ absl::optional<XdsApi::LdsUpdate::FilterChainData> default_filter_chain)
49
+ : xds_client_(xds_client),
50
+ filter_chain_map_(std::move(filter_chain_map)),
51
+ default_filter_chain_(std::move(default_filter_chain)) {}
52
+
53
+ absl::StatusOr<grpc_channel_args*> UpdateChannelArgsForConnection(
54
+ grpc_channel_args* args, grpc_endpoint* tcp) override;
55
+
56
+ const XdsApi::LdsUpdate::FilterChainMap& filter_chain_map() const {
57
+ return filter_chain_map_;
58
+ }
59
+
60
+ const absl::optional<XdsApi::LdsUpdate::FilterChainData>&
61
+ default_filter_chain() const {
62
+ return default_filter_chain_;
63
+ }
64
+
65
+ private:
66
+ struct CertificateProviders {
67
+ // We need to save our own refs to the root and instance certificate
68
+ // providers since the xds certificate provider just stores a ref to their
69
+ // distributors.
70
+ RefCountedPtr<grpc_tls_certificate_provider> root;
71
+ RefCountedPtr<grpc_tls_certificate_provider> instance;
72
+ RefCountedPtr<XdsCertificateProvider> xds;
73
+ };
74
+
75
+ absl::StatusOr<RefCountedPtr<XdsCertificateProvider>>
76
+ CreateOrGetXdsCertificateProviderFromFilterChainData(
77
+ const XdsApi::LdsUpdate::FilterChainData* filter_chain);
78
+
79
+ const RefCountedPtr<XdsClient> xds_client_;
80
+ const XdsApi::LdsUpdate::FilterChainMap filter_chain_map_;
81
+ const absl::optional<XdsApi::LdsUpdate::FilterChainData>
82
+ default_filter_chain_;
83
+ Mutex mu_;
84
+ std::map<const XdsApi::LdsUpdate::FilterChainData*, CertificateProviders>
85
+ certificate_providers_map_ ABSL_GUARDED_BY(mu_);
86
+ };
87
+
88
+ bool IsLoopbackIp(const grpc_resolved_address* address) {
89
+ const grpc_sockaddr* sock_addr =
90
+ reinterpret_cast<const grpc_sockaddr*>(&address->addr);
91
+ if (sock_addr->sa_family == GRPC_AF_INET) {
92
+ const grpc_sockaddr_in* addr4 =
93
+ reinterpret_cast<const grpc_sockaddr_in*>(sock_addr);
94
+ if (addr4->sin_addr.s_addr == grpc_htonl(INADDR_LOOPBACK)) {
95
+ return true;
96
+ }
97
+ } else if (sock_addr->sa_family == GRPC_AF_INET6) {
98
+ const grpc_sockaddr_in6* addr6 =
99
+ reinterpret_cast<const grpc_sockaddr_in6*>(sock_addr);
100
+ if (memcmp(&addr6->sin6_addr, &in6addr_loopback,
101
+ sizeof(in6addr_loopback)) == 0) {
102
+ return true;
103
+ }
104
+ }
105
+ return false;
106
+ }
107
+
108
+ const XdsApi::LdsUpdate::FilterChainData* FindFilterChainDataForSourcePort(
109
+ const XdsApi::LdsUpdate::FilterChainMap::SourcePortsMap& source_ports_map,
110
+ absl::string_view port_str) {
111
+ int port = 0;
112
+ if (!absl::SimpleAtoi(port_str, &port)) return nullptr;
113
+ auto it = source_ports_map.find(port);
114
+ if (it != source_ports_map.end()) {
115
+ return it->second.data.get();
116
+ }
117
+ // Search for the catch-all port 0 since we didn't get a direct match
118
+ it = source_ports_map.find(0);
119
+ if (it != source_ports_map.end()) {
120
+ return it->second.data.get();
121
+ }
122
+ return nullptr;
123
+ }
124
+
125
+ const XdsApi::LdsUpdate::FilterChainData* FindFilterChainDataForSourceIp(
126
+ const XdsApi::LdsUpdate::FilterChainMap::SourceIpVector& source_ip_vector,
127
+ const grpc_resolved_address* source_ip, absl::string_view port) {
128
+ const XdsApi::LdsUpdate::FilterChainMap::SourceIp* best_match = nullptr;
129
+ for (const auto& entry : source_ip_vector) {
130
+ // Special case for catch-all
131
+ if (!entry.prefix_range.has_value()) {
132
+ if (best_match == nullptr) {
133
+ best_match = &entry;
134
+ }
135
+ continue;
136
+ }
137
+ if (best_match != nullptr && best_match->prefix_range.has_value() &&
138
+ best_match->prefix_range->prefix_len >=
139
+ entry.prefix_range->prefix_len) {
140
+ continue;
141
+ }
142
+ if (grpc_sockaddr_match_subnet(source_ip, &entry.prefix_range->address,
143
+ entry.prefix_range->prefix_len)) {
144
+ best_match = &entry;
145
+ }
146
+ }
147
+ if (best_match == nullptr) return nullptr;
148
+ return FindFilterChainDataForSourcePort(best_match->ports_map, port);
149
+ }
150
+
151
+ const XdsApi::LdsUpdate::FilterChainData* FindFilterChainDataForSourceType(
152
+ const XdsApi::LdsUpdate::FilterChainMap::ConnectionSourceTypesArray&
153
+ source_types_array,
154
+ grpc_endpoint* tcp, absl::string_view destination_ip) {
155
+ auto source_uri = URI::Parse(grpc_endpoint_get_peer(tcp));
156
+ if (!source_uri.ok() ||
157
+ (source_uri->scheme() != "ipv4" && source_uri->scheme() != "ipv6")) {
158
+ return nullptr;
159
+ }
160
+ std::string host;
161
+ std::string port;
162
+ if (!SplitHostPort(source_uri->path(), &host, &port)) {
163
+ return nullptr;
164
+ }
165
+ grpc_resolved_address source_addr;
166
+ grpc_error_handle error = grpc_string_to_sockaddr(
167
+ &source_addr, host.c_str(), 0 /* port doesn't matter here */);
168
+ if (error != GRPC_ERROR_NONE) {
169
+ gpr_log(GPR_DEBUG, "Could not parse string to socket address: %s",
170
+ host.c_str());
171
+ GRPC_ERROR_UNREF(error);
172
+ return nullptr;
173
+ }
174
+ // Use kAny only if kSameIporLoopback and kExternal are empty
175
+ if (source_types_array[static_cast<int>(
176
+ XdsApi::LdsUpdate::FilterChainMap::
177
+ ConnectionSourceType::kSameIpOrLoopback)]
178
+ .empty() &&
179
+ source_types_array[static_cast<int>(XdsApi::LdsUpdate::FilterChainMap::
180
+ ConnectionSourceType::kExternal)]
181
+ .empty()) {
182
+ return FindFilterChainDataForSourceIp(
183
+ source_types_array[static_cast<int>(
184
+ XdsApi::LdsUpdate::FilterChainMap::ConnectionSourceType::kAny)],
185
+ &source_addr, port);
186
+ }
187
+ if (IsLoopbackIp(&source_addr) || host == destination_ip) {
188
+ return FindFilterChainDataForSourceIp(
189
+ source_types_array[static_cast<int>(
190
+ XdsApi::LdsUpdate::FilterChainMap::ConnectionSourceType::
191
+ kSameIpOrLoopback)],
192
+ &source_addr, port);
193
+ } else {
194
+ return FindFilterChainDataForSourceIp(
195
+ source_types_array[static_cast<int>(
196
+ XdsApi::LdsUpdate::FilterChainMap::ConnectionSourceType::
197
+ kExternal)],
198
+ &source_addr, port);
199
+ }
200
+ }
201
+
202
+ const XdsApi::LdsUpdate::FilterChainData* FindFilterChainDataForDestinationIp(
203
+ const XdsApi::LdsUpdate::FilterChainMap::DestinationIpVector
204
+ destination_ip_vector,
205
+ grpc_endpoint* tcp) {
206
+ auto destination_uri = URI::Parse(grpc_endpoint_get_local_address(tcp));
207
+ if (!destination_uri.ok() || (destination_uri->scheme() != "ipv4" &&
208
+ destination_uri->scheme() != "ipv6")) {
209
+ return nullptr;
210
+ }
211
+ std::string host;
212
+ std::string port;
213
+ if (!SplitHostPort(destination_uri->path(), &host, &port)) {
214
+ return nullptr;
215
+ }
216
+ grpc_resolved_address destination_addr;
217
+ grpc_error_handle error = grpc_string_to_sockaddr(
218
+ &destination_addr, host.c_str(), 0 /* port doesn't matter here */);
219
+ if (error != GRPC_ERROR_NONE) {
220
+ gpr_log(GPR_DEBUG, "Could not parse string to socket address: %s",
221
+ host.c_str());
222
+ GRPC_ERROR_UNREF(error);
223
+ return nullptr;
224
+ }
225
+ const XdsApi::LdsUpdate::FilterChainMap::DestinationIp* best_match = nullptr;
226
+ for (const auto& entry : destination_ip_vector) {
227
+ // Special case for catch-all
228
+ if (!entry.prefix_range.has_value()) {
229
+ if (best_match == nullptr) {
230
+ best_match = &entry;
231
+ }
232
+ continue;
233
+ }
234
+ if (best_match != nullptr && best_match->prefix_range.has_value() &&
235
+ best_match->prefix_range->prefix_len >=
236
+ entry.prefix_range->prefix_len) {
237
+ continue;
238
+ }
239
+ if (grpc_sockaddr_match_subnet(&destination_addr,
240
+ &entry.prefix_range->address,
241
+ entry.prefix_range->prefix_len)) {
242
+ best_match = &entry;
243
+ }
244
+ }
245
+ if (best_match == nullptr) return nullptr;
246
+ return FindFilterChainDataForSourceType(best_match->source_types_array, tcp,
247
+ host);
248
+ }
249
+
250
+ absl::StatusOr<RefCountedPtr<XdsCertificateProvider>>
251
+ FilterChainMatchManager::CreateOrGetXdsCertificateProviderFromFilterChainData(
252
+ const XdsApi::LdsUpdate::FilterChainData* filter_chain) {
253
+ MutexLock lock(&mu_);
254
+ auto it = certificate_providers_map_.find(filter_chain);
255
+ if (it != certificate_providers_map_.end()) {
256
+ return it->second.xds;
257
+ }
258
+ CertificateProviders certificate_providers;
259
+ // Configure root cert.
260
+ absl::string_view root_provider_instance_name =
261
+ filter_chain->downstream_tls_context.common_tls_context
262
+ .combined_validation_context
263
+ .validation_context_certificate_provider_instance.instance_name;
264
+ absl::string_view root_provider_cert_name =
265
+ filter_chain->downstream_tls_context.common_tls_context
266
+ .combined_validation_context
267
+ .validation_context_certificate_provider_instance.certificate_name;
268
+ if (!root_provider_instance_name.empty()) {
269
+ certificate_providers.root =
270
+ xds_client_->certificate_provider_store()
271
+ .CreateOrGetCertificateProvider(root_provider_instance_name);
272
+ if (certificate_providers.root == nullptr) {
273
+ return absl::NotFoundError(
274
+ absl::StrCat("Certificate provider instance name: \"",
275
+ root_provider_instance_name, "\" not recognized."));
276
+ }
277
+ }
278
+ // Configure identity cert.
279
+ absl::string_view identity_provider_instance_name =
280
+ filter_chain->downstream_tls_context.common_tls_context
281
+ .tls_certificate_certificate_provider_instance.instance_name;
282
+ absl::string_view identity_provider_cert_name =
283
+ filter_chain->downstream_tls_context.common_tls_context
284
+ .tls_certificate_certificate_provider_instance.certificate_name;
285
+ if (!identity_provider_instance_name.empty()) {
286
+ certificate_providers.instance =
287
+ xds_client_->certificate_provider_store()
288
+ .CreateOrGetCertificateProvider(identity_provider_instance_name);
289
+ if (certificate_providers.instance == nullptr) {
290
+ return absl::NotFoundError(
291
+ absl::StrCat("Certificate provider instance name: \"",
292
+ identity_provider_instance_name, "\" not recognized."));
293
+ }
294
+ }
295
+ certificate_providers.xds = MakeRefCounted<XdsCertificateProvider>();
296
+ certificate_providers.xds->UpdateRootCertNameAndDistributor(
297
+ "", root_provider_cert_name,
298
+ certificate_providers.root == nullptr
299
+ ? nullptr
300
+ : certificate_providers.root->distributor());
301
+ certificate_providers.xds->UpdateIdentityCertNameAndDistributor(
302
+ "", identity_provider_cert_name,
303
+ certificate_providers.instance == nullptr
304
+ ? nullptr
305
+ : certificate_providers.instance->distributor());
306
+ certificate_providers.xds->UpdateRequireClientCertificate(
307
+ "", filter_chain->downstream_tls_context.require_client_certificate);
308
+ auto xds_certificate_provider = certificate_providers.xds;
309
+ certificate_providers_map_.emplace(filter_chain,
310
+ std::move(certificate_providers));
311
+ return xds_certificate_provider;
312
+ }
313
+
314
+ absl::StatusOr<grpc_channel_args*>
315
+ FilterChainMatchManager::UpdateChannelArgsForConnection(grpc_channel_args* args,
316
+ grpc_endpoint* tcp) {
317
+ const auto* filter_chain = FindFilterChainDataForDestinationIp(
318
+ filter_chain_map_.destination_ip_vector, tcp);
319
+ if (filter_chain == nullptr && default_filter_chain_.has_value()) {
320
+ filter_chain = &default_filter_chain_.value();
321
+ }
322
+ if (filter_chain == nullptr) {
323
+ grpc_channel_args_destroy(args);
324
+ return absl::UnavailableError("No matching filter chain found");
325
+ }
326
+ // Nothing to update if credentials are not xDS.
327
+ grpc_server_credentials* server_creds =
328
+ grpc_find_server_credentials_in_args(args);
329
+ if (server_creds == nullptr || server_creds->type() != kCredentialsTypeXds) {
330
+ return args;
331
+ }
332
+ absl::StatusOr<RefCountedPtr<XdsCertificateProvider>> result =
333
+ CreateOrGetXdsCertificateProviderFromFilterChainData(filter_chain);
334
+ if (!result.ok()) {
335
+ grpc_channel_args_destroy(args);
336
+ return result.status();
337
+ }
338
+ RefCountedPtr<XdsCertificateProvider> xds_certificate_provider =
339
+ std::move(*result);
340
+ GPR_ASSERT(xds_certificate_provider != nullptr);
341
+ grpc_arg arg_to_add = xds_certificate_provider->MakeChannelArg();
342
+ grpc_channel_args* updated_args =
343
+ grpc_channel_args_copy_and_add(args, &arg_to_add, 1);
344
+ grpc_channel_args_destroy(args);
345
+ return updated_args;
346
+ }
347
+
35
348
  class XdsServerConfigFetcher : public grpc_server_config_fetcher {
36
349
  public:
37
- explicit XdsServerConfigFetcher(RefCountedPtr<XdsClient> xds_client)
38
- : xds_client_(std::move(xds_client)) {
350
+ explicit XdsServerConfigFetcher(RefCountedPtr<XdsClient> xds_client,
351
+ grpc_server_xds_status_notifier notifier)
352
+ : xds_client_(std::move(xds_client)), serving_status_notifier_(notifier) {
39
353
  GPR_ASSERT(xds_client_ != nullptr);
40
354
  }
41
355
 
@@ -44,11 +358,12 @@ class XdsServerConfigFetcher : public grpc_server_config_fetcher {
44
358
  watcher) override {
45
359
  grpc_server_config_fetcher::WatcherInterface* watcher_ptr = watcher.get();
46
360
  auto listener_watcher = absl::make_unique<ListenerWatcher>(
47
- std::move(watcher), args, xds_client_);
361
+ std::move(watcher), args, xds_client_, serving_status_notifier_,
362
+ listening_address);
48
363
  auto* listener_watcher_ptr = listener_watcher.get();
49
- // TODO(yashykt): Get the resource name id from bootstrap
50
- listening_address = absl::StrCat(
51
- "grpc/server?xds.resource.listening_address=", listening_address);
364
+ listening_address = absl::StrReplaceAll(
365
+ xds_client_->bootstrap().server_listener_resource_name_template(),
366
+ {{"%s", listening_address}});
52
367
  xds_client_->WatchListenerData(listening_address,
53
368
  std::move(listener_watcher));
54
369
  MutexLock lock(&mu_);
@@ -81,10 +396,14 @@ class XdsServerConfigFetcher : public grpc_server_config_fetcher {
81
396
  explicit ListenerWatcher(
82
397
  std::unique_ptr<grpc_server_config_fetcher::WatcherInterface>
83
398
  server_config_watcher,
84
- grpc_channel_args* args, RefCountedPtr<XdsClient> xds_client)
399
+ grpc_channel_args* args, RefCountedPtr<XdsClient> xds_client,
400
+ grpc_server_xds_status_notifier serving_status_notifier,
401
+ std::string listening_address)
85
402
  : server_config_watcher_(std::move(server_config_watcher)),
86
403
  args_(args),
87
- xds_client_(std::move(xds_client)) {}
404
+ xds_client_(std::move(xds_client)),
405
+ serving_status_notifier_(serving_status_notifier),
406
+ listening_address_(std::move(listening_address)) {}
88
407
 
89
408
  ~ListenerWatcher() override { grpc_channel_args_destroy(args_); }
90
409
 
@@ -100,140 +419,90 @@ class XdsServerConfigFetcher : public grpc_server_config_fetcher {
100
419
  "[ListenerWatcher %p] Received LDS update from xds client %p: %s",
101
420
  this, xds_client_.get(), listener.ToString().c_str());
102
421
  }
103
- grpc_error* error = GRPC_ERROR_NONE;
104
- bool update_needed = UpdateXdsCertificateProvider(listener, &error);
105
- if (error != GRPC_ERROR_NONE) {
106
- OnError(error);
422
+ if (listener.address != listening_address_) {
423
+ OnFatalError(absl::FailedPreconditionError(
424
+ "Address in LDS update does not match listening address"));
107
425
  return;
108
426
  }
109
- // Only send an update, if something changed.
110
- if (updated_once_ && !update_needed) {
111
- return;
427
+ if (filter_chain_match_manager_ == nullptr) {
428
+ if (serving_status_notifier_.on_serving_status_update != nullptr) {
429
+ serving_status_notifier_.on_serving_status_update(
430
+ serving_status_notifier_.user_data, listening_address_.c_str(),
431
+ GRPC_STATUS_OK, "");
432
+ } else {
433
+ gpr_log(GPR_INFO,
434
+ "xDS Listener resource obtained; will start serving on %s",
435
+ listening_address_.c_str());
436
+ }
112
437
  }
113
- updated_once_ = true;
114
- grpc_channel_args* updated_args = nullptr;
115
- if (xds_certificate_provider_ != nullptr) {
116
- grpc_arg arg_to_add = xds_certificate_provider_->MakeChannelArg();
117
- updated_args = grpc_channel_args_copy_and_add(args_, &arg_to_add, 1);
118
- } else {
119
- updated_args = grpc_channel_args_copy(args_);
438
+ if (filter_chain_match_manager_ == nullptr ||
439
+ !(listener.filter_chain_map ==
440
+ filter_chain_match_manager_->filter_chain_map() &&
441
+ listener.default_filter_chain ==
442
+ filter_chain_match_manager_->default_filter_chain())) {
443
+ filter_chain_match_manager_ = MakeRefCounted<FilterChainMatchManager>(
444
+ xds_client_, std::move(listener.filter_chain_map),
445
+ std::move(listener.default_filter_chain));
446
+ server_config_watcher_->UpdateConnectionManager(
447
+ filter_chain_match_manager_);
120
448
  }
121
- server_config_watcher_->UpdateConfig(updated_args);
122
449
  }
123
450
 
124
- void OnError(grpc_error* error) override {
125
- gpr_log(GPR_ERROR, "ListenerWatcher:%p XdsClient reports error: %s", this,
126
- grpc_error_string(error));
451
+ void OnError(grpc_error_handle error) override {
452
+ if (filter_chain_match_manager_ != nullptr) {
453
+ gpr_log(GPR_ERROR,
454
+ "ListenerWatcher:%p XdsClient reports error: %s for %s; "
455
+ "ignoring in favor of existing resource",
456
+ this, grpc_error_std_string(error).c_str(),
457
+ listening_address_.c_str());
458
+ } else {
459
+ if (serving_status_notifier_.on_serving_status_update != nullptr) {
460
+ serving_status_notifier_.on_serving_status_update(
461
+ serving_status_notifier_.user_data, listening_address_.c_str(),
462
+ GRPC_STATUS_UNAVAILABLE, grpc_error_std_string(error).c_str());
463
+ } else {
464
+ gpr_log(
465
+ GPR_ERROR,
466
+ "ListenerWatcher:%p error obtaining xDS Listener resource: %s; "
467
+ "not serving on %s",
468
+ this, grpc_error_std_string(error).c_str(),
469
+ listening_address_.c_str());
470
+ }
471
+ }
127
472
  GRPC_ERROR_UNREF(error);
128
- // TODO(yashykt): We might want to bubble this error to the application.
129
473
  }
130
474
 
131
- void OnResourceDoesNotExist() override {
132
- gpr_log(GPR_ERROR,
133
- "ListenerWatcher:%p XdsClient reports requested listener does "
134
- "not exist",
135
- this);
136
- // TODO(yashykt): We might want to bubble this error to the application.
137
- }
138
-
139
- private:
140
- // Returns true if the xds certificate provider changed in a way that
141
- // required a new security connector to be created, false otherwise.
142
- bool UpdateXdsCertificateProvider(const XdsApi::LdsUpdate& listener,
143
- grpc_error** error) {
144
- // Early out if channel is not configured to use xDS security.
145
- grpc_server_credentials* server_creds =
146
- grpc_find_server_credentials_in_args(args_);
147
- if (server_creds == nullptr ||
148
- server_creds->type() != kCredentialsTypeXds) {
149
- xds_certificate_provider_ = nullptr;
150
- return false;
151
- }
152
- if (xds_certificate_provider_ == nullptr) {
153
- xds_certificate_provider_ = MakeRefCounted<XdsCertificateProvider>();
475
+ void OnFatalError(absl::Status status) {
476
+ gpr_log(
477
+ GPR_ERROR,
478
+ "ListenerWatcher:%p Encountered fatal error %s; not serving on %s",
479
+ this, status.ToString().c_str(), listening_address_.c_str());
480
+ if (filter_chain_match_manager_ != nullptr) {
481
+ // The server has started listening already, so we need to gracefully
482
+ // stop serving.
483
+ server_config_watcher_->StopServing();
484
+ filter_chain_match_manager_.reset();
154
485
  }
155
- // Configure root cert.
156
- absl::string_view root_provider_instance_name =
157
- listener.downstream_tls_context.common_tls_context
158
- .combined_validation_context
159
- .validation_context_certificate_provider_instance.instance_name;
160
- absl::string_view root_provider_cert_name =
161
- listener.downstream_tls_context.common_tls_context
162
- .combined_validation_context
163
- .validation_context_certificate_provider_instance
164
- .certificate_name;
165
- RefCountedPtr<grpc_tls_certificate_provider> new_root_provider;
166
- if (!root_provider_instance_name.empty()) {
167
- new_root_provider =
168
- xds_client_->certificate_provider_store()
169
- .CreateOrGetCertificateProvider(root_provider_instance_name);
170
- if (new_root_provider == nullptr) {
171
- *error = GRPC_ERROR_CREATE_FROM_COPIED_STRING(
172
- absl::StrCat("Certificate provider instance name: \"",
173
- root_provider_instance_name, "\" not recognized.")
174
- .c_str());
175
- return false;
176
- }
486
+ if (serving_status_notifier_.on_serving_status_update != nullptr) {
487
+ serving_status_notifier_.on_serving_status_update(
488
+ serving_status_notifier_.user_data, listening_address_.c_str(),
489
+ static_cast<grpc_status_code>(status.raw_code()),
490
+ std::string(status.message()).c_str());
177
491
  }
178
- // Configure identity cert.
179
- absl::string_view identity_provider_instance_name =
180
- listener.downstream_tls_context.common_tls_context
181
- .tls_certificate_certificate_provider_instance.instance_name;
182
- absl::string_view identity_provider_cert_name =
183
- listener.downstream_tls_context.common_tls_context
184
- .tls_certificate_certificate_provider_instance.certificate_name;
185
- RefCountedPtr<grpc_tls_certificate_provider> new_identity_provider;
186
- if (!identity_provider_instance_name.empty()) {
187
- new_identity_provider = xds_client_->certificate_provider_store()
188
- .CreateOrGetCertificateProvider(
189
- identity_provider_instance_name);
190
- if (new_identity_provider == nullptr) {
191
- *error = GRPC_ERROR_CREATE_FROM_COPIED_STRING(
192
- absl::StrCat("Certificate provider instance name: \"",
193
- identity_provider_instance_name,
194
- "\" not recognized.")
195
- .c_str());
196
- return false;
197
- }
198
- }
199
- bool security_connector_update_required = false;
200
- if (((new_root_provider == nullptr) !=
201
- (root_certificate_provider_ == nullptr)) ||
202
- ((new_identity_provider == nullptr) !=
203
- (identity_certificate_provider_ == nullptr)) ||
204
- (listener.downstream_tls_context.require_client_certificate !=
205
- xds_certificate_provider_->GetRequireClientCertificate(""))) {
206
- security_connector_update_required = true;
207
- }
208
- if (root_certificate_provider_ != new_root_provider) {
209
- root_certificate_provider_ = std::move(new_root_provider);
210
- }
211
- if (identity_certificate_provider_ != new_identity_provider) {
212
- identity_certificate_provider_ = std::move(new_identity_provider);
213
- }
214
- xds_certificate_provider_->UpdateRootCertNameAndDistributor(
215
- "", root_provider_cert_name,
216
- root_certificate_provider_ == nullptr
217
- ? nullptr
218
- : root_certificate_provider_->distributor());
219
- xds_certificate_provider_->UpdateIdentityCertNameAndDistributor(
220
- "", identity_provider_cert_name,
221
- identity_certificate_provider_ == nullptr
222
- ? nullptr
223
- : identity_certificate_provider_->distributor());
224
- xds_certificate_provider_->UpdateRequireClientCertificate(
225
- "", listener.downstream_tls_context.require_client_certificate);
226
- return security_connector_update_required;
227
492
  }
228
493
 
494
+ void OnResourceDoesNotExist() override {
495
+ OnFatalError(absl::NotFoundError("Requested listener does not exist"));
496
+ }
497
+
498
+ private:
229
499
  std::unique_ptr<grpc_server_config_fetcher::WatcherInterface>
230
500
  server_config_watcher_;
231
501
  grpc_channel_args* args_;
232
502
  RefCountedPtr<XdsClient> xds_client_;
233
- RefCountedPtr<grpc_tls_certificate_provider> root_certificate_provider_;
234
- RefCountedPtr<grpc_tls_certificate_provider> identity_certificate_provider_;
235
- RefCountedPtr<XdsCertificateProvider> xds_certificate_provider_;
236
- bool updated_once_ = false;
503
+ grpc_server_xds_status_notifier serving_status_notifier_;
504
+ std::string listening_address_;
505
+ RefCountedPtr<FilterChainMatchManager> filter_chain_match_manager_;
237
506
  };
238
507
 
239
508
  struct WatcherState {
@@ -242,26 +511,36 @@ class XdsServerConfigFetcher : public grpc_server_config_fetcher {
242
511
  };
243
512
 
244
513
  RefCountedPtr<XdsClient> xds_client_;
514
+ grpc_server_xds_status_notifier serving_status_notifier_;
245
515
  Mutex mu_;
246
516
  std::map<grpc_server_config_fetcher::WatcherInterface*, WatcherState>
247
- watchers_;
517
+ watchers_ ABSL_GUARDED_BY(mu_);
248
518
  };
249
519
 
250
520
  } // namespace
251
521
  } // namespace grpc_core
252
522
 
253
- grpc_server_config_fetcher* grpc_server_config_fetcher_xds_create() {
523
+ grpc_server_config_fetcher* grpc_server_config_fetcher_xds_create(
524
+ grpc_server_xds_status_notifier notifier, const grpc_channel_args* args) {
254
525
  grpc_core::ApplicationCallbackExecCtx callback_exec_ctx;
255
526
  grpc_core::ExecCtx exec_ctx;
256
527
  GRPC_API_TRACE("grpc_server_config_fetcher_xds_create()", 0, ());
257
- grpc_error* error = GRPC_ERROR_NONE;
528
+ grpc_error_handle error = GRPC_ERROR_NONE;
258
529
  grpc_core::RefCountedPtr<grpc_core::XdsClient> xds_client =
259
- grpc_core::XdsClient::GetOrCreate(&error);
530
+ grpc_core::XdsClient::GetOrCreate(args, &error);
260
531
  if (error != GRPC_ERROR_NONE) {
261
532
  gpr_log(GPR_ERROR, "Failed to create xds client: %s",
262
- grpc_error_string(error));
533
+ grpc_error_std_string(error).c_str());
263
534
  GRPC_ERROR_UNREF(error);
264
535
  return nullptr;
265
536
  }
266
- return new grpc_core::XdsServerConfigFetcher(std::move(xds_client));
537
+ if (xds_client->bootstrap()
538
+ .server_listener_resource_name_template()
539
+ .empty()) {
540
+ gpr_log(GPR_ERROR,
541
+ "server_listener_resource_name_template not provided in bootstrap "
542
+ "file.");
543
+ return nullptr;
544
+ }
545
+ return new grpc_core::XdsServerConfigFetcher(std::move(xds_client), notifier);
267
546
  }