grpc 1.48.0 → 1.50.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 +114 -150
- data/include/grpc/event_engine/endpoint_config.h +11 -5
- data/include/grpc/event_engine/event_engine.h +20 -17
- data/include/grpc/impl/codegen/atm_gcc_atomic.h +19 -28
- data/include/grpc/impl/codegen/atm_gcc_sync.h +0 -2
- data/include/grpc/impl/codegen/atm_windows.h +0 -2
- data/include/grpc/impl/codegen/grpc_types.h +9 -8
- data/include/grpc/impl/codegen/port_platform.h +0 -8
- data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +6 -6
- data/src/core/ext/filters/channel_idle/channel_idle_filter.h +2 -2
- data/src/core/ext/filters/client_channel/backup_poller.cc +4 -6
- data/src/core/ext/filters/client_channel/client_channel.cc +154 -218
- data/src/core/ext/filters/client_channel/client_channel.h +16 -9
- data/src/core/ext/filters/client_channel/client_channel_factory.cc +0 -29
- data/src/core/ext/filters/client_channel/client_channel_factory.h +2 -10
- data/src/core/ext/filters/client_channel/client_channel_plugin.cc +0 -16
- data/src/core/ext/filters/client_channel/config_selector.h +12 -4
- data/src/core/ext/filters/client_channel/connector.h +4 -5
- data/src/core/ext/filters/client_channel/http_proxy.cc +55 -74
- data/src/core/ext/filters/client_channel/http_proxy.h +15 -11
- data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +20 -16
- data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +11 -10
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +0 -2
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +181 -194
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +12 -3
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +5 -1
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +1 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +1 -2
- data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +20 -11
- data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.h +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +250 -146
- data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h +41 -1
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +35 -32
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +195 -299
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +237 -250
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +12 -7
- data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +431 -498
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +31 -30
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +27 -27
- data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +108 -124
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +68 -76
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +131 -227
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +126 -121
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +325 -304
- data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +4 -8
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +431 -145
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +172 -101
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +20 -7
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +18 -16
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +7 -17
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +11 -0
- data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +51 -32
- data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +87 -41
- data/src/core/ext/filters/client_channel/resolver/polling_resolver.h +16 -6
- data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +5 -13
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +167 -168
- data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +40 -32
- data/src/core/ext/filters/client_channel/resolver_result_parsing.h +7 -10
- data/src/core/ext/filters/client_channel/retry_filter.cc +25 -36
- data/src/core/ext/filters/client_channel/retry_service_config.cc +30 -19
- data/src/core/ext/filters/client_channel/retry_service_config.h +6 -9
- data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +6 -7
- data/src/core/ext/filters/client_channel/subchannel.cc +86 -121
- data/src/core/ext/filters/client_channel/subchannel.h +20 -11
- data/src/core/ext/filters/client_channel/subchannel_interface_internal.h +1 -1
- data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +6 -76
- data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +16 -25
- data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +4 -6
- data/src/core/ext/filters/deadline/deadline_filter.cc +6 -6
- data/src/core/ext/filters/deadline/deadline_filter.h +2 -3
- data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +24 -19
- data/src/core/ext/filters/fault_injection/fault_injection_filter.h +9 -1
- data/src/core/ext/filters/fault_injection/service_config_parser.cc +17 -12
- data/src/core/ext/filters/fault_injection/service_config_parser.h +4 -5
- data/src/core/ext/filters/http/client/http_client_filter.cc +3 -5
- data/src/core/ext/filters/http/client/http_client_filter.h +1 -1
- data/src/core/ext/filters/http/client_authority_filter.cc +1 -2
- data/src/core/ext/filters/http/client_authority_filter.h +1 -1
- data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +2 -4
- data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +0 -2
- data/src/core/ext/filters/http/server/http_server_filter.cc +3 -5
- data/src/core/ext/filters/http/server/http_server_filter.h +1 -1
- data/src/core/ext/filters/message_size/message_size_filter.cc +13 -7
- data/src/core/ext/filters/message_size/message_size_filter.h +3 -6
- data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +16 -12
- data/src/core/ext/filters/rbac/rbac_service_config_parser.h +4 -6
- data/src/core/ext/filters/server_config_selector/server_config_selector.h +5 -0
- data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +3 -5
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +40 -63
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +86 -107
- data/src/core/ext/transport/chttp2/server/chttp2_server.h +4 -6
- data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +1 -1
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +155 -295
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +3 -2
- data/src/core/ext/transport/chttp2/transport/decode_huff.cc +287 -0
- data/src/core/ext/transport/chttp2/transport/decode_huff.h +1018 -0
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +139 -42
- data/src/core/ext/transport/chttp2/transport/flow_control.h +12 -6
- data/src/core/ext/transport/chttp2/transport/frame_ping.cc +1 -2
- data/src/core/ext/transport/chttp2/transport/hpack_constants.h +7 -1
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +27 -28
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +4 -0
- data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +0 -1
- data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.h +8 -2
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +30 -38
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +1 -10
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +11 -6
- data/src/core/ext/transport/chttp2/transport/internal.h +4 -1
- data/src/core/ext/transport/chttp2/transport/parsing.cc +44 -0
- data/src/core/ext/transport/chttp2/transport/writing.cc +3 -14
- data/src/core/ext/transport/inproc/inproc_transport.cc +41 -77
- data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.c +5 -5
- data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.h +30 -10
- data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.c +4 -4
- data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.h +24 -8
- data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.c +8 -327
- data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.h +83 -1723
- data/src/core/ext/upb-generated/envoy/admin/v3/config_dump_shared.upb.c +352 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/config_dump_shared.upb.h +1768 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.h +12 -4
- data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.c +6 -4
- data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.h +33 -4
- data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/admin/v3/mutex_stats.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/admin/v3/server_info.upb.h +12 -4
- data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/annotations/resource.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +7 -3
- data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +14 -14
- data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +90 -30
- data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.c +21 -19
- data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +124 -34
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +3 -3
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +18 -6
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +23 -22
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +153 -48
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.c +11 -11
- data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.h +84 -28
- data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +7 -7
- data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +42 -14
- data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +25 -23
- data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +156 -48
- data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +7 -7
- data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +42 -14
- data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.h +12 -4
- data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +12 -12
- data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +78 -26
- data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +9 -9
- data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +54 -18
- data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +21 -20
- data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +117 -44
- data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.h +12 -4
- data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +3 -3
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +18 -6
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +5 -5
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +36 -12
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +3 -3
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +30 -10
- data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +37 -13
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +170 -15
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +5 -5
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +42 -14
- data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +7 -4
- data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +36 -4
- data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.c +6 -6
- data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.h +48 -16
- data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.c +8 -8
- data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.h +54 -18
- data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +21 -9
- data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +100 -14
- data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +7 -22
- data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +36 -77
- data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +121 -76
- data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +647 -163
- data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +3 -3
- data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +18 -6
- data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.c +34 -15
- data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.h +161 -22
- data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +12 -4
- data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/config/trace/v3/opentelemetry.upb.c +46 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/opentelemetry.upb.h +98 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.h +12 -4
- data/src/core/ext/upb-generated/envoy/config/trace/v3/trace.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/trace.upb.h +1 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.h +12 -4
- data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.h +30 -10
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.h +18 -6
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.c +11 -4
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.h +58 -4
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +35 -27
- data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +177 -52
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +10 -8
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +66 -14
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +3 -3
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +18 -6
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +5 -5
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +42 -14
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.h +12 -4
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +131 -16
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +632 -12
- data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +12 -4
- data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.c +5 -5
- data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.h +30 -10
- data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.c +4 -4
- data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.h +24 -8
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.c +4 -4
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.h +24 -8
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +12 -4
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +3 -3
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +18 -6
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +12 -4
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.h +12 -4
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +3 -3
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +18 -6
- data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +7 -7
- data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +42 -14
- data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +5 -5
- data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +30 -10
- data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.c +3 -3
- data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.h +18 -6
- data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +12 -4
- data/src/core/ext/upb-generated/envoy/type/v3/range.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +18 -6
- data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_strategy.upb.c +63 -0
- data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_strategy.upb.h +202 -0
- data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/type/v3/token_bucket.upb.h +6 -2
- data/src/core/ext/upb-generated/google/api/annotations.upb.h +1 -1
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.c +11 -11
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.h +66 -22
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +9 -9
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +72 -24
- data/src/core/ext/upb-generated/google/api/http.upb.c +3 -3
- data/src/core/ext/upb-generated/google/api/http.upb.h +18 -6
- data/src/core/ext/upb-generated/google/api/httpbody.upb.c +1 -1
- data/src/core/ext/upb-generated/google/api/httpbody.upb.h +6 -2
- data/src/core/ext/upb-generated/google/protobuf/any.upb.c +1 -1
- data/src/core/ext/upb-generated/google/protobuf/any.upb.h +6 -2
- data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +44 -43
- data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +177 -55
- data/src/core/ext/upb-generated/google/protobuf/duration.upb.c +1 -1
- data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +6 -2
- data/src/core/ext/upb-generated/google/protobuf/empty.upb.c +1 -1
- data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +6 -2
- data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +2 -2
- data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +18 -6
- data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.c +1 -1
- data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +6 -2
- data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.c +6 -6
- data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +54 -18
- data/src/core/ext/upb-generated/google/rpc/status.upb.c +1 -1
- data/src/core/ext/upb-generated/google/rpc/status.upb.h +6 -2
- data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.c +2 -2
- data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.h +24 -8
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +6 -2
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +7 -7
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +60 -20
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c +1 -1
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +12 -4
- data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c +2 -2
- data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +12 -4
- data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c +6 -6
- data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +54 -18
- data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.c +2 -2
- data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.h +12 -4
- data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.c +7 -7
- data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.h +42 -14
- data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.c +3 -3
- data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +23 -11
- data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +1 -1
- data/src/core/ext/upb-generated/udpa/annotations/security.upb.h +7 -3
- data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +7 -3
- data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +1 -1
- data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +7 -3
- data/src/core/ext/upb-generated/validate/validate.upb.c +22 -22
- data/src/core/ext/upb-generated/validate/validate.upb.h +139 -47
- data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.c +3 -3
- data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.h +23 -11
- data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.c +1 -1
- data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.h +7 -3
- data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.c +3 -3
- data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.h +27 -11
- data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.c +1 -1
- data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.h +7 -3
- data/src/core/ext/upb-generated/xds/core/v3/authority.upb.c +1 -1
- data/src/core/ext/upb-generated/xds/core/v3/authority.upb.h +6 -2
- data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.c +2 -2
- data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.h +12 -4
- data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +1 -1
- data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.h +6 -2
- data/src/core/ext/upb-generated/xds/core/v3/extension.upb.c +1 -1
- data/src/core/ext/upb-generated/xds/core/v3/extension.upb.h +6 -2
- data/src/core/ext/upb-generated/xds/core/v3/resource.upb.c +1 -1
- data/src/core/ext/upb-generated/xds/core/v3/resource.upb.h +6 -2
- data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +1 -1
- data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.h +12 -4
- data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +1 -1
- data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.h +6 -2
- data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +6 -2
- data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.c +1 -1
- data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.h +6 -2
- data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.c +6 -6
- data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.h +54 -18
- data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.c +2 -2
- data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.h +12 -4
- data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.c +1 -1
- data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.h +12 -4
- data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.c +1 -1
- data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.h +6 -2
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.c +67 -274
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.h +0 -85
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump_shared.upbdefs.c +256 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump_shared.upbdefs.h +115 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/listeners.upbdefs.c +14 -11
- data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.c +107 -107
- data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.c +191 -187
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +156 -154
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +186 -183
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +136 -134
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.c +16 -16
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.c +162 -139
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.c +39 -31
- data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.c +12 -8
- data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.c +72 -75
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.h +0 -5
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +713 -670
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.h +10 -0
- data/src/core/ext/upbdefs-generated/envoy/config/tap/v3/common.upbdefs.c +150 -139
- data/src/core/ext/upbdefs-generated/envoy/config/tap/v3/common.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opentelemetry.upbdefs.c +47 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opentelemetry.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/trace.upbdefs.c +16 -12
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.c +46 -25
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +477 -466
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +21 -18
- data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.c +153 -84
- data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.c +113 -113
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.c +29 -28
- data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_strategy.upbdefs.c +69 -0
- data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_strategy.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.c +92 -90
- data/src/core/ext/xds/certificate_provider_store.cc +63 -3
- data/src/core/ext/xds/certificate_provider_store.h +9 -1
- data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +5 -5
- data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +1 -1
- data/src/core/ext/xds/upb_utils.h +0 -21
- data/src/core/ext/xds/xds_api.cc +73 -102
- data/src/core/ext/xds/xds_api.h +26 -28
- data/src/core/ext/xds/xds_bootstrap.cc +5 -550
- data/src/core/ext/xds/xds_bootstrap.h +39 -91
- data/src/core/ext/xds/xds_bootstrap_grpc.cc +370 -0
- data/src/core/ext/xds/xds_bootstrap_grpc.h +169 -0
- data/src/core/ext/xds/xds_certificate_provider.h +9 -0
- data/src/core/ext/xds/xds_channel_stack_modifier.cc +6 -4
- data/src/core/ext/xds/xds_channel_stack_modifier.h +8 -0
- data/src/core/ext/xds/xds_client.cc +732 -1317
- data/src/core/ext/xds/xds_client.h +33 -59
- data/src/core/ext/xds/xds_client_grpc.cc +229 -0
- data/src/core/ext/xds/xds_client_grpc.h +79 -0
- data/src/core/ext/xds/xds_client_stats.cc +4 -4
- data/src/core/ext/xds/xds_cluster.cc +162 -165
- data/src/core/ext/xds/xds_cluster.h +8 -7
- data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +12 -14
- data/src/core/ext/xds/xds_cluster_specifier_plugin.h +1 -0
- data/src/core/ext/xds/xds_common_types.cc +140 -108
- data/src/core/ext/xds/xds_common_types.h +6 -7
- data/src/core/ext/xds/xds_endpoint.cc +87 -85
- data/src/core/ext/xds/xds_endpoint.h +4 -5
- data/src/core/ext/xds/xds_http_fault_filter.cc +4 -11
- data/src/core/ext/xds/xds_http_fault_filter.h +3 -3
- data/src/core/ext/xds/xds_http_filters.h +3 -3
- data/src/core/ext/xds/xds_http_rbac_filter.cc +39 -58
- data/src/core/ext/xds/xds_http_rbac_filter.h +3 -3
- data/src/core/ext/xds/xds_lb_policy_registry.cc +21 -22
- data/src/core/ext/xds/xds_lb_policy_registry.h +4 -4
- data/src/core/ext/xds/xds_listener.cc +348 -313
- data/src/core/ext/xds/xds_listener.h +4 -5
- data/src/core/ext/xds/xds_resource_type.h +23 -9
- data/src/core/ext/xds/xds_route_config.cc +193 -191
- data/src/core/ext/xds/xds_route_config.h +31 -17
- data/src/core/ext/xds/xds_routing.cc +3 -6
- data/src/core/ext/xds/xds_routing.h +7 -9
- data/src/core/ext/xds/xds_server_config_fetcher.cc +81 -84
- data/src/core/ext/xds/xds_transport.h +86 -0
- data/src/core/ext/xds/xds_transport_grpc.cc +357 -0
- data/src/core/ext/xds/xds_transport_grpc.h +135 -0
- data/src/core/lib/address_utils/parse_address.cc +19 -17
- data/src/core/lib/address_utils/parse_address.h +8 -5
- data/src/core/lib/avl/avl.h +47 -25
- data/src/core/lib/backoff/backoff.cc +2 -4
- data/src/core/lib/channel/call_finalization.h +1 -3
- data/src/core/lib/channel/call_tracer.h +1 -1
- data/src/core/lib/channel/channel_args.cc +88 -19
- data/src/core/lib/channel/channel_args.h +218 -67
- data/src/core/lib/channel/channel_stack.cc +0 -1
- data/src/core/lib/channel/channel_stack_builder.cc +3 -3
- data/src/core/lib/channel/channel_stack_builder.h +2 -2
- data/src/core/lib/channel/channel_stack_builder_impl.cc +2 -4
- data/src/core/lib/channel/channel_trace.cc +3 -4
- data/src/core/lib/channel/channelz.cc +27 -37
- data/src/core/lib/channel/channelz.h +9 -0
- data/src/core/lib/channel/promise_based_filter.cc +18 -19
- data/src/core/lib/channel/promise_based_filter.h +0 -1
- data/src/core/lib/channel/status_util.cc +27 -0
- data/src/core/lib/channel/status_util.h +10 -0
- data/src/core/lib/config/core_configuration.cc +5 -1
- data/src/core/lib/config/core_configuration.h +81 -35
- data/src/core/lib/debug/stats.cc +39 -46
- data/src/core/lib/debug/stats.h +11 -13
- data/src/core/lib/debug/stats_data.cc +118 -614
- data/src/core/lib/debug/stats_data.h +67 -465
- data/src/core/lib/debug/trace.cc +0 -2
- data/src/core/lib/event_engine/channel_args_endpoint_config.cc +12 -20
- data/src/core/lib/event_engine/channel_args_endpoint_config.h +13 -7
- data/src/core/lib/event_engine/{event_engine.cc → default_event_engine.cc} +9 -5
- data/src/core/lib/event_engine/{event_engine_factory.h → default_event_engine.h} +4 -8
- data/src/core/lib/event_engine/default_event_engine_factory.cc +20 -3
- data/src/core/lib/event_engine/default_event_engine_factory.h +33 -0
- data/src/core/lib/event_engine/executor/executor.h +38 -0
- data/src/core/lib/event_engine/executor/threaded_executor.cc +36 -0
- data/src/core/lib/event_engine/executor/threaded_executor.h +44 -0
- data/src/core/lib/event_engine/forkable.cc +101 -0
- data/src/core/lib/event_engine/forkable.h +61 -0
- data/src/core/lib/event_engine/poller.h +56 -0
- data/src/core/lib/event_engine/{iomgr_engine/iomgr_engine.cc → posix_engine/posix_engine.cc} +30 -47
- data/src/core/lib/event_engine/{iomgr_engine/iomgr_engine.h → posix_engine/posix_engine.h} +27 -28
- data/src/core/lib/event_engine/{iomgr_engine → posix_engine}/timer.cc +4 -5
- data/src/core/lib/event_engine/{iomgr_engine → posix_engine}/timer.h +8 -8
- data/src/core/lib/event_engine/{iomgr_engine → posix_engine}/timer_heap.cc +4 -4
- data/src/core/lib/event_engine/{iomgr_engine → posix_engine}/timer_heap.h +5 -5
- data/src/core/lib/event_engine/{iomgr_engine → posix_engine}/timer_manager.cc +87 -30
- data/src/core/lib/event_engine/{iomgr_engine → posix_engine}/timer_manager.h +40 -9
- data/src/core/lib/event_engine/socket_notifier.h +55 -0
- data/src/core/lib/event_engine/thread_pool.cc +195 -0
- data/src/core/lib/event_engine/thread_pool.h +114 -0
- data/src/core/lib/event_engine/time_util.cc +30 -0
- data/src/core/lib/event_engine/time_util.h +32 -0
- data/src/core/lib/event_engine/utils.cc +44 -0
- data/src/core/lib/event_engine/utils.h +36 -0
- data/src/core/lib/event_engine/windows/iocp.cc +155 -0
- data/src/core/lib/event_engine/windows/iocp.h +69 -0
- data/src/core/lib/event_engine/windows/win_socket.cc +196 -0
- data/src/core/lib/event_engine/windows/win_socket.h +120 -0
- data/src/core/lib/event_engine/windows/windows_engine.cc +159 -0
- data/src/core/lib/event_engine/windows/windows_engine.h +120 -0
- data/src/core/lib/experiments/config.cc +146 -0
- data/src/core/lib/experiments/config.h +43 -0
- data/src/core/lib/experiments/experiments.cc +75 -0
- data/src/core/lib/experiments/experiments.h +56 -0
- data/src/core/lib/gpr/alloc.cc +1 -9
- data/src/core/lib/gpr/log_windows.cc +0 -1
- data/src/core/lib/gpr/string_util_windows.cc +3 -30
- data/src/core/lib/gpr/sync_abseil.cc +0 -14
- data/src/core/lib/gpr/sync_posix.cc +0 -14
- data/src/core/lib/gpr/time.cc +11 -9
- data/src/core/lib/gpr/time_posix.cc +0 -6
- data/src/core/lib/gpr/time_precise.h +1 -1
- data/src/core/lib/gpr/tmpfile_windows.cc +5 -7
- data/src/core/lib/gpr/useful.h +40 -0
- data/src/core/lib/gprpp/bitset.h +3 -13
- data/src/core/lib/gprpp/debug_location.h +39 -7
- data/src/core/lib/{gpr → gprpp}/env.h +25 -12
- data/src/core/lib/{gpr → gprpp}/env_linux.cc +20 -15
- data/src/core/lib/{gpr → gprpp}/env_posix.cc +11 -10
- data/src/core/lib/gprpp/env_windows.cc +56 -0
- data/src/core/lib/gprpp/fork.cc +14 -22
- data/src/core/lib/gprpp/fork.h +0 -8
- data/src/core/lib/gprpp/global_config_env.cc +7 -6
- data/src/core/lib/gprpp/manual_constructor.h +0 -1
- data/src/core/lib/gprpp/no_destruct.h +94 -0
- data/src/core/lib/gprpp/notification.h +67 -0
- data/src/core/lib/gprpp/packed_table.h +40 -0
- data/src/core/lib/gprpp/ref_counted_ptr.h +20 -34
- data/src/core/lib/gprpp/sorted_pack.h +98 -0
- data/src/core/lib/gprpp/status_helper.cc +1 -0
- data/src/core/lib/gprpp/status_helper.h +6 -0
- data/src/core/lib/gprpp/table.h +9 -2
- data/src/core/lib/gprpp/tchar.cc +49 -0
- data/src/core/lib/gprpp/tchar.h +33 -0
- data/src/core/lib/gprpp/time.cc +21 -0
- data/src/core/lib/gprpp/time.h +55 -0
- data/src/core/lib/{event_engine/iomgr_engine → gprpp}/time_averaged_stats.cc +3 -5
- data/src/core/lib/{event_engine/iomgr_engine → gprpp}/time_averaged_stats.h +5 -7
- data/src/core/lib/gprpp/validation_errors.cc +61 -0
- data/src/core/lib/gprpp/validation_errors.h +110 -0
- data/src/core/lib/{iomgr → gprpp}/work_serializer.cc +34 -18
- data/src/core/lib/{iomgr → gprpp}/work_serializer.h +21 -27
- data/src/core/{ext/filters/client_channel → lib/handshaker}/proxy_mapper.h +16 -17
- data/src/core/lib/handshaker/proxy_mapper_registry.cc +71 -0
- data/src/core/lib/handshaker/proxy_mapper_registry.h +75 -0
- data/src/core/lib/http/httpcli.cc +12 -24
- data/src/core/lib/http/httpcli_security_connector.cc +11 -11
- data/src/core/lib/iomgr/call_combiner.cc +0 -34
- data/src/core/lib/iomgr/closure.h +0 -10
- data/src/core/lib/iomgr/combiner.cc +0 -20
- data/src/core/lib/iomgr/endpoint_pair_posix.cc +14 -9
- data/src/core/lib/iomgr/endpoint_pair_windows.cc +2 -2
- data/src/core/lib/iomgr/error.cc +0 -773
- data/src/core/lib/iomgr/error.h +0 -145
- data/src/core/lib/iomgr/error_cfstream.cc +0 -5
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +1 -38
- data/src/core/lib/iomgr/ev_poll_posix.cc +19 -26
- data/src/core/lib/iomgr/exec_ctx.cc +0 -22
- data/src/core/lib/iomgr/exec_ctx.h +7 -31
- data/src/core/lib/iomgr/executor.cc +0 -10
- data/src/core/lib/iomgr/executor.h +0 -3
- data/src/core/lib/iomgr/iocp_windows.cc +1 -2
- data/src/core/lib/iomgr/iomgr.cc +6 -8
- data/src/core/lib/iomgr/iomgr_fwd.h +1 -0
- data/src/core/lib/iomgr/lockfree_event.cc +0 -17
- data/src/core/lib/iomgr/pollset.h +1 -1
- data/src/core/lib/iomgr/pollset_set.h +0 -1
- data/src/core/lib/iomgr/port.h +3 -0
- data/src/core/lib/iomgr/resolve_address.h +30 -6
- data/src/core/lib/iomgr/resolve_address_impl.h +1 -0
- data/src/core/lib/iomgr/resolve_address_posix.cc +43 -8
- data/src/core/lib/iomgr/resolve_address_posix.h +19 -5
- data/src/core/lib/iomgr/resolve_address_windows.cc +45 -10
- data/src/core/lib/iomgr/resolve_address_windows.h +19 -5
- data/src/core/lib/iomgr/sockaddr_utils_posix.cc +2 -1
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +12 -34
- data/src/core/lib/iomgr/socket_utils_posix.cc +83 -1
- data/src/core/lib/iomgr/socket_utils_posix.h +98 -6
- data/src/core/lib/iomgr/socket_windows.h +0 -2
- data/src/core/lib/iomgr/tcp_client.cc +6 -7
- data/src/core/lib/iomgr/tcp_client.h +11 -11
- data/src/core/lib/iomgr/tcp_client_cfstream.cc +6 -6
- data/src/core/lib/iomgr/tcp_client_posix.cc +33 -29
- data/src/core/lib/iomgr/tcp_client_posix.h +12 -9
- data/src/core/lib/iomgr/tcp_client_windows.cc +6 -6
- data/src/core/lib/iomgr/tcp_posix.cc +249 -120
- data/src/core/lib/iomgr/tcp_posix.h +3 -1
- data/src/core/lib/iomgr/tcp_server.cc +5 -4
- data/src/core/lib/iomgr/tcp_server.h +9 -6
- data/src/core/lib/iomgr/tcp_server_posix.cc +17 -28
- data/src/core/lib/iomgr/tcp_server_utils_posix.h +2 -2
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +3 -3
- data/src/core/lib/iomgr/tcp_server_windows.cc +6 -7
- data/src/core/lib/iomgr/tcp_windows.cc +0 -1
- data/src/core/lib/iomgr/tcp_windows.h +0 -1
- data/src/core/lib/iomgr/timer_generic.cc +10 -12
- data/src/core/lib/iomgr/timer_manager.cc +1 -2
- data/src/core/lib/iomgr/wakeup_fd_eventfd.cc +0 -2
- data/src/core/lib/json/json.h +19 -22
- data/src/core/lib/json/json_args.h +34 -0
- data/src/core/lib/json/json_object_loader.cc +202 -0
- data/src/core/lib/json/json_object_loader.h +598 -0
- data/src/core/lib/json/json_reader.cc +86 -62
- data/src/core/lib/json/json_util.cc +9 -36
- data/src/core/{ext/filters/client_channel → lib/load_balancing}/lb_policy.cc +3 -44
- data/src/core/{ext/filters/client_channel → lib/load_balancing}/lb_policy.h +20 -29
- data/src/core/lib/load_balancing/lb_policy_factory.h +49 -0
- data/src/core/lib/load_balancing/lb_policy_registry.cc +141 -0
- data/src/core/lib/load_balancing/lb_policy_registry.h +82 -0
- data/src/core/{ext/filters/client_channel → lib/load_balancing}/subchannel_interface.h +6 -6
- data/src/core/lib/promise/activity.h +57 -10
- data/src/core/lib/promise/arena_promise.h +84 -81
- data/src/core/lib/promise/context.h +1 -2
- data/src/core/lib/promise/detail/basic_seq.h +43 -23
- data/src/core/lib/promise/detail/promise_factory.h +0 -1
- data/src/core/lib/promise/map.h +0 -1
- data/src/core/lib/promise/seq.h +25 -4
- data/src/core/lib/promise/sleep.cc +50 -42
- data/src/core/lib/promise/sleep.h +32 -23
- data/src/core/lib/promise/try_seq.h +26 -6
- data/src/core/lib/resolver/resolver.cc +0 -47
- data/src/core/lib/resolver/resolver.h +15 -15
- data/src/core/lib/resolver/resolver_factory.h +2 -3
- data/src/core/lib/resolver/resolver_registry.cc +1 -1
- data/src/core/lib/resolver/resolver_registry.h +2 -3
- data/src/core/lib/resolver/server_address.cc +11 -15
- data/src/core/lib/resolver/server_address.h +4 -8
- data/src/core/lib/resource_quota/api.cc +10 -1
- data/src/core/lib/resource_quota/api.h +6 -0
- data/src/core/lib/resource_quota/arena.cc +19 -1
- data/src/core/lib/resource_quota/arena.h +24 -2
- data/src/core/lib/resource_quota/memory_quota.cc +143 -19
- data/src/core/lib/resource_quota/memory_quota.h +85 -17
- data/src/core/lib/resource_quota/periodic_update.cc +78 -0
- data/src/core/lib/resource_quota/periodic_update.h +71 -0
- data/src/core/lib/security/authorization/evaluate_args.cc +10 -7
- data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +1 -2
- data/src/core/lib/security/authorization/grpc_server_authz_filter.h +1 -1
- data/src/core/lib/security/authorization/matchers.cc +13 -10
- data/src/core/lib/security/authorization/rbac_policy.cc +0 -1
- data/src/core/{ext/xds → lib/security/certificate_provider}/certificate_provider_factory.h +3 -3
- data/src/core/lib/security/certificate_provider/certificate_provider_registry.cc +60 -0
- data/src/core/lib/security/certificate_provider/certificate_provider_registry.h +70 -0
- data/src/core/lib/security/credentials/alts/alts_credentials.cc +2 -3
- data/src/core/lib/security/credentials/alts/alts_credentials.h +3 -4
- data/src/core/lib/security/credentials/channel_creds_registry_init.cc +1 -0
- data/src/core/lib/security/credentials/composite/composite_credentials.cc +3 -7
- data/src/core/lib/security/credentials/composite/composite_credentials.h +2 -4
- data/src/core/lib/security/credentials/credentials.h +16 -12
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +33 -27
- data/src/core/lib/security/credentials/external/external_account_credentials.cc +34 -24
- data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +5 -6
- data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +4 -6
- data/src/core/lib/security/credentials/fake/fake_credentials.cc +3 -12
- data/src/core/lib/security/credentials/fake/fake_credentials.h +0 -4
- data/src/core/lib/security/credentials/google_default/credentials_generic.cc +5 -8
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +35 -32
- data/src/core/lib/security/credentials/google_default/google_default_credentials.h +1 -3
- data/src/core/lib/security/credentials/iam/iam_credentials.cc +0 -1
- data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +3 -3
- data/src/core/lib/security/credentials/insecure/insecure_credentials.h +3 -4
- data/src/core/lib/security/credentials/jwt/json_token.cc +12 -3
- data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +4 -8
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +14 -15
- data/src/core/lib/security/credentials/jwt/jwt_verifier.h +1 -1
- data/src/core/lib/security/credentials/local/local_credentials.cc +3 -4
- data/src/core/lib/security/credentials/local/local_credentials.h +3 -4
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +18 -20
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +0 -1
- data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +13 -21
- data/src/core/lib/security/credentials/ssl/ssl_credentials.h +3 -4
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +4 -3
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +10 -2
- data/src/core/lib/security/credentials/tls/tls_credentials.cc +13 -25
- data/src/core/lib/security/credentials/tls/tls_credentials.h +3 -4
- data/src/core/lib/security/credentials/tls/tls_utils.cc +3 -1
- data/src/core/lib/security/credentials/xds/xds_credentials.cc +13 -30
- data/src/core/lib/security/credentials/xds/xds_credentials.h +3 -3
- data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +10 -18
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +26 -38
- data/src/core/lib/security/security_connector/fake/fake_security_connector.h +2 -2
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +5 -5
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +6 -5
- data/src/core/lib/security/security_connector/local/local_security_connector.cc +13 -11
- data/src/core/lib/security/security_connector/local/local_security_connector.h +2 -2
- data/src/core/lib/security/security_connector/security_connector.h +5 -3
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +5 -4
- data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +5 -5
- data/src/core/lib/security/security_connector/tls/tls_security_connector.h +5 -5
- data/src/core/lib/security/transport/auth_filters.h +1 -1
- data/src/core/lib/security/transport/client_auth_filter.cc +15 -5
- data/src/core/lib/security/transport/secure_endpoint.cc +0 -4
- data/src/core/lib/security/transport/security_handshaker.cc +32 -44
- data/src/core/lib/security/transport/security_handshaker.h +2 -1
- data/src/core/lib/service_config/service_config.h +11 -0
- data/src/core/lib/service_config/service_config_impl.cc +98 -97
- data/src/core/lib/service_config/service_config_impl.h +11 -13
- data/src/core/lib/service_config/service_config_parser.cc +26 -27
- data/src/core/lib/service_config/service_config_parser.h +10 -22
- data/src/core/lib/slice/percent_encoding.cc +4 -13
- data/src/core/lib/slice/slice.cc +10 -4
- data/src/core/lib/surface/call.cc +9 -13
- data/src/core/lib/surface/channel.cc +9 -8
- data/src/core/lib/surface/channel.h +1 -1
- data/src/core/lib/surface/completion_queue.cc +16 -30
- data/src/core/lib/surface/completion_queue.h +1 -4
- data/src/core/lib/surface/completion_queue_factory.cc +5 -0
- data/src/core/lib/surface/init.cc +17 -16
- data/src/core/lib/surface/init_internally.cc +24 -0
- data/src/core/lib/surface/init_internally.h +28 -0
- data/src/core/lib/surface/lame_client.cc +2 -3
- data/src/core/lib/surface/lame_client.h +1 -1
- data/src/core/lib/surface/server.cc +8 -19
- data/src/core/lib/surface/server.h +11 -13
- data/src/core/lib/surface/validate_metadata.cc +4 -14
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/bdp_estimator.cc +1 -3
- data/src/core/lib/transport/connectivity_state.cc +0 -1
- data/src/core/lib/transport/connectivity_state.h +1 -1
- data/src/core/lib/transport/error_utils.cc +0 -36
- data/src/core/lib/transport/handshaker.cc +7 -9
- data/src/core/lib/transport/handshaker.h +4 -5
- data/src/core/lib/transport/handshaker_factory.h +2 -3
- data/src/core/lib/transport/handshaker_registry.cc +2 -1
- data/src/core/lib/transport/handshaker_registry.h +2 -4
- data/src/core/lib/transport/http_connect_handshaker.cc +16 -16
- data/src/core/lib/transport/metadata_batch.cc +7 -3
- data/src/core/lib/transport/metadata_batch.h +61 -14
- data/src/core/lib/transport/parsed_metadata.h +4 -3
- data/src/core/lib/transport/status_conversion.cc +1 -3
- data/src/core/lib/transport/tcp_connect_handshaker.cc +20 -22
- data/src/core/lib/transport/transport.h +0 -8
- data/src/core/lib/transport/transport_impl.h +0 -1
- data/src/core/plugin_registry/grpc_plugin_registry.cc +23 -46
- data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +13 -25
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +40 -21
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +1 -1
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +14 -7
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +1 -1
- data/src/core/tsi/fake_transport_security.cc +53 -30
- data/src/core/tsi/local_transport_security.cc +9 -5
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +10 -1
- data/src/core/tsi/ssl_transport_security.cc +47 -23
- data/src/core/tsi/transport_security.cc +18 -6
- data/src/core/tsi/transport_security.h +2 -1
- data/src/core/tsi/transport_security_interface.h +17 -5
- data/src/ruby/ext/grpc/extconf.rb +2 -0
- data/src/ruby/ext/grpc/rb_loader.c +6 -2
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +4 -0
- data/src/ruby/spec/channel_spec.rb +5 -0
- data/src/ruby/spec/generic/server_interceptors_spec.rb +1 -1
- data/src/ruby/spec/user_agent_spec.rb +1 -1
- data/third_party/abseil-cpp/absl/functional/any_invocable.h +313 -0
- data/third_party/abseil-cpp/absl/functional/internal/any_invocable.h +857 -0
- data/third_party/upb/third_party/utf8_range/utf8_range.h +1 -1
- data/third_party/upb/upb/arena.c +277 -0
- data/third_party/upb/upb/arena.h +225 -0
- data/third_party/upb/upb/array.c +114 -0
- data/third_party/upb/upb/array.h +83 -0
- data/third_party/upb/upb/collections.h +36 -0
- data/third_party/upb/upb/decode.c +161 -65
- data/third_party/upb/upb/decode.h +1 -0
- data/third_party/upb/upb/decode_fast.c +1 -1
- data/third_party/upb/upb/def.c +10 -2
- data/third_party/upb/upb/def.h +8 -1
- data/third_party/upb/upb/def.hpp +7 -4
- data/third_party/upb/upb/encode.c +29 -20
- data/third_party/upb/upb/encode.h +16 -6
- data/third_party/upb/upb/extension_registry.c +93 -0
- data/third_party/upb/upb/extension_registry.h +84 -0
- data/third_party/upb/upb/{decode_internal.h → internal/decode.h} +5 -5
- data/third_party/upb/upb/internal/table.h +385 -0
- data/third_party/upb/upb/{upb_internal.h → internal/upb.h} +3 -3
- data/third_party/upb/upb/internal/vsnprintf_compat.h +52 -0
- data/third_party/upb/upb/json_decode.c +1512 -0
- data/third_party/upb/upb/json_decode.h +47 -0
- data/third_party/upb/upb/json_encode.c +7 -3
- data/third_party/upb/upb/json_encode.h +6 -3
- data/third_party/upb/upb/map.c +108 -0
- data/third_party/upb/upb/map.h +117 -0
- data/third_party/upb/upb/message_value.h +66 -0
- data/third_party/upb/upb/mini_table.c +1147 -0
- data/third_party/upb/upb/mini_table.h +189 -0
- data/third_party/upb/upb/mini_table.hpp +112 -0
- data/third_party/upb/upb/msg.c +2 -62
- data/third_party/upb/upb/msg.h +2 -45
- data/third_party/upb/upb/msg_internal.h +28 -22
- data/third_party/upb/upb/port_def.inc +2 -1
- data/third_party/upb/upb/port_undef.inc +1 -0
- data/third_party/upb/upb/reflection.c +2 -159
- data/third_party/upb/upb/reflection.h +2 -112
- data/third_party/upb/upb/status.c +86 -0
- data/third_party/upb/upb/status.h +66 -0
- data/third_party/upb/upb/table.c +2 -2
- data/third_party/upb/upb/table_internal.h +3 -352
- data/third_party/upb/upb/text_encode.c +3 -2
- data/third_party/upb/upb/upb.c +4 -290
- data/third_party/upb/upb/upb.h +7 -196
- metadata +117 -51
- data/src/core/ext/filters/client_channel/lb_policy_factory.h +0 -50
- data/src/core/ext/filters/client_channel/lb_policy_registry.cc +0 -190
- data/src/core/ext/filters/client_channel/lb_policy_registry.h +0 -70
- data/src/core/ext/filters/client_channel/proxy_mapper_registry.cc +0 -90
- data/src/core/ext/filters/client_channel/proxy_mapper_registry.h +0 -55
- data/src/core/ext/xds/certificate_provider_registry.cc +0 -103
- data/src/core/ext/xds/certificate_provider_registry.h +0 -59
- data/src/core/lib/event_engine/iomgr_engine/thread_pool.cc +0 -123
- data/src/core/lib/event_engine/iomgr_engine/thread_pool.h +0 -70
- data/src/core/lib/event_engine/promise.h +0 -69
- data/src/core/lib/gpr/env_windows.cc +0 -74
- data/src/core/lib/gpr/string_windows.h +0 -32
- data/src/core/lib/iomgr/error_internal.h +0 -66
- data/src/core/lib/iomgr/executor/mpmcqueue.cc +0 -182
- data/src/core/lib/iomgr/executor/mpmcqueue.h +0 -171
- data/src/core/lib/iomgr/executor/threadpool.cc +0 -136
- data/src/core/lib/iomgr/executor/threadpool.h +0 -150
- data/src/core/lib/iomgr/time_averaged_stats.cc +0 -64
- data/src/core/lib/iomgr/time_averaged_stats.h +0 -72
- data/src/core/lib/profiling/basic_timers.cc +0 -295
- data/src/core/lib/profiling/stap_timers.cc +0 -50
- data/src/core/lib/profiling/timers.h +0 -94
- data/src/core/lib/promise/detail/switch.h +0 -1455
@@ -21,14 +21,15 @@
|
|
21
21
|
#include <stdint.h>
|
22
22
|
|
23
23
|
#include <set>
|
24
|
-
#include <type_traits>
|
25
24
|
#include <utility>
|
26
25
|
|
27
26
|
#include "absl/memory/memory.h"
|
28
27
|
#include "absl/status/status.h"
|
28
|
+
#include "absl/status/statusor.h"
|
29
29
|
#include "absl/strings/str_cat.h"
|
30
30
|
#include "absl/strings/str_format.h"
|
31
31
|
#include "absl/strings/str_join.h"
|
32
|
+
#include "absl/strings/strip.h"
|
32
33
|
#include "envoy/config/core/v3/address.upb.h"
|
33
34
|
#include "envoy/config/core/v3/base.upb.h"
|
34
35
|
#include "envoy/config/core/v3/config_source.upb.h"
|
@@ -49,6 +50,7 @@
|
|
49
50
|
|
50
51
|
#include <grpc/support/log.h>
|
51
52
|
|
53
|
+
#include "src/core/ext/xds/upb_utils.h"
|
52
54
|
#include "src/core/ext/xds/xds_common_types.h"
|
53
55
|
#include "src/core/ext/xds/xds_resource_type.h"
|
54
56
|
#include "src/core/lib/address_utils/parse_address.h"
|
@@ -59,7 +61,6 @@
|
|
59
61
|
#include "src/core/lib/iomgr/error.h"
|
60
62
|
#include "src/core/lib/iomgr/sockaddr.h"
|
61
63
|
#include "src/core/lib/json/json.h"
|
62
|
-
#include "src/core/lib/transport/error_utils.h"
|
63
64
|
|
64
65
|
namespace grpc_core {
|
65
66
|
|
@@ -270,7 +271,7 @@ std::string XdsListenerResource::ToString() const {
|
|
270
271
|
namespace {
|
271
272
|
|
272
273
|
void MaybeLogHttpConnectionManager(
|
273
|
-
const
|
274
|
+
const XdsResourceType::DecodeContext& context,
|
274
275
|
const envoy_extensions_filters_network_http_connection_manager_v3_HttpConnectionManager*
|
275
276
|
http_connection_manager_config) {
|
276
277
|
if (GRPC_TRACE_FLAG_ENABLED(*context.tracer) &&
|
@@ -286,25 +287,25 @@ void MaybeLogHttpConnectionManager(
|
|
286
287
|
}
|
287
288
|
}
|
288
289
|
|
289
|
-
|
290
|
-
|
290
|
+
absl::StatusOr<XdsListenerResource::HttpConnectionManager>
|
291
|
+
HttpConnectionManagerParse(
|
292
|
+
bool is_client, const XdsResourceType::DecodeContext& context,
|
291
293
|
const envoy_extensions_filters_network_http_connection_manager_v3_HttpConnectionManager*
|
292
294
|
http_connection_manager_proto,
|
293
|
-
bool is_v2
|
294
|
-
XdsListenerResource::HttpConnectionManager* http_connection_manager) {
|
295
|
+
bool is_v2) {
|
295
296
|
MaybeLogHttpConnectionManager(context, http_connection_manager_proto);
|
297
|
+
std::vector<std::string> errors;
|
298
|
+
XdsListenerResource::HttpConnectionManager http_connection_manager;
|
296
299
|
// NACK a non-zero `xff_num_trusted_hops` and a `non-empty
|
297
300
|
// original_ip_detection_extensions` as mentioned in
|
298
301
|
// https://github.com/grpc/proposal/blob/master/A41-xds-rbac.md
|
299
302
|
if (envoy_extensions_filters_network_http_connection_manager_v3_HttpConnectionManager_xff_num_trusted_hops(
|
300
303
|
http_connection_manager_proto) != 0) {
|
301
|
-
|
302
|
-
"'xff_num_trusted_hops' must be zero");
|
304
|
+
errors.emplace_back("'xff_num_trusted_hops' must be zero");
|
303
305
|
}
|
304
306
|
if (envoy_extensions_filters_network_http_connection_manager_v3_HttpConnectionManager_has_original_ip_detection_extensions(
|
305
307
|
http_connection_manager_proto)) {
|
306
|
-
|
307
|
-
"'original_ip_detection_extensions' must be empty");
|
308
|
+
errors.emplace_back("'original_ip_detection_extensions' must be empty");
|
308
309
|
}
|
309
310
|
// Obtain max_stream_duration from Http Protocol Options.
|
310
311
|
const envoy_config_core_v3_HttpProtocolOptions* options =
|
@@ -314,7 +315,7 @@ grpc_error_handle HttpConnectionManagerParse(
|
|
314
315
|
const google_protobuf_Duration* duration =
|
315
316
|
envoy_config_core_v3_HttpProtocolOptions_max_stream_duration(options);
|
316
317
|
if (duration != nullptr) {
|
317
|
-
http_connection_manager
|
318
|
+
http_connection_manager.http_max_stream_duration =
|
318
319
|
ParseDuration(duration);
|
319
320
|
}
|
320
321
|
}
|
@@ -331,12 +332,12 @@ grpc_error_handle HttpConnectionManagerParse(
|
|
331
332
|
envoy_extensions_filters_network_http_connection_manager_v3_HttpFilter_name(
|
332
333
|
http_filter));
|
333
334
|
if (name.empty()) {
|
334
|
-
|
335
|
-
|
335
|
+
errors.emplace_back(absl::StrCat("empty filter name at index ", i));
|
336
|
+
continue;
|
336
337
|
}
|
337
338
|
if (names_seen.find(name) != names_seen.end()) {
|
338
|
-
|
339
|
-
|
339
|
+
errors.emplace_back(absl::StrCat("duplicate HTTP filter name: ", name));
|
340
|
+
continue;
|
340
341
|
}
|
341
342
|
names_seen.insert(name);
|
342
343
|
const bool is_optional =
|
@@ -346,56 +347,64 @@ grpc_error_handle HttpConnectionManagerParse(
|
|
346
347
|
envoy_extensions_filters_network_http_connection_manager_v3_HttpFilter_typed_config(
|
347
348
|
http_filter);
|
348
349
|
if (any == nullptr) {
|
349
|
-
if (is_optional)
|
350
|
-
|
351
|
-
|
350
|
+
if (!is_optional) {
|
351
|
+
errors.emplace_back(absl::StrCat(
|
352
|
+
"no filter config specified for filter name ", name));
|
353
|
+
}
|
354
|
+
continue;
|
352
355
|
}
|
353
356
|
auto filter_type = ExtractExtensionTypeName(context, any);
|
354
357
|
if (!filter_type.ok()) {
|
355
|
-
|
358
|
+
errors.emplace_back(absl::StrCat("filter name ", name, ": ",
|
359
|
+
filter_type.status().message()));
|
360
|
+
continue;
|
356
361
|
}
|
357
362
|
const XdsHttpFilterImpl* filter_impl =
|
358
363
|
XdsHttpFilterRegistry::GetFilterForType(filter_type->type);
|
359
364
|
if (filter_impl == nullptr) {
|
360
|
-
if (is_optional)
|
361
|
-
|
362
|
-
|
365
|
+
if (!is_optional) {
|
366
|
+
errors.emplace_back(absl::StrCat(
|
367
|
+
"no filter registered for config type ", filter_type->type));
|
368
|
+
}
|
369
|
+
continue;
|
363
370
|
}
|
364
371
|
if ((is_client && !filter_impl->IsSupportedOnClients()) ||
|
365
372
|
(!is_client && !filter_impl->IsSupportedOnServers())) {
|
366
|
-
if (is_optional)
|
367
|
-
|
368
|
-
|
369
|
-
|
373
|
+
if (!is_optional) {
|
374
|
+
errors.emplace_back(absl::StrFormat(
|
375
|
+
"Filter %s is not supported on %s", filter_type->type,
|
376
|
+
is_client ? "clients" : "servers"));
|
377
|
+
}
|
378
|
+
continue;
|
370
379
|
}
|
371
380
|
absl::StatusOr<XdsHttpFilterImpl::FilterConfig> filter_config =
|
372
381
|
filter_impl->GenerateFilterConfig(google_protobuf_Any_value(any),
|
373
382
|
context.arena);
|
374
383
|
if (!filter_config.ok()) {
|
375
|
-
|
384
|
+
errors.emplace_back(absl::StrCat(
|
376
385
|
"filter config for type ", filter_type->type,
|
377
386
|
" failed to parse: ", StatusToString(filter_config.status())));
|
387
|
+
continue;
|
378
388
|
}
|
379
|
-
http_connection_manager
|
389
|
+
http_connection_manager.http_filters.emplace_back(
|
380
390
|
XdsListenerResource::HttpConnectionManager::HttpFilter{
|
381
391
|
std::string(name), std::move(*filter_config)});
|
382
392
|
}
|
383
|
-
if (http_connection_manager
|
384
|
-
|
385
|
-
"Expected at least one HTTP filter");
|
393
|
+
if (http_connection_manager.http_filters.empty()) {
|
394
|
+
errors.emplace_back("Expected at least one HTTP filter");
|
386
395
|
}
|
387
396
|
// Make sure that the last filter is terminal and non-last filters are
|
388
397
|
// non-terminal. Note that this check is being performed in a separate loop
|
389
398
|
// to take care of the case where there are two terminal filters in the list
|
390
399
|
// out of which only one gets added in the final list.
|
391
|
-
for (const auto& http_filter : http_connection_manager
|
400
|
+
for (const auto& http_filter : http_connection_manager.http_filters) {
|
392
401
|
const XdsHttpFilterImpl* filter_impl =
|
393
402
|
XdsHttpFilterRegistry::GetFilterForType(
|
394
403
|
http_filter.config.config_proto_type_name);
|
395
|
-
if (&http_filter != &http_connection_manager
|
404
|
+
if (&http_filter != &http_connection_manager.http_filters.back()) {
|
396
405
|
// Filters before the last filter must not be terminal.
|
397
406
|
if (filter_impl->IsTerminalFilter()) {
|
398
|
-
|
407
|
+
errors.emplace_back(
|
399
408
|
absl::StrCat("terminal filter for config type ",
|
400
409
|
http_filter.config.config_proto_type_name,
|
401
410
|
" must be the last filter in the chain"));
|
@@ -403,7 +412,7 @@ grpc_error_handle HttpConnectionManagerParse(
|
|
403
412
|
} else {
|
404
413
|
// The last filter must be terminal.
|
405
414
|
if (!filter_impl->IsTerminalFilter()) {
|
406
|
-
|
415
|
+
errors.emplace_back(
|
407
416
|
absl::StrCat("non-terminal filter for config type ",
|
408
417
|
http_filter.config.config_proto_type_name,
|
409
418
|
" is the last filter in the chain"));
|
@@ -415,7 +424,7 @@ grpc_error_handle HttpConnectionManagerParse(
|
|
415
424
|
// router filter without actually looking at the config. This ensures
|
416
425
|
// that the right thing happens in the xds resolver without having
|
417
426
|
// to expose whether the resource we received was v2 or v3.
|
418
|
-
http_connection_manager
|
427
|
+
http_connection_manager.http_filters.emplace_back(
|
419
428
|
XdsListenerResource::HttpConnectionManager::HttpFilter{
|
420
429
|
"router", {kXdsHttpRouterFilterConfigName, Json()}});
|
421
430
|
}
|
@@ -429,261 +438,290 @@ grpc_error_handle HttpConnectionManagerParse(
|
|
429
438
|
const envoy_config_route_v3_RouteConfiguration* route_config =
|
430
439
|
envoy_extensions_filters_network_http_connection_manager_v3_HttpConnectionManager_route_config(
|
431
440
|
http_connection_manager_proto);
|
432
|
-
XdsRouteConfigResource
|
433
|
-
|
434
|
-
|
435
|
-
|
436
|
-
|
437
|
-
|
438
|
-
}
|
439
|
-
|
440
|
-
|
441
|
-
|
442
|
-
|
443
|
-
|
444
|
-
|
445
|
-
|
446
|
-
|
447
|
-
|
448
|
-
|
449
|
-
|
450
|
-
|
451
|
-
|
452
|
-
|
453
|
-
|
454
|
-
|
455
|
-
|
456
|
-
|
457
|
-
|
458
|
-
|
459
|
-
|
441
|
+
auto rds_update = XdsRouteConfigResource::Parse(context, route_config);
|
442
|
+
if (!rds_update.ok()) {
|
443
|
+
errors.emplace_back(rds_update.status().message());
|
444
|
+
} else {
|
445
|
+
http_connection_manager.rds_update = std::move(*rds_update);
|
446
|
+
}
|
447
|
+
} else {
|
448
|
+
// Validate that RDS must be used to get the route_config dynamically.
|
449
|
+
const envoy_extensions_filters_network_http_connection_manager_v3_Rds* rds =
|
450
|
+
envoy_extensions_filters_network_http_connection_manager_v3_HttpConnectionManager_rds(
|
451
|
+
http_connection_manager_proto);
|
452
|
+
if (rds == nullptr) {
|
453
|
+
return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
454
|
+
"HttpConnectionManager neither has inlined route_config nor RDS.");
|
455
|
+
}
|
456
|
+
// Check that the ConfigSource specifies ADS.
|
457
|
+
const envoy_config_core_v3_ConfigSource* config_source =
|
458
|
+
envoy_extensions_filters_network_http_connection_manager_v3_Rds_config_source(
|
459
|
+
rds);
|
460
|
+
if (config_source == nullptr) {
|
461
|
+
errors.emplace_back(
|
462
|
+
"HttpConnectionManager missing config_source for RDS.");
|
463
|
+
} else if (!envoy_config_core_v3_ConfigSource_has_ads(config_source) &&
|
464
|
+
!envoy_config_core_v3_ConfigSource_has_self(config_source)) {
|
465
|
+
errors.emplace_back(
|
466
|
+
"HttpConnectionManager ConfigSource for RDS does not specify ADS "
|
467
|
+
"or SELF.");
|
468
|
+
} else {
|
469
|
+
// Get the route_config_name.
|
470
|
+
http_connection_manager.route_config_name = UpbStringToStdString(
|
471
|
+
envoy_extensions_filters_network_http_connection_manager_v3_Rds_route_config_name(
|
472
|
+
rds));
|
473
|
+
}
|
460
474
|
}
|
461
|
-
// Get the route_config_name.
|
462
|
-
http_connection_manager->route_config_name = UpbStringToStdString(
|
463
|
-
envoy_extensions_filters_network_http_connection_manager_v3_Rds_route_config_name(
|
464
|
-
rds));
|
465
475
|
}
|
466
|
-
|
476
|
+
// Return result.
|
477
|
+
if (!errors.empty()) {
|
478
|
+
return absl::InvalidArgumentError(
|
479
|
+
absl::StrCat("Errors parsing HttpConnectionManager config: [",
|
480
|
+
absl::StrJoin(errors, "; "), "]"));
|
481
|
+
}
|
482
|
+
return http_connection_manager;
|
467
483
|
}
|
468
484
|
|
469
|
-
|
470
|
-
const
|
471
|
-
const envoy_config_listener_v3_ApiListener* api_listener, bool is_v2
|
472
|
-
XdsListenerResource* lds_update) {
|
473
|
-
lds_update->type = XdsListenerResource::ListenerType::kHttpApiListener;
|
485
|
+
absl::StatusOr<XdsListenerResource> LdsResourceParseClient(
|
486
|
+
const XdsResourceType::DecodeContext& context,
|
487
|
+
const envoy_config_listener_v3_ApiListener* api_listener, bool is_v2) {
|
474
488
|
const upb_StringView encoded_api_listener = google_protobuf_Any_value(
|
475
489
|
envoy_config_listener_v3_ApiListener_api_listener(api_listener));
|
476
490
|
const auto* http_connection_manager =
|
477
491
|
envoy_extensions_filters_network_http_connection_manager_v3_HttpConnectionManager_parse(
|
478
492
|
encoded_api_listener.data, encoded_api_listener.size, context.arena);
|
479
493
|
if (http_connection_manager == nullptr) {
|
480
|
-
return
|
494
|
+
return absl::InvalidArgumentError(
|
481
495
|
"Could not parse HttpConnectionManager config from ApiListener");
|
482
496
|
}
|
483
|
-
|
484
|
-
|
485
|
-
|
497
|
+
auto hcm = HttpConnectionManagerParse(true /* is_client */, context,
|
498
|
+
http_connection_manager, is_v2);
|
499
|
+
if (!hcm.ok()) return hcm.status();
|
500
|
+
XdsListenerResource lds_update;
|
501
|
+
lds_update.type = XdsListenerResource::ListenerType::kHttpApiListener;
|
502
|
+
lds_update.http_connection_manager = std::move(*hcm);
|
503
|
+
return lds_update;
|
486
504
|
}
|
487
505
|
|
488
|
-
|
489
|
-
|
490
|
-
const
|
491
|
-
|
492
|
-
|
493
|
-
envoy_config_core_v3_TransportSocket_name(transport_socket));
|
494
|
-
if (name != "envoy.transport_sockets.tls") {
|
495
|
-
return GRPC_ERROR_CREATE_FROM_CPP_STRING(
|
496
|
-
absl::StrCat("Unrecognized transport socket: ", name));
|
497
|
-
}
|
498
|
-
auto* typed_config =
|
506
|
+
absl::StatusOr<XdsListenerResource::DownstreamTlsContext>
|
507
|
+
DownstreamTlsContextParse(
|
508
|
+
const XdsResourceType::DecodeContext& context,
|
509
|
+
const envoy_config_core_v3_TransportSocket* transport_socket) {
|
510
|
+
const auto* typed_config =
|
499
511
|
envoy_config_core_v3_TransportSocket_typed_config(transport_socket);
|
500
|
-
|
501
|
-
|
502
|
-
|
503
|
-
|
504
|
-
|
505
|
-
|
506
|
-
|
507
|
-
|
508
|
-
|
509
|
-
|
510
|
-
|
511
|
-
|
512
|
-
|
513
|
-
|
514
|
-
|
515
|
-
|
516
|
-
|
517
|
-
|
518
|
-
|
519
|
-
|
520
|
-
|
521
|
-
|
522
|
-
|
523
|
-
|
524
|
-
|
525
|
-
|
526
|
-
|
527
|
-
|
528
|
-
|
529
|
-
|
530
|
-
|
531
|
-
if (require_sni != nullptr &&
|
532
|
-
google_protobuf_BoolValue_value(require_sni)) {
|
533
|
-
errors.push_back(
|
534
|
-
GRPC_ERROR_CREATE_FROM_STATIC_STRING("require_sni: unsupported"));
|
535
|
-
}
|
536
|
-
if (envoy_extensions_transport_sockets_tls_v3_DownstreamTlsContext_ocsp_staple_policy(
|
537
|
-
downstream_tls_context_proto) !=
|
538
|
-
envoy_extensions_transport_sockets_tls_v3_DownstreamTlsContext_LENIENT_STAPLING) {
|
539
|
-
errors.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
540
|
-
"ocsp_staple_policy: Only LENIENT_STAPLING supported"));
|
512
|
+
if (typed_config == nullptr) {
|
513
|
+
return absl::InvalidArgumentError("transport socket typed config unset");
|
514
|
+
}
|
515
|
+
absl::string_view type_url = absl::StripPrefix(
|
516
|
+
UpbStringToAbsl(google_protobuf_Any_type_url(typed_config)),
|
517
|
+
"type.googleapis.com/");
|
518
|
+
if (type_url !=
|
519
|
+
"envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext") {
|
520
|
+
return absl::InvalidArgumentError(
|
521
|
+
absl::StrCat("Unrecognized transport socket type: ", type_url));
|
522
|
+
}
|
523
|
+
const upb_StringView encoded_downstream_tls_context =
|
524
|
+
google_protobuf_Any_value(typed_config);
|
525
|
+
const auto* downstream_tls_context_proto =
|
526
|
+
envoy_extensions_transport_sockets_tls_v3_DownstreamTlsContext_parse(
|
527
|
+
encoded_downstream_tls_context.data,
|
528
|
+
encoded_downstream_tls_context.size, context.arena);
|
529
|
+
if (downstream_tls_context_proto == nullptr) {
|
530
|
+
return absl::InvalidArgumentError("Can't decode downstream tls context.");
|
531
|
+
}
|
532
|
+
std::vector<std::string> errors;
|
533
|
+
XdsListenerResource::DownstreamTlsContext downstream_tls_context;
|
534
|
+
auto* common_tls_context =
|
535
|
+
envoy_extensions_transport_sockets_tls_v3_DownstreamTlsContext_common_tls_context(
|
536
|
+
downstream_tls_context_proto);
|
537
|
+
if (common_tls_context != nullptr) {
|
538
|
+
auto common_context = CommonTlsContext::Parse(context, common_tls_context);
|
539
|
+
if (!common_context.ok()) {
|
540
|
+
errors.emplace_back(common_context.status().message());
|
541
|
+
} else {
|
542
|
+
downstream_tls_context.common_tls_context = std::move(*common_context);
|
541
543
|
}
|
542
544
|
}
|
543
|
-
|
545
|
+
auto* require_client_certificate =
|
546
|
+
envoy_extensions_transport_sockets_tls_v3_DownstreamTlsContext_require_client_certificate(
|
547
|
+
downstream_tls_context_proto);
|
548
|
+
if (require_client_certificate != nullptr) {
|
549
|
+
downstream_tls_context.require_client_certificate =
|
550
|
+
google_protobuf_BoolValue_value(require_client_certificate);
|
551
|
+
}
|
552
|
+
auto* require_sni =
|
553
|
+
envoy_extensions_transport_sockets_tls_v3_DownstreamTlsContext_require_sni(
|
554
|
+
downstream_tls_context_proto);
|
555
|
+
if (require_sni != nullptr && google_protobuf_BoolValue_value(require_sni)) {
|
556
|
+
errors.emplace_back("require_sni: unsupported");
|
557
|
+
}
|
558
|
+
if (envoy_extensions_transport_sockets_tls_v3_DownstreamTlsContext_ocsp_staple_policy(
|
559
|
+
downstream_tls_context_proto) !=
|
560
|
+
envoy_extensions_transport_sockets_tls_v3_DownstreamTlsContext_LENIENT_STAPLING) {
|
561
|
+
errors.emplace_back("ocsp_staple_policy: Only LENIENT_STAPLING supported");
|
562
|
+
}
|
563
|
+
if (downstream_tls_context.common_tls_context
|
544
564
|
.tls_certificate_provider_instance.instance_name.empty()) {
|
545
|
-
errors.
|
565
|
+
errors.emplace_back(
|
546
566
|
"TLS configuration provided but no "
|
547
|
-
"tls_certificate_provider_instance found.")
|
567
|
+
"tls_certificate_provider_instance found.");
|
548
568
|
}
|
549
|
-
if (downstream_tls_context
|
550
|
-
downstream_tls_context
|
569
|
+
if (downstream_tls_context.require_client_certificate &&
|
570
|
+
downstream_tls_context.common_tls_context.certificate_validation_context
|
551
571
|
.ca_certificate_provider_instance.instance_name.empty()) {
|
552
|
-
errors.
|
572
|
+
errors.emplace_back(
|
553
573
|
"TLS configuration requires client certificates but no certificate "
|
554
|
-
"provider instance specified for validation.")
|
574
|
+
"provider instance specified for validation.");
|
555
575
|
}
|
556
|
-
if (!downstream_tls_context
|
576
|
+
if (!downstream_tls_context.common_tls_context.certificate_validation_context
|
557
577
|
.match_subject_alt_names.empty()) {
|
558
|
-
errors.
|
559
|
-
"match_subject_alt_names not supported on servers"));
|
578
|
+
errors.emplace_back("match_subject_alt_names not supported on servers");
|
560
579
|
}
|
561
|
-
|
562
|
-
|
580
|
+
// Return result.
|
581
|
+
if (!errors.empty()) {
|
582
|
+
return absl::InvalidArgumentError(
|
583
|
+
absl::StrCat("Errors parsing DownstreamTlsContext: [",
|
584
|
+
absl::StrJoin(errors, "; "), "]"));
|
585
|
+
}
|
586
|
+
return downstream_tls_context;
|
563
587
|
}
|
564
588
|
|
565
|
-
|
566
|
-
const envoy_config_core_v3_CidrRange* cidr_range_proto
|
567
|
-
|
589
|
+
absl::StatusOr<XdsListenerResource::FilterChainMap::CidrRange> CidrRangeParse(
|
590
|
+
const envoy_config_core_v3_CidrRange* cidr_range_proto) {
|
591
|
+
XdsListenerResource::FilterChainMap::CidrRange cidr_range;
|
568
592
|
std::string address_prefix = UpbStringToStdString(
|
569
593
|
envoy_config_core_v3_CidrRange_address_prefix(cidr_range_proto));
|
570
|
-
|
571
|
-
|
572
|
-
|
573
|
-
cidr_range
|
594
|
+
auto address = StringToSockaddr(address_prefix, /*port=*/0);
|
595
|
+
if (!address.ok()) return address.status();
|
596
|
+
cidr_range.address = *address;
|
597
|
+
cidr_range.prefix_len = 0;
|
574
598
|
auto* prefix_len_proto =
|
575
599
|
envoy_config_core_v3_CidrRange_prefix_len(cidr_range_proto);
|
576
600
|
if (prefix_len_proto != nullptr) {
|
577
|
-
cidr_range
|
601
|
+
cidr_range.prefix_len = std::min(
|
578
602
|
google_protobuf_UInt32Value_value(prefix_len_proto),
|
579
|
-
(reinterpret_cast<const grpc_sockaddr*>(cidr_range
|
603
|
+
(reinterpret_cast<const grpc_sockaddr*>(cidr_range.address.addr))
|
580
604
|
->sa_family == GRPC_AF_INET
|
581
605
|
? uint32_t(32)
|
582
606
|
: uint32_t(128));
|
583
607
|
}
|
584
608
|
// Normalize the network address by masking it with prefix_len
|
585
|
-
grpc_sockaddr_mask_bits(&cidr_range
|
586
|
-
return
|
609
|
+
grpc_sockaddr_mask_bits(&cidr_range.address, cidr_range.prefix_len);
|
610
|
+
return cidr_range;
|
587
611
|
}
|
588
612
|
|
589
|
-
|
590
|
-
const envoy_config_listener_v3_FilterChainMatch* filter_chain_match_proto
|
591
|
-
|
613
|
+
absl::StatusOr<FilterChain::FilterChainMatch> FilterChainMatchParse(
|
614
|
+
const envoy_config_listener_v3_FilterChainMatch* filter_chain_match_proto) {
|
615
|
+
std::vector<std::string> errors;
|
616
|
+
FilterChain::FilterChainMatch filter_chain_match;
|
592
617
|
auto* destination_port =
|
593
618
|
envoy_config_listener_v3_FilterChainMatch_destination_port(
|
594
619
|
filter_chain_match_proto);
|
595
620
|
if (destination_port != nullptr) {
|
596
|
-
filter_chain_match
|
621
|
+
filter_chain_match.destination_port =
|
597
622
|
google_protobuf_UInt32Value_value(destination_port);
|
598
623
|
}
|
599
624
|
size_t size = 0;
|
600
625
|
auto* prefix_ranges = envoy_config_listener_v3_FilterChainMatch_prefix_ranges(
|
601
626
|
filter_chain_match_proto, &size);
|
602
|
-
filter_chain_match
|
627
|
+
filter_chain_match.prefix_ranges.reserve(size);
|
603
628
|
for (size_t i = 0; i < size; i++) {
|
604
|
-
|
605
|
-
|
606
|
-
|
607
|
-
|
629
|
+
auto cidr_range = CidrRangeParse(prefix_ranges[i]);
|
630
|
+
if (!cidr_range.ok()) {
|
631
|
+
errors.emplace_back(absl::StrCat("prefix range ", i, ": ",
|
632
|
+
cidr_range.status().message()));
|
633
|
+
continue;
|
634
|
+
}
|
635
|
+
filter_chain_match.prefix_ranges.push_back(*cidr_range);
|
608
636
|
}
|
609
|
-
filter_chain_match
|
637
|
+
filter_chain_match.source_type =
|
610
638
|
static_cast<XdsListenerResource::FilterChainMap::ConnectionSourceType>(
|
611
639
|
envoy_config_listener_v3_FilterChainMatch_source_type(
|
612
640
|
filter_chain_match_proto));
|
613
641
|
auto* source_prefix_ranges =
|
614
642
|
envoy_config_listener_v3_FilterChainMatch_source_prefix_ranges(
|
615
643
|
filter_chain_match_proto, &size);
|
616
|
-
filter_chain_match
|
644
|
+
filter_chain_match.source_prefix_ranges.reserve(size);
|
617
645
|
for (size_t i = 0; i < size; i++) {
|
618
|
-
|
619
|
-
|
620
|
-
|
621
|
-
|
622
|
-
|
646
|
+
auto cidr_range = CidrRangeParse(source_prefix_ranges[i]);
|
647
|
+
if (!cidr_range.ok()) {
|
648
|
+
errors.emplace_back(absl::StrCat("source prefix range ", i, ": ",
|
649
|
+
cidr_range.status().message()));
|
650
|
+
continue;
|
651
|
+
}
|
652
|
+
filter_chain_match.source_prefix_ranges.push_back(*cidr_range);
|
623
653
|
}
|
624
654
|
auto* source_ports = envoy_config_listener_v3_FilterChainMatch_source_ports(
|
625
655
|
filter_chain_match_proto, &size);
|
626
|
-
filter_chain_match
|
656
|
+
filter_chain_match.source_ports.reserve(size);
|
627
657
|
for (size_t i = 0; i < size; i++) {
|
628
|
-
filter_chain_match
|
658
|
+
filter_chain_match.source_ports.push_back(source_ports[i]);
|
629
659
|
}
|
630
660
|
auto* server_names = envoy_config_listener_v3_FilterChainMatch_server_names(
|
631
661
|
filter_chain_match_proto, &size);
|
632
662
|
for (size_t i = 0; i < size; i++) {
|
633
|
-
filter_chain_match
|
663
|
+
filter_chain_match.server_names.push_back(
|
634
664
|
UpbStringToStdString(server_names[i]));
|
635
665
|
}
|
636
|
-
filter_chain_match
|
666
|
+
filter_chain_match.transport_protocol = UpbStringToStdString(
|
637
667
|
envoy_config_listener_v3_FilterChainMatch_transport_protocol(
|
638
668
|
filter_chain_match_proto));
|
639
669
|
auto* application_protocols =
|
640
670
|
envoy_config_listener_v3_FilterChainMatch_application_protocols(
|
641
671
|
filter_chain_match_proto, &size);
|
642
672
|
for (size_t i = 0; i < size; i++) {
|
643
|
-
filter_chain_match
|
673
|
+
filter_chain_match.application_protocols.push_back(
|
644
674
|
UpbStringToStdString(application_protocols[i]));
|
645
675
|
}
|
646
|
-
|
676
|
+
// Return result.
|
677
|
+
if (!errors.empty()) {
|
678
|
+
return absl::InvalidArgumentError(
|
679
|
+
absl::StrCat("errors parsing filter chain match: [",
|
680
|
+
absl::StrJoin(errors, "; "), "]"));
|
681
|
+
}
|
682
|
+
return filter_chain_match;
|
647
683
|
}
|
648
684
|
|
649
|
-
|
650
|
-
const
|
651
|
-
const envoy_config_listener_v3_FilterChain* filter_chain_proto,
|
652
|
-
|
653
|
-
|
685
|
+
absl::StatusOr<FilterChain> FilterChainParse(
|
686
|
+
const XdsResourceType::DecodeContext& context,
|
687
|
+
const envoy_config_listener_v3_FilterChain* filter_chain_proto,
|
688
|
+
bool is_v2) {
|
689
|
+
FilterChain filter_chain;
|
690
|
+
std::vector<std::string> errors;
|
654
691
|
auto* filter_chain_match =
|
655
692
|
envoy_config_listener_v3_FilterChain_filter_chain_match(
|
656
693
|
filter_chain_proto);
|
657
694
|
if (filter_chain_match != nullptr) {
|
658
|
-
|
659
|
-
|
660
|
-
|
695
|
+
auto match = FilterChainMatchParse(filter_chain_match);
|
696
|
+
if (!match.ok()) {
|
697
|
+
errors.emplace_back(match.status().message());
|
698
|
+
} else {
|
699
|
+
filter_chain.filter_chain_match = std::move(*match);
|
700
|
+
}
|
661
701
|
}
|
662
|
-
filter_chain
|
702
|
+
filter_chain.filter_chain_data =
|
663
703
|
std::make_shared<XdsListenerResource::FilterChainData>();
|
664
704
|
// Parse the filters list. Currently we only support HttpConnectionManager.
|
665
705
|
size_t size = 0;
|
666
706
|
auto* filters =
|
667
707
|
envoy_config_listener_v3_FilterChain_filters(filter_chain_proto, &size);
|
668
708
|
if (size != 1) {
|
669
|
-
errors.push_back(
|
709
|
+
errors.push_back(
|
670
710
|
"FilterChain should have exactly one filter: HttpConnectionManager; no "
|
671
|
-
"other filter is supported at the moment")
|
711
|
+
"other filter is supported at the moment");
|
672
712
|
} else {
|
673
713
|
auto* typed_config =
|
674
714
|
envoy_config_listener_v3_Filter_typed_config(filters[0]);
|
675
715
|
if (typed_config == nullptr) {
|
676
|
-
errors.
|
677
|
-
"No typed_config found in filter."));
|
716
|
+
errors.emplace_back("No typed_config found in filter.");
|
678
717
|
} else {
|
679
|
-
absl::string_view type_url =
|
680
|
-
UpbStringToAbsl(google_protobuf_Any_type_url(typed_config))
|
718
|
+
absl::string_view type_url = absl::StripPrefix(
|
719
|
+
UpbStringToAbsl(google_protobuf_Any_type_url(typed_config)),
|
720
|
+
"type.googleapis.com/");
|
681
721
|
if (type_url !=
|
682
|
-
"type.googleapis.com/"
|
683
722
|
"envoy.extensions.filters.network.http_connection_manager.v3."
|
684
723
|
"HttpConnectionManager") {
|
685
|
-
errors.
|
686
|
-
absl::StrCat("Unsupported filter type ", type_url)));
|
724
|
+
errors.emplace_back(absl::StrCat("Unsupported filter type ", type_url));
|
687
725
|
} else {
|
688
726
|
const upb_StringView encoded_http_connection_manager =
|
689
727
|
google_protobuf_Any_value(typed_config);
|
@@ -692,14 +730,18 @@ grpc_error_handle FilterChainParse(
|
|
692
730
|
encoded_http_connection_manager.data,
|
693
731
|
encoded_http_connection_manager.size, context.arena);
|
694
732
|
if (http_connection_manager == nullptr) {
|
695
|
-
errors.
|
733
|
+
errors.emplace_back(
|
696
734
|
"Could not parse HttpConnectionManager config from filter "
|
697
|
-
"typed_config")
|
735
|
+
"typed_config");
|
698
736
|
} else {
|
699
|
-
|
700
|
-
|
701
|
-
|
702
|
-
|
737
|
+
auto hcm = HttpConnectionManagerParse(
|
738
|
+
/*is_client=*/false, context, http_connection_manager, is_v2);
|
739
|
+
if (!hcm.ok()) {
|
740
|
+
errors.emplace_back(hcm.status().message());
|
741
|
+
} else {
|
742
|
+
filter_chain.filter_chain_data->http_connection_manager =
|
743
|
+
std::move(*hcm);
|
744
|
+
}
|
703
745
|
}
|
704
746
|
}
|
705
747
|
}
|
@@ -707,36 +749,42 @@ grpc_error_handle FilterChainParse(
|
|
707
749
|
auto* transport_socket =
|
708
750
|
envoy_config_listener_v3_FilterChain_transport_socket(filter_chain_proto);
|
709
751
|
if (transport_socket != nullptr) {
|
710
|
-
|
711
|
-
context, transport_socket
|
712
|
-
|
713
|
-
|
752
|
+
auto downstream_context =
|
753
|
+
DownstreamTlsContextParse(context, transport_socket);
|
754
|
+
if (!downstream_context.ok()) {
|
755
|
+
errors.emplace_back(downstream_context.status().message());
|
756
|
+
} else {
|
757
|
+
filter_chain.filter_chain_data->downstream_tls_context =
|
758
|
+
std::move(*downstream_context);
|
759
|
+
}
|
760
|
+
}
|
761
|
+
// Return result.
|
762
|
+
if (!errors.empty()) {
|
763
|
+
return absl::InvalidArgumentError(absl::StrCat(
|
764
|
+
"Errors parsing FilterChain: [", absl::StrJoin(errors, "; "), "]"));
|
714
765
|
}
|
715
|
-
return
|
766
|
+
return filter_chain;
|
716
767
|
}
|
717
768
|
|
718
|
-
|
719
|
-
const envoy_config_core_v3_Address* address_proto
|
769
|
+
absl::StatusOr<std::string> AddressParse(
|
770
|
+
const envoy_config_core_v3_Address* address_proto) {
|
720
771
|
const auto* socket_address =
|
721
772
|
envoy_config_core_v3_Address_socket_address(address_proto);
|
722
773
|
if (socket_address == nullptr) {
|
723
|
-
return
|
724
|
-
"Address does not have socket_address");
|
774
|
+
return absl::InvalidArgumentError("Address does not have socket_address");
|
725
775
|
}
|
726
776
|
if (envoy_config_core_v3_SocketAddress_protocol(socket_address) !=
|
727
777
|
envoy_config_core_v3_SocketAddress_TCP) {
|
728
|
-
return
|
729
|
-
"SocketAddress protocol is not TCP");
|
778
|
+
return absl::InvalidArgumentError("SocketAddress protocol is not TCP");
|
730
779
|
}
|
731
780
|
uint32_t port = envoy_config_core_v3_SocketAddress_port_value(socket_address);
|
732
781
|
if (port > 65535) {
|
733
|
-
return
|
782
|
+
return absl::InvalidArgumentError("Invalid port");
|
734
783
|
}
|
735
|
-
|
784
|
+
return JoinHostPort(
|
736
785
|
UpbStringToAbsl(
|
737
786
|
envoy_config_core_v3_SocketAddress_address(socket_address)),
|
738
787
|
port);
|
739
|
-
return GRPC_ERROR_NONE;
|
740
788
|
}
|
741
789
|
|
742
790
|
// An intermediate map for filter chains that we create to validate the list of
|
@@ -755,37 +803,36 @@ struct InternalFilterChainMap {
|
|
755
803
|
DestinationIpMap destination_ip_map;
|
756
804
|
};
|
757
805
|
|
758
|
-
|
759
|
-
const FilterChain& filter_chain,
|
760
|
-
XdsListenerResource::FilterChainMap::SourcePortsMap* ports_map
|
761
|
-
uint32_t port) {
|
806
|
+
absl::Status AddFilterChainDataForSourcePort(
|
807
|
+
const FilterChain& filter_chain, uint32_t port,
|
808
|
+
XdsListenerResource::FilterChainMap::SourcePortsMap* ports_map) {
|
762
809
|
auto insert_result = ports_map->emplace(
|
763
810
|
port, XdsListenerResource::FilterChainMap::FilterChainDataSharedPtr{
|
764
811
|
filter_chain.filter_chain_data});
|
765
812
|
if (!insert_result.second) {
|
766
|
-
return
|
813
|
+
return absl::InvalidArgumentError(absl::StrCat(
|
767
814
|
"Duplicate matching rules detected when adding filter chain: ",
|
768
815
|
filter_chain.filter_chain_match.ToString()));
|
769
816
|
}
|
770
|
-
return
|
817
|
+
return absl::OkStatus();
|
771
818
|
}
|
772
819
|
|
773
|
-
|
820
|
+
absl::Status AddFilterChainDataForSourcePorts(
|
774
821
|
const FilterChain& filter_chain,
|
775
822
|
XdsListenerResource::FilterChainMap::SourcePortsMap* ports_map) {
|
776
823
|
if (filter_chain.filter_chain_match.source_ports.empty()) {
|
777
|
-
return AddFilterChainDataForSourcePort(filter_chain,
|
824
|
+
return AddFilterChainDataForSourcePort(filter_chain, 0, ports_map);
|
778
825
|
} else {
|
779
826
|
for (uint32_t port : filter_chain.filter_chain_match.source_ports) {
|
780
|
-
|
781
|
-
AddFilterChainDataForSourcePort(filter_chain,
|
782
|
-
if (!
|
827
|
+
absl::Status status =
|
828
|
+
AddFilterChainDataForSourcePort(filter_chain, port, ports_map);
|
829
|
+
if (!status.ok()) return status;
|
783
830
|
}
|
784
831
|
}
|
785
|
-
return
|
832
|
+
return absl::OkStatus();
|
786
833
|
}
|
787
834
|
|
788
|
-
|
835
|
+
absl::Status AddFilterChainDataForSourceIpRange(
|
789
836
|
const FilterChain& filter_chain,
|
790
837
|
InternalFilterChainMap::SourceIpMap* source_ip_map) {
|
791
838
|
if (filter_chain.filter_chain_match.source_prefix_ranges.empty()) {
|
@@ -797,24 +844,22 @@ grpc_error_handle AddFilterChainDataForSourceIpRange(
|
|
797
844
|
for (const auto& prefix_range :
|
798
845
|
filter_chain.filter_chain_match.source_prefix_ranges) {
|
799
846
|
auto addr_str = grpc_sockaddr_to_string(&prefix_range.address, false);
|
800
|
-
if (!addr_str.ok())
|
801
|
-
return GRPC_ERROR_CREATE_FROM_CPP_STRING(addr_str.status().ToString());
|
802
|
-
}
|
847
|
+
if (!addr_str.ok()) return addr_str.status();
|
803
848
|
auto insert_result = source_ip_map->emplace(
|
804
849
|
absl::StrCat(*addr_str, "/", prefix_range.prefix_len),
|
805
850
|
XdsListenerResource::FilterChainMap::SourceIp());
|
806
851
|
if (insert_result.second) {
|
807
852
|
insert_result.first->second.prefix_range.emplace(prefix_range);
|
808
853
|
}
|
809
|
-
|
854
|
+
absl::Status status = AddFilterChainDataForSourcePorts(
|
810
855
|
filter_chain, &insert_result.first->second.ports_map);
|
811
|
-
if (!
|
856
|
+
if (!status.ok()) return status;
|
812
857
|
}
|
813
858
|
}
|
814
|
-
return
|
859
|
+
return absl::OkStatus();
|
815
860
|
}
|
816
861
|
|
817
|
-
|
862
|
+
absl::Status AddFilterChainDataForSourceType(
|
818
863
|
const FilterChain& filter_chain,
|
819
864
|
InternalFilterChainMap::DestinationIp* destination_ip) {
|
820
865
|
GPR_ASSERT(static_cast<unsigned int>(
|
@@ -824,31 +869,31 @@ grpc_error_handle AddFilterChainDataForSourceType(
|
|
824
869
|
filter_chain.filter_chain_match.source_type)]);
|
825
870
|
}
|
826
871
|
|
827
|
-
|
872
|
+
absl::Status AddFilterChainDataForApplicationProtocols(
|
828
873
|
const FilterChain& filter_chain,
|
829
874
|
InternalFilterChainMap::DestinationIp* destination_ip) {
|
830
875
|
// Only allow filter chains that do not mention application protocols
|
831
876
|
if (!filter_chain.filter_chain_match.application_protocols.empty()) {
|
832
|
-
return
|
877
|
+
return absl::OkStatus();
|
833
878
|
}
|
834
879
|
return AddFilterChainDataForSourceType(filter_chain, destination_ip);
|
835
880
|
}
|
836
881
|
|
837
|
-
|
882
|
+
absl::Status AddFilterChainDataForTransportProtocol(
|
838
883
|
const FilterChain& filter_chain,
|
839
884
|
InternalFilterChainMap::DestinationIp* destination_ip) {
|
840
885
|
const std::string& transport_protocol =
|
841
886
|
filter_chain.filter_chain_match.transport_protocol;
|
842
887
|
// Only allow filter chains with no transport protocol or "raw_buffer"
|
843
888
|
if (!transport_protocol.empty() && transport_protocol != "raw_buffer") {
|
844
|
-
return
|
889
|
+
return absl::OkStatus();
|
845
890
|
}
|
846
891
|
// If for this configuration, we've already seen filter chains that mention
|
847
892
|
// the transport protocol as "raw_buffer", we will never match filter chains
|
848
893
|
// that do not mention it.
|
849
894
|
if (destination_ip->transport_protocol_raw_buffer_provided &&
|
850
895
|
transport_protocol.empty()) {
|
851
|
-
return
|
896
|
+
return absl::OkStatus();
|
852
897
|
}
|
853
898
|
if (!transport_protocol.empty() &&
|
854
899
|
!destination_ip->transport_protocol_raw_buffer_provided) {
|
@@ -862,17 +907,17 @@ grpc_error_handle AddFilterChainDataForTransportProtocol(
|
|
862
907
|
destination_ip);
|
863
908
|
}
|
864
909
|
|
865
|
-
|
910
|
+
absl::Status AddFilterChainDataForServerNames(
|
866
911
|
const FilterChain& filter_chain,
|
867
912
|
InternalFilterChainMap::DestinationIp* destination_ip) {
|
868
913
|
// Don't continue adding filter chains with server names mentioned
|
869
914
|
if (!filter_chain.filter_chain_match.server_names.empty()) {
|
870
|
-
return
|
915
|
+
return absl::OkStatus();
|
871
916
|
}
|
872
917
|
return AddFilterChainDataForTransportProtocol(filter_chain, destination_ip);
|
873
918
|
}
|
874
919
|
|
875
|
-
|
920
|
+
absl::Status AddFilterChainDataForDestinationIpRange(
|
876
921
|
const FilterChain& filter_chain,
|
877
922
|
InternalFilterChainMap::DestinationIpMap* destination_ip_map) {
|
878
923
|
if (filter_chain.filter_chain_match.prefix_ranges.empty()) {
|
@@ -884,21 +929,19 @@ grpc_error_handle AddFilterChainDataForDestinationIpRange(
|
|
884
929
|
for (const auto& prefix_range :
|
885
930
|
filter_chain.filter_chain_match.prefix_ranges) {
|
886
931
|
auto addr_str = grpc_sockaddr_to_string(&prefix_range.address, false);
|
887
|
-
if (!addr_str.ok())
|
888
|
-
return GRPC_ERROR_CREATE_FROM_CPP_STRING(addr_str.status().ToString());
|
889
|
-
}
|
932
|
+
if (!addr_str.ok()) return addr_str.status();
|
890
933
|
auto insert_result = destination_ip_map->emplace(
|
891
934
|
absl::StrCat(*addr_str, "/", prefix_range.prefix_len),
|
892
935
|
InternalFilterChainMap::DestinationIp());
|
893
936
|
if (insert_result.second) {
|
894
937
|
insert_result.first->second.prefix_range.emplace(prefix_range);
|
895
938
|
}
|
896
|
-
|
939
|
+
absl::Status status = AddFilterChainDataForServerNames(
|
897
940
|
filter_chain, &insert_result.first->second);
|
898
|
-
if (!
|
941
|
+
if (!status.ok()) return status;
|
899
942
|
}
|
900
943
|
}
|
901
|
-
return
|
944
|
+
return absl::OkStatus();
|
902
945
|
}
|
903
946
|
|
904
947
|
XdsListenerResource::FilterChainMap BuildFromInternalFilterChainMap(
|
@@ -920,36 +963,33 @@ XdsListenerResource::FilterChainMap BuildFromInternalFilterChainMap(
|
|
920
963
|
return filter_chain_map;
|
921
964
|
}
|
922
965
|
|
923
|
-
|
924
|
-
const std::vector<FilterChain>& filter_chains
|
925
|
-
XdsListenerResource::FilterChainMap* filter_chain_map) {
|
966
|
+
absl::StatusOr<XdsListenerResource::FilterChainMap> BuildFilterChainMap(
|
967
|
+
const std::vector<FilterChain>& filter_chains) {
|
926
968
|
InternalFilterChainMap internal_filter_chain_map;
|
927
969
|
for (const auto& filter_chain : filter_chains) {
|
928
970
|
// Discard filter chain entries that specify destination port
|
929
971
|
if (filter_chain.filter_chain_match.destination_port != 0) continue;
|
930
|
-
|
972
|
+
absl::Status status = AddFilterChainDataForDestinationIpRange(
|
931
973
|
filter_chain, &internal_filter_chain_map.destination_ip_map);
|
932
|
-
if (!
|
974
|
+
if (!status.ok()) return status;
|
933
975
|
}
|
934
|
-
|
935
|
-
BuildFromInternalFilterChainMap(&internal_filter_chain_map);
|
936
|
-
return GRPC_ERROR_NONE;
|
976
|
+
return BuildFromInternalFilterChainMap(&internal_filter_chain_map);
|
937
977
|
}
|
938
978
|
|
939
|
-
|
940
|
-
const
|
941
|
-
const envoy_config_listener_v3_Listener* listener, bool is_v2
|
942
|
-
|
943
|
-
lds_update
|
944
|
-
|
945
|
-
AddressParse(envoy_config_listener_v3_Listener_address(listener)
|
946
|
-
|
947
|
-
|
979
|
+
absl::StatusOr<XdsListenerResource> LdsResourceParseServer(
|
980
|
+
const XdsResourceType::DecodeContext& context,
|
981
|
+
const envoy_config_listener_v3_Listener* listener, bool is_v2) {
|
982
|
+
XdsListenerResource lds_update;
|
983
|
+
lds_update.type = XdsListenerResource::ListenerType::kTcpListener;
|
984
|
+
auto address =
|
985
|
+
AddressParse(envoy_config_listener_v3_Listener_address(listener));
|
986
|
+
if (!address.ok()) return address.status();
|
987
|
+
lds_update.address = std::move(*address);
|
948
988
|
const auto* use_original_dst =
|
949
989
|
envoy_config_listener_v3_Listener_use_original_dst(listener);
|
950
990
|
if (use_original_dst != nullptr) {
|
951
991
|
if (google_protobuf_BoolValue_value(use_original_dst)) {
|
952
|
-
return
|
992
|
+
return absl::InvalidArgumentError(
|
953
993
|
"Field \'use_original_dst\' is not supported.");
|
954
994
|
}
|
955
995
|
}
|
@@ -959,36 +999,32 @@ grpc_error_handle LdsResourceParseServer(
|
|
959
999
|
std::vector<FilterChain> parsed_filter_chains;
|
960
1000
|
parsed_filter_chains.reserve(size);
|
961
1001
|
for (size_t i = 0; i < size; i++) {
|
962
|
-
|
963
|
-
|
964
|
-
|
965
|
-
|
966
|
-
|
967
|
-
|
968
|
-
|
969
|
-
if (!GRPC_ERROR_IS_NONE(error)) return error;
|
1002
|
+
auto filter_chain = FilterChainParse(context, filter_chains[i], is_v2);
|
1003
|
+
if (!filter_chain.ok()) return filter_chain.status();
|
1004
|
+
parsed_filter_chains.push_back(std::move(*filter_chain));
|
1005
|
+
}
|
1006
|
+
auto filter_chain_map = BuildFilterChainMap(parsed_filter_chains);
|
1007
|
+
if (!filter_chain_map.ok()) return filter_chain_map.status();
|
1008
|
+
lds_update.filter_chain_map = std::move(*filter_chain_map);
|
970
1009
|
auto* default_filter_chain =
|
971
1010
|
envoy_config_listener_v3_Listener_default_filter_chain(listener);
|
972
1011
|
if (default_filter_chain != nullptr) {
|
973
|
-
|
974
|
-
|
975
|
-
|
976
|
-
|
977
|
-
|
978
|
-
lds_update->default_filter_chain =
|
979
|
-
std::move(*filter_chain.filter_chain_data);
|
1012
|
+
auto filter_chain = FilterChainParse(context, default_filter_chain, is_v2);
|
1013
|
+
if (!filter_chain.ok()) return filter_chain.status();
|
1014
|
+
if (filter_chain->filter_chain_data != nullptr) {
|
1015
|
+
lds_update.default_filter_chain =
|
1016
|
+
std::move(*filter_chain->filter_chain_data);
|
980
1017
|
}
|
981
1018
|
}
|
982
1019
|
if (size == 0 && default_filter_chain == nullptr) {
|
983
|
-
return
|
1020
|
+
return absl::InvalidArgumentError("No filter chain provided.");
|
984
1021
|
}
|
985
|
-
return
|
1022
|
+
return lds_update;
|
986
1023
|
}
|
987
1024
|
|
988
|
-
|
989
|
-
const
|
990
|
-
const envoy_config_listener_v3_Listener* listener, bool is_v2
|
991
|
-
XdsListenerResource* lds_update) {
|
1025
|
+
absl::StatusOr<XdsListenerResource> LdsResourceParse(
|
1026
|
+
const XdsResourceType::DecodeContext& context,
|
1027
|
+
const envoy_config_listener_v3_Listener* listener, bool is_v2) {
|
992
1028
|
// Check whether it's a client or server listener.
|
993
1029
|
const envoy_config_listener_v3_ApiListener* api_listener =
|
994
1030
|
envoy_config_listener_v3_Listener_api_listener(listener);
|
@@ -997,24 +1033,22 @@ grpc_error_handle LdsResourceParse(
|
|
997
1033
|
// TODO(roth): Re-enable the following check once
|
998
1034
|
// github.com/istio/istio/issues/38914 is resolved.
|
999
1035
|
// if (api_listener != nullptr && address != nullptr) {
|
1000
|
-
// return
|
1036
|
+
// return absl::InvalidArgumentError(
|
1001
1037
|
// "Listener has both address and ApiListener");
|
1002
1038
|
// }
|
1003
1039
|
if (api_listener == nullptr && address == nullptr) {
|
1004
|
-
return
|
1040
|
+
return absl::InvalidArgumentError(
|
1005
1041
|
"Listener has neither address nor ApiListener");
|
1006
1042
|
}
|
1007
|
-
//
|
1008
|
-
|
1043
|
+
// If api_listener is present, it's for a client; otherwise, it's
|
1044
|
+
// for a server.
|
1009
1045
|
if (api_listener != nullptr) {
|
1010
|
-
|
1011
|
-
} else {
|
1012
|
-
error = LdsResourceParseServer(context, listener, is_v2, lds_update);
|
1046
|
+
return LdsResourceParseClient(context, api_listener, is_v2);
|
1013
1047
|
}
|
1014
|
-
return
|
1048
|
+
return LdsResourceParseServer(context, listener, is_v2);
|
1015
1049
|
}
|
1016
1050
|
|
1017
|
-
void MaybeLogListener(const
|
1051
|
+
void MaybeLogListener(const XdsResourceType::DecodeContext& context,
|
1018
1052
|
const envoy_config_listener_v3_Listener* listener) {
|
1019
1053
|
if (GRPC_TRACE_FLAG_ENABLED(*context.tracer) &&
|
1020
1054
|
gpr_should_log(GPR_LOG_SEVERITY_DEBUG)) {
|
@@ -1028,40 +1062,41 @@ void MaybeLogListener(const XdsEncodingContext& context,
|
|
1028
1062
|
|
1029
1063
|
} // namespace
|
1030
1064
|
|
1031
|
-
|
1032
|
-
const
|
1033
|
-
bool is_v2) const {
|
1065
|
+
XdsResourceType::DecodeResult XdsListenerResourceType::Decode(
|
1066
|
+
const XdsResourceType::DecodeContext& context,
|
1067
|
+
absl::string_view serialized_resource, bool is_v2) const {
|
1068
|
+
DecodeResult result;
|
1034
1069
|
// Parse serialized proto.
|
1035
1070
|
auto* resource = envoy_config_listener_v3_Listener_parse(
|
1036
1071
|
serialized_resource.data(), serialized_resource.size(), context.arena);
|
1037
1072
|
if (resource == nullptr) {
|
1038
|
-
|
1073
|
+
result.resource =
|
1074
|
+
absl::InvalidArgumentError("Can't parse Listener resource.");
|
1075
|
+
return result;
|
1039
1076
|
}
|
1040
1077
|
MaybeLogListener(context, resource);
|
1041
1078
|
// Validate resource.
|
1042
|
-
DecodeResult result;
|
1043
1079
|
result.name =
|
1044
1080
|
UpbStringToStdString(envoy_config_listener_v3_Listener_name(resource));
|
1045
|
-
auto
|
1046
|
-
|
1047
|
-
LdsResourceParse(context, resource, is_v2, &listener_data->resource);
|
1048
|
-
if (!GRPC_ERROR_IS_NONE(error)) {
|
1049
|
-
std::string error_str = grpc_error_std_string(error);
|
1050
|
-
GRPC_ERROR_UNREF(error);
|
1081
|
+
auto listener = LdsResourceParse(context, resource, is_v2);
|
1082
|
+
if (!listener.ok()) {
|
1051
1083
|
if (GRPC_TRACE_FLAG_ENABLED(*context.tracer)) {
|
1052
1084
|
gpr_log(GPR_ERROR, "[xds_client %p] invalid Listener %s: %s",
|
1053
|
-
context.client, result.name
|
1085
|
+
context.client, result.name->c_str(),
|
1086
|
+
listener.status().ToString().c_str());
|
1054
1087
|
}
|
1055
|
-
result.resource =
|
1088
|
+
result.resource = listener.status();
|
1056
1089
|
} else {
|
1057
1090
|
if (GRPC_TRACE_FLAG_ENABLED(*context.tracer)) {
|
1058
1091
|
gpr_log(GPR_INFO, "[xds_client %p] parsed Listener %s: %s",
|
1059
|
-
context.client, result.name
|
1060
|
-
|
1092
|
+
context.client, result.name->c_str(),
|
1093
|
+
listener->ToString().c_str());
|
1061
1094
|
}
|
1062
|
-
|
1095
|
+
auto resource = absl::make_unique<ResourceDataSubclass>();
|
1096
|
+
resource->resource = std::move(*listener);
|
1097
|
+
result.resource = std::move(resource);
|
1063
1098
|
}
|
1064
|
-
return
|
1099
|
+
return result;
|
1065
1100
|
}
|
1066
1101
|
|
1067
1102
|
} // namespace grpc_core
|