grpc 1.26.0 → 1.30.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 +7860 -11139
- data/etc/roots.pem +44 -0
- data/include/grpc/grpc.h +2 -2
- data/include/grpc/grpc_security.h +59 -24
- data/include/grpc/grpc_security_constants.h +28 -0
- data/include/grpc/impl/codegen/grpc_types.h +38 -21
- data/include/grpc/impl/codegen/port_platform.h +14 -3
- data/include/grpc/impl/codegen/sync.h +5 -3
- data/include/grpc/impl/codegen/sync_abseil.h +36 -0
- data/include/grpc/module.modulemap +25 -37
- data/include/grpc/support/sync_abseil.h +26 -0
- data/src/core/ext/filters/client_channel/backend_metric.cc +7 -4
- data/src/core/ext/filters/client_channel/client_channel.cc +273 -264
- data/src/core/ext/filters/client_channel/client_channel_channelz.cc +31 -47
- data/src/core/ext/filters/client_channel/client_channel_channelz.h +1 -3
- data/src/core/ext/filters/client_channel/client_channel_plugin.cc +3 -2
- data/src/core/ext/filters/client_channel/health/health_check_client.cc +7 -22
- data/src/core/ext/filters/client_channel/health/health_check_client.h +3 -3
- data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +1 -1
- data/src/core/ext/filters/client_channel/http_proxy.cc +25 -15
- data/src/core/ext/filters/client_channel/lb_policy.cc +20 -18
- data/src/core/ext/filters/client_channel/lb_policy.h +42 -33
- data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +83 -0
- data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +99 -0
- data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +297 -0
- data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +83 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +423 -627
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +89 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +40 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +11 -9
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +3 -2
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +88 -121
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +28 -57
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +18 -21
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +871 -0
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +10 -14
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +5 -11
- data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +734 -0
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +150 -101
- data/src/core/ext/filters/client_channel/lb_policy/xds/eds.cc +938 -0
- data/src/core/ext/filters/client_channel/lb_policy/xds/lrs.cc +528 -0
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +1 -2
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_routing.cc +834 -0
- data/src/core/ext/filters/client_channel/lb_policy_factory.h +3 -3
- data/src/core/ext/filters/client_channel/lb_policy_registry.cc +49 -77
- data/src/core/ext/filters/client_channel/lb_policy_registry.h +1 -1
- data/src/core/ext/filters/client_channel/local_subchannel_pool.h +2 -1
- data/src/core/ext/filters/client_channel/parse_address.cc +22 -21
- data/src/core/ext/filters/client_channel/resolver.cc +5 -8
- data/src/core/ext/filters/client_channel/resolver.h +12 -14
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +129 -128
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc +35 -35
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +8 -7
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +17 -21
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +5 -5
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +72 -117
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +186 -135
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +5 -3
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc +7 -4
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +42 -45
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +94 -103
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +0 -4
- data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +5 -5
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +61 -10
- data/src/core/ext/filters/client_channel/resolver_factory.h +2 -2
- data/src/core/ext/filters/client_channel/resolver_registry.cc +6 -3
- data/src/core/ext/filters/client_channel/resolver_registry.h +8 -8
- data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +242 -300
- data/src/core/ext/filters/client_channel/resolver_result_parsing.h +21 -18
- data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +56 -206
- data/src/core/ext/filters/client_channel/resolving_lb_policy.h +11 -14
- data/src/core/ext/filters/client_channel/server_address.cc +6 -9
- data/src/core/ext/filters/client_channel/server_address.h +6 -12
- data/src/core/ext/filters/client_channel/service_config.cc +144 -253
- data/src/core/ext/filters/client_channel/service_config.h +32 -109
- data/src/core/ext/filters/client_channel/service_config_call_data.h +68 -0
- data/src/core/ext/filters/client_channel/service_config_parser.cc +87 -0
- data/src/core/ext/filters/client_channel/service_config_parser.h +89 -0
- data/src/core/ext/filters/client_channel/subchannel.cc +54 -24
- data/src/core/ext/filters/client_channel/subchannel.h +35 -11
- data/src/core/ext/filters/client_channel/xds/xds_api.cc +1556 -232
- data/src/core/ext/filters/client_channel/xds/xds_api.h +213 -114
- data/src/core/ext/filters/client_channel/xds/xds_bootstrap.cc +237 -345
- data/src/core/ext/filters/client_channel/xds/xds_bootstrap.h +34 -46
- data/src/core/ext/filters/client_channel/xds/xds_channel.h +3 -1
- data/src/core/ext/filters/client_channel/xds/xds_channel_secure.cc +18 -11
- data/src/core/ext/filters/client_channel/xds/xds_client.cc +1326 -399
- data/src/core/ext/filters/client_channel/xds/xds_client.h +124 -41
- data/src/core/ext/filters/client_channel/xds/xds_client_stats.cc +59 -138
- data/src/core/ext/filters/client_channel/xds/xds_client_stats.h +133 -154
- data/src/core/ext/filters/http/client/http_client_filter.cc +23 -28
- data/src/core/ext/filters/http/client_authority_filter.cc +4 -4
- data/src/core/ext/filters/http/http_filters_plugin.cc +27 -12
- data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +258 -221
- data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +358 -0
- data/src/core/ext/filters/http/message_compress/message_decompress_filter.h +29 -0
- data/src/core/ext/filters/message_size/message_size_filter.cc +38 -44
- data/src/core/ext/filters/message_size/message_size_filter.h +5 -5
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +7 -10
- data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +4 -6
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +28 -29
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +1 -0
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +3 -3
- data/src/core/ext/transport/chttp2/transport/frame_goaway.h +2 -3
- data/src/core/ext/transport/chttp2/transport/frame_ping.h +2 -3
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +2 -3
- data/src/core/ext/transport/chttp2/transport/frame_settings.h +2 -3
- data/src/core/ext/transport/chttp2/transport/frame_window_update.h +2 -3
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +29 -16
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +2 -3
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +2 -3
- data/src/core/ext/transport/chttp2/transport/hpack_table.h +2 -2
- data/src/core/ext/transport/chttp2/transport/http2_settings.h +4 -5
- data/src/core/ext/transport/chttp2/transport/huffsyms.h +2 -3
- data/src/core/ext/transport/chttp2/transport/internal.h +14 -21
- data/src/core/ext/transport/chttp2/transport/stream_map.h +2 -3
- data/src/core/ext/transport/chttp2/transport/writing.cc +16 -9
- data/src/core/ext/transport/inproc/inproc_transport.cc +41 -42
- data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.c +17 -0
- data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h +30 -0
- data/src/core/ext/upb-generated/envoy/annotations/resource.upb.c +27 -0
- data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +54 -0
- data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.c +5 -205
- data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.h +5 -788
- data/src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.c +114 -0
- data/src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.h +418 -0
- data/src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.c +72 -0
- data/src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.h +197 -0
- data/src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.c +105 -0
- data/src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.h +378 -0
- data/src/core/ext/upb-generated/envoy/api/v2/cds.upb.c +5 -362
- data/src/core/ext/upb-generated/envoy/api/v2/cds.upb.h +14 -1337
- data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.c +403 -0
- data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.h +1447 -0
- data/src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.c +30 -8
- data/src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.h +60 -0
- data/src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.c +2 -0
- data/src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.c +2 -0
- data/src/core/ext/upb-generated/envoy/api/v2/core/address.upb.c +7 -4
- data/src/core/ext/upb-generated/envoy/api/v2/core/address.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.c +35 -0
- data/src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.h +78 -0
- data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.c +87 -23
- data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.h +262 -62
- data/src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.c +20 -15
- data/src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.h +46 -32
- data/src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.c +34 -0
- data/src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.h +72 -0
- data/src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.c +27 -4
- data/src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.h +70 -0
- data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.c +46 -25
- data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.h +98 -25
- data/src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.c +2 -0
- data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.c +77 -21
- data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.h +201 -4
- data/src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.c +34 -0
- data/src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.h +89 -0
- data/src/core/ext/upb-generated/envoy/api/v2/discovery.upb.c +2 -0
- data/src/core/ext/upb-generated/envoy/api/v2/eds.upb.c +8 -68
- data/src/core/ext/upb-generated/envoy/api/v2/eds.upb.h +14 -201
- data/src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.c +92 -0
- data/src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.h +240 -0
- data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.c +2 -71
- data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.h +3 -228
- data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.c +91 -0
- data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.h +266 -0
- data/src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.c +2 -0
- data/src/core/ext/upb-generated/envoy/api/v2/lds.upb.c +31 -0
- data/src/core/ext/upb-generated/envoy/api/v2/lds.upb.h +53 -0
- data/src/core/ext/upb-generated/envoy/api/v2/listener.upb.c +109 -0
- data/src/core/ext/upb-generated/envoy/api/v2/listener.upb.h +399 -0
- data/src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.c +18 -0
- data/src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.h +33 -0
- data/src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.c +145 -0
- data/src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.h +527 -0
- data/src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.c +43 -0
- data/src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.h +112 -0
- data/src/core/ext/upb-generated/envoy/api/v2/rds.upb.c +30 -0
- data/src/core/ext/upb-generated/envoy/api/v2/rds.upb.h +53 -0
- data/src/core/ext/upb-generated/envoy/api/v2/route.upb.c +63 -0
- data/src/core/ext/upb-generated/envoy/api/v2/route.upb.h +199 -0
- data/src/core/ext/upb-generated/envoy/api/v2/route/route.upb.c +18 -0
- data/src/core/ext/upb-generated/envoy/api/v2/route/route.upb.h +33 -0
- data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.c +815 -0
- data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.h +3032 -0
- data/src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.c +59 -0
- data/src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.h +134 -0
- data/src/core/ext/upb-generated/envoy/api/v2/srds.upb.c +28 -0
- data/src/core/ext/upb-generated/envoy/api/v2/srds.upb.h +53 -0
- data/src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.c +228 -0
- data/src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.h +725 -0
- data/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.c +316 -0
- data/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.h +1132 -0
- data/src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.c +33 -0
- data/src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.h +65 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.c +51 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.h +125 -0
- data/src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.c +4 -2
- data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.h +4 -0
- data/src/core/ext/upb-generated/envoy/type/http.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/regex.upb.c +63 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/regex.upb.h +144 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/string.upb.c +53 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/string.upb.h +133 -0
- data/src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.c +88 -0
- data/src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.h +258 -0
- data/src/core/ext/upb-generated/envoy/type/percent.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/type/range.upb.c +12 -0
- data/src/core/ext/upb-generated/envoy/type/range.upb.h +27 -0
- data/src/core/ext/upb-generated/envoy/type/semantic_version.upb.c +29 -0
- data/src/core/ext/upb-generated/envoy/type/semantic_version.upb.h +62 -0
- data/src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.c +89 -0
- data/src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.h +249 -0
- data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +9 -8
- data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +30 -24
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +30 -27
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +64 -52
- data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c +13 -5
- data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +34 -0
- data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.c +48 -0
- data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +104 -0
- data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.c +17 -0
- data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h +30 -0
- data/src/core/ext/upb-generated/udpa/annotations/status.upb.c +28 -0
- data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +65 -0
- data/src/core/ext/upb-generated/validate/validate.upb.c +44 -39
- data/src/core/ext/upb-generated/validate/validate.upb.h +155 -119
- data/src/core/lib/channel/channel_args.cc +15 -14
- data/src/core/lib/channel/channel_args.h +3 -1
- data/src/core/lib/channel/channel_stack.h +20 -13
- data/src/core/lib/channel/channel_trace.cc +32 -41
- data/src/core/lib/channel/channel_trace.h +3 -3
- data/src/core/lib/channel/channelz.cc +163 -254
- data/src/core/lib/channel/channelz.h +20 -12
- data/src/core/lib/channel/channelz_registry.cc +52 -77
- data/src/core/lib/channel/channelz_registry.h +4 -4
- data/src/core/lib/channel/connected_channel.cc +7 -5
- data/src/core/lib/channel/context.h +1 -1
- data/src/core/lib/channel/handshaker.cc +11 -13
- data/src/core/lib/channel/handshaker.h +4 -2
- data/src/core/lib/channel/handshaker_registry.cc +5 -17
- data/src/core/lib/channel/status_util.cc +2 -3
- data/src/core/lib/compression/message_compress.cc +5 -1
- data/src/core/lib/debug/stats.cc +21 -27
- data/src/core/lib/debug/stats.h +3 -1
- data/src/core/lib/gpr/spinlock.h +2 -3
- data/src/core/lib/gpr/string.cc +2 -26
- data/src/core/lib/gpr/string.h +0 -16
- data/src/core/lib/gpr/sync_abseil.cc +116 -0
- data/src/core/lib/gpr/sync_posix.cc +8 -5
- data/src/core/lib/gpr/sync_windows.cc +4 -2
- data/src/core/lib/gpr/time.cc +4 -0
- data/src/core/lib/gpr/time_posix.cc +1 -1
- data/src/core/lib/gpr/time_precise.cc +1 -1
- data/src/core/lib/gprpp/atomic.h +6 -6
- data/src/core/lib/gprpp/fork.cc +1 -1
- data/src/core/lib/gprpp/host_port.cc +30 -36
- data/src/core/lib/gprpp/host_port.h +14 -17
- data/src/core/lib/gprpp/map.h +5 -11
- data/src/core/lib/gprpp/memory.h +2 -6
- data/src/core/lib/gprpp/ref_counted_ptr.h +5 -0
- data/src/core/lib/gprpp/sync.h +9 -0
- data/src/core/lib/http/format_request.cc +46 -65
- data/src/core/lib/http/httpcli.cc +2 -3
- data/src/core/lib/http/httpcli.h +2 -3
- data/src/core/lib/http/httpcli_security_connector.cc +5 -5
- data/src/core/lib/http/parser.h +2 -3
- data/src/core/lib/iomgr/buffer_list.cc +36 -35
- data/src/core/lib/iomgr/buffer_list.h +22 -21
- data/src/core/lib/iomgr/call_combiner.h +3 -2
- data/src/core/lib/iomgr/cfstream_handle.cc +3 -2
- data/src/core/lib/iomgr/closure.h +2 -3
- data/src/core/lib/iomgr/dualstack_socket_posix.cc +47 -0
- data/src/core/lib/iomgr/endpoint_cfstream.cc +2 -3
- data/src/core/lib/iomgr/endpoint_pair.h +2 -3
- data/src/core/lib/iomgr/error.cc +6 -9
- data/src/core/lib/iomgr/error.h +4 -5
- data/src/core/lib/iomgr/ev_apple.cc +356 -0
- data/src/core/lib/iomgr/ev_apple.h +43 -0
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +20 -23
- data/src/core/lib/iomgr/ev_epollex_linux.cc +14 -7
- data/src/core/lib/iomgr/ev_poll_posix.cc +3 -3
- data/src/core/lib/iomgr/ev_posix.cc +2 -3
- data/src/core/lib/iomgr/exec_ctx.h +14 -2
- data/src/core/lib/iomgr/executor.cc +1 -1
- data/src/core/lib/iomgr/fork_posix.cc +4 -0
- data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +84 -20
- data/src/core/lib/iomgr/load_file.cc +1 -0
- data/src/core/lib/iomgr/poller/eventmanager_libuv.cc +87 -0
- data/src/core/lib/iomgr/poller/eventmanager_libuv.h +88 -0
- data/src/core/lib/iomgr/pollset_set_custom.cc +10 -10
- data/src/core/lib/iomgr/pollset_uv.h +32 -0
- data/src/core/lib/iomgr/port.h +1 -0
- data/src/core/lib/iomgr/python_util.h +46 -0
- data/src/core/lib/iomgr/resolve_address.h +4 -6
- data/src/core/lib/iomgr/resolve_address_custom.cc +29 -39
- data/src/core/lib/iomgr/resolve_address_custom.h +4 -2
- data/src/core/lib/iomgr/resolve_address_posix.cc +10 -11
- data/src/core/lib/iomgr/resolve_address_windows.cc +8 -17
- data/src/core/lib/iomgr/resource_quota.cc +4 -6
- data/src/core/lib/iomgr/sockaddr_utils.cc +23 -29
- data/src/core/lib/iomgr/sockaddr_utils.h +9 -14
- data/src/core/lib/iomgr/socket_factory_posix.h +2 -3
- data/src/core/lib/iomgr/socket_mutator.h +2 -3
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +21 -26
- data/src/core/lib/iomgr/socket_utils_posix.h +15 -0
- data/src/core/lib/iomgr/tcp_client_cfstream.cc +5 -7
- data/src/core/lib/iomgr/tcp_client_posix.cc +25 -22
- data/src/core/lib/iomgr/tcp_client_posix.h +6 -6
- data/src/core/lib/iomgr/tcp_client_windows.cc +2 -3
- data/src/core/lib/iomgr/tcp_custom.cc +2 -3
- data/src/core/lib/iomgr/tcp_custom.h +3 -0
- data/src/core/lib/iomgr/tcp_posix.cc +608 -56
- data/src/core/lib/iomgr/tcp_server_custom.cc +20 -11
- data/src/core/lib/iomgr/tcp_server_posix.cc +5 -4
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +13 -4
- data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +8 -11
- data/src/core/lib/iomgr/tcp_uv.cc +3 -2
- data/src/core/lib/iomgr/time_averaged_stats.h +2 -3
- data/src/core/lib/iomgr/timer_generic.cc +2 -3
- data/src/core/lib/iomgr/timer_generic.h +39 -0
- data/src/core/lib/iomgr/timer_heap.h +2 -3
- data/src/core/lib/iomgr/udp_server.cc +9 -14
- data/src/core/lib/iomgr/work_serializer.cc +155 -0
- data/src/core/lib/iomgr/work_serializer.h +65 -0
- data/src/core/lib/json/json.h +209 -68
- data/src/core/lib/json/json_reader.cc +511 -319
- data/src/core/lib/json/json_writer.cc +202 -110
- data/src/core/lib/security/credentials/alts/check_gcp_environment.cc +1 -1
- data/src/core/lib/security/credentials/composite/composite_credentials.cc +19 -0
- data/src/core/lib/security/credentials/composite/composite_credentials.h +11 -4
- data/src/core/lib/security/credentials/credentials.cc +0 -84
- data/src/core/lib/security/credentials/credentials.h +18 -60
- data/src/core/lib/security/credentials/fake/fake_credentials.h +6 -1
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +9 -12
- data/src/core/lib/security/credentials/iam/iam_credentials.cc +8 -6
- data/src/core/lib/security/credentials/iam/iam_credentials.h +4 -0
- data/src/core/lib/security/credentials/jwt/json_token.cc +26 -56
- data/src/core/lib/security/credentials/jwt/json_token.h +4 -6
- data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +8 -18
- data/src/core/lib/security/credentials/jwt/jwt_credentials.h +12 -0
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +151 -168
- data/src/core/lib/security/credentials/jwt/jwt_verifier.h +4 -6
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +92 -61
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +10 -4
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +19 -4
- data/src/core/lib/security/credentials/plugin/plugin_credentials.h +4 -1
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +43 -13
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +47 -11
- data/src/core/lib/security/credentials/tls/tls_credentials.cc +128 -0
- data/src/core/lib/security/credentials/tls/tls_credentials.h +62 -0
- data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +34 -6
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +29 -9
- data/src/core/lib/security/security_connector/load_system_roots_fallback.cc +2 -2
- data/src/core/lib/security/security_connector/load_system_roots_linux.cc +5 -4
- data/src/core/lib/security/security_connector/local/local_security_connector.cc +32 -7
- data/src/core/lib/security/security_connector/security_connector.h +1 -1
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +20 -37
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +4 -6
- data/src/core/lib/security/security_connector/ssl_utils.cc +107 -16
- data/src/core/lib/security/security_connector/ssl_utils.h +24 -11
- data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +603 -0
- data/src/core/lib/security/security_connector/tls/tls_security_connector.h +183 -0
- data/src/core/lib/security/transport/client_auth_filter.cc +34 -2
- data/src/core/lib/security/transport/security_handshaker.cc +2 -2
- data/src/core/lib/security/util/json_util.cc +22 -15
- data/src/core/lib/security/util/json_util.h +2 -2
- data/src/core/lib/slice/slice_intern.cc +2 -3
- data/src/core/lib/slice/slice_internal.h +14 -0
- data/src/core/lib/slice/slice_utils.h +9 -0
- data/src/core/lib/surface/byte_buffer_reader.cc +2 -47
- data/src/core/lib/surface/call.cc +2 -3
- data/src/core/lib/surface/call_log_batch.cc +50 -58
- data/src/core/lib/surface/channel.cc +53 -31
- data/src/core/lib/surface/channel.h +35 -4
- data/src/core/lib/surface/channel_ping.cc +2 -3
- data/src/core/lib/surface/completion_queue.cc +55 -34
- data/src/core/lib/surface/event_string.cc +18 -25
- data/src/core/lib/surface/event_string.h +3 -1
- data/src/core/lib/surface/init_secure.cc +1 -4
- data/src/core/lib/surface/server.cc +570 -369
- data/src/core/lib/surface/server.h +32 -0
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/byte_stream.h +7 -2
- data/src/core/lib/transport/connectivity_state.cc +7 -6
- data/src/core/lib/transport/connectivity_state.h +5 -3
- data/src/core/lib/transport/metadata.cc +3 -3
- data/src/core/lib/transport/metadata_batch.h +2 -3
- data/src/core/lib/transport/static_metadata.h +1 -1
- data/src/core/lib/transport/status_conversion.cc +6 -14
- data/src/core/lib/transport/transport.cc +2 -3
- data/src/core/lib/transport/transport.h +3 -2
- data/src/core/lib/transport/transport_op_string.cc +61 -102
- data/src/core/lib/uri/uri_parser.h +2 -3
- data/src/core/plugin_registry/grpc_plugin_registry.cc +20 -4
- data/src/core/tsi/alts/crypt/aes_gcm.cc +0 -2
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +9 -2
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +8 -4
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +44 -4
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +10 -2
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.h +2 -3
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +3 -3
- data/src/core/tsi/fake_transport_security.cc +17 -18
- data/src/core/tsi/fake_transport_security.h +2 -0
- data/src/core/tsi/ssl/session_cache/ssl_session.h +0 -2
- data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +1 -1
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +0 -2
- data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +1 -1
- data/src/core/tsi/ssl_transport_security.cc +197 -47
- data/src/core/tsi/ssl_transport_security.h +23 -9
- data/src/core/tsi/ssl_types.h +0 -2
- data/src/core/tsi/transport_security.cc +13 -0
- data/src/core/tsi/transport_security.h +6 -9
- data/src/core/tsi/transport_security_grpc.cc +2 -2
- data/src/core/tsi/transport_security_grpc.h +4 -5
- data/src/core/tsi/transport_security_interface.h +15 -3
- data/src/ruby/bin/math_pb.rb +5 -5
- data/src/ruby/ext/grpc/rb_call.c +9 -1
- data/src/ruby/ext/grpc/rb_call_credentials.c +4 -1
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +2 -0
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +4 -1
- data/src/ruby/lib/grpc/errors.rb +103 -42
- data/src/ruby/lib/grpc/generic/active_call.rb +2 -3
- data/src/ruby/lib/grpc/generic/interceptors.rb +4 -4
- data/src/ruby/lib/grpc/generic/rpc_server.rb +9 -10
- data/src/ruby/lib/grpc/generic/service.rb +5 -4
- data/src/ruby/lib/grpc/structs.rb +1 -1
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/pb/generate_proto_ruby.sh +5 -3
- data/src/ruby/pb/grpc/health/v1/health_pb.rb +3 -3
- data/src/ruby/pb/src/proto/grpc/testing/empty_pb.rb +1 -1
- data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +34 -13
- data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +16 -0
- data/src/ruby/spec/debug_message_spec.rb +134 -0
- data/src/ruby/spec/generic/service_spec.rb +2 -0
- data/src/ruby/spec/pb/codegen/grpc/testing/package_options_ruby_style.proto +5 -0
- data/src/ruby/spec/pb/codegen/package_option_spec.rb +2 -0
- data/src/ruby/spec/testdata/ca.pem +18 -13
- data/src/ruby/spec/testdata/client.key +26 -14
- data/src/ruby/spec/testdata/client.pem +18 -12
- data/src/ruby/spec/testdata/server1.key +26 -14
- data/src/ruby/spec/testdata/server1.pem +20 -14
- data/third_party/abseil-cpp/absl/algorithm/algorithm.h +159 -0
- data/third_party/abseil-cpp/absl/base/attributes.h +621 -0
- data/third_party/abseil-cpp/absl/base/call_once.h +226 -0
- data/third_party/abseil-cpp/absl/base/casts.h +184 -0
- data/third_party/abseil-cpp/absl/base/config.h +671 -0
- data/third_party/abseil-cpp/absl/base/const_init.h +76 -0
- data/third_party/abseil-cpp/absl/base/dynamic_annotations.cc +129 -0
- data/third_party/abseil-cpp/absl/base/dynamic_annotations.h +389 -0
- data/third_party/abseil-cpp/absl/base/internal/atomic_hook.h +200 -0
- data/third_party/abseil-cpp/absl/base/internal/bits.h +218 -0
- data/third_party/abseil-cpp/absl/base/internal/cycleclock.cc +107 -0
- data/third_party/abseil-cpp/absl/base/internal/cycleclock.h +94 -0
- data/third_party/abseil-cpp/absl/base/internal/endian.h +266 -0
- data/third_party/abseil-cpp/absl/base/internal/errno_saver.h +43 -0
- data/third_party/abseil-cpp/absl/base/internal/hide_ptr.h +51 -0
- data/third_party/abseil-cpp/absl/base/internal/identity.h +37 -0
- data/third_party/abseil-cpp/absl/base/internal/inline_variable.h +107 -0
- data/third_party/abseil-cpp/absl/base/internal/invoke.h +187 -0
- data/third_party/abseil-cpp/absl/base/internal/low_level_scheduling.h +107 -0
- data/third_party/abseil-cpp/absl/base/internal/per_thread_tls.h +52 -0
- data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +240 -0
- data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +183 -0
- data/third_party/abseil-cpp/absl/base/internal/scheduling_mode.h +58 -0
- data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +233 -0
- data/third_party/abseil-cpp/absl/base/internal/spinlock.h +243 -0
- data/third_party/abseil-cpp/absl/base/internal/spinlock_akaros.inc +35 -0
- data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +66 -0
- data/third_party/abseil-cpp/absl/base/internal/spinlock_posix.inc +46 -0
- data/third_party/abseil-cpp/absl/base/internal/spinlock_wait.cc +81 -0
- data/third_party/abseil-cpp/absl/base/internal/spinlock_wait.h +93 -0
- data/third_party/abseil-cpp/absl/base/internal/spinlock_win32.inc +37 -0
- data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +416 -0
- data/third_party/abseil-cpp/absl/base/internal/sysinfo.h +66 -0
- data/third_party/abseil-cpp/absl/base/internal/thread_annotations.h +271 -0
- data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +152 -0
- data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +259 -0
- data/third_party/abseil-cpp/absl/base/internal/throw_delegate.cc +108 -0
- data/third_party/abseil-cpp/absl/base/internal/throw_delegate.h +75 -0
- data/third_party/abseil-cpp/absl/base/internal/tsan_mutex_interface.h +66 -0
- data/third_party/abseil-cpp/absl/base/internal/unaligned_access.h +158 -0
- data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +140 -0
- data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +124 -0
- data/third_party/abseil-cpp/absl/base/log_severity.cc +27 -0
- data/third_party/abseil-cpp/absl/base/log_severity.h +121 -0
- data/third_party/abseil-cpp/absl/base/macros.h +220 -0
- data/third_party/abseil-cpp/absl/base/optimization.h +181 -0
- data/third_party/abseil-cpp/absl/base/options.h +211 -0
- data/third_party/abseil-cpp/absl/base/policy_checks.h +111 -0
- data/third_party/abseil-cpp/absl/base/port.h +26 -0
- data/third_party/abseil-cpp/absl/base/thread_annotations.h +280 -0
- data/third_party/abseil-cpp/absl/container/inlined_vector.h +848 -0
- data/third_party/abseil-cpp/absl/container/internal/compressed_tuple.h +265 -0
- data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +892 -0
- data/third_party/abseil-cpp/absl/memory/memory.h +695 -0
- data/third_party/abseil-cpp/absl/meta/type_traits.h +759 -0
- data/third_party/abseil-cpp/absl/numeric/int128.cc +404 -0
- data/third_party/abseil-cpp/absl/numeric/int128.h +1091 -0
- data/third_party/abseil-cpp/absl/numeric/int128_have_intrinsic.inc +302 -0
- data/third_party/abseil-cpp/absl/numeric/int128_no_intrinsic.inc +308 -0
- data/third_party/abseil-cpp/absl/strings/ascii.cc +200 -0
- data/third_party/abseil-cpp/absl/strings/ascii.h +242 -0
- data/third_party/abseil-cpp/absl/strings/charconv.cc +984 -0
- data/third_party/abseil-cpp/absl/strings/charconv.h +119 -0
- data/third_party/abseil-cpp/absl/strings/escaping.cc +949 -0
- data/third_party/abseil-cpp/absl/strings/escaping.h +164 -0
- data/third_party/abseil-cpp/absl/strings/internal/char_map.h +156 -0
- data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.cc +359 -0
- data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.h +423 -0
- data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc +504 -0
- data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.h +99 -0
- data/third_party/abseil-cpp/absl/strings/internal/escaping.cc +180 -0
- data/third_party/abseil-cpp/absl/strings/internal/escaping.h +58 -0
- data/third_party/abseil-cpp/absl/strings/internal/memutil.cc +112 -0
- data/third_party/abseil-cpp/absl/strings/internal/memutil.h +148 -0
- data/third_party/abseil-cpp/absl/strings/internal/ostringstream.cc +36 -0
- data/third_party/abseil-cpp/absl/strings/internal/ostringstream.h +89 -0
- data/third_party/abseil-cpp/absl/strings/internal/resize_uninitialized.h +73 -0
- data/third_party/abseil-cpp/absl/strings/internal/stl_type_traits.h +248 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +388 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +432 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +245 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +209 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +326 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +51 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +415 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +493 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.h +23 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/output.cc +72 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/output.h +104 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc +334 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +333 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_join_internal.h +314 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +455 -0
- data/third_party/abseil-cpp/absl/strings/internal/utf8.cc +53 -0
- data/third_party/abseil-cpp/absl/strings/internal/utf8.h +50 -0
- data/third_party/abseil-cpp/absl/strings/match.cc +40 -0
- data/third_party/abseil-cpp/absl/strings/match.h +90 -0
- data/third_party/abseil-cpp/absl/strings/numbers.cc +965 -0
- data/third_party/abseil-cpp/absl/strings/numbers.h +266 -0
- data/third_party/abseil-cpp/absl/strings/str_cat.cc +246 -0
- data/third_party/abseil-cpp/absl/strings/str_cat.h +408 -0
- data/third_party/abseil-cpp/absl/strings/str_format.h +537 -0
- data/third_party/abseil-cpp/absl/strings/str_join.h +293 -0
- data/third_party/abseil-cpp/absl/strings/str_replace.cc +82 -0
- data/third_party/abseil-cpp/absl/strings/str_replace.h +219 -0
- data/third_party/abseil-cpp/absl/strings/str_split.cc +139 -0
- data/third_party/abseil-cpp/absl/strings/str_split.h +513 -0
- data/third_party/abseil-cpp/absl/strings/string_view.cc +235 -0
- data/third_party/abseil-cpp/absl/strings/string_view.h +622 -0
- data/third_party/abseil-cpp/absl/strings/strip.h +91 -0
- data/third_party/abseil-cpp/absl/strings/substitute.cc +171 -0
- data/third_party/abseil-cpp/absl/strings/substitute.h +693 -0
- data/third_party/abseil-cpp/absl/time/civil_time.cc +175 -0
- data/third_party/abseil-cpp/absl/time/civil_time.h +538 -0
- data/third_party/abseil-cpp/absl/time/clock.cc +569 -0
- data/third_party/abseil-cpp/absl/time/clock.h +74 -0
- data/third_party/abseil-cpp/absl/time/duration.cc +922 -0
- data/third_party/abseil-cpp/absl/time/format.cc +153 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time.h +332 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +622 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +384 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/zone_info_source.h +102 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/civil_time_detail.cc +94 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.cc +140 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.h +52 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +922 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.cc +45 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.h +76 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.cc +121 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.h +93 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc +958 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.h +138 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.cc +308 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.h +55 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +187 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_posix.cc +159 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_posix.h +132 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +122 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc +115 -0
- data/third_party/abseil-cpp/absl/time/internal/get_current_time_chrono.inc +31 -0
- data/third_party/abseil-cpp/absl/time/internal/get_current_time_posix.inc +24 -0
- data/third_party/abseil-cpp/absl/time/time.cc +499 -0
- data/third_party/abseil-cpp/absl/time/time.h +1584 -0
- data/third_party/abseil-cpp/absl/types/bad_optional_access.cc +48 -0
- data/third_party/abseil-cpp/absl/types/bad_optional_access.h +78 -0
- data/third_party/abseil-cpp/absl/types/internal/optional.h +396 -0
- data/third_party/abseil-cpp/absl/types/internal/span.h +128 -0
- data/third_party/abseil-cpp/absl/types/optional.h +776 -0
- data/third_party/abseil-cpp/absl/types/span.h +713 -0
- data/third_party/abseil-cpp/absl/utility/utility.h +350 -0
- data/third_party/boringssl-with-bazel/err_data.c +1439 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/a_bitstr.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/a_bool.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/a_d2i_fp.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/a_dup.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/a_enum.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/a_gentm.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/a_i2d_fp.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/a_int.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/a_mbstr.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/a_object.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/a_octet.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/a_print.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/a_strnid.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_time.c +212 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/a_type.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/a_utctm.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/a_utf8.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/asn1_lib.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/asn1_locl.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/asn1_par.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/asn_pack.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/f_enum.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/f_int.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/f_string.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/tasn_dec.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/tasn_enc.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/tasn_fre.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/tasn_new.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/tasn_typ.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/tasn_utl.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/time_support.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/base64/base64.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/bio/bio.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/bio/bio_mem.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/bio/connect.c +545 -0
- data/third_party/boringssl-with-bazel/src/crypto/bio/fd.c +279 -0
- data/third_party/boringssl-with-bazel/src/crypto/bio/file.c +317 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/bio/hexdump.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/bio/internal.h +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/bio/pair.c +488 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/bio/printf.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/bio/socket.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/bio/socket_helper.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/bn_extra/bn_asn1.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/bn_extra/convert.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/buf/buf.c +172 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/bytestring/asn1_compat.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/bytestring/ber.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbb.c +719 -0
- data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbs.c +688 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/bytestring/internal.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/bytestring/unicode.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/chacha/chacha.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/chacha/internal.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cipher_extra/cipher_extra.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/derive_key.c +152 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cipher_extra/e_aesccm.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cipher_extra/e_aesctrhmac.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_aesgcmsiv.c +891 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cipher_extra/e_chacha20poly1305.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cipher_extra/e_null.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cipher_extra/e_rc2.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cipher_extra/e_rc4.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cipher_extra/e_tls.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cipher_extra/internal.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cipher_extra/tls_cbc.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cmac/cmac.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/conf/conf.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/conf/conf_def.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/conf/internal.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cpu-aarch64-fuchsia.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cpu-aarch64-linux.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/cpu-arm-linux.c +220 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cpu-arm-linux.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cpu-arm.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/cpu-intel.c +291 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cpu-ppc64le.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/crypto.c +226 -0
- data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519.c +2159 -0
- data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519_tables.h +7872 -0
- data/third_party/boringssl-with-bazel/src/crypto/curve25519/internal.h +146 -0
- data/third_party/boringssl-with-bazel/src/crypto/curve25519/spake25519.c +539 -0
- data/third_party/boringssl-with-bazel/src/crypto/dh/check.c +217 -0
- data/third_party/boringssl-with-bazel/src/crypto/dh/dh.c +533 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/dh/dh_asn1.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/dh/params.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/digest_extra/digest_extra.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +980 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/dsa/dsa_asn1.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/ec_extra/ec_asn1.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/ec_extra/ec_derive.c +95 -0
- data/third_party/boringssl-with-bazel/src/crypto/ec_extra/hash_to_curve.c +425 -0
- data/third_party/boringssl-with-bazel/src/crypto/ec_extra/internal.h +78 -0
- data/third_party/boringssl-with-bazel/src/crypto/ecdh_extra/ecdh_extra.c +124 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/ecdsa_extra/ecdsa_asn1.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/engine/engine.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/err/err.c +850 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/err/internal.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/evp/digestsign.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/evp/evp.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/evp/evp_asn1.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/evp/evp_ctx.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/evp/internal.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/evp/p_dsa_asn1.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/evp/p_ec.c +286 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/evp/p_ec_asn1.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/evp/p_ed25519.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/evp/p_ed25519_asn1.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/evp/p_rsa.c +648 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/evp/p_rsa_asn1.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/evp/p_x25519.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/evp/p_x25519_asn1.c +248 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/evp/pbkdf.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/evp/print.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/evp/scrypt.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/evp/sign.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/ex_data.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/aes.c +108 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/aes_nohw.c +1282 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/internal.h +238 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/aes/key_wrap.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/mode_wrappers.c +106 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +263 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/add.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/asm/x86_64-gcc.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/bn.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/bytes.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/cmp.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/ctx.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/div.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/div_extra.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/exponentiation.c +1288 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/gcd.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/gcd_extra.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/generic.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +694 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/jacobi.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/montgomery.c +502 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/montgomery_inv.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/mul.c +749 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/prime.c +1068 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/random.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/rsaz_exp.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/rsaz_exp.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/shift.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/sqrt.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/cipher/aead.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/cipher/cipher.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_aes.c +1302 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/cipher/e_des.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/cipher/internal.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/delocate.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/des/des.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/des/internal.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/digest/digest.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digests.c +296 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/digest/internal.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/digest/md32_common.h +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +1252 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +465 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_montgomery.c +524 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/felem.c +100 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +775 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/oct.c +328 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p224-64.c +1178 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-x86_64-table.h +9497 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-x86_64.c +632 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/ec/p256-x86_64.h +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256.c +736 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256_table.h +297 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/scalar.c +175 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple.c +357 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple_mul.c +270 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/ec/util.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/wnaf.c +270 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdh/ecdh.c +122 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +328 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/fips_shared_support.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/hmac/hmac.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/is_fips.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/md4/md4.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/md5/internal.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/md5/md5.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/modes/cbc.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/modes/cfb.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/modes/ctr.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm.c +729 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm_nohw.c +304 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/internal.h +441 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/modes/ofb.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/modes/polyval.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/rand/ctrdrbg.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/fork_detect.c +137 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/fork_detect.h +49 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/getrandom_fillin.h +64 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/internal.h +163 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.c +378 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +391 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/blinding.c +243 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/internal.h +127 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/rsa/padding.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +898 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +1358 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/self_check/self_check.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/sha/internal.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/sha/sha1-altivec.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/sha/sha1.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/sha/sha256.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +544 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/tls/internal.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/tls/kdf.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/hkdf/hkdf.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/hrss/hrss.c +2100 -0
- data/third_party/boringssl-with-bazel/src/crypto/hrss/internal.h +61 -0
- data/third_party/boringssl-with-bazel/src/crypto/internal.h +834 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/lhash/lhash.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/mem.c +359 -0
- data/third_party/boringssl-with-bazel/src/crypto/obj/obj.c +549 -0
- data/third_party/boringssl-with-bazel/src/crypto/obj/obj_dat.h +11585 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/obj/obj_xref.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/pem/pem_all.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/pem/pem_info.c +360 -0
- data/third_party/boringssl-with-bazel/src/crypto/pem/pem_lib.c +777 -0
- data/third_party/boringssl-with-bazel/src/crypto/pem/pem_oth.c +87 -0
- data/third_party/boringssl-with-bazel/src/crypto/pem/pem_pk8.c +257 -0
- data/third_party/boringssl-with-bazel/src/crypto/pem/pem_pkey.c +218 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/pem/pem_x509.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/pem/pem_xaux.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/pkcs7/internal.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/pkcs7/pkcs7.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7_x509.c +385 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/pkcs8/internal.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/pkcs8/p5_pbev2.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/pkcs8/pkcs8.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/pkcs8/pkcs8_x509.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/poly1305/internal.h +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305.c +318 -0
- data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_arm.c +305 -0
- data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_vec.c +856 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/pool/internal.h +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/pool/pool.c +220 -0
- data/third_party/boringssl-with-bazel/src/crypto/rand_extra/deterministic.c +52 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/rand_extra/forkunsafe.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/rand_extra/fuchsia.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/rand_extra/rand_extra.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/rand_extra/windows.c +69 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/rc4/rc4.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/refcount_c11.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/refcount_lock.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/rsa_extra/rsa_asn1.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/rsa_extra/rsa_print.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/siphash/siphash.c +82 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/stack/stack.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/thread.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/thread_none.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/thread_pthread.c +210 -0
- data/third_party/boringssl-with-bazel/src/crypto/thread_win.c +260 -0
- data/third_party/boringssl-with-bazel/src/crypto/trust_token/internal.h +278 -0
- data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +1474 -0
- data/third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token.c +720 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/a_digest.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/a_sign.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/a_strex.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/a_verify.c +114 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/algorithm.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/asn1_gen.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/by_dir.c +458 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/by_file.c +275 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/charmap.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/i2d_pr.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/internal.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/rsa_pss.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/t_crl.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/t_req.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/t_x509.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/t_x509a.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/vpm_int.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x509.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x509_att.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c +476 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x509_d2.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x509_def.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x509_ext.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x509_lu.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_obj.c +198 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_r2x.c +116 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c +341 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +185 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_trs.c +326 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x509_txt.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x509_v3.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +2487 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vpm.c +671 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x509cset.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509name.c +389 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x509rset.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x509spki.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_algor.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_all.c +399 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_attrib.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_crl.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_exten.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_info.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_name.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_pkey.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_pubkey.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_req.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_sig.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_spki.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_val.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_x509.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_x509a.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/ext_dat.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/internal.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/pcy_cache.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/pcy_data.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/pcy_int.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/pcy_lib.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/pcy_map.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/pcy_node.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/pcy_tree.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_akey.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_akeya.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_alt.c +629 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_bcons.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_bitst.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_conf.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_cpols.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_crld.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_enum.c +100 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_extku.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_genn.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_ia5.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_info.c +218 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_int.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_lib.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_ncons.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_ocsp.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_pci.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_pcia.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_pcons.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_pku.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_pmaps.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_prn.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +843 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_skey.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_sxnet.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_utl.c +1395 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/aead.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/aes.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/arm_arch.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/asn1.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/asn1_mac.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/asn1t.h +0 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/base.h +575 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/base64.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/bio.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/blowfish.h +0 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/bn.h +1057 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/buf.h +137 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/buffer.h +0 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/bytestring.h +561 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/cast.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/chacha.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/cipher.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/cmac.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/conf.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/cpu.h +0 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +149 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/curve25519.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/des.h +0 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/dh.h +319 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/digest.h +331 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/dsa.h +457 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/dtls1.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/e_os2.h +0 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/ec.h +424 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/ec_key.h +372 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/ecdh.h +0 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h +205 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/engine.h +0 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/err.h +465 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +1050 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/ex_data.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/hkdf.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/hmac.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/hrss.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/is_boringssl.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/lhash.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/md4.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/md5.h +0 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/mem.h +175 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/nid.h +4259 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/obj.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/obj_mac.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/objects.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/opensslconf.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/opensslv.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/ossl_typ.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/pem.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/pkcs12.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/pkcs7.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/pkcs8.h +0 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/poly1305.h +49 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/pool.h +0 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/rand.h +111 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/rc4.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/ripemd.h +0 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +818 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/safestack.h +0 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/sha.h +294 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/siphash.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/span.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/srtp.h +0 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +5198 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/ssl3.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/stack.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/thread.h +0 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +632 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +291 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/type_check.h +0 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +1207 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/x509_vfy.h +681 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/x509v3.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/ssl/bio_ssl.cc +0 -0
- data/third_party/boringssl-with-bazel/src/ssl/d1_both.cc +837 -0
- data/third_party/boringssl-with-bazel/src/ssl/d1_lib.cc +268 -0
- data/third_party/boringssl-with-bazel/src/ssl/d1_pkt.cc +273 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/ssl/d1_srtp.cc +0 -0
- data/third_party/boringssl-with-bazel/src/ssl/dtls_method.cc +200 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/ssl/dtls_record.cc +0 -0
- data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +675 -0
- data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +703 -0
- data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +1890 -0
- data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +1805 -0
- data/third_party/boringssl-with-bazel/src/ssl/internal.h +3572 -0
- data/third_party/boringssl-with-bazel/src/ssl/s3_both.cc +724 -0
- data/third_party/boringssl-with-bazel/src/ssl/s3_lib.cc +221 -0
- data/third_party/boringssl-with-bazel/src/ssl/s3_pkt.cc +458 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/ssl/ssl_aead_ctx.cc +0 -0
- data/third_party/boringssl-with-bazel/src/ssl/ssl_asn1.cc +856 -0
- data/third_party/boringssl-with-bazel/src/ssl/ssl_buffer.cc +306 -0
- data/third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc +1019 -0
- data/third_party/boringssl-with-bazel/src/ssl/ssl_cipher.cc +1718 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/ssl/ssl_file.cc +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/ssl/ssl_key_share.cc +0 -0
- data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +3015 -0
- data/third_party/boringssl-with-bazel/src/ssl/ssl_privkey.cc +835 -0
- data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +1333 -0
- data/third_party/boringssl-with-bazel/src/ssl/ssl_stat.cc +230 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/ssl/ssl_transcript.cc +0 -0
- data/third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc +394 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/ssl/ssl_x509.cc +0 -0
- data/third_party/boringssl-with-bazel/src/ssl/t1_enc.cc +365 -0
- data/third_party/boringssl-with-bazel/src/ssl/t1_lib.cc +3870 -0
- data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +689 -0
- data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +1017 -0
- data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +513 -0
- data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +1096 -0
- data/third_party/boringssl-with-bazel/src/ssl/tls_method.cc +317 -0
- data/third_party/boringssl-with-bazel/src/ssl/tls_record.cc +703 -0
- data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_32.h +981 -0
- data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_64.h +619 -0
- data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_32.h +3147 -0
- data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_64.h +1226 -0
- data/third_party/upb/upb/decode.c +4 -0
- data/third_party/upb/upb/port.c +0 -1
- data/third_party/upb/upb/port_def.inc +1 -3
- data/third_party/upb/upb/table.c +2 -1
- metadata +758 -509
- data/src/boringssl/err_data.c +0 -1407
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds.cc +0 -1898
- data/src/core/lib/gprpp/inlined_vector.h +0 -246
- data/src/core/lib/gprpp/optional.h +0 -48
- data/src/core/lib/gprpp/string_view.h +0 -165
- data/src/core/lib/iomgr/logical_thread.cc +0 -103
- data/src/core/lib/iomgr/logical_thread.h +0 -52
- data/src/core/lib/json/json.cc +0 -94
- data/src/core/lib/json/json_common.h +0 -34
- data/src/core/lib/json/json_reader.h +0 -146
- data/src/core/lib/json/json_string.cc +0 -367
- data/src/core/lib/json/json_writer.h +0 -84
- data/src/core/lib/security/credentials/tls/spiffe_credentials.cc +0 -129
- data/src/core/lib/security/credentials/tls/spiffe_credentials.h +0 -62
- data/src/core/lib/security/security_connector/tls/spiffe_security_connector.cc +0 -541
- data/src/core/lib/security/security_connector/tls/spiffe_security_connector.h +0 -158
- data/src/core/tsi/grpc_shadow_boringssl.h +0 -3297
- data/third_party/boringssl/crypto/asn1/a_time.c +0 -213
- data/third_party/boringssl/crypto/bio/connect.c +0 -546
- data/third_party/boringssl/crypto/bio/fd.c +0 -280
- data/third_party/boringssl/crypto/bio/file.c +0 -318
- data/third_party/boringssl/crypto/bio/pair.c +0 -489
- data/third_party/boringssl/crypto/buf/buf.c +0 -231
- data/third_party/boringssl/crypto/bytestring/cbb.c +0 -680
- data/third_party/boringssl/crypto/bytestring/cbs.c +0 -631
- data/third_party/boringssl/crypto/cipher_extra/derive_key.c +0 -152
- data/third_party/boringssl/crypto/cipher_extra/e_aesgcmsiv.c +0 -883
- data/third_party/boringssl/crypto/cpu-arm-linux.c +0 -219
- data/third_party/boringssl/crypto/cpu-intel.c +0 -282
- data/third_party/boringssl/crypto/crypto.c +0 -215
- data/third_party/boringssl/crypto/curve25519/spake25519.c +0 -539
- data/third_party/boringssl/crypto/dh/check.c +0 -217
- data/third_party/boringssl/crypto/dh/dh.c +0 -519
- data/third_party/boringssl/crypto/dsa/dsa.c +0 -970
- data/third_party/boringssl/crypto/ec_extra/ec_derive.c +0 -96
- data/third_party/boringssl/crypto/ecdh_extra/ecdh_extra.c +0 -124
- data/third_party/boringssl/crypto/err/err.c +0 -849
- data/third_party/boringssl/crypto/evp/p_ec.c +0 -287
- data/third_party/boringssl/crypto/evp/p_rsa.c +0 -636
- data/third_party/boringssl/crypto/evp/p_x25519_asn1.c +0 -249
- data/third_party/boringssl/crypto/fipsmodule/aes/aes.c +0 -860
- data/third_party/boringssl/crypto/fipsmodule/aes/internal.h +0 -240
- data/third_party/boringssl/crypto/fipsmodule/aes/mode_wrappers.c +0 -108
- data/third_party/boringssl/crypto/fipsmodule/bcm.c +0 -260
- data/third_party/boringssl/crypto/fipsmodule/bn/exponentiation.c +0 -1288
- data/third_party/boringssl/crypto/fipsmodule/bn/internal.h +0 -691
- data/third_party/boringssl/crypto/fipsmodule/bn/montgomery.c +0 -502
- data/third_party/boringssl/crypto/fipsmodule/bn/mul.c +0 -873
- data/third_party/boringssl/crypto/fipsmodule/bn/prime.c +0 -1069
- data/third_party/boringssl/crypto/fipsmodule/cipher/e_aes.c +0 -1304
- data/third_party/boringssl/crypto/fipsmodule/digest/digests.c +0 -280
- data/third_party/boringssl/crypto/fipsmodule/ec/ec.c +0 -1080
- data/third_party/boringssl/crypto/fipsmodule/ec/ec_key.c +0 -479
- data/third_party/boringssl/crypto/fipsmodule/ec/ec_montgomery.c +0 -483
- data/third_party/boringssl/crypto/fipsmodule/ec/felem.c +0 -82
- data/third_party/boringssl/crypto/fipsmodule/ec/internal.h +0 -503
- data/third_party/boringssl/crypto/fipsmodule/ec/oct.c +0 -336
- data/third_party/boringssl/crypto/fipsmodule/ec/p224-64.c +0 -1187
- data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64-table.h +0 -9501
- data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64.c +0 -651
- data/third_party/boringssl/crypto/fipsmodule/ec/scalar.c +0 -96
- data/third_party/boringssl/crypto/fipsmodule/ec/simple.c +0 -380
- data/third_party/boringssl/crypto/fipsmodule/ec/simple_mul.c +0 -84
- data/third_party/boringssl/crypto/fipsmodule/ec/wnaf.c +0 -227
- data/third_party/boringssl/crypto/fipsmodule/ecdh/ecdh.c +0 -122
- data/third_party/boringssl/crypto/fipsmodule/ecdsa/ecdsa.c +0 -313
- data/third_party/boringssl/crypto/fipsmodule/modes/gcm.c +0 -877
- data/third_party/boringssl/crypto/fipsmodule/modes/internal.h +0 -451
- data/third_party/boringssl/crypto/fipsmodule/rand/internal.h +0 -127
- data/third_party/boringssl/crypto/fipsmodule/rand/rand.c +0 -363
- data/third_party/boringssl/crypto/fipsmodule/rand/urandom.c +0 -481
- data/third_party/boringssl/crypto/fipsmodule/rsa/blinding.c +0 -239
- data/third_party/boringssl/crypto/fipsmodule/rsa/internal.h +0 -126
- data/third_party/boringssl/crypto/fipsmodule/rsa/rsa.c +0 -879
- data/third_party/boringssl/crypto/fipsmodule/rsa/rsa_impl.c +0 -1335
- data/third_party/boringssl/crypto/fipsmodule/sha/sha512.c +0 -535
- data/third_party/boringssl/crypto/hrss/hrss.c +0 -2201
- data/third_party/boringssl/crypto/hrss/internal.h +0 -62
- data/third_party/boringssl/crypto/internal.h +0 -814
- data/third_party/boringssl/crypto/mem.c +0 -272
- data/third_party/boringssl/crypto/obj/obj.c +0 -554
- data/third_party/boringssl/crypto/obj/obj_dat.h +0 -11550
- data/third_party/boringssl/crypto/pem/pem_info.c +0 -361
- data/third_party/boringssl/crypto/pem/pem_lib.c +0 -777
- data/third_party/boringssl/crypto/pem/pem_oth.c +0 -88
- data/third_party/boringssl/crypto/pem/pem_pk8.c +0 -258
- data/third_party/boringssl/crypto/pem/pem_pkey.c +0 -219
- data/third_party/boringssl/crypto/pkcs7/pkcs7_x509.c +0 -385
- data/third_party/boringssl/crypto/poly1305/poly1305.c +0 -318
- data/third_party/boringssl/crypto/poly1305/poly1305_arm.c +0 -304
- data/third_party/boringssl/crypto/poly1305/poly1305_vec.c +0 -839
- data/third_party/boringssl/crypto/pool/pool.c +0 -221
- data/third_party/boringssl/crypto/rand_extra/deterministic.c +0 -56
- data/third_party/boringssl/crypto/rand_extra/windows.c +0 -53
- data/third_party/boringssl/crypto/siphash/siphash.c +0 -80
- data/third_party/boringssl/crypto/thread_pthread.c +0 -206
- data/third_party/boringssl/crypto/thread_win.c +0 -256
- data/third_party/boringssl/crypto/x509/a_verify.c +0 -115
- data/third_party/boringssl/crypto/x509/by_dir.c +0 -458
- data/third_party/boringssl/crypto/x509/by_file.c +0 -276
- data/third_party/boringssl/crypto/x509/x509_cmp.c +0 -477
- data/third_party/boringssl/crypto/x509/x509_obj.c +0 -198
- data/third_party/boringssl/crypto/x509/x509_r2x.c +0 -117
- data/third_party/boringssl/crypto/x509/x509_req.c +0 -342
- data/third_party/boringssl/crypto/x509/x509_set.c +0 -169
- data/third_party/boringssl/crypto/x509/x509_trs.c +0 -327
- data/third_party/boringssl/crypto/x509/x509_vfy.c +0 -2483
- data/third_party/boringssl/crypto/x509/x509_vpm.c +0 -672
- data/third_party/boringssl/crypto/x509/x509name.c +0 -388
- data/third_party/boringssl/crypto/x509/x_all.c +0 -400
- data/third_party/boringssl/crypto/x509v3/v3_alt.c +0 -629
- data/third_party/boringssl/crypto/x509v3/v3_enum.c +0 -100
- data/third_party/boringssl/crypto/x509v3/v3_info.c +0 -219
- data/third_party/boringssl/crypto/x509v3/v3_purp.c +0 -844
- data/third_party/boringssl/crypto/x509v3/v3_utl.c +0 -1396
- data/third_party/boringssl/include/openssl/base.h +0 -571
- data/third_party/boringssl/include/openssl/bn.h +0 -1045
- data/third_party/boringssl/include/openssl/buf.h +0 -137
- data/third_party/boringssl/include/openssl/bytestring.h +0 -527
- data/third_party/boringssl/include/openssl/crypto.h +0 -144
- data/third_party/boringssl/include/openssl/dh.h +0 -299
- data/third_party/boringssl/include/openssl/digest.h +0 -330
- data/third_party/boringssl/include/openssl/dsa.h +0 -441
- data/third_party/boringssl/include/openssl/ec.h +0 -417
- data/third_party/boringssl/include/openssl/ec_key.h +0 -370
- data/third_party/boringssl/include/openssl/ecdsa.h +0 -199
- data/third_party/boringssl/include/openssl/err.h +0 -461
- data/third_party/boringssl/include/openssl/evp.h +0 -1030
- data/third_party/boringssl/include/openssl/mem.h +0 -160
- data/third_party/boringssl/include/openssl/nid.h +0 -4245
- data/third_party/boringssl/include/openssl/poly1305.h +0 -51
- data/third_party/boringssl/include/openssl/rand.h +0 -125
- data/third_party/boringssl/include/openssl/rsa.h +0 -787
- data/third_party/boringssl/include/openssl/sha.h +0 -268
- data/third_party/boringssl/include/openssl/ssl.h +0 -5113
- data/third_party/boringssl/include/openssl/tls1.h +0 -634
- data/third_party/boringssl/include/openssl/x509.h +0 -1205
- data/third_party/boringssl/include/openssl/x509_vfy.h +0 -680
- data/third_party/boringssl/ssl/d1_both.cc +0 -842
- data/third_party/boringssl/ssl/d1_lib.cc +0 -268
- data/third_party/boringssl/ssl/d1_pkt.cc +0 -274
- data/third_party/boringssl/ssl/dtls_method.cc +0 -192
- data/third_party/boringssl/ssl/handoff.cc +0 -489
- data/third_party/boringssl/ssl/handshake.cc +0 -691
- data/third_party/boringssl/ssl/handshake_client.cc +0 -1871
- data/third_party/boringssl/ssl/handshake_server.cc +0 -1801
- data/third_party/boringssl/ssl/internal.h +0 -3549
- data/third_party/boringssl/ssl/s3_both.cc +0 -724
- data/third_party/boringssl/ssl/s3_lib.cc +0 -222
- data/third_party/boringssl/ssl/s3_pkt.cc +0 -459
- data/third_party/boringssl/ssl/ssl_asn1.cc +0 -828
- data/third_party/boringssl/ssl/ssl_buffer.cc +0 -287
- data/third_party/boringssl/ssl/ssl_cert.cc +0 -1016
- data/third_party/boringssl/ssl/ssl_cipher.cc +0 -1719
- data/third_party/boringssl/ssl/ssl_lib.cc +0 -3011
- data/third_party/boringssl/ssl/ssl_privkey.cc +0 -824
- data/third_party/boringssl/ssl/ssl_session.cc +0 -1273
- data/third_party/boringssl/ssl/ssl_stat.cc +0 -224
- data/third_party/boringssl/ssl/ssl_versions.cc +0 -394
- data/third_party/boringssl/ssl/t1_enc.cc +0 -361
- data/third_party/boringssl/ssl/t1_lib.cc +0 -4036
- data/third_party/boringssl/ssl/tls13_both.cc +0 -689
- data/third_party/boringssl/ssl/tls13_client.cc +0 -947
- data/third_party/boringssl/ssl/tls13_enc.cc +0 -561
- data/third_party/boringssl/ssl/tls13_server.cc +0 -1089
- data/third_party/boringssl/ssl/tls_method.cc +0 -279
- data/third_party/boringssl/ssl/tls_record.cc +0 -698
- data/third_party/boringssl/third_party/fiat/curve25519.c +0 -2167
- data/third_party/boringssl/third_party/fiat/curve25519_32.h +0 -911
- data/third_party/boringssl/third_party/fiat/curve25519_64.h +0 -559
- data/third_party/boringssl/third_party/fiat/curve25519_tables.h +0 -7880
- data/third_party/boringssl/third_party/fiat/internal.h +0 -154
- data/third_party/boringssl/third_party/fiat/p256.c +0 -1063
- data/third_party/boringssl/third_party/fiat/p256_32.h +0 -3226
- data/third_party/boringssl/third_party/fiat/p256_64.h +0 -1217
@@ -40,7 +40,7 @@
|
|
40
40
|
#include "src/core/lib/iomgr/tcp_windows.h"
|
41
41
|
#include "src/core/lib/iomgr/timer.h"
|
42
42
|
|
43
|
-
|
43
|
+
struct async_connect {
|
44
44
|
grpc_closure* on_done;
|
45
45
|
gpr_mu mu;
|
46
46
|
grpc_winsocket* socket;
|
@@ -51,8 +51,7 @@ typedef struct {
|
|
51
51
|
grpc_closure on_connect;
|
52
52
|
grpc_endpoint** endpoint;
|
53
53
|
grpc_channel_args* channel_args;
|
54
|
-
}
|
55
|
-
|
54
|
+
};
|
56
55
|
static void async_connect_unlock_and_cleanup(async_connect* ac,
|
57
56
|
grpc_winsocket* socket) {
|
58
57
|
int done = (--ac->refs == 0);
|
@@ -52,7 +52,7 @@ void grpc_custom_endpoint_init(grpc_socket_vtable* impl) {
|
|
52
52
|
grpc_set_tcp_server_impl(&custom_tcp_server_vtable);
|
53
53
|
}
|
54
54
|
|
55
|
-
|
55
|
+
struct custom_tcp_endpoint {
|
56
56
|
grpc_endpoint base;
|
57
57
|
gpr_refcount refcount;
|
58
58
|
grpc_custom_socket* socket;
|
@@ -69,8 +69,7 @@ typedef struct {
|
|
69
69
|
bool shutting_down;
|
70
70
|
|
71
71
|
char* peer_string;
|
72
|
-
}
|
73
|
-
|
72
|
+
};
|
74
73
|
static void tcp_free(grpc_custom_socket* s) {
|
75
74
|
custom_tcp_endpoint* tcp = (custom_tcp_endpoint*)s->endpoint;
|
76
75
|
grpc_resource_user_unref(tcp->resource_user);
|
@@ -24,6 +24,9 @@
|
|
24
24
|
#include "src/core/lib/iomgr/endpoint.h"
|
25
25
|
#include "src/core/lib/iomgr/sockaddr.h"
|
26
26
|
|
27
|
+
// Same number as the micro of SO_REUSEPORT in kernel
|
28
|
+
#define GRPC_CUSTOM_SOCKET_OPT_SO_REUSEPORT (0x00000200u)
|
29
|
+
|
27
30
|
typedef struct grpc_tcp_listener grpc_tcp_listener;
|
28
31
|
typedef struct grpc_custom_tcp_connect grpc_custom_tcp_connect;
|
29
32
|
|
@@ -36,6 +36,7 @@
|
|
36
36
|
#include <sys/types.h>
|
37
37
|
#include <unistd.h>
|
38
38
|
#include <algorithm>
|
39
|
+
#include <unordered_map>
|
39
40
|
|
40
41
|
#include <grpc/slice.h>
|
41
42
|
#include <grpc/support/alloc.h>
|
@@ -49,9 +50,11 @@
|
|
49
50
|
#include "src/core/lib/debug/trace.h"
|
50
51
|
#include "src/core/lib/gpr/string.h"
|
51
52
|
#include "src/core/lib/gpr/useful.h"
|
53
|
+
#include "src/core/lib/gprpp/sync.h"
|
52
54
|
#include "src/core/lib/iomgr/buffer_list.h"
|
53
55
|
#include "src/core/lib/iomgr/ev_posix.h"
|
54
56
|
#include "src/core/lib/iomgr/executor.h"
|
57
|
+
#include "src/core/lib/iomgr/socket_utils_posix.h"
|
55
58
|
#include "src/core/lib/profiling/timers.h"
|
56
59
|
#include "src/core/lib/slice/slice_internal.h"
|
57
60
|
#include "src/core/lib/slice/slice_string_helpers.h"
|
@@ -71,6 +74,15 @@
|
|
71
74
|
#define SENDMSG_FLAGS 0
|
72
75
|
#endif
|
73
76
|
|
77
|
+
// TCP zero copy sendmsg flag.
|
78
|
+
// NB: We define this here as a fallback in case we're using an older set of
|
79
|
+
// library headers that has not defined MSG_ZEROCOPY. Since this constant is
|
80
|
+
// part of the kernel, we are guaranteed it will never change/disagree so
|
81
|
+
// defining it here is safe.
|
82
|
+
#ifndef MSG_ZEROCOPY
|
83
|
+
#define MSG_ZEROCOPY 0x4000000
|
84
|
+
#endif
|
85
|
+
|
74
86
|
#ifdef GRPC_MSG_IOVLEN_TYPE
|
75
87
|
typedef GRPC_MSG_IOVLEN_TYPE msg_iovlen_type;
|
76
88
|
#else
|
@@ -79,6 +91,264 @@ typedef size_t msg_iovlen_type;
|
|
79
91
|
|
80
92
|
extern grpc_core::TraceFlag grpc_tcp_trace;
|
81
93
|
|
94
|
+
namespace grpc_core {
|
95
|
+
|
96
|
+
class TcpZerocopySendRecord {
|
97
|
+
public:
|
98
|
+
TcpZerocopySendRecord() { grpc_slice_buffer_init(&buf_); }
|
99
|
+
|
100
|
+
~TcpZerocopySendRecord() {
|
101
|
+
AssertEmpty();
|
102
|
+
grpc_slice_buffer_destroy_internal(&buf_);
|
103
|
+
}
|
104
|
+
|
105
|
+
// Given the slices that we wish to send, and the current offset into the
|
106
|
+
// slice buffer (indicating which have already been sent), populate an iovec
|
107
|
+
// array that will be used for a zerocopy enabled sendmsg().
|
108
|
+
msg_iovlen_type PopulateIovs(size_t* unwind_slice_idx,
|
109
|
+
size_t* unwind_byte_idx, size_t* sending_length,
|
110
|
+
iovec* iov);
|
111
|
+
|
112
|
+
// A sendmsg() may not be able to send the bytes that we requested at this
|
113
|
+
// time, returning EAGAIN (possibly due to backpressure). In this case,
|
114
|
+
// unwind the offset into the slice buffer so we retry sending these bytes.
|
115
|
+
void UnwindIfThrottled(size_t unwind_slice_idx, size_t unwind_byte_idx) {
|
116
|
+
out_offset_.byte_idx = unwind_byte_idx;
|
117
|
+
out_offset_.slice_idx = unwind_slice_idx;
|
118
|
+
}
|
119
|
+
|
120
|
+
// Update the offset into the slice buffer based on how much we wanted to sent
|
121
|
+
// vs. what sendmsg() actually sent (which may be lower, possibly due to
|
122
|
+
// backpressure).
|
123
|
+
void UpdateOffsetForBytesSent(size_t sending_length, size_t actually_sent);
|
124
|
+
|
125
|
+
// Indicates whether all underlying data has been sent or not.
|
126
|
+
bool AllSlicesSent() { return out_offset_.slice_idx == buf_.count; }
|
127
|
+
|
128
|
+
// Reset this structure for a new tcp_write() with zerocopy.
|
129
|
+
void PrepareForSends(grpc_slice_buffer* slices_to_send) {
|
130
|
+
AssertEmpty();
|
131
|
+
out_offset_.slice_idx = 0;
|
132
|
+
out_offset_.byte_idx = 0;
|
133
|
+
grpc_slice_buffer_swap(slices_to_send, &buf_);
|
134
|
+
Ref();
|
135
|
+
}
|
136
|
+
|
137
|
+
// References: 1 reference per sendmsg(), and 1 for the tcp_write().
|
138
|
+
void Ref() { ref_.FetchAdd(1, MemoryOrder::RELAXED); }
|
139
|
+
|
140
|
+
// Unref: called when we get an error queue notification for a sendmsg(), if a
|
141
|
+
// sendmsg() failed or when tcp_write() is done.
|
142
|
+
bool Unref() {
|
143
|
+
const intptr_t prior = ref_.FetchSub(1, MemoryOrder::ACQ_REL);
|
144
|
+
GPR_DEBUG_ASSERT(prior > 0);
|
145
|
+
if (prior == 1) {
|
146
|
+
AllSendsComplete();
|
147
|
+
return true;
|
148
|
+
}
|
149
|
+
return false;
|
150
|
+
}
|
151
|
+
|
152
|
+
private:
|
153
|
+
struct OutgoingOffset {
|
154
|
+
size_t slice_idx = 0;
|
155
|
+
size_t byte_idx = 0;
|
156
|
+
};
|
157
|
+
|
158
|
+
void AssertEmpty() {
|
159
|
+
GPR_DEBUG_ASSERT(buf_.count == 0);
|
160
|
+
GPR_DEBUG_ASSERT(buf_.length == 0);
|
161
|
+
GPR_DEBUG_ASSERT(ref_.Load(MemoryOrder::RELAXED) == 0);
|
162
|
+
}
|
163
|
+
|
164
|
+
// When all sendmsg() calls associated with this tcp_write() have been
|
165
|
+
// completed (ie. we have received the notifications for each sequence number
|
166
|
+
// for each sendmsg()) and all reference counts have been dropped, drop our
|
167
|
+
// reference to the underlying data since we no longer need it.
|
168
|
+
void AllSendsComplete() {
|
169
|
+
GPR_DEBUG_ASSERT(ref_.Load(MemoryOrder::RELAXED) == 0);
|
170
|
+
grpc_slice_buffer_reset_and_unref_internal(&buf_);
|
171
|
+
}
|
172
|
+
|
173
|
+
grpc_slice_buffer buf_;
|
174
|
+
Atomic<intptr_t> ref_;
|
175
|
+
OutgoingOffset out_offset_;
|
176
|
+
};
|
177
|
+
|
178
|
+
class TcpZerocopySendCtx {
|
179
|
+
public:
|
180
|
+
static constexpr int kDefaultMaxSends = 4;
|
181
|
+
static constexpr size_t kDefaultSendBytesThreshold = 16 * 1024; // 16KB
|
182
|
+
|
183
|
+
TcpZerocopySendCtx(int max_sends = kDefaultMaxSends,
|
184
|
+
size_t send_bytes_threshold = kDefaultSendBytesThreshold)
|
185
|
+
: max_sends_(max_sends),
|
186
|
+
free_send_records_size_(max_sends),
|
187
|
+
threshold_bytes_(send_bytes_threshold) {
|
188
|
+
send_records_ = static_cast<TcpZerocopySendRecord*>(
|
189
|
+
gpr_malloc(max_sends * sizeof(*send_records_)));
|
190
|
+
free_send_records_ = static_cast<TcpZerocopySendRecord**>(
|
191
|
+
gpr_malloc(max_sends * sizeof(*free_send_records_)));
|
192
|
+
if (send_records_ == nullptr || free_send_records_ == nullptr) {
|
193
|
+
gpr_free(send_records_);
|
194
|
+
gpr_free(free_send_records_);
|
195
|
+
gpr_log(GPR_INFO, "Disabling TCP TX zerocopy due to memory pressure.\n");
|
196
|
+
memory_limited_ = true;
|
197
|
+
} else {
|
198
|
+
for (int idx = 0; idx < max_sends_; ++idx) {
|
199
|
+
new (send_records_ + idx) TcpZerocopySendRecord();
|
200
|
+
free_send_records_[idx] = send_records_ + idx;
|
201
|
+
}
|
202
|
+
}
|
203
|
+
}
|
204
|
+
|
205
|
+
~TcpZerocopySendCtx() {
|
206
|
+
if (send_records_ != nullptr) {
|
207
|
+
for (int idx = 0; idx < max_sends_; ++idx) {
|
208
|
+
send_records_[idx].~TcpZerocopySendRecord();
|
209
|
+
}
|
210
|
+
}
|
211
|
+
gpr_free(send_records_);
|
212
|
+
gpr_free(free_send_records_);
|
213
|
+
}
|
214
|
+
|
215
|
+
// True if we were unable to allocate the various bookkeeping structures at
|
216
|
+
// transport initialization time. If memory limited, we do not zerocopy.
|
217
|
+
bool memory_limited() const { return memory_limited_; }
|
218
|
+
|
219
|
+
// TCP send zerocopy maintains an implicit sequence number for every
|
220
|
+
// successful sendmsg() with zerocopy enabled; the kernel later gives us an
|
221
|
+
// error queue notification with this sequence number indicating that the
|
222
|
+
// underlying data buffers that we sent can now be released. Once that
|
223
|
+
// notification is received, we can release the buffers associated with this
|
224
|
+
// zerocopy send record. Here, we associate the sequence number with the data
|
225
|
+
// buffers that were sent with the corresponding call to sendmsg().
|
226
|
+
void NoteSend(TcpZerocopySendRecord* record) {
|
227
|
+
record->Ref();
|
228
|
+
AssociateSeqWithSendRecord(last_send_, record);
|
229
|
+
++last_send_;
|
230
|
+
}
|
231
|
+
|
232
|
+
// If sendmsg() actually failed, though, we need to revert the sequence number
|
233
|
+
// that we speculatively bumped before calling sendmsg(). Note that we bump
|
234
|
+
// this sequence number and perform relevant bookkeeping (see: NoteSend())
|
235
|
+
// *before* calling sendmsg() since, if we called it *after* sendmsg(), then
|
236
|
+
// there is a possible race with the release notification which could occur on
|
237
|
+
// another thread before we do the necessary bookkeeping. Hence, calling
|
238
|
+
// NoteSend() *before* sendmsg() and implementing an undo function is needed.
|
239
|
+
void UndoSend() {
|
240
|
+
--last_send_;
|
241
|
+
if (ReleaseSendRecord(last_send_)->Unref()) {
|
242
|
+
// We should still be holding the ref taken by tcp_write().
|
243
|
+
GPR_DEBUG_ASSERT(0);
|
244
|
+
}
|
245
|
+
}
|
246
|
+
|
247
|
+
// Simply associate this send record (and the underlying sent data buffers)
|
248
|
+
// with the implicit sequence number for this zerocopy sendmsg().
|
249
|
+
void AssociateSeqWithSendRecord(uint32_t seq, TcpZerocopySendRecord* record) {
|
250
|
+
MutexLock guard(&lock_);
|
251
|
+
ctx_lookup_.emplace(seq, record);
|
252
|
+
}
|
253
|
+
|
254
|
+
// Get a send record for a send that we wish to do with zerocopy.
|
255
|
+
TcpZerocopySendRecord* GetSendRecord() {
|
256
|
+
MutexLock guard(&lock_);
|
257
|
+
return TryGetSendRecordLocked();
|
258
|
+
}
|
259
|
+
|
260
|
+
// A given send record corresponds to a single tcp_write() with zerocopy
|
261
|
+
// enabled. This can result in several sendmsg() calls to flush all of the
|
262
|
+
// data to wire. Each sendmsg() takes a reference on the
|
263
|
+
// TcpZerocopySendRecord, and corresponds to a single sequence number.
|
264
|
+
// ReleaseSendRecord releases a reference on TcpZerocopySendRecord for a
|
265
|
+
// single sequence number. This is called either when we receive the relevant
|
266
|
+
// error queue notification (saying that we can discard the underlying
|
267
|
+
// buffers for this sendmsg()) is received from the kernel - or, in case
|
268
|
+
// sendmsg() was unsuccessful to begin with.
|
269
|
+
TcpZerocopySendRecord* ReleaseSendRecord(uint32_t seq) {
|
270
|
+
MutexLock guard(&lock_);
|
271
|
+
return ReleaseSendRecordLocked(seq);
|
272
|
+
}
|
273
|
+
|
274
|
+
// After all the references to a TcpZerocopySendRecord are released, we can
|
275
|
+
// add it back to the pool (of size max_sends_). Note that we can only have
|
276
|
+
// max_sends_ tcp_write() instances with zerocopy enabled in flight at the
|
277
|
+
// same time.
|
278
|
+
void PutSendRecord(TcpZerocopySendRecord* record) {
|
279
|
+
GPR_DEBUG_ASSERT(record >= send_records_ &&
|
280
|
+
record < send_records_ + max_sends_);
|
281
|
+
MutexLock guard(&lock_);
|
282
|
+
PutSendRecordLocked(record);
|
283
|
+
}
|
284
|
+
|
285
|
+
// Indicate that we are disposing of this zerocopy context. This indicator
|
286
|
+
// will prevent new zerocopy writes from being issued.
|
287
|
+
void Shutdown() { shutdown_.Store(true, MemoryOrder::RELEASE); }
|
288
|
+
|
289
|
+
// Indicates that there are no inflight tcp_write() instances with zerocopy
|
290
|
+
// enabled.
|
291
|
+
bool AllSendRecordsEmpty() {
|
292
|
+
MutexLock guard(&lock_);
|
293
|
+
return free_send_records_size_ == max_sends_;
|
294
|
+
}
|
295
|
+
|
296
|
+
bool enabled() const { return enabled_; }
|
297
|
+
|
298
|
+
void set_enabled(bool enabled) {
|
299
|
+
GPR_DEBUG_ASSERT(!enabled || !memory_limited());
|
300
|
+
enabled_ = enabled;
|
301
|
+
}
|
302
|
+
|
303
|
+
// Only use zerocopy if we are sending at least this many bytes. The
|
304
|
+
// additional overhead of reading the error queue for notifications means that
|
305
|
+
// zerocopy is not useful for small transfers.
|
306
|
+
size_t threshold_bytes() const { return threshold_bytes_; }
|
307
|
+
|
308
|
+
private:
|
309
|
+
TcpZerocopySendRecord* ReleaseSendRecordLocked(uint32_t seq) {
|
310
|
+
auto iter = ctx_lookup_.find(seq);
|
311
|
+
GPR_DEBUG_ASSERT(iter != ctx_lookup_.end());
|
312
|
+
TcpZerocopySendRecord* record = iter->second;
|
313
|
+
ctx_lookup_.erase(iter);
|
314
|
+
return record;
|
315
|
+
}
|
316
|
+
|
317
|
+
TcpZerocopySendRecord* TryGetSendRecordLocked() {
|
318
|
+
if (shutdown_.Load(MemoryOrder::ACQUIRE)) {
|
319
|
+
return nullptr;
|
320
|
+
}
|
321
|
+
if (free_send_records_size_ == 0) {
|
322
|
+
return nullptr;
|
323
|
+
}
|
324
|
+
free_send_records_size_--;
|
325
|
+
return free_send_records_[free_send_records_size_];
|
326
|
+
}
|
327
|
+
|
328
|
+
void PutSendRecordLocked(TcpZerocopySendRecord* record) {
|
329
|
+
GPR_DEBUG_ASSERT(free_send_records_size_ < max_sends_);
|
330
|
+
free_send_records_[free_send_records_size_] = record;
|
331
|
+
free_send_records_size_++;
|
332
|
+
}
|
333
|
+
|
334
|
+
TcpZerocopySendRecord* send_records_;
|
335
|
+
TcpZerocopySendRecord** free_send_records_;
|
336
|
+
int max_sends_;
|
337
|
+
int free_send_records_size_;
|
338
|
+
Mutex lock_;
|
339
|
+
uint32_t last_send_ = 0;
|
340
|
+
Atomic<bool> shutdown_;
|
341
|
+
bool enabled_ = false;
|
342
|
+
size_t threshold_bytes_ = kDefaultSendBytesThreshold;
|
343
|
+
std::unordered_map<uint32_t, TcpZerocopySendRecord*> ctx_lookup_;
|
344
|
+
bool memory_limited_ = false;
|
345
|
+
};
|
346
|
+
|
347
|
+
} // namespace grpc_core
|
348
|
+
|
349
|
+
using grpc_core::TcpZerocopySendCtx;
|
350
|
+
using grpc_core::TcpZerocopySendRecord;
|
351
|
+
|
82
352
|
namespace {
|
83
353
|
struct grpc_tcp {
|
84
354
|
grpc_endpoint base;
|
@@ -142,6 +412,8 @@ struct grpc_tcp {
|
|
142
412
|
bool ts_capable; /* Cache whether we can set timestamping options */
|
143
413
|
gpr_atm stop_error_notification; /* Set to 1 if we do not want to be notified
|
144
414
|
on errors anymore */
|
415
|
+
TcpZerocopySendCtx tcp_zerocopy_send_ctx;
|
416
|
+
TcpZerocopySendRecord* current_zerocopy_send = nullptr;
|
145
417
|
};
|
146
418
|
|
147
419
|
struct backup_poller {
|
@@ -151,6 +423,8 @@ struct backup_poller {
|
|
151
423
|
|
152
424
|
} // namespace
|
153
425
|
|
426
|
+
static void ZerocopyDisableAndWaitForRemaining(grpc_tcp* tcp);
|
427
|
+
|
154
428
|
#define BACKUP_POLLER_POLLSET(b) ((grpc_pollset*)((b) + 1))
|
155
429
|
|
156
430
|
static gpr_atm g_uncovered_notifications_pending;
|
@@ -339,6 +613,7 @@ static void tcp_handle_write(void* arg /* grpc_tcp */, grpc_error* error);
|
|
339
613
|
|
340
614
|
static void tcp_shutdown(grpc_endpoint* ep, grpc_error* why) {
|
341
615
|
grpc_tcp* tcp = reinterpret_cast<grpc_tcp*>(ep);
|
616
|
+
ZerocopyDisableAndWaitForRemaining(tcp);
|
342
617
|
grpc_fd_shutdown(tcp->em_fd, why);
|
343
618
|
grpc_resource_user_shutdown(tcp->resource_user);
|
344
619
|
}
|
@@ -357,6 +632,7 @@ static void tcp_free(grpc_tcp* tcp) {
|
|
357
632
|
gpr_mu_unlock(&tcp->tb_mu);
|
358
633
|
tcp->outgoing_buffer_arg = nullptr;
|
359
634
|
gpr_mu_destroy(&tcp->tb_mu);
|
635
|
+
tcp->tcp_zerocopy_send_ctx.~TcpZerocopySendCtx();
|
360
636
|
gpr_free(tcp);
|
361
637
|
}
|
362
638
|
|
@@ -390,6 +666,7 @@ static void tcp_destroy(grpc_endpoint* ep) {
|
|
390
666
|
grpc_tcp* tcp = reinterpret_cast<grpc_tcp*>(ep);
|
391
667
|
grpc_slice_buffer_reset_and_unref_internal(&tcp->last_read_buffer);
|
392
668
|
if (grpc_event_engine_can_track_errors()) {
|
669
|
+
ZerocopyDisableAndWaitForRemaining(tcp);
|
393
670
|
gpr_atm_no_barrier_store(&tcp->stop_error_notification, true);
|
394
671
|
grpc_fd_set_error(tcp->em_fd);
|
395
672
|
}
|
@@ -652,13 +929,13 @@ static void tcp_read(grpc_endpoint* ep, grpc_slice_buffer* incoming_buffer,
|
|
652
929
|
|
653
930
|
/* A wrapper around sendmsg. It sends \a msg over \a fd and returns the number
|
654
931
|
* of bytes sent. */
|
655
|
-
ssize_t tcp_send(int fd, const struct msghdr* msg) {
|
932
|
+
ssize_t tcp_send(int fd, const struct msghdr* msg, int additional_flags = 0) {
|
656
933
|
GPR_TIMER_SCOPE("sendmsg", 1);
|
657
934
|
ssize_t sent_length;
|
658
935
|
do {
|
659
936
|
/* TODO(klempner): Cork if this is a partial write */
|
660
937
|
GRPC_STATS_INC_SYSCALL_WRITE();
|
661
|
-
sent_length = sendmsg(fd, msg, SENDMSG_FLAGS);
|
938
|
+
sent_length = sendmsg(fd, msg, SENDMSG_FLAGS | additional_flags);
|
662
939
|
} while (sent_length < 0 && errno == EINTR);
|
663
940
|
return sent_length;
|
664
941
|
}
|
@@ -671,16 +948,52 @@ ssize_t tcp_send(int fd, const struct msghdr* msg) {
|
|
671
948
|
*/
|
672
949
|
static bool tcp_write_with_timestamps(grpc_tcp* tcp, struct msghdr* msg,
|
673
950
|
size_t sending_length,
|
674
|
-
ssize_t* sent_length
|
951
|
+
ssize_t* sent_length,
|
952
|
+
int additional_flags = 0);
|
675
953
|
|
676
954
|
/** The callback function to be invoked when we get an error on the socket. */
|
677
955
|
static void tcp_handle_error(void* arg /* grpc_tcp */, grpc_error* error);
|
678
956
|
|
957
|
+
static TcpZerocopySendRecord* tcp_get_send_zerocopy_record(
|
958
|
+
grpc_tcp* tcp, grpc_slice_buffer* buf);
|
959
|
+
|
679
960
|
#ifdef GRPC_LINUX_ERRQUEUE
|
961
|
+
static bool process_errors(grpc_tcp* tcp);
|
962
|
+
|
963
|
+
static TcpZerocopySendRecord* tcp_get_send_zerocopy_record(
|
964
|
+
grpc_tcp* tcp, grpc_slice_buffer* buf) {
|
965
|
+
TcpZerocopySendRecord* zerocopy_send_record = nullptr;
|
966
|
+
const bool use_zerocopy =
|
967
|
+
tcp->tcp_zerocopy_send_ctx.enabled() &&
|
968
|
+
tcp->tcp_zerocopy_send_ctx.threshold_bytes() < buf->length;
|
969
|
+
if (use_zerocopy) {
|
970
|
+
zerocopy_send_record = tcp->tcp_zerocopy_send_ctx.GetSendRecord();
|
971
|
+
if (zerocopy_send_record == nullptr) {
|
972
|
+
process_errors(tcp);
|
973
|
+
zerocopy_send_record = tcp->tcp_zerocopy_send_ctx.GetSendRecord();
|
974
|
+
}
|
975
|
+
if (zerocopy_send_record != nullptr) {
|
976
|
+
zerocopy_send_record->PrepareForSends(buf);
|
977
|
+
GPR_DEBUG_ASSERT(buf->count == 0);
|
978
|
+
GPR_DEBUG_ASSERT(buf->length == 0);
|
979
|
+
tcp->outgoing_byte_idx = 0;
|
980
|
+
tcp->outgoing_buffer = nullptr;
|
981
|
+
}
|
982
|
+
}
|
983
|
+
return zerocopy_send_record;
|
984
|
+
}
|
985
|
+
|
986
|
+
static void ZerocopyDisableAndWaitForRemaining(grpc_tcp* tcp) {
|
987
|
+
tcp->tcp_zerocopy_send_ctx.Shutdown();
|
988
|
+
while (!tcp->tcp_zerocopy_send_ctx.AllSendRecordsEmpty()) {
|
989
|
+
process_errors(tcp);
|
990
|
+
}
|
991
|
+
}
|
680
992
|
|
681
993
|
static bool tcp_write_with_timestamps(grpc_tcp* tcp, struct msghdr* msg,
|
682
994
|
size_t sending_length,
|
683
|
-
ssize_t* sent_length
|
995
|
+
ssize_t* sent_length,
|
996
|
+
int additional_flags) {
|
684
997
|
if (!tcp->socket_ts_enabled) {
|
685
998
|
uint32_t opt = grpc_core::kTimestampingSocketOptions;
|
686
999
|
if (setsockopt(tcp->fd, SOL_SOCKET, SO_TIMESTAMPING,
|
@@ -708,7 +1021,7 @@ static bool tcp_write_with_timestamps(grpc_tcp* tcp, struct msghdr* msg,
|
|
708
1021
|
msg->msg_controllen = CMSG_SPACE(sizeof(uint32_t));
|
709
1022
|
|
710
1023
|
/* If there was an error on sendmsg the logic in tcp_flush will handle it. */
|
711
|
-
ssize_t length = tcp_send(tcp->fd, msg);
|
1024
|
+
ssize_t length = tcp_send(tcp->fd, msg, additional_flags);
|
712
1025
|
*sent_length = length;
|
713
1026
|
/* Only save timestamps if all the bytes were taken by sendmsg. */
|
714
1027
|
if (sending_length == static_cast<size_t>(length)) {
|
@@ -722,6 +1035,43 @@ static bool tcp_write_with_timestamps(grpc_tcp* tcp, struct msghdr* msg,
|
|
722
1035
|
return true;
|
723
1036
|
}
|
724
1037
|
|
1038
|
+
static void UnrefMaybePutZerocopySendRecord(grpc_tcp* tcp,
|
1039
|
+
TcpZerocopySendRecord* record,
|
1040
|
+
uint32_t seq, const char* tag);
|
1041
|
+
// Reads \a cmsg to process zerocopy control messages.
|
1042
|
+
static void process_zerocopy(grpc_tcp* tcp, struct cmsghdr* cmsg) {
|
1043
|
+
GPR_DEBUG_ASSERT(cmsg);
|
1044
|
+
auto serr = reinterpret_cast<struct sock_extended_err*>(CMSG_DATA(cmsg));
|
1045
|
+
GPR_DEBUG_ASSERT(serr->ee_errno == 0);
|
1046
|
+
GPR_DEBUG_ASSERT(serr->ee_origin == SO_EE_ORIGIN_ZEROCOPY);
|
1047
|
+
const uint32_t lo = serr->ee_info;
|
1048
|
+
const uint32_t hi = serr->ee_data;
|
1049
|
+
for (uint32_t seq = lo; seq <= hi; ++seq) {
|
1050
|
+
// TODO(arjunroy): It's likely that lo and hi refer to zerocopy sequence
|
1051
|
+
// numbers that are generated by a single call to grpc_endpoint_write; ie.
|
1052
|
+
// we can batch the unref operation. So, check if record is the same for
|
1053
|
+
// both; if so, batch the unref/put.
|
1054
|
+
TcpZerocopySendRecord* record =
|
1055
|
+
tcp->tcp_zerocopy_send_ctx.ReleaseSendRecord(seq);
|
1056
|
+
GPR_DEBUG_ASSERT(record);
|
1057
|
+
UnrefMaybePutZerocopySendRecord(tcp, record, seq, "CALLBACK RCVD");
|
1058
|
+
}
|
1059
|
+
}
|
1060
|
+
|
1061
|
+
// Whether the cmsg received from error queue is of the IPv4 or IPv6 levels.
|
1062
|
+
static bool CmsgIsIpLevel(const cmsghdr& cmsg) {
|
1063
|
+
return (cmsg.cmsg_level == SOL_IPV6 && cmsg.cmsg_type == IPV6_RECVERR) ||
|
1064
|
+
(cmsg.cmsg_level == SOL_IP && cmsg.cmsg_type == IP_RECVERR);
|
1065
|
+
}
|
1066
|
+
|
1067
|
+
static bool CmsgIsZeroCopy(const cmsghdr& cmsg) {
|
1068
|
+
if (!CmsgIsIpLevel(cmsg)) {
|
1069
|
+
return false;
|
1070
|
+
}
|
1071
|
+
auto serr = reinterpret_cast<const sock_extended_err*> CMSG_DATA(&cmsg);
|
1072
|
+
return serr->ee_errno == 0 && serr->ee_origin == SO_EE_ORIGIN_ZEROCOPY;
|
1073
|
+
}
|
1074
|
+
|
725
1075
|
/** Reads \a cmsg to derive timestamps from the control messages. If a valid
|
726
1076
|
* timestamp is found, the traced buffer list is updated with this timestamp.
|
727
1077
|
* The caller of this function should be looping on the control messages found
|
@@ -783,73 +1133,76 @@ struct cmsghdr* process_timestamp(grpc_tcp* tcp, msghdr* msg,
|
|
783
1133
|
/** For linux platforms, reads the socket's error queue and processes error
|
784
1134
|
* messages from the queue.
|
785
1135
|
*/
|
786
|
-
static
|
1136
|
+
static bool process_errors(grpc_tcp* tcp) {
|
1137
|
+
bool processed_err = false;
|
1138
|
+
struct iovec iov;
|
1139
|
+
iov.iov_base = nullptr;
|
1140
|
+
iov.iov_len = 0;
|
1141
|
+
struct msghdr msg;
|
1142
|
+
msg.msg_name = nullptr;
|
1143
|
+
msg.msg_namelen = 0;
|
1144
|
+
msg.msg_iov = &iov;
|
1145
|
+
msg.msg_iovlen = 0;
|
1146
|
+
msg.msg_flags = 0;
|
1147
|
+
/* Allocate enough space so we don't need to keep increasing this as size
|
1148
|
+
* of OPT_STATS increase */
|
1149
|
+
constexpr size_t cmsg_alloc_space =
|
1150
|
+
CMSG_SPACE(sizeof(grpc_core::scm_timestamping)) +
|
1151
|
+
CMSG_SPACE(sizeof(sock_extended_err) + sizeof(sockaddr_in)) +
|
1152
|
+
CMSG_SPACE(32 * NLA_ALIGN(NLA_HDRLEN + sizeof(uint64_t)));
|
1153
|
+
/* Allocate aligned space for cmsgs received along with timestamps */
|
1154
|
+
union {
|
1155
|
+
char rbuf[cmsg_alloc_space];
|
1156
|
+
struct cmsghdr align;
|
1157
|
+
} aligned_buf;
|
1158
|
+
msg.msg_control = aligned_buf.rbuf;
|
1159
|
+
msg.msg_controllen = sizeof(aligned_buf.rbuf);
|
1160
|
+
int r, saved_errno;
|
787
1161
|
while (true) {
|
788
|
-
struct iovec iov;
|
789
|
-
iov.iov_base = nullptr;
|
790
|
-
iov.iov_len = 0;
|
791
|
-
struct msghdr msg;
|
792
|
-
msg.msg_name = nullptr;
|
793
|
-
msg.msg_namelen = 0;
|
794
|
-
msg.msg_iov = &iov;
|
795
|
-
msg.msg_iovlen = 0;
|
796
|
-
msg.msg_flags = 0;
|
797
|
-
|
798
|
-
/* Allocate enough space so we don't need to keep increasing this as size
|
799
|
-
* of OPT_STATS increase */
|
800
|
-
constexpr size_t cmsg_alloc_space =
|
801
|
-
CMSG_SPACE(sizeof(grpc_core::scm_timestamping)) +
|
802
|
-
CMSG_SPACE(sizeof(sock_extended_err) + sizeof(sockaddr_in)) +
|
803
|
-
CMSG_SPACE(32 * NLA_ALIGN(NLA_HDRLEN + sizeof(uint64_t)));
|
804
|
-
/* Allocate aligned space for cmsgs received along with timestamps */
|
805
|
-
union {
|
806
|
-
char rbuf[cmsg_alloc_space];
|
807
|
-
struct cmsghdr align;
|
808
|
-
} aligned_buf;
|
809
|
-
memset(&aligned_buf, 0, sizeof(aligned_buf));
|
810
|
-
|
811
|
-
msg.msg_control = aligned_buf.rbuf;
|
812
|
-
msg.msg_controllen = sizeof(aligned_buf.rbuf);
|
813
|
-
|
814
|
-
int r, saved_errno;
|
815
1162
|
do {
|
816
1163
|
r = recvmsg(tcp->fd, &msg, MSG_ERRQUEUE);
|
817
1164
|
saved_errno = errno;
|
818
1165
|
} while (r < 0 && saved_errno == EINTR);
|
819
1166
|
|
820
1167
|
if (r == -1 && saved_errno == EAGAIN) {
|
821
|
-
return; /* No more errors to process */
|
1168
|
+
return processed_err; /* No more errors to process */
|
822
1169
|
}
|
823
1170
|
if (r == -1) {
|
824
|
-
return;
|
1171
|
+
return processed_err;
|
825
1172
|
}
|
826
|
-
if ((msg.msg_flags & MSG_CTRUNC) != 0) {
|
1173
|
+
if (GPR_UNLIKELY((msg.msg_flags & MSG_CTRUNC) != 0)) {
|
827
1174
|
gpr_log(GPR_ERROR, "Error message was truncated.");
|
828
1175
|
}
|
829
1176
|
|
830
1177
|
if (msg.msg_controllen == 0) {
|
831
1178
|
/* There was no control message found. It was probably spurious. */
|
832
|
-
return;
|
1179
|
+
return processed_err;
|
833
1180
|
}
|
834
1181
|
bool seen = false;
|
835
1182
|
for (auto cmsg = CMSG_FIRSTHDR(&msg); cmsg && cmsg->cmsg_len;
|
836
1183
|
cmsg = CMSG_NXTHDR(&msg, cmsg)) {
|
837
|
-
if (cmsg
|
838
|
-
|
839
|
-
|
840
|
-
|
1184
|
+
if (CmsgIsZeroCopy(*cmsg)) {
|
1185
|
+
process_zerocopy(tcp, cmsg);
|
1186
|
+
seen = true;
|
1187
|
+
processed_err = true;
|
1188
|
+
} else if (cmsg->cmsg_level == SOL_SOCKET &&
|
1189
|
+
cmsg->cmsg_type == SCM_TIMESTAMPING) {
|
1190
|
+
cmsg = process_timestamp(tcp, &msg, cmsg);
|
1191
|
+
seen = true;
|
1192
|
+
processed_err = true;
|
1193
|
+
} else {
|
1194
|
+
/* Got a control message that is not a timestamp or zerocopy. Don't know
|
1195
|
+
* how to handle this. */
|
841
1196
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
|
842
1197
|
gpr_log(GPR_INFO,
|
843
1198
|
"unknown control message cmsg_level:%d cmsg_type:%d",
|
844
1199
|
cmsg->cmsg_level, cmsg->cmsg_type);
|
845
1200
|
}
|
846
|
-
return;
|
1201
|
+
return processed_err;
|
847
1202
|
}
|
848
|
-
cmsg = process_timestamp(tcp, &msg, cmsg);
|
849
|
-
seen = true;
|
850
1203
|
}
|
851
1204
|
if (!seen) {
|
852
|
-
return;
|
1205
|
+
return processed_err;
|
853
1206
|
}
|
854
1207
|
}
|
855
1208
|
}
|
@@ -870,18 +1223,28 @@ static void tcp_handle_error(void* arg /* grpc_tcp */, grpc_error* error) {
|
|
870
1223
|
|
871
1224
|
/* We are still interested in collecting timestamps, so let's try reading
|
872
1225
|
* them. */
|
873
|
-
process_errors(tcp);
|
1226
|
+
bool processed = process_errors(tcp);
|
874
1227
|
/* This might not a timestamps error. Set the read and write closures to be
|
875
1228
|
* ready. */
|
876
|
-
|
877
|
-
|
1229
|
+
if (!processed) {
|
1230
|
+
grpc_fd_set_readable(tcp->em_fd);
|
1231
|
+
grpc_fd_set_writable(tcp->em_fd);
|
1232
|
+
}
|
878
1233
|
grpc_fd_notify_on_error(tcp->em_fd, &tcp->error_closure);
|
879
1234
|
}
|
880
1235
|
|
881
1236
|
#else /* GRPC_LINUX_ERRQUEUE */
|
1237
|
+
static TcpZerocopySendRecord* tcp_get_send_zerocopy_record(
|
1238
|
+
grpc_tcp* tcp, grpc_slice_buffer* buf) {
|
1239
|
+
return nullptr;
|
1240
|
+
}
|
1241
|
+
|
1242
|
+
static void ZerocopyDisableAndWaitForRemaining(grpc_tcp* tcp) {}
|
1243
|
+
|
882
1244
|
static bool tcp_write_with_timestamps(grpc_tcp* /*tcp*/, struct msghdr* /*msg*/,
|
883
1245
|
size_t /*sending_length*/,
|
884
|
-
ssize_t* /*sent_length
|
1246
|
+
ssize_t* /*sent_length*/,
|
1247
|
+
int /*additional_flags*/) {
|
885
1248
|
gpr_log(GPR_ERROR, "Write with timestamps not supported for this platform");
|
886
1249
|
GPR_ASSERT(0);
|
887
1250
|
return false;
|
@@ -907,12 +1270,139 @@ void tcp_shutdown_buffer_list(grpc_tcp* tcp) {
|
|
907
1270
|
}
|
908
1271
|
}
|
909
1272
|
|
910
|
-
/* returns true if done, false if pending; if returning true, *error is set */
|
911
1273
|
#if defined(IOV_MAX) && IOV_MAX < 1000
|
912
1274
|
#define MAX_WRITE_IOVEC IOV_MAX
|
913
1275
|
#else
|
914
1276
|
#define MAX_WRITE_IOVEC 1000
|
915
1277
|
#endif
|
1278
|
+
msg_iovlen_type TcpZerocopySendRecord::PopulateIovs(size_t* unwind_slice_idx,
|
1279
|
+
size_t* unwind_byte_idx,
|
1280
|
+
size_t* sending_length,
|
1281
|
+
iovec* iov) {
|
1282
|
+
msg_iovlen_type iov_size;
|
1283
|
+
*unwind_slice_idx = out_offset_.slice_idx;
|
1284
|
+
*unwind_byte_idx = out_offset_.byte_idx;
|
1285
|
+
for (iov_size = 0;
|
1286
|
+
out_offset_.slice_idx != buf_.count && iov_size != MAX_WRITE_IOVEC;
|
1287
|
+
iov_size++) {
|
1288
|
+
iov[iov_size].iov_base =
|
1289
|
+
GRPC_SLICE_START_PTR(buf_.slices[out_offset_.slice_idx]) +
|
1290
|
+
out_offset_.byte_idx;
|
1291
|
+
iov[iov_size].iov_len =
|
1292
|
+
GRPC_SLICE_LENGTH(buf_.slices[out_offset_.slice_idx]) -
|
1293
|
+
out_offset_.byte_idx;
|
1294
|
+
*sending_length += iov[iov_size].iov_len;
|
1295
|
+
++(out_offset_.slice_idx);
|
1296
|
+
out_offset_.byte_idx = 0;
|
1297
|
+
}
|
1298
|
+
GPR_DEBUG_ASSERT(iov_size > 0);
|
1299
|
+
return iov_size;
|
1300
|
+
}
|
1301
|
+
|
1302
|
+
void TcpZerocopySendRecord::UpdateOffsetForBytesSent(size_t sending_length,
|
1303
|
+
size_t actually_sent) {
|
1304
|
+
size_t trailing = sending_length - actually_sent;
|
1305
|
+
while (trailing > 0) {
|
1306
|
+
size_t slice_length;
|
1307
|
+
out_offset_.slice_idx--;
|
1308
|
+
slice_length = GRPC_SLICE_LENGTH(buf_.slices[out_offset_.slice_idx]);
|
1309
|
+
if (slice_length > trailing) {
|
1310
|
+
out_offset_.byte_idx = slice_length - trailing;
|
1311
|
+
break;
|
1312
|
+
} else {
|
1313
|
+
trailing -= slice_length;
|
1314
|
+
}
|
1315
|
+
}
|
1316
|
+
}
|
1317
|
+
|
1318
|
+
// returns true if done, false if pending; if returning true, *error is set
|
1319
|
+
static bool do_tcp_flush_zerocopy(grpc_tcp* tcp, TcpZerocopySendRecord* record,
|
1320
|
+
grpc_error** error) {
|
1321
|
+
struct msghdr msg;
|
1322
|
+
struct iovec iov[MAX_WRITE_IOVEC];
|
1323
|
+
msg_iovlen_type iov_size;
|
1324
|
+
ssize_t sent_length = 0;
|
1325
|
+
size_t sending_length;
|
1326
|
+
size_t unwind_slice_idx;
|
1327
|
+
size_t unwind_byte_idx;
|
1328
|
+
while (true) {
|
1329
|
+
sending_length = 0;
|
1330
|
+
iov_size = record->PopulateIovs(&unwind_slice_idx, &unwind_byte_idx,
|
1331
|
+
&sending_length, iov);
|
1332
|
+
msg.msg_name = nullptr;
|
1333
|
+
msg.msg_namelen = 0;
|
1334
|
+
msg.msg_iov = iov;
|
1335
|
+
msg.msg_iovlen = iov_size;
|
1336
|
+
msg.msg_flags = 0;
|
1337
|
+
bool tried_sending_message = false;
|
1338
|
+
// Before calling sendmsg (with or without timestamps): we
|
1339
|
+
// take a single ref on the zerocopy send record.
|
1340
|
+
tcp->tcp_zerocopy_send_ctx.NoteSend(record);
|
1341
|
+
if (tcp->outgoing_buffer_arg != nullptr) {
|
1342
|
+
if (!tcp->ts_capable ||
|
1343
|
+
!tcp_write_with_timestamps(tcp, &msg, sending_length, &sent_length,
|
1344
|
+
MSG_ZEROCOPY)) {
|
1345
|
+
/* We could not set socket options to collect Fathom timestamps.
|
1346
|
+
* Fallback on writing without timestamps. */
|
1347
|
+
tcp->ts_capable = false;
|
1348
|
+
tcp_shutdown_buffer_list(tcp);
|
1349
|
+
} else {
|
1350
|
+
tried_sending_message = true;
|
1351
|
+
}
|
1352
|
+
}
|
1353
|
+
if (!tried_sending_message) {
|
1354
|
+
msg.msg_control = nullptr;
|
1355
|
+
msg.msg_controllen = 0;
|
1356
|
+
GRPC_STATS_INC_TCP_WRITE_SIZE(sending_length);
|
1357
|
+
GRPC_STATS_INC_TCP_WRITE_IOV_SIZE(iov_size);
|
1358
|
+
sent_length = tcp_send(tcp->fd, &msg, MSG_ZEROCOPY);
|
1359
|
+
}
|
1360
|
+
if (sent_length < 0) {
|
1361
|
+
// If this particular send failed, drop ref taken earlier in this method.
|
1362
|
+
tcp->tcp_zerocopy_send_ctx.UndoSend();
|
1363
|
+
if (errno == EAGAIN) {
|
1364
|
+
record->UnwindIfThrottled(unwind_slice_idx, unwind_byte_idx);
|
1365
|
+
return false;
|
1366
|
+
} else if (errno == EPIPE) {
|
1367
|
+
*error = tcp_annotate_error(GRPC_OS_ERROR(errno, "sendmsg"), tcp);
|
1368
|
+
tcp_shutdown_buffer_list(tcp);
|
1369
|
+
return true;
|
1370
|
+
} else {
|
1371
|
+
*error = tcp_annotate_error(GRPC_OS_ERROR(errno, "sendmsg"), tcp);
|
1372
|
+
tcp_shutdown_buffer_list(tcp);
|
1373
|
+
return true;
|
1374
|
+
}
|
1375
|
+
}
|
1376
|
+
tcp->bytes_counter += sent_length;
|
1377
|
+
record->UpdateOffsetForBytesSent(sending_length,
|
1378
|
+
static_cast<size_t>(sent_length));
|
1379
|
+
if (record->AllSlicesSent()) {
|
1380
|
+
*error = GRPC_ERROR_NONE;
|
1381
|
+
return true;
|
1382
|
+
}
|
1383
|
+
}
|
1384
|
+
}
|
1385
|
+
|
1386
|
+
static void UnrefMaybePutZerocopySendRecord(grpc_tcp* tcp,
|
1387
|
+
TcpZerocopySendRecord* record,
|
1388
|
+
uint32_t seq,
|
1389
|
+
const char* /* tag */) {
|
1390
|
+
if (record->Unref()) {
|
1391
|
+
tcp->tcp_zerocopy_send_ctx.PutSendRecord(record);
|
1392
|
+
}
|
1393
|
+
}
|
1394
|
+
|
1395
|
+
static bool tcp_flush_zerocopy(grpc_tcp* tcp, TcpZerocopySendRecord* record,
|
1396
|
+
grpc_error** error) {
|
1397
|
+
bool done = do_tcp_flush_zerocopy(tcp, record, error);
|
1398
|
+
if (done) {
|
1399
|
+
// Either we encountered an error, or we successfully sent all the bytes.
|
1400
|
+
// In either case, we're done with this record.
|
1401
|
+
UnrefMaybePutZerocopySendRecord(tcp, record, 0, "flush_done");
|
1402
|
+
}
|
1403
|
+
return done;
|
1404
|
+
}
|
1405
|
+
|
916
1406
|
static bool tcp_flush(grpc_tcp* tcp, grpc_error** error) {
|
917
1407
|
struct msghdr msg;
|
918
1408
|
struct iovec iov[MAX_WRITE_IOVEC];
|
@@ -927,7 +1417,7 @@ static bool tcp_flush(grpc_tcp* tcp, grpc_error** error) {
|
|
927
1417
|
// buffer as we write
|
928
1418
|
size_t outgoing_slice_idx = 0;
|
929
1419
|
|
930
|
-
|
1420
|
+
while (true) {
|
931
1421
|
sending_length = 0;
|
932
1422
|
unwind_slice_idx = outgoing_slice_idx;
|
933
1423
|
unwind_byte_idx = tcp->outgoing_byte_idx;
|
@@ -1027,12 +1517,21 @@ static void tcp_handle_write(void* arg /* grpc_tcp */, grpc_error* error) {
|
|
1027
1517
|
if (error != GRPC_ERROR_NONE) {
|
1028
1518
|
cb = tcp->write_cb;
|
1029
1519
|
tcp->write_cb = nullptr;
|
1520
|
+
if (tcp->current_zerocopy_send != nullptr) {
|
1521
|
+
UnrefMaybePutZerocopySendRecord(tcp, tcp->current_zerocopy_send, 0,
|
1522
|
+
"handle_write_err");
|
1523
|
+
tcp->current_zerocopy_send = nullptr;
|
1524
|
+
}
|
1030
1525
|
grpc_core::Closure::Run(DEBUG_LOCATION, cb, GRPC_ERROR_REF(error));
|
1031
1526
|
TCP_UNREF(tcp, "write");
|
1032
1527
|
return;
|
1033
1528
|
}
|
1034
1529
|
|
1035
|
-
|
1530
|
+
bool flush_result =
|
1531
|
+
tcp->current_zerocopy_send != nullptr
|
1532
|
+
? tcp_flush_zerocopy(tcp, tcp->current_zerocopy_send, &error)
|
1533
|
+
: tcp_flush(tcp, &error);
|
1534
|
+
if (!flush_result) {
|
1036
1535
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
|
1037
1536
|
gpr_log(GPR_INFO, "write: delayed");
|
1038
1537
|
}
|
@@ -1042,6 +1541,7 @@ static void tcp_handle_write(void* arg /* grpc_tcp */, grpc_error* error) {
|
|
1042
1541
|
} else {
|
1043
1542
|
cb = tcp->write_cb;
|
1044
1543
|
tcp->write_cb = nullptr;
|
1544
|
+
tcp->current_zerocopy_send = nullptr;
|
1045
1545
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
|
1046
1546
|
const char* str = grpc_error_string(error);
|
1047
1547
|
gpr_log(GPR_INFO, "write: %s", str);
|
@@ -1057,6 +1557,7 @@ static void tcp_write(grpc_endpoint* ep, grpc_slice_buffer* buf,
|
|
1057
1557
|
GPR_TIMER_SCOPE("tcp_write", 0);
|
1058
1558
|
grpc_tcp* tcp = reinterpret_cast<grpc_tcp*>(ep);
|
1059
1559
|
grpc_error* error = GRPC_ERROR_NONE;
|
1560
|
+
TcpZerocopySendRecord* zerocopy_send_record = nullptr;
|
1060
1561
|
|
1061
1562
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
|
1062
1563
|
size_t i;
|
@@ -1073,8 +1574,8 @@ static void tcp_write(grpc_endpoint* ep, grpc_slice_buffer* buf,
|
|
1073
1574
|
}
|
1074
1575
|
|
1075
1576
|
GPR_ASSERT(tcp->write_cb == nullptr);
|
1577
|
+
GPR_DEBUG_ASSERT(tcp->current_zerocopy_send == nullptr);
|
1076
1578
|
|
1077
|
-
tcp->outgoing_buffer_arg = arg;
|
1078
1579
|
if (buf->length == 0) {
|
1079
1580
|
grpc_core::Closure::Run(
|
1080
1581
|
DEBUG_LOCATION, cb,
|
@@ -1085,15 +1586,26 @@ static void tcp_write(grpc_endpoint* ep, grpc_slice_buffer* buf,
|
|
1085
1586
|
tcp_shutdown_buffer_list(tcp);
|
1086
1587
|
return;
|
1087
1588
|
}
|
1088
|
-
|
1089
|
-
|
1589
|
+
|
1590
|
+
zerocopy_send_record = tcp_get_send_zerocopy_record(tcp, buf);
|
1591
|
+
if (zerocopy_send_record == nullptr) {
|
1592
|
+
// Either not enough bytes, or couldn't allocate a zerocopy context.
|
1593
|
+
tcp->outgoing_buffer = buf;
|
1594
|
+
tcp->outgoing_byte_idx = 0;
|
1595
|
+
}
|
1596
|
+
tcp->outgoing_buffer_arg = arg;
|
1090
1597
|
if (arg) {
|
1091
1598
|
GPR_ASSERT(grpc_event_engine_can_track_errors());
|
1092
1599
|
}
|
1093
1600
|
|
1094
|
-
|
1601
|
+
bool flush_result =
|
1602
|
+
zerocopy_send_record != nullptr
|
1603
|
+
? tcp_flush_zerocopy(tcp, zerocopy_send_record, &error)
|
1604
|
+
: tcp_flush(tcp, &error);
|
1605
|
+
if (!flush_result) {
|
1095
1606
|
TCP_REF(tcp, "write");
|
1096
1607
|
tcp->write_cb = cb;
|
1608
|
+
tcp->current_zerocopy_send = zerocopy_send_record;
|
1097
1609
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
|
1098
1610
|
gpr_log(GPR_INFO, "write: delayed");
|
1099
1611
|
}
|
@@ -1121,6 +1633,7 @@ static void tcp_add_to_pollset_set(grpc_endpoint* ep,
|
|
1121
1633
|
static void tcp_delete_from_pollset_set(grpc_endpoint* ep,
|
1122
1634
|
grpc_pollset_set* pollset_set) {
|
1123
1635
|
grpc_tcp* tcp = reinterpret_cast<grpc_tcp*>(ep);
|
1636
|
+
ZerocopyDisableAndWaitForRemaining(tcp);
|
1124
1637
|
grpc_pollset_set_del_fd(pollset_set, tcp->em_fd);
|
1125
1638
|
}
|
1126
1639
|
|
@@ -1172,9 +1685,15 @@ static const grpc_endpoint_vtable vtable = {tcp_read,
|
|
1172
1685
|
grpc_endpoint* grpc_tcp_create(grpc_fd* em_fd,
|
1173
1686
|
const grpc_channel_args* channel_args,
|
1174
1687
|
const char* peer_string) {
|
1688
|
+
static constexpr bool kZerocpTxEnabledDefault = false;
|
1175
1689
|
int tcp_read_chunk_size = GRPC_TCP_DEFAULT_READ_SLICE_SIZE;
|
1176
1690
|
int tcp_max_read_chunk_size = 4 * 1024 * 1024;
|
1177
1691
|
int tcp_min_read_chunk_size = 256;
|
1692
|
+
bool tcp_tx_zerocopy_enabled = kZerocpTxEnabledDefault;
|
1693
|
+
int tcp_tx_zerocopy_send_bytes_thresh =
|
1694
|
+
grpc_core::TcpZerocopySendCtx::kDefaultSendBytesThreshold;
|
1695
|
+
int tcp_tx_zerocopy_max_simult_sends =
|
1696
|
+
grpc_core::TcpZerocopySendCtx::kDefaultMaxSends;
|
1178
1697
|
grpc_resource_quota* resource_quota = grpc_resource_quota_create(nullptr);
|
1179
1698
|
if (channel_args != nullptr) {
|
1180
1699
|
for (size_t i = 0; i < channel_args->num_args; i++) {
|
@@ -1199,6 +1718,23 @@ grpc_endpoint* grpc_tcp_create(grpc_fd* em_fd,
|
|
1199
1718
|
resource_quota =
|
1200
1719
|
grpc_resource_quota_ref_internal(static_cast<grpc_resource_quota*>(
|
1201
1720
|
channel_args->args[i].value.pointer.p));
|
1721
|
+
} else if (0 == strcmp(channel_args->args[i].key,
|
1722
|
+
GRPC_ARG_TCP_TX_ZEROCOPY_ENABLED)) {
|
1723
|
+
tcp_tx_zerocopy_enabled = grpc_channel_arg_get_bool(
|
1724
|
+
&channel_args->args[i], kZerocpTxEnabledDefault);
|
1725
|
+
} else if (0 == strcmp(channel_args->args[i].key,
|
1726
|
+
GRPC_ARG_TCP_TX_ZEROCOPY_SEND_BYTES_THRESHOLD)) {
|
1727
|
+
grpc_integer_options options = {
|
1728
|
+
grpc_core::TcpZerocopySendCtx::kDefaultSendBytesThreshold, 0,
|
1729
|
+
INT_MAX};
|
1730
|
+
tcp_tx_zerocopy_send_bytes_thresh =
|
1731
|
+
grpc_channel_arg_get_integer(&channel_args->args[i], options);
|
1732
|
+
} else if (0 == strcmp(channel_args->args[i].key,
|
1733
|
+
GRPC_ARG_TCP_TX_ZEROCOPY_MAX_SIMULT_SENDS)) {
|
1734
|
+
grpc_integer_options options = {
|
1735
|
+
grpc_core::TcpZerocopySendCtx::kDefaultMaxSends, 0, INT_MAX};
|
1736
|
+
tcp_tx_zerocopy_max_simult_sends =
|
1737
|
+
grpc_channel_arg_get_integer(&channel_args->args[i], options);
|
1202
1738
|
}
|
1203
1739
|
}
|
1204
1740
|
}
|
@@ -1215,6 +1751,7 @@ grpc_endpoint* grpc_tcp_create(grpc_fd* em_fd,
|
|
1215
1751
|
tcp->fd = grpc_fd_wrapped_fd(em_fd);
|
1216
1752
|
tcp->read_cb = nullptr;
|
1217
1753
|
tcp->write_cb = nullptr;
|
1754
|
+
tcp->current_zerocopy_send = nullptr;
|
1218
1755
|
tcp->release_fd_cb = nullptr;
|
1219
1756
|
tcp->release_fd = nullptr;
|
1220
1757
|
tcp->incoming_buffer = nullptr;
|
@@ -1228,6 +1765,20 @@ grpc_endpoint* grpc_tcp_create(grpc_fd* em_fd,
|
|
1228
1765
|
tcp->socket_ts_enabled = false;
|
1229
1766
|
tcp->ts_capable = true;
|
1230
1767
|
tcp->outgoing_buffer_arg = nullptr;
|
1768
|
+
new (&tcp->tcp_zerocopy_send_ctx) TcpZerocopySendCtx(
|
1769
|
+
tcp_tx_zerocopy_max_simult_sends, tcp_tx_zerocopy_send_bytes_thresh);
|
1770
|
+
if (tcp_tx_zerocopy_enabled && !tcp->tcp_zerocopy_send_ctx.memory_limited()) {
|
1771
|
+
#ifdef GRPC_LINUX_ERRQUEUE
|
1772
|
+
const int enable = 1;
|
1773
|
+
auto err =
|
1774
|
+
setsockopt(tcp->fd, SOL_SOCKET, SO_ZEROCOPY, &enable, sizeof(enable));
|
1775
|
+
if (err == 0) {
|
1776
|
+
tcp->tcp_zerocopy_send_ctx.set_enabled(true);
|
1777
|
+
} else {
|
1778
|
+
gpr_log(GPR_ERROR, "Failed to set zerocopy options on the socket.");
|
1779
|
+
}
|
1780
|
+
#endif
|
1781
|
+
}
|
1231
1782
|
/* paired with unref in grpc_tcp_destroy */
|
1232
1783
|
new (&tcp->refcount) grpc_core::RefCount(1, &grpc_tcp_trace);
|
1233
1784
|
gpr_atm_no_barrier_store(&tcp->shutdown_count, 0);
|
@@ -1294,6 +1845,7 @@ void grpc_tcp_destroy_and_release_fd(grpc_endpoint* ep, int* fd,
|
|
1294
1845
|
grpc_slice_buffer_reset_and_unref_internal(&tcp->last_read_buffer);
|
1295
1846
|
if (grpc_event_engine_can_track_errors()) {
|
1296
1847
|
/* Stop errors notification. */
|
1848
|
+
ZerocopyDisableAndWaitForRemaining(tcp);
|
1297
1849
|
gpr_atm_no_barrier_store(&tcp->stop_error_notification, true);
|
1298
1850
|
grpc_fd_set_error(tcp->em_fd);
|
1299
1851
|
}
|