grpc 1.50.0.pre1 → 1.52.0.pre2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Makefile +206 -49
- data/include/grpc/byte_buffer.h +76 -1
- data/include/grpc/byte_buffer_reader.h +19 -1
- data/include/grpc/compression.h +2 -2
- data/include/grpc/event_engine/event_engine.h +27 -6
- data/include/grpc/event_engine/internal/memory_allocator_impl.h +1 -1
- data/include/grpc/event_engine/internal/slice_cast.h +67 -0
- data/include/grpc/event_engine/memory_allocator.h +1 -1
- data/include/grpc/event_engine/slice.h +24 -4
- data/include/grpc/event_engine/slice_buffer.h +31 -2
- data/include/grpc/fork.h +25 -1
- data/include/grpc/grpc.h +3 -13
- data/include/grpc/grpc_posix.h +1 -1
- data/include/grpc/impl/codegen/atm.h +3 -71
- data/include/grpc/impl/codegen/atm_gcc_atomic.h +3 -58
- data/include/grpc/impl/codegen/atm_gcc_sync.h +3 -59
- data/include/grpc/impl/codegen/atm_windows.h +3 -106
- data/include/grpc/impl/codegen/byte_buffer.h +4 -78
- data/include/grpc/impl/codegen/byte_buffer_reader.h +4 -19
- data/include/grpc/impl/codegen/compression_types.h +3 -82
- data/include/grpc/impl/codegen/connectivity_state.h +3 -20
- data/include/grpc/impl/codegen/fork.h +4 -25
- data/include/grpc/impl/codegen/gpr_types.h +2 -34
- data/include/grpc/impl/codegen/grpc_types.h +3 -791
- data/include/grpc/impl/codegen/log.h +3 -86
- data/include/grpc/impl/codegen/port_platform.h +3 -758
- data/include/grpc/impl/codegen/propagation_bits.h +3 -28
- data/include/grpc/impl/codegen/slice.h +3 -106
- data/include/grpc/impl/codegen/status.h +4 -131
- data/include/grpc/impl/codegen/sync.h +3 -42
- data/include/grpc/impl/codegen/sync_abseil.h +3 -12
- data/include/grpc/impl/codegen/sync_custom.h +3 -14
- data/include/grpc/impl/codegen/sync_generic.h +3 -25
- data/include/grpc/impl/codegen/sync_posix.h +3 -28
- data/include/grpc/impl/codegen/sync_windows.h +3 -16
- data/include/grpc/impl/compression_types.h +109 -0
- data/include/grpc/impl/connectivity_state.h +47 -0
- data/include/grpc/impl/grpc_types.h +824 -0
- data/include/grpc/impl/propagation_bits.h +54 -0
- data/include/grpc/impl/slice_type.h +112 -0
- data/include/grpc/load_reporting.h +1 -1
- data/include/grpc/module.modulemap +5 -1
- data/include/grpc/slice.h +1 -1
- data/include/grpc/status.h +131 -1
- data/include/grpc/support/atm.h +70 -1
- data/include/grpc/support/atm_gcc_atomic.h +59 -1
- data/include/grpc/support/atm_gcc_sync.h +58 -1
- data/include/grpc/support/atm_windows.h +105 -1
- data/include/grpc/support/log.h +87 -1
- data/include/grpc/support/log_windows.h +1 -1
- data/include/grpc/support/port_platform.h +767 -1
- data/include/grpc/support/string_util.h +1 -1
- data/include/grpc/support/sync.h +35 -2
- data/include/grpc/support/sync_abseil.h +11 -1
- data/include/grpc/support/sync_custom.h +13 -1
- data/include/grpc/support/sync_generic.h +24 -1
- data/include/grpc/support/sync_posix.h +27 -1
- data/include/grpc/support/sync_windows.h +15 -1
- data/include/grpc/support/time.h +25 -2
- data/src/core/ext/filters/census/grpc_context.cc +17 -18
- data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +28 -22
- data/src/core/ext/filters/channel_idle/channel_idle_filter.h +2 -1
- data/src/core/ext/filters/channel_idle/idle_filter_state.h +1 -1
- data/src/core/ext/filters/client_channel/backend_metric.cc +2 -0
- data/src/core/ext/filters/client_channel/backup_poller.cc +24 -24
- data/src/core/ext/filters/client_channel/backup_poller.h +21 -21
- data/src/core/ext/filters/client_channel/channel_connectivity.cc +51 -28
- data/src/core/ext/filters/client_channel/client_channel.cc +157 -168
- data/src/core/ext/filters/client_channel/client_channel.h +10 -10
- data/src/core/ext/filters/client_channel/client_channel_channelz.cc +17 -19
- data/src/core/ext/filters/client_channel/client_channel_channelz.h +19 -19
- data/src/core/ext/filters/client_channel/client_channel_factory.cc +17 -17
- data/src/core/ext/filters/client_channel/client_channel_plugin.cc +18 -18
- data/src/core/ext/filters/client_channel/client_channel_service_config.cc +153 -0
- data/src/core/ext/filters/client_channel/{resolver_result_parsing.h → client_channel_service_config.h} +26 -23
- data/src/core/ext/filters/client_channel/config_selector.h +16 -20
- data/src/core/ext/filters/client_channel/connector.h +1 -1
- data/src/core/ext/filters/client_channel/dynamic_filters.cc +28 -55
- data/src/core/ext/filters/client_channel/dynamic_filters.h +7 -8
- data/src/core/ext/filters/client_channel/global_subchannel_pool.h +18 -18
- data/src/core/ext/filters/client_channel/health/health_check_client.cc +4 -5
- data/src/core/ext/filters/client_channel/http_proxy.cc +39 -40
- data/src/core/ext/filters/client_channel/http_proxy.h +18 -18
- data/src/core/ext/filters/client_channel/lb_call_state_internal.h +39 -0
- data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +3 -4
- data/src/core/ext/filters/client_channel/lb_policy/backend_metric_data.h +17 -17
- data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +7 -2
- data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +1 -2
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +59 -130
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h +37 -21
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +131 -154
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +24 -25
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +0 -1
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +2 -4
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +18 -20
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +18 -19
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +18 -19
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +18 -19
- data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +8 -9
- 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 +212 -223
- data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h +2 -2
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +11 -22
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +73 -101
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +20 -21
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +119 -106
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +12 -12
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +30 -16
- data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +60 -56
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +60 -64
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_attributes.cc +42 -0
- data/src/core/ext/filters/client_channel/lb_policy/xds/{xds.h → xds_attributes.h} +15 -17
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +22 -28
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +62 -94
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +70 -146
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_override_host.cc +651 -0
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_override_host.h +60 -0
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_wrr_locality.cc +364 -0
- data/src/core/ext/filters/client_channel/local_subchannel_pool.h +18 -18
- data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +9 -10
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +26 -35
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +40 -41
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +22 -23
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +82 -82
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +117 -118
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +51 -52
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_posix.cc +18 -18
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +18 -18
- data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.h +18 -19
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +3 -5
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +1 -3
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +1 -1
- data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +34 -27
- data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +44 -34
- data/src/core/ext/filters/client_channel/resolver/polling_resolver.h +8 -10
- data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +4 -7
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +122 -119
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.h +1 -1
- data/src/core/ext/filters/client_channel/retry_filter.cc +81 -103
- data/src/core/ext/filters/client_channel/retry_service_config.cc +193 -235
- data/src/core/ext/filters/client_channel/retry_service_config.h +20 -23
- data/src/core/ext/filters/client_channel/retry_throttle.cc +27 -29
- data/src/core/ext/filters/client_channel/retry_throttle.h +26 -25
- data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +3 -3
- data/src/core/ext/filters/client_channel/subchannel.cc +158 -178
- data/src/core/ext/filters/client_channel/subchannel.h +17 -40
- data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +18 -18
- data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +11 -12
- data/src/core/ext/filters/deadline/deadline_filter.cc +34 -17
- data/src/core/ext/filters/deadline/deadline_filter.h +1 -1
- data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +3 -2
- data/src/core/ext/filters/fault_injection/fault_injection_filter.h +0 -4
- data/src/core/ext/filters/fault_injection/fault_injection_service_config_parser.cc +118 -0
- data/src/core/ext/filters/fault_injection/{service_config_parser.h → fault_injection_service_config_parser.h} +20 -12
- data/src/core/ext/filters/http/client/http_client_filter.cc +36 -37
- data/src/core/ext/filters/http/client/http_client_filter.h +17 -17
- data/src/core/ext/filters/http/client_authority_filter.cc +19 -19
- data/src/core/ext/filters/http/client_authority_filter.h +18 -18
- data/src/core/ext/filters/http/http_filters_plugin.cc +35 -51
- data/src/core/ext/filters/http/message_compress/compression_filter.cc +315 -0
- data/src/core/ext/filters/http/message_compress/compression_filter.h +132 -0
- data/src/core/ext/filters/http/server/http_server_filter.cc +44 -43
- data/src/core/ext/filters/http/server/http_server_filter.h +18 -18
- data/src/core/ext/filters/message_size/message_size_filter.cc +92 -123
- data/src/core/ext/filters/message_size/message_size_filter.h +23 -16
- data/src/core/ext/filters/rbac/rbac_filter.cc +12 -12
- data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +728 -530
- data/src/core/ext/filters/rbac/rbac_service_config_parser.h +4 -3
- data/src/core/ext/filters/server_config_selector/server_config_selector.h +6 -8
- data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +7 -9
- data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +229 -0
- data/src/core/ext/filters/stateful_session/stateful_session_filter.h +66 -0
- data/src/core/ext/filters/stateful_session/stateful_session_service_config_parser.cc +82 -0
- data/src/core/ext/filters/stateful_session/stateful_session_service_config_parser.h +93 -0
- data/src/core/ext/transport/chttp2/alpn/alpn.cc +18 -18
- data/src/core/ext/transport/chttp2/alpn/alpn.h +22 -22
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +69 -63
- data/src/core/ext/transport/chttp2/client/chttp2_connector.h +28 -22
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +81 -97
- data/src/core/ext/transport/chttp2/server/chttp2_server.h +18 -18
- data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +22 -22
- data/src/core/ext/transport/chttp2/transport/bin_decoder.h +30 -30
- data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +29 -29
- data/src/core/ext/transport/chttp2/transport/bin_encoder.h +27 -27
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +273 -283
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +18 -19
- data/src/core/ext/transport/chttp2/transport/context_list.cc +19 -19
- data/src/core/ext/transport/chttp2/transport/context_list.h +25 -25
- data/src/core/ext/transport/chttp2/transport/decode_huff.cc +0 -36
- data/src/core/ext/transport/chttp2/transport/decode_huff.h +35 -82
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +112 -44
- data/src/core/ext/transport/chttp2/transport/flow_control.h +60 -34
- data/src/core/ext/transport/chttp2/transport/frame.h +19 -19
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +33 -32
- data/src/core/ext/transport/chttp2/transport/frame_data.h +23 -23
- data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +36 -36
- data/src/core/ext/transport/chttp2/transport/frame_goaway.h +18 -18
- data/src/core/ext/transport/chttp2/transport/frame_ping.cc +25 -24
- data/src/core/ext/transport/chttp2/transport/frame_ping.h +19 -19
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +28 -25
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +18 -18
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +34 -36
- data/src/core/ext/transport/chttp2/transport/frame_settings.h +20 -20
- data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +22 -21
- data/src/core/ext/transport/chttp2/transport/frame_window_update.h +18 -18
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +133 -181
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +40 -59
- data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +2 -1
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +93 -143
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +20 -20
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +26 -26
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +18 -18
- data/src/core/ext/transport/chttp2/transport/http2_settings.cc +21 -19
- data/src/core/ext/transport/chttp2/transport/http2_settings.h +36 -34
- data/src/core/ext/transport/chttp2/transport/http_trace.cc +19 -0
- data/src/core/ext/transport/chttp2/transport/http_trace.h +24 -0
- data/src/core/ext/transport/chttp2/transport/huffsyms.cc +20 -20
- data/src/core/ext/transport/chttp2/transport/huffsyms.h +19 -19
- data/src/core/ext/transport/chttp2/transport/internal.h +193 -170
- data/src/core/ext/transport/chttp2/transport/parsing.cc +147 -80
- data/src/core/ext/transport/chttp2/transport/stream_lists.cc +19 -19
- data/src/core/ext/transport/chttp2/transport/stream_map.cc +23 -23
- data/src/core/ext/transport/chttp2/transport/stream_map.h +31 -31
- data/src/core/ext/transport/chttp2/transport/varint.cc +19 -20
- data/src/core/ext/transport/chttp2/transport/varint.h +35 -32
- data/src/core/ext/transport/chttp2/transport/writing.cc +60 -56
- data/src/core/ext/transport/inproc/inproc_plugin.cc +17 -17
- data/src/core/ext/transport/inproc/inproc_transport.cc +122 -140
- data/src/core/ext/transport/inproc/inproc_transport.h +19 -19
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb.c +62 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb.h +179 -0
- data/src/core/ext/upb-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upb.c +46 -0
- data/src/core/ext/upb-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upb.h +98 -0
- data/src/core/ext/upb-generated/xds/core/v3/cidr.upb.c +47 -0
- data/src/core/ext/upb-generated/xds/core/v3/cidr.upb.h +107 -0
- data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.c +3 -2
- data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +9 -0
- data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.c +0 -1
- data/src/core/ext/upb-generated/xds/type/matcher/v3/cel.upb.c +46 -0
- data/src/core/ext/upb-generated/xds/type/matcher/v3/cel.upb.h +98 -0
- data/src/core/ext/upb-generated/xds/type/matcher/v3/domain.upb.c +62 -0
- data/src/core/ext/upb-generated/xds/type/matcher/v3/domain.upb.h +174 -0
- data/src/core/ext/upb-generated/xds/type/matcher/v3/http_inputs.upb.c +36 -0
- data/src/core/ext/upb-generated/xds/type/matcher/v3/http_inputs.upb.h +74 -0
- data/src/core/ext/upb-generated/xds/type/matcher/v3/ip.upb.c +65 -0
- data/src/core/ext/upb-generated/xds/type/matcher/v3/ip.upb.h +191 -0
- data/src/core/ext/upb-generated/xds/type/matcher/v3/range.upb.c +127 -0
- data/src/core/ext/upb-generated/xds/type/matcher/v3/range.upb.h +474 -0
- data/src/core/ext/upb-generated/xds/type/v3/cel.upb.c +67 -0
- data/src/core/ext/upb-generated/xds/type/v3/cel.upb.h +214 -0
- data/src/core/ext/upb-generated/xds/type/v3/range.upb.c +64 -0
- data/src/core/ext/upb-generated/xds/type/v3/range.upb.h +208 -0
- data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.c +0 -1
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upbdefs.c +60 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upbdefs.c +50 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/xds/core/v3/cidr.upbdefs.c +45 -0
- data/src/core/ext/upbdefs-generated/xds/core/v3/cidr.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/cel.upbdefs.c +43 -0
- data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/cel.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/domain.upbdefs.c +51 -0
- data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/domain.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/http_inputs.upbdefs.c +36 -0
- data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/http_inputs.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/ip.upbdefs.c +55 -0
- data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/ip.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/matcher.upbdefs.c +9 -9
- data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/range.upbdefs.c +71 -0
- data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/range.upbdefs.h +60 -0
- data/src/core/ext/upbdefs-generated/xds/type/v3/cel.upbdefs.c +60 -0
- data/src/core/ext/upbdefs-generated/xds/type/v3/cel.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/xds/type/v3/range.upbdefs.c +36 -0
- data/src/core/ext/upbdefs-generated/xds/type/v3/range.upbdefs.h +45 -0
- data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.c +4 -7
- data/src/core/ext/xds/certificate_provider_store.cc +4 -4
- data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +4 -7
- data/src/core/ext/xds/xds_api.cc +20 -95
- data/src/core/ext/xds/xds_api.h +5 -8
- data/src/core/ext/xds/xds_bootstrap.h +0 -1
- data/src/core/ext/xds/xds_bootstrap_grpc.cc +3 -12
- data/src/core/ext/xds/xds_bootstrap_grpc.h +16 -1
- data/src/core/ext/xds/xds_certificate_provider.cc +22 -25
- data/src/core/ext/xds/xds_certificate_provider.h +1 -1
- data/src/core/ext/xds/xds_channel_args.h +1 -1
- data/src/core/ext/xds/xds_channel_stack_modifier.cc +0 -1
- data/src/core/ext/xds/xds_channel_stack_modifier.h +2 -2
- data/src/core/ext/xds/xds_client.cc +134 -94
- data/src/core/ext/xds/xds_client.h +13 -5
- data/src/core/ext/xds/xds_client_grpc.cc +31 -24
- data/src/core/ext/xds/xds_client_grpc.h +1 -1
- data/src/core/ext/xds/xds_client_stats.cc +17 -17
- data/src/core/ext/xds/xds_client_stats.h +18 -18
- data/src/core/ext/xds/xds_cluster.cc +359 -203
- data/src/core/ext/xds/xds_cluster.h +52 -35
- data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +54 -71
- data/src/core/ext/xds/xds_cluster_specifier_plugin.h +45 -21
- data/src/core/ext/xds/xds_common_types.cc +209 -141
- data/src/core/ext/xds/xds_common_types.h +19 -13
- data/src/core/ext/xds/xds_endpoint.cc +221 -130
- data/src/core/ext/xds/xds_endpoint.h +4 -7
- data/src/core/ext/xds/xds_health_status.cc +80 -0
- data/src/core/ext/xds/xds_health_status.h +82 -0
- data/src/core/ext/xds/xds_http_fault_filter.cc +57 -43
- data/src/core/ext/xds/xds_http_fault_filter.h +14 -22
- data/src/core/ext/xds/xds_http_filters.cc +65 -73
- data/src/core/ext/xds/xds_http_filters.h +68 -20
- data/src/core/ext/xds/xds_http_rbac_filter.cc +153 -207
- data/src/core/ext/xds/xds_http_rbac_filter.h +13 -16
- data/src/core/ext/xds/xds_http_stateful_session_filter.cc +218 -0
- data/src/core/ext/xds/xds_http_stateful_session_filter.h +58 -0
- data/src/core/ext/xds/xds_lb_policy_registry.cc +120 -171
- data/src/core/ext/xds/xds_lb_policy_registry.h +10 -11
- data/src/core/ext/xds/xds_listener.cc +447 -419
- data/src/core/ext/xds/xds_listener.h +45 -47
- data/src/core/ext/xds/xds_resource_type.h +3 -11
- data/src/core/ext/xds/xds_resource_type_impl.h +10 -13
- data/src/core/ext/xds/xds_route_config.cc +514 -528
- data/src/core/ext/xds/xds_route_config.h +39 -28
- data/src/core/ext/xds/xds_routing.cc +2 -1
- data/src/core/ext/xds/xds_routing.h +2 -0
- data/src/core/ext/xds/xds_server_config_fetcher.cc +109 -106
- data/src/core/ext/xds/xds_transport_grpc.cc +6 -7
- data/src/core/ext/xds/xds_transport_grpc.h +1 -1
- data/src/core/lib/address_utils/parse_address.cc +30 -29
- data/src/core/lib/address_utils/parse_address.h +32 -32
- data/src/core/lib/address_utils/sockaddr_utils.cc +29 -28
- data/src/core/lib/address_utils/sockaddr_utils.h +33 -33
- data/src/core/lib/avl/avl.h +4 -4
- data/src/core/lib/backoff/backoff.cc +17 -17
- data/src/core/lib/backoff/backoff.h +18 -18
- data/src/core/lib/channel/call_tracer.h +10 -1
- data/src/core/lib/channel/channel_args.cc +19 -20
- data/src/core/lib/channel/channel_args.h +59 -43
- data/src/core/lib/channel/channel_args_preconditioning.h +1 -1
- data/src/core/lib/channel/channel_stack.cc +62 -58
- data/src/core/lib/channel/channel_stack.h +144 -131
- data/src/core/lib/channel/channel_stack_builder.cc +21 -24
- data/src/core/lib/channel/channel_stack_builder.h +14 -6
- data/src/core/lib/channel/channel_stack_builder_impl.cc +43 -25
- data/src/core/lib/channel/channel_stack_builder_impl.h +2 -0
- data/src/core/lib/channel/channel_trace.cc +21 -22
- data/src/core/lib/channel/channel_trace.h +19 -19
- data/src/core/lib/channel/channelz.cc +18 -19
- data/src/core/lib/channel/channelz.h +26 -26
- data/src/core/lib/channel/channelz_registry.cc +17 -17
- data/src/core/lib/channel/channelz_registry.h +18 -18
- data/src/core/lib/channel/connected_channel.cc +732 -63
- data/src/core/lib/channel/connected_channel.h +18 -22
- data/src/core/lib/channel/context.h +18 -18
- data/src/core/lib/channel/promise_based_filter.cc +1137 -150
- data/src/core/lib/channel/promise_based_filter.h +374 -88
- data/src/core/lib/channel/status_util.cc +35 -17
- data/src/core/lib/channel/status_util.h +26 -19
- data/src/core/lib/compression/compression.cc +19 -19
- data/src/core/lib/compression/compression_internal.cc +41 -48
- data/src/core/lib/compression/compression_internal.h +22 -22
- data/src/core/lib/compression/message_compress.cc +26 -26
- data/src/core/lib/compression/message_compress.h +25 -25
- data/src/core/lib/config/core_configuration.h +1 -1
- data/src/core/lib/debug/event_log.cc +88 -0
- data/src/core/lib/debug/event_log.h +81 -0
- data/src/core/lib/debug/histogram_view.cc +69 -0
- data/src/core/lib/{slice/slice_refcount.cc → debug/histogram_view.h} +15 -13
- data/src/core/lib/debug/stats.cc +39 -136
- data/src/core/lib/debug/stats.h +46 -52
- data/src/core/lib/debug/stats_data.cc +224 -73
- data/src/core/lib/debug/stats_data.h +263 -122
- data/src/core/lib/debug/trace.cc +18 -18
- data/src/core/lib/debug/trace.h +19 -19
- data/src/core/lib/event_engine/common_closures.h +71 -0
- data/src/core/lib/event_engine/default_event_engine.cc +38 -15
- data/src/core/lib/event_engine/default_event_engine.h +15 -3
- data/src/core/lib/event_engine/default_event_engine_factory.cc +2 -4
- data/src/core/lib/event_engine/executor/executor.h +1 -1
- data/src/core/lib/event_engine/forkable.h +1 -1
- data/src/core/lib/event_engine/memory_allocator.cc +1 -1
- data/src/core/lib/event_engine/poller.h +10 -4
- data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +614 -0
- data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.h +129 -0
- data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +900 -0
- data/src/core/lib/event_engine/posix_engine/ev_poll_posix.h +97 -0
- data/src/core/lib/event_engine/posix_engine/event_poller.h +111 -0
- data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc +74 -0
- data/src/core/lib/event_engine/{executor/threaded_executor.cc → posix_engine/event_poller_posix_default.h} +11 -14
- data/src/core/lib/event_engine/posix_engine/internal_errqueue.cc +77 -0
- data/src/core/lib/event_engine/posix_engine/internal_errqueue.h +179 -0
- data/src/core/lib/event_engine/posix_engine/lockfree_event.cc +265 -0
- data/src/core/lib/event_engine/posix_engine/lockfree_event.h +73 -0
- data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +1308 -0
- data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +684 -0
- data/src/core/lib/event_engine/posix_engine/posix_engine.cc +456 -28
- data/src/core/lib/event_engine/posix_engine/posix_engine.h +148 -24
- data/src/core/lib/event_engine/posix_engine/posix_engine_closure.h +80 -0
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +236 -0
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener.h +228 -0
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.cc +380 -0
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.h +91 -0
- data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +853 -0
- data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +316 -0
- data/src/core/lib/event_engine/posix_engine/timer.cc +49 -49
- data/src/core/lib/event_engine/posix_engine/timer.h +87 -86
- data/src/core/lib/event_engine/posix_engine/timer_heap.cc +27 -27
- data/src/core/lib/event_engine/posix_engine/timer_heap.h +21 -21
- data/src/core/lib/event_engine/posix_engine/timer_manager.cc +76 -214
- data/src/core/lib/event_engine/posix_engine/timer_manager.h +41 -69
- data/src/core/lib/event_engine/posix_engine/traced_buffer_list.cc +332 -0
- data/src/core/lib/event_engine/posix_engine/traced_buffer_list.h +185 -0
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.cc +127 -0
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.h +45 -0
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.cc +150 -0
- data/src/core/lib/event_engine/{executor/threaded_executor.h → posix_engine/wakeup_fd_pipe.h} +16 -15
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix.h +76 -0
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.cc +67 -0
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.h +37 -0
- data/src/core/lib/event_engine/slice.cc +7 -6
- data/src/core/lib/event_engine/slice_buffer.cc +2 -2
- data/src/core/lib/event_engine/socket_notifier.h +1 -1
- data/src/core/lib/event_engine/tcp_socket_utils.cc +373 -0
- data/src/core/lib/event_engine/tcp_socket_utils.h +85 -0
- data/src/core/lib/event_engine/thread_pool.cc +125 -43
- data/src/core/lib/event_engine/thread_pool.h +49 -26
- data/src/core/lib/event_engine/time_util.h +1 -1
- data/src/core/lib/event_engine/windows/iocp.cc +13 -12
- data/src/core/lib/event_engine/windows/iocp.h +1 -1
- data/src/core/lib/event_engine/windows/win_socket.cc +9 -9
- data/src/core/lib/event_engine/windows/windows_engine.cc +26 -20
- data/src/core/lib/event_engine/windows/windows_engine.h +8 -4
- data/src/core/lib/experiments/config.cc +1 -1
- data/src/core/lib/experiments/experiments.cc +13 -13
- data/src/core/lib/experiments/experiments.h +8 -6
- data/src/core/lib/gpr/alloc.cc +19 -17
- data/src/core/lib/gpr/alloc.h +18 -18
- data/src/core/lib/gpr/atm.cc +17 -17
- data/src/core/lib/gpr/cpu_iphone.cc +24 -24
- data/src/core/lib/gpr/cpu_linux.cc +28 -23
- data/src/core/lib/gpr/cpu_posix.cc +23 -22
- data/src/core/lib/gpr/cpu_windows.cc +20 -18
- data/src/core/lib/gpr/log.cc +27 -19
- data/src/core/lib/gpr/log_android.cc +22 -20
- data/src/core/lib/gpr/log_linux.cc +24 -24
- data/src/core/lib/gpr/log_posix.cc +20 -19
- data/src/core/lib/gpr/log_windows.cc +25 -24
- data/src/core/lib/gpr/spinlock.h +18 -18
- data/src/core/lib/gpr/string.cc +25 -24
- data/src/core/lib/gpr/string.h +58 -58
- data/src/core/lib/gpr/string_posix.cc +24 -24
- data/src/core/lib/gpr/string_util_windows.cc +22 -22
- data/src/core/lib/gpr/string_windows.cc +24 -24
- data/src/core/lib/gpr/sync.cc +25 -25
- data/src/core/lib/gpr/sync_abseil.cc +22 -20
- data/src/core/lib/gpr/sync_posix.cc +23 -21
- data/src/core/lib/gpr/sync_windows.cc +29 -27
- data/src/core/lib/gpr/time.cc +23 -21
- data/src/core/lib/gpr/time_posix.cc +35 -30
- data/src/core/lib/gpr/time_precise.cc +22 -22
- data/src/core/lib/gpr/time_precise.h +18 -19
- data/src/core/lib/gpr/time_windows.cc +25 -22
- data/src/core/lib/gpr/tmpfile.h +22 -22
- data/src/core/lib/gpr/tmpfile_msys.cc +21 -20
- data/src/core/lib/gpr/tmpfile_posix.cc +22 -20
- data/src/core/lib/gpr/tmpfile_windows.cc +23 -22
- data/src/core/lib/gpr/useful.h +40 -27
- data/src/core/lib/gpr/wrap_memcpy.cc +23 -23
- data/src/core/lib/gprpp/atomic_utils.h +18 -18
- data/src/core/lib/gprpp/bitset.h +24 -0
- data/src/core/{ext/xds/xds_resource_type.cc → lib/gprpp/crash.cc} +12 -12
- data/src/core/lib/gprpp/crash.h +34 -0
- data/src/core/lib/gprpp/debug_location.h +18 -18
- data/src/core/lib/gprpp/dual_ref_counted.h +1 -1
- data/src/core/lib/gprpp/env.h +20 -20
- data/src/core/lib/gprpp/env_linux.cc +21 -21
- data/src/core/lib/gprpp/env_posix.cc +18 -18
- data/src/core/lib/gprpp/env_windows.cc +18 -18
- data/src/core/lib/gprpp/examine_stack.cc +17 -17
- data/src/core/lib/gprpp/examine_stack.h +18 -18
- data/src/core/lib/gprpp/fork.cc +21 -22
- data/src/core/lib/gprpp/fork.h +22 -22
- data/src/core/lib/gprpp/global_config.h +18 -18
- data/src/core/lib/gprpp/global_config_custom.h +18 -18
- data/src/core/lib/gprpp/global_config_env.cc +17 -17
- data/src/core/lib/gprpp/global_config_env.h +23 -23
- data/src/core/lib/gprpp/global_config_generic.h +18 -18
- data/src/core/lib/gprpp/host_port.cc +26 -26
- data/src/core/lib/gprpp/host_port.h +29 -28
- data/src/core/lib/gprpp/load_file.cc +75 -0
- data/src/core/lib/gprpp/load_file.h +33 -0
- data/src/core/lib/gprpp/manual_constructor.h +18 -17
- data/src/core/lib/gprpp/memory.h +18 -18
- data/src/core/lib/gprpp/mpscq.cc +17 -17
- data/src/core/lib/gprpp/mpscq.h +18 -18
- data/src/core/lib/gprpp/no_destruct.h +1 -0
- data/src/core/lib/gprpp/orphanable.h +18 -18
- data/src/core/lib/gprpp/per_cpu.h +46 -0
- data/src/core/lib/gprpp/ref_counted.h +18 -18
- data/src/core/lib/gprpp/ref_counted_ptr.h +19 -18
- data/src/core/lib/gprpp/stat_posix.cc +5 -4
- data/src/core/lib/gprpp/stat_windows.cc +4 -2
- data/src/core/lib/gprpp/status_helper.cc +4 -3
- data/src/core/lib/gprpp/status_helper.h +1 -3
- data/src/core/lib/gprpp/strerror.cc +41 -0
- data/src/core/lib/gprpp/strerror.h +29 -0
- data/src/core/lib/gprpp/sync.h +20 -20
- data/src/core/lib/gprpp/table.h +1 -0
- data/src/core/lib/gprpp/thd.h +19 -19
- data/src/core/lib/gprpp/thd_posix.cc +30 -31
- data/src/core/lib/gprpp/thd_windows.cc +26 -26
- data/src/core/lib/gprpp/time.cc +16 -11
- data/src/core/lib/gprpp/time.h +13 -3
- data/src/core/lib/gprpp/time_averaged_stats.cc +20 -20
- data/src/core/lib/gprpp/time_averaged_stats.h +48 -48
- data/src/core/lib/gprpp/time_util.h +1 -1
- data/src/core/lib/gprpp/unique_type_name.h +18 -18
- data/src/core/lib/gprpp/validation_errors.h +18 -1
- data/src/core/lib/handshaker/proxy_mapper.h +18 -18
- data/src/core/lib/handshaker/proxy_mapper_registry.cc +17 -17
- data/src/core/lib/handshaker/proxy_mapper_registry.h +18 -18
- data/src/core/lib/http/format_request.cc +18 -18
- data/src/core/lib/http/format_request.h +18 -18
- data/src/core/lib/http/httpcli.cc +57 -61
- data/src/core/lib/http/httpcli.h +26 -26
- data/src/core/lib/http/httpcli_security_connector.cc +22 -25
- data/src/core/lib/http/parser.cc +76 -87
- data/src/core/lib/http/parser.h +32 -32
- data/src/core/lib/iomgr/block_annotate.h +21 -21
- data/src/core/lib/iomgr/buffer_list.cc +156 -136
- data/src/core/lib/iomgr/buffer_list.h +120 -98
- data/src/core/lib/iomgr/call_combiner.cc +29 -27
- data/src/core/lib/iomgr/call_combiner.h +21 -22
- data/src/core/lib/iomgr/cfstream_handle.cc +33 -36
- data/src/core/lib/iomgr/cfstream_handle.h +22 -22
- data/src/core/lib/iomgr/closure.h +90 -45
- data/src/core/lib/iomgr/combiner.cc +20 -19
- data/src/core/lib/iomgr/combiner.h +18 -18
- data/src/core/lib/iomgr/dualstack_socket_posix.cc +21 -21
- data/src/core/lib/iomgr/dynamic_annotations.h +20 -20
- data/src/core/lib/iomgr/endpoint.cc +17 -17
- data/src/core/lib/iomgr/endpoint.h +46 -46
- data/src/core/lib/iomgr/endpoint_cfstream.cc +44 -43
- data/src/core/lib/iomgr/endpoint_cfstream.h +27 -27
- data/src/core/lib/iomgr/endpoint_pair.h +18 -18
- data/src/core/lib/iomgr/endpoint_pair_posix.cc +20 -19
- data/src/core/lib/iomgr/endpoint_pair_windows.cc +18 -17
- data/src/core/lib/iomgr/error.cc +49 -61
- data/src/core/lib/iomgr/error.h +42 -173
- data/src/core/lib/iomgr/error_cfstream.cc +18 -18
- data/src/core/lib/iomgr/error_cfstream.h +19 -19
- data/src/core/lib/iomgr/ev_apple.cc +21 -21
- data/src/core/lib/iomgr/ev_apple.h +17 -17
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +208 -195
- data/src/core/lib/iomgr/ev_epoll1_linux.h +18 -18
- data/src/core/lib/iomgr/ev_poll_posix.cc +212 -205
- data/src/core/lib/iomgr/ev_poll_posix.h +18 -18
- data/src/core/lib/iomgr/ev_posix.cc +36 -28
- data/src/core/lib/iomgr/ev_posix.h +85 -81
- data/src/core/lib/iomgr/ev_windows.cc +18 -18
- data/src/core/lib/iomgr/exec_ctx.cc +34 -34
- data/src/core/lib/iomgr/exec_ctx.h +141 -141
- data/src/core/lib/iomgr/executor.cc +21 -21
- data/src/core/lib/iomgr/executor.h +24 -24
- data/src/core/lib/iomgr/fork_posix.cc +24 -22
- data/src/core/lib/iomgr/fork_windows.cc +21 -21
- data/src/core/lib/iomgr/gethostname.h +18 -18
- data/src/core/lib/iomgr/gethostname_fallback.cc +17 -17
- data/src/core/lib/iomgr/gethostname_host_name_max.cc +17 -17
- data/src/core/lib/iomgr/gethostname_sysconf.cc +17 -17
- data/src/core/lib/iomgr/grpc_if_nametoindex.h +20 -20
- data/src/core/lib/iomgr/grpc_if_nametoindex_posix.cc +20 -19
- data/src/core/lib/iomgr/grpc_if_nametoindex_unsupported.cc +20 -19
- data/src/core/lib/iomgr/internal_errqueue.cc +4 -2
- data/src/core/lib/iomgr/internal_errqueue.h +80 -80
- data/src/core/lib/iomgr/iocp_windows.cc +22 -21
- data/src/core/lib/iomgr/iocp_windows.h +18 -18
- data/src/core/lib/iomgr/iomgr.cc +19 -18
- data/src/core/lib/iomgr/iomgr.h +32 -32
- data/src/core/lib/iomgr/iomgr_internal.cc +17 -17
- data/src/core/lib/iomgr/iomgr_internal.h +25 -25
- data/src/core/lib/iomgr/iomgr_posix.cc +20 -20
- data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +20 -19
- data/src/core/lib/iomgr/iomgr_windows.cc +24 -22
- data/src/core/lib/iomgr/load_file.cc +24 -27
- data/src/core/lib/iomgr/load_file.h +20 -20
- data/src/core/lib/iomgr/lockfree_event.cc +114 -114
- data/src/core/lib/iomgr/lockfree_event.h +19 -19
- data/src/core/lib/iomgr/nameser.h +84 -84
- data/src/core/lib/iomgr/polling_entity.cc +25 -21
- data/src/core/lib/iomgr/polling_entity.h +27 -27
- data/src/core/lib/iomgr/pollset.cc +17 -17
- data/src/core/lib/iomgr/pollset.h +51 -51
- data/src/core/lib/iomgr/pollset_set.cc +17 -17
- data/src/core/lib/iomgr/pollset_set.h +22 -22
- data/src/core/lib/iomgr/pollset_set_windows.cc +18 -18
- data/src/core/lib/iomgr/pollset_set_windows.h +18 -18
- data/src/core/lib/iomgr/pollset_windows.cc +30 -29
- data/src/core/lib/iomgr/pollset_windows.h +22 -22
- data/src/core/lib/iomgr/port.h +29 -29
- data/src/core/lib/iomgr/python_util.h +20 -20
- data/src/core/lib/iomgr/resolve_address.cc +26 -20
- data/src/core/lib/iomgr/resolve_address.h +21 -22
- data/src/core/lib/iomgr/resolve_address_impl.h +2 -2
- data/src/core/lib/iomgr/resolve_address_posix.cc +35 -45
- data/src/core/lib/iomgr/resolve_address_posix.h +1 -2
- data/src/core/lib/iomgr/resolve_address_windows.cc +18 -20
- data/src/core/lib/iomgr/resolve_address_windows.h +1 -2
- data/src/core/lib/iomgr/resolved_address.h +1 -1
- data/src/core/lib/iomgr/sockaddr.h +21 -21
- data/src/core/lib/iomgr/sockaddr_posix.h +18 -18
- data/src/core/lib/iomgr/sockaddr_utils_posix.cc +18 -17
- data/src/core/lib/iomgr/sockaddr_windows.h +18 -18
- data/src/core/lib/iomgr/socket_factory_posix.cc +18 -18
- data/src/core/lib/iomgr/socket_factory_posix.h +30 -30
- data/src/core/lib/iomgr/socket_mutator.cc +19 -18
- data/src/core/lib/iomgr/socket_mutator.h +37 -37
- data/src/core/lib/iomgr/socket_utils.h +24 -24
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +68 -66
- data/src/core/lib/iomgr/socket_utils_linux.cc +18 -17
- data/src/core/lib/iomgr/socket_utils_posix.cc +22 -20
- data/src/core/lib/iomgr/socket_utils_posix.h +78 -78
- data/src/core/lib/iomgr/socket_utils_windows.cc +20 -19
- data/src/core/lib/iomgr/socket_windows.cc +37 -36
- data/src/core/lib/iomgr/socket_windows.h +56 -56
- data/src/core/lib/iomgr/systemd_utils.cc +116 -0
- data/src/core/lib/{slice/slice_buffer_api.cc → iomgr/systemd_utils.h} +12 -14
- data/src/core/lib/iomgr/tcp_client.cc +17 -17
- data/src/core/lib/iomgr/tcp_client.h +26 -26
- data/src/core/lib/iomgr/tcp_client_cfstream.cc +25 -28
- data/src/core/lib/iomgr/tcp_client_posix.cc +70 -73
- data/src/core/lib/iomgr/tcp_client_posix.h +43 -43
- data/src/core/lib/iomgr/tcp_client_windows.cc +36 -39
- data/src/core/lib/iomgr/tcp_posix.cc +223 -237
- data/src/core/lib/iomgr/tcp_posix.h +27 -27
- data/src/core/lib/iomgr/tcp_server.cc +30 -22
- data/src/core/lib/iomgr/tcp_server.h +68 -62
- data/src/core/lib/iomgr/tcp_server_posix.cc +124 -94
- data/src/core/lib/iomgr/tcp_server_utils_posix.h +54 -51
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +90 -55
- data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +40 -40
- data/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc +19 -19
- data/src/core/lib/iomgr/tcp_server_windows.cc +97 -104
- data/src/core/lib/iomgr/tcp_windows.cc +109 -93
- data/src/core/lib/iomgr/tcp_windows.h +29 -29
- data/src/core/lib/iomgr/timer.cc +17 -17
- data/src/core/lib/iomgr/timer.h +65 -65
- data/src/core/lib/iomgr/timer_generic.cc +115 -122
- data/src/core/lib/iomgr/timer_generic.h +19 -19
- data/src/core/lib/iomgr/timer_heap.cc +25 -25
- data/src/core/lib/iomgr/timer_heap.h +19 -19
- data/src/core/lib/iomgr/timer_manager.cc +30 -29
- data/src/core/lib/iomgr/timer_manager.h +25 -25
- data/src/core/lib/iomgr/unix_sockets_posix.cc +20 -21
- data/src/core/lib/iomgr/unix_sockets_posix.h +18 -18
- data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +19 -17
- data/src/core/lib/iomgr/wakeup_fd_eventfd.cc +23 -21
- data/src/core/lib/iomgr/wakeup_fd_nospecial.cc +23 -23
- data/src/core/lib/iomgr/wakeup_fd_pipe.cc +29 -26
- data/src/core/lib/iomgr/wakeup_fd_pipe.h +18 -18
- data/src/core/lib/iomgr/wakeup_fd_posix.cc +18 -18
- data/src/core/lib/iomgr/wakeup_fd_posix.h +50 -50
- data/src/core/lib/json/json_channel_args.h +42 -0
- data/src/core/lib/json/json_object_loader.cc +17 -2
- data/src/core/lib/json/json_object_loader.h +37 -1
- data/src/core/lib/json/json_reader.cc +28 -28
- data/src/core/lib/json/json_util.cc +5 -5
- data/src/core/lib/json/json_util.h +4 -4
- data/src/core/lib/json/json_writer.cc +56 -56
- data/src/core/lib/load_balancing/lb_policy.cc +18 -18
- data/src/core/lib/load_balancing/lb_policy.h +7 -4
- data/src/core/lib/load_balancing/subchannel_interface.h +1 -8
- data/src/core/lib/matchers/matchers.cc +6 -5
- data/src/core/lib/matchers/matchers.h +1 -1
- data/src/core/lib/promise/activity.cc +16 -2
- data/src/core/lib/promise/activity.h +58 -27
- data/src/core/lib/promise/arena_promise.h +82 -52
- data/src/core/lib/promise/context.h +14 -6
- data/src/core/lib/promise/detail/basic_seq.h +9 -28
- data/src/core/lib/promise/detail/promise_factory.h +59 -10
- data/src/core/lib/promise/detail/status.h +28 -0
- data/src/core/lib/promise/detail/switch.h +1455 -0
- data/src/core/lib/promise/exec_ctx_wakeup_scheduler.h +20 -12
- data/src/core/lib/promise/for_each.h +155 -0
- data/src/core/lib/promise/latch.h +13 -19
- data/src/core/lib/promise/loop.h +7 -5
- data/src/core/lib/promise/map.h +1 -0
- data/src/core/lib/promise/map_pipe.h +88 -0
- data/src/core/lib/promise/pipe.cc +19 -0
- data/src/core/lib/promise/pipe.h +505 -0
- data/src/core/lib/promise/poll.h +19 -0
- data/src/core/lib/promise/seq.h +4 -5
- data/src/core/lib/promise/sleep.cc +5 -4
- data/src/core/lib/promise/sleep.h +1 -2
- data/src/core/lib/promise/try_concurrently.h +342 -0
- data/src/core/lib/promise/try_seq.h +11 -13
- data/src/core/lib/resolver/resolver.cc +17 -17
- data/src/core/lib/resolver/server_address.cc +18 -17
- data/src/core/lib/resolver/server_address.h +19 -21
- data/src/core/lib/resource_quota/api.cc +0 -1
- data/src/core/lib/resource_quota/api.h +1 -1
- data/src/core/lib/resource_quota/arena.cc +36 -17
- data/src/core/lib/resource_quota/arena.h +107 -18
- data/src/core/lib/resource_quota/memory_quota.cc +140 -43
- data/src/core/lib/resource_quota/memory_quota.h +85 -23
- data/src/core/lib/resource_quota/resource_quota.h +1 -1
- data/src/core/lib/security/authorization/authorization_policy_provider.h +1 -1
- data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +0 -1
- data/src/core/lib/security/authorization/grpc_authorization_engine.cc +1 -3
- data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +4 -2
- data/src/core/lib/security/authorization/matchers.cc +25 -22
- data/src/core/lib/security/authorization/rbac_policy.cc +2 -3
- data/src/core/lib/security/authorization/rbac_policy.h +1 -1
- data/src/core/lib/security/context/security_context.cc +22 -23
- data/src/core/lib/security/context/security_context.h +40 -30
- data/src/core/lib/security/credentials/alts/alts_credentials.cc +17 -17
- data/src/core/lib/security/credentials/alts/alts_credentials.h +50 -50
- data/src/core/lib/security/credentials/alts/check_gcp_environment.cc +19 -19
- data/src/core/lib/security/credentials/alts/check_gcp_environment.h +41 -41
- data/src/core/lib/security/credentials/alts/check_gcp_environment_linux.cc +17 -17
- data/src/core/lib/security/credentials/alts/check_gcp_environment_no_op.cc +18 -17
- data/src/core/lib/security/credentials/alts/check_gcp_environment_windows.cc +18 -17
- data/src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc +19 -19
- data/src/core/lib/security/credentials/alts/grpc_alts_credentials_options.cc +18 -18
- data/src/core/lib/security/credentials/alts/grpc_alts_credentials_options.h +36 -37
- data/src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc +18 -18
- data/src/core/lib/security/credentials/call_creds_util.h +1 -1
- data/src/core/lib/security/credentials/channel_creds_registry_init.cc +3 -4
- data/src/core/lib/security/credentials/composite/composite_credentials.cc +22 -22
- data/src/core/lib/security/credentials/composite/composite_credentials.h +20 -21
- data/src/core/lib/security/credentials/credentials.cc +19 -18
- data/src/core/lib/security/credentials/credentials.h +34 -33
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +77 -55
- data/src/core/lib/security/credentials/external/aws_request_signer.cc +4 -3
- data/src/core/lib/security/credentials/external/external_account_credentials.cc +40 -51
- data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +17 -21
- data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +21 -25
- data/src/core/lib/security/credentials/fake/fake_credentials.cc +20 -19
- data/src/core/lib/security/credentials/fake/fake_credentials.h +34 -35
- data/src/core/lib/security/credentials/google_default/credentials_generic.cc +17 -17
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +75 -73
- data/src/core/lib/security/credentials/google_default/google_default_credentials.h +18 -19
- data/src/core/lib/security/credentials/iam/iam_credentials.cc +18 -17
- data/src/core/lib/security/credentials/iam/iam_credentials.h +18 -18
- data/src/core/lib/security/credentials/jwt/json_token.cc +24 -25
- data/src/core/lib/security/credentials/jwt/json_token.h +32 -32
- data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +18 -18
- data/src/core/lib/security/credentials/jwt/jwt_credentials.h +18 -19
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +75 -75
- data/src/core/lib/security/credentials/jwt/jwt_verifier.h +43 -43
- data/src/core/lib/security/credentials/local/local_credentials.cc +17 -17
- data/src/core/lib/security/credentials/local/local_credentials.h +20 -20
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +52 -59
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +19 -19
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +24 -23
- data/src/core/lib/security/credentials/plugin/plugin_credentials.h +22 -22
- data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +19 -20
- data/src/core/lib/security/credentials/ssl/ssl_credentials.h +18 -18
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +20 -28
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +4 -11
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +30 -43
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +1 -1
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +18 -18
- data/src/core/lib/security/credentials/tls/tls_credentials.cc +18 -19
- data/src/core/lib/security/credentials/tls/tls_credentials.h +18 -18
- data/src/core/lib/security/credentials/xds/xds_credentials.cc +1 -2
- data/src/core/lib/security/credentials/xds/xds_credentials.h +1 -1
- data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +32 -38
- data/src/core/lib/security/security_connector/alts/alts_security_connector.h +41 -42
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +32 -41
- data/src/core/lib/security/security_connector/fake/fake_security_connector.h +20 -21
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +2 -2
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +3 -8
- data/src/core/lib/security/security_connector/load_system_roots.h +18 -18
- data/src/core/lib/security/security_connector/load_system_roots_fallback.cc +18 -18
- data/src/core/lib/security/security_connector/load_system_roots_supported.cc +19 -22
- data/src/core/lib/security/security_connector/load_system_roots_supported.h +19 -20
- data/src/core/lib/security/security_connector/local/local_security_connector.cc +30 -34
- data/src/core/lib/security/security_connector/local/local_security_connector.h +40 -41
- data/src/core/lib/security/security_connector/security_connector.cc +17 -17
- data/src/core/lib/security/security_connector/security_connector.h +32 -33
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +34 -39
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +38 -39
- data/src/core/lib/security/security_connector/ssl_utils.cc +37 -39
- data/src/core/lib/security/security_connector/ssl_utils.h +31 -31
- data/src/core/lib/security/security_connector/ssl_utils_config.cc +22 -22
- data/src/core/lib/security/security_connector/ssl_utils_config.h +18 -19
- data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +42 -48
- data/src/core/lib/security/security_connector/tls/tls_security_connector.h +17 -17
- data/src/core/lib/security/transport/auth_filters.h +18 -18
- data/src/core/lib/security/transport/client_auth_filter.cc +21 -21
- data/src/core/lib/security/transport/secure_endpoint.cc +54 -56
- data/src/core/lib/security/transport/secure_endpoint.h +22 -22
- data/src/core/lib/security/transport/security_handshaker.cc +70 -70
- data/src/core/lib/security/transport/security_handshaker.h +19 -19
- data/src/core/lib/security/transport/server_auth_filter.cc +43 -44
- data/src/core/lib/security/transport/tsi_error.cc +23 -20
- data/src/core/lib/security/transport/tsi_error.h +18 -18
- data/src/core/lib/security/util/json_util.cc +21 -22
- data/src/core/lib/security/util/json_util.h +18 -18
- data/src/core/lib/service_config/service_config.h +2 -2
- data/src/core/lib/service_config/service_config_call_data.h +7 -1
- data/src/core/lib/service_config/service_config_impl.cc +111 -158
- data/src/core/lib/service_config/service_config_impl.h +14 -17
- data/src/core/lib/service_config/service_config_parser.cc +14 -31
- data/src/core/lib/service_config/service_config_parser.h +14 -10
- data/src/core/lib/slice/b64.cc +26 -26
- data/src/core/lib/slice/b64.h +29 -29
- data/src/core/lib/slice/percent_encoding.cc +17 -17
- data/src/core/lib/slice/percent_encoding.h +24 -24
- data/src/core/lib/slice/slice.cc +44 -38
- data/src/core/lib/slice/slice.h +57 -11
- data/src/core/lib/slice/slice_buffer.cc +63 -59
- data/src/core/lib/slice/slice_buffer.h +27 -2
- data/src/core/lib/slice/slice_internal.h +31 -39
- data/src/core/lib/slice/slice_refcount.h +34 -19
- data/src/core/lib/slice/slice_string_helpers.cc +17 -17
- data/src/core/lib/slice/slice_string_helpers.h +19 -19
- data/src/core/lib/surface/api_trace.cc +17 -17
- data/src/core/lib/surface/api_trace.h +22 -22
- data/src/core/lib/surface/byte_buffer.cc +22 -23
- data/src/core/lib/surface/byte_buffer_reader.cc +23 -23
- data/src/core/lib/surface/call.cc +1521 -335
- data/src/core/lib/surface/call.h +86 -39
- data/src/core/lib/surface/call_details.cc +20 -21
- data/src/core/lib/surface/call_log_batch.cc +18 -18
- data/src/core/lib/surface/call_test_only.h +30 -30
- data/src/core/lib/surface/call_trace.cc +113 -0
- data/src/core/{ext/filters/http/message_compress/message_decompress_filter.h → lib/surface/call_trace.h} +10 -12
- data/src/core/lib/surface/channel.cc +62 -67
- data/src/core/lib/surface/channel.h +40 -32
- data/src/core/lib/surface/channel_init.cc +17 -17
- data/src/core/lib/surface/channel_init.h +18 -18
- data/src/core/lib/surface/channel_ping.cc +19 -19
- data/src/core/lib/surface/channel_stack_type.cc +21 -17
- data/src/core/lib/surface/channel_stack_type.h +20 -18
- data/src/core/lib/surface/completion_queue.cc +173 -191
- data/src/core/lib/surface/completion_queue.h +32 -32
- data/src/core/lib/surface/completion_queue_factory.cc +28 -28
- data/src/core/lib/surface/completion_queue_factory.h +20 -20
- data/src/core/lib/surface/event_string.cc +17 -17
- data/src/core/lib/surface/event_string.h +20 -20
- data/src/core/lib/surface/init.cc +29 -58
- data/src/core/lib/surface/init.h +18 -18
- data/src/core/lib/surface/init_internally.cc +1 -0
- data/src/core/lib/surface/init_internally.h +9 -0
- data/src/core/lib/surface/lame_client.cc +28 -26
- data/src/core/lib/surface/lame_client.h +19 -19
- data/src/core/lib/surface/metadata_array.cc +17 -18
- data/src/core/lib/surface/server.cc +61 -83
- data/src/core/lib/surface/server.h +5 -7
- data/src/core/lib/surface/validate_metadata.cc +28 -29
- data/src/core/lib/surface/validate_metadata.h +18 -18
- data/src/core/lib/surface/version.cc +21 -21
- data/src/core/lib/transport/bdp_estimator.cc +17 -17
- data/src/core/lib/transport/bdp_estimator.h +18 -19
- data/src/core/lib/transport/connectivity_state.cc +19 -19
- data/src/core/lib/transport/connectivity_state.h +19 -19
- data/src/core/lib/transport/error_utils.cc +51 -45
- data/src/core/lib/transport/error_utils.h +21 -21
- data/src/core/lib/transport/handshaker.cc +49 -46
- data/src/core/lib/transport/handshaker.h +43 -38
- data/src/core/lib/transport/handshaker_factory.h +44 -18
- data/src/core/lib/transport/handshaker_registry.cc +25 -19
- data/src/core/lib/transport/handshaker_registry.h +21 -22
- data/src/core/lib/transport/http2_errors.h +20 -20
- data/src/core/lib/transport/http_connect_handshaker.cc +40 -41
- data/src/core/lib/transport/http_connect_handshaker.h +18 -18
- data/src/core/lib/transport/metadata_batch.cc +4 -1
- data/src/core/lib/transport/metadata_batch.h +46 -20
- data/src/core/lib/transport/parsed_metadata.cc +2 -6
- data/src/core/lib/transport/parsed_metadata.h +1 -0
- data/src/core/lib/transport/pid_controller.cc +20 -20
- data/src/core/lib/transport/pid_controller.h +24 -24
- data/src/core/lib/transport/status_conversion.cc +22 -22
- data/src/core/lib/transport/status_conversion.h +20 -20
- data/src/core/lib/transport/tcp_connect_handshaker.cc +15 -20
- data/src/core/lib/transport/tcp_connect_handshaker.h +1 -1
- data/src/core/lib/transport/timeout_encoding.cc +22 -22
- data/src/core/lib/transport/timeout_encoding.h +18 -18
- data/src/core/lib/transport/transport.cc +88 -41
- data/src/core/lib/transport/transport.h +193 -195
- data/src/core/lib/transport/transport_impl.h +42 -42
- data/src/core/lib/transport/transport_op_string.cc +26 -25
- data/src/core/plugin_registry/grpc_plugin_registry.cc +25 -27
- data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +7 -14
- data/src/core/tsi/alts/crypt/aes_gcm.cc +20 -20
- data/src/core/tsi/alts/crypt/gsec.cc +26 -26
- data/src/core/tsi/alts/crypt/gsec.h +334 -334
- data/src/core/tsi/alts/frame_protector/alts_counter.cc +23 -23
- data/src/core/tsi/alts/frame_protector/alts_counter.h +66 -66
- data/src/core/tsi/alts/frame_protector/alts_crypter.cc +19 -19
- data/src/core/tsi/alts/frame_protector/alts_crypter.h +206 -206
- data/src/core/tsi/alts/frame_protector/alts_frame_protector.cc +72 -71
- data/src/core/tsi/alts/frame_protector/alts_frame_protector.h +38 -38
- data/src/core/tsi/alts/frame_protector/alts_record_protocol_crypter_common.cc +18 -18
- data/src/core/tsi/alts/frame_protector/alts_record_protocol_crypter_common.h +80 -81
- data/src/core/tsi/alts/frame_protector/alts_seal_privacy_integrity_crypter.cc +22 -22
- data/src/core/tsi/alts/frame_protector/alts_unseal_privacy_integrity_crypter.cc +22 -22
- data/src/core/tsi/alts/frame_protector/frame_handler.cc +26 -25
- data/src/core/tsi/alts/frame_protector/frame_handler.h +166 -166
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +78 -77
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +99 -99
- data/src/core/tsi/alts/handshaker/alts_shared_resource.cc +18 -17
- data/src/core/tsi/alts/handshaker/alts_shared_resource.h +41 -42
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +37 -36
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +58 -58
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +20 -20
- data/src/core/tsi/alts/handshaker/alts_tsi_utils.cc +21 -20
- data/src/core/tsi/alts/handshaker/alts_tsi_utils.h +36 -36
- data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +19 -19
- data/src/core/tsi/alts/handshaker/transport_security_common_api.h +102 -101
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.cc +45 -44
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.h +38 -39
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.cc +38 -36
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.h +33 -34
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol.h +65 -66
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc +32 -31
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.h +53 -54
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.cc +54 -53
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.h +138 -139
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +58 -57
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.h +41 -42
- data/src/core/tsi/fake_transport_security.cc +80 -79
- data/src/core/tsi/fake_transport_security.h +30 -30
- data/src/core/tsi/local_transport_security.cc +34 -33
- data/src/core/tsi/local_transport_security.h +31 -31
- data/src/core/tsi/ssl/key_logging/ssl_key_logging.cc +8 -3
- data/src/core/tsi/ssl/session_cache/ssl_session.h +18 -18
- data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +19 -19
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +18 -17
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +19 -19
- data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +25 -20
- data/src/core/tsi/ssl_transport_security.cc +139 -323
- data/src/core/tsi/ssl_transport_security.h +201 -200
- data/src/core/tsi/ssl_transport_security_utils.cc +250 -0
- data/src/core/tsi/ssl_transport_security_utils.h +147 -0
- data/src/core/tsi/ssl_types.h +25 -25
- data/src/core/tsi/transport_security.cc +26 -26
- data/src/core/tsi/transport_security.h +45 -45
- data/src/core/tsi/transport_security_grpc.cc +20 -20
- data/src/core/tsi/transport_security_grpc.h +39 -39
- data/src/core/tsi/transport_security_interface.h +330 -330
- data/src/ruby/ext/grpc/{ext-export-truffleruby.clang → ext-export-truffleruby-with-ruby-abi-version.clang} +0 -0
- data/src/ruby/ext/grpc/{ext-export-truffleruby.gcc → ext-export-truffleruby-with-ruby-abi-version.gcc} +0 -0
- data/src/ruby/ext/grpc/ext-export-with-ruby-abi-version.clang +2 -0
- data/src/ruby/ext/grpc/ext-export-with-ruby-abi-version.gcc +7 -0
- data/src/ruby/ext/grpc/ext-export.clang +0 -1
- data/src/ruby/ext/grpc/ext-export.gcc +1 -2
- data/src/ruby/ext/grpc/extconf.rb +47 -2
- data/src/ruby/ext/grpc/rb_call.c +1 -0
- data/src/ruby/ext/grpc/rb_channel.c +1 -0
- data/src/ruby/ext/grpc/rb_channel_args.c +1 -0
- data/src/ruby/ext/grpc/rb_compression_options.c +1 -1
- data/src/ruby/ext/grpc/rb_grpc.c +1 -0
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +38 -38
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +59 -59
- data/src/ruby/lib/grpc/generic/bidi_call.rb +2 -0
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/spec/channel_spec.rb +0 -43
- data/src/ruby/spec/client_server_spec.rb +20 -8
- data/src/ruby/spec/generic/active_call_spec.rb +12 -3
- data/third_party/abseil-cpp/absl/cleanup/cleanup.h +140 -0
- data/third_party/abseil-cpp/absl/cleanup/internal/cleanup.h +100 -0
- data/third_party/re2/re2/bitstate.cc +3 -3
- data/third_party/re2/re2/dfa.cc +13 -13
- data/third_party/re2/re2/nfa.cc +4 -4
- data/third_party/re2/re2/onepass.cc +2 -2
- data/third_party/re2/re2/prefilter_tree.cc +27 -59
- data/third_party/re2/re2/prefilter_tree.h +3 -2
- data/third_party/re2/re2/prog.cc +11 -2
- data/third_party/re2/re2/prog.h +17 -5
- data/third_party/re2/re2/re2.cc +6 -11
- data/third_party/re2/re2/re2.h +1 -1
- data/third_party/re2/re2/regexp.cc +1 -2
- data/third_party/re2/re2/stringpiece.h +10 -7
- data/third_party/re2/re2/unicode_casefold.cc +25 -11
- data/third_party/re2/re2/unicode_groups.cc +319 -151
- data/third_party/re2/re2/walker-inl.h +3 -2
- data/third_party/re2/util/mutex.h +4 -4
- data/third_party/zlib/compress.c +3 -3
- data/third_party/zlib/crc32.c +21 -12
- data/third_party/zlib/deflate.c +112 -106
- data/third_party/zlib/deflate.h +2 -2
- data/third_party/zlib/gzlib.c +1 -1
- data/third_party/zlib/gzread.c +3 -5
- data/third_party/zlib/gzwrite.c +1 -1
- data/third_party/zlib/infback.c +10 -7
- data/third_party/zlib/inflate.c +5 -2
- data/third_party/zlib/inftrees.c +2 -2
- data/third_party/zlib/inftrees.h +1 -1
- data/third_party/zlib/trees.c +61 -62
- data/third_party/zlib/uncompr.c +2 -2
- data/third_party/zlib/zconf.h +16 -3
- data/third_party/zlib/zlib.h +10 -10
- data/third_party/zlib/zutil.c +9 -7
- data/third_party/zlib/zutil.h +1 -0
- metadata +146 -40
- data/include/grpc/impl/codegen/gpr_slice.h +0 -71
- data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +0 -188
- data/src/core/ext/filters/fault_injection/service_config_parser.cc +0 -187
- data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +0 -332
- data/src/core/ext/filters/http/message_compress/message_compress_filter.h +0 -52
- data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +0 -322
- data/src/core/ext/filters/server_config_selector/server_config_selector.cc +0 -62
- data/src/core/lib/gpr/murmur_hash.cc +0 -82
- data/src/core/lib/gpr/murmur_hash.h +0 -29
- data/src/core/lib/gpr/tls.h +0 -156
- data/src/core/lib/promise/call_push_pull.h +0 -148
- data/src/core/lib/slice/slice_api.cc +0 -39
- data/src/core/lib/slice/slice_refcount_base.h +0 -60
|
@@ -23,13 +23,11 @@
|
|
|
23
23
|
#include <set>
|
|
24
24
|
#include <utility>
|
|
25
25
|
|
|
26
|
-
#include "absl/memory/memory.h"
|
|
27
26
|
#include "absl/status/status.h"
|
|
28
27
|
#include "absl/status/statusor.h"
|
|
29
28
|
#include "absl/strings/str_cat.h"
|
|
30
29
|
#include "absl/strings/str_format.h"
|
|
31
30
|
#include "absl/strings/str_join.h"
|
|
32
|
-
#include "absl/strings/strip.h"
|
|
33
31
|
#include "envoy/config/core/v3/address.upb.h"
|
|
34
32
|
#include "envoy/config/core/v3/base.upb.h"
|
|
35
33
|
#include "envoy/config/core/v3/config_source.upb.h"
|
|
@@ -57,44 +55,31 @@
|
|
|
57
55
|
#include "src/core/lib/address_utils/sockaddr_utils.h"
|
|
58
56
|
#include "src/core/lib/debug/trace.h"
|
|
59
57
|
#include "src/core/lib/gprpp/host_port.h"
|
|
60
|
-
#include "src/core/lib/gprpp/
|
|
61
|
-
#include "src/core/lib/
|
|
58
|
+
#include "src/core/lib/gprpp/match.h"
|
|
59
|
+
#include "src/core/lib/gprpp/validation_errors.h"
|
|
62
60
|
#include "src/core/lib/iomgr/sockaddr.h"
|
|
63
|
-
#include "src/core/lib/json/json.h"
|
|
64
61
|
|
|
65
62
|
namespace grpc_core {
|
|
66
63
|
|
|
67
|
-
//
|
|
68
|
-
// XdsListenerResource::DownstreamTlsContext
|
|
69
|
-
//
|
|
70
|
-
|
|
71
|
-
std::string XdsListenerResource::DownstreamTlsContext::ToString() const {
|
|
72
|
-
return absl::StrFormat("common_tls_context=%s, require_client_certificate=%s",
|
|
73
|
-
common_tls_context.ToString(),
|
|
74
|
-
require_client_certificate ? "true" : "false");
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
bool XdsListenerResource::DownstreamTlsContext::Empty() const {
|
|
78
|
-
return common_tls_context.Empty();
|
|
79
|
-
}
|
|
80
|
-
|
|
81
64
|
//
|
|
82
65
|
// XdsListenerResource::HttpConnectionManager
|
|
83
66
|
//
|
|
84
67
|
|
|
85
68
|
std::string XdsListenerResource::HttpConnectionManager::ToString() const {
|
|
86
69
|
std::vector<std::string> contents;
|
|
87
|
-
contents.push_back(
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
70
|
+
contents.push_back(Match(
|
|
71
|
+
route_config,
|
|
72
|
+
[](const std::string& rds_name) {
|
|
73
|
+
return absl::StrCat("rds_name=", rds_name);
|
|
74
|
+
},
|
|
75
|
+
[](const XdsRouteConfigResource& route_config) {
|
|
76
|
+
return absl::StrCat("route_config=", route_config.ToString());
|
|
77
|
+
}));
|
|
78
|
+
contents.push_back(absl::StrCat("http_max_stream_duration=",
|
|
79
|
+
http_max_stream_duration.ToString()));
|
|
96
80
|
if (!http_filters.empty()) {
|
|
97
81
|
std::vector<std::string> filter_strings;
|
|
82
|
+
filter_strings.reserve(http_filters.size());
|
|
98
83
|
for (const auto& http_filter : http_filters) {
|
|
99
84
|
filter_strings.push_back(http_filter.ToString());
|
|
100
85
|
}
|
|
@@ -105,7 +90,7 @@ std::string XdsListenerResource::HttpConnectionManager::ToString() const {
|
|
|
105
90
|
}
|
|
106
91
|
|
|
107
92
|
//
|
|
108
|
-
// XdsListenerResource::HttpFilter
|
|
93
|
+
// XdsListenerResource::HttpConnectionManager::HttpFilter
|
|
109
94
|
//
|
|
110
95
|
|
|
111
96
|
std::string XdsListenerResource::HttpConnectionManager::HttpFilter::ToString()
|
|
@@ -113,6 +98,20 @@ std::string XdsListenerResource::HttpConnectionManager::HttpFilter::ToString()
|
|
|
113
98
|
return absl::StrCat("{name=", name, ", config=", config.ToString(), "}");
|
|
114
99
|
}
|
|
115
100
|
|
|
101
|
+
//
|
|
102
|
+
// XdsListenerResource::DownstreamTlsContext
|
|
103
|
+
//
|
|
104
|
+
|
|
105
|
+
std::string XdsListenerResource::DownstreamTlsContext::ToString() const {
|
|
106
|
+
return absl::StrFormat("common_tls_context=%s, require_client_certificate=%s",
|
|
107
|
+
common_tls_context.ToString(),
|
|
108
|
+
require_client_certificate ? "true" : "false");
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
bool XdsListenerResource::DownstreamTlsContext::Empty() const {
|
|
112
|
+
return common_tls_context.Empty();
|
|
113
|
+
}
|
|
114
|
+
|
|
116
115
|
//
|
|
117
116
|
// XdsListenerResource::FilterChainData
|
|
118
117
|
//
|
|
@@ -165,6 +164,7 @@ std::string FilterChain::FilterChainMatch::ToString() const {
|
|
|
165
164
|
}
|
|
166
165
|
if (!prefix_ranges.empty()) {
|
|
167
166
|
std::vector<std::string> prefix_ranges_content;
|
|
167
|
+
prefix_ranges_content.reserve(prefix_ranges.size());
|
|
168
168
|
for (const auto& range : prefix_ranges) {
|
|
169
169
|
prefix_ranges_content.push_back(range.ToString());
|
|
170
170
|
}
|
|
@@ -180,6 +180,7 @@ std::string FilterChain::FilterChainMatch::ToString() const {
|
|
|
180
180
|
}
|
|
181
181
|
if (!source_prefix_ranges.empty()) {
|
|
182
182
|
std::vector<std::string> source_prefix_ranges_content;
|
|
183
|
+
source_prefix_ranges_content.reserve(source_prefix_ranges.size());
|
|
183
184
|
for (const auto& range : source_prefix_ranges) {
|
|
184
185
|
source_prefix_ranges_content.push_back(range.ToString());
|
|
185
186
|
}
|
|
@@ -244,26 +245,36 @@ std::string XdsListenerResource::FilterChainMap::ToString() const {
|
|
|
244
245
|
}
|
|
245
246
|
|
|
246
247
|
//
|
|
247
|
-
// XdsListenerResource
|
|
248
|
+
// XdsListenerResource::TcpListener
|
|
248
249
|
//
|
|
249
250
|
|
|
250
|
-
std::string XdsListenerResource::ToString() const {
|
|
251
|
+
std::string XdsListenerResource::TcpListener::ToString() const {
|
|
251
252
|
std::vector<std::string> contents;
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
default_filter_chain->ToString()));
|
|
259
|
-
}
|
|
260
|
-
} else if (type == ListenerType::kHttpApiListener) {
|
|
261
|
-
contents.push_back(absl::StrFormat("http_connection_manager=%s",
|
|
262
|
-
http_connection_manager.ToString()));
|
|
253
|
+
contents.push_back(absl::StrCat("address=", address));
|
|
254
|
+
contents.push_back(
|
|
255
|
+
absl::StrCat("filter_chain_map=", filter_chain_map.ToString()));
|
|
256
|
+
if (default_filter_chain.has_value()) {
|
|
257
|
+
contents.push_back(absl::StrCat("default_filter_chain=",
|
|
258
|
+
default_filter_chain->ToString()));
|
|
263
259
|
}
|
|
264
260
|
return absl::StrCat("{", absl::StrJoin(contents, ", "), "}");
|
|
265
261
|
}
|
|
266
262
|
|
|
263
|
+
//
|
|
264
|
+
// XdsListenerResource
|
|
265
|
+
//
|
|
266
|
+
|
|
267
|
+
std::string XdsListenerResource::ToString() const {
|
|
268
|
+
return Match(
|
|
269
|
+
listener,
|
|
270
|
+
[](const HttpConnectionManager& hcm) {
|
|
271
|
+
return absl::StrCat("{http_connection_manager=", hcm.ToString(), "}");
|
|
272
|
+
},
|
|
273
|
+
[](const TcpListener& tcp) {
|
|
274
|
+
return absl::StrCat("{tcp_listener=", tcp.ToString(), "}");
|
|
275
|
+
});
|
|
276
|
+
}
|
|
277
|
+
|
|
267
278
|
//
|
|
268
279
|
// XdsListenerResourceType
|
|
269
280
|
//
|
|
@@ -287,111 +298,131 @@ void MaybeLogHttpConnectionManager(
|
|
|
287
298
|
}
|
|
288
299
|
}
|
|
289
300
|
|
|
290
|
-
|
|
291
|
-
HttpConnectionManagerParse(
|
|
301
|
+
XdsListenerResource::HttpConnectionManager HttpConnectionManagerParse(
|
|
292
302
|
bool is_client, const XdsResourceType::DecodeContext& context,
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
303
|
+
XdsExtension extension, ValidationErrors* errors) {
|
|
304
|
+
if (extension.type !=
|
|
305
|
+
"envoy.extensions.filters.network.http_connection_manager.v3"
|
|
306
|
+
".HttpConnectionManager") {
|
|
307
|
+
errors->AddError("unsupported filter type");
|
|
308
|
+
return {};
|
|
309
|
+
}
|
|
310
|
+
auto* serialized_hcm_config =
|
|
311
|
+
absl::get_if<absl::string_view>(&extension.value);
|
|
312
|
+
if (serialized_hcm_config == nullptr) {
|
|
313
|
+
errors->AddError("could not parse HttpConnectionManager config");
|
|
314
|
+
return {};
|
|
315
|
+
}
|
|
316
|
+
const auto* http_connection_manager_proto =
|
|
317
|
+
envoy_extensions_filters_network_http_connection_manager_v3_HttpConnectionManager_parse(
|
|
318
|
+
serialized_hcm_config->data(), serialized_hcm_config->size(),
|
|
319
|
+
context.arena);
|
|
320
|
+
if (http_connection_manager_proto == nullptr) {
|
|
321
|
+
errors->AddError("could not parse HttpConnectionManager config");
|
|
322
|
+
return {};
|
|
323
|
+
}
|
|
296
324
|
MaybeLogHttpConnectionManager(context, http_connection_manager_proto);
|
|
297
|
-
std::vector<std::string> errors;
|
|
298
325
|
XdsListenerResource::HttpConnectionManager http_connection_manager;
|
|
299
|
-
//
|
|
300
|
-
// original_ip_detection_extensions` as mentioned in
|
|
326
|
+
// xff_num_trusted_hops -- must be zero as per
|
|
301
327
|
// https://github.com/grpc/proposal/blob/master/A41-xds-rbac.md
|
|
302
328
|
if (envoy_extensions_filters_network_http_connection_manager_v3_HttpConnectionManager_xff_num_trusted_hops(
|
|
303
329
|
http_connection_manager_proto) != 0) {
|
|
304
|
-
errors.
|
|
330
|
+
ValidationErrors::ScopedField field(errors, ".xff_num_trusted_hops");
|
|
331
|
+
errors->AddError("must be zero");
|
|
305
332
|
}
|
|
333
|
+
// original_ip_detection_extensions -- must be empty as per
|
|
334
|
+
// https://github.com/grpc/proposal/blob/master/A41-xds-rbac.md
|
|
306
335
|
if (envoy_extensions_filters_network_http_connection_manager_v3_HttpConnectionManager_has_original_ip_detection_extensions(
|
|
307
336
|
http_connection_manager_proto)) {
|
|
308
|
-
errors
|
|
337
|
+
ValidationErrors::ScopedField field(errors,
|
|
338
|
+
".original_ip_detection_extensions");
|
|
339
|
+
errors->AddError("must be empty");
|
|
309
340
|
}
|
|
310
|
-
//
|
|
341
|
+
// common_http_protocol_options
|
|
311
342
|
const envoy_config_core_v3_HttpProtocolOptions* options =
|
|
312
343
|
envoy_extensions_filters_network_http_connection_manager_v3_HttpConnectionManager_common_http_protocol_options(
|
|
313
344
|
http_connection_manager_proto);
|
|
314
345
|
if (options != nullptr) {
|
|
346
|
+
// max_stream_duration
|
|
315
347
|
const google_protobuf_Duration* duration =
|
|
316
348
|
envoy_config_core_v3_HttpProtocolOptions_max_stream_duration(options);
|
|
317
349
|
if (duration != nullptr) {
|
|
350
|
+
ValidationErrors::ScopedField field(
|
|
351
|
+
errors, ".common_http_protocol_options.max_stream_duration");
|
|
318
352
|
http_connection_manager.http_max_stream_duration =
|
|
319
|
-
ParseDuration(duration);
|
|
353
|
+
ParseDuration(duration, errors);
|
|
320
354
|
}
|
|
321
355
|
}
|
|
322
|
-
//
|
|
323
|
-
|
|
356
|
+
// http_filters
|
|
357
|
+
{
|
|
358
|
+
ValidationErrors::ScopedField field(errors, ".http_filters");
|
|
359
|
+
const auto& http_filter_registry =
|
|
360
|
+
static_cast<const GrpcXdsBootstrap&>(context.client->bootstrap())
|
|
361
|
+
.http_filter_registry();
|
|
324
362
|
size_t num_filters = 0;
|
|
325
363
|
const auto* http_filters =
|
|
326
364
|
envoy_extensions_filters_network_http_connection_manager_v3_HttpConnectionManager_http_filters(
|
|
327
365
|
http_connection_manager_proto, &num_filters);
|
|
328
366
|
std::set<absl::string_view> names_seen;
|
|
367
|
+
const size_t original_error_size = errors->size();
|
|
329
368
|
for (size_t i = 0; i < num_filters; ++i) {
|
|
369
|
+
ValidationErrors::ScopedField field(errors, absl::StrCat("[", i, "]"));
|
|
330
370
|
const auto* http_filter = http_filters[i];
|
|
371
|
+
// name
|
|
331
372
|
absl::string_view name = UpbStringToAbsl(
|
|
332
373
|
envoy_extensions_filters_network_http_connection_manager_v3_HttpFilter_name(
|
|
333
374
|
http_filter));
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
375
|
+
{
|
|
376
|
+
ValidationErrors::ScopedField field(errors, ".name");
|
|
377
|
+
if (name.empty()) {
|
|
378
|
+
errors->AddError("empty filter name");
|
|
379
|
+
continue;
|
|
380
|
+
}
|
|
381
|
+
if (names_seen.find(name) != names_seen.end()) {
|
|
382
|
+
errors->AddError(absl::StrCat("duplicate HTTP filter name: ", name));
|
|
383
|
+
continue;
|
|
384
|
+
}
|
|
341
385
|
}
|
|
342
386
|
names_seen.insert(name);
|
|
387
|
+
// is_optional
|
|
343
388
|
const bool is_optional =
|
|
344
389
|
envoy_extensions_filters_network_http_connection_manager_v3_HttpFilter_is_optional(
|
|
345
390
|
http_filter);
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
391
|
+
// typed_config
|
|
392
|
+
{
|
|
393
|
+
ValidationErrors::ScopedField field(errors, ".typed_config");
|
|
394
|
+
const google_protobuf_Any* typed_config =
|
|
395
|
+
envoy_extensions_filters_network_http_connection_manager_v3_HttpFilter_typed_config(
|
|
396
|
+
http_filter);
|
|
397
|
+
auto extension = ExtractXdsExtension(context, typed_config, errors);
|
|
398
|
+
if (!extension.has_value()) continue;
|
|
399
|
+
const XdsHttpFilterImpl* filter_impl =
|
|
400
|
+
http_filter_registry.GetFilterForType(extension->type);
|
|
401
|
+
if (filter_impl == nullptr) {
|
|
402
|
+
if (!is_optional) errors->AddError("unsupported filter type");
|
|
403
|
+
continue;
|
|
353
404
|
}
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
}
|
|
362
|
-
const XdsHttpFilterImpl* filter_impl =
|
|
363
|
-
XdsHttpFilterRegistry::GetFilterForType(filter_type->type);
|
|
364
|
-
if (filter_impl == nullptr) {
|
|
365
|
-
if (!is_optional) {
|
|
366
|
-
errors.emplace_back(absl::StrCat(
|
|
367
|
-
"no filter registered for config type ", filter_type->type));
|
|
405
|
+
if ((is_client && !filter_impl->IsSupportedOnClients()) ||
|
|
406
|
+
(!is_client && !filter_impl->IsSupportedOnServers())) {
|
|
407
|
+
if (!is_optional) {
|
|
408
|
+
errors->AddError(absl::StrCat("filter is not supported on ",
|
|
409
|
+
is_client ? "clients" : "servers"));
|
|
410
|
+
}
|
|
411
|
+
continue;
|
|
368
412
|
}
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
is_client ? "clients" : "servers"));
|
|
413
|
+
absl::optional<XdsHttpFilterImpl::FilterConfig> filter_config =
|
|
414
|
+
filter_impl->GenerateFilterConfig(context, std::move(*extension),
|
|
415
|
+
errors);
|
|
416
|
+
if (filter_config.has_value()) {
|
|
417
|
+
http_connection_manager.http_filters.emplace_back(
|
|
418
|
+
XdsListenerResource::HttpConnectionManager::HttpFilter{
|
|
419
|
+
std::string(name), std::move(*filter_config)});
|
|
377
420
|
}
|
|
378
|
-
continue;
|
|
379
|
-
}
|
|
380
|
-
absl::StatusOr<XdsHttpFilterImpl::FilterConfig> filter_config =
|
|
381
|
-
filter_impl->GenerateFilterConfig(google_protobuf_Any_value(any),
|
|
382
|
-
context.arena);
|
|
383
|
-
if (!filter_config.ok()) {
|
|
384
|
-
errors.emplace_back(absl::StrCat(
|
|
385
|
-
"filter config for type ", filter_type->type,
|
|
386
|
-
" failed to parse: ", StatusToString(filter_config.status())));
|
|
387
|
-
continue;
|
|
388
421
|
}
|
|
389
|
-
http_connection_manager.http_filters.emplace_back(
|
|
390
|
-
XdsListenerResource::HttpConnectionManager::HttpFilter{
|
|
391
|
-
std::string(name), std::move(*filter_config)});
|
|
392
422
|
}
|
|
393
|
-
if (
|
|
394
|
-
|
|
423
|
+
if (errors->size() == original_error_size &&
|
|
424
|
+
http_connection_manager.http_filters.empty()) {
|
|
425
|
+
errors->AddError("expected at least one HTTP filter");
|
|
395
426
|
}
|
|
396
427
|
// Make sure that the last filter is terminal and non-last filters are
|
|
397
428
|
// non-terminal. Note that this check is being performed in a separate loop
|
|
@@ -399,12 +430,12 @@ HttpConnectionManagerParse(
|
|
|
399
430
|
// out of which only one gets added in the final list.
|
|
400
431
|
for (const auto& http_filter : http_connection_manager.http_filters) {
|
|
401
432
|
const XdsHttpFilterImpl* filter_impl =
|
|
402
|
-
|
|
433
|
+
http_filter_registry.GetFilterForType(
|
|
403
434
|
http_filter.config.config_proto_type_name);
|
|
404
435
|
if (&http_filter != &http_connection_manager.http_filters.back()) {
|
|
405
436
|
// Filters before the last filter must not be terminal.
|
|
406
437
|
if (filter_impl->IsTerminalFilter()) {
|
|
407
|
-
errors
|
|
438
|
+
errors->AddError(
|
|
408
439
|
absl::StrCat("terminal filter for config type ",
|
|
409
440
|
http_filter.config.config_proto_type_name,
|
|
410
441
|
" must be the last filter in the chain"));
|
|
@@ -412,187 +443,168 @@ HttpConnectionManagerParse(
|
|
|
412
443
|
} else {
|
|
413
444
|
// The last filter must be terminal.
|
|
414
445
|
if (!filter_impl->IsTerminalFilter()) {
|
|
415
|
-
errors
|
|
446
|
+
errors->AddError(
|
|
416
447
|
absl::StrCat("non-terminal filter for config type ",
|
|
417
448
|
http_filter.config.config_proto_type_name,
|
|
418
449
|
" is the last filter in the chain"));
|
|
419
450
|
}
|
|
420
451
|
}
|
|
421
452
|
}
|
|
453
|
+
}
|
|
454
|
+
// Found inlined route_config. Parse it to find the cluster_name.
|
|
455
|
+
if (envoy_extensions_filters_network_http_connection_manager_v3_HttpConnectionManager_has_route_config(
|
|
456
|
+
http_connection_manager_proto)) {
|
|
457
|
+
const envoy_config_route_v3_RouteConfiguration* route_config =
|
|
458
|
+
envoy_extensions_filters_network_http_connection_manager_v3_HttpConnectionManager_route_config(
|
|
459
|
+
http_connection_manager_proto);
|
|
460
|
+
ValidationErrors::ScopedField field(errors, ".route_config");
|
|
461
|
+
http_connection_manager.route_config =
|
|
462
|
+
XdsRouteConfigResource::Parse(context, route_config, errors);
|
|
422
463
|
} else {
|
|
423
|
-
//
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
"router", {kXdsHttpRouterFilterConfigName, Json()}});
|
|
430
|
-
}
|
|
431
|
-
// Guarding parsing of RouteConfig on the server side with the environmental
|
|
432
|
-
// variable since that's the first feature on the server side that will be
|
|
433
|
-
// using this.
|
|
434
|
-
if (is_client || XdsRbacEnabled()) {
|
|
435
|
-
// Found inlined route_config. Parse it to find the cluster_name.
|
|
436
|
-
if (envoy_extensions_filters_network_http_connection_manager_v3_HttpConnectionManager_has_route_config(
|
|
437
|
-
http_connection_manager_proto)) {
|
|
438
|
-
const envoy_config_route_v3_RouteConfiguration* route_config =
|
|
439
|
-
envoy_extensions_filters_network_http_connection_manager_v3_HttpConnectionManager_route_config(
|
|
440
|
-
http_connection_manager_proto);
|
|
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
|
-
}
|
|
464
|
+
// Validate that RDS must be used to get the route_config dynamically.
|
|
465
|
+
const envoy_extensions_filters_network_http_connection_manager_v3_Rds* rds =
|
|
466
|
+
envoy_extensions_filters_network_http_connection_manager_v3_HttpConnectionManager_rds(
|
|
467
|
+
http_connection_manager_proto);
|
|
468
|
+
if (rds == nullptr) {
|
|
469
|
+
errors->AddError("neither route_config nor rds fields are present");
|
|
447
470
|
} else {
|
|
448
|
-
//
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
if (rds == nullptr) {
|
|
453
|
-
return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
|
454
|
-
"HttpConnectionManager neither has inlined route_config nor RDS.");
|
|
455
|
-
}
|
|
471
|
+
// Get the route_config_name.
|
|
472
|
+
http_connection_manager.route_config = UpbStringToStdString(
|
|
473
|
+
envoy_extensions_filters_network_http_connection_manager_v3_Rds_route_config_name(
|
|
474
|
+
rds));
|
|
456
475
|
// Check that the ConfigSource specifies ADS.
|
|
457
476
|
const envoy_config_core_v3_ConfigSource* config_source =
|
|
458
477
|
envoy_extensions_filters_network_http_connection_manager_v3_Rds_config_source(
|
|
459
478
|
rds);
|
|
479
|
+
ValidationErrors::ScopedField field(errors, ".rds.config_source");
|
|
460
480
|
if (config_source == nullptr) {
|
|
461
|
-
errors
|
|
462
|
-
"HttpConnectionManager missing config_source for RDS.");
|
|
481
|
+
errors->AddError("field not present");
|
|
463
482
|
} else if (!envoy_config_core_v3_ConfigSource_has_ads(config_source) &&
|
|
464
483
|
!envoy_config_core_v3_ConfigSource_has_self(config_source)) {
|
|
465
|
-
errors
|
|
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));
|
|
484
|
+
errors->AddError("ConfigSource does not specify ADS or SELF");
|
|
473
485
|
}
|
|
474
486
|
}
|
|
475
487
|
}
|
|
476
|
-
// Return result.
|
|
477
|
-
if (!errors.empty()) {
|
|
478
|
-
return absl::InvalidArgumentError(
|
|
479
|
-
absl::StrCat("Errors parsing HttpConnectionManager config: [",
|
|
480
|
-
absl::StrJoin(errors, "; "), "]"));
|
|
481
|
-
}
|
|
482
488
|
return http_connection_manager;
|
|
483
489
|
}
|
|
484
490
|
|
|
485
491
|
absl::StatusOr<XdsListenerResource> LdsResourceParseClient(
|
|
486
492
|
const XdsResourceType::DecodeContext& context,
|
|
487
|
-
const envoy_config_listener_v3_ApiListener* api_listener
|
|
488
|
-
const upb_StringView encoded_api_listener = google_protobuf_Any_value(
|
|
489
|
-
envoy_config_listener_v3_ApiListener_api_listener(api_listener));
|
|
490
|
-
const auto* http_connection_manager =
|
|
491
|
-
envoy_extensions_filters_network_http_connection_manager_v3_HttpConnectionManager_parse(
|
|
492
|
-
encoded_api_listener.data, encoded_api_listener.size, context.arena);
|
|
493
|
-
if (http_connection_manager == nullptr) {
|
|
494
|
-
return absl::InvalidArgumentError(
|
|
495
|
-
"Could not parse HttpConnectionManager config from ApiListener");
|
|
496
|
-
}
|
|
497
|
-
auto hcm = HttpConnectionManagerParse(true /* is_client */, context,
|
|
498
|
-
http_connection_manager, is_v2);
|
|
499
|
-
if (!hcm.ok()) return hcm.status();
|
|
493
|
+
const envoy_config_listener_v3_ApiListener* api_listener) {
|
|
500
494
|
XdsListenerResource lds_update;
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
495
|
+
ValidationErrors errors;
|
|
496
|
+
ValidationErrors::ScopedField field(&errors, "api_listener.api_listener");
|
|
497
|
+
auto* api_listener_field =
|
|
498
|
+
envoy_config_listener_v3_ApiListener_api_listener(api_listener);
|
|
499
|
+
auto extension = ExtractXdsExtension(context, api_listener_field, &errors);
|
|
500
|
+
if (extension.has_value()) {
|
|
501
|
+
lds_update.listener = HttpConnectionManagerParse(
|
|
502
|
+
/*is_client=*/true, context, std::move(*extension), &errors);
|
|
503
|
+
}
|
|
504
|
+
if (!errors.ok()) return errors.status("errors validating ApiListener");
|
|
505
|
+
return std::move(lds_update);
|
|
504
506
|
}
|
|
505
507
|
|
|
506
|
-
|
|
507
|
-
DownstreamTlsContextParse(
|
|
508
|
+
XdsListenerResource::DownstreamTlsContext DownstreamTlsContextParse(
|
|
508
509
|
const XdsResourceType::DecodeContext& context,
|
|
509
|
-
const envoy_config_core_v3_TransportSocket* transport_socket
|
|
510
|
+
const envoy_config_core_v3_TransportSocket* transport_socket,
|
|
511
|
+
ValidationErrors* errors) {
|
|
512
|
+
ValidationErrors::ScopedField field(errors, ".typed_config");
|
|
510
513
|
const auto* typed_config =
|
|
511
514
|
envoy_config_core_v3_TransportSocket_typed_config(transport_socket);
|
|
512
|
-
|
|
513
|
-
|
|
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 !=
|
|
515
|
+
auto extension = ExtractXdsExtension(context, typed_config, errors);
|
|
516
|
+
if (!extension.has_value()) return {};
|
|
517
|
+
if (extension->type !=
|
|
519
518
|
"envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext") {
|
|
520
|
-
|
|
521
|
-
|
|
519
|
+
ValidationErrors::ScopedField field(errors, ".type_url");
|
|
520
|
+
errors->AddError("unsupported transport socket type");
|
|
521
|
+
return {};
|
|
522
|
+
}
|
|
523
|
+
absl::string_view* serialized_downstream_tls_context =
|
|
524
|
+
absl::get_if<absl::string_view>(&extension->value);
|
|
525
|
+
if (serialized_downstream_tls_context == nullptr) {
|
|
526
|
+
errors->AddError("can't decode DownstreamTlsContext");
|
|
527
|
+
return {};
|
|
522
528
|
}
|
|
523
|
-
const upb_StringView encoded_downstream_tls_context =
|
|
524
|
-
google_protobuf_Any_value(typed_config);
|
|
525
529
|
const auto* downstream_tls_context_proto =
|
|
526
530
|
envoy_extensions_transport_sockets_tls_v3_DownstreamTlsContext_parse(
|
|
527
|
-
|
|
528
|
-
|
|
531
|
+
serialized_downstream_tls_context->data(),
|
|
532
|
+
serialized_downstream_tls_context->size(), context.arena);
|
|
529
533
|
if (downstream_tls_context_proto == nullptr) {
|
|
530
|
-
|
|
534
|
+
errors->AddError("can't decode DownstreamTlsContext");
|
|
535
|
+
return {};
|
|
531
536
|
}
|
|
532
|
-
std::vector<std::string> errors;
|
|
533
537
|
XdsListenerResource::DownstreamTlsContext downstream_tls_context;
|
|
534
538
|
auto* common_tls_context =
|
|
535
539
|
envoy_extensions_transport_sockets_tls_v3_DownstreamTlsContext_common_tls_context(
|
|
536
540
|
downstream_tls_context_proto);
|
|
537
541
|
if (common_tls_context != nullptr) {
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
542
|
+
ValidationErrors::ScopedField field(errors, ".common_tls_context");
|
|
543
|
+
downstream_tls_context.common_tls_context =
|
|
544
|
+
CommonTlsContext::Parse(context, common_tls_context, errors);
|
|
545
|
+
// Note: We can't be more specific about the field name for this
|
|
546
|
+
// error, because we don't know which fields they were found in
|
|
547
|
+
// inside of CommonTlsContext, so we make the error message a bit
|
|
548
|
+
// more verbose to compensate.
|
|
549
|
+
if (!downstream_tls_context.common_tls_context
|
|
550
|
+
.certificate_validation_context.match_subject_alt_names.empty()) {
|
|
551
|
+
errors->AddError("match_subject_alt_names not supported on servers");
|
|
543
552
|
}
|
|
544
553
|
}
|
|
554
|
+
// Note: We can't be more specific about the field name for this
|
|
555
|
+
// error, because we don't know which fields they were found in
|
|
556
|
+
// inside of CommonTlsContext, so we make the error message a bit
|
|
557
|
+
// more verbose to compensate.
|
|
558
|
+
if (downstream_tls_context.common_tls_context
|
|
559
|
+
.tls_certificate_provider_instance.instance_name.empty()) {
|
|
560
|
+
errors->AddError(
|
|
561
|
+
"TLS configuration provided but no "
|
|
562
|
+
"tls_certificate_provider_instance found");
|
|
563
|
+
}
|
|
545
564
|
auto* require_client_certificate =
|
|
546
565
|
envoy_extensions_transport_sockets_tls_v3_DownstreamTlsContext_require_client_certificate(
|
|
547
566
|
downstream_tls_context_proto);
|
|
548
567
|
if (require_client_certificate != nullptr) {
|
|
549
568
|
downstream_tls_context.require_client_certificate =
|
|
550
569
|
google_protobuf_BoolValue_value(require_client_certificate);
|
|
570
|
+
if (downstream_tls_context.require_client_certificate &&
|
|
571
|
+
downstream_tls_context.common_tls_context.certificate_validation_context
|
|
572
|
+
.ca_certificate_provider_instance.instance_name.empty()) {
|
|
573
|
+
ValidationErrors::ScopedField field(errors,
|
|
574
|
+
".require_client_certificate");
|
|
575
|
+
errors->AddError(
|
|
576
|
+
"client certificate required but no certificate "
|
|
577
|
+
"provider instance specified for validation");
|
|
578
|
+
}
|
|
551
579
|
}
|
|
552
580
|
auto* require_sni =
|
|
553
581
|
envoy_extensions_transport_sockets_tls_v3_DownstreamTlsContext_require_sni(
|
|
554
582
|
downstream_tls_context_proto);
|
|
555
583
|
if (require_sni != nullptr && google_protobuf_BoolValue_value(require_sni)) {
|
|
556
|
-
errors.
|
|
584
|
+
ValidationErrors::ScopedField field(errors, ".require_sni");
|
|
585
|
+
errors->AddError("field unsupported");
|
|
557
586
|
}
|
|
558
587
|
if (envoy_extensions_transport_sockets_tls_v3_DownstreamTlsContext_ocsp_staple_policy(
|
|
559
588
|
downstream_tls_context_proto) !=
|
|
560
589
|
envoy_extensions_transport_sockets_tls_v3_DownstreamTlsContext_LENIENT_STAPLING) {
|
|
561
|
-
errors.
|
|
562
|
-
|
|
563
|
-
if (downstream_tls_context.common_tls_context
|
|
564
|
-
.tls_certificate_provider_instance.instance_name.empty()) {
|
|
565
|
-
errors.emplace_back(
|
|
566
|
-
"TLS configuration provided but no "
|
|
567
|
-
"tls_certificate_provider_instance found.");
|
|
568
|
-
}
|
|
569
|
-
if (downstream_tls_context.require_client_certificate &&
|
|
570
|
-
downstream_tls_context.common_tls_context.certificate_validation_context
|
|
571
|
-
.ca_certificate_provider_instance.instance_name.empty()) {
|
|
572
|
-
errors.emplace_back(
|
|
573
|
-
"TLS configuration requires client certificates but no certificate "
|
|
574
|
-
"provider instance specified for validation.");
|
|
575
|
-
}
|
|
576
|
-
if (!downstream_tls_context.common_tls_context.certificate_validation_context
|
|
577
|
-
.match_subject_alt_names.empty()) {
|
|
578
|
-
errors.emplace_back("match_subject_alt_names not supported on servers");
|
|
579
|
-
}
|
|
580
|
-
// Return result.
|
|
581
|
-
if (!errors.empty()) {
|
|
582
|
-
return absl::InvalidArgumentError(
|
|
583
|
-
absl::StrCat("Errors parsing DownstreamTlsContext: [",
|
|
584
|
-
absl::StrJoin(errors, "; "), "]"));
|
|
590
|
+
ValidationErrors::ScopedField field(errors, ".ocsp_staple_policy");
|
|
591
|
+
errors->AddError("value must be LENIENT_STAPLING");
|
|
585
592
|
}
|
|
586
593
|
return downstream_tls_context;
|
|
587
594
|
}
|
|
588
595
|
|
|
589
|
-
absl::
|
|
590
|
-
const envoy_config_core_v3_CidrRange* cidr_range_proto
|
|
596
|
+
absl::optional<XdsListenerResource::FilterChainMap::CidrRange> CidrRangeParse(
|
|
597
|
+
const envoy_config_core_v3_CidrRange* cidr_range_proto,
|
|
598
|
+
ValidationErrors* errors) {
|
|
599
|
+
ValidationErrors::ScopedField field(errors, ".address_prefix");
|
|
591
600
|
XdsListenerResource::FilterChainMap::CidrRange cidr_range;
|
|
592
601
|
std::string address_prefix = UpbStringToStdString(
|
|
593
602
|
envoy_config_core_v3_CidrRange_address_prefix(cidr_range_proto));
|
|
594
603
|
auto address = StringToSockaddr(address_prefix, /*port=*/0);
|
|
595
|
-
if (!address.ok())
|
|
604
|
+
if (!address.ok()) {
|
|
605
|
+
errors->AddError(address.status().message());
|
|
606
|
+
return absl::nullopt;
|
|
607
|
+
}
|
|
596
608
|
cidr_range.address = *address;
|
|
597
609
|
cidr_range.prefix_len = 0;
|
|
598
610
|
auto* prefix_len_proto =
|
|
@@ -602,18 +614,20 @@ absl::StatusOr<XdsListenerResource::FilterChainMap::CidrRange> CidrRangeParse(
|
|
|
602
614
|
google_protobuf_UInt32Value_value(prefix_len_proto),
|
|
603
615
|
(reinterpret_cast<const grpc_sockaddr*>(cidr_range.address.addr))
|
|
604
616
|
->sa_family == GRPC_AF_INET
|
|
605
|
-
? uint32_t
|
|
606
|
-
: uint32_t
|
|
617
|
+
? uint32_t{32}
|
|
618
|
+
: uint32_t{128});
|
|
607
619
|
}
|
|
608
620
|
// Normalize the network address by masking it with prefix_len
|
|
609
621
|
grpc_sockaddr_mask_bits(&cidr_range.address, cidr_range.prefix_len);
|
|
610
622
|
return cidr_range;
|
|
611
623
|
}
|
|
612
624
|
|
|
613
|
-
absl::
|
|
614
|
-
const envoy_config_listener_v3_FilterChainMatch* filter_chain_match_proto
|
|
615
|
-
|
|
625
|
+
absl::optional<FilterChain::FilterChainMatch> FilterChainMatchParse(
|
|
626
|
+
const envoy_config_listener_v3_FilterChainMatch* filter_chain_match_proto,
|
|
627
|
+
ValidationErrors* errors) {
|
|
616
628
|
FilterChain::FilterChainMatch filter_chain_match;
|
|
629
|
+
const size_t original_error_size = errors->size();
|
|
630
|
+
// destination_port
|
|
617
631
|
auto* destination_port =
|
|
618
632
|
envoy_config_listener_v3_FilterChainMatch_destination_port(
|
|
619
633
|
filter_chain_match_proto);
|
|
@@ -621,51 +635,56 @@ absl::StatusOr<FilterChain::FilterChainMatch> FilterChainMatchParse(
|
|
|
621
635
|
filter_chain_match.destination_port =
|
|
622
636
|
google_protobuf_UInt32Value_value(destination_port);
|
|
623
637
|
}
|
|
638
|
+
// prefix_ranges
|
|
624
639
|
size_t size = 0;
|
|
625
640
|
auto* prefix_ranges = envoy_config_listener_v3_FilterChainMatch_prefix_ranges(
|
|
626
641
|
filter_chain_match_proto, &size);
|
|
627
642
|
filter_chain_match.prefix_ranges.reserve(size);
|
|
628
643
|
for (size_t i = 0; i < size; i++) {
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
644
|
+
ValidationErrors::ScopedField field(
|
|
645
|
+
errors, absl::StrCat(".prefix_ranges[", i, "]"));
|
|
646
|
+
auto cidr_range = CidrRangeParse(prefix_ranges[i], errors);
|
|
647
|
+
if (cidr_range.has_value()) {
|
|
648
|
+
filter_chain_match.prefix_ranges.push_back(*cidr_range);
|
|
634
649
|
}
|
|
635
|
-
filter_chain_match.prefix_ranges.push_back(*cidr_range);
|
|
636
650
|
}
|
|
651
|
+
// source_type
|
|
637
652
|
filter_chain_match.source_type =
|
|
638
653
|
static_cast<XdsListenerResource::FilterChainMap::ConnectionSourceType>(
|
|
639
654
|
envoy_config_listener_v3_FilterChainMatch_source_type(
|
|
640
655
|
filter_chain_match_proto));
|
|
656
|
+
// source_prefix_ranges
|
|
641
657
|
auto* source_prefix_ranges =
|
|
642
658
|
envoy_config_listener_v3_FilterChainMatch_source_prefix_ranges(
|
|
643
659
|
filter_chain_match_proto, &size);
|
|
644
660
|
filter_chain_match.source_prefix_ranges.reserve(size);
|
|
645
661
|
for (size_t i = 0; i < size; i++) {
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
662
|
+
ValidationErrors::ScopedField field(
|
|
663
|
+
errors, absl::StrCat(".source_prefix_ranges[", i, "]"));
|
|
664
|
+
auto cidr_range = CidrRangeParse(source_prefix_ranges[i], errors);
|
|
665
|
+
if (cidr_range.has_value()) {
|
|
666
|
+
filter_chain_match.source_prefix_ranges.push_back(*cidr_range);
|
|
651
667
|
}
|
|
652
|
-
filter_chain_match.source_prefix_ranges.push_back(*cidr_range);
|
|
653
668
|
}
|
|
669
|
+
// source_ports
|
|
654
670
|
auto* source_ports = envoy_config_listener_v3_FilterChainMatch_source_ports(
|
|
655
671
|
filter_chain_match_proto, &size);
|
|
656
672
|
filter_chain_match.source_ports.reserve(size);
|
|
657
673
|
for (size_t i = 0; i < size; i++) {
|
|
658
674
|
filter_chain_match.source_ports.push_back(source_ports[i]);
|
|
659
675
|
}
|
|
676
|
+
// server_names
|
|
660
677
|
auto* server_names = envoy_config_listener_v3_FilterChainMatch_server_names(
|
|
661
678
|
filter_chain_match_proto, &size);
|
|
662
679
|
for (size_t i = 0; i < size; i++) {
|
|
663
680
|
filter_chain_match.server_names.push_back(
|
|
664
681
|
UpbStringToStdString(server_names[i]));
|
|
665
682
|
}
|
|
683
|
+
// transport_protocol
|
|
666
684
|
filter_chain_match.transport_protocol = UpbStringToStdString(
|
|
667
685
|
envoy_config_listener_v3_FilterChainMatch_transport_protocol(
|
|
668
686
|
filter_chain_match_proto));
|
|
687
|
+
// application_protocols
|
|
669
688
|
auto* application_protocols =
|
|
670
689
|
envoy_config_listener_v3_FilterChainMatch_application_protocols(
|
|
671
690
|
filter_chain_match_proto, &size);
|
|
@@ -674,112 +693,93 @@ absl::StatusOr<FilterChain::FilterChainMatch> FilterChainMatchParse(
|
|
|
674
693
|
UpbStringToStdString(application_protocols[i]));
|
|
675
694
|
}
|
|
676
695
|
// Return result.
|
|
677
|
-
if (
|
|
678
|
-
return absl::InvalidArgumentError(
|
|
679
|
-
absl::StrCat("errors parsing filter chain match: [",
|
|
680
|
-
absl::StrJoin(errors, "; "), "]"));
|
|
681
|
-
}
|
|
696
|
+
if (errors->size() != original_error_size) return absl::nullopt;
|
|
682
697
|
return filter_chain_match;
|
|
683
698
|
}
|
|
684
699
|
|
|
685
|
-
absl::
|
|
700
|
+
absl::optional<FilterChain> FilterChainParse(
|
|
686
701
|
const XdsResourceType::DecodeContext& context,
|
|
687
702
|
const envoy_config_listener_v3_FilterChain* filter_chain_proto,
|
|
688
|
-
|
|
703
|
+
ValidationErrors* errors) {
|
|
689
704
|
FilterChain filter_chain;
|
|
690
|
-
|
|
705
|
+
const size_t original_error_size = errors->size();
|
|
706
|
+
// filter_chain_match
|
|
691
707
|
auto* filter_chain_match =
|
|
692
708
|
envoy_config_listener_v3_FilterChain_filter_chain_match(
|
|
693
709
|
filter_chain_proto);
|
|
694
710
|
if (filter_chain_match != nullptr) {
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
} else {
|
|
711
|
+
ValidationErrors::ScopedField field(errors, ".filter_chain_match");
|
|
712
|
+
auto match = FilterChainMatchParse(filter_chain_match, errors);
|
|
713
|
+
if (match.has_value()) {
|
|
699
714
|
filter_chain.filter_chain_match = std::move(*match);
|
|
700
715
|
}
|
|
701
716
|
}
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
const upb_StringView encoded_http_connection_manager =
|
|
727
|
-
google_protobuf_Any_value(typed_config);
|
|
728
|
-
const auto* http_connection_manager =
|
|
729
|
-
envoy_extensions_filters_network_http_connection_manager_v3_HttpConnectionManager_parse(
|
|
730
|
-
encoded_http_connection_manager.data,
|
|
731
|
-
encoded_http_connection_manager.size, context.arena);
|
|
732
|
-
if (http_connection_manager == nullptr) {
|
|
733
|
-
errors.emplace_back(
|
|
734
|
-
"Could not parse HttpConnectionManager config from filter "
|
|
735
|
-
"typed_config");
|
|
736
|
-
} else {
|
|
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
|
-
}
|
|
745
|
-
}
|
|
717
|
+
// filters
|
|
718
|
+
{
|
|
719
|
+
ValidationErrors::ScopedField field(errors, ".filters");
|
|
720
|
+
filter_chain.filter_chain_data =
|
|
721
|
+
std::make_shared<XdsListenerResource::FilterChainData>();
|
|
722
|
+
size_t size = 0;
|
|
723
|
+
auto* filters =
|
|
724
|
+
envoy_config_listener_v3_FilterChain_filters(filter_chain_proto, &size);
|
|
725
|
+
if (size != 1) {
|
|
726
|
+
errors->AddError(
|
|
727
|
+
"must have exactly one filter (HttpConnectionManager -- "
|
|
728
|
+
"no other filter is supported at the moment)");
|
|
729
|
+
}
|
|
730
|
+
// entries in filters list
|
|
731
|
+
for (size_t i = 0; i < size; ++i) {
|
|
732
|
+
ValidationErrors::ScopedField field(
|
|
733
|
+
errors, absl::StrCat("[", i, "].typed_config"));
|
|
734
|
+
auto* typed_config =
|
|
735
|
+
envoy_config_listener_v3_Filter_typed_config(filters[i]);
|
|
736
|
+
auto extension = ExtractXdsExtension(context, typed_config, errors);
|
|
737
|
+
if (extension.has_value()) {
|
|
738
|
+
filter_chain.filter_chain_data->http_connection_manager =
|
|
739
|
+
HttpConnectionManagerParse(/*is_client=*/false, context,
|
|
740
|
+
std::move(*extension), errors);
|
|
746
741
|
}
|
|
747
742
|
}
|
|
748
743
|
}
|
|
744
|
+
// transport_socket
|
|
749
745
|
auto* transport_socket =
|
|
750
746
|
envoy_config_listener_v3_FilterChain_transport_socket(filter_chain_proto);
|
|
751
747
|
if (transport_socket != nullptr) {
|
|
752
|
-
|
|
753
|
-
|
|
754
|
-
|
|
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
|
-
}
|
|
748
|
+
ValidationErrors::ScopedField field(errors, ".transport_socket");
|
|
749
|
+
filter_chain.filter_chain_data->downstream_tls_context =
|
|
750
|
+
DownstreamTlsContextParse(context, transport_socket, errors);
|
|
760
751
|
}
|
|
761
752
|
// Return result.
|
|
762
|
-
if (
|
|
763
|
-
return absl::InvalidArgumentError(absl::StrCat(
|
|
764
|
-
"Errors parsing FilterChain: [", absl::StrJoin(errors, "; "), "]"));
|
|
765
|
-
}
|
|
753
|
+
if (errors->size() != original_error_size) return absl::nullopt;
|
|
766
754
|
return filter_chain;
|
|
767
755
|
}
|
|
768
756
|
|
|
769
|
-
absl::
|
|
770
|
-
const envoy_config_core_v3_Address* address_proto
|
|
757
|
+
absl::optional<std::string> AddressParse(
|
|
758
|
+
const envoy_config_core_v3_Address* address_proto,
|
|
759
|
+
ValidationErrors* errors) {
|
|
760
|
+
if (address_proto == nullptr) {
|
|
761
|
+
errors->AddError("field not present");
|
|
762
|
+
return absl::nullopt;
|
|
763
|
+
}
|
|
764
|
+
ValidationErrors::ScopedField field(errors, ".socket_address");
|
|
771
765
|
const auto* socket_address =
|
|
772
766
|
envoy_config_core_v3_Address_socket_address(address_proto);
|
|
773
767
|
if (socket_address == nullptr) {
|
|
774
|
-
|
|
775
|
-
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
|
|
768
|
+
errors->AddError("field not present");
|
|
769
|
+
return absl::nullopt;
|
|
770
|
+
}
|
|
771
|
+
{
|
|
772
|
+
ValidationErrors::ScopedField field(errors, ".protocol");
|
|
773
|
+
if (envoy_config_core_v3_SocketAddress_protocol(socket_address) !=
|
|
774
|
+
envoy_config_core_v3_SocketAddress_TCP) {
|
|
775
|
+
errors->AddError("value must be TCP");
|
|
776
|
+
}
|
|
779
777
|
}
|
|
778
|
+
ValidationErrors::ScopedField field2(errors, ".port_value");
|
|
780
779
|
uint32_t port = envoy_config_core_v3_SocketAddress_port_value(socket_address);
|
|
781
780
|
if (port > 65535) {
|
|
782
|
-
|
|
781
|
+
errors->AddError("invalid port");
|
|
782
|
+
return absl::nullopt;
|
|
783
783
|
}
|
|
784
784
|
return JoinHostPort(
|
|
785
785
|
UpbStringToAbsl(
|
|
@@ -803,97 +803,103 @@ struct InternalFilterChainMap {
|
|
|
803
803
|
DestinationIpMap destination_ip_map;
|
|
804
804
|
};
|
|
805
805
|
|
|
806
|
-
|
|
806
|
+
void AddFilterChainDataForSourcePort(
|
|
807
807
|
const FilterChain& filter_chain, uint32_t port,
|
|
808
|
-
XdsListenerResource::FilterChainMap::SourcePortsMap* ports_map
|
|
808
|
+
XdsListenerResource::FilterChainMap::SourcePortsMap* ports_map,
|
|
809
|
+
ValidationErrors* errors) {
|
|
809
810
|
auto insert_result = ports_map->emplace(
|
|
810
811
|
port, XdsListenerResource::FilterChainMap::FilterChainDataSharedPtr{
|
|
811
812
|
filter_chain.filter_chain_data});
|
|
812
813
|
if (!insert_result.second) {
|
|
813
|
-
|
|
814
|
-
"
|
|
814
|
+
errors->AddError(absl::StrCat(
|
|
815
|
+
"duplicate matching rules detected when adding filter chain: ",
|
|
815
816
|
filter_chain.filter_chain_match.ToString()));
|
|
816
817
|
}
|
|
817
|
-
return absl::OkStatus();
|
|
818
818
|
}
|
|
819
819
|
|
|
820
|
-
|
|
820
|
+
void AddFilterChainDataForSourcePorts(
|
|
821
821
|
const FilterChain& filter_chain,
|
|
822
|
-
XdsListenerResource::FilterChainMap::SourcePortsMap* ports_map
|
|
822
|
+
XdsListenerResource::FilterChainMap::SourcePortsMap* ports_map,
|
|
823
|
+
ValidationErrors* errors) {
|
|
823
824
|
if (filter_chain.filter_chain_match.source_ports.empty()) {
|
|
824
|
-
|
|
825
|
+
AddFilterChainDataForSourcePort(filter_chain, 0, ports_map, errors);
|
|
825
826
|
} else {
|
|
826
827
|
for (uint32_t port : filter_chain.filter_chain_match.source_ports) {
|
|
827
|
-
|
|
828
|
-
AddFilterChainDataForSourcePort(filter_chain, port, ports_map);
|
|
829
|
-
if (!status.ok()) return status;
|
|
828
|
+
AddFilterChainDataForSourcePort(filter_chain, port, ports_map, errors);
|
|
830
829
|
}
|
|
831
830
|
}
|
|
832
|
-
return absl::OkStatus();
|
|
833
831
|
}
|
|
834
832
|
|
|
835
|
-
|
|
833
|
+
void AddFilterChainDataForSourceIpRange(
|
|
836
834
|
const FilterChain& filter_chain,
|
|
837
|
-
InternalFilterChainMap::SourceIpMap* source_ip_map
|
|
835
|
+
InternalFilterChainMap::SourceIpMap* source_ip_map,
|
|
836
|
+
ValidationErrors* errors) {
|
|
838
837
|
if (filter_chain.filter_chain_match.source_prefix_ranges.empty()) {
|
|
839
838
|
auto insert_result = source_ip_map->emplace(
|
|
840
839
|
"", XdsListenerResource::FilterChainMap::SourceIp());
|
|
841
|
-
|
|
842
|
-
filter_chain, &insert_result.first->second.ports_map);
|
|
840
|
+
AddFilterChainDataForSourcePorts(
|
|
841
|
+
filter_chain, &insert_result.first->second.ports_map, errors);
|
|
843
842
|
} else {
|
|
844
843
|
for (const auto& prefix_range :
|
|
845
844
|
filter_chain.filter_chain_match.source_prefix_ranges) {
|
|
846
845
|
auto addr_str = grpc_sockaddr_to_string(&prefix_range.address, false);
|
|
847
|
-
if (!addr_str.ok())
|
|
846
|
+
if (!addr_str.ok()) {
|
|
847
|
+
errors->AddError(absl::StrCat(
|
|
848
|
+
"error parsing source IP sockaddr (should not happen): ",
|
|
849
|
+
addr_str.status().message()));
|
|
850
|
+
continue;
|
|
851
|
+
}
|
|
848
852
|
auto insert_result = source_ip_map->emplace(
|
|
849
853
|
absl::StrCat(*addr_str, "/", prefix_range.prefix_len),
|
|
850
854
|
XdsListenerResource::FilterChainMap::SourceIp());
|
|
851
855
|
if (insert_result.second) {
|
|
852
856
|
insert_result.first->second.prefix_range.emplace(prefix_range);
|
|
853
857
|
}
|
|
854
|
-
|
|
855
|
-
filter_chain, &insert_result.first->second.ports_map);
|
|
856
|
-
if (!status.ok()) return status;
|
|
858
|
+
AddFilterChainDataForSourcePorts(
|
|
859
|
+
filter_chain, &insert_result.first->second.ports_map, errors);
|
|
857
860
|
}
|
|
858
861
|
}
|
|
859
|
-
return absl::OkStatus();
|
|
860
862
|
}
|
|
861
863
|
|
|
862
|
-
|
|
864
|
+
void AddFilterChainDataForSourceType(
|
|
863
865
|
const FilterChain& filter_chain,
|
|
864
|
-
InternalFilterChainMap::DestinationIp* destination_ip
|
|
866
|
+
InternalFilterChainMap::DestinationIp* destination_ip,
|
|
867
|
+
ValidationErrors* errors) {
|
|
865
868
|
GPR_ASSERT(static_cast<unsigned int>(
|
|
866
869
|
filter_chain.filter_chain_match.source_type) < 3);
|
|
867
|
-
|
|
868
|
-
filter_chain,
|
|
869
|
-
|
|
870
|
+
AddFilterChainDataForSourceIpRange(
|
|
871
|
+
filter_chain,
|
|
872
|
+
&destination_ip->source_types_array[static_cast<int>(
|
|
873
|
+
filter_chain.filter_chain_match.source_type)],
|
|
874
|
+
errors);
|
|
870
875
|
}
|
|
871
876
|
|
|
872
|
-
|
|
877
|
+
void AddFilterChainDataForApplicationProtocols(
|
|
873
878
|
const FilterChain& filter_chain,
|
|
874
|
-
InternalFilterChainMap::DestinationIp* destination_ip
|
|
879
|
+
InternalFilterChainMap::DestinationIp* destination_ip,
|
|
880
|
+
ValidationErrors* errors) {
|
|
875
881
|
// Only allow filter chains that do not mention application protocols
|
|
876
|
-
if (
|
|
877
|
-
|
|
882
|
+
if (filter_chain.filter_chain_match.application_protocols.empty()) {
|
|
883
|
+
AddFilterChainDataForSourceType(filter_chain, destination_ip, errors);
|
|
878
884
|
}
|
|
879
|
-
return AddFilterChainDataForSourceType(filter_chain, destination_ip);
|
|
880
885
|
}
|
|
881
886
|
|
|
882
|
-
|
|
887
|
+
void AddFilterChainDataForTransportProtocol(
|
|
883
888
|
const FilterChain& filter_chain,
|
|
884
|
-
InternalFilterChainMap::DestinationIp* destination_ip
|
|
889
|
+
InternalFilterChainMap::DestinationIp* destination_ip,
|
|
890
|
+
ValidationErrors* errors) {
|
|
885
891
|
const std::string& transport_protocol =
|
|
886
892
|
filter_chain.filter_chain_match.transport_protocol;
|
|
887
893
|
// Only allow filter chains with no transport protocol or "raw_buffer"
|
|
888
894
|
if (!transport_protocol.empty() && transport_protocol != "raw_buffer") {
|
|
889
|
-
return
|
|
895
|
+
return;
|
|
890
896
|
}
|
|
891
897
|
// If for this configuration, we've already seen filter chains that mention
|
|
892
898
|
// the transport protocol as "raw_buffer", we will never match filter chains
|
|
893
899
|
// that do not mention it.
|
|
894
900
|
if (destination_ip->transport_protocol_raw_buffer_provided &&
|
|
895
901
|
transport_protocol.empty()) {
|
|
896
|
-
return
|
|
902
|
+
return;
|
|
897
903
|
}
|
|
898
904
|
if (!transport_protocol.empty() &&
|
|
899
905
|
!destination_ip->transport_protocol_raw_buffer_provided) {
|
|
@@ -903,45 +909,50 @@ absl::Status AddFilterChainDataForTransportProtocol(
|
|
|
903
909
|
destination_ip->source_types_array =
|
|
904
910
|
InternalFilterChainMap::ConnectionSourceTypesArray();
|
|
905
911
|
}
|
|
906
|
-
|
|
907
|
-
|
|
912
|
+
AddFilterChainDataForApplicationProtocols(filter_chain, destination_ip,
|
|
913
|
+
errors);
|
|
908
914
|
}
|
|
909
915
|
|
|
910
|
-
|
|
916
|
+
void AddFilterChainDataForServerNames(
|
|
911
917
|
const FilterChain& filter_chain,
|
|
912
|
-
InternalFilterChainMap::DestinationIp* destination_ip
|
|
918
|
+
InternalFilterChainMap::DestinationIp* destination_ip,
|
|
919
|
+
ValidationErrors* errors) {
|
|
913
920
|
// Don't continue adding filter chains with server names mentioned
|
|
914
|
-
if (
|
|
915
|
-
|
|
921
|
+
if (filter_chain.filter_chain_match.server_names.empty()) {
|
|
922
|
+
AddFilterChainDataForTransportProtocol(filter_chain, destination_ip,
|
|
923
|
+
errors);
|
|
916
924
|
}
|
|
917
|
-
return AddFilterChainDataForTransportProtocol(filter_chain, destination_ip);
|
|
918
925
|
}
|
|
919
926
|
|
|
920
|
-
|
|
927
|
+
void AddFilterChainDataForDestinationIpRange(
|
|
921
928
|
const FilterChain& filter_chain,
|
|
922
|
-
InternalFilterChainMap::DestinationIpMap* destination_ip_map
|
|
929
|
+
InternalFilterChainMap::DestinationIpMap* destination_ip_map,
|
|
930
|
+
ValidationErrors* errors) {
|
|
923
931
|
if (filter_chain.filter_chain_match.prefix_ranges.empty()) {
|
|
924
932
|
auto insert_result = destination_ip_map->emplace(
|
|
925
933
|
"", InternalFilterChainMap::DestinationIp());
|
|
926
|
-
|
|
927
|
-
|
|
934
|
+
AddFilterChainDataForServerNames(filter_chain, &insert_result.first->second,
|
|
935
|
+
errors);
|
|
928
936
|
} else {
|
|
929
937
|
for (const auto& prefix_range :
|
|
930
938
|
filter_chain.filter_chain_match.prefix_ranges) {
|
|
931
939
|
auto addr_str = grpc_sockaddr_to_string(&prefix_range.address, false);
|
|
932
|
-
if (!addr_str.ok())
|
|
940
|
+
if (!addr_str.ok()) {
|
|
941
|
+
errors->AddError(absl::StrCat(
|
|
942
|
+
"error parsing destination IP sockaddr (should not happen): ",
|
|
943
|
+
addr_str.status().message()));
|
|
944
|
+
continue;
|
|
945
|
+
}
|
|
933
946
|
auto insert_result = destination_ip_map->emplace(
|
|
934
947
|
absl::StrCat(*addr_str, "/", prefix_range.prefix_len),
|
|
935
948
|
InternalFilterChainMap::DestinationIp());
|
|
936
949
|
if (insert_result.second) {
|
|
937
950
|
insert_result.first->second.prefix_range.emplace(prefix_range);
|
|
938
951
|
}
|
|
939
|
-
|
|
940
|
-
|
|
941
|
-
if (!status.ok()) return status;
|
|
952
|
+
AddFilterChainDataForServerNames(filter_chain,
|
|
953
|
+
&insert_result.first->second, errors);
|
|
942
954
|
}
|
|
943
955
|
}
|
|
944
|
-
return absl::OkStatus();
|
|
945
956
|
}
|
|
946
957
|
|
|
947
958
|
XdsListenerResource::FilterChainMap BuildFromInternalFilterChainMap(
|
|
@@ -963,68 +974,86 @@ XdsListenerResource::FilterChainMap BuildFromInternalFilterChainMap(
|
|
|
963
974
|
return filter_chain_map;
|
|
964
975
|
}
|
|
965
976
|
|
|
966
|
-
|
|
967
|
-
const std::vector<FilterChain>& filter_chains) {
|
|
977
|
+
XdsListenerResource::FilterChainMap BuildFilterChainMap(
|
|
978
|
+
const std::vector<FilterChain>& filter_chains, ValidationErrors* errors) {
|
|
968
979
|
InternalFilterChainMap internal_filter_chain_map;
|
|
969
980
|
for (const auto& filter_chain : filter_chains) {
|
|
970
981
|
// Discard filter chain entries that specify destination port
|
|
971
982
|
if (filter_chain.filter_chain_match.destination_port != 0) continue;
|
|
972
|
-
|
|
973
|
-
filter_chain, &internal_filter_chain_map.destination_ip_map);
|
|
974
|
-
if (!status.ok()) return status;
|
|
983
|
+
AddFilterChainDataForDestinationIpRange(
|
|
984
|
+
filter_chain, &internal_filter_chain_map.destination_ip_map, errors);
|
|
975
985
|
}
|
|
976
986
|
return BuildFromInternalFilterChainMap(&internal_filter_chain_map);
|
|
977
987
|
}
|
|
978
988
|
|
|
979
989
|
absl::StatusOr<XdsListenerResource> LdsResourceParseServer(
|
|
980
990
|
const XdsResourceType::DecodeContext& context,
|
|
981
|
-
const envoy_config_listener_v3_Listener* listener
|
|
982
|
-
|
|
983
|
-
|
|
984
|
-
|
|
985
|
-
|
|
986
|
-
|
|
987
|
-
|
|
988
|
-
|
|
989
|
-
|
|
990
|
-
|
|
991
|
-
|
|
992
|
-
|
|
993
|
-
|
|
991
|
+
const envoy_config_listener_v3_Listener* listener) {
|
|
992
|
+
ValidationErrors errors;
|
|
993
|
+
XdsListenerResource::TcpListener tcp_listener;
|
|
994
|
+
// address
|
|
995
|
+
{
|
|
996
|
+
ValidationErrors::ScopedField field(&errors, "address");
|
|
997
|
+
auto address = AddressParse(
|
|
998
|
+
envoy_config_listener_v3_Listener_address(listener), &errors);
|
|
999
|
+
if (address.has_value()) tcp_listener.address = std::move(*address);
|
|
1000
|
+
}
|
|
1001
|
+
// use_original_dst
|
|
1002
|
+
{
|
|
1003
|
+
ValidationErrors::ScopedField field(&errors, "use_original_dst");
|
|
1004
|
+
const auto* use_original_dst =
|
|
1005
|
+
envoy_config_listener_v3_Listener_use_original_dst(listener);
|
|
1006
|
+
if (use_original_dst != nullptr &&
|
|
1007
|
+
google_protobuf_BoolValue_value(use_original_dst)) {
|
|
1008
|
+
errors.AddError("field not supported");
|
|
994
1009
|
}
|
|
995
1010
|
}
|
|
996
|
-
|
|
997
|
-
|
|
998
|
-
|
|
999
|
-
|
|
1000
|
-
|
|
1001
|
-
|
|
1002
|
-
|
|
1003
|
-
|
|
1004
|
-
|
|
1005
|
-
|
|
1006
|
-
|
|
1007
|
-
|
|
1008
|
-
|
|
1009
|
-
|
|
1010
|
-
|
|
1011
|
-
|
|
1012
|
-
|
|
1013
|
-
|
|
1014
|
-
|
|
1015
|
-
|
|
1016
|
-
|
|
1011
|
+
// filter_chains
|
|
1012
|
+
size_t num_filter_chains = 0;
|
|
1013
|
+
{
|
|
1014
|
+
ValidationErrors::ScopedField field(&errors, "filter_chains");
|
|
1015
|
+
auto* filter_chains = envoy_config_listener_v3_Listener_filter_chains(
|
|
1016
|
+
listener, &num_filter_chains);
|
|
1017
|
+
std::vector<FilterChain> parsed_filter_chains;
|
|
1018
|
+
parsed_filter_chains.reserve(num_filter_chains);
|
|
1019
|
+
for (size_t i = 0; i < num_filter_chains; i++) {
|
|
1020
|
+
ValidationErrors::ScopedField field(&errors, absl::StrCat("[", i, "]"));
|
|
1021
|
+
auto filter_chain = FilterChainParse(context, filter_chains[i], &errors);
|
|
1022
|
+
if (filter_chain.has_value()) {
|
|
1023
|
+
parsed_filter_chains.push_back(std::move(*filter_chain));
|
|
1024
|
+
}
|
|
1025
|
+
}
|
|
1026
|
+
tcp_listener.filter_chain_map =
|
|
1027
|
+
BuildFilterChainMap(parsed_filter_chains, &errors);
|
|
1028
|
+
}
|
|
1029
|
+
// default_filter_chain
|
|
1030
|
+
{
|
|
1031
|
+
ValidationErrors::ScopedField field(&errors, "default_filter_chain");
|
|
1032
|
+
auto* default_filter_chain =
|
|
1033
|
+
envoy_config_listener_v3_Listener_default_filter_chain(listener);
|
|
1034
|
+
if (default_filter_chain != nullptr) {
|
|
1035
|
+
auto filter_chain =
|
|
1036
|
+
FilterChainParse(context, default_filter_chain, &errors);
|
|
1037
|
+
if (filter_chain.has_value() &&
|
|
1038
|
+
filter_chain->filter_chain_data != nullptr) {
|
|
1039
|
+
tcp_listener.default_filter_chain =
|
|
1040
|
+
std::move(*filter_chain->filter_chain_data);
|
|
1041
|
+
}
|
|
1042
|
+
} else if (num_filter_chains == 0) {
|
|
1043
|
+
// Make sure that there is at least one filter chain to use.
|
|
1044
|
+
errors.AddError("must be set if filter_chains is unset");
|
|
1017
1045
|
}
|
|
1018
1046
|
}
|
|
1019
|
-
|
|
1020
|
-
|
|
1021
|
-
|
|
1047
|
+
// Return result.
|
|
1048
|
+
if (!errors.ok()) return errors.status("errors validating server Listener");
|
|
1049
|
+
XdsListenerResource lds_update;
|
|
1050
|
+
lds_update.listener = std::move(tcp_listener);
|
|
1022
1051
|
return lds_update;
|
|
1023
1052
|
}
|
|
1024
1053
|
|
|
1025
1054
|
absl::StatusOr<XdsListenerResource> LdsResourceParse(
|
|
1026
1055
|
const XdsResourceType::DecodeContext& context,
|
|
1027
|
-
const envoy_config_listener_v3_Listener* listener
|
|
1056
|
+
const envoy_config_listener_v3_Listener* listener) {
|
|
1028
1057
|
// Check whether it's a client or server listener.
|
|
1029
1058
|
const envoy_config_listener_v3_ApiListener* api_listener =
|
|
1030
1059
|
envoy_config_listener_v3_Listener_api_listener(listener);
|
|
@@ -1043,9 +1072,9 @@ absl::StatusOr<XdsListenerResource> LdsResourceParse(
|
|
|
1043
1072
|
// If api_listener is present, it's for a client; otherwise, it's
|
|
1044
1073
|
// for a server.
|
|
1045
1074
|
if (api_listener != nullptr) {
|
|
1046
|
-
return LdsResourceParseClient(context, api_listener
|
|
1075
|
+
return LdsResourceParseClient(context, api_listener);
|
|
1047
1076
|
}
|
|
1048
|
-
return LdsResourceParseServer(context, listener
|
|
1077
|
+
return LdsResourceParseServer(context, listener);
|
|
1049
1078
|
}
|
|
1050
1079
|
|
|
1051
1080
|
void MaybeLogListener(const XdsResourceType::DecodeContext& context,
|
|
@@ -1064,7 +1093,7 @@ void MaybeLogListener(const XdsResourceType::DecodeContext& context,
|
|
|
1064
1093
|
|
|
1065
1094
|
XdsResourceType::DecodeResult XdsListenerResourceType::Decode(
|
|
1066
1095
|
const XdsResourceType::DecodeContext& context,
|
|
1067
|
-
absl::string_view serialized_resource
|
|
1096
|
+
absl::string_view serialized_resource) const {
|
|
1068
1097
|
DecodeResult result;
|
|
1069
1098
|
// Parse serialized proto.
|
|
1070
1099
|
auto* resource = envoy_config_listener_v3_Listener_parse(
|
|
@@ -1078,7 +1107,7 @@ XdsResourceType::DecodeResult XdsListenerResourceType::Decode(
|
|
|
1078
1107
|
// Validate resource.
|
|
1079
1108
|
result.name =
|
|
1080
1109
|
UpbStringToStdString(envoy_config_listener_v3_Listener_name(resource));
|
|
1081
|
-
auto listener = LdsResourceParse(context, resource
|
|
1110
|
+
auto listener = LdsResourceParse(context, resource);
|
|
1082
1111
|
if (!listener.ok()) {
|
|
1083
1112
|
if (GRPC_TRACE_FLAG_ENABLED(*context.tracer)) {
|
|
1084
1113
|
gpr_log(GPR_ERROR, "[xds_client %p] invalid Listener %s: %s",
|
|
@@ -1092,9 +1121,8 @@ XdsResourceType::DecodeResult XdsListenerResourceType::Decode(
|
|
|
1092
1121
|
context.client, result.name->c_str(),
|
|
1093
1122
|
listener->ToString().c_str());
|
|
1094
1123
|
}
|
|
1095
|
-
|
|
1096
|
-
|
|
1097
|
-
result.resource = std::move(resource);
|
|
1124
|
+
result.resource =
|
|
1125
|
+
std::make_unique<XdsListenerResource>(std::move(*listener));
|
|
1098
1126
|
}
|
|
1099
1127
|
return result;
|
|
1100
1128
|
}
|