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.
- checksums.yaml +4 -4
- data/Makefile +126 -92
- data/include/grpc/event_engine/README.md +38 -0
- data/include/grpc/event_engine/channel_args.h +28 -0
- data/include/grpc/event_engine/event_engine.h +336 -0
- data/include/grpc/event_engine/port.h +39 -0
- data/include/grpc/event_engine/slice_allocator.h +81 -0
- data/include/grpc/grpc.h +15 -1
- data/include/grpc/grpc_security_constants.h +14 -0
- data/include/grpc/impl/codegen/grpc_types.h +11 -0
- data/include/grpc/impl/codegen/port_platform.h +7 -0
- data/include/grpc/module.modulemap +14 -14
- data/src/core/ext/filters/client_channel/backup_poller.cc +3 -3
- data/src/core/ext/filters/client_channel/channel_connectivity.cc +177 -202
- data/src/core/ext/filters/client_channel/client_channel.cc +715 -3166
- data/src/core/ext/filters/client_channel/client_channel.h +489 -55
- data/src/core/ext/filters/client_channel/client_channel_channelz.h +1 -1
- data/src/core/ext/filters/client_channel/client_channel_factory.h +2 -1
- data/src/core/ext/filters/client_channel/client_channel_plugin.cc +4 -1
- data/src/core/ext/filters/client_channel/config_selector.h +9 -1
- data/src/core/ext/filters/client_channel/connector.h +1 -1
- data/src/core/ext/filters/client_channel/dynamic_filters.cc +18 -14
- data/src/core/ext/filters/client_channel/dynamic_filters.h +3 -3
- data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +24 -142
- data/src/core/ext/filters/client_channel/global_subchannel_pool.h +15 -10
- data/src/core/ext/filters/client_channel/health/health_check_client.cc +26 -27
- data/src/core/ext/filters/client_channel/health/health_check_client.h +27 -26
- data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +24 -21
- data/src/core/ext/filters/client_channel/lb_policy.cc +4 -1
- data/src/core/ext/filters/client_channel/lb_policy.h +4 -4
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +6 -6
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +46 -43
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +2 -1
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +5 -5
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +14 -12
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +23 -0
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +27 -0
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +4 -4
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +15 -15
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +36 -30
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +29 -44
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +32 -47
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +86 -63
- data/src/core/ext/filters/client_channel/lb_policy_factory.h +1 -1
- data/src/core/ext/filters/client_channel/lb_policy_registry.cc +4 -4
- data/src/core/ext/filters/client_channel/lb_policy_registry.h +1 -1
- data/src/core/ext/filters/client_channel/local_subchannel_pool.cc +27 -67
- data/src/core/ext/filters/client_channel/local_subchannel_pool.h +10 -9
- data/src/core/ext/filters/client_channel/resolver.cc +3 -0
- data/src/core/ext/filters/client_channel/resolver.h +2 -2
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +23 -15
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +1 -1
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +3 -3
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +4 -4
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +17 -15
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +38 -33
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +1 -1
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_libuv.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +17 -9
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +20 -28
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +7 -5
- data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +31 -14
- data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +334 -114
- data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +32 -239
- data/src/core/ext/filters/client_channel/resolver_result_parsing.h +20 -49
- data/src/core/ext/filters/client_channel/retry_filter.cc +2188 -0
- data/src/core/ext/filters/client_channel/retry_filter.h +30 -0
- data/src/core/ext/filters/client_channel/retry_service_config.cc +287 -0
- data/src/core/ext/filters/client_channel/retry_service_config.h +90 -0
- data/src/core/ext/filters/client_channel/server_address.cc +4 -1
- data/src/core/ext/filters/client_channel/service_config.cc +15 -14
- data/src/core/ext/filters/client_channel/service_config.h +7 -6
- data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +5 -4
- data/src/core/ext/filters/client_channel/service_config_parser.cc +6 -6
- data/src/core/ext/filters/client_channel/service_config_parser.h +7 -4
- data/src/core/ext/filters/client_channel/subchannel.cc +86 -162
- data/src/core/ext/filters/client_channel/subchannel.h +68 -99
- data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +16 -2
- data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +10 -8
- data/src/core/ext/filters/client_idle/client_idle_filter.cc +17 -16
- data/src/core/ext/filters/deadline/deadline_filter.cc +10 -10
- data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +501 -0
- data/src/core/ext/filters/fault_injection/fault_injection_filter.h +39 -0
- data/src/core/ext/filters/fault_injection/service_config_parser.cc +189 -0
- data/src/core/ext/filters/fault_injection/service_config_parser.h +85 -0
- data/src/core/ext/filters/http/client/http_client_filter.cc +28 -21
- data/src/core/ext/filters/http/client_authority_filter.cc +3 -3
- data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +23 -22
- data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +21 -21
- data/src/core/ext/filters/http/server/http_server_filter.cc +27 -23
- data/src/core/ext/filters/max_age/max_age_filter.cc +12 -10
- data/src/core/ext/filters/message_size/message_size_filter.cc +14 -11
- data/src/core/ext/filters/message_size/message_size_filter.h +1 -1
- data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +5 -4
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +8 -8
- data/src/core/ext/transport/chttp2/client/chttp2_connector.h +7 -7
- data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +5 -4
- data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc +2 -2
- data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +6 -5
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +485 -199
- data/src/core/ext/transport/chttp2/server/chttp2_server.h +2 -2
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +3 -4
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +3 -3
- data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +3 -4
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +167 -122
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +12 -1
- data/src/core/ext/transport/chttp2/transport/context_list.cc +4 -5
- data/src/core/ext/transport/chttp2/transport/context_list.h +4 -4
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +3 -3
- data/src/core/ext/transport/chttp2/transport/flow_control.h +8 -8
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +13 -9
- data/src/core/ext/transport/chttp2/transport/frame_data.h +10 -10
- data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +7 -8
- data/src/core/ext/transport/chttp2/transport/frame_goaway.h +6 -6
- data/src/core/ext/transport/chttp2/transport/frame_ping.cc +7 -8
- data/src/core/ext/transport/chttp2/transport/frame_ping.h +7 -6
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +7 -7
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +6 -6
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +6 -5
- data/src/core/ext/transport/chttp2/transport/frame_settings.h +6 -6
- data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +4 -6
- data/src/core/ext/transport/chttp2/transport/frame_window_update.h +4 -6
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +1 -1
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +237 -208
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +10 -10
- data/src/core/ext/transport/chttp2/transport/hpack_table.cc +4 -3
- data/src/core/ext/transport/chttp2/transport/hpack_table.h +4 -4
- data/src/core/ext/transport/chttp2/transport/incoming_metadata.cc +2 -2
- data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +2 -2
- data/src/core/ext/transport/chttp2/transport/internal.h +32 -27
- data/src/core/ext/transport/chttp2/transport/parsing.cc +63 -56
- data/src/core/ext/transport/chttp2/transport/writing.cc +7 -3
- data/src/core/ext/transport/inproc/inproc_transport.cc +30 -29
- data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.c +406 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.h +1459 -0
- data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.c +350 -0
- data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +1348 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +6 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +25 -0
- data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.c +144 -0
- data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.h +488 -0
- data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.c +141 -0
- data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.h +452 -0
- data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +15 -0
- data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +44 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.c +79 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.h +268 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c +78 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.h +281 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c +41 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h +113 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +6 -5
- data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +13 -9
- data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.c +93 -0
- data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.h +323 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.c +36 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.h +90 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.c +46 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.h +124 -0
- data/src/core/ext/upb-generated/udpa/type/v1/typed_struct.upb.c +33 -0
- data/src/core/ext/upb-generated/udpa/type/v1/typed_struct.upb.h +77 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.c +354 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.h +140 -0
- data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.c +383 -0
- data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.h +115 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +10 -7
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/stats.upbdefs.c +141 -0
- data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/stats.upbdefs.h +70 -0
- data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.c +141 -0
- data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.h +70 -0
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +13 -7
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/common/fault/v3/fault.upbdefs.c +102 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/common/fault/v3/fault.upbdefs.h +55 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.c +120 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.h +45 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.c +76 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +21 -20
- data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.c +130 -0
- data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.h +50 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/node.upbdefs.c +56 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/node.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/struct.upbdefs.c +63 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/struct.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/udpa/type/v1/typed_struct.upbdefs.c +44 -0
- data/src/core/ext/upbdefs-generated/udpa/type/v1/typed_struct.upbdefs.h +35 -0
- data/src/core/ext/xds/certificate_provider_factory.h +1 -1
- data/src/core/ext/xds/certificate_provider_store.h +3 -3
- data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +3 -3
- data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +2 -2
- data/src/core/ext/xds/xds_api.cc +1649 -329
- data/src/core/ext/xds/xds_api.h +284 -44
- data/src/core/ext/xds/xds_bootstrap.cc +110 -156
- data/src/core/ext/xds/xds_bootstrap.h +24 -25
- data/src/core/ext/xds/xds_certificate_provider.cc +4 -4
- data/src/core/ext/xds/xds_certificate_provider.h +4 -4
- data/src/core/ext/xds/xds_channel_args.h +5 -2
- data/src/core/ext/xds/xds_client.cc +454 -177
- data/src/core/ext/xds/xds_client.h +62 -22
- data/src/core/ext/xds/xds_client_stats.h +5 -4
- data/src/core/ext/xds/xds_http_fault_filter.cc +226 -0
- data/src/core/ext/xds/xds_http_fault_filter.h +63 -0
- data/src/core/ext/xds/xds_http_filters.cc +114 -0
- data/src/core/ext/xds/xds_http_filters.h +130 -0
- data/src/core/ext/xds/xds_server_config_fetcher.cc +410 -131
- data/src/core/lib/{iomgr → address_utils}/parse_address.cc +17 -17
- data/src/core/lib/{iomgr → address_utils}/parse_address.h +7 -7
- data/src/core/lib/{iomgr → address_utils}/sockaddr_utils.cc +107 -4
- data/src/core/lib/{iomgr → address_utils}/sockaddr_utils.h +26 -6
- data/src/core/lib/channel/channel_stack.cc +22 -9
- data/src/core/lib/channel/channel_stack.h +17 -9
- data/src/core/lib/channel/channel_stack_builder.cc +2 -2
- data/src/core/lib/channel/channel_stack_builder.h +1 -1
- data/src/core/lib/channel/channelz.cc +108 -12
- data/src/core/lib/channel/channelz.h +30 -1
- data/src/core/lib/channel/channelz_registry.cc +14 -0
- data/src/core/lib/channel/connected_channel.cc +4 -4
- data/src/core/lib/channel/handshaker.cc +7 -45
- data/src/core/lib/channel/handshaker.h +5 -22
- data/src/core/lib/channel/status_util.cc +12 -2
- data/src/core/lib/channel/status_util.h +5 -0
- data/src/core/lib/event_engine/slice_allocator.cc +59 -0
- data/src/core/lib/event_engine/sockaddr.cc +38 -0
- data/src/core/lib/gpr/sync_abseil.cc +3 -6
- data/src/core/lib/gpr/sync_windows.cc +2 -2
- data/src/core/lib/gprpp/atomic.h +3 -3
- data/src/core/lib/gprpp/dual_ref_counted.h +3 -3
- data/src/core/lib/gprpp/ref_counted.h +28 -14
- data/src/core/lib/gprpp/ref_counted_ptr.h +2 -0
- data/src/core/lib/gprpp/status_helper.cc +407 -0
- data/src/core/lib/gprpp/status_helper.h +180 -0
- data/src/core/lib/gprpp/thd.h +1 -1
- data/src/core/lib/http/httpcli.cc +11 -11
- data/src/core/lib/http/httpcli_security_connector.cc +11 -7
- data/src/core/lib/http/parser.cc +16 -16
- data/src/core/lib/http/parser.h +4 -4
- data/src/core/lib/iomgr/buffer_list.cc +7 -9
- data/src/core/lib/iomgr/buffer_list.h +5 -6
- data/src/core/lib/iomgr/call_combiner.cc +15 -12
- data/src/core/lib/iomgr/call_combiner.h +12 -14
- data/src/core/lib/iomgr/cfstream_handle.cc +5 -5
- data/src/core/lib/iomgr/cfstream_handle.h +1 -1
- data/src/core/lib/iomgr/closure.h +7 -6
- data/src/core/lib/iomgr/combiner.cc +14 -12
- data/src/core/lib/iomgr/combiner.h +2 -2
- data/src/core/lib/iomgr/endpoint.cc +1 -1
- data/src/core/lib/iomgr/endpoint.h +2 -2
- data/src/core/lib/iomgr/endpoint_cfstream.cc +11 -13
- data/src/core/lib/iomgr/endpoint_pair_windows.cc +1 -1
- data/src/core/lib/iomgr/error.cc +167 -61
- data/src/core/lib/iomgr/error.h +218 -107
- data/src/core/lib/iomgr/error_cfstream.cc +3 -2
- data/src/core/lib/iomgr/error_cfstream.h +2 -2
- data/src/core/lib/iomgr/error_internal.h +5 -1
- data/src/core/lib/iomgr/ev_apple.cc +6 -6
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +22 -22
- data/src/core/lib/iomgr/ev_epollex_linux.cc +48 -45
- data/src/core/lib/iomgr/ev_poll_posix.cc +26 -23
- data/src/core/lib/iomgr/ev_posix.cc +12 -11
- data/src/core/lib/iomgr/ev_posix.h +9 -9
- data/src/core/lib/iomgr/exec_ctx.cc +10 -6
- data/src/core/lib/iomgr/exec_ctx.h +1 -1
- data/src/core/lib/iomgr/executor.cc +8 -8
- data/src/core/lib/iomgr/executor.h +2 -2
- data/src/core/lib/iomgr/iomgr.cc +1 -1
- data/src/core/lib/iomgr/iomgr.h +1 -1
- data/src/core/lib/iomgr/iomgr_custom.cc +1 -1
- data/src/core/lib/iomgr/iomgr_internal.cc +2 -2
- data/src/core/lib/iomgr/iomgr_internal.h +3 -3
- data/src/core/lib/iomgr/iomgr_posix.cc +1 -1
- data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +2 -2
- data/src/core/lib/iomgr/iomgr_windows.cc +1 -1
- data/src/core/lib/iomgr/load_file.cc +4 -4
- data/src/core/lib/iomgr/load_file.h +2 -2
- data/src/core/lib/iomgr/lockfree_event.cc +5 -5
- data/src/core/lib/iomgr/lockfree_event.h +1 -1
- data/src/core/lib/iomgr/pollset.cc +5 -5
- data/src/core/lib/iomgr/pollset.h +9 -9
- data/src/core/lib/iomgr/pollset_custom.cc +5 -5
- data/src/core/lib/iomgr/pollset_windows.cc +5 -5
- data/src/core/lib/iomgr/port.h +1 -1
- data/src/core/lib/iomgr/python_util.h +1 -1
- data/src/core/lib/iomgr/resolve_address.cc +3 -3
- data/src/core/lib/iomgr/resolve_address.h +6 -6
- data/src/core/lib/iomgr/resolve_address_custom.cc +10 -9
- data/src/core/lib/iomgr/resolve_address_custom.h +3 -3
- data/src/core/lib/iomgr/resolve_address_posix.cc +3 -3
- data/src/core/lib/iomgr/resolve_address_windows.cc +4 -4
- data/src/core/lib/iomgr/resource_quota.cc +12 -11
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +22 -20
- data/src/core/lib/iomgr/socket_utils_posix.h +20 -20
- data/src/core/lib/iomgr/tcp_client_cfstream.cc +4 -4
- data/src/core/lib/iomgr/tcp_client_custom.cc +5 -6
- data/src/core/lib/iomgr/tcp_client_posix.cc +15 -17
- data/src/core/lib/iomgr/tcp_client_posix.h +3 -4
- data/src/core/lib/iomgr/tcp_client_windows.cc +5 -5
- data/src/core/lib/iomgr/tcp_custom.cc +14 -16
- data/src/core/lib/iomgr/tcp_custom.h +13 -12
- data/src/core/lib/iomgr/tcp_posix.cc +37 -38
- data/src/core/lib/iomgr/tcp_server.cc +6 -6
- data/src/core/lib/iomgr/tcp_server.h +12 -11
- data/src/core/lib/iomgr/tcp_server_custom.cc +23 -21
- data/src/core/lib/iomgr/tcp_server_posix.cc +22 -21
- data/src/core/lib/iomgr/tcp_server_utils_posix.h +13 -12
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +19 -17
- data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +9 -9
- data/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc +4 -4
- data/src/core/lib/iomgr/tcp_server_windows.cc +26 -25
- data/src/core/lib/iomgr/tcp_uv.cc +27 -25
- data/src/core/lib/iomgr/tcp_windows.cc +13 -13
- data/src/core/lib/iomgr/tcp_windows.h +2 -2
- data/src/core/lib/iomgr/timer_custom.cc +2 -1
- data/src/core/lib/iomgr/timer_custom.h +1 -1
- data/src/core/lib/iomgr/timer_generic.cc +8 -8
- data/src/core/lib/iomgr/timer_manager.cc +1 -1
- data/src/core/lib/iomgr/udp_server.cc +21 -20
- data/src/core/lib/iomgr/unix_sockets_posix.cc +3 -3
- data/src/core/lib/iomgr/unix_sockets_posix.h +2 -2
- data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +10 -7
- data/src/core/lib/iomgr/wakeup_fd_eventfd.cc +3 -3
- data/src/core/lib/iomgr/wakeup_fd_nospecial.cc +1 -1
- data/src/core/lib/iomgr/wakeup_fd_pipe.cc +4 -4
- data/src/core/lib/iomgr/wakeup_fd_posix.cc +3 -3
- data/src/core/lib/iomgr/wakeup_fd_posix.h +8 -6
- data/src/core/lib/iomgr/work_serializer.h +17 -1
- data/src/core/lib/json/json.h +1 -1
- data/src/core/lib/json/json_reader.cc +4 -4
- data/src/core/lib/{security/authorization → matchers}/matchers.cc +47 -47
- data/src/core/lib/{security/authorization → matchers}/matchers.h +42 -40
- data/src/core/lib/security/credentials/composite/composite_credentials.cc +4 -4
- data/src/core/lib/security/credentials/composite/composite_credentials.h +2 -2
- data/src/core/lib/security/credentials/credentials.h +2 -2
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +17 -13
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +13 -11
- data/src/core/lib/security/credentials/external/aws_request_signer.cc +2 -1
- data/src/core/lib/security/credentials/external/aws_request_signer.h +1 -1
- data/src/core/lib/security/credentials/external/external_account_credentials.cc +15 -12
- data/src/core/lib/security/credentials/external/external_account_credentials.h +9 -8
- data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +5 -4
- data/src/core/lib/security/credentials/external/file_external_account_credentials.h +4 -3
- data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +8 -8
- data/src/core/lib/security/credentials/external/url_external_account_credentials.h +9 -7
- data/src/core/lib/security/credentials/fake/fake_credentials.cc +2 -2
- data/src/core/lib/security/credentials/fake/fake_credentials.h +2 -2
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +9 -9
- data/src/core/lib/security/credentials/iam/iam_credentials.cc +2 -2
- data/src/core/lib/security/credentials/iam/iam_credentials.h +2 -2
- data/src/core/lib/security/credentials/jwt/json_token.cc +2 -2
- data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +3 -3
- data/src/core/lib/security/credentials/jwt/jwt_credentials.h +2 -2
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +7 -5
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +21 -19
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +5 -5
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +5 -5
- data/src/core/lib/security/credentials/plugin/plugin_credentials.h +2 -2
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +8 -7
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +9 -9
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +19 -13
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +4 -0
- data/src/core/lib/security/credentials/xds/xds_credentials.cc +3 -3
- data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +13 -3
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +13 -3
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +2 -2
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +12 -2
- data/src/core/lib/security/security_connector/load_system_roots_linux.cc +1 -1
- data/src/core/lib/security/security_connector/local/local_security_connector.cc +14 -4
- data/src/core/lib/security/security_connector/security_connector.h +9 -4
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +16 -6
- data/src/core/lib/security/security_connector/ssl_utils.cc +28 -8
- data/src/core/lib/security/security_connector/ssl_utils.h +4 -4
- data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +62 -60
- data/src/core/lib/security/security_connector/tls/tls_security_connector.h +66 -48
- data/src/core/lib/security/transport/client_auth_filter.cc +18 -10
- data/src/core/lib/security/transport/secure_endpoint.cc +4 -4
- data/src/core/lib/security/transport/security_handshaker.cc +65 -34
- data/src/core/lib/security/transport/server_auth_filter.cc +24 -11
- data/src/core/lib/security/transport/tsi_error.cc +2 -1
- data/src/core/lib/security/transport/tsi_error.h +2 -1
- data/src/core/lib/security/util/json_util.cc +2 -2
- data/src/core/lib/security/util/json_util.h +1 -1
- data/src/core/lib/slice/slice_intern.cc +6 -7
- data/src/core/lib/surface/call.cc +46 -45
- data/src/core/lib/surface/call.h +2 -2
- data/src/core/lib/surface/channel.cc +6 -6
- data/src/core/lib/surface/channel.h +6 -5
- data/src/core/lib/surface/channel_ping.cc +1 -1
- data/src/core/lib/surface/completion_queue.cc +46 -47
- data/src/core/lib/surface/completion_queue.h +2 -1
- data/src/core/lib/surface/lame_client.cc +43 -24
- data/src/core/lib/surface/lame_client.h +4 -3
- data/src/core/lib/surface/server.cc +68 -55
- data/src/core/lib/surface/server.h +89 -29
- data/src/core/lib/surface/validate_metadata.cc +7 -7
- data/src/core/lib/surface/validate_metadata.h +3 -2
- data/src/core/lib/surface/version.cc +4 -2
- data/src/core/lib/transport/byte_stream.cc +5 -5
- data/src/core/lib/transport/byte_stream.h +8 -8
- data/src/core/lib/transport/connectivity_state.cc +1 -1
- data/src/core/lib/transport/error_utils.cc +19 -8
- data/src/core/lib/transport/error_utils.h +11 -5
- data/src/core/lib/transport/metadata_batch.cc +64 -37
- data/src/core/lib/transport/metadata_batch.h +33 -18
- data/src/core/lib/transport/transport.cc +4 -3
- data/src/core/lib/transport/transport.h +4 -4
- data/src/core/lib/transport/transport_op_string.cc +5 -5
- data/src/core/plugin_registry/grpc_plugin_registry.cc +6 -0
- data/src/core/tsi/alts/crypt/gsec.h +4 -0
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +6 -8
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +7 -6
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +1 -1
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +2 -1
- data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +1 -3
- data/src/core/tsi/fake_transport_security.cc +10 -1
- data/src/core/tsi/ssl_transport_security.cc +32 -14
- data/src/core/tsi/ssl_transport_security.h +3 -4
- data/src/ruby/bin/math_services_pb.rb +1 -1
- data/src/ruby/ext/grpc/extconf.rb +9 -1
- data/src/ruby/ext/grpc/rb_channel.c +10 -1
- data/src/ruby/ext/grpc/rb_channel_credentials.c +11 -1
- data/src/ruby/ext/grpc/rb_channel_credentials.h +4 -0
- data/src/ruby/ext/grpc/rb_compression_options.c +1 -1
- data/src/ruby/ext/grpc/rb_enable_cpp.cc +1 -1
- data/src/ruby/ext/grpc/rb_grpc.c +4 -0
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +2 -0
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +4 -1
- data/src/ruby/ext/grpc/rb_server.c +13 -1
- data/src/ruby/ext/grpc/rb_server_credentials.c +19 -3
- data/src/ruby/ext/grpc/rb_server_credentials.h +4 -0
- data/src/ruby/ext/grpc/rb_xds_channel_credentials.c +215 -0
- data/src/ruby/ext/grpc/rb_xds_channel_credentials.h +35 -0
- data/src/ruby/ext/grpc/rb_xds_server_credentials.c +169 -0
- data/src/ruby/ext/grpc/rb_xds_server_credentials.h +35 -0
- data/src/ruby/lib/grpc/generic/client_stub.rb +4 -2
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/pb/grpc/health/v1/health_services_pb.rb +1 -1
- data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +6 -6
- data/src/ruby/spec/call_spec.rb +1 -1
- data/src/ruby/spec/channel_credentials_spec.rb +32 -0
- data/src/ruby/spec/channel_spec.rb +17 -6
- data/src/ruby/spec/client_auth_spec.rb +27 -1
- data/src/ruby/spec/errors_spec.rb +1 -1
- data/src/ruby/spec/generic/active_call_spec.rb +2 -2
- data/src/ruby/spec/generic/client_stub_spec.rb +4 -4
- data/src/ruby/spec/generic/rpc_server_spec.rb +1 -1
- data/src/ruby/spec/server_credentials_spec.rb +25 -0
- data/src/ruby/spec/server_spec.rb +22 -0
- data/third_party/abseil-cpp/absl/algorithm/container.h +3 -3
- data/third_party/abseil-cpp/absl/base/attributes.h +24 -4
- data/third_party/abseil-cpp/absl/base/call_once.h +2 -9
- data/third_party/abseil-cpp/absl/base/config.h +37 -9
- data/third_party/abseil-cpp/absl/base/dynamic_annotations.h +24 -10
- data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +4 -1
- data/third_party/abseil-cpp/absl/base/internal/endian.h +61 -0
- data/third_party/abseil-cpp/absl/base/internal/low_level_scheduling.h +2 -3
- data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +34 -32
- data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +16 -6
- data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +11 -2
- data/third_party/abseil-cpp/absl/base/internal/spinlock.h +14 -5
- data/third_party/abseil-cpp/absl/base/internal/spinlock_akaros.inc +2 -2
- data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +3 -3
- data/third_party/abseil-cpp/absl/base/internal/spinlock_posix.inc +2 -2
- data/third_party/abseil-cpp/absl/base/internal/spinlock_wait.h +11 -11
- data/third_party/abseil-cpp/absl/base/internal/spinlock_win32.inc +5 -5
- data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +1 -1
- data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +5 -2
- data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +43 -42
- data/third_party/abseil-cpp/absl/base/internal/throw_delegate.cc +111 -7
- data/third_party/abseil-cpp/absl/base/internal/unaligned_access.h +0 -76
- data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +1 -3
- data/third_party/abseil-cpp/absl/base/log_severity.h +4 -4
- data/third_party/abseil-cpp/absl/base/macros.h +11 -0
- data/third_party/abseil-cpp/absl/base/optimization.h +10 -7
- data/third_party/abseil-cpp/absl/base/options.h +1 -1
- data/third_party/abseil-cpp/absl/base/port.h +0 -1
- data/third_party/abseil-cpp/absl/base/thread_annotations.h +1 -1
- data/third_party/abseil-cpp/absl/container/fixed_array.h +2 -2
- data/third_party/abseil-cpp/absl/container/inlined_vector.h +5 -3
- data/third_party/abseil-cpp/absl/container/internal/compressed_tuple.h +1 -1
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +5 -1
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +2 -1
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler_force_weak_definition.cc +2 -1
- data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +141 -66
- data/third_party/abseil-cpp/absl/container/internal/layout.h +4 -4
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +14 -1
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +136 -136
- data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +16 -12
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +5 -2
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +3 -12
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +6 -1
- data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +3 -5
- data/third_party/abseil-cpp/absl/debugging/symbolize_darwin.inc +2 -2
- data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +2 -2
- data/third_party/abseil-cpp/absl/hash/internal/city.cc +15 -12
- data/third_party/abseil-cpp/absl/hash/internal/city.h +1 -19
- data/third_party/abseil-cpp/absl/hash/internal/hash.cc +25 -10
- data/third_party/abseil-cpp/absl/hash/internal/hash.h +86 -37
- data/third_party/abseil-cpp/absl/hash/internal/wyhash.cc +111 -0
- data/third_party/abseil-cpp/absl/hash/internal/wyhash.h +48 -0
- data/third_party/abseil-cpp/absl/meta/type_traits.h +16 -2
- data/third_party/abseil-cpp/absl/numeric/bits.h +177 -0
- data/third_party/abseil-cpp/absl/numeric/int128.cc +3 -3
- data/third_party/abseil-cpp/absl/numeric/internal/bits.h +358 -0
- data/third_party/abseil-cpp/absl/numeric/internal/representation.h +55 -0
- data/third_party/abseil-cpp/absl/status/internal/status_internal.h +18 -0
- data/third_party/abseil-cpp/absl/status/internal/statusor_internal.h +4 -7
- data/third_party/abseil-cpp/absl/status/status.cc +29 -22
- data/third_party/abseil-cpp/absl/status/status.h +81 -20
- data/third_party/abseil-cpp/absl/status/statusor.h +3 -3
- data/third_party/abseil-cpp/absl/strings/charconv.cc +5 -5
- data/third_party/abseil-cpp/absl/strings/cord.cc +326 -371
- data/third_party/abseil-cpp/absl/strings/cord.h +182 -64
- data/third_party/abseil-cpp/absl/strings/escaping.cc +4 -4
- data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc +6 -6
- data/third_party/abseil-cpp/absl/strings/internal/cord_internal.cc +83 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +387 -17
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_flat.h +146 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.cc +897 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.h +589 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring_reader.h +114 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +14 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +14 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +15 -1
- data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +19 -4
- data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +14 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +36 -18
- data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.h +14 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc +14 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +14 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +15 -40
- data/third_party/abseil-cpp/absl/strings/internal/string_constant.h +64 -0
- data/third_party/abseil-cpp/absl/strings/match.cc +6 -3
- data/third_party/abseil-cpp/absl/strings/match.h +16 -6
- data/third_party/abseil-cpp/absl/strings/numbers.cc +132 -4
- data/third_party/abseil-cpp/absl/strings/numbers.h +10 -10
- data/third_party/abseil-cpp/absl/strings/str_join.h +1 -1
- data/third_party/abseil-cpp/absl/strings/str_split.h +38 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/futex.h +154 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +2 -1
- data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +2 -2
- data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +4 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +1 -65
- data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +2 -6
- data/third_party/abseil-cpp/absl/synchronization/mutex.cc +71 -59
- data/third_party/abseil-cpp/absl/synchronization/mutex.h +79 -62
- data/third_party/abseil-cpp/absl/time/clock.cc +146 -130
- data/third_party/abseil-cpp/absl/time/clock.h +2 -2
- data/third_party/abseil-cpp/absl/time/duration.cc +3 -2
- data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +7 -11
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.cc +7 -1
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +4 -4
- data/third_party/abseil-cpp/absl/time/time.cc +4 -3
- data/third_party/abseil-cpp/absl/time/time.h +26 -24
- data/third_party/abseil-cpp/absl/types/internal/variant.h +1 -1
- data/third_party/abseil-cpp/absl/types/variant.h +9 -4
- data/third_party/boringssl-with-bazel/err_data.c +478 -462
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bool.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_type.c +18 -8
- data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +1 -2
- data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_locl.h +5 -0
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_fre.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_tls.c +1 -88
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/internal.h +14 -3
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/tls_cbc.c +119 -273
- data/third_party/boringssl-with-bazel/src/crypto/cpu-arm-linux.c +11 -2
- data/third_party/boringssl-with-bazel/src/crypto/cpu-arm.c +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/err/err.c +87 -80
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +1 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/cipher.c +32 -16
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_aes.c +25 -2
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digests.c +10 -2
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/md32_common.h +4 -43
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +4 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +0 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +0 -4
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +104 -93
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/internal.h +39 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md4/md4.c +43 -46
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md5/md5.c +43 -46
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cbc.c +33 -22
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cfb.c +9 -8
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ctr.c +9 -8
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm.c +17 -13
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/internal.h +1 -22
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ofb.c +2 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.c +7 -5
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +26 -7
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/fips.c +79 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +14 -9
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha1.c +45 -48
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha256.c +38 -43
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +37 -45
- data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +103 -42
- data/third_party/boringssl-with-bazel/src/crypto/hpke/internal.h +58 -37
- data/third_party/boringssl-with-bazel/src/crypto/internal.h +65 -0
- data/third_party/boringssl-with-bazel/src/crypto/mem.c +14 -0
- data/third_party/boringssl-with-bazel/src/crypto/obj/obj.c +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7_x509.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +95 -48
- data/third_party/boringssl-with-bazel/src/crypto/rand_extra/rand_extra.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/thread_pthread.c +0 -28
- data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +19 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/t_req.c +2 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_att.c +19 -25
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c +3 -30
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c +39 -89
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +9 -16
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_algor.c +21 -17
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_attrib.c +21 -34
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +5 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_pubkey.c +25 -22
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_val.c +2 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509.c +3 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +2 -4
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c +1 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/aead.h +0 -3
- data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +120 -41
- data/third_party/boringssl-with-bazel/src/include/openssl/base.h +9 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +0 -4
- data/third_party/boringssl-with-bazel/src/include/openssl/cpu.h +22 -32
- data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +24 -4
- data/third_party/boringssl-with-bazel/src/include/openssl/ec.h +5 -2
- data/third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h +19 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/err.h +3 -2
- data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +1 -38
- data/third_party/boringssl-with-bazel/src/{crypto/x509/x509_r2x.c → include/openssl/evp_errors.h} +41 -58
- data/third_party/boringssl-with-bazel/src/include/openssl/obj.h +24 -5
- data/third_party/boringssl-with-bazel/src/include/openssl/pkcs7.h +2 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/pkcs8.h +9 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/rand.h +2 -2
- data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +210 -26
- data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +1 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +416 -122
- data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +2 -0
- data/third_party/boringssl-with-bazel/src/ssl/d1_both.cc +5 -0
- data/third_party/boringssl-with-bazel/src/ssl/encrypted_client_hello.cc +444 -0
- data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +244 -1
- data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +43 -12
- data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +149 -8
- data/third_party/boringssl-with-bazel/src/ssl/internal.h +220 -46
- data/third_party/boringssl-with-bazel/src/ssl/s3_both.cc +7 -1
- data/third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc +4 -6
- data/third_party/boringssl-with-bazel/src/ssl/ssl_key_share.cc +23 -26
- data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +74 -15
- data/third_party/boringssl-with-bazel/src/ssl/t1_lib.cc +131 -83
- data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +34 -4
- data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +205 -100
- data/third_party/boringssl-with-bazel/src/ssl/tls_method.cc +4 -2
- data/third_party/xxhash/xxhash.h +5443 -0
- metadata +128 -61
- data/src/core/lib/iomgr/poller/eventmanager_libuv.cc +0 -88
- data/src/core/lib/iomgr/poller/eventmanager_libuv.h +0 -88
- data/src/core/lib/security/authorization/authorization_engine.cc +0 -177
- data/src/core/lib/security/authorization/authorization_engine.h +0 -84
- data/src/core/lib/security/authorization/evaluate_args.cc +0 -148
- data/src/core/lib/security/authorization/evaluate_args.h +0 -59
- data/src/core/lib/security/authorization/mock_cel/activation.h +0 -57
- data/src/core/lib/security/authorization/mock_cel/cel_expr_builder_factory.h +0 -44
- data/src/core/lib/security/authorization/mock_cel/cel_expression.h +0 -69
- data/src/core/lib/security/authorization/mock_cel/cel_value.h +0 -99
- data/src/core/lib/security/authorization/mock_cel/evaluator_core.h +0 -67
- data/src/core/lib/security/authorization/mock_cel/flat_expr_builder.h +0 -57
- data/third_party/abseil-cpp/absl/base/internal/bits.h +0 -219
- data/third_party/abseil-cpp/absl/container/flat_hash_set.h +0 -504
- data/third_party/abseil-cpp/absl/synchronization/internal/mutex_nonprod.inc +0 -249
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/is_fips.c +0 -29
- data/third_party/upb/upb/json_decode.c +0 -1443
- data/third_party/upb/upb/json_decode.h +0 -23
- data/third_party/upb/upb/json_encode.c +0 -713
- 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
|
-
|
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
|
-
|
50
|
-
|
51
|
-
"
|
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
|
-
|
104
|
-
|
105
|
-
|
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
|
-
|
110
|
-
|
111
|
-
|
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
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
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(
|
125
|
-
|
126
|
-
|
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
|
132
|
-
gpr_log(
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
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
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
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
|
-
|
234
|
-
|
235
|
-
RefCountedPtr<
|
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
|
-
|
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
|
-
|
533
|
+
grpc_error_std_string(error).c_str());
|
263
534
|
GRPC_ERROR_UNREF(error);
|
264
535
|
return nullptr;
|
265
536
|
}
|
266
|
-
|
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
|
}
|