grpc 1.46.3-x86_64-linux → 1.47.0-x86_64-linux
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 +49 -97
- data/include/grpc/event_engine/event_engine.h +42 -7
- data/include/grpc/event_engine/memory_allocator.h +0 -15
- data/include/grpc/event_engine/port.h +1 -1
- data/include/grpc/event_engine/slice.h +286 -0
- data/include/grpc/event_engine/slice_buffer.h +112 -0
- data/include/grpc/grpc_security.h +11 -0
- data/include/grpc/impl/codegen/port_platform.h +100 -36
- data/include/grpc/impl/codegen/slice.h +1 -1
- data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +18 -30
- data/src/core/ext/filters/channel_idle/channel_idle_filter.h +4 -1
- data/src/core/ext/filters/client_channel/backend_metric.cc +17 -12
- data/src/core/ext/filters/client_channel/backend_metric.h +19 -9
- data/src/core/ext/filters/client_channel/backup_poller.cc +5 -5
- data/src/core/ext/filters/client_channel/backup_poller.h +2 -4
- data/src/core/ext/filters/client_channel/channel_connectivity.cc +42 -20
- data/src/core/ext/filters/client_channel/client_channel.cc +60 -17
- data/src/core/ext/filters/client_channel/client_channel.h +26 -6
- data/src/core/ext/filters/client_channel/client_channel_channelz.cc +3 -5
- data/src/core/ext/filters/client_channel/client_channel_channelz.h +12 -2
- data/src/core/ext/filters/client_channel/client_channel_factory.cc +5 -0
- data/src/core/ext/filters/client_channel/client_channel_factory.h +8 -0
- data/src/core/ext/filters/client_channel/client_channel_plugin.cc +4 -13
- data/src/core/ext/filters/client_channel/config_selector.cc +1 -0
- data/src/core/ext/filters/client_channel/config_selector.h +7 -5
- data/src/core/ext/filters/client_channel/connector.h +8 -2
- data/src/core/ext/filters/client_channel/dynamic_filters.cc +13 -2
- data/src/core/ext/filters/client_channel/dynamic_filters.h +11 -1
- data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +2 -0
- data/src/core/ext/filters/client_channel/global_subchannel_pool.h +3 -0
- data/src/core/ext/filters/client_channel/health/health_check_client.cc +14 -1
- data/src/core/ext/filters/client_channel/health/health_check_client.h +2 -0
- data/src/core/ext/filters/client_channel/http_proxy.cc +10 -2
- data/src/core/ext/filters/client_channel/http_proxy.h +3 -0
- data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +6 -2
- data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +1 -0
- data/src/core/ext/filters/client_channel/lb_policy/backend_metric_data.h +49 -0
- data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +12 -0
- data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +5 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +9 -3
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +59 -19
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +4 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +6 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +10 -1
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +6 -3
- data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +408 -0
- data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.h +57 -0
- data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +1038 -0
- data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h +54 -0
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +60 -52
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +102 -60
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +157 -96
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +2 -0
- data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +45 -10
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +182 -171
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +39 -36
- data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +30 -5
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +99 -23
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +6 -0
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +30 -4
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +23 -3
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +75 -11
- data/src/core/ext/filters/client_channel/lb_policy.cc +4 -2
- data/src/core/ext/filters/client_channel/lb_policy.h +18 -24
- data/src/core/ext/filters/client_channel/lb_policy_factory.h +2 -0
- data/src/core/ext/filters/client_channel/lb_policy_registry.cc +8 -1
- data/src/core/ext/filters/client_channel/lb_policy_registry.h +6 -1
- data/src/core/ext/filters/client_channel/local_subchannel_pool.cc +4 -0
- data/src/core/ext/filters/client_channel/local_subchannel_pool.h +1 -0
- data/src/core/ext/filters/client_channel/proxy_mapper.h +1 -1
- data/src/core/ext/filters/client_channel/proxy_mapper_registry.cc +2 -0
- data/src/core/ext/filters/client_channel/proxy_mapper_registry.h +5 -0
- data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +23 -5
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +134 -43
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +8 -1
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +10 -8
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +26 -9
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +13 -4
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +2 -1
- data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.cc +2 -0
- data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.h +2 -1
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +30 -7
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +13 -14
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +5 -2
- data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +59 -13
- data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +13 -1
- data/src/core/ext/filters/client_channel/resolver/polling_resolver.h +8 -1
- data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +15 -11
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +89 -33
- data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +5 -11
- data/src/core/ext/filters/client_channel/resolver_result_parsing.h +11 -5
- data/src/core/ext/filters/client_channel/retry_filter.cc +42 -2
- data/src/core/ext/filters/client_channel/retry_service_config.cc +8 -9
- data/src/core/ext/filters/client_channel/retry_service_config.h +10 -1
- data/src/core/ext/filters/client_channel/retry_throttle.cc +1 -8
- data/src/core/ext/filters/client_channel/retry_throttle.h +7 -1
- data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +22 -5
- data/src/core/ext/filters/client_channel/subchannel.cc +156 -160
- data/src/core/ext/filters/client_channel/subchannel.h +80 -20
- data/src/core/ext/filters/client_channel/subchannel_interface.h +41 -23
- data/src/core/ext/filters/client_channel/subchannel_interface_internal.h +38 -0
- data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +12 -2
- data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +6 -3
- data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +16 -2
- data/src/core/ext/filters/client_channel/subchannel_stream_client.h +12 -0
- data/src/core/ext/filters/deadline/deadline_filter.cc +6 -2
- data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +1 -4
- data/src/core/ext/filters/http/client/http_client_filter.cc +14 -5
- data/src/core/ext/filters/http/client/http_client_filter.h +7 -1
- data/src/core/ext/filters/http/client_authority_filter.cc +5 -10
- data/src/core/ext/filters/http/http_filters_plugin.cc +7 -8
- data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +1 -0
- data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +3 -1
- data/src/core/ext/filters/http/server/http_server_filter.cc +80 -247
- data/src/core/ext/filters/http/server/http_server_filter.h +31 -2
- data/src/core/ext/filters/message_size/message_size_filter.cc +20 -26
- data/src/core/ext/filters/message_size/message_size_filter.h +2 -2
- data/src/core/ext/filters/rbac/rbac_filter.cc +1 -0
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +101 -135
- data/src/core/ext/transport/chttp2/client/chttp2_connector.h +9 -7
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +44 -15
- data/src/core/ext/transport/chttp2/server/chttp2_server.h +2 -0
- data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +3 -3
- data/src/core/ext/transport/chttp2/transport/bin_decoder.h +2 -1
- data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +1 -0
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +69 -20
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +5 -0
- data/src/core/ext/transport/chttp2/transport/context_list.cc +4 -0
- data/src/core/ext/transport/chttp2/transport/context_list.h +4 -1
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +6 -2
- data/src/core/ext/transport/chttp2/transport/flow_control.h +6 -2
- data/src/core/ext/transport/chttp2/transport/frame.h +0 -4
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +7 -1
- data/src/core/ext/transport/chttp2/transport/frame_data.h +4 -1
- data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +3 -0
- data/src/core/ext/transport/chttp2/transport/frame_goaway.h +3 -1
- data/src/core/ext/transport/chttp2/transport/frame_ping.cc +5 -0
- data/src/core/ext/transport/chttp2/transport/frame_ping.h +3 -0
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +6 -2
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +3 -0
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +12 -3
- data/src/core/ext/transport/chttp2/transport/frame_settings.h +4 -0
- data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +4 -1
- data/src/core/ext/transport/chttp2/transport/frame_window_update.h +3 -0
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +14 -12
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +15 -2
- data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +3 -0
- data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.h +3 -0
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +25 -7
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +8 -1
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +55 -37
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +38 -21
- data/src/core/ext/transport/chttp2/transport/http2_settings.h +0 -1
- data/src/core/ext/transport/chttp2/transport/internal.h +24 -3
- data/src/core/ext/transport/chttp2/transport/parsing.cc +27 -6
- data/src/core/ext/transport/chttp2/transport/stream_lists.cc +13 -9
- data/src/core/ext/transport/chttp2/transport/stream_map.cc +1 -1
- data/src/core/ext/transport/chttp2/transport/stream_map.h +1 -0
- data/src/core/ext/transport/chttp2/transport/varint.h +2 -0
- data/src/core/ext/transport/chttp2/transport/writing.cc +38 -2
- data/src/core/ext/transport/inproc/inproc_transport.cc +8 -5
- data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.c +47 -0
- data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.h +109 -0
- data/src/core/ext/xds/certificate_provider_store.cc +4 -2
- data/src/core/ext/xds/certificate_provider_store.h +1 -1
- data/src/core/ext/xds/xds_certificate_provider.cc +4 -1
- data/src/core/ext/xds/xds_certificate_provider.h +1 -1
- data/src/core/ext/xds/xds_channel_stack_modifier.cc +5 -5
- data/src/core/ext/xds/xds_client.cc +46 -22
- data/src/core/ext/xds/xds_cluster.cc +106 -16
- data/src/core/ext/xds/xds_cluster.h +3 -0
- data/src/core/ext/xds/xds_http_fault_filter.cc +3 -3
- data/src/core/ext/xds/xds_listener.cc +19 -9
- data/src/core/ext/xds/xds_server_config_fetcher.cc +2 -1
- data/src/core/lib/address_utils/sockaddr_utils.cc +56 -23
- data/src/core/lib/address_utils/sockaddr_utils.h +7 -4
- data/src/core/lib/avl/avl.h +3 -1
- data/src/core/lib/channel/call_finalization.h +4 -0
- data/src/core/lib/channel/call_tracer.h +8 -2
- data/src/core/lib/channel/channel_args.cc +41 -22
- data/src/core/lib/channel/channel_args.h +33 -3
- data/src/core/lib/channel/channel_args_preconditioning.cc +3 -3
- data/src/core/lib/channel/channel_args_preconditioning.h +3 -2
- data/src/core/lib/channel/channel_stack.cc +41 -3
- data/src/core/lib/channel/channel_stack.h +49 -3
- data/src/core/lib/channel/channel_stack_builder.cc +9 -19
- data/src/core/lib/channel/channel_stack_builder.h +15 -27
- data/src/core/lib/channel/channel_stack_builder_impl.cc +36 -41
- data/src/core/lib/channel/channel_stack_builder_impl.h +3 -6
- data/src/core/lib/channel/channel_trace.cc +8 -13
- data/src/core/lib/channel/channel_trace.h +6 -3
- data/src/core/lib/channel/channelz.cc +8 -13
- data/src/core/lib/channel/channelz.h +13 -4
- data/src/core/lib/channel/channelz_registry.cc +7 -14
- data/src/core/lib/channel/channelz_registry.h +10 -9
- data/src/core/lib/channel/connected_channel.cc +21 -31
- data/src/core/lib/channel/connected_channel.h +1 -0
- data/src/core/lib/channel/promise_based_filter.cc +444 -189
- data/src/core/lib/channel/promise_based_filter.h +160 -27
- data/src/core/lib/channel/status_util.cc +2 -0
- data/src/core/lib/channel/status_util.h +0 -3
- data/src/core/lib/compression/compression_internal.cc +45 -10
- data/src/core/lib/compression/compression_internal.h +1 -1
- data/src/core/lib/config/core_configuration.cc +3 -0
- data/src/core/lib/config/core_configuration.h +2 -1
- data/src/core/lib/event_engine/channel_args_endpoint_config.cc +4 -2
- data/src/core/lib/event_engine/channel_args_endpoint_config.h +3 -2
- data/src/core/lib/event_engine/default_event_engine_factory.cc +8 -2
- data/src/core/lib/event_engine/event_engine.cc +12 -2
- data/src/core/lib/event_engine/event_engine_factory.h +5 -0
- data/src/core/lib/event_engine/handle_containers.h +67 -0
- data/src/core/lib/event_engine/iomgr_engine.cc +206 -0
- data/src/core/lib/event_engine/iomgr_engine.h +118 -0
- data/src/core/lib/event_engine/memory_allocator.cc +12 -4
- data/src/core/lib/event_engine/resolved_address.cc +4 -2
- data/src/core/lib/event_engine/slice.cc +102 -0
- data/src/core/lib/event_engine/slice_buffer.cc +50 -0
- data/src/core/lib/{iomgr/event_engine/pollset.h → event_engine/trace.cc} +3 -10
- data/src/core/lib/{iomgr/endpoint_pair_event_engine.cc → event_engine/trace.h} +12 -14
- data/src/core/lib/gpr/log.cc +5 -0
- data/src/core/lib/gpr/tls.h +3 -5
- data/src/core/lib/gprpp/bitset.h +5 -1
- data/src/core/lib/gprpp/chunked_vector.h +4 -0
- data/src/core/lib/gprpp/construct_destruct.h +1 -0
- data/src/core/lib/gprpp/dual_ref_counted.h +1 -4
- data/src/core/lib/gprpp/examine_stack.h +0 -1
- data/src/core/lib/gprpp/fork.cc +3 -6
- data/src/core/lib/gprpp/global_config.h +2 -4
- data/src/core/lib/gprpp/global_config_env.cc +3 -2
- data/src/core/lib/gprpp/global_config_env.h +3 -1
- data/src/core/lib/gprpp/global_config_generic.h +0 -4
- data/src/core/lib/gprpp/host_port.cc +2 -0
- data/src/core/lib/gprpp/manual_constructor.h +0 -1
- data/src/core/lib/gprpp/match.h +2 -0
- data/src/core/lib/gprpp/memory.h +1 -5
- data/src/core/lib/gprpp/orphanable.h +1 -4
- data/src/core/lib/gprpp/ref_counted.h +1 -3
- data/src/core/lib/gprpp/ref_counted_ptr.h +1 -1
- data/src/core/lib/gprpp/stat.h +0 -2
- data/src/core/lib/gprpp/stat_posix.cc +7 -2
- data/src/core/lib/gprpp/status_helper.cc +8 -4
- data/src/core/lib/gprpp/status_helper.h +4 -0
- data/src/core/lib/gprpp/sync.h +3 -1
- data/src/core/lib/gprpp/table.h +10 -0
- data/src/core/lib/gprpp/thd.h +2 -5
- data/src/core/lib/gprpp/thd_posix.cc +4 -2
- data/src/core/lib/gprpp/thd_windows.cc +2 -0
- data/src/core/lib/gprpp/time.cc +8 -0
- data/src/core/lib/gprpp/time.h +6 -1
- data/src/core/lib/gprpp/time_util.cc +4 -0
- data/src/core/lib/gprpp/time_util.h +1 -1
- data/src/core/lib/gprpp/unique_type_name.h +104 -0
- data/src/core/lib/http/format_request.cc +29 -0
- data/src/core/lib/http/format_request.h +2 -0
- data/src/core/lib/http/httpcli.cc +88 -81
- data/src/core/lib/http/httpcli.h +39 -7
- data/src/core/lib/http/httpcli_security_connector.cc +3 -4
- data/src/core/lib/iomgr/endpoint.cc +4 -4
- data/src/core/lib/iomgr/endpoint.h +6 -4
- data/src/core/lib/iomgr/endpoint_cfstream.cc +7 -4
- data/src/core/lib/iomgr/endpoint_pair_posix.cc +2 -1
- data/src/core/lib/iomgr/ev_posix.cc +1 -4
- data/src/core/lib/iomgr/exec_ctx.h +1 -2
- data/src/core/lib/iomgr/internal_errqueue.cc +38 -47
- data/src/core/lib/iomgr/internal_errqueue.h +1 -6
- data/src/core/lib/iomgr/iomgr.cc +0 -1
- data/src/core/{ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_event_engine.cc → lib/iomgr/iomgr_fwd.h} +9 -12
- data/src/core/lib/iomgr/pollset_set.h +1 -2
- data/src/core/lib/iomgr/port.h +25 -6
- data/src/core/lib/iomgr/resolve_address.cc +8 -0
- data/src/core/lib/iomgr/resolve_address.h +21 -14
- data/src/core/lib/iomgr/resolve_address_impl.h +2 -3
- data/src/core/lib/iomgr/resolve_address_posix.cc +8 -14
- data/src/core/lib/iomgr/resolve_address_posix.h +5 -2
- data/src/core/lib/iomgr/resolve_address_windows.cc +7 -14
- data/src/core/lib/iomgr/resolve_address_windows.h +5 -2
- data/src/core/lib/iomgr/sockaddr.h +2 -3
- data/src/core/lib/iomgr/sockaddr_posix.h +2 -0
- data/src/core/lib/iomgr/sockaddr_windows.h +2 -0
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +3 -2
- data/src/core/lib/iomgr/tcp_client_cfstream.cc +10 -2
- data/src/core/lib/iomgr/tcp_client_posix.cc +12 -5
- data/src/core/lib/iomgr/tcp_client_windows.cc +13 -6
- data/src/core/lib/iomgr/tcp_posix.cc +9 -27
- data/src/core/lib/iomgr/tcp_server_posix.cc +26 -12
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +30 -27
- data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +7 -4
- data/src/core/lib/iomgr/tcp_server_windows.cc +13 -5
- data/src/core/lib/iomgr/tcp_windows.cc +7 -4
- data/src/core/lib/json/json.h +1 -2
- data/src/core/lib/json/json_reader.cc +9 -1
- data/src/core/lib/json/json_util.cc +7 -0
- data/src/core/lib/json/json_util.h +10 -1
- data/src/core/lib/json/json_writer.cc +6 -1
- data/src/core/lib/promise/activity.cc +1 -1
- data/src/core/lib/promise/activity.h +6 -6
- data/src/core/lib/promise/arena_promise.h +11 -1
- data/src/core/lib/promise/call_push_pull.h +4 -0
- data/src/core/lib/promise/context.h +1 -1
- data/src/core/lib/promise/detail/basic_seq.h +2 -2
- data/src/core/lib/promise/detail/promise_factory.h +0 -1
- data/src/core/lib/promise/latch.h +0 -1
- data/src/core/lib/promise/loop.h +1 -0
- data/src/core/lib/promise/race.h +0 -1
- data/src/core/lib/promise/seq.h +0 -2
- data/src/core/lib/promise/sleep.cc +2 -0
- data/src/core/lib/promise/sleep.h +10 -0
- data/src/core/lib/promise/try_seq.h +2 -2
- data/src/core/lib/resolver/resolver_factory.h +1 -2
- data/src/core/lib/resolver/server_address.cc +9 -3
- data/src/core/lib/resolver/server_address.h +4 -4
- data/src/core/lib/resource_quota/api.cc +14 -1
- data/src/core/lib/resource_quota/api.h +4 -1
- data/src/core/lib/resource_quota/arena.cc +0 -6
- data/src/core/lib/resource_quota/arena.h +1 -2
- data/src/core/lib/resource_quota/memory_quota.cc +47 -5
- data/src/core/lib/resource_quota/memory_quota.h +24 -5
- data/src/core/lib/resource_quota/resource_quota.h +8 -0
- data/src/core/lib/resource_quota/thread_quota.cc +2 -0
- data/src/core/lib/resource_quota/thread_quota.h +4 -0
- data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +3 -0
- data/src/core/lib/security/credentials/alts/alts_credentials.cc +8 -2
- data/src/core/lib/security/credentials/alts/alts_credentials.h +2 -2
- data/src/core/lib/security/credentials/call_creds_util.cc +2 -0
- data/src/core/lib/security/credentials/channel_creds_registry.h +1 -0
- data/src/core/lib/security/credentials/composite/composite_credentials.cc +7 -3
- data/src/core/lib/security/credentials/composite/composite_credentials.h +5 -4
- data/src/core/lib/security/credentials/credentials.h +17 -10
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +81 -0
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +8 -0
- data/src/core/lib/security/credentials/external/external_account_credentials.cc +3 -0
- data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +2 -0
- data/src/core/lib/security/credentials/fake/fake_credentials.cc +13 -3
- data/src/core/lib/security/credentials/fake/fake_credentials.h +2 -2
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +25 -15
- data/src/core/lib/security/credentials/google_default/google_default_credentials.h +2 -2
- data/src/core/lib/security/credentials/iam/iam_credentials.cc +4 -1
- data/src/core/lib/security/credentials/iam/iam_credentials.h +2 -2
- data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +8 -2
- data/src/core/lib/security/credentials/insecure/insecure_credentials.h +4 -4
- data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +3 -2
- data/src/core/lib/security/credentials/jwt/jwt_credentials.h +2 -2
- data/src/core/lib/security/credentials/local/local_credentials.cc +8 -2
- data/src/core/lib/security/credentials/local/local_credentials.h +2 -2
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +10 -6
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +4 -4
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +4 -1
- data/src/core/lib/security/credentials/plugin/plugin_credentials.h +1 -1
- data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +8 -2
- data/src/core/lib/security/credentials/ssl/ssl_credentials.h +4 -4
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +10 -0
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +5 -7
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +26 -1
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +28 -4
- data/src/core/lib/security/credentials/tls/tls_credentials.cc +10 -0
- data/src/core/lib/security/credentials/tls/tls_credentials.h +2 -2
- data/src/core/lib/security/credentials/xds/xds_credentials.cc +12 -3
- data/src/core/lib/security/credentials/xds/xds_credentials.h +5 -5
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +1 -1
- data/src/core/lib/security/security_connector/fake/fake_security_connector.h +1 -1
- data/src/core/lib/security/security_connector/security_connector.cc +1 -1
- data/src/core/lib/security/security_connector/security_connector.h +1 -1
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +1 -1
- data/src/core/lib/security/transport/client_auth_filter.cc +6 -8
- data/src/core/lib/security/transport/secure_endpoint.cc +23 -12
- data/src/core/lib/security/transport/security_handshaker.cc +5 -5
- data/src/core/lib/security/transport/security_handshaker.h +1 -1
- data/src/core/lib/security/transport/server_auth_filter.cc +3 -2
- data/src/core/lib/service_config/service_config.h +4 -8
- data/src/core/lib/service_config/service_config_call_data.h +4 -1
- data/src/core/lib/service_config/service_config_impl.cc +7 -0
- data/src/core/lib/service_config/service_config_impl.h +9 -2
- data/src/core/lib/service_config/service_config_parser.cc +8 -0
- data/src/core/lib/service_config/service_config_parser.h +7 -0
- data/src/core/lib/slice/b64.cc +1 -1
- data/src/core/lib/slice/b64.h +2 -0
- data/src/core/lib/slice/percent_encoding.cc +4 -1
- data/src/core/lib/slice/percent_encoding.h +0 -6
- data/src/core/lib/slice/slice.cc +2 -1
- data/src/core/lib/slice/slice.h +10 -5
- data/src/core/lib/slice/slice_api.cc +1 -1
- data/src/core/lib/slice/slice_buffer.cc +50 -23
- data/src/core/lib/slice/slice_buffer.h +106 -0
- data/src/core/lib/slice/slice_buffer_api.cc +35 -0
- data/src/core/lib/slice/slice_internal.h +4 -3
- data/src/core/lib/slice/slice_refcount.h +2 -3
- data/src/core/lib/slice/slice_refcount_base.h +2 -3
- data/src/core/lib/slice/slice_split.cc +3 -0
- data/src/core/lib/slice/slice_split.h +0 -4
- data/src/core/lib/slice/slice_string_helpers.cc +4 -0
- data/src/core/lib/slice/slice_string_helpers.h +1 -4
- data/src/core/lib/surface/builtins.cc +7 -2
- data/src/core/lib/surface/byte_buffer.cc +7 -1
- data/src/core/lib/surface/byte_buffer_reader.cc +4 -4
- data/src/core/lib/surface/call.cc +41 -26
- data/src/core/lib/surface/call.h +16 -2
- data/src/core/lib/surface/call_details.cc +4 -4
- data/src/core/lib/surface/call_log_batch.cc +7 -1
- data/src/core/lib/surface/call_test_only.h +4 -1
- data/src/core/lib/surface/channel.cc +179 -242
- data/src/core/lib/surface/channel.h +94 -57
- data/src/core/lib/surface/channel_init.h +2 -0
- data/src/core/lib/surface/channel_ping.cc +8 -2
- data/src/core/lib/surface/channel_stack_type.cc +0 -2
- data/src/core/lib/surface/channel_stack_type.h +0 -2
- data/src/core/lib/surface/completion_queue.cc +14 -6
- data/src/core/lib/surface/completion_queue.h +5 -1
- data/src/core/lib/surface/completion_queue_factory.cc +1 -0
- data/src/core/lib/surface/completion_queue_factory.h +1 -3
- data/src/core/lib/surface/event_string.cc +1 -7
- data/src/core/lib/surface/event_string.h +1 -1
- data/src/core/lib/surface/init.cc +17 -45
- data/src/core/lib/surface/init.h +0 -8
- data/src/core/lib/surface/lame_client.cc +64 -110
- data/src/core/lib/surface/lame_client.h +40 -2
- data/src/core/lib/surface/metadata_array.cc +2 -0
- data/src/core/lib/surface/server.cc +69 -56
- data/src/core/lib/surface/server.h +39 -9
- data/src/core/lib/surface/validate_metadata.cc +2 -5
- data/src/core/lib/surface/validate_metadata.h +3 -0
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/bdp_estimator.cc +3 -1
- data/src/core/lib/transport/bdp_estimator.h +2 -3
- data/src/core/lib/transport/byte_stream.cc +4 -3
- data/src/core/lib/transport/byte_stream.h +5 -1
- data/src/core/lib/transport/connectivity_state.cc +6 -4
- data/src/core/lib/transport/connectivity_state.h +2 -3
- data/src/core/lib/transport/error_utils.cc +4 -2
- data/src/core/lib/transport/error_utils.h +5 -1
- data/src/core/lib/{channel → transport}/handshaker.cc +9 -4
- data/src/core/lib/{channel → transport}/handshaker.h +13 -6
- data/src/core/lib/{channel → transport}/handshaker_factory.h +9 -10
- data/src/core/lib/{channel → transport}/handshaker_registry.cc +5 -1
- data/src/core/lib/{channel → transport}/handshaker_registry.h +5 -4
- data/src/core/{ext/filters/client_channel → lib/transport}/http_connect_handshaker.cc +24 -10
- data/src/core/{ext/filters/client_channel → lib/transport}/http_connect_handshaker.h +3 -3
- data/src/core/lib/transport/metadata_batch.cc +287 -0
- data/src/core/lib/transport/metadata_batch.h +133 -264
- data/src/core/lib/transport/parsed_metadata.cc +2 -0
- data/src/core/lib/transport/parsed_metadata.h +10 -3
- data/src/core/lib/transport/status_conversion.cc +2 -0
- data/src/core/lib/transport/status_conversion.h +2 -2
- data/src/core/lib/transport/tcp_connect_handshaker.cc +253 -0
- data/src/core/lib/transport/tcp_connect_handshaker.h +39 -0
- data/src/core/lib/transport/timeout_encoding.cc +2 -6
- data/src/core/lib/transport/timeout_encoding.h +5 -1
- data/src/core/lib/transport/transport.cc +18 -17
- data/src/core/lib/transport/transport.h +28 -2
- data/src/core/lib/transport/transport_impl.h +10 -0
- data/src/core/lib/transport/transport_op_string.cc +9 -10
- data/src/core/lib/uri/uri_parser.cc +11 -3
- data/src/core/lib/uri/uri_parser.h +0 -2
- data/src/core/plugin_registry/grpc_plugin_registry.cc +11 -0
- data/src/core/tsi/ssl/session_cache/ssl_session.h +2 -0
- data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +2 -0
- data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +2 -0
- data/src/ruby/ext/grpc/extconf.rb +2 -2
- data/src/ruby/lib/grpc/2.5/grpc_c.so +0 -0
- data/src/ruby/lib/grpc/2.6/grpc_c.so +0 -0
- data/src/ruby/lib/grpc/2.7/grpc_c.so +0 -0
- data/src/ruby/lib/grpc/3.0/grpc_c.so +0 -0
- data/src/ruby/lib/grpc/3.1/grpc_c.so +0 -0
- data/src/ruby/lib/grpc/grpc_c.so +0 -0
- data/src/ruby/lib/grpc/version.rb +1 -1
- 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/abseil-cpp/absl/container/flat_hash_set.h +504 -0
- metadata +36 -29
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_event_engine.cc +0 -31
- data/src/core/lib/event_engine/sockaddr.cc +0 -40
- data/src/core/lib/event_engine/sockaddr.h +0 -44
- data/src/core/lib/gprpp/capture.h +0 -76
- data/src/core/lib/iomgr/event_engine/closure.cc +0 -77
- data/src/core/lib/iomgr/event_engine/closure.h +0 -42
- data/src/core/lib/iomgr/event_engine/endpoint.cc +0 -172
- data/src/core/lib/iomgr/event_engine/endpoint.h +0 -52
- data/src/core/lib/iomgr/event_engine/iomgr.cc +0 -85
- data/src/core/lib/iomgr/event_engine/pollset.cc +0 -87
- data/src/core/lib/iomgr/event_engine/promise.h +0 -51
- data/src/core/lib/iomgr/event_engine/resolved_address_internal.cc +0 -47
- data/src/core/lib/iomgr/event_engine/resolved_address_internal.h +0 -37
- data/src/core/lib/iomgr/event_engine/resolver.cc +0 -133
- data/src/core/lib/iomgr/event_engine/resolver.h +0 -56
- data/src/core/lib/iomgr/event_engine/tcp.cc +0 -296
- data/src/core/lib/iomgr/event_engine/timer.cc +0 -62
@@ -20,6 +20,7 @@
|
|
20
20
|
|
21
21
|
#include "src/core/lib/http/httpcli.h"
|
22
22
|
|
23
|
+
#include <limits.h>
|
23
24
|
#include <string.h>
|
24
25
|
|
25
26
|
#include <string>
|
@@ -46,6 +47,7 @@
|
|
46
47
|
#include "src/core/lib/resource_quota/api.h"
|
47
48
|
#include "src/core/lib/slice/slice_internal.h"
|
48
49
|
#include "src/core/lib/transport/error_utils.h"
|
50
|
+
#include "src/core/lib/transport/tcp_connect_handshaker.h"
|
49
51
|
|
50
52
|
namespace grpc_core {
|
51
53
|
|
@@ -53,6 +55,7 @@ namespace {
|
|
53
55
|
|
54
56
|
grpc_httpcli_get_override g_get_override;
|
55
57
|
grpc_httpcli_post_override g_post_override;
|
58
|
+
grpc_httpcli_put_override g_put_override;
|
56
59
|
void (*g_test_only_on_handshake_done_intercept)(HttpRequest* req);
|
57
60
|
|
58
61
|
} // namespace
|
@@ -107,10 +110,36 @@ OrphanablePtr<HttpRequest> HttpRequest::Post(
|
|
107
110
|
std::move(channel_creds));
|
108
111
|
}
|
109
112
|
|
113
|
+
OrphanablePtr<HttpRequest> HttpRequest::Put(
|
114
|
+
URI uri, const grpc_channel_args* channel_args,
|
115
|
+
grpc_polling_entity* pollent, const grpc_http_request* request,
|
116
|
+
Timestamp deadline, grpc_closure* on_done, grpc_http_response* response,
|
117
|
+
RefCountedPtr<grpc_channel_credentials> channel_creds) {
|
118
|
+
absl::optional<std::function<void()>> test_only_generate_response;
|
119
|
+
if (g_put_override != nullptr) {
|
120
|
+
test_only_generate_response = [request, uri, deadline, on_done,
|
121
|
+
response]() {
|
122
|
+
g_put_override(request, uri.authority().c_str(), uri.path().c_str(),
|
123
|
+
request->body, request->body_length, deadline, on_done,
|
124
|
+
response);
|
125
|
+
};
|
126
|
+
}
|
127
|
+
std::string name =
|
128
|
+
absl::StrFormat("HTTP:PUT:%s:%s", uri.authority(), uri.path());
|
129
|
+
const grpc_slice request_text = grpc_httpcli_format_put_request(
|
130
|
+
request, uri.authority().c_str(), uri.path().c_str());
|
131
|
+
return MakeOrphanable<HttpRequest>(
|
132
|
+
std::move(uri), request_text, response, deadline, channel_args, on_done,
|
133
|
+
pollent, name.c_str(), std::move(test_only_generate_response),
|
134
|
+
std::move(channel_creds));
|
135
|
+
}
|
136
|
+
|
110
137
|
void HttpRequest::SetOverride(grpc_httpcli_get_override get,
|
111
|
-
grpc_httpcli_post_override post
|
138
|
+
grpc_httpcli_post_override post,
|
139
|
+
grpc_httpcli_put_override put) {
|
112
140
|
g_get_override = get;
|
113
141
|
g_post_override = post;
|
142
|
+
g_put_override = put;
|
114
143
|
}
|
115
144
|
|
116
145
|
void HttpRequest::TestOnlySetOnHandshakeDoneIntercept(
|
@@ -129,7 +158,8 @@ HttpRequest::HttpRequest(
|
|
129
158
|
deadline_(deadline),
|
130
159
|
channel_args_(CoreConfiguration::Get()
|
131
160
|
.channel_args_preconditioning()
|
132
|
-
.PreconditionChannelArgs(channel_args)
|
161
|
+
.PreconditionChannelArgs(channel_args)
|
162
|
+
.ToC()),
|
133
163
|
channel_creds_(std::move(channel_creds)),
|
134
164
|
on_done_(on_done),
|
135
165
|
resource_quota_(ResourceQuotaFromChannelArgs(channel_args_)),
|
@@ -150,10 +180,6 @@ HttpRequest::HttpRequest(
|
|
150
180
|
grpc_schedule_on_exec_ctx);
|
151
181
|
GPR_ASSERT(pollent);
|
152
182
|
grpc_polling_entity_add_to_pollset_set(pollent, pollset_set_);
|
153
|
-
// Create the DNS resolver. We'll start resolving when Start is called.
|
154
|
-
dns_request_ = GetDNSResolver()->ResolveName(
|
155
|
-
uri_.authority(), uri_.scheme(), pollset_set_,
|
156
|
-
absl::bind_front(&HttpRequest::OnResolved, this));
|
157
183
|
}
|
158
184
|
|
159
185
|
HttpRequest::~HttpRequest() {
|
@@ -177,7 +203,9 @@ void HttpRequest::Start() {
|
|
177
203
|
return;
|
178
204
|
}
|
179
205
|
Ref().release(); // ref held by pending DNS resolution
|
180
|
-
|
206
|
+
dns_request_handle_ = GetDNSResolver()->ResolveName(
|
207
|
+
uri_.authority(), uri_.scheme(), pollset_set_,
|
208
|
+
absl::bind_front(&HttpRequest::OnResolved, this));
|
181
209
|
}
|
182
210
|
|
183
211
|
void HttpRequest::Orphan() {
|
@@ -185,21 +213,17 @@ void HttpRequest::Orphan() {
|
|
185
213
|
MutexLock lock(&mu_);
|
186
214
|
GPR_ASSERT(!cancelled_);
|
187
215
|
cancelled_ = true;
|
188
|
-
|
189
|
-
if (
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
// TODO(apolcyn): fix this to cancel the TCP connection attempt when
|
195
|
-
// an API to do so exists.
|
196
|
-
Finish(GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(
|
197
|
-
"HTTP request cancelled during TCP connection establishment",
|
198
|
-
&overall_error_, 1));
|
216
|
+
// cancel potentially pending DNS resolution.
|
217
|
+
if (dns_request_handle_.has_value() &&
|
218
|
+
GetDNSResolver()->Cancel(dns_request_handle_.value())) {
|
219
|
+
Finish(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
220
|
+
"cancelled during DNS resolution"));
|
221
|
+
Unref();
|
199
222
|
}
|
200
223
|
if (handshake_mgr_ != nullptr) {
|
224
|
+
// Shutdown will cancel any ongoing tcp connect.
|
201
225
|
handshake_mgr_->Shutdown(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
202
|
-
"HTTP request cancelled during
|
226
|
+
"HTTP request cancelled during handshake"));
|
203
227
|
}
|
204
228
|
if (own_endpoint_ && ep_ != nullptr) {
|
205
229
|
grpc_endpoint_shutdown(
|
@@ -215,10 +239,12 @@ void HttpRequest::AppendError(grpc_error_handle error) {
|
|
215
239
|
GRPC_ERROR_CREATE_FROM_STATIC_STRING("Failed HTTP/1 client request");
|
216
240
|
}
|
217
241
|
const grpc_resolved_address* addr = &addresses_[next_address_ - 1];
|
218
|
-
|
242
|
+
auto addr_text = grpc_sockaddr_to_uri(addr);
|
219
243
|
overall_error_ = grpc_error_add_child(
|
220
244
|
overall_error_,
|
221
|
-
grpc_error_set_str(
|
245
|
+
grpc_error_set_str(
|
246
|
+
error, GRPC_ERROR_STR_TARGET_ADDRESS,
|
247
|
+
addr_text.ok() ? addr_text.value() : addr_text.status().ToString()));
|
222
248
|
}
|
223
249
|
|
224
250
|
void HttpRequest::OnReadInternal(grpc_error_handle error) {
|
@@ -260,7 +286,8 @@ void HttpRequest::StartWrite() {
|
|
260
286
|
grpc_slice_ref_internal(request_text_);
|
261
287
|
grpc_slice_buffer_add(&outgoing_, request_text_);
|
262
288
|
Ref().release(); // ref held by pending write
|
263
|
-
grpc_endpoint_write(ep_, &outgoing_, &done_write_, nullptr
|
289
|
+
grpc_endpoint_write(ep_, &outgoing_, &done_write_, nullptr,
|
290
|
+
/*max_frame_size=*/INT_MAX);
|
264
291
|
}
|
265
292
|
|
266
293
|
void HttpRequest::OnHandshakeDone(void* arg, grpc_error_handle error) {
|
@@ -274,8 +301,7 @@ void HttpRequest::OnHandshakeDone(void* arg, grpc_error_handle error) {
|
|
274
301
|
MutexLock lock(&req->mu_);
|
275
302
|
req->own_endpoint_ = true;
|
276
303
|
if (error != GRPC_ERROR_NONE) {
|
277
|
-
|
278
|
-
grpc_error_std_string(error).c_str());
|
304
|
+
req->handshake_mgr_.reset();
|
279
305
|
req->NextAddress(GRPC_ERROR_REF(error));
|
280
306
|
return;
|
281
307
|
}
|
@@ -284,69 +310,55 @@ void HttpRequest::OnHandshakeDone(void* arg, grpc_error_handle error) {
|
|
284
310
|
grpc_slice_buffer_destroy_internal(args->read_buffer);
|
285
311
|
gpr_free(args->read_buffer);
|
286
312
|
req->ep_ = args->endpoint;
|
313
|
+
req->handshake_mgr_.reset();
|
287
314
|
if (req->cancelled_) {
|
288
315
|
req->NextAddress(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
289
|
-
"HTTP request cancelled during
|
316
|
+
"HTTP request cancelled during handshake"));
|
290
317
|
return;
|
291
318
|
}
|
292
319
|
req->StartWrite();
|
293
320
|
}
|
294
321
|
|
295
|
-
void HttpRequest::
|
296
|
-
RefCountedPtr<HttpRequest> req(static_cast<HttpRequest*>(arg));
|
297
|
-
MutexLock lock(&req->mu_);
|
298
|
-
req->connecting_ = false;
|
299
|
-
req->own_endpoint_ = true;
|
300
|
-
if (req->cancelled_) {
|
301
|
-
// since we were cancelled while connecting, Finish has already
|
302
|
-
// been called.
|
303
|
-
return;
|
304
|
-
}
|
305
|
-
if (!req->ep_) {
|
306
|
-
req->NextAddress(GRPC_ERROR_REF(error));
|
307
|
-
return;
|
308
|
-
}
|
309
|
-
// TODO(yihuaz): treating nullptr channel_creds_ as insecure is
|
310
|
-
// a hack used to support the port server client (a test utility) in
|
311
|
-
// unsecure builds (when no definition of grpc_insecure_credentials_create
|
312
|
-
// exists). We can remove this hack and unconditionally assume a valid
|
313
|
-
// channel_creds_ object after unsecure builds are deleted, in
|
314
|
-
// https://github.com/grpc/grpc/pull/25586.
|
315
|
-
if (req->channel_creds_ == nullptr) {
|
316
|
-
gpr_log(GPR_DEBUG,
|
317
|
-
"HTTP request skipping handshake because creds are null");
|
318
|
-
req->StartWrite();
|
319
|
-
return;
|
320
|
-
}
|
322
|
+
void HttpRequest::DoHandshake(const grpc_resolved_address* addr) {
|
321
323
|
// Create the security connector using the credentials and target name.
|
322
324
|
grpc_channel_args* new_args_from_connector = nullptr;
|
323
325
|
RefCountedPtr<grpc_channel_security_connector> sc =
|
324
|
-
|
325
|
-
nullptr /*call_creds*/,
|
326
|
-
|
326
|
+
channel_creds_->create_security_connector(
|
327
|
+
nullptr /*call_creds*/, uri_.authority().c_str(), channel_args_,
|
328
|
+
&new_args_from_connector);
|
327
329
|
if (sc == nullptr) {
|
328
|
-
|
329
|
-
"failed to create security connector", &
|
330
|
+
Finish(GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(
|
331
|
+
"failed to create security connector", &overall_error_, 1));
|
330
332
|
return;
|
331
333
|
}
|
332
|
-
|
333
|
-
|
334
|
+
absl::StatusOr<std::string> address = grpc_sockaddr_to_uri(addr);
|
335
|
+
if (!address.ok()) {
|
336
|
+
Finish(GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(
|
337
|
+
"Failed to extract URI from address", &overall_error_, 1));
|
338
|
+
return;
|
339
|
+
}
|
340
|
+
absl::InlinedVector<grpc_arg, 2> args_to_add = {
|
341
|
+
grpc_security_connector_to_arg(sc.get()),
|
342
|
+
grpc_channel_arg_string_create(
|
343
|
+
const_cast<char*>(GRPC_ARG_TCP_HANDSHAKER_RESOLVED_ADDRESS),
|
344
|
+
const_cast<char*>(address.value().c_str())),
|
345
|
+
};
|
346
|
+
const grpc_channel_args* new_args = grpc_channel_args_copy_and_add(
|
334
347
|
new_args_from_connector != nullptr ? new_args_from_connector
|
335
|
-
:
|
336
|
-
|
348
|
+
: channel_args_,
|
349
|
+
args_to_add.data(), args_to_add.size());
|
337
350
|
grpc_channel_args_destroy(new_args_from_connector);
|
338
351
|
// Start the handshake
|
339
|
-
|
352
|
+
handshake_mgr_ = MakeRefCounted<HandshakeManager>();
|
340
353
|
CoreConfiguration::Get().handshaker_registry().AddHandshakers(
|
341
|
-
HANDSHAKER_CLIENT, new_args,
|
342
|
-
|
343
|
-
|
344
|
-
|
345
|
-
|
346
|
-
|
347
|
-
|
348
|
-
|
349
|
-
/*user_data=*/req.get());
|
354
|
+
HANDSHAKER_CLIENT, new_args, pollset_set_, handshake_mgr_.get());
|
355
|
+
Ref().release(); // ref held by pending handshake
|
356
|
+
grpc_endpoint* ep = ep_;
|
357
|
+
ep_ = nullptr;
|
358
|
+
own_endpoint_ = false;
|
359
|
+
handshake_mgr_->DoHandshake(ep, new_args, deadline_,
|
360
|
+
/*acceptor=*/nullptr, OnHandshakeDone,
|
361
|
+
/*user_data=*/this);
|
350
362
|
sc.reset(DEBUG_LOCATION, "httpcli");
|
351
363
|
grpc_channel_args_destroy(new_args);
|
352
364
|
}
|
@@ -366,28 +378,23 @@ void HttpRequest::NextAddress(grpc_error_handle error) {
|
|
366
378
|
return;
|
367
379
|
}
|
368
380
|
const grpc_resolved_address* addr = &addresses_[next_address_++];
|
369
|
-
|
370
|
-
connecting_ = true;
|
371
|
-
own_endpoint_ = false;
|
372
|
-
Ref().release(); // ref held by pending connect
|
373
|
-
grpc_tcp_client_connect(&connected_, &ep_, pollset_set_, channel_args_, addr,
|
374
|
-
deadline_);
|
381
|
+
DoHandshake(addr);
|
375
382
|
}
|
376
383
|
|
377
384
|
void HttpRequest::OnResolved(
|
378
385
|
absl::StatusOr<std::vector<grpc_resolved_address>> addresses_or) {
|
379
386
|
RefCountedPtr<HttpRequest> unreffer(this);
|
380
387
|
MutexLock lock(&mu_);
|
381
|
-
|
382
|
-
if (!addresses_or.ok()) {
|
383
|
-
Finish(absl_status_to_grpc_error(addresses_or.status()));
|
384
|
-
return;
|
385
|
-
}
|
388
|
+
dns_request_handle_.reset();
|
386
389
|
if (cancelled_) {
|
387
390
|
Finish(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
388
391
|
"cancelled during DNS resolution"));
|
389
392
|
return;
|
390
393
|
}
|
394
|
+
if (!addresses_or.ok()) {
|
395
|
+
Finish(absl_status_to_grpc_error(addresses_or.status()));
|
396
|
+
return;
|
397
|
+
}
|
391
398
|
addresses_ = std::move(*addresses_or);
|
392
399
|
next_address_ = 0;
|
393
400
|
NextAddress(GRPC_ERROR_NONE);
|
data/src/core/lib/http/httpcli.h
CHANGED
@@ -25,7 +25,6 @@
|
|
25
25
|
|
26
26
|
#include <grpc/support/time.h>
|
27
27
|
|
28
|
-
#include "src/core/lib/channel/handshaker.h"
|
29
28
|
#include "src/core/lib/gprpp/orphanable.h"
|
30
29
|
#include "src/core/lib/http/parser.h"
|
31
30
|
#include "src/core/lib/iomgr/endpoint.h"
|
@@ -35,6 +34,7 @@
|
|
35
34
|
#include "src/core/lib/iomgr/resolve_address.h"
|
36
35
|
#include "src/core/lib/resource_quota/resource_quota.h"
|
37
36
|
#include "src/core/lib/security/credentials/credentials.h"
|
37
|
+
#include "src/core/lib/transport/handshaker.h"
|
38
38
|
#include "src/core/lib/uri/uri_parser.h"
|
39
39
|
|
40
40
|
/* User agent this library reports */
|
@@ -50,6 +50,10 @@ typedef int (*grpc_httpcli_post_override)(
|
|
50
50
|
const grpc_http_request* request, const char* host, const char* path,
|
51
51
|
const char* body_bytes, size_t body_size, grpc_core::Timestamp deadline,
|
52
52
|
grpc_closure* on_complete, grpc_http_response* response);
|
53
|
+
typedef int (*grpc_httpcli_put_override)(
|
54
|
+
const grpc_http_request* request, const char* host, const char* path,
|
55
|
+
const char* body_bytes, size_t body_size, grpc_core::Timestamp deadline,
|
56
|
+
grpc_closure* on_complete, grpc_http_response* response);
|
53
57
|
|
54
58
|
namespace grpc_core {
|
55
59
|
|
@@ -112,6 +116,32 @@ class HttpRequest : public InternallyRefCounted<HttpRequest> {
|
|
112
116
|
RefCountedPtr<grpc_channel_credentials> channel_creds)
|
113
117
|
GRPC_MUST_USE_RESULT;
|
114
118
|
|
119
|
+
// Asynchronously perform a HTTP PUT.
|
120
|
+
// 'uri' is the target to make the request to. The scheme field is used to
|
121
|
+
// determine the port number. The authority field is the target host. The
|
122
|
+
// path field determines the path of the request. No other fields are used.
|
123
|
+
// 'args' are optional channel args for the request.
|
124
|
+
// 'pollent' indicates a grpc_polling_entity that is interested in the result
|
125
|
+
// of the post - work on this entity may be used to progress the post
|
126
|
+
// operation
|
127
|
+
// 'request' contains request parameters - these are caller owned and can be
|
128
|
+
// destroyed once the call returns
|
129
|
+
// 'deadline' contains a deadline for the request (or gpr_inf_future)
|
130
|
+
// 'on_done' is a callback to report results to
|
131
|
+
// 'channel_creds' are used to configurably secure the connection.
|
132
|
+
// For insecure requests, use grpc_insecure_credentials_create.
|
133
|
+
// For secure requests, use CreateHttpRequestSSLCredentials().
|
134
|
+
// nullptr is treated as insecure credentials.
|
135
|
+
// TODO(apolcyn): disallow nullptr as a value after unsecure builds
|
136
|
+
// are removed.
|
137
|
+
// Does not support ?var1=val1&var2=val2 in the path.
|
138
|
+
static OrphanablePtr<HttpRequest> Put(
|
139
|
+
URI uri, const grpc_channel_args* args, grpc_polling_entity* pollent,
|
140
|
+
const grpc_http_request* request, Timestamp deadline,
|
141
|
+
grpc_closure* on_done, grpc_http_response* response,
|
142
|
+
RefCountedPtr<grpc_channel_credentials> channel_creds)
|
143
|
+
GRPC_MUST_USE_RESULT;
|
144
|
+
|
115
145
|
HttpRequest(URI uri, const grpc_slice& request_text,
|
116
146
|
grpc_http_response* response, Timestamp deadline,
|
117
147
|
const grpc_channel_args* channel_args, grpc_closure* on_done,
|
@@ -126,7 +156,8 @@ class HttpRequest : public InternallyRefCounted<HttpRequest> {
|
|
126
156
|
void Orphan() override;
|
127
157
|
|
128
158
|
static void SetOverride(grpc_httpcli_get_override get,
|
129
|
-
grpc_httpcli_post_override post
|
159
|
+
grpc_httpcli_post_override post,
|
160
|
+
grpc_httpcli_put_override put);
|
130
161
|
|
131
162
|
static void TestOnlySetOnHandshakeDoneIntercept(
|
132
163
|
void (*intercept)(HttpRequest* req));
|
@@ -141,7 +172,8 @@ class HttpRequest : public InternallyRefCounted<HttpRequest> {
|
|
141
172
|
|
142
173
|
void DoRead() ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu_) {
|
143
174
|
Ref().release(); // ref held by pending read
|
144
|
-
grpc_endpoint_read(ep_, &incoming_, &on_read_, /*urgent=*/true
|
175
|
+
grpc_endpoint_read(ep_, &incoming_, &on_read_, /*urgent=*/true,
|
176
|
+
/*min_progress_size=*/1);
|
145
177
|
}
|
146
178
|
|
147
179
|
static void OnRead(void* user_data, grpc_error_handle error) {
|
@@ -179,7 +211,8 @@ class HttpRequest : public InternallyRefCounted<HttpRequest> {
|
|
179
211
|
|
180
212
|
static void OnHandshakeDone(void* arg, grpc_error_handle error);
|
181
213
|
|
182
|
-
|
214
|
+
void DoHandshake(const grpc_resolved_address* addr)
|
215
|
+
ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu_);
|
183
216
|
|
184
217
|
void NextAddress(grpc_error_handle error) ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu_);
|
185
218
|
|
@@ -195,7 +228,6 @@ class HttpRequest : public InternallyRefCounted<HttpRequest> {
|
|
195
228
|
grpc_closure continue_on_read_after_schedule_on_exec_ctx_;
|
196
229
|
grpc_closure done_write_;
|
197
230
|
grpc_closure continue_done_write_after_schedule_on_exec_ctx_;
|
198
|
-
grpc_closure connected_;
|
199
231
|
grpc_endpoint* ep_ = nullptr;
|
200
232
|
grpc_closure* on_done_;
|
201
233
|
ResourceQuotaRefPtr resource_quota_;
|
@@ -206,7 +238,6 @@ class HttpRequest : public InternallyRefCounted<HttpRequest> {
|
|
206
238
|
RefCountedPtr<HandshakeManager> handshake_mgr_ ABSL_GUARDED_BY(mu_);
|
207
239
|
bool own_endpoint_ ABSL_GUARDED_BY(mu_) = true;
|
208
240
|
bool cancelled_ ABSL_GUARDED_BY(mu_) = false;
|
209
|
-
bool connecting_ ABSL_GUARDED_BY(mu_) = false;
|
210
241
|
grpc_http_parser parser_ ABSL_GUARDED_BY(mu_);
|
211
242
|
std::vector<grpc_resolved_address> addresses_ ABSL_GUARDED_BY(mu_);
|
212
243
|
size_t next_address_ ABSL_GUARDED_BY(mu_) = 0;
|
@@ -215,7 +246,8 @@ class HttpRequest : public InternallyRefCounted<HttpRequest> {
|
|
215
246
|
grpc_slice_buffer incoming_ ABSL_GUARDED_BY(mu_);
|
216
247
|
grpc_slice_buffer outgoing_ ABSL_GUARDED_BY(mu_);
|
217
248
|
grpc_error_handle overall_error_ ABSL_GUARDED_BY(mu_) = GRPC_ERROR_NONE;
|
218
|
-
|
249
|
+
absl::optional<DNSResolver::TaskHandle> dns_request_handle_
|
250
|
+
ABSL_GUARDED_BY(mu_) = DNSResolver::kNullHandle;
|
219
251
|
};
|
220
252
|
|
221
253
|
} // namespace grpc_core
|
@@ -178,12 +178,11 @@ class HttpRequestSSLCredentials : public grpc_channel_credentials {
|
|
178
178
|
return Ref();
|
179
179
|
}
|
180
180
|
|
181
|
-
|
182
|
-
|
181
|
+
UniqueTypeName type() const override {
|
182
|
+
static UniqueTypeName::Factory kFactory("HttpRequestSSL");
|
183
|
+
return kFactory.Create();
|
183
184
|
}
|
184
185
|
|
185
|
-
const char* type() const override { return "HttpRequestSSL"; }
|
186
|
-
|
187
186
|
private:
|
188
187
|
int cmp_impl(const grpc_channel_credentials* /* other */) const override {
|
189
188
|
// There's no differentiating factor between two HttpRequestSSLCredentials
|
@@ -23,13 +23,13 @@
|
|
23
23
|
grpc_core::TraceFlag grpc_tcp_trace(false, "tcp");
|
24
24
|
|
25
25
|
void grpc_endpoint_read(grpc_endpoint* ep, grpc_slice_buffer* slices,
|
26
|
-
grpc_closure* cb, bool urgent) {
|
27
|
-
ep->vtable->read(ep, slices, cb, urgent);
|
26
|
+
grpc_closure* cb, bool urgent, int min_progress_size) {
|
27
|
+
ep->vtable->read(ep, slices, cb, urgent, min_progress_size);
|
28
28
|
}
|
29
29
|
|
30
30
|
void grpc_endpoint_write(grpc_endpoint* ep, grpc_slice_buffer* slices,
|
31
|
-
grpc_closure* cb, void* arg) {
|
32
|
-
ep->vtable->write(ep, slices, cb, arg);
|
31
|
+
grpc_closure* cb, void* arg, int max_frame_size) {
|
32
|
+
ep->vtable->write(ep, slices, cb, arg, max_frame_size);
|
33
33
|
}
|
34
34
|
|
35
35
|
void grpc_endpoint_add_to_pollset(grpc_endpoint* ep, grpc_pollset* pollset) {
|
@@ -38,9 +38,9 @@ typedef struct grpc_endpoint_vtable grpc_endpoint_vtable;
|
|
38
38
|
|
39
39
|
struct grpc_endpoint_vtable {
|
40
40
|
void (*read)(grpc_endpoint* ep, grpc_slice_buffer* slices, grpc_closure* cb,
|
41
|
-
bool urgent);
|
41
|
+
bool urgent, int min_progress_size);
|
42
42
|
void (*write)(grpc_endpoint* ep, grpc_slice_buffer* slices, grpc_closure* cb,
|
43
|
-
void* arg);
|
43
|
+
void* arg, int max_frame_size);
|
44
44
|
void (*add_to_pollset)(grpc_endpoint* ep, grpc_pollset* pollset);
|
45
45
|
void (*add_to_pollset_set)(grpc_endpoint* ep, grpc_pollset_set* pollset);
|
46
46
|
void (*delete_from_pollset_set)(grpc_endpoint* ep, grpc_pollset_set* pollset);
|
@@ -58,7 +58,7 @@ struct grpc_endpoint_vtable {
|
|
58
58
|
Valid slices may be placed into \a slices even when the callback is
|
59
59
|
invoked with error != GRPC_ERROR_NONE. */
|
60
60
|
void grpc_endpoint_read(grpc_endpoint* ep, grpc_slice_buffer* slices,
|
61
|
-
grpc_closure* cb, bool urgent);
|
61
|
+
grpc_closure* cb, bool urgent, int min_progress_size);
|
62
62
|
|
63
63
|
absl::string_view grpc_endpoint_get_peer(grpc_endpoint* ep);
|
64
64
|
|
@@ -79,9 +79,11 @@ int grpc_endpoint_get_fd(grpc_endpoint* ep);
|
|
79
79
|
it is a valid slice buffer.
|
80
80
|
\a arg is platform specific. It is currently only used by TCP on linux
|
81
81
|
platforms as an argument that would be forwarded to the timestamps callback.
|
82
|
+
\a max_frame_size. A hint to the endpoint implementation to construct
|
83
|
+
frames which do not exceed the specified size.
|
82
84
|
*/
|
83
85
|
void grpc_endpoint_write(grpc_endpoint* ep, grpc_slice_buffer* slices,
|
84
|
-
grpc_closure* cb, void* arg);
|
86
|
+
grpc_closure* cb, void* arg, int max_frame_size);
|
85
87
|
|
86
88
|
/* Causes any pending and future read/write callbacks to run immediately with
|
87
89
|
success==0 */
|
@@ -237,7 +237,8 @@ static void WriteAction(void* arg, grpc_error_handle error) {
|
|
237
237
|
}
|
238
238
|
|
239
239
|
static void CFStreamRead(grpc_endpoint* ep, grpc_slice_buffer* slices,
|
240
|
-
grpc_closure* cb, bool urgent
|
240
|
+
grpc_closure* cb, bool urgent,
|
241
|
+
int /*min_progress_size*/) {
|
241
242
|
CFStreamEndpoint* ep_impl = reinterpret_cast<CFStreamEndpoint*>(ep);
|
242
243
|
if (grpc_tcp_trace.enabled()) {
|
243
244
|
gpr_log(GPR_DEBUG, "CFStream endpoint:%p read (%p, %p) length:%zu", ep_impl,
|
@@ -254,7 +255,7 @@ static void CFStreamRead(grpc_endpoint* ep, grpc_slice_buffer* slices,
|
|
254
255
|
}
|
255
256
|
|
256
257
|
static void CFStreamWrite(grpc_endpoint* ep, grpc_slice_buffer* slices,
|
257
|
-
grpc_closure* cb, void* arg) {
|
258
|
+
grpc_closure* cb, void* arg, int /*max_frame_size*/) {
|
258
259
|
CFStreamEndpoint* ep_impl = reinterpret_cast<CFStreamEndpoint*>(ep);
|
259
260
|
if (grpc_tcp_trace.enabled()) {
|
260
261
|
gpr_log(GPR_DEBUG, "CFStream endpoint:%p write (%p, %p) length:%zu",
|
@@ -351,11 +352,13 @@ grpc_endpoint* grpc_cfstream_endpoint_create(CFReadStreamRef read_stream,
|
|
351
352
|
if (native_handle) {
|
352
353
|
CFRelease(native_handle);
|
353
354
|
}
|
355
|
+
absl::StatusOr<std::string> addr_uri;
|
354
356
|
if (getsockname(sockfd, reinterpret_cast<sockaddr*>(resolved_local_addr.addr),
|
355
|
-
&resolved_local_addr.len) < 0
|
357
|
+
&resolved_local_addr.len) < 0 ||
|
358
|
+
!(addr_uri = grpc_sockaddr_to_uri(&resolved_local_addr)).ok()) {
|
356
359
|
ep_impl->local_address = "";
|
357
360
|
} else {
|
358
|
-
ep_impl->local_address =
|
361
|
+
ep_impl->local_address = addr_uri.value();
|
359
362
|
}
|
360
363
|
ep_impl->read_cb = nil;
|
361
364
|
ep_impl->write_cb = nil;
|
@@ -62,7 +62,8 @@ grpc_endpoint_pair grpc_iomgr_create_endpoint_pair(const char* name,
|
|
62
62
|
std::string final_name = absl::StrCat(name, ":client");
|
63
63
|
const grpc_channel_args* new_args = grpc_core::CoreConfiguration::Get()
|
64
64
|
.channel_args_preconditioning()
|
65
|
-
.PreconditionChannelArgs(args)
|
65
|
+
.PreconditionChannelArgs(args)
|
66
|
+
.ToC();
|
66
67
|
p.client = grpc_tcp_create(grpc_fd_create(sv[1], final_name.c_str(), false),
|
67
68
|
new_args, "socketpair-server");
|
68
69
|
final_name = absl::StrCat(name, ":server");
|
@@ -237,10 +237,7 @@ void grpc_event_engine_shutdown(void) {
|
|
237
237
|
|
238
238
|
bool grpc_event_engine_can_track_errors(void) {
|
239
239
|
/* Only track errors if platform supports errqueue. */
|
240
|
-
|
241
|
-
return g_event_engine->can_track_err;
|
242
|
-
}
|
243
|
-
return false;
|
240
|
+
return grpc_core::KernelSupportsErrqueue() && g_event_engine->can_track_err;
|
244
241
|
}
|
245
242
|
|
246
243
|
bool grpc_event_engine_run_in_background(void) {
|
@@ -204,8 +204,6 @@ class ExecCtx {
|
|
204
204
|
/** Gets pointer to current exec_ctx. */
|
205
205
|
static ExecCtx* Get() { return exec_ctx_; }
|
206
206
|
|
207
|
-
static void Set(ExecCtx* exec_ctx) { exec_ctx_ = exec_ctx; }
|
208
|
-
|
209
207
|
static void Run(const DebugLocation& location, grpc_closure* closure,
|
210
208
|
grpc_error_handle error);
|
211
209
|
|
@@ -220,6 +218,7 @@ class ExecCtx {
|
|
220
218
|
|
221
219
|
private:
|
222
220
|
/** Set exec_ctx_ to exec_ctx. */
|
221
|
+
static void Set(ExecCtx* exec_ctx) { exec_ctx_ = exec_ctx; }
|
223
222
|
|
224
223
|
grpc_closure_list closure_list_ = GRPC_CLOSURE_LIST_INIT;
|
225
224
|
CombinerData combiner_data_ = {nullptr, nullptr};
|
@@ -1,20 +1,16 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
* See the License for the specific language governing permissions and
|
15
|
-
* limitations under the License.
|
16
|
-
*
|
17
|
-
*/
|
1
|
+
// Copyright 2018 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.
|
18
14
|
|
19
15
|
#include <grpc/support/port_platform.h>
|
20
16
|
|
@@ -32,37 +28,32 @@
|
|
32
28
|
#include <sys/utsname.h>
|
33
29
|
|
34
30
|
namespace grpc_core {
|
35
|
-
static bool errqueue_supported = false;
|
36
31
|
|
37
|
-
bool
|
38
|
-
|
39
|
-
void grpc_errqueue_init() {
|
40
|
-
/* Both-compile time and run-time linux kernel versions should be at least 4.0.0
|
41
|
-
*/
|
32
|
+
bool KernelSupportsErrqueue() {
|
33
|
+
static const bool errqueue_supported = []() {
|
42
34
|
#ifdef GRPC_LINUX_ERRQUEUE
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
35
|
+
// Both-compile time and run-time linux kernel versions should be at
|
36
|
+
// least 4.0.0
|
37
|
+
struct utsname buffer;
|
38
|
+
if (uname(&buffer) != 0) {
|
39
|
+
gpr_log(GPR_ERROR, "uname: %s", strerror(errno));
|
40
|
+
return false;
|
41
|
+
}
|
42
|
+
char* release = buffer.release;
|
43
|
+
if (release == nullptr) {
|
44
|
+
return false;
|
45
|
+
}
|
46
|
+
|
47
|
+
if (strtol(release, nullptr, 10) >= 4) {
|
48
|
+
return true;
|
49
|
+
} else {
|
50
|
+
gpr_log(GPR_DEBUG, "ERRQUEUE support not enabled");
|
51
|
+
}
|
52
|
+
#endif // GRPC_LINUX_ERRQUEUE
|
53
|
+
return false;
|
54
|
+
}();
|
55
|
+
return errqueue_supported;
|
59
56
|
}
|
60
|
-
}
|
61
|
-
|
62
|
-
#else
|
63
|
-
|
64
|
-
namespace grpc_core {
|
65
|
-
void grpc_errqueue_init() {}
|
66
|
-
} /* namespace grpc_core */
|
57
|
+
} // namespace grpc_core
|
67
58
|
|
68
|
-
#endif
|
59
|
+
#endif // GRPC_POSIX_SOCKET_TCP
|