grpc 1.51.0 → 1.52.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of grpc might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/Makefile +91 -23
- 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 +17 -3
- 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 +14 -2
- data/include/grpc/fork.h +25 -1
- data/include/grpc/grpc.h +3 -3
- 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 -787
- data/include/grpc/impl/codegen/log.h +3 -86
- data/include/grpc/impl/codegen/port_platform.h +3 -755
- 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 +9 -9
- data/src/core/ext/filters/channel_idle/channel_idle_filter.h +1 -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 +21 -21
- data/src/core/ext/filters/client_channel/backup_poller.h +21 -21
- data/src/core/ext/filters/client_channel/channel_connectivity.cc +45 -24
- data/src/core/ext/filters/client_channel/client_channel.cc +40 -31
- data/src/core/ext/filters/client_channel/client_channel.h +7 -6
- data/src/core/ext/filters/client_channel/client_channel_channelz.cc +17 -17
- 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 +17 -17
- data/src/core/ext/filters/client_channel/config_selector.h +16 -20
- data/src/core/ext/filters/client_channel/dynamic_filters.cc +8 -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 +1 -1
- data/src/core/ext/filters/client_channel/http_proxy.cc +39 -39
- 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/backend_metric_data.h +17 -17
- data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +2 -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 +58 -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 +102 -116
- 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.h +2 -4
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +17 -17
- 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 +5 -5
- data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +173 -196
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +10 -19
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +66 -97
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +14 -13
- 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 +98 -84
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +10 -8
- 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 +21 -35
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +45 -39
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +11 -23
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +16 -49
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +31 -21
- 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 +4 -4
- 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 +0 -1
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +3 -3
- 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 +21 -21
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +60 -59
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +67 -66
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +50 -51
- 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 +1 -1
- 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 +0 -1
- data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +44 -33
- data/src/core/ext/filters/client_channel/resolver/polling_resolver.h +8 -10
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +59 -73
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.h +1 -1
- data/src/core/ext/filters/client_channel/retry_filter.cc +1 -1
- data/src/core/ext/filters/client_channel/retry_service_config.cc +1 -1
- data/src/core/ext/filters/client_channel/retry_throttle.cc +19 -21
- data/src/core/ext/filters/client_channel/retry_throttle.h +18 -18
- data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +1 -1
- data/src/core/ext/filters/client_channel/subchannel.cc +139 -155
- data/src/core/ext/filters/client_channel/subchannel.h +15 -38
- data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +18 -18
- data/src/core/ext/filters/deadline/deadline_filter.cc +21 -3
- data/src/core/ext/filters/deadline/deadline_filter.h +1 -1
- data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +2 -1
- data/src/core/ext/filters/http/client/http_client_filter.cc +20 -21
- data/src/core/ext/filters/http/client/http_client_filter.h +17 -17
- data/src/core/ext/filters/http/client_authority_filter.cc +18 -18
- 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 +18 -18
- data/src/core/ext/filters/http/server/http_server_filter.h +18 -18
- data/src/core/ext/filters/message_size/message_size_filter.cc +6 -6
- data/src/core/ext/filters/message_size/message_size_filter.h +1 -1
- 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 +3 -4
- 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 +54 -44
- data/src/core/ext/transport/chttp2/client/chttp2_connector.h +28 -22
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +24 -25
- data/src/core/ext/transport/chttp2/server/chttp2_server.h +18 -18
- data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +17 -17
- 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 +66 -35
- 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 +75 -38
- data/src/core/ext/transport/chttp2/transport/flow_control.h +56 -31
- data/src/core/ext/transport/chttp2/transport/frame.h +19 -19
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +17 -17
- data/src/core/ext/transport/chttp2/transport/frame_data.h +22 -22
- data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +23 -23
- data/src/core/ext/transport/chttp2/transport/frame_goaway.h +18 -18
- data/src/core/ext/transport/chttp2/transport/frame_ping.cc +21 -21
- data/src/core/ext/transport/chttp2/transport/frame_ping.h +19 -19
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +18 -18
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +18 -18
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +19 -19
- data/src/core/ext/transport/chttp2/transport/frame_settings.h +20 -20
- data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +17 -17
- data/src/core/ext/transport/chttp2/transport/frame_window_update.h +18 -18
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +129 -176
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +39 -58
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +69 -111
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +20 -20
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +19 -20
- 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 +170 -163
- data/src/core/ext/transport/chttp2/transport/parsing.cc +96 -28
- 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 +17 -17
- data/src/core/ext/transport/chttp2/transport/varint.h +24 -24
- data/src/core/ext/transport/chttp2/transport/writing.cc +45 -41
- data/src/core/ext/transport/inproc/inproc_plugin.cc +17 -17
- data/src/core/ext/transport/inproc/inproc_transport.cc +25 -25
- 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/xds_api.cc +5 -27
- data/src/core/ext/xds/xds_api.h +2 -1
- 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.h +2 -2
- data/src/core/ext/xds/xds_client.cc +14 -6
- data/src/core/ext/xds/xds_client.h +6 -3
- data/src/core/ext/xds/xds_client_grpc.cc +26 -0
- 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 +94 -46
- data/src/core/ext/xds/xds_cluster.h +44 -23
- data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +30 -50
- data/src/core/ext/xds/xds_cluster_specifier_plugin.h +14 -9
- data/src/core/ext/xds/xds_common_types.cc +4 -3
- data/src/core/ext/xds/xds_endpoint.cc +8 -2
- 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 +7 -6
- data/src/core/ext/xds/xds_http_fault_filter.h +3 -3
- data/src/core/ext/xds/xds_http_filters.cc +11 -6
- data/src/core/ext/xds/xds_http_filters.h +5 -5
- data/src/core/ext/xds/xds_http_rbac_filter.cc +7 -6
- data/src/core/ext/xds/xds_http_rbac_filter.h +3 -3
- 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 +0 -4
- data/src/core/ext/xds/xds_listener.cc +14 -28
- data/src/core/ext/xds/xds_listener.h +2 -0
- data/src/core/ext/xds/xds_resource_type_impl.h +8 -6
- data/src/core/ext/xds/xds_route_config.cc +501 -529
- data/src/core/ext/xds/xds_route_config.h +29 -18
- data/src/core/ext/xds/xds_server_config_fetcher.cc +12 -24
- data/src/core/ext/xds/xds_transport_grpc.cc +2 -2
- data/src/core/ext/xds/xds_transport_grpc.h +1 -1
- data/src/core/lib/address_utils/parse_address.cc +19 -19
- 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 +43 -42
- data/src/core/lib/channel/channel_args_preconditioning.h +1 -1
- data/src/core/lib/channel/channel_stack.cc +39 -38
- data/src/core/lib/channel/channel_stack.h +127 -127
- data/src/core/lib/channel/channel_stack_builder.cc +17 -17
- data/src/core/lib/channel/channel_stack_builder_impl.cc +18 -18
- data/src/core/lib/channel/channel_trace.cc +17 -17
- data/src/core/lib/channel/channel_trace.h +19 -19
- data/src/core/lib/channel/channelz.cc +17 -18
- 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 +43 -34
- data/src/core/lib/channel/connected_channel.h +18 -18
- data/src/core/lib/channel/context.h +18 -18
- data/src/core/lib/channel/promise_based_filter.cc +191 -68
- data/src/core/lib/channel/promise_based_filter.h +10 -1
- 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 +21 -21
- 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/stats.cc +17 -17
- data/src/core/lib/debug/stats.h +17 -17
- data/src/core/lib/debug/trace.cc +18 -18
- data/src/core/lib/debug/trace.h +19 -19
- 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/posix_engine/ev_epoll1_linux.cc +27 -31
- data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.h +2 -2
- data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +36 -37
- data/src/core/lib/event_engine/posix_engine/ev_poll_posix.h +3 -3
- data/src/core/lib/event_engine/posix_engine/event_poller.h +3 -3
- data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc +2 -2
- data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.h +2 -2
- data/src/core/lib/event_engine/posix_engine/internal_errqueue.cc +2 -2
- data/src/core/lib/event_engine/posix_engine/internal_errqueue.h +46 -46
- data/src/core/lib/event_engine/posix_engine/lockfree_event.cc +10 -12
- data/src/core/lib/event_engine/posix_engine/lockfree_event.h +2 -2
- data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +79 -41
- data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +11 -9
- data/src/core/lib/event_engine/posix_engine/posix_engine.cc +33 -40
- data/src/core/lib/event_engine/posix_engine/posix_engine.h +14 -14
- data/src/core/lib/event_engine/posix_engine/posix_engine_closure.h +2 -2
- 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 +55 -283
- data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +4 -49
- data/src/core/lib/event_engine/posix_engine/timer.cc +49 -49
- data/src/core/lib/event_engine/posix_engine/timer.h +87 -87
- 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 +19 -20
- data/src/core/lib/event_engine/posix_engine/timer_manager.h +20 -20
- data/src/core/lib/event_engine/posix_engine/traced_buffer_list.cc +39 -8
- data/src/core/lib/event_engine/posix_engine/traced_buffer_list.h +46 -40
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.cc +8 -7
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.h +2 -2
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.cc +6 -7
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.h +2 -2
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix.h +28 -28
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.cc +4 -4
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.h +3 -3
- 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 +19 -18
- data/src/core/lib/event_engine/thread_pool.h +17 -17
- 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 +2 -2
- data/src/core/lib/event_engine/windows/windows_engine.cc +8 -8
- data/src/core/lib/event_engine/windows/windows_engine.h +1 -1
- data/src/core/lib/experiments/experiments.cc +5 -16
- data/src/core/lib/experiments/experiments.h +7 -12
- 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 +22 -21
- 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 +21 -20
- 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 +57 -57
- 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 +19 -18
- 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/filters/http/message_compress/message_decompress_filter.h → lib/gprpp/crash.cc} +15 -14
- 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/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/ref_counted.h +18 -18
- data/src/core/lib/gprpp/ref_counted_ptr.h +19 -18
- data/src/core/lib/gprpp/stat_windows.cc +1 -0
- data/src/core/lib/gprpp/status_helper.cc +4 -3
- 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 +25 -24
- data/src/core/lib/gprpp/time.cc +13 -7
- data/src/core/lib/gprpp/time.h +0 -1
- 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/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 +17 -17
- data/src/core/lib/http/httpcli.h +20 -21
- data/src/core/lib/http/httpcli_security_connector.cc +18 -19
- data/src/core/lib/http/parser.cc +22 -22
- 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 +52 -21
- data/src/core/lib/iomgr/buffer_list.h +63 -57
- data/src/core/lib/iomgr/call_combiner.cc +18 -17
- data/src/core/lib/iomgr/call_combiner.h +18 -18
- data/src/core/lib/iomgr/cfstream_handle.cc +20 -20
- data/src/core/lib/iomgr/cfstream_handle.h +22 -22
- data/src/core/lib/iomgr/closure.h +42 -41
- data/src/core/lib/iomgr/combiner.cc +18 -17
- 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 +18 -18
- 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 +18 -17
- data/src/core/lib/iomgr/endpoint_pair_windows.cc +18 -17
- data/src/core/lib/iomgr/error.cc +22 -19
- data/src/core/lib/iomgr/error.h +20 -21
- 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 +17 -17
- data/src/core/lib/iomgr/ev_apple.h +17 -17
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +182 -170
- data/src/core/lib/iomgr/ev_epoll1_linux.h +18 -18
- data/src/core/lib/iomgr/ev_poll_posix.cc +185 -174
- 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 +31 -30
- data/src/core/lib/iomgr/exec_ctx.h +139 -138
- data/src/core/lib/iomgr/executor.cc +20 -19
- 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 +1 -1
- data/src/core/lib/iomgr/internal_errqueue.h +80 -80
- data/src/core/lib/iomgr/iocp_windows.cc +21 -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 +18 -18
- data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +18 -18
- data/src/core/lib/iomgr/iomgr_windows.cc +22 -21
- data/src/core/lib/iomgr/load_file.cc +19 -18
- data/src/core/lib/iomgr/load_file.h +20 -20
- data/src/core/lib/iomgr/lockfree_event.cc +104 -104
- 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 +26 -25
- 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 +18 -18
- data/src/core/lib/iomgr/resolve_address.cc +18 -17
- data/src/core/lib/iomgr/resolve_address.h +18 -18
- data/src/core/lib/iomgr/resolve_address_impl.h +1 -1
- data/src/core/lib/iomgr/resolve_address_posix.cc +21 -20
- data/src/core/lib/iomgr/resolve_address_windows.cc +4 -3
- 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 +38 -37
- data/src/core/lib/iomgr/socket_utils_linux.cc +18 -17
- data/src/core/lib/iomgr/socket_utils_posix.cc +21 -20
- data/src/core/lib/iomgr/socket_utils_posix.h +76 -76
- data/src/core/lib/iomgr/socket_utils_windows.cc +20 -19
- data/src/core/lib/iomgr/socket_windows.cc +35 -34
- data/src/core/lib/iomgr/socket_windows.h +56 -56
- data/src/core/lib/iomgr/systemd_utils.cc +116 -0
- data/src/core/lib/iomgr/systemd_utils.h +33 -0
- 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 +19 -18
- data/src/core/lib/iomgr/tcp_client_posix.cc +39 -38
- data/src/core/lib/iomgr/tcp_client_posix.h +43 -43
- data/src/core/lib/iomgr/tcp_client_windows.cc +28 -27
- data/src/core/lib/iomgr/tcp_posix.cc +136 -134
- 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 +91 -61
- data/src/core/lib/iomgr/tcp_server_utils_posix.h +54 -51
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +72 -34
- data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +28 -27
- data/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc +18 -18
- data/src/core/lib/iomgr/tcp_server_windows.cc +71 -75
- data/src/core/lib/iomgr/tcp_windows.cc +83 -60
- 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 +106 -107
- 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 +18 -17
- 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 +19 -18
- data/src/core/lib/iomgr/wakeup_fd_nospecial.cc +23 -23
- data/src/core/lib/iomgr/wakeup_fd_pipe.cc +19 -18
- 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_object_loader.cc +10 -0
- data/src/core/lib/json/json_object_loader.h +15 -1
- data/src/core/lib/json/json_reader.cc +28 -28
- data/src/core/lib/json/json_writer.cc +56 -56
- data/src/core/lib/load_balancing/lb_policy.cc +17 -17
- data/src/core/lib/load_balancing/lb_policy.h +3 -4
- data/src/core/lib/load_balancing/subchannel_interface.h +1 -1
- data/src/core/lib/matchers/matchers.cc +3 -1
- data/src/core/lib/matchers/matchers.h +1 -1
- data/src/core/lib/promise/activity.h +20 -12
- data/src/core/lib/promise/arena_promise.h +2 -1
- data/src/core/lib/promise/context.h +1 -0
- data/src/core/lib/promise/detail/promise_factory.h +1 -0
- data/src/core/lib/promise/detail/switch.h +18 -18
- data/src/core/lib/promise/exec_ctx_wakeup_scheduler.h +18 -12
- data/src/core/lib/promise/for_each.h +68 -42
- data/src/core/lib/promise/latch.h +13 -19
- data/src/core/lib/promise/map.h +1 -0
- data/src/core/lib/promise/map_pipe.h +1 -0
- data/src/core/lib/promise/poll.h +6 -0
- data/src/core/lib/promise/seq.h +1 -0
- data/src/core/lib/promise/try_concurrently.h +1 -0
- data/src/core/lib/promise/try_seq.h +1 -0
- data/src/core/lib/resolver/resolver.cc +17 -17
- data/src/core/lib/resolver/server_address.cc +17 -17
- data/src/core/lib/resolver/server_address.h +18 -18
- data/src/core/lib/resource_quota/api.h +1 -1
- data/src/core/lib/resource_quota/arena.cc +17 -17
- data/src/core/lib/resource_quota/arena.h +18 -18
- data/src/core/lib/resource_quota/memory_quota.cc +139 -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/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 +30 -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/composite/composite_credentials.cc +21 -21
- 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/fake/fake_credentials.cc +19 -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 +48 -49
- data/src/core/lib/security/credentials/google_default/google_default_credentials.h +18 -19
- data/src/core/lib/security/credentials/iam/iam_credentials.cc +17 -17
- data/src/core/lib/security/credentials/iam/iam_credentials.h +18 -18
- data/src/core/lib/security/credentials/jwt/json_token.cc +23 -23
- data/src/core/lib/security/credentials/jwt/json_token.h +32 -32
- data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +17 -17
- data/src/core/lib/security/credentials/jwt/jwt_credentials.h +18 -19
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +70 -70
- 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 +28 -29
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +19 -19
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +18 -18
- data/src/core/lib/security/credentials/plugin/plugin_credentials.h +19 -19
- 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 +1 -1
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +1 -2
- 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 +26 -27
- 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 +24 -26
- 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.h +1 -2
- 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 +18 -18
- 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 +23 -23
- 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 +25 -25
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +38 -39
- data/src/core/lib/security/security_connector/ssl_utils.cc +32 -32
- 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 +21 -21
- 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 +20 -20
- data/src/core/lib/security/transport/secure_endpoint.cc +28 -28
- data/src/core/lib/security/transport/secure_endpoint.h +22 -22
- data/src/core/lib/security/transport/security_handshaker.cc +17 -17
- data/src/core/lib/security/transport/security_handshaker.h +19 -19
- data/src/core/lib/security/transport/server_auth_filter.cc +22 -23
- data/src/core/lib/security/transport/tsi_error.cc +17 -17
- data/src/core/lib/security/transport/tsi_error.h +18 -18
- data/src/core/lib/security/util/json_util.cc +17 -17
- data/src/core/lib/security/util/json_util.h +18 -18
- data/src/core/lib/service_config/service_config.h +1 -1
- data/src/core/lib/service_config/service_config_call_data.h +7 -1
- data/src/core/lib/slice/b64.cc +24 -24
- 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 +37 -37
- data/src/core/lib/slice/slice.h +38 -5
- data/src/core/lib/slice/slice_buffer.cc +50 -45
- data/src/core/lib/slice/slice_buffer.h +27 -2
- data/src/core/lib/slice/slice_internal.h +18 -18
- 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 +19 -19
- data/src/core/lib/surface/byte_buffer_reader.cc +19 -19
- data/src/core/lib/surface/call.cc +163 -104
- data/src/core/lib/surface/call.h +42 -39
- data/src/core/lib/surface/call_details.cc +17 -18
- 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 +5 -5
- data/src/core/lib/surface/channel.cc +18 -18
- data/src/core/lib/surface/channel.h +31 -31
- 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 +18 -18
- data/src/core/lib/surface/channel_stack_type.cc +17 -17
- data/src/core/lib/surface/channel_stack_type.h +18 -18
- data/src/core/lib/surface/completion_queue.cc +136 -140
- 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 +21 -19
- 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 +1 -0
- data/src/core/lib/surface/lame_client.cc +18 -18
- 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 +15 -15
- data/src/core/lib/surface/server.h +2 -3
- data/src/core/lib/surface/validate_metadata.cc +17 -17
- 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 +17 -17
- data/src/core/lib/transport/connectivity_state.h +19 -19
- data/src/core/lib/transport/error_utils.cc +17 -17
- data/src/core/lib/transport/error_utils.h +18 -18
- data/src/core/lib/transport/handshaker.cc +37 -34
- data/src/core/lib/transport/handshaker.h +42 -37
- data/src/core/lib/transport/handshaker_factory.h +18 -18
- data/src/core/lib/transport/handshaker_registry.cc +17 -17
- data/src/core/lib/transport/handshaker_registry.h +18 -18
- data/src/core/lib/transport/http2_errors.h +20 -20
- data/src/core/lib/transport/http_connect_handshaker.cc +17 -17
- 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 +30 -20
- 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.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 +25 -24
- data/src/core/lib/transport/transport.h +134 -132
- data/src/core/lib/transport/transport_impl.h +41 -41
- data/src/core/lib/transport/transport_op_string.cc +19 -19
- data/src/core/plugin_registry/grpc_plugin_registry.cc +21 -19
- data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +5 -0
- 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 +68 -67
- 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 +29 -28
- 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 +19 -19
- 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 +38 -37
- 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 +31 -30
- 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 +31 -30
- 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 +53 -52
- 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 +77 -76
- 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 +1 -0
- data/src/core/tsi/ssl/session_cache/ssl_session.h +18 -18
- data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +18 -18
- 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 +19 -18
- 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 -36
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +59 -56
- data/src/ruby/lib/grpc/generic/bidi_call.rb +2 -0
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/spec/client_server_spec.rb +20 -8
- 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
- metadata +93 -24
- data/include/grpc/impl/codegen/gpr_slice.h +0 -71
- 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
@@ -0,0 +1,228 @@
|
|
1
|
+
// Copyright 2022 gRPC Authors
|
2
|
+
//
|
3
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
// you may not use this file except in compliance with the License.
|
5
|
+
// You may obtain a copy of the License at
|
6
|
+
//
|
7
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
//
|
9
|
+
// Unless required by applicable law or agreed to in writing, software
|
10
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
// See the License for the specific language governing permissions and
|
13
|
+
// limitations under the License.
|
14
|
+
#ifndef GRPC_CORE_LIB_EVENT_ENGINE_POSIX_ENGINE_POSIX_ENGINE_LISTENER_H
|
15
|
+
#define GRPC_CORE_LIB_EVENT_ENGINE_POSIX_ENGINE_POSIX_ENGINE_LISTENER_H
|
16
|
+
|
17
|
+
#include <grpc/support/port_platform.h>
|
18
|
+
|
19
|
+
#include <string.h>
|
20
|
+
|
21
|
+
#include <atomic>
|
22
|
+
#include <list>
|
23
|
+
#include <memory>
|
24
|
+
#include <string>
|
25
|
+
#include <utility>
|
26
|
+
|
27
|
+
#include "absl/base/thread_annotations.h"
|
28
|
+
#include "absl/functional/any_invocable.h"
|
29
|
+
#include "absl/status/status.h"
|
30
|
+
#include "absl/status/statusor.h"
|
31
|
+
#include "absl/synchronization/mutex.h"
|
32
|
+
|
33
|
+
#include <grpc/event_engine/endpoint_config.h>
|
34
|
+
#include <grpc/event_engine/event_engine.h>
|
35
|
+
#include <grpc/event_engine/memory_allocator.h>
|
36
|
+
|
37
|
+
#include "src/core/lib/iomgr/port.h"
|
38
|
+
|
39
|
+
#ifdef GRPC_POSIX_SOCKET_TCP
|
40
|
+
#include "src/core/lib/event_engine/posix_engine/event_poller.h"
|
41
|
+
#include "src/core/lib/event_engine/posix_engine/posix_engine_closure.h"
|
42
|
+
#include "src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.h"
|
43
|
+
#include "src/core/lib/event_engine/posix_engine/tcp_socket_utils.h"
|
44
|
+
#include "src/core/lib/event_engine/tcp_socket_utils.h"
|
45
|
+
#endif
|
46
|
+
|
47
|
+
namespace grpc_event_engine {
|
48
|
+
namespace experimental {
|
49
|
+
|
50
|
+
#ifdef GRPC_POSIX_SOCKET_TCP
|
51
|
+
class PosixEngineListenerImpl
|
52
|
+
: public std::enable_shared_from_this<PosixEngineListenerImpl> {
|
53
|
+
public:
|
54
|
+
PosixEngineListenerImpl(
|
55
|
+
EventEngine::Listener::AcceptCallback on_accept,
|
56
|
+
absl::AnyInvocable<void(absl::Status)> on_shutdown,
|
57
|
+
const grpc_event_engine::experimental::EndpointConfig& config,
|
58
|
+
std::unique_ptr<grpc_event_engine::experimental::MemoryAllocatorFactory>
|
59
|
+
memory_allocator_factory,
|
60
|
+
PosixEventPoller* poller, std::shared_ptr<EventEngine> engine);
|
61
|
+
// Binds an address to the listener. This creates a ListenerSocket
|
62
|
+
// and sets its fields appropriately.
|
63
|
+
absl::StatusOr<int> Bind(const EventEngine::ResolvedAddress& addr);
|
64
|
+
// Signals event manager to listen for connections on all created sockets.
|
65
|
+
absl::Status Start();
|
66
|
+
// Trigger graceful shutdown of all asynchronous accept operations.
|
67
|
+
void TriggerShutdown();
|
68
|
+
|
69
|
+
~PosixEngineListenerImpl();
|
70
|
+
|
71
|
+
private:
|
72
|
+
// This class represents accepting for one bind fd belonging to the listener.
|
73
|
+
// Each AsyncConnectionAcceptor takes a ref to the parent
|
74
|
+
// PosixEngineListenerImpl object. So the PosixEngineListenerImpl can be
|
75
|
+
// deleted only after all AsyncConnectionAcceptor's get destroyed.
|
76
|
+
class AsyncConnectionAcceptor {
|
77
|
+
public:
|
78
|
+
AsyncConnectionAcceptor(std::shared_ptr<EventEngine> engine,
|
79
|
+
std::shared_ptr<PosixEngineListenerImpl> listener,
|
80
|
+
ListenerSocketsContainer::ListenerSocket socket)
|
81
|
+
: engine_(std::move(engine)),
|
82
|
+
listener_(std::move(listener)),
|
83
|
+
socket_(socket),
|
84
|
+
handle_(listener_->poller_->CreateHandle(
|
85
|
+
socket_.sock.Fd(),
|
86
|
+
*grpc_event_engine::experimental::
|
87
|
+
ResolvedAddressToNormalizedString(socket_.addr),
|
88
|
+
listener_->poller_->CanTrackErrors())),
|
89
|
+
notify_on_accept_(PosixEngineClosure::ToPermanentClosure(
|
90
|
+
[this](absl::Status status) { NotifyOnAccept(status); })){};
|
91
|
+
// Start listening for incoming connections on the socket.
|
92
|
+
void Start();
|
93
|
+
// Internal callback invoked when the socket has incoming connections to
|
94
|
+
// process.
|
95
|
+
void NotifyOnAccept(absl::Status status);
|
96
|
+
// Shutdown the poller handle associated with this socket.
|
97
|
+
void Shutdown();
|
98
|
+
void Ref() { ref_count_.fetch_add(1, std::memory_order_relaxed); }
|
99
|
+
void Unref() {
|
100
|
+
if (ref_count_.fetch_sub(1, std::memory_order_acq_rel) == 1) {
|
101
|
+
delete this;
|
102
|
+
}
|
103
|
+
}
|
104
|
+
ListenerSocketsContainer::ListenerSocket& Socket() { return socket_; }
|
105
|
+
~AsyncConnectionAcceptor() {
|
106
|
+
handle_->OrphanHandle(nullptr, nullptr, "");
|
107
|
+
delete notify_on_accept_;
|
108
|
+
}
|
109
|
+
|
110
|
+
private:
|
111
|
+
std::atomic<int> ref_count_{1};
|
112
|
+
std::shared_ptr<EventEngine> engine_;
|
113
|
+
std::shared_ptr<PosixEngineListenerImpl> listener_;
|
114
|
+
ListenerSocketsContainer::ListenerSocket socket_;
|
115
|
+
EventHandle* handle_;
|
116
|
+
PosixEngineClosure* notify_on_accept_;
|
117
|
+
};
|
118
|
+
class ListenerAsyncAcceptors : public ListenerSocketsContainer {
|
119
|
+
public:
|
120
|
+
explicit ListenerAsyncAcceptors(PosixEngineListenerImpl* listener)
|
121
|
+
: listener_(listener){};
|
122
|
+
void Append(ListenerSocket socket) override {
|
123
|
+
acceptors_.push_back(new AsyncConnectionAcceptor(
|
124
|
+
listener_->engine_, listener_->shared_from_this(), socket));
|
125
|
+
}
|
126
|
+
|
127
|
+
absl::StatusOr<ListenerSocket> Find(
|
128
|
+
const grpc_event_engine::experimental::EventEngine::ResolvedAddress&
|
129
|
+
addr) override {
|
130
|
+
for (auto acceptor = acceptors_.begin(); acceptor != acceptors_.end();
|
131
|
+
++acceptor) {
|
132
|
+
if ((*acceptor)->Socket().addr.size() == addr.size() &&
|
133
|
+
memcmp((*acceptor)->Socket().addr.address(), addr.address(),
|
134
|
+
addr.size()) == 0) {
|
135
|
+
return (*acceptor)->Socket();
|
136
|
+
}
|
137
|
+
}
|
138
|
+
return absl::NotFoundError("Socket not found!");
|
139
|
+
}
|
140
|
+
|
141
|
+
int Size() { return static_cast<int>(acceptors_.size()); }
|
142
|
+
|
143
|
+
std::list<AsyncConnectionAcceptor*>::const_iterator begin() {
|
144
|
+
return acceptors_.begin();
|
145
|
+
}
|
146
|
+
std::list<AsyncConnectionAcceptor*>::const_iterator end() {
|
147
|
+
return acceptors_.end();
|
148
|
+
}
|
149
|
+
|
150
|
+
private:
|
151
|
+
std::list<AsyncConnectionAcceptor*> acceptors_;
|
152
|
+
PosixEngineListenerImpl* listener_;
|
153
|
+
};
|
154
|
+
friend class ListenerAsyncAcceptors;
|
155
|
+
friend class AsyncConnectionAcceptor;
|
156
|
+
// The mutex ensures thread safety when multiple threads try to call Bind
|
157
|
+
// and Start in parallel.
|
158
|
+
absl::Mutex mu_;
|
159
|
+
PosixEventPoller* poller_;
|
160
|
+
PosixTcpOptions options_;
|
161
|
+
std::shared_ptr<EventEngine> engine_;
|
162
|
+
// Linked list of sockets. One is created upon each successful bind
|
163
|
+
// operation.
|
164
|
+
ListenerAsyncAcceptors acceptors_ ABSL_GUARDED_BY(mu_);
|
165
|
+
// Callback to be invoked upon accepting a connection.
|
166
|
+
EventEngine::Listener::AcceptCallback on_accept_;
|
167
|
+
// Callback to be invoked upon shutdown of listener.
|
168
|
+
absl::AnyInvocable<void(absl::Status)> on_shutdown_;
|
169
|
+
// Set to true when the listener has started listening for new connections.
|
170
|
+
// Any further bind operations would fail.
|
171
|
+
bool started_ ABSL_GUARDED_BY(mu_) = false;
|
172
|
+
// Pointer to a slice allocator factory object which can generate
|
173
|
+
// unique slice allocators for each new incoming connection.
|
174
|
+
std::unique_ptr<grpc_event_engine::experimental::MemoryAllocatorFactory>
|
175
|
+
memory_allocator_factory_;
|
176
|
+
};
|
177
|
+
|
178
|
+
class PosixEngineListener
|
179
|
+
: public grpc_event_engine::experimental::EventEngine::Listener {
|
180
|
+
public:
|
181
|
+
PosixEngineListener(
|
182
|
+
grpc_event_engine::experimental::EventEngine::Listener::AcceptCallback
|
183
|
+
on_accept,
|
184
|
+
absl::AnyInvocable<void(absl::Status)> on_shutdown,
|
185
|
+
const grpc_event_engine::experimental::EndpointConfig& config,
|
186
|
+
std::unique_ptr<grpc_event_engine::experimental::MemoryAllocatorFactory>
|
187
|
+
memory_allocator_factory,
|
188
|
+
PosixEventPoller* poller, std::shared_ptr<EventEngine> engine)
|
189
|
+
: impl_(std::make_shared<PosixEngineListenerImpl>(
|
190
|
+
std::move(on_accept), std::move(on_shutdown), config,
|
191
|
+
std::move(memory_allocator_factory), poller, std::move(engine))) {}
|
192
|
+
~PosixEngineListener() override { impl_->TriggerShutdown(); };
|
193
|
+
absl::StatusOr<int> Bind(
|
194
|
+
const grpc_event_engine::experimental::EventEngine::ResolvedAddress& addr)
|
195
|
+
override {
|
196
|
+
return impl_->Bind(addr);
|
197
|
+
}
|
198
|
+
absl::Status Start() override { return impl_->Start(); }
|
199
|
+
|
200
|
+
private:
|
201
|
+
std::shared_ptr<PosixEngineListenerImpl> impl_;
|
202
|
+
};
|
203
|
+
|
204
|
+
#else // GRPC_POSIX_SOCKET_TCP
|
205
|
+
|
206
|
+
#include "src/core/lib/gprpp/crash.h"
|
207
|
+
|
208
|
+
class PosixEngineListener
|
209
|
+
: public grpc_event_engine::experimental::EventEngine::Listener {
|
210
|
+
public:
|
211
|
+
PosixEngineListener() = default;
|
212
|
+
~PosixEngineListener() override = default;
|
213
|
+
absl::StatusOr<int> Bind(const grpc_event_engine::experimental::EventEngine::
|
214
|
+
ResolvedAddress& /*addr*/) override {
|
215
|
+
grpc_core::Crash(
|
216
|
+
"EventEngine::Listener::Bind not supported on this platform");
|
217
|
+
}
|
218
|
+
absl::Status Start() override {
|
219
|
+
grpc_core::Crash(
|
220
|
+
"EventEngine::Listener::Start not supported on this platform");
|
221
|
+
}
|
222
|
+
};
|
223
|
+
|
224
|
+
#endif
|
225
|
+
|
226
|
+
} // namespace experimental
|
227
|
+
} // namespace grpc_event_engine
|
228
|
+
#endif // GRPC_CORE_LIB_EVENT_ENGINE_POSIX_ENGINE_POSIX_ENGINE_LISTENER_H
|
@@ -0,0 +1,380 @@
|
|
1
|
+
// Copyright 2022 The gRPC Authors
|
2
|
+
//
|
3
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
// you may not use this file except in compliance with the License.
|
5
|
+
// You may obtain a copy of the License at
|
6
|
+
//
|
7
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
//
|
9
|
+
// Unless required by applicable law or agreed to in writing, software
|
10
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
// See the License for the specific language governing permissions and
|
13
|
+
// limitations under the License.
|
14
|
+
|
15
|
+
#include <grpc/support/port_platform.h>
|
16
|
+
|
17
|
+
#include "src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.h"
|
18
|
+
|
19
|
+
#include <limits.h>
|
20
|
+
#include <stdio.h>
|
21
|
+
#include <stdlib.h>
|
22
|
+
|
23
|
+
#include <cstring>
|
24
|
+
#include <string>
|
25
|
+
|
26
|
+
#include "absl/cleanup/cleanup.h"
|
27
|
+
#include "absl/status/status.h"
|
28
|
+
|
29
|
+
#include <grpc/event_engine/event_engine.h>
|
30
|
+
#include <grpc/support/log.h>
|
31
|
+
|
32
|
+
#include "src/core/lib/event_engine/posix_engine/tcp_socket_utils.h"
|
33
|
+
#include "src/core/lib/event_engine/tcp_socket_utils.h"
|
34
|
+
#include "src/core/lib/gprpp/crash.h" // IWYU pragma: keep
|
35
|
+
#include "src/core/lib/gprpp/status_helper.h"
|
36
|
+
#include "src/core/lib/iomgr/port.h"
|
37
|
+
#include "src/core/lib/iomgr/socket_mutator.h"
|
38
|
+
|
39
|
+
#define MIN_SAFE_ACCEPT_QUEUE_SIZE 100
|
40
|
+
|
41
|
+
#ifdef GRPC_POSIX_SOCKET_UTILS_COMMON
|
42
|
+
#include <errno.h> // IWYU pragma: keep
|
43
|
+
#include <ifaddrs.h> // IWYU pragma: keep
|
44
|
+
#include <netinet/in.h> // IWYU pragma: keep
|
45
|
+
#include <sys/socket.h> // IWYU pragma: keep
|
46
|
+
#include <unistd.h> // IWYU pragma: keep
|
47
|
+
|
48
|
+
#include "absl/strings/str_cat.h"
|
49
|
+
#endif
|
50
|
+
|
51
|
+
namespace grpc_event_engine {
|
52
|
+
namespace experimental {
|
53
|
+
|
54
|
+
#ifdef GRPC_POSIX_SOCKET_UTILS_COMMON
|
55
|
+
|
56
|
+
namespace {
|
57
|
+
|
58
|
+
using ResolvedAddress =
|
59
|
+
grpc_event_engine::experimental::EventEngine::ResolvedAddress;
|
60
|
+
using ListenerSocket = ListenerSocketsContainer::ListenerSocket;
|
61
|
+
|
62
|
+
#ifdef GRPC_HAVE_IFADDRS
|
63
|
+
|
64
|
+
// Bind to "::" to get a port number not used by any address.
|
65
|
+
absl::StatusOr<int> GetUnusedPort() {
|
66
|
+
ResolvedAddress wild = ResolvedAddressMakeWild6(0);
|
67
|
+
PosixSocketWrapper::DSMode dsmode;
|
68
|
+
auto sock = PosixSocketWrapper::CreateDualStackSocket(nullptr, wild,
|
69
|
+
SOCK_STREAM, 0, dsmode);
|
70
|
+
GRPC_RETURN_IF_ERROR(sock.status());
|
71
|
+
if (dsmode == PosixSocketWrapper::DSMode::DSMODE_IPV4) {
|
72
|
+
wild = ResolvedAddressMakeWild4(0);
|
73
|
+
}
|
74
|
+
if (bind(sock->Fd(), wild.address(), wild.size()) != 0) {
|
75
|
+
close(sock->Fd());
|
76
|
+
return absl::FailedPreconditionError(
|
77
|
+
absl::StrCat("bind(GetUnusedPort): ", std::strerror(errno)));
|
78
|
+
}
|
79
|
+
socklen_t len = wild.size();
|
80
|
+
if (getsockname(sock->Fd(), const_cast<sockaddr*>(wild.address()), &len) !=
|
81
|
+
0) {
|
82
|
+
close(sock->Fd());
|
83
|
+
return absl::FailedPreconditionError(
|
84
|
+
absl::StrCat("getsockname(GetUnusedPort): ", std::strerror(errno)));
|
85
|
+
}
|
86
|
+
close(sock->Fd());
|
87
|
+
int port = ResolvedAddressGetPort(wild);
|
88
|
+
if (port <= 0) {
|
89
|
+
return absl::FailedPreconditionError("Bad port");
|
90
|
+
}
|
91
|
+
return port;
|
92
|
+
}
|
93
|
+
|
94
|
+
bool SystemHasIfAddrs() { return true; }
|
95
|
+
|
96
|
+
#else // GRPC_HAVE_IFADDRS
|
97
|
+
|
98
|
+
bool SystemHasIfAddrs() { return false; }
|
99
|
+
|
100
|
+
#endif // GRPC_HAVE_IFADDRS
|
101
|
+
|
102
|
+
// get max listen queue size on linux
|
103
|
+
int InitMaxAcceptQueueSize() {
|
104
|
+
int n = SOMAXCONN;
|
105
|
+
char buf[64];
|
106
|
+
FILE* fp = fopen("/proc/sys/net/core/somaxconn", "r");
|
107
|
+
int max_accept_queue_size;
|
108
|
+
if (fp == nullptr) {
|
109
|
+
// 2.4 kernel.
|
110
|
+
return SOMAXCONN;
|
111
|
+
}
|
112
|
+
if (fgets(buf, sizeof buf, fp)) {
|
113
|
+
char* end;
|
114
|
+
long i = strtol(buf, &end, 10);
|
115
|
+
if (i > 0 && i <= INT_MAX && end && *end == '\n') {
|
116
|
+
n = static_cast<int>(i);
|
117
|
+
}
|
118
|
+
}
|
119
|
+
fclose(fp);
|
120
|
+
max_accept_queue_size = n;
|
121
|
+
|
122
|
+
if (max_accept_queue_size < MIN_SAFE_ACCEPT_QUEUE_SIZE) {
|
123
|
+
gpr_log(GPR_INFO,
|
124
|
+
"Suspiciously small accept queue (%d) will probably lead to "
|
125
|
+
"connection drops",
|
126
|
+
max_accept_queue_size);
|
127
|
+
}
|
128
|
+
return max_accept_queue_size;
|
129
|
+
}
|
130
|
+
|
131
|
+
int GetMaxAcceptQueueSize() {
|
132
|
+
static const int kMaxAcceptQueueSize = InitMaxAcceptQueueSize();
|
133
|
+
return kMaxAcceptQueueSize;
|
134
|
+
}
|
135
|
+
|
136
|
+
// Prepare a recently-created socket for listening.
|
137
|
+
absl::Status PrepareSocket(const PosixTcpOptions& options,
|
138
|
+
ListenerSocket& socket) {
|
139
|
+
ResolvedAddress sockname_temp;
|
140
|
+
absl::Status error;
|
141
|
+
int fd = socket.sock.Fd();
|
142
|
+
GPR_ASSERT(fd >= 0);
|
143
|
+
bool close_fd = true;
|
144
|
+
socket.zero_copy_enabled = false;
|
145
|
+
socket.port = 0;
|
146
|
+
auto sock_cleanup = absl::MakeCleanup([&close_fd, fd]() -> void {
|
147
|
+
if (close_fd && fd >= 0) {
|
148
|
+
close(fd);
|
149
|
+
}
|
150
|
+
});
|
151
|
+
if (PosixSocketWrapper::IsSocketReusePortSupported() &&
|
152
|
+
options.allow_reuse_port && socket.addr.address()->sa_family != AF_UNIX) {
|
153
|
+
GRPC_RETURN_IF_ERROR(socket.sock.SetSocketReusePort(1));
|
154
|
+
}
|
155
|
+
|
156
|
+
#ifdef GRPC_LINUX_ERRQUEUE
|
157
|
+
if (!socket.sock.SetSocketZeroCopy().ok()) {
|
158
|
+
// it's not fatal, so just log it.
|
159
|
+
gpr_log(GPR_DEBUG, "Node does not support SO_ZEROCOPY, continuing.");
|
160
|
+
} else {
|
161
|
+
socket.zero_copy_enabled = true;
|
162
|
+
}
|
163
|
+
#endif
|
164
|
+
|
165
|
+
GRPC_RETURN_IF_ERROR(socket.sock.SetSocketNonBlocking(1));
|
166
|
+
GRPC_RETURN_IF_ERROR(socket.sock.SetSocketCloexec(1));
|
167
|
+
|
168
|
+
if (socket.addr.address()->sa_family != AF_UNIX) {
|
169
|
+
GRPC_RETURN_IF_ERROR(socket.sock.SetSocketLowLatency(1));
|
170
|
+
GRPC_RETURN_IF_ERROR(socket.sock.SetSocketReuseAddr(1));
|
171
|
+
socket.sock.TrySetSocketTcpUserTimeout(options, false);
|
172
|
+
}
|
173
|
+
GRPC_RETURN_IF_ERROR(socket.sock.SetSocketNoSigpipeIfPossible());
|
174
|
+
GRPC_RETURN_IF_ERROR(socket.sock.ApplySocketMutatorInOptions(
|
175
|
+
GRPC_FD_SERVER_LISTENER_USAGE, options));
|
176
|
+
|
177
|
+
if (bind(fd, socket.addr.address(), socket.addr.size()) < 0) {
|
178
|
+
return absl::FailedPreconditionError(
|
179
|
+
absl::StrCat("Error in bind: ", std::strerror(errno)));
|
180
|
+
}
|
181
|
+
|
182
|
+
if (listen(fd, GetMaxAcceptQueueSize()) < 0) {
|
183
|
+
return absl::FailedPreconditionError(
|
184
|
+
absl::StrCat("Error in listen: ", std::strerror(errno)));
|
185
|
+
}
|
186
|
+
socklen_t len = static_cast<socklen_t>(sizeof(struct sockaddr_storage));
|
187
|
+
|
188
|
+
if (getsockname(fd, const_cast<sockaddr*>(sockname_temp.address()), &len) <
|
189
|
+
0) {
|
190
|
+
return absl::FailedPreconditionError(
|
191
|
+
absl::StrCat("Error in getsockname: ", std::strerror(errno)));
|
192
|
+
}
|
193
|
+
|
194
|
+
socket.port =
|
195
|
+
ResolvedAddressGetPort(ResolvedAddress(sockname_temp.address(), len));
|
196
|
+
// No errors. Set close_fd to false to ensure the socket is not closed.
|
197
|
+
close_fd = false;
|
198
|
+
return absl::OkStatus();
|
199
|
+
}
|
200
|
+
|
201
|
+
} // namespace
|
202
|
+
|
203
|
+
absl::StatusOr<ListenerSocket> CreateAndPrepareListenerSocket(
|
204
|
+
const PosixTcpOptions& options, const ResolvedAddress& addr) {
|
205
|
+
ResolvedAddress addr4_copy;
|
206
|
+
ListenerSocket socket;
|
207
|
+
auto result = PosixSocketWrapper::CreateDualStackSocket(
|
208
|
+
nullptr, addr, SOCK_STREAM, 0, socket.dsmode);
|
209
|
+
if (!result.ok()) {
|
210
|
+
return result.status();
|
211
|
+
}
|
212
|
+
socket.sock = *result;
|
213
|
+
if (socket.dsmode == PosixSocketWrapper::DSMODE_IPV4 &&
|
214
|
+
ResolvedAddressIsV4Mapped(addr, &addr4_copy)) {
|
215
|
+
socket.addr = addr4_copy;
|
216
|
+
} else {
|
217
|
+
socket.addr = addr;
|
218
|
+
}
|
219
|
+
GRPC_RETURN_IF_ERROR(PrepareSocket(options, socket));
|
220
|
+
GPR_ASSERT(socket.port > 0);
|
221
|
+
return socket;
|
222
|
+
}
|
223
|
+
|
224
|
+
absl::StatusOr<int> ListenerContainerAddAllLocalAddresses(
|
225
|
+
ListenerSocketsContainer& listener_sockets, const PosixTcpOptions& options,
|
226
|
+
int requested_port) {
|
227
|
+
#ifdef GRPC_HAVE_IFADDRS
|
228
|
+
absl::Status op_status = absl::OkStatus();
|
229
|
+
struct ifaddrs* ifa = nullptr;
|
230
|
+
struct ifaddrs* ifa_it;
|
231
|
+
bool no_local_addresses = true;
|
232
|
+
int assigned_port = 0;
|
233
|
+
if (requested_port == 0) {
|
234
|
+
auto result = GetUnusedPort();
|
235
|
+
GRPC_RETURN_IF_ERROR(result.status());
|
236
|
+
requested_port = *result;
|
237
|
+
gpr_log(GPR_DEBUG, "Picked unused port %d", requested_port);
|
238
|
+
}
|
239
|
+
if (getifaddrs(&ifa) != 0 || ifa == nullptr) {
|
240
|
+
return absl::FailedPreconditionError(
|
241
|
+
absl::StrCat("getifaddrs: ", std::strerror(errno)));
|
242
|
+
}
|
243
|
+
for (ifa_it = ifa; ifa_it != nullptr; ifa_it = ifa_it->ifa_next) {
|
244
|
+
ResolvedAddress addr;
|
245
|
+
socklen_t len;
|
246
|
+
const char* ifa_name = (ifa_it->ifa_name ? ifa_it->ifa_name : "<unknown>");
|
247
|
+
if (ifa_it->ifa_addr == nullptr) {
|
248
|
+
continue;
|
249
|
+
} else if (ifa_it->ifa_addr->sa_family == AF_INET) {
|
250
|
+
len = static_cast<socklen_t>(sizeof(sockaddr_in));
|
251
|
+
} else if (ifa_it->ifa_addr->sa_family == AF_INET6) {
|
252
|
+
len = static_cast<socklen_t>(sizeof(sockaddr_in6));
|
253
|
+
} else {
|
254
|
+
continue;
|
255
|
+
}
|
256
|
+
addr = EventEngine::ResolvedAddress(ifa_it->ifa_addr, len);
|
257
|
+
ResolvedAddressSetPort(addr, requested_port);
|
258
|
+
std::string addr_str = *ResolvedAddressToString(addr);
|
259
|
+
gpr_log(GPR_DEBUG,
|
260
|
+
"Adding local addr from interface %s flags 0x%x to server: %s",
|
261
|
+
ifa_name, ifa_it->ifa_flags, addr_str.c_str());
|
262
|
+
// We could have multiple interfaces with the same address (e.g.,
|
263
|
+
// bonding), so look for duplicates.
|
264
|
+
if (listener_sockets.Find(addr).ok()) {
|
265
|
+
gpr_log(GPR_DEBUG, "Skipping duplicate addr %s on interface %s",
|
266
|
+
addr_str.c_str(), ifa_name);
|
267
|
+
continue;
|
268
|
+
}
|
269
|
+
auto result = CreateAndPrepareListenerSocket(options, addr);
|
270
|
+
if (!result.ok()) {
|
271
|
+
op_status = absl::FailedPreconditionError(
|
272
|
+
absl::StrCat("Failed to add listener: ", addr_str,
|
273
|
+
" due to error: ", result.status().message()));
|
274
|
+
break;
|
275
|
+
} else {
|
276
|
+
listener_sockets.Append(*result);
|
277
|
+
assigned_port = result->port;
|
278
|
+
no_local_addresses = false;
|
279
|
+
}
|
280
|
+
}
|
281
|
+
freeifaddrs(ifa);
|
282
|
+
GRPC_RETURN_IF_ERROR(op_status);
|
283
|
+
if (no_local_addresses) {
|
284
|
+
return absl::FailedPreconditionError("No local addresses");
|
285
|
+
}
|
286
|
+
return assigned_port;
|
287
|
+
|
288
|
+
#else
|
289
|
+
(void)listener_sockets;
|
290
|
+
(void)options;
|
291
|
+
(void)requested_port;
|
292
|
+
grpc_core::Crash("System does not support ifaddrs");
|
293
|
+
#endif
|
294
|
+
}
|
295
|
+
|
296
|
+
absl::StatusOr<int> ListenerContainerAddWildcardAddresses(
|
297
|
+
ListenerSocketsContainer& listener_sockets, const PosixTcpOptions& options,
|
298
|
+
int requested_port) {
|
299
|
+
ResolvedAddress wild4 = ResolvedAddressMakeWild4(requested_port);
|
300
|
+
ResolvedAddress wild6 = ResolvedAddressMakeWild6(requested_port);
|
301
|
+
absl::StatusOr<ListenerSocket> v6_sock;
|
302
|
+
absl::StatusOr<ListenerSocket> v4_sock;
|
303
|
+
int assigned_port = 0;
|
304
|
+
|
305
|
+
if (SystemHasIfAddrs() && options.expand_wildcard_addrs) {
|
306
|
+
return ListenerContainerAddAllLocalAddresses(listener_sockets, options,
|
307
|
+
requested_port);
|
308
|
+
}
|
309
|
+
|
310
|
+
// Try listening on IPv6 first.
|
311
|
+
v6_sock = CreateAndPrepareListenerSocket(options, wild6);
|
312
|
+
if (v6_sock.ok()) {
|
313
|
+
listener_sockets.Append(*v6_sock);
|
314
|
+
requested_port = v6_sock->port;
|
315
|
+
assigned_port = v6_sock->port;
|
316
|
+
if (v6_sock->dsmode == PosixSocketWrapper::DSMODE_DUALSTACK ||
|
317
|
+
v6_sock->dsmode == PosixSocketWrapper::DSMODE_IPV4) {
|
318
|
+
return v6_sock->port;
|
319
|
+
}
|
320
|
+
}
|
321
|
+
// If we got a v6-only socket or nothing, try adding 0.0.0.0.
|
322
|
+
ResolvedAddressSetPort(wild4, requested_port);
|
323
|
+
v4_sock = CreateAndPrepareListenerSocket(options, wild4);
|
324
|
+
if (v4_sock.ok()) {
|
325
|
+
assigned_port = v4_sock->port;
|
326
|
+
listener_sockets.Append(*v4_sock);
|
327
|
+
}
|
328
|
+
if (assigned_port > 0) {
|
329
|
+
if (!v6_sock.ok()) {
|
330
|
+
gpr_log(GPR_INFO,
|
331
|
+
"Failed to add :: listener, the environment may not support "
|
332
|
+
"IPv6: %s",
|
333
|
+
v6_sock.status().ToString().c_str());
|
334
|
+
}
|
335
|
+
if (!v4_sock.ok()) {
|
336
|
+
gpr_log(GPR_INFO,
|
337
|
+
"Failed to add 0.0.0.0 listener, "
|
338
|
+
"the environment may not support IPv4: %s",
|
339
|
+
v4_sock.status().ToString().c_str());
|
340
|
+
}
|
341
|
+
return assigned_port;
|
342
|
+
} else {
|
343
|
+
GPR_ASSERT(!v6_sock.ok());
|
344
|
+
GPR_ASSERT(!v4_sock.ok());
|
345
|
+
return absl::FailedPreconditionError(absl::StrCat(
|
346
|
+
"Failed to add any wildcard listeners: ", v6_sock.status().message(),
|
347
|
+
v4_sock.status().message()));
|
348
|
+
}
|
349
|
+
}
|
350
|
+
|
351
|
+
#else // GRPC_POSIX_SOCKET_UTILS_COMMON
|
352
|
+
|
353
|
+
absl::StatusOr<ListenerSocketsContainer::ListenerSocket>
|
354
|
+
CreateAndPrepareListenerSocket(const PosixTcpOptions& /*options*/,
|
355
|
+
const grpc_event_engine::experimental::
|
356
|
+
EventEngine::ResolvedAddress& /*addr*/) {
|
357
|
+
grpc_core::Crash(
|
358
|
+
"CreateAndPrepareListenerSocket is not supported on this platform");
|
359
|
+
}
|
360
|
+
|
361
|
+
absl::StatusOr<int> ListenerContainerAddWildcardAddresses(
|
362
|
+
ListenerSocketsContainer& /*listener_sockets*/,
|
363
|
+
const PosixTcpOptions& /*options*/, int /*requested_port*/) {
|
364
|
+
grpc_core::Crash(
|
365
|
+
"ListenerContainerAddWildcardAddresses is not supported on this "
|
366
|
+
"platform");
|
367
|
+
}
|
368
|
+
|
369
|
+
absl::StatusOr<int> ListenerContainerAddAllLocalAddresses(
|
370
|
+
ListenerSocketsContainer& /*listener_sockets*/,
|
371
|
+
const PosixTcpOptions& /*options*/, int /*requested_port*/) {
|
372
|
+
grpc_core::Crash(
|
373
|
+
"ListenerContainerAddAllLocalAddresses is not supported on this "
|
374
|
+
"platform");
|
375
|
+
}
|
376
|
+
|
377
|
+
#endif // GRPC_POSIX_SOCKET_UTILS_COMMON
|
378
|
+
|
379
|
+
} // namespace experimental
|
380
|
+
} // namespace grpc_event_engine
|
@@ -0,0 +1,91 @@
|
|
1
|
+
// Copyright 2022 gRPC Authors
|
2
|
+
//
|
3
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
// you may not use this file except in compliance with the License.
|
5
|
+
// You may obtain a copy of the License at
|
6
|
+
//
|
7
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
//
|
9
|
+
// Unless required by applicable law or agreed to in writing, software
|
10
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
// See the License for the specific language governing permissions and
|
13
|
+
// limitations under the License.
|
14
|
+
#ifndef GRPC_CORE_LIB_EVENT_ENGINE_POSIX_ENGINE_POSIX_ENGINE_LISTENER_UTILS_H
|
15
|
+
#define GRPC_CORE_LIB_EVENT_ENGINE_POSIX_ENGINE_POSIX_ENGINE_LISTENER_UTILS_H
|
16
|
+
|
17
|
+
#include <grpc/support/port_platform.h>
|
18
|
+
|
19
|
+
#include "absl/status/statusor.h"
|
20
|
+
|
21
|
+
#include <grpc/event_engine/event_engine.h>
|
22
|
+
|
23
|
+
#include "src/core/lib/event_engine/posix_engine/tcp_socket_utils.h"
|
24
|
+
|
25
|
+
namespace grpc_event_engine {
|
26
|
+
namespace experimental {
|
27
|
+
|
28
|
+
// This interface exists to allow different Event Engines to implement different
|
29
|
+
// custom interception operations while a socket is Appended. The
|
30
|
+
// listener util functions are defined over this interface and thus can be
|
31
|
+
// shared across multiple event engines.
|
32
|
+
class ListenerSocketsContainer {
|
33
|
+
public:
|
34
|
+
struct ListenerSocket {
|
35
|
+
// Listener socket fd
|
36
|
+
PosixSocketWrapper sock;
|
37
|
+
// Assigned/chosen listening port
|
38
|
+
int port;
|
39
|
+
// Socket configuration
|
40
|
+
bool zero_copy_enabled;
|
41
|
+
// Address at which the socket is listening for connections
|
42
|
+
grpc_event_engine::experimental::EventEngine::ResolvedAddress addr;
|
43
|
+
// Dual stack mode.
|
44
|
+
PosixSocketWrapper::DSMode dsmode;
|
45
|
+
};
|
46
|
+
// Adds a socket to the internal db of sockets associated with a listener.
|
47
|
+
virtual void Append(ListenerSocket socket) = 0;
|
48
|
+
|
49
|
+
// Returns a non-OK status if the socket cannot be found. Otherwise, returns
|
50
|
+
// the socket.
|
51
|
+
virtual absl::StatusOr<ListenerSocket> Find(
|
52
|
+
const grpc_event_engine::experimental::EventEngine::ResolvedAddress&
|
53
|
+
addr) = 0;
|
54
|
+
|
55
|
+
virtual ~ListenerSocketsContainer() = default;
|
56
|
+
};
|
57
|
+
|
58
|
+
// Creates and configures a socket to be used by the Event Engine Listener. The
|
59
|
+
// type of the socket to create is determined by the by the passed address. The
|
60
|
+
// socket configuration is specified by passed tcp options. If successful, it
|
61
|
+
// returns a ListenerSocketsContainer::ListenerSocket type which holds the
|
62
|
+
// socket fd and its dsmode. If unsuccessful, it returns a Not-OK status.
|
63
|
+
absl::StatusOr<ListenerSocketsContainer::ListenerSocket>
|
64
|
+
CreateAndPrepareListenerSocket(
|
65
|
+
const PosixTcpOptions& options,
|
66
|
+
const grpc_event_engine::experimental::EventEngine::ResolvedAddress& addr);
|
67
|
+
|
68
|
+
// Instead of creating and adding a socket bound to specific address, this
|
69
|
+
// function creates and adds a socket bound to the wildcard address on the
|
70
|
+
// server. The newly created socket is configured according to the passed
|
71
|
+
// options and added to the passed ListenerSocketsContainer object. The function
|
72
|
+
// returns the port at which the created socket listens for incoming
|
73
|
+
// connections.
|
74
|
+
absl::StatusOr<int> ListenerContainerAddWildcardAddresses(
|
75
|
+
ListenerSocketsContainer& listener_sockets, const PosixTcpOptions& options,
|
76
|
+
int requested_port);
|
77
|
+
|
78
|
+
// Get all addresses assigned to network interfaces on the machine and create
|
79
|
+
// and add a socket for each local address. Each newly created socket is
|
80
|
+
// configured according to the passed options and added to the passed
|
81
|
+
// ListenerSocketsContainer object. The requested_port is the port to use for
|
82
|
+
// every socket. If set to 0, a random port will be used for every socket.
|
83
|
+
// The function returns the chosen port number for all created sockets.
|
84
|
+
absl::StatusOr<int> ListenerContainerAddAllLocalAddresses(
|
85
|
+
ListenerSocketsContainer& listener_sockets, const PosixTcpOptions& options,
|
86
|
+
int requested_port);
|
87
|
+
|
88
|
+
} // namespace experimental
|
89
|
+
} // namespace grpc_event_engine
|
90
|
+
|
91
|
+
#endif // GRPC_CORE_LIB_EVENT_ENGINE_POSIX_ENGINE_POSIX_ENGINE_LISTENER_UTILS_H
|