grpc 1.15.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 +8591 -13387
- data/etc/roots.pem +455 -130
- data/include/grpc/grpc.h +39 -9
- data/include/grpc/grpc_posix.h +0 -8
- data/include/grpc/grpc_security.h +409 -14
- data/include/grpc/grpc_security_constants.h +55 -22
- data/include/grpc/impl/codegen/atm_gcc_sync.h +2 -0
- data/include/grpc/impl/codegen/atm_windows.h +2 -0
- data/include/grpc/impl/codegen/byte_buffer.h +13 -0
- data/include/grpc/impl/codegen/compression_types.h +2 -1
- data/include/grpc/impl/codegen/gpr_types.h +1 -1
- data/include/grpc/impl/codegen/grpc_types.h +111 -16
- data/include/grpc/impl/codegen/port_platform.h +171 -9
- data/include/grpc/impl/codegen/slice.h +2 -22
- data/include/grpc/impl/codegen/status.h +2 -1
- data/include/grpc/impl/codegen/sync.h +5 -3
- data/include/grpc/impl/codegen/sync_abseil.h +36 -0
- data/include/grpc/impl/codegen/sync_generic.h +1 -1
- data/include/grpc/impl/codegen/sync_posix.h +18 -0
- data/include/grpc/module.modulemap +25 -37
- data/include/grpc/slice.h +3 -3
- data/include/grpc/support/alloc.h +0 -16
- data/include/grpc/support/sync_abseil.h +26 -0
- data/src/core/ext/filters/client_channel/backend_metric.cc +81 -0
- data/src/core/ext/filters/client_channel/backend_metric.h +36 -0
- data/src/core/ext/filters/client_channel/backup_poller.cc +26 -19
- data/src/core/ext/filters/client_channel/backup_poller.h +8 -2
- data/src/core/ext/filters/client_channel/channel_connectivity.cc +21 -5
- data/src/core/ext/filters/client_channel/client_channel.cc +2888 -2206
- data/src/core/ext/filters/client_channel/client_channel.h +26 -6
- data/src/core/ext/filters/client_channel/client_channel_channelz.cc +54 -72
- data/src/core/ext/filters/client_channel/client_channel_channelz.h +33 -26
- data/src/core/ext/filters/client_channel/client_channel_factory.cc +22 -34
- data/src/core/ext/filters/client_channel/client_channel_factory.h +12 -39
- data/src/core/ext/filters/client_channel/client_channel_plugin.cc +13 -14
- data/src/core/ext/filters/client_channel/connector.h +43 -37
- data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +179 -0
- data/src/core/ext/filters/client_channel/global_subchannel_pool.h +68 -0
- data/src/core/ext/filters/client_channel/health/health_check_client.cc +606 -0
- data/src/core/ext/filters/client_channel/health/health_check_client.h +175 -0
- data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +177 -158
- data/src/core/ext/filters/client_channel/http_connect_handshaker.h +1 -1
- data/src/core/ext/filters/client_channel/http_proxy.cc +125 -121
- data/src/core/ext/filters/client_channel/http_proxy.h +5 -1
- data/src/core/ext/filters/client_channel/lb_policy.cc +105 -26
- data/src/core/ext/filters/client_channel/lb_policy.h +352 -152
- 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/client_load_reporting_filter.cc +64 -47
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +1010 -1155
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +7 -0
- 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.h +12 -3
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +53 -40
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +10 -5
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +19 -16
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +157 -271
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +43 -59
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +235 -384
- 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 +174 -409
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +157 -285
- 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 +417 -0
- 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 +32 -0
- 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 +7 -91
- data/src/core/ext/filters/client_channel/lb_policy_registry.cc +93 -8
- data/src/core/ext/filters/client_channel/lb_policy_registry.h +13 -2
- data/src/core/ext/filters/client_channel/local_subchannel_pool.cc +96 -0
- data/src/core/ext/filters/client_channel/local_subchannel_pool.h +57 -0
- data/src/core/ext/filters/client_channel/parse_address.cc +76 -30
- data/src/core/ext/filters/client_channel/parse_address.h +4 -1
- data/src/core/ext/filters/client_channel/proxy_mapper.h +14 -34
- data/src/core/ext/filters/client_channel/proxy_mapper_registry.cc +46 -79
- data/src/core/ext/filters/client_channel/proxy_mapper_registry.h +23 -17
- data/src/core/ext/filters/client_channel/resolver.cc +55 -5
- data/src/core/ext/filters/client_channel/resolver.h +61 -61
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +251 -226
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc +200 -36
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +18 -20
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +177 -0
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +8 -7
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +491 -131
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +434 -233
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +20 -12
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc +15 -7
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_libuv.cc +38 -0
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +7 -2
- data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.cc +28 -0
- data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.h +29 -0
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +92 -131
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +220 -134
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +27 -17
- data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +73 -99
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +184 -0
- data/src/core/ext/filters/client_channel/resolver_factory.h +13 -11
- data/src/core/ext/filters/client_channel/resolver_registry.cc +33 -14
- data/src/core/ext/filters/client_channel/resolver_registry.h +19 -13
- data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +443 -0
- data/src/core/ext/filters/client_channel/resolver_result_parsing.h +127 -0
- data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +348 -0
- data/src/core/ext/filters/client_channel/resolving_lb_policy.h +123 -0
- data/src/core/ext/filters/client_channel/retry_throttle.cc +5 -5
- data/src/core/ext/filters/client_channel/retry_throttle.h +2 -6
- data/src/core/ext/filters/client_channel/server_address.cc +48 -0
- data/src/core/ext/filters/client_channel/server_address.h +90 -0
- data/src/core/ext/filters/client_channel/service_config.cc +221 -0
- data/src/core/ext/filters/client_channel/service_config.h +123 -0
- 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 +903 -634
- data/src/core/ext/filters/client_channel/subchannel.h +364 -131
- data/src/core/ext/filters/client_channel/subchannel_interface.h +94 -0
- data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +97 -0
- data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +91 -0
- data/src/core/ext/filters/client_channel/xds/xds_api.cc +1906 -0
- data/src/core/ext/filters/client_channel/xds/xds_api.h +280 -0
- data/src/core/ext/filters/client_channel/xds/xds_bootstrap.cc +342 -0
- data/src/core/ext/filters/client_channel/xds/xds_bootstrap.h +88 -0
- data/src/core/ext/filters/client_channel/xds/xds_channel.h +46 -0
- data/src/core/ext/filters/client_channel/xds/xds_channel_args.h +26 -0
- data/src/core/ext/filters/client_channel/xds/xds_channel_secure.cc +106 -0
- data/src/core/ext/filters/client_channel/xds/xds_client.cc +2367 -0
- data/src/core/ext/filters/client_channel/xds/xds_client.h +309 -0
- data/src/core/ext/filters/client_channel/xds/xds_client_stats.cc +115 -0
- data/src/core/ext/filters/client_channel/xds/xds_client_stats.h +211 -0
- data/src/core/ext/filters/client_idle/client_idle_filter.cc +440 -0
- data/src/core/ext/filters/deadline/deadline_filter.cc +49 -52
- data/src/core/ext/filters/deadline/deadline_filter.h +11 -14
- data/src/core/ext/filters/http/client/http_client_filter.cc +122 -85
- data/src/core/ext/filters/http/client/http_client_filter.h +1 -1
- data/src/core/ext/filters/http/client_authority_filter.cc +26 -24
- data/src/core/ext/filters/http/http_filters_plugin.cc +27 -12
- data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +342 -295
- 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/http/server/http_server_filter.cc +156 -54
- data/src/core/ext/filters/max_age/max_age_filter.cc +76 -63
- data/src/core/ext/filters/message_size/message_size_filter.cc +218 -119
- data/src/core/ext/filters/message_size/message_size_filter.h +33 -0
- data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +19 -17
- data/src/core/ext/transport/chttp2/alpn/alpn.h +1 -1
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +141 -164
- data/src/core/ext/transport/chttp2/client/chttp2_connector.h +31 -1
- data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +36 -34
- data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc +1 -1
- data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +133 -138
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +128 -30
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +2 -2
- data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +8 -11
- data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +4 -4
- data/src/core/ext/transport/chttp2/transport/bin_decoder.h +4 -4
- data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +11 -12
- data/src/core/ext/transport/chttp2/transport/bin_encoder.h +4 -3
- data/src/core/ext/transport/chttp2/transport/chttp2_plugin.cc +9 -7
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +911 -716
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +8 -1
- data/src/core/ext/transport/chttp2/transport/context_list.cc +69 -0
- data/src/core/ext/transport/chttp2/transport/context_list.h +53 -0
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +5 -5
- data/src/core/ext/transport/chttp2/transport/flow_control.h +22 -30
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +47 -54
- data/src/core/ext/transport/chttp2/transport/frame_data.h +11 -13
- data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +9 -8
- data/src/core/ext/transport/chttp2/transport/frame_goaway.h +5 -5
- data/src/core/ext/transport/chttp2/transport/frame_ping.cc +7 -5
- data/src/core/ext/transport/chttp2/transport/frame_ping.h +3 -4
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +17 -7
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +11 -4
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +11 -7
- data/src/core/ext/transport/chttp2/transport/frame_settings.h +4 -4
- data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +7 -6
- data/src/core/ext/transport/chttp2/transport/frame_window_update.h +3 -4
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +548 -351
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +26 -15
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +201 -120
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +14 -6
- data/src/core/ext/transport/chttp2/transport/hpack_table.cc +47 -169
- data/src/core/ext/transport/chttp2/transport/hpack_table.h +70 -17
- 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/incoming_metadata.cc +10 -17
- data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +19 -10
- data/src/core/ext/transport/chttp2/transport/internal.h +226 -161
- data/src/core/ext/transport/chttp2/transport/parsing.cc +166 -110
- data/src/core/ext/transport/chttp2/transport/stream_lists.cc +3 -3
- data/src/core/ext/transport/chttp2/transport/stream_map.cc +28 -18
- data/src/core/ext/transport/chttp2/transport/stream_map.h +2 -3
- data/src/core/ext/transport/chttp2/transport/writing.cc +95 -35
- data/src/core/ext/transport/inproc/inproc_transport.cc +406 -388
- 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 +21 -0
- data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.h +35 -0
- 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 +28 -0
- data/src/core/ext/upb-generated/envoy/api/v2/cds.upb.h +53 -0
- 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 +74 -0
- data/src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.h +218 -0
- data/src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.c +35 -0
- data/src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.h +69 -0
- data/src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.c +55 -0
- data/src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.h +305 -0
- data/src/core/ext/upb-generated/envoy/api/v2/core/address.upb.c +112 -0
- data/src/core/ext/upb-generated/envoy/api/v2/core/address.upb.h +328 -0
- 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 +313 -0
- data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.h +897 -0
- data/src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.c +96 -0
- data/src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.h +322 -0
- 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 +197 -0
- data/src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.h +642 -0
- data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.c +172 -0
- data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.h +673 -0
- data/src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.c +36 -0
- data/src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.h +80 -0
- data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.c +152 -0
- data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.h +518 -0
- 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 +129 -0
- data/src/core/ext/upb-generated/envoy/api/v2/discovery.upb.h +392 -0
- data/src/core/ext/upb-generated/envoy/api/v2/eds.upb.c +31 -0
- data/src/core/ext/upb-generated/envoy/api/v2/eds.upb.h +53 -0
- 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 +18 -0
- data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.h +33 -0
- 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 +112 -0
- data/src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.h +324 -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 +24 -0
- data/src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.h +50 -0
- data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.c +54 -0
- data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.h +134 -0
- data/src/core/ext/upb-generated/envoy/type/http.upb.c +17 -0
- data/src/core/ext/upb-generated/envoy/type/http.upb.h +36 -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 +39 -0
- data/src/core/ext/upb-generated/envoy/type/percent.upb.h +87 -0
- data/src/core/ext/upb-generated/envoy/type/range.upb.c +50 -0
- data/src/core/ext/upb-generated/envoy/type/range.upb.h +112 -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/gogoproto/gogo.upb.c +17 -0
- data/src/core/ext/upb-generated/gogoproto/gogo.upb.h +30 -0
- data/src/core/ext/upb-generated/google/api/annotations.upb.c +18 -0
- data/src/core/ext/upb-generated/google/api/annotations.upb.h +30 -0
- data/src/core/ext/upb-generated/google/api/http.upb.c +66 -0
- data/src/core/ext/upb-generated/google/api/http.upb.h +190 -0
- data/src/core/ext/upb-generated/google/protobuf/any.upb.c +27 -0
- data/src/core/ext/upb-generated/google/protobuf/any.upb.h +58 -0
- data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +486 -0
- data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +1696 -0
- data/src/core/ext/upb-generated/google/protobuf/duration.upb.c +27 -0
- data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +58 -0
- data/src/core/ext/upb-generated/google/protobuf/empty.upb.c +22 -0
- data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +50 -0
- data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +79 -0
- data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +215 -0
- data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.c +27 -0
- data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +58 -0
- data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.c +106 -0
- data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +238 -0
- data/src/core/ext/upb-generated/google/rpc/status.upb.c +33 -0
- data/src/core/ext/upb-generated/google/rpc/status.upb.h +74 -0
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c +49 -0
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +126 -0
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +212 -0
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +693 -0
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c +42 -0
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +109 -0
- data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c +36 -0
- data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +84 -0
- data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c +141 -0
- data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +393 -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/udpa/data/orca/v1/orca_load_report.upb.c +58 -0
- data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.h +144 -0
- data/src/core/ext/upb-generated/validate/validate.upb.c +448 -0
- data/src/core/ext/upb-generated/validate/validate.upb.h +2073 -0
- data/src/core/lib/avl/avl.cc +1 -1
- data/src/core/lib/channel/channel_args.cc +54 -115
- data/src/core/lib/channel/channel_args.h +44 -40
- data/src/core/lib/channel/channel_stack.cc +6 -5
- data/src/core/lib/channel/channel_stack.h +52 -28
- data/src/core/lib/channel/channel_stack_builder.cc +14 -2
- data/src/core/lib/channel/channel_stack_builder.h +8 -0
- data/src/core/lib/channel/channel_trace.cc +75 -85
- data/src/core/lib/channel/channel_trace.h +37 -32
- data/src/core/lib/channel/channelz.cc +496 -106
- data/src/core/lib/channel/channelz.h +262 -61
- data/src/core/lib/channel/channelz_registry.cc +191 -69
- data/src/core/lib/channel/channelz_registry.h +30 -53
- data/src/core/lib/channel/connected_channel.cc +30 -27
- data/src/core/lib/channel/context.h +6 -6
- data/src/core/lib/channel/handshaker.cc +150 -218
- data/src/core/lib/channel/handshaker.h +111 -102
- data/src/core/lib/channel/handshaker_factory.h +9 -17
- data/src/core/lib/channel/handshaker_registry.cc +57 -49
- data/src/core/lib/channel/handshaker_registry.h +21 -15
- data/src/core/lib/channel/status_util.cc +2 -3
- data/src/core/lib/compression/algorithm_metadata.h +3 -3
- data/src/core/lib/compression/compression.cc +17 -12
- data/src/core/lib/compression/compression_args.cc +134 -0
- data/src/core/lib/compression/compression_args.h +56 -0
- data/src/core/lib/compression/compression_internal.cc +17 -13
- data/src/core/lib/compression/compression_internal.h +9 -1
- data/src/core/lib/compression/message_compress.cc +8 -3
- data/src/core/lib/compression/stream_compression.cc +3 -2
- data/src/core/lib/compression/stream_compression.h +2 -2
- data/src/core/lib/compression/stream_compression_gzip.cc +9 -9
- data/src/core/lib/compression/stream_compression_identity.cc +5 -7
- data/src/core/lib/debug/stats.cc +21 -27
- data/src/core/lib/debug/stats.h +3 -1
- data/src/core/lib/debug/trace.cc +16 -7
- data/src/core/lib/debug/trace.h +20 -4
- data/src/core/lib/gpr/alloc.cc +4 -29
- data/src/core/lib/gpr/arena.h +13 -7
- data/src/core/lib/gpr/cpu_linux.cc +1 -1
- data/src/core/lib/gpr/cpu_posix.cc +5 -3
- data/src/core/lib/gpr/env.h +3 -6
- data/src/core/lib/gpr/env_linux.cc +15 -21
- data/src/core/lib/gpr/env_posix.cc +5 -5
- data/src/core/lib/gpr/env_windows.cc +7 -5
- data/src/core/lib/gpr/log.cc +9 -13
- data/src/core/lib/gpr/log_linux.cc +2 -2
- data/src/core/lib/gpr/log_posix.cc +4 -3
- data/src/core/lib/gpr/spinlock.h +2 -3
- data/src/core/lib/gpr/string.cc +29 -35
- data/src/core/lib/gpr/string.h +11 -19
- data/src/core/lib/gpr/sync_abseil.cc +116 -0
- data/src/core/lib/gpr/sync_posix.cc +78 -9
- data/src/core/lib/gpr/sync_windows.cc +4 -2
- data/src/core/lib/gpr/time.cc +12 -0
- data/src/core/lib/gpr/time_posix.cc +22 -3
- data/src/core/lib/gpr/time_precise.cc +123 -36
- data/src/core/lib/gpr/time_precise.h +37 -0
- data/src/core/lib/gprpp/arena.cc +103 -0
- data/src/core/lib/gprpp/arena.h +120 -0
- data/src/core/lib/gprpp/atomic.h +79 -5
- data/src/core/lib/gprpp/debug_location.h +3 -2
- data/src/core/lib/gprpp/fork.cc +30 -56
- data/src/core/lib/gprpp/fork.h +18 -3
- data/src/core/lib/gprpp/global_config.h +96 -0
- data/src/core/lib/gprpp/global_config_custom.h +29 -0
- data/src/core/lib/gprpp/global_config_env.cc +135 -0
- data/src/core/lib/gprpp/global_config_env.h +131 -0
- data/src/core/lib/gprpp/global_config_generic.h +44 -0
- data/src/core/lib/gprpp/host_port.cc +112 -0
- data/src/core/lib/gprpp/host_port.h +56 -0
- data/src/core/lib/gprpp/map.h +53 -0
- data/src/core/lib/gprpp/memory.h +11 -83
- data/src/core/lib/gprpp/mpscq.cc +108 -0
- data/src/core/lib/gprpp/mpscq.h +98 -0
- data/src/core/lib/gprpp/orphanable.h +27 -95
- data/src/core/lib/gprpp/ref_counted.h +228 -83
- data/src/core/lib/gprpp/ref_counted_ptr.h +39 -16
- data/src/core/lib/gprpp/sync.h +135 -0
- data/src/core/lib/gprpp/thd.h +54 -12
- data/src/core/lib/gprpp/thd_posix.cc +57 -13
- data/src/core/lib/gprpp/thd_windows.cc +54 -33
- data/src/core/lib/http/format_request.cc +46 -65
- data/src/core/lib/http/httpcli.cc +11 -11
- data/src/core/lib/http/httpcli.h +2 -3
- data/src/core/lib/http/httpcli_security_connector.cc +121 -107
- data/src/core/lib/http/parser.cc +4 -3
- data/src/core/lib/http/parser.h +9 -9
- data/src/core/lib/iomgr/buffer_list.cc +308 -0
- data/src/core/lib/iomgr/buffer_list.h +165 -0
- data/src/core/lib/iomgr/call_combiner.cc +113 -69
- data/src/core/lib/iomgr/call_combiner.h +96 -74
- data/src/core/lib/iomgr/cfstream_handle.cc +209 -0
- data/src/core/lib/iomgr/cfstream_handle.h +90 -0
- data/src/core/lib/iomgr/closure.h +44 -141
- data/src/core/lib/iomgr/combiner.cc +50 -86
- data/src/core/lib/iomgr/combiner.h +31 -9
- data/src/core/lib/iomgr/dualstack_socket_posix.cc +47 -0
- data/src/core/lib/iomgr/dynamic_annotations.h +67 -0
- data/src/core/lib/iomgr/endpoint.cc +8 -4
- data/src/core/lib/iomgr/endpoint.h +12 -4
- data/src/core/lib/iomgr/endpoint_cfstream.cc +376 -0
- data/src/core/lib/iomgr/endpoint_cfstream.h +49 -0
- data/src/core/lib/iomgr/endpoint_pair.h +2 -3
- data/src/core/lib/iomgr/endpoint_pair_posix.cc +1 -1
- data/src/core/lib/iomgr/endpoint_pair_windows.cc +2 -2
- data/src/core/lib/iomgr/error.cc +71 -64
- data/src/core/lib/iomgr/error.h +74 -10
- data/src/core/lib/iomgr/error_cfstream.cc +52 -0
- data/src/core/lib/iomgr/error_cfstream.h +31 -0
- data/src/core/lib/iomgr/error_internal.h +1 -3
- 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 +99 -69
- data/src/core/lib/iomgr/ev_epollex_linux.cc +238 -259
- data/src/core/lib/iomgr/ev_poll_posix.cc +52 -504
- data/src/core/lib/iomgr/ev_posix.cc +54 -31
- data/src/core/lib/iomgr/ev_posix.h +29 -3
- data/src/core/lib/iomgr/ev_windows.cc +2 -2
- data/src/core/lib/iomgr/exec_ctx.cc +79 -8
- data/src/core/lib/iomgr/exec_ctx.h +163 -21
- data/src/core/lib/iomgr/executor.cc +137 -101
- data/src/core/lib/iomgr/executor.h +54 -48
- data/src/core/lib/iomgr/executor/mpmcqueue.cc +183 -0
- data/src/core/lib/iomgr/executor/mpmcqueue.h +175 -0
- data/src/core/lib/iomgr/executor/threadpool.cc +137 -0
- data/src/core/lib/iomgr/executor/threadpool.h +149 -0
- data/src/core/lib/iomgr/fork_posix.cc +15 -8
- data/src/core/lib/iomgr/grpc_if_nametoindex.h +30 -0
- data/src/core/lib/iomgr/grpc_if_nametoindex_posix.cc +42 -0
- data/src/core/lib/iomgr/grpc_if_nametoindex_unsupported.cc +38 -0
- data/src/core/lib/iomgr/internal_errqueue.cc +67 -0
- data/src/core/lib/iomgr/internal_errqueue.h +191 -0
- data/src/core/lib/iomgr/iocp_windows.cc +2 -2
- data/src/core/lib/iomgr/iomgr.cc +27 -13
- data/src/core/lib/iomgr/iomgr.h +19 -0
- data/src/core/lib/iomgr/iomgr_custom.cc +18 -2
- data/src/core/lib/iomgr/iomgr_custom.h +2 -0
- data/src/core/lib/iomgr/iomgr_internal.cc +14 -0
- data/src/core/lib/iomgr/iomgr_internal.h +16 -0
- data/src/core/lib/iomgr/iomgr_posix.cc +23 -1
- data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +171 -0
- data/src/core/lib/iomgr/iomgr_uv.cc +3 -0
- data/src/core/lib/iomgr/iomgr_windows.cc +20 -1
- data/src/core/lib/iomgr/load_file.cc +1 -0
- data/src/core/lib/iomgr/lockfree_event.cc +16 -15
- 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/polling_entity.h +4 -4
- data/src/core/lib/iomgr/pollset_custom.cc +5 -5
- 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/pollset_windows.cc +16 -2
- data/src/core/lib/iomgr/port.h +49 -2
- data/src/core/lib/iomgr/python_util.h +46 -0
- data/src/core/lib/iomgr/resolve_address.h +5 -7
- data/src/core/lib/iomgr/resolve_address_custom.cc +36 -50
- data/src/core/lib/iomgr/resolve_address_custom.h +4 -2
- data/src/core/lib/iomgr/resolve_address_posix.cc +22 -25
- data/src/core/lib/iomgr/resolve_address_windows.cc +14 -26
- data/src/core/lib/iomgr/resource_quota.cc +175 -110
- data/src/core/lib/iomgr/resource_quota.h +30 -11
- data/src/core/lib/iomgr/sockaddr_utils.cc +26 -31
- 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 +145 -27
- data/src/core/lib/iomgr/socket_utils_posix.h +26 -0
- data/src/core/lib/iomgr/socket_windows.cc +21 -2
- data/src/core/lib/iomgr/socket_windows.h +9 -1
- data/src/core/lib/iomgr/tcp_client_cfstream.cc +215 -0
- data/src/core/lib/iomgr/tcp_client_custom.cc +19 -7
- data/src/core/lib/iomgr/tcp_client_posix.cc +40 -38
- data/src/core/lib/iomgr/tcp_client_posix.h +6 -6
- data/src/core/lib/iomgr/tcp_client_windows.cc +11 -10
- data/src/core/lib/iomgr/tcp_custom.cc +37 -32
- data/src/core/lib/iomgr/tcp_custom.h +3 -0
- data/src/core/lib/iomgr/tcp_posix.cc +1196 -168
- data/src/core/lib/iomgr/tcp_posix.h +3 -0
- data/src/core/lib/iomgr/tcp_server.cc +5 -0
- data/src/core/lib/iomgr/tcp_server.h +21 -0
- data/src/core/lib/iomgr/tcp_server_custom.cc +43 -30
- data/src/core/lib/iomgr/tcp_server_posix.cc +97 -21
- data/src/core/lib/iomgr/tcp_server_utils_posix.h +3 -0
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +19 -16
- data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +8 -11
- data/src/core/lib/iomgr/tcp_server_windows.cc +19 -15
- data/src/core/lib/iomgr/tcp_uv.cc +8 -9
- data/src/core/lib/iomgr/tcp_windows.cc +110 -48
- data/src/core/lib/iomgr/time_averaged_stats.h +2 -3
- data/src/core/lib/iomgr/timer.h +2 -1
- data/src/core/lib/iomgr/timer_custom.cc +7 -5
- data/src/core/lib/iomgr/timer_generic.cc +42 -40
- data/src/core/lib/iomgr/timer_generic.h +39 -0
- data/src/core/lib/iomgr/timer_heap.cc +2 -2
- data/src/core/lib/iomgr/timer_heap.h +5 -6
- data/src/core/lib/iomgr/timer_manager.cc +34 -16
- data/src/core/lib/iomgr/timer_manager.h +4 -2
- data/src/core/lib/iomgr/udp_server.cc +31 -30
- data/src/core/lib/iomgr/udp_server.h +6 -12
- data/src/core/lib/iomgr/wakeup_fd_eventfd.cc +3 -4
- data/src/core/lib/iomgr/wakeup_fd_posix.cc +1 -19
- 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/profiling/basic_timers.cc +12 -6
- data/src/core/lib/security/context/security_context.cc +92 -119
- data/src/core/lib/security/context/security_context.h +79 -48
- data/src/core/lib/security/credentials/alts/alts_credentials.cc +39 -48
- data/src/core/lib/security/credentials/alts/alts_credentials.h +37 -10
- data/src/core/lib/security/credentials/alts/check_gcp_environment.cc +1 -1
- data/src/core/lib/security/credentials/alts/check_gcp_environment_no_op.cc +2 -2
- data/src/core/lib/security/credentials/alts/check_gcp_environment_windows.cc +45 -57
- data/src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc +2 -1
- data/src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc +3 -2
- data/src/core/lib/security/credentials/composite/composite_credentials.cc +119 -159
- data/src/core/lib/security/credentials/composite/composite_credentials.h +71 -24
- data/src/core/lib/security/credentials/credentials.cc +18 -142
- data/src/core/lib/security/credentials/credentials.h +141 -105
- data/src/core/lib/security/credentials/fake/fake_credentials.cc +48 -72
- data/src/core/lib/security/credentials/fake/fake_credentials.h +28 -5
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +186 -99
- data/src/core/lib/security/credentials/google_default/google_default_credentials.h +32 -6
- data/src/core/lib/security/credentials/iam/iam_credentials.cc +33 -39
- data/src/core/lib/security/credentials/iam/iam_credentials.h +22 -4
- data/src/core/lib/security/credentials/jwt/json_token.cc +32 -58
- data/src/core/lib/security/credentials/jwt/json_token.h +5 -7
- data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +70 -88
- data/src/core/lib/security/credentials/jwt/jwt_credentials.h +41 -10
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +159 -170
- data/src/core/lib/security/credentials/jwt/jwt_verifier.h +4 -5
- data/src/core/lib/security/credentials/local/local_credentials.cc +21 -34
- data/src/core/lib/security/credentials/local/local_credentials.h +32 -11
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +438 -203
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +98 -33
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +89 -91
- data/src/core/lib/security/credentials/plugin/plugin_credentials.h +43 -17
- data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +84 -83
- data/src/core/lib/security/credentials/ssl/ssl_credentials.h +60 -15
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +245 -0
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +313 -0
- 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 +301 -0
- data/src/core/lib/security/security_connector/alts/alts_security_connector.h +76 -0
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +324 -0
- data/src/core/lib/security/security_connector/fake/fake_security_connector.h +45 -0
- 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 +15 -9
- data/src/core/lib/security/security_connector/local/local_security_connector.cc +281 -0
- data/src/core/lib/security/security_connector/local/local_security_connector.h +59 -0
- data/src/core/lib/security/security_connector/security_connector.cc +40 -1158
- data/src/core/lib/security/security_connector/security_connector.h +100 -209
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +439 -0
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +77 -0
- data/src/core/lib/security/security_connector/ssl_utils.cc +563 -0
- data/src/core/lib/security/security_connector/ssl_utils.h +184 -0
- data/src/core/lib/security/security_connector/ssl_utils_config.cc +32 -0
- data/src/core/lib/security/security_connector/ssl_utils_config.h +30 -0
- 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/auth_filters.h +5 -2
- data/src/core/lib/security/transport/client_auth_filter.cc +164 -116
- data/src/core/lib/security/transport/secure_endpoint.cc +70 -53
- data/src/core/lib/security/transport/security_handshaker.cc +340 -297
- data/src/core/lib/security/transport/security_handshaker.h +14 -3
- data/src/core/lib/security/transport/server_auth_filter.cc +115 -55
- data/src/core/lib/security/transport/target_authority_table.h +1 -1
- data/src/core/lib/security/util/json_util.cc +34 -13
- data/src/core/lib/security/util/json_util.h +5 -3
- data/src/core/lib/slice/b64.cc +3 -4
- data/src/core/lib/slice/b64.h +3 -4
- data/src/core/lib/slice/percent_encoding.cc +3 -3
- data/src/core/lib/slice/percent_encoding.h +3 -3
- data/src/core/lib/slice/slice.cc +219 -153
- data/src/core/lib/slice/slice_buffer.cc +60 -26
- data/src/core/lib/slice/slice_hash_table.h +9 -15
- data/src/core/lib/slice/slice_intern.cc +186 -143
- data/src/core/lib/slice/slice_internal.h +318 -3
- data/src/core/lib/slice/slice_string_helpers.cc +10 -1
- data/src/core/lib/slice/slice_string_helpers.h +3 -1
- data/src/core/lib/slice/slice_utils.h +200 -0
- data/src/core/lib/slice/slice_weak_hash_table.h +10 -17
- data/src/core/lib/surface/api_trace.h +1 -1
- data/src/core/lib/surface/byte_buffer_reader.cc +15 -43
- data/src/core/lib/surface/call.cc +419 -438
- data/src/core/lib/surface/call.h +14 -5
- data/src/core/lib/surface/call_details.cc +0 -1
- data/src/core/lib/surface/call_log_batch.cc +51 -60
- data/src/core/lib/surface/channel.cc +205 -144
- data/src/core/lib/surface/channel.h +85 -14
- data/src/core/lib/surface/channel_init.h +5 -0
- data/src/core/lib/surface/channel_ping.cc +3 -4
- data/src/core/lib/surface/completion_queue.cc +322 -281
- data/src/core/lib/surface/completion_queue.h +7 -21
- data/src/core/lib/surface/completion_queue_factory.cc +4 -4
- 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.cc +86 -31
- data/src/core/lib/surface/init.h +1 -0
- data/src/core/lib/surface/init_secure.cc +4 -4
- data/src/core/lib/surface/lame_client.cc +46 -35
- data/src/core/lib/surface/server.cc +815 -476
- data/src/core/lib/surface/server.h +50 -9
- data/src/core/lib/surface/validate_metadata.cc +18 -8
- data/src/core/lib/surface/validate_metadata.h +13 -2
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/bdp_estimator.cc +3 -3
- data/src/core/lib/transport/bdp_estimator.h +2 -2
- data/src/core/lib/transport/byte_stream.cc +5 -7
- data/src/core/lib/transport/byte_stream.h +13 -12
- data/src/core/lib/transport/connectivity_state.cc +114 -129
- data/src/core/lib/transport/connectivity_state.h +102 -58
- data/src/core/lib/transport/error_utils.cc +25 -2
- data/src/core/lib/transport/metadata.cc +428 -288
- data/src/core/lib/transport/metadata.h +307 -26
- data/src/core/lib/transport/metadata_batch.cc +81 -18
- data/src/core/lib/transport/metadata_batch.h +47 -6
- data/src/core/lib/transport/static_metadata.cc +1150 -521
- data/src/core/lib/transport/static_metadata.h +311 -317
- data/src/core/lib/transport/status_conversion.cc +7 -15
- data/src/core/lib/transport/status_metadata.cc +11 -4
- data/src/core/lib/transport/status_metadata.h +18 -0
- data/src/core/lib/transport/timeout_encoding.cc +8 -1
- data/src/core/lib/transport/timeout_encoding.h +4 -3
- data/src/core/lib/transport/transport.cc +49 -80
- data/src/core/lib/transport/transport.h +132 -54
- data/src/core/lib/transport/transport_impl.h +1 -1
- data/src/core/lib/transport/transport_op_string.cc +67 -105
- data/src/core/lib/uri/uri_parser.cc +314 -0
- data/src/core/lib/uri/uri_parser.h +49 -0
- data/src/core/plugin_registry/grpc_plugin_registry.cc +32 -4
- data/src/core/tsi/alts/crypt/aes_gcm.cc +0 -2
- data/src/core/tsi/alts/frame_protector/alts_unseal_privacy_integrity_crypter.cc +1 -1
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +715 -144
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +49 -35
- data/src/core/tsi/alts/handshaker/alts_shared_resource.cc +83 -0
- data/src/core/tsi/alts/handshaker/alts_shared_resource.h +73 -0
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +373 -217
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +45 -24
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +43 -10
- data/src/core/tsi/alts/handshaker/alts_tsi_utils.cc +13 -7
- data/src/core/tsi/alts/handshaker/alts_tsi_utils.h +4 -3
- data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +75 -48
- data/src/core/tsi/alts/handshaker/transport_security_common_api.h +35 -27
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.cc +2 -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 +13 -3
- data/src/core/tsi/fake_transport_security.cc +26 -25
- data/src/core/tsi/fake_transport_security.h +2 -0
- data/src/core/tsi/local_transport_security.cc +8 -6
- data/src/core/tsi/ssl/session_cache/ssl_session.h +2 -6
- data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +2 -3
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +14 -11
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +4 -13
- data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +2 -3
- data/src/core/tsi/ssl_transport_security.cc +289 -125
- data/src/core/tsi/ssl_transport_security.h +52 -13
- data/src/core/tsi/ssl_types.h +0 -2
- data/src/core/tsi/transport_security.cc +31 -1
- data/src/core/tsi/transport_security.h +8 -10
- data/src/core/tsi/transport_security_grpc.cc +7 -0
- data/src/core/tsi/transport_security_grpc.h +8 -3
- data/src/core/tsi/transport_security_interface.h +15 -3
- data/src/ruby/bin/math_pb.rb +23 -21
- data/src/ruby/ext/grpc/ext-export.clang +1 -0
- data/src/ruby/ext/grpc/ext-export.gcc +6 -0
- data/src/ruby/ext/grpc/extconf.rb +18 -4
- data/src/ruby/ext/grpc/rb_call.c +11 -2
- data/src/ruby/ext/grpc/rb_call_credentials.c +12 -6
- data/src/ruby/ext/grpc/rb_channel.c +18 -11
- data/src/ruby/ext/grpc/rb_channel_credentials.c +8 -4
- data/src/ruby/ext/grpc/rb_compression_options.c +9 -7
- data/src/ruby/ext/grpc/rb_enable_cpp.cc +22 -0
- data/src/ruby/ext/grpc/rb_event_thread.c +2 -0
- data/src/ruby/ext/grpc/rb_grpc.c +48 -60
- data/src/ruby/ext/grpc/rb_grpc.h +5 -1
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +42 -6
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +67 -13
- data/src/ruby/ext/grpc/rb_server.c +10 -4
- data/src/ruby/lib/grpc.rb +2 -0
- data/src/ruby/lib/grpc/core/status_codes.rb +135 -0
- data/src/ruby/lib/grpc/errors.rb +122 -46
- data/src/ruby/lib/grpc/generic/active_call.rb +2 -3
- data/src/ruby/lib/grpc/generic/bidi_call.rb +2 -2
- data/src/ruby/lib/grpc/generic/interceptors.rb +4 -4
- data/src/ruby/lib/grpc/generic/rpc_desc.rb +3 -3
- data/src/ruby/lib/grpc/generic/rpc_server.rb +64 -4
- data/src/ruby/lib/grpc/generic/service.rb +6 -5
- data/src/ruby/lib/grpc/google_rpc_status_utils.rb +9 -4
- data/src/ruby/lib/grpc/grpc.rb +1 -1
- data/src/ruby/lib/grpc/structs.rb +15 -0
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/pb/README.md +1 -1
- data/src/ruby/pb/generate_proto_ruby.sh +5 -3
- data/src/ruby/pb/grpc/health/checker.rb +2 -3
- data/src/ruby/pb/grpc/health/v1/health_pb.rb +16 -13
- data/src/ruby/pb/grpc/health/v1/health_services_pb.rb +18 -0
- data/src/ruby/pb/src/proto/grpc/testing/empty_pb.rb +4 -2
- data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +92 -69
- data/src/ruby/pb/src/proto/grpc/testing/test_pb.rb +2 -0
- data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +16 -0
- data/src/ruby/spec/channel_spec.rb +44 -0
- data/src/ruby/spec/client_auth_spec.rb +5 -5
- data/src/ruby/spec/debug_message_spec.rb +134 -0
- data/src/ruby/spec/errors_spec.rb +142 -0
- data/src/ruby/spec/generic/client_stub_spec.rb +13 -9
- data/src/ruby/spec/generic/rpc_server_spec.rb +25 -3
- data/src/ruby/spec/generic/service_spec.rb +2 -0
- data/src/ruby/spec/google_rpc_status_utils_spec.rb +2 -2
- data/src/ruby/spec/pb/codegen/grpc/testing/package_options.proto +28 -0
- data/src/ruby/spec/pb/codegen/grpc/testing/package_options_import.proto +22 -0
- data/src/ruby/spec/pb/codegen/grpc/testing/package_options_ruby_style.proto +39 -0
- data/src/ruby/spec/pb/codegen/package_option_spec.rb +78 -0
- data/src/ruby/spec/support/services.rb +29 -22
- 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-with-bazel/src/crypto/asn1/a_bool.c +123 -0
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_d2i_fp.c +93 -0
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_dup.c +87 -0
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_enum.c +195 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/a_gentm.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_i2d_fp.c +88 -0
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_int.c +420 -0
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_mbstr.c +305 -0
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +286 -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-with-bazel/src/crypto/asn1/a_strnid.c +313 -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-with-bazel/src/crypto/asn1/asn1_lib.c +446 -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-with-bazel/src/crypto/asn1/tasn_enc.c +664 -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-with-bazel/src/crypto/base64/base64.c +466 -0
- data/third_party/boringssl-with-bazel/src/crypto/bio/bio.c +700 -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-with-bazel/src/crypto/bio/socket.c +206 -0
- data/third_party/boringssl-with-bazel/src/crypto/bio/socket_helper.c +118 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/bn_extra/bn_asn1.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/bn_extra/convert.c +470 -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-with-bazel/src/crypto/bytestring/ber.c +265 -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-with-bazel/src/crypto/bytestring/internal.h +96 -0
- data/third_party/boringssl-with-bazel/src/crypto/bytestring/unicode.c +155 -0
- data/third_party/boringssl-with-bazel/src/crypto/chacha/chacha.c +184 -0
- data/third_party/boringssl-with-bazel/src/crypto/chacha/internal.h +45 -0
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/cipher_extra.c +143 -0
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/derive_key.c +152 -0
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_aesccm.c +447 -0
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_aesctrhmac.c +283 -0
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_aesgcmsiv.c +891 -0
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_chacha20poly1305.c +418 -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-with-bazel/src/crypto/cipher_extra/e_tls.c +688 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cipher_extra/internal.h +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/tls_cbc.c +491 -0
- data/third_party/boringssl-with-bazel/src/crypto/cmac/cmac.c +278 -0
- data/third_party/boringssl-with-bazel/src/crypto/conf/conf.c +810 -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-with-bazel/src/crypto/cpu-arm-linux.h +201 -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-with-bazel/src/crypto/ec_extra/ec_asn1.c +574 -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-with-bazel/src/crypto/ecdsa_extra/ecdsa_asn1.c +267 -0
- data/third_party/boringssl-with-bazel/src/crypto/engine/engine.c +99 -0
- data/third_party/boringssl-with-bazel/src/crypto/err/err.c +850 -0
- data/third_party/boringssl-with-bazel/src/crypto/err/internal.h +58 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/evp/digestsign.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/evp/evp.c +443 -0
- data/third_party/boringssl-with-bazel/src/crypto/evp/evp_asn1.c +388 -0
- data/third_party/boringssl-with-bazel/src/crypto/evp/evp_ctx.c +484 -0
- data/third_party/boringssl-with-bazel/src/crypto/evp/internal.h +269 -0
- data/third_party/boringssl-with-bazel/src/crypto/evp/p_dsa_asn1.c +273 -0
- data/third_party/boringssl-with-bazel/src/crypto/evp/p_ec.c +286 -0
- data/third_party/boringssl-with-bazel/src/crypto/evp/p_ec_asn1.c +255 -0
- data/third_party/boringssl-with-bazel/src/crypto/evp/p_ed25519.c +104 -0
- data/third_party/boringssl-with-bazel/src/crypto/evp/p_ed25519_asn1.c +221 -0
- data/third_party/boringssl-with-bazel/src/crypto/evp/p_rsa.c +648 -0
- data/third_party/boringssl-with-bazel/src/crypto/evp/p_rsa_asn1.c +194 -0
- data/third_party/boringssl-with-bazel/src/crypto/evp/p_x25519.c +110 -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-with-bazel/src/crypto/evp/scrypt.c +213 -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-with-bazel/src/crypto/fipsmodule/aes/key_wrap.c +236 -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-with-bazel/src/crypto/fipsmodule/bn/bn.c +445 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/bytes.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/cmp.c +200 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/ctx.c +236 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/div.c +886 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/div_extra.c +87 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/exponentiation.c +1288 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/gcd.c +378 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/gcd_extra.c +325 -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-with-bazel/src/crypto/fipsmodule/bn/montgomery_inv.c +186 -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-with-bazel/src/crypto/fipsmodule/bn/random.c +341 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/rsaz_exp.c +226 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/rsaz_exp.h +104 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/shift.c +364 -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-with-bazel/src/crypto/fipsmodule/cipher/cipher.c +620 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_aes.c +1302 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_des.c +237 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/internal.h +128 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/delocate.h +89 -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-with-bazel/src/crypto/fipsmodule/digest/digest.c +271 -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-with-bazel/src/crypto/fipsmodule/digest/md32_common.h +268 -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-with-bazel/src/crypto/fipsmodule/ec/p256-x86_64.h +153 -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-with-bazel/src/crypto/fipsmodule/ec/util.c +255 -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-with-bazel/src/crypto/fipsmodule/fips_shared_support.c +32 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/hmac/hmac.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/is_fips.c +29 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md4/md4.c +256 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md5/internal.h +37 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md5/md5.c +301 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cbc.c +167 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cfb.c +202 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ctr.c +200 -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-with-bazel/src/crypto/fipsmodule/modes/ofb.c +96 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/modes/polyval.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/ctrdrbg.c +202 -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-with-bazel/src/crypto/fipsmodule/rsa/padding.c +695 -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-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +654 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/internal.h +53 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/sha/sha1-altivec.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha1.c +371 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha256.c +343 -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-with-bazel/src/crypto/lhash/lhash.c +348 -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-with-bazel/src/crypto/pem/pem_all.c +261 -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-with-bazel/src/crypto/pkcs7/pkcs7.c +159 -0
- data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7_x509.c +385 -0
- data/third_party/boringssl-with-bazel/src/crypto/pkcs8/internal.h +131 -0
- data/third_party/boringssl-with-bazel/src/crypto/pkcs8/p5_pbev2.c +316 -0
- data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8.c +530 -0
- data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +1305 -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-with-bazel/src/crypto/pool/internal.h +45 -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-with-bazel/src/crypto/rand_extra/fuchsia.c +30 -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-with-bazel/src/crypto/refcount_lock.c +53 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/rsa_extra/rsa_asn1.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/rsa_extra/rsa_print.c +22 -0
- data/third_party/boringssl-with-bazel/src/crypto/siphash/siphash.c +82 -0
- data/third_party/boringssl-with-bazel/src/crypto/stack/stack.c +431 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/thread.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/thread_none.c +59 -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-with-bazel/src/crypto/x509/a_strex.c +653 -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-with-bazel/src/crypto/x509/asn1_gen.c +842 -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-with-bazel/src/crypto/x509/t_crl.c +125 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/t_req.c +244 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509.c +544 -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-with-bazel/src/crypto/x509/x509_def.c +103 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x509_ext.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_lu.c +834 -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-with-bazel/src/crypto/x509/x509_txt.c +204 -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-with-bazel/src/crypto/x509/x509cset.c +210 -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-with-bazel/src/crypto/x509/x_x509.c +334 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_x509a.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/ext_dat.h +141 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +56 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_cache.c +286 -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-with-bazel/src/crypto/x509v3/pcy_node.c +189 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_tree.c +842 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_akey.c +207 -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-with-bazel/src/crypto/x509v3/v3_conf.c +463 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +503 -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-with-bazel/src/crypto/x509v3/v3_genn.c +246 -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-with-bazel/src/crypto/x509v3/v3_lib.c +371 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_ncons.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ocsp.c +68 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pci.c +288 -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-with-bazel/src/crypto/x509v3/v3_skey.c +155 -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-with-bazel/src/include/openssl/aead.h +459 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/aes.h +195 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/arm_arch.h +0 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +911 -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-with-bazel/src/include/openssl/base64.h +190 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/bio.h +933 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/blowfish.h +93 -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-with-bazel/src/include/openssl/cast.h +96 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/chacha.h +0 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +638 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/cmac.h +91 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/conf.h +180 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/cpu.h +212 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +149 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/curve25519.h +201 -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-with-bazel/src/include/openssl/e_os2.h +18 -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-with-bazel/src/include/openssl/ecdh.h +118 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h +205 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/engine.h +109 -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-with-bazel/src/include/openssl/hmac.h +186 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/hrss.h +100 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/is_boringssl.h +0 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/lhash.h +282 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/md4.h +108 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/md5.h +109 -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-with-bazel/src/include/openssl/obj.h +236 -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-with-bazel/src/include/openssl/pem.h +435 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/pkcs12.h +0 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/pkcs7.h +215 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/pkcs8.h +269 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/poly1305.h +49 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/pool.h +102 -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-with-bazel/src/include/openssl/ripemd.h +108 -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-with-bazel/src/include/openssl/siphash.h +37 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/span.h +199 -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-with-bazel/src/include/openssl/ssl3.h +333 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/stack.h +542 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/thread.h +191 -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-with-bazel/src/include/openssl/type_check.h +90 -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-with-bazel/src/include/openssl/x509v3.h +831 -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-with-bazel/src/ssl/d1_srtp.cc +232 -0
- data/third_party/boringssl-with-bazel/src/ssl/dtls_method.cc +200 -0
- data/third_party/boringssl-with-bazel/src/ssl/dtls_record.cc +353 -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-with-bazel/src/ssl/ssl_aead_ctx.cc +432 -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-with-bazel/src/ssl/ssl_file.cc +585 -0
- data/third_party/boringssl-with-bazel/src/ssl/ssl_key_share.cc +397 -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-with-bazel/src/ssl/ssl_transcript.cc +277 -0
- data/third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc +394 -0
- data/third_party/boringssl-with-bazel/src/ssl/ssl_x509.cc +1358 -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/cares/cares/ares.h +12 -0
- data/third_party/cares/cares/ares_create_query.c +5 -1
- data/third_party/cares/cares/ares_data.c +74 -73
- data/third_party/cares/cares/ares_destroy.c +6 -1
- data/third_party/cares/cares/ares_gethostbyaddr.c +5 -5
- data/third_party/cares/cares/ares_gethostbyname.c +15 -4
- data/third_party/cares/cares/ares_getnameinfo.c +11 -0
- data/third_party/cares/cares/ares_init.c +274 -173
- data/third_party/cares/cares/ares_library_init.c +21 -3
- data/third_party/cares/cares/ares_options.c +6 -2
- data/third_party/cares/cares/ares_parse_naptr_reply.c +7 -6
- data/third_party/cares/cares/ares_parse_ptr_reply.c +4 -2
- data/third_party/cares/cares/ares_platform.c +7 -0
- data/third_party/cares/cares/ares_private.h +19 -11
- data/third_party/cares/cares/ares_process.c +27 -2
- data/third_party/cares/cares/ares_rules.h +1 -1
- data/third_party/cares/cares/ares_search.c +7 -0
- data/third_party/cares/cares/ares_send.c +6 -0
- data/third_party/cares/cares/ares_strsplit.c +174 -0
- data/third_party/cares/cares/ares_strsplit.h +43 -0
- data/third_party/cares/cares/ares_version.h +4 -4
- data/third_party/cares/cares/config-win32.h +1 -1
- data/third_party/cares/cares/inet_ntop.c +2 -3
- data/third_party/cares/config_darwin/ares_config.h +3 -0
- data/third_party/cares/config_freebsd/ares_config.h +3 -0
- data/third_party/cares/config_linux/ares_config.h +3 -0
- data/third_party/cares/config_openbsd/ares_config.h +3 -0
- data/third_party/upb/upb/decode.c +609 -0
- data/third_party/upb/upb/decode.h +21 -0
- data/third_party/upb/upb/encode.c +378 -0
- data/third_party/upb/upb/encode.h +21 -0
- data/third_party/upb/upb/generated_util.h +105 -0
- data/third_party/upb/upb/msg.c +111 -0
- data/third_party/upb/upb/msg.h +69 -0
- data/third_party/upb/upb/port.c +26 -0
- data/third_party/upb/upb/port_def.inc +150 -0
- data/third_party/upb/upb/port_undef.inc +21 -0
- data/third_party/upb/upb/table.c +913 -0
- data/third_party/upb/upb/table.int.h +507 -0
- data/third_party/upb/upb/upb.c +261 -0
- data/third_party/upb/upb/upb.h +364 -0
- metadata +968 -542
- data/src/boringssl/err_data.c +0 -1362
- data/src/core/ext/filters/client_channel/connector.cc +0 -41
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/google/protobuf/duration.pb.c +0 -19
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/google/protobuf/duration.pb.h +0 -54
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/google/protobuf/timestamp.pb.c +0 -19
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/google/protobuf/timestamp.pb.h +0 -54
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.c +0 -89
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.h +0 -164
- data/src/core/ext/filters/client_channel/lb_policy_factory.cc +0 -163
- data/src/core/ext/filters/client_channel/method_params.cc +0 -178
- data/src/core/ext/filters/client_channel/method_params.h +0 -78
- data/src/core/ext/filters/client_channel/proxy_mapper.cc +0 -48
- data/src/core/ext/filters/client_channel/subchannel_index.cc +0 -254
- data/src/core/ext/filters/client_channel/subchannel_index.h +0 -79
- data/src/core/ext/filters/client_channel/uri_parser.cc +0 -314
- data/src/core/ext/filters/client_channel/uri_parser.h +0 -50
- data/src/core/lib/channel/handshaker_factory.cc +0 -41
- data/src/core/lib/gpr/arena.cc +0 -145
- data/src/core/lib/gpr/host_port.cc +0 -98
- data/src/core/lib/gpr/host_port.h +0 -43
- data/src/core/lib/gpr/mpscq.cc +0 -117
- data/src/core/lib/gpr/mpscq.h +0 -86
- data/src/core/lib/gprpp/abstract.h +0 -37
- data/src/core/lib/gprpp/atomic_with_atm.h +0 -57
- data/src/core/lib/gprpp/atomic_with_std.h +0 -35
- data/src/core/lib/gprpp/inlined_vector.h +0 -186
- data/src/core/lib/gprpp/mutex_lock.h +0 -42
- data/src/core/lib/iomgr/ev_epollsig_linux.cc +0 -1743
- data/src/core/lib/iomgr/ev_epollsig_linux.h +0 -35
- data/src/core/lib/iomgr/network_status_tracker.cc +0 -36
- data/src/core/lib/iomgr/network_status_tracker.h +0 -32
- data/src/core/lib/iomgr/wakeup_fd_cv.cc +0 -107
- data/src/core/lib/iomgr/wakeup_fd_cv.h +0 -69
- data/src/core/lib/json/json.cc +0 -97
- 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/security_connector/alts_security_connector.cc +0 -288
- data/src/core/lib/security/security_connector/alts_security_connector.h +0 -69
- data/src/core/lib/security/security_connector/local_security_connector.cc +0 -245
- data/src/core/lib/security/security_connector/local_security_connector.h +0 -58
- data/src/core/lib/transport/service_config.cc +0 -106
- data/src/core/lib/transport/service_config.h +0 -249
- data/src/core/tsi/alts/handshaker/alts_handshaker_service_api.cc +0 -520
- data/src/core/tsi/alts/handshaker/alts_handshaker_service_api.h +0 -323
- data/src/core/tsi/alts/handshaker/alts_handshaker_service_api_util.cc +0 -143
- data/src/core/tsi/alts/handshaker/alts_handshaker_service_api_util.h +0 -149
- data/src/core/tsi/alts/handshaker/alts_tsi_event.cc +0 -73
- data/src/core/tsi/alts/handshaker/alts_tsi_event.h +0 -93
- data/src/core/tsi/alts/handshaker/altscontext.pb.c +0 -47
- data/src/core/tsi/alts/handshaker/altscontext.pb.h +0 -63
- data/src/core/tsi/alts/handshaker/handshaker.pb.c +0 -122
- data/src/core/tsi/alts/handshaker/handshaker.pb.h +0 -254
- data/src/core/tsi/alts/handshaker/transport_security_common.pb.c +0 -49
- data/src/core/tsi/alts/handshaker/transport_security_common.pb.h +0 -78
- data/src/core/tsi/alts_transport_security.cc +0 -63
- data/src/core/tsi/alts_transport_security.h +0 -47
- data/src/core/tsi/grpc_shadow_boringssl.h +0 -3006
- data/third_party/boringssl/crypto/asn1/a_bool.c +0 -110
- data/third_party/boringssl/crypto/asn1/a_d2i_fp.c +0 -297
- data/third_party/boringssl/crypto/asn1/a_dup.c +0 -111
- data/third_party/boringssl/crypto/asn1/a_enum.c +0 -195
- data/third_party/boringssl/crypto/asn1/a_i2d_fp.c +0 -150
- data/third_party/boringssl/crypto/asn1/a_int.c +0 -479
- data/third_party/boringssl/crypto/asn1/a_mbstr.c +0 -411
- data/third_party/boringssl/crypto/asn1/a_object.c +0 -275
- data/third_party/boringssl/crypto/asn1/a_strnid.c +0 -312
- data/third_party/boringssl/crypto/asn1/a_time.c +0 -213
- data/third_party/boringssl/crypto/asn1/asn1_lib.c +0 -442
- data/third_party/boringssl/crypto/asn1/tasn_enc.c +0 -662
- data/third_party/boringssl/crypto/base64/base64.c +0 -466
- data/third_party/boringssl/crypto/bio/bio.c +0 -636
- data/third_party/boringssl/crypto/bio/connect.c +0 -542
- data/third_party/boringssl/crypto/bio/fd.c +0 -276
- data/third_party/boringssl/crypto/bio/file.c +0 -315
- data/third_party/boringssl/crypto/bio/pair.c +0 -489
- data/third_party/boringssl/crypto/bio/socket.c +0 -202
- data/third_party/boringssl/crypto/bio/socket_helper.c +0 -114
- data/third_party/boringssl/crypto/bn_extra/convert.c +0 -466
- data/third_party/boringssl/crypto/buf/buf.c +0 -231
- data/third_party/boringssl/crypto/bytestring/ber.c +0 -261
- data/third_party/boringssl/crypto/bytestring/cbb.c +0 -668
- data/third_party/boringssl/crypto/bytestring/cbs.c +0 -618
- data/third_party/boringssl/crypto/bytestring/internal.h +0 -75
- data/third_party/boringssl/crypto/chacha/chacha.c +0 -167
- data/third_party/boringssl/crypto/cipher_extra/cipher_extra.c +0 -114
- data/third_party/boringssl/crypto/cipher_extra/derive_key.c +0 -152
- data/third_party/boringssl/crypto/cipher_extra/e_aesccm.c +0 -203
- data/third_party/boringssl/crypto/cipher_extra/e_aesctrhmac.c +0 -281
- data/third_party/boringssl/crypto/cipher_extra/e_aesgcmsiv.c +0 -867
- data/third_party/boringssl/crypto/cipher_extra/e_chacha20poly1305.c +0 -326
- data/third_party/boringssl/crypto/cipher_extra/e_ssl3.c +0 -460
- data/third_party/boringssl/crypto/cipher_extra/e_tls.c +0 -680
- data/third_party/boringssl/crypto/cipher_extra/tls_cbc.c +0 -482
- data/third_party/boringssl/crypto/cmac/cmac.c +0 -241
- data/third_party/boringssl/crypto/conf/conf.c +0 -803
- data/third_party/boringssl/crypto/cpu-arm-linux.c +0 -363
- data/third_party/boringssl/crypto/cpu-intel.c +0 -288
- data/third_party/boringssl/crypto/crypto.c +0 -198
- 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 -946
- data/third_party/boringssl/crypto/ec_extra/ec_asn1.c +0 -562
- data/third_party/boringssl/crypto/ecdh/ecdh.c +0 -162
- data/third_party/boringssl/crypto/ecdsa_extra/ecdsa_asn1.c +0 -275
- data/third_party/boringssl/crypto/engine/engine.c +0 -98
- data/third_party/boringssl/crypto/err/err.c +0 -847
- data/third_party/boringssl/crypto/err/internal.h +0 -58
- data/third_party/boringssl/crypto/evp/evp.c +0 -362
- data/third_party/boringssl/crypto/evp/evp_asn1.c +0 -337
- data/third_party/boringssl/crypto/evp/evp_ctx.c +0 -446
- data/third_party/boringssl/crypto/evp/internal.h +0 -252
- data/third_party/boringssl/crypto/evp/p_dsa_asn1.c +0 -268
- data/third_party/boringssl/crypto/evp/p_ec.c +0 -239
- data/third_party/boringssl/crypto/evp/p_ec_asn1.c +0 -256
- data/third_party/boringssl/crypto/evp/p_ed25519.c +0 -71
- data/third_party/boringssl/crypto/evp/p_ed25519_asn1.c +0 -190
- data/third_party/boringssl/crypto/evp/p_rsa.c +0 -634
- data/third_party/boringssl/crypto/evp/p_rsa_asn1.c +0 -189
- data/third_party/boringssl/crypto/evp/scrypt.c +0 -209
- data/third_party/boringssl/crypto/fipsmodule/aes/aes.c +0 -1100
- data/third_party/boringssl/crypto/fipsmodule/aes/internal.h +0 -100
- data/third_party/boringssl/crypto/fipsmodule/aes/key_wrap.c +0 -138
- data/third_party/boringssl/crypto/fipsmodule/aes/mode_wrappers.c +0 -112
- data/third_party/boringssl/crypto/fipsmodule/bcm.c +0 -148
- data/third_party/boringssl/crypto/fipsmodule/bn/bn.c +0 -428
- data/third_party/boringssl/crypto/fipsmodule/bn/cmp.c +0 -200
- data/third_party/boringssl/crypto/fipsmodule/bn/ctx.c +0 -303
- data/third_party/boringssl/crypto/fipsmodule/bn/div.c +0 -895
- data/third_party/boringssl/crypto/fipsmodule/bn/exponentiation.c +0 -1356
- data/third_party/boringssl/crypto/fipsmodule/bn/gcd.c +0 -683
- data/third_party/boringssl/crypto/fipsmodule/bn/internal.h +0 -573
- data/third_party/boringssl/crypto/fipsmodule/bn/montgomery.c +0 -526
- data/third_party/boringssl/crypto/fipsmodule/bn/montgomery_inv.c +0 -185
- data/third_party/boringssl/crypto/fipsmodule/bn/mul.c +0 -876
- data/third_party/boringssl/crypto/fipsmodule/bn/prime.c +0 -1154
- data/third_party/boringssl/crypto/fipsmodule/bn/random.c +0 -351
- data/third_party/boringssl/crypto/fipsmodule/bn/rsaz_exp.c +0 -231
- data/third_party/boringssl/crypto/fipsmodule/bn/rsaz_exp.h +0 -33
- data/third_party/boringssl/crypto/fipsmodule/bn/shift.c +0 -364
- data/third_party/boringssl/crypto/fipsmodule/cipher/cipher.c +0 -615
- data/third_party/boringssl/crypto/fipsmodule/cipher/e_aes.c +0 -1437
- data/third_party/boringssl/crypto/fipsmodule/cipher/e_des.c +0 -233
- data/third_party/boringssl/crypto/fipsmodule/cipher/internal.h +0 -129
- data/third_party/boringssl/crypto/fipsmodule/delocate.h +0 -88
- data/third_party/boringssl/crypto/fipsmodule/digest/digest.c +0 -256
- data/third_party/boringssl/crypto/fipsmodule/digest/digests.c +0 -280
- data/third_party/boringssl/crypto/fipsmodule/digest/md32_common.h +0 -268
- data/third_party/boringssl/crypto/fipsmodule/ec/ec.c +0 -974
- data/third_party/boringssl/crypto/fipsmodule/ec/ec_key.c +0 -453
- data/third_party/boringssl/crypto/fipsmodule/ec/ec_montgomery.c +0 -270
- data/third_party/boringssl/crypto/fipsmodule/ec/internal.h +0 -337
- data/third_party/boringssl/crypto/fipsmodule/ec/oct.c +0 -373
- data/third_party/boringssl/crypto/fipsmodule/ec/p224-64.c +0 -1104
- data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64-table.h +0 -9503
- data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64.c +0 -447
- data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64.h +0 -117
- data/third_party/boringssl/crypto/fipsmodule/ec/simple.c +0 -1046
- data/third_party/boringssl/crypto/fipsmodule/ec/util.c +0 -104
- data/third_party/boringssl/crypto/fipsmodule/ec/wnaf.c +0 -354
- data/third_party/boringssl/crypto/fipsmodule/ecdsa/ecdsa.c +0 -458
- data/third_party/boringssl/crypto/fipsmodule/is_fips.c +0 -27
- data/third_party/boringssl/crypto/fipsmodule/md4/md4.c +0 -254
- data/third_party/boringssl/crypto/fipsmodule/md5/md5.c +0 -298
- data/third_party/boringssl/crypto/fipsmodule/modes/cbc.c +0 -211
- data/third_party/boringssl/crypto/fipsmodule/modes/ccm.c +0 -256
- data/third_party/boringssl/crypto/fipsmodule/modes/cfb.c +0 -234
- data/third_party/boringssl/crypto/fipsmodule/modes/ctr.c +0 -220
- data/third_party/boringssl/crypto/fipsmodule/modes/gcm.c +0 -1063
- data/third_party/boringssl/crypto/fipsmodule/modes/internal.h +0 -388
- data/third_party/boringssl/crypto/fipsmodule/modes/ofb.c +0 -95
- data/third_party/boringssl/crypto/fipsmodule/rand/ctrdrbg.c +0 -202
- data/third_party/boringssl/crypto/fipsmodule/rand/internal.h +0 -92
- data/third_party/boringssl/crypto/fipsmodule/rand/rand.c +0 -358
- data/third_party/boringssl/crypto/fipsmodule/rand/urandom.c +0 -302
- 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/padding.c +0 -692
- data/third_party/boringssl/crypto/fipsmodule/rsa/rsa.c +0 -875
- data/third_party/boringssl/crypto/fipsmodule/rsa/rsa_impl.c +0 -1218
- data/third_party/boringssl/crypto/fipsmodule/self_check/self_check.c +0 -581
- data/third_party/boringssl/crypto/fipsmodule/sha/sha1.c +0 -375
- data/third_party/boringssl/crypto/fipsmodule/sha/sha256.c +0 -337
- data/third_party/boringssl/crypto/fipsmodule/sha/sha512.c +0 -608
- data/third_party/boringssl/crypto/internal.h +0 -739
- data/third_party/boringssl/crypto/lhash/lhash.c +0 -336
- data/third_party/boringssl/crypto/mem.c +0 -235
- data/third_party/boringssl/crypto/obj/obj.c +0 -554
- data/third_party/boringssl/crypto/obj/obj_dat.h +0 -6244
- data/third_party/boringssl/crypto/pem/pem_all.c +0 -262
- data/third_party/boringssl/crypto/pem/pem_info.c +0 -379
- data/third_party/boringssl/crypto/pem/pem_lib.c +0 -776
- 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 -227
- data/third_party/boringssl/crypto/pkcs7/pkcs7.c +0 -166
- data/third_party/boringssl/crypto/pkcs7/pkcs7_x509.c +0 -233
- data/third_party/boringssl/crypto/pkcs8/internal.h +0 -120
- data/third_party/boringssl/crypto/pkcs8/p5_pbev2.c +0 -307
- data/third_party/boringssl/crypto/pkcs8/pkcs8.c +0 -513
- data/third_party/boringssl/crypto/pkcs8/pkcs8_x509.c +0 -789
- 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/internal.h +0 -45
- data/third_party/boringssl/crypto/pool/pool.c +0 -200
- data/third_party/boringssl/crypto/rand_extra/deterministic.c +0 -48
- data/third_party/boringssl/crypto/rand_extra/fuchsia.c +0 -43
- data/third_party/boringssl/crypto/rand_extra/windows.c +0 -53
- data/third_party/boringssl/crypto/refcount_lock.c +0 -53
- data/third_party/boringssl/crypto/stack/stack.c +0 -380
- data/third_party/boringssl/crypto/thread_none.c +0 -59
- data/third_party/boringssl/crypto/thread_pthread.c +0 -206
- data/third_party/boringssl/crypto/thread_win.c +0 -237
- data/third_party/boringssl/crypto/x509/a_strex.c +0 -633
- data/third_party/boringssl/crypto/x509/a_verify.c +0 -115
- data/third_party/boringssl/crypto/x509/asn1_gen.c +0 -841
- data/third_party/boringssl/crypto/x509/by_dir.c +0 -451
- data/third_party/boringssl/crypto/x509/by_file.c +0 -274
- data/third_party/boringssl/crypto/x509/t_crl.c +0 -128
- data/third_party/boringssl/crypto/x509/t_req.c +0 -246
- data/third_party/boringssl/crypto/x509/t_x509.c +0 -547
- data/third_party/boringssl/crypto/x509/x509_cmp.c +0 -477
- data/third_party/boringssl/crypto/x509/x509_def.c +0 -103
- data/third_party/boringssl/crypto/x509/x509_lu.c +0 -725
- 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 -322
- data/third_party/boringssl/crypto/x509/x509_set.c +0 -164
- data/third_party/boringssl/crypto/x509/x509_trs.c +0 -326
- data/third_party/boringssl/crypto/x509/x509_txt.c +0 -205
- data/third_party/boringssl/crypto/x509/x509_vfy.c +0 -2476
- data/third_party/boringssl/crypto/x509/x509_vpm.c +0 -670
- data/third_party/boringssl/crypto/x509/x509cset.c +0 -170
- data/third_party/boringssl/crypto/x509/x509name.c +0 -389
- data/third_party/boringssl/crypto/x509/x_all.c +0 -501
- data/third_party/boringssl/crypto/x509/x_x509.c +0 -328
- data/third_party/boringssl/crypto/x509v3/ext_dat.h +0 -143
- data/third_party/boringssl/crypto/x509v3/pcy_cache.c +0 -284
- data/third_party/boringssl/crypto/x509v3/pcy_node.c +0 -188
- data/third_party/boringssl/crypto/x509v3/pcy_tree.c +0 -840
- data/third_party/boringssl/crypto/x509v3/v3_akey.c +0 -204
- data/third_party/boringssl/crypto/x509v3/v3_alt.c +0 -623
- data/third_party/boringssl/crypto/x509v3/v3_conf.c +0 -462
- data/third_party/boringssl/crypto/x509v3/v3_cpols.c +0 -502
- data/third_party/boringssl/crypto/x509v3/v3_enum.c +0 -100
- data/third_party/boringssl/crypto/x509v3/v3_genn.c +0 -251
- data/third_party/boringssl/crypto/x509v3/v3_info.c +0 -219
- data/third_party/boringssl/crypto/x509v3/v3_lib.c +0 -370
- data/third_party/boringssl/crypto/x509v3/v3_pci.c +0 -287
- data/third_party/boringssl/crypto/x509v3/v3_purp.c +0 -866
- data/third_party/boringssl/crypto/x509v3/v3_skey.c +0 -152
- data/third_party/boringssl/crypto/x509v3/v3_utl.c +0 -1352
- data/third_party/boringssl/include/openssl/aead.h +0 -433
- data/third_party/boringssl/include/openssl/aes.h +0 -170
- data/third_party/boringssl/include/openssl/asn1.h +0 -981
- data/third_party/boringssl/include/openssl/base.h +0 -457
- data/third_party/boringssl/include/openssl/base64.h +0 -187
- data/third_party/boringssl/include/openssl/bio.h +0 -902
- data/third_party/boringssl/include/openssl/blowfish.h +0 -93
- data/third_party/boringssl/include/openssl/bn.h +0 -1019
- data/third_party/boringssl/include/openssl/buf.h +0 -137
- data/third_party/boringssl/include/openssl/bytestring.h +0 -505
- data/third_party/boringssl/include/openssl/cast.h +0 -96
- data/third_party/boringssl/include/openssl/cipher.h +0 -608
- data/third_party/boringssl/include/openssl/cmac.h +0 -87
- data/third_party/boringssl/include/openssl/conf.h +0 -183
- data/third_party/boringssl/include/openssl/cpu.h +0 -196
- data/third_party/boringssl/include/openssl/crypto.h +0 -122
- data/third_party/boringssl/include/openssl/curve25519.h +0 -201
- data/third_party/boringssl/include/openssl/dh.h +0 -298
- data/third_party/boringssl/include/openssl/digest.h +0 -316
- data/third_party/boringssl/include/openssl/dsa.h +0 -435
- data/third_party/boringssl/include/openssl/ec.h +0 -413
- data/third_party/boringssl/include/openssl/ec_key.h +0 -342
- data/third_party/boringssl/include/openssl/ecdh.h +0 -101
- data/third_party/boringssl/include/openssl/ecdsa.h +0 -199
- data/third_party/boringssl/include/openssl/engine.h +0 -109
- data/third_party/boringssl/include/openssl/err.h +0 -458
- data/third_party/boringssl/include/openssl/evp.h +0 -873
- data/third_party/boringssl/include/openssl/hmac.h +0 -186
- data/third_party/boringssl/include/openssl/lhash.h +0 -174
- data/third_party/boringssl/include/openssl/lhash_macros.h +0 -174
- data/third_party/boringssl/include/openssl/md4.h +0 -106
- data/third_party/boringssl/include/openssl/md5.h +0 -107
- data/third_party/boringssl/include/openssl/mem.h +0 -156
- data/third_party/boringssl/include/openssl/nid.h +0 -4242
- data/third_party/boringssl/include/openssl/obj.h +0 -233
- data/third_party/boringssl/include/openssl/pem.h +0 -397
- data/third_party/boringssl/include/openssl/pkcs7.h +0 -82
- data/third_party/boringssl/include/openssl/pkcs8.h +0 -230
- data/third_party/boringssl/include/openssl/poly1305.h +0 -51
- data/third_party/boringssl/include/openssl/pool.h +0 -91
- data/third_party/boringssl/include/openssl/rand.h +0 -125
- data/third_party/boringssl/include/openssl/ripemd.h +0 -107
- data/third_party/boringssl/include/openssl/rsa.h +0 -756
- data/third_party/boringssl/include/openssl/sha.h +0 -256
- data/third_party/boringssl/include/openssl/span.h +0 -191
- data/third_party/boringssl/include/openssl/ssl.h +0 -4740
- data/third_party/boringssl/include/openssl/ssl3.h +0 -332
- data/third_party/boringssl/include/openssl/stack.h +0 -485
- data/third_party/boringssl/include/openssl/thread.h +0 -191
- data/third_party/boringssl/include/openssl/tls1.h +0 -618
- data/third_party/boringssl/include/openssl/type_check.h +0 -91
- data/third_party/boringssl/include/openssl/x509.h +0 -1180
- data/third_party/boringssl/include/openssl/x509_vfy.h +0 -614
- data/third_party/boringssl/include/openssl/x509v3.h +0 -827
- data/third_party/boringssl/ssl/custom_extensions.cc +0 -265
- data/third_party/boringssl/ssl/d1_both.cc +0 -851
- data/third_party/boringssl/ssl/d1_lib.cc +0 -267
- data/third_party/boringssl/ssl/d1_pkt.cc +0 -274
- data/third_party/boringssl/ssl/d1_srtp.cc +0 -232
- data/third_party/boringssl/ssl/dtls_method.cc +0 -193
- data/third_party/boringssl/ssl/dtls_record.cc +0 -353
- data/third_party/boringssl/ssl/handoff.cc +0 -285
- data/third_party/boringssl/ssl/handshake.cc +0 -630
- data/third_party/boringssl/ssl/handshake_client.cc +0 -1842
- data/third_party/boringssl/ssl/handshake_server.cc +0 -1674
- data/third_party/boringssl/ssl/internal.h +0 -3064
- data/third_party/boringssl/ssl/s3_both.cc +0 -585
- data/third_party/boringssl/ssl/s3_lib.cc +0 -226
- data/third_party/boringssl/ssl/s3_pkt.cc +0 -425
- data/third_party/boringssl/ssl/ssl_aead_ctx.cc +0 -412
- data/third_party/boringssl/ssl/ssl_asn1.cc +0 -844
- data/third_party/boringssl/ssl/ssl_buffer.cc +0 -286
- data/third_party/boringssl/ssl/ssl_cert.cc +0 -913
- data/third_party/boringssl/ssl/ssl_cipher.cc +0 -1781
- data/third_party/boringssl/ssl/ssl_file.cc +0 -583
- data/third_party/boringssl/ssl/ssl_key_share.cc +0 -252
- data/third_party/boringssl/ssl/ssl_lib.cc +0 -2719
- data/third_party/boringssl/ssl/ssl_privkey.cc +0 -494
- data/third_party/boringssl/ssl/ssl_session.cc +0 -1221
- data/third_party/boringssl/ssl/ssl_stat.cc +0 -224
- data/third_party/boringssl/ssl/ssl_transcript.cc +0 -398
- data/third_party/boringssl/ssl/ssl_versions.cc +0 -399
- data/third_party/boringssl/ssl/ssl_x509.cc +0 -1297
- data/third_party/boringssl/ssl/t1_enc.cc +0 -452
- data/third_party/boringssl/ssl/t1_lib.cc +0 -3783
- data/third_party/boringssl/ssl/tls13_both.cc +0 -559
- data/third_party/boringssl/ssl/tls13_client.cc +0 -891
- data/third_party/boringssl/ssl/tls13_enc.cc +0 -493
- data/third_party/boringssl/ssl/tls13_server.cc +0 -1022
- data/third_party/boringssl/ssl/tls_method.cc +0 -274
- data/third_party/boringssl/ssl/tls_record.cc +0 -703
- data/third_party/boringssl/third_party/fiat/curve25519.c +0 -3230
- 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 -1824
- data/third_party/nanopb/pb.h +0 -579
- data/third_party/nanopb/pb_common.c +0 -97
- data/third_party/nanopb/pb_common.h +0 -42
- data/third_party/nanopb/pb_decode.c +0 -1347
- data/third_party/nanopb/pb_decode.h +0 -149
- data/third_party/nanopb/pb_encode.c +0 -696
- data/third_party/nanopb/pb_encode.h +0 -154
@@ -35,33 +35,33 @@
|
|
35
35
|
grpc_endpoint* grpc_tcp_client_create_from_fd(
|
36
36
|
grpc_fd* fd, const grpc_channel_args* channel_args, const char* addr_str);
|
37
37
|
|
38
|
-
/* Return a configured, unbound, unconnected TCP client
|
38
|
+
/* Return a configured, unbound, unconnected TCP client fd.
|
39
39
|
|
40
40
|
channel_args: may contain custom settings for the fd
|
41
41
|
addr: the destination address
|
42
42
|
mapped_addr: out parameter. addr mapped to an address appropriate to the
|
43
43
|
type of socket FD created. For example, if addr is IPv4 and dual stack
|
44
44
|
sockets are available, mapped_addr will be an IPv4-mapped IPv6 address
|
45
|
-
|
45
|
+
fd: out parameter. The new FD
|
46
46
|
Returns: error, if any. Out parameters are not set on error
|
47
47
|
*/
|
48
48
|
grpc_error* grpc_tcp_client_prepare_fd(const grpc_channel_args* channel_args,
|
49
49
|
const grpc_resolved_address* addr,
|
50
50
|
grpc_resolved_address* mapped_addr,
|
51
|
-
|
51
|
+
int* fd);
|
52
52
|
|
53
|
-
/* Connect a configured TCP client
|
53
|
+
/* Connect a configured TCP client fd.
|
54
54
|
|
55
55
|
interested_parties: a set of pollsets that would be interested in this
|
56
56
|
connection being established (in order to continue their work
|
57
57
|
closure: called when complete. On success, *ep will be set.
|
58
|
-
|
58
|
+
fd: an FD returned from grpc_tcp_client_prepare_fd().
|
59
59
|
channel_args: may contain custom settings for the endpoint
|
60
60
|
deadline: connection deadline
|
61
61
|
ep: out parameter. Set before closure is called if successful
|
62
62
|
*/
|
63
63
|
void grpc_tcp_client_create_from_prepared_fd(
|
64
|
-
grpc_pollset_set* interested_parties, grpc_closure* closure,
|
64
|
+
grpc_pollset_set* interested_parties, grpc_closure* closure, const int fd,
|
65
65
|
const grpc_channel_args* channel_args, const grpc_resolved_address* addr,
|
66
66
|
grpc_millis deadline, grpc_endpoint** ep);
|
67
67
|
|
@@ -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);
|
@@ -117,7 +116,7 @@ static void on_connect(void* acp, grpc_error* error) {
|
|
117
116
|
async_connect_unlock_and_cleanup(ac, socket);
|
118
117
|
/* If the connection was aborted, the callback was already called when
|
119
118
|
the deadline was met. */
|
120
|
-
|
119
|
+
grpc_core::ExecCtx::Run(DEBUG_LOCATION, on_done, error);
|
121
120
|
}
|
122
121
|
|
123
122
|
/* Tries to issue one async connection, then schedules both an IOCP
|
@@ -148,7 +147,7 @@ static void tcp_connect(grpc_closure* on_done, grpc_endpoint** endpoint,
|
|
148
147
|
}
|
149
148
|
|
150
149
|
sock = WSASocket(AF_INET6, SOCK_STREAM, IPPROTO_TCP, NULL, 0,
|
151
|
-
|
150
|
+
grpc_get_default_wsa_socket_flags());
|
152
151
|
if (sock == INVALID_SOCKET) {
|
153
152
|
error = GRPC_WSA_ERROR(WSAGetLastError(), "WSASocket");
|
154
153
|
goto failure;
|
@@ -213,17 +212,19 @@ static void tcp_connect(grpc_closure* on_done, grpc_endpoint** endpoint,
|
|
213
212
|
failure:
|
214
213
|
GPR_ASSERT(error != GRPC_ERROR_NONE);
|
215
214
|
char* target_uri = grpc_sockaddr_to_uri(addr);
|
216
|
-
grpc_error* final_error =
|
217
|
-
GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(
|
218
|
-
|
219
|
-
|
215
|
+
grpc_error* final_error =
|
216
|
+
grpc_error_set_str(GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(
|
217
|
+
"Failed to connect", &error, 1),
|
218
|
+
GRPC_ERROR_STR_TARGET_ADDRESS,
|
219
|
+
grpc_slice_from_copied_string(
|
220
|
+
target_uri == nullptr ? "NULL" : target_uri));
|
220
221
|
GRPC_ERROR_UNREF(error);
|
221
222
|
if (socket != NULL) {
|
222
223
|
grpc_winsocket_destroy(socket);
|
223
224
|
} else if (sock != INVALID_SOCKET) {
|
224
225
|
closesocket(sock);
|
225
226
|
}
|
226
|
-
|
227
|
+
grpc_core::ExecCtx::Run(DEBUG_LOCATION, on_done, final_error);
|
227
228
|
}
|
228
229
|
|
229
230
|
grpc_tcp_client_vtable grpc_windows_tcp_client_vtable = {tcp_connect};
|
@@ -31,7 +31,6 @@
|
|
31
31
|
|
32
32
|
#include "src/core/lib/iomgr/error.h"
|
33
33
|
#include "src/core/lib/iomgr/iomgr_custom.h"
|
34
|
-
#include "src/core/lib/iomgr/network_status_tracker.h"
|
35
34
|
#include "src/core/lib/iomgr/resource_quota.h"
|
36
35
|
#include "src/core/lib/iomgr/tcp_client.h"
|
37
36
|
#include "src/core/lib/iomgr/tcp_custom.h"
|
@@ -53,7 +52,7 @@ void grpc_custom_endpoint_init(grpc_socket_vtable* impl) {
|
|
53
52
|
grpc_set_tcp_server_impl(&custom_tcp_server_vtable);
|
54
53
|
}
|
55
54
|
|
56
|
-
|
55
|
+
struct custom_tcp_endpoint {
|
57
56
|
grpc_endpoint base;
|
58
57
|
gpr_refcount refcount;
|
59
58
|
grpc_custom_socket* socket;
|
@@ -70,8 +69,7 @@ typedef struct {
|
|
70
69
|
bool shutting_down;
|
71
70
|
|
72
71
|
char* peer_string;
|
73
|
-
}
|
74
|
-
|
72
|
+
};
|
75
73
|
static void tcp_free(grpc_custom_socket* s) {
|
76
74
|
custom_tcp_endpoint* tcp = (custom_tcp_endpoint*)s->endpoint;
|
77
75
|
grpc_resource_user_unref(tcp->resource_user);
|
@@ -89,7 +87,7 @@ static void tcp_free(grpc_custom_socket* s) {
|
|
89
87
|
#define TCP_REF(tcp, reason) tcp_ref((tcp), (reason), __FILE__, __LINE__)
|
90
88
|
static void tcp_unref(custom_tcp_endpoint* tcp, const char* reason,
|
91
89
|
const char* file, int line) {
|
92
|
-
if (grpc_tcp_trace
|
90
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
|
93
91
|
gpr_atm val = gpr_atm_no_barrier_load(&tcp->refcount.count);
|
94
92
|
gpr_log(file, line, GPR_LOG_SEVERITY_ERROR,
|
95
93
|
"TCP unref %p : %s %" PRIdPTR " -> %" PRIdPTR, tcp->socket, reason,
|
@@ -102,7 +100,7 @@ static void tcp_unref(custom_tcp_endpoint* tcp, const char* reason,
|
|
102
100
|
|
103
101
|
static void tcp_ref(custom_tcp_endpoint* tcp, const char* reason,
|
104
102
|
const char* file, int line) {
|
105
|
-
if (grpc_tcp_trace
|
103
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
|
106
104
|
gpr_atm val = gpr_atm_no_barrier_load(&tcp->refcount.count);
|
107
105
|
gpr_log(file, line, GPR_LOG_SEVERITY_ERROR,
|
108
106
|
"TCP ref %p : %s %" PRIdPTR " -> %" PRIdPTR, tcp->socket, reason,
|
@@ -124,7 +122,7 @@ static void tcp_ref(custom_tcp_endpoint* tcp) { gpr_ref(&tcp->refcount); }
|
|
124
122
|
|
125
123
|
static void call_read_cb(custom_tcp_endpoint* tcp, grpc_error* error) {
|
126
124
|
grpc_closure* cb = tcp->read_cb;
|
127
|
-
if (grpc_tcp_trace
|
125
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
|
128
126
|
gpr_log(GPR_INFO, "TCP:%p call_cb %p %p:%p", tcp->socket, cb, cb->cb,
|
129
127
|
cb->cb_arg);
|
130
128
|
size_t i;
|
@@ -141,11 +139,12 @@ static void call_read_cb(custom_tcp_endpoint* tcp, grpc_error* error) {
|
|
141
139
|
TCP_UNREF(tcp, "read");
|
142
140
|
tcp->read_slices = nullptr;
|
143
141
|
tcp->read_cb = nullptr;
|
144
|
-
|
142
|
+
grpc_core::ExecCtx::Run(DEBUG_LOCATION, cb, error);
|
145
143
|
}
|
146
144
|
|
147
145
|
static void custom_read_callback(grpc_custom_socket* socket, size_t nread,
|
148
146
|
grpc_error* error) {
|
147
|
+
grpc_core::ApplicationCallbackExecCtx callback_exec_ctx;
|
149
148
|
grpc_core::ExecCtx exec_ctx;
|
150
149
|
grpc_slice_buffer garbage;
|
151
150
|
custom_tcp_endpoint* tcp = (custom_tcp_endpoint*)socket->endpoint;
|
@@ -170,7 +169,7 @@ static void custom_read_callback(grpc_custom_socket* socket, size_t nread,
|
|
170
169
|
|
171
170
|
static void tcp_read_allocation_done(void* tcpp, grpc_error* error) {
|
172
171
|
custom_tcp_endpoint* tcp = (custom_tcp_endpoint*)tcpp;
|
173
|
-
if (grpc_tcp_trace
|
172
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
|
174
173
|
gpr_log(GPR_INFO, "TCP:%p read_allocation_done: %s", tcp->socket,
|
175
174
|
grpc_error_string(error));
|
176
175
|
}
|
@@ -186,14 +185,14 @@ static void tcp_read_allocation_done(void* tcpp, grpc_error* error) {
|
|
186
185
|
grpc_slice_buffer_reset_and_unref_internal(tcp->read_slices);
|
187
186
|
call_read_cb(tcp, GRPC_ERROR_REF(error));
|
188
187
|
}
|
189
|
-
if (grpc_tcp_trace
|
188
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
|
190
189
|
const char* str = grpc_error_string(error);
|
191
190
|
gpr_log(GPR_INFO, "Initiating read on %p: error=%s", tcp->socket, str);
|
192
191
|
}
|
193
192
|
}
|
194
193
|
|
195
194
|
static void endpoint_read(grpc_endpoint* ep, grpc_slice_buffer* read_slices,
|
196
|
-
grpc_closure* cb) {
|
195
|
+
grpc_closure* cb, bool /*urgent*/) {
|
197
196
|
custom_tcp_endpoint* tcp = (custom_tcp_endpoint*)ep;
|
198
197
|
GRPC_CUSTOM_IOMGR_ASSERT_SAME_THREAD();
|
199
198
|
GPR_ASSERT(tcp->read_cb == nullptr);
|
@@ -201,31 +200,34 @@ static void endpoint_read(grpc_endpoint* ep, grpc_slice_buffer* read_slices,
|
|
201
200
|
tcp->read_slices = read_slices;
|
202
201
|
grpc_slice_buffer_reset_and_unref_internal(read_slices);
|
203
202
|
TCP_REF(tcp, "read");
|
204
|
-
grpc_resource_user_alloc_slices(&tcp->slice_allocator,
|
205
|
-
|
206
|
-
|
203
|
+
if (grpc_resource_user_alloc_slices(&tcp->slice_allocator,
|
204
|
+
GRPC_TCP_DEFAULT_READ_SLICE_SIZE, 1,
|
205
|
+
tcp->read_slices)) {
|
206
|
+
tcp_read_allocation_done(tcp, GRPC_ERROR_NONE);
|
207
|
+
}
|
207
208
|
}
|
208
209
|
|
209
210
|
static void custom_write_callback(grpc_custom_socket* socket,
|
210
211
|
grpc_error* error) {
|
212
|
+
grpc_core::ApplicationCallbackExecCtx callback_exec_ctx;
|
211
213
|
grpc_core::ExecCtx exec_ctx;
|
212
214
|
custom_tcp_endpoint* tcp = (custom_tcp_endpoint*)socket->endpoint;
|
213
215
|
grpc_closure* cb = tcp->write_cb;
|
214
216
|
tcp->write_cb = nullptr;
|
215
|
-
if (grpc_tcp_trace
|
217
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
|
216
218
|
const char* str = grpc_error_string(error);
|
217
219
|
gpr_log(GPR_INFO, "write complete on %p: error=%s", tcp->socket, str);
|
218
220
|
}
|
219
221
|
TCP_UNREF(tcp, "write");
|
220
|
-
|
222
|
+
grpc_core::ExecCtx::Run(DEBUG_LOCATION, cb, error);
|
221
223
|
}
|
222
224
|
|
223
225
|
static void endpoint_write(grpc_endpoint* ep, grpc_slice_buffer* write_slices,
|
224
|
-
grpc_closure* cb) {
|
226
|
+
grpc_closure* cb, void* /*arg*/) {
|
225
227
|
custom_tcp_endpoint* tcp = (custom_tcp_endpoint*)ep;
|
226
228
|
GRPC_CUSTOM_IOMGR_ASSERT_SAME_THREAD();
|
227
229
|
|
228
|
-
if (grpc_tcp_trace
|
230
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
|
229
231
|
size_t j;
|
230
232
|
|
231
233
|
for (j = 0; j < write_slices->count; j++) {
|
@@ -238,8 +240,9 @@ static void endpoint_write(grpc_endpoint* ep, grpc_slice_buffer* write_slices,
|
|
238
240
|
}
|
239
241
|
|
240
242
|
if (tcp->shutting_down) {
|
241
|
-
|
242
|
-
|
243
|
+
grpc_core::ExecCtx::Run(
|
244
|
+
DEBUG_LOCATION, cb,
|
245
|
+
GRPC_ERROR_CREATE_FROM_STATIC_STRING("TCP socket is shutting down"));
|
243
246
|
return;
|
244
247
|
}
|
245
248
|
|
@@ -249,7 +252,7 @@ static void endpoint_write(grpc_endpoint* ep, grpc_slice_buffer* write_slices,
|
|
249
252
|
if (tcp->write_slices->count == 0) {
|
250
253
|
// No slices means we don't have to do anything,
|
251
254
|
// and libuv doesn't like empty writes
|
252
|
-
|
255
|
+
grpc_core::ExecCtx::Run(DEBUG_LOCATION, cb, GRPC_ERROR_NONE);
|
253
256
|
return;
|
254
257
|
}
|
255
258
|
tcp->write_cb = cb;
|
@@ -281,15 +284,15 @@ static void endpoint_delete_from_pollset_set(grpc_endpoint* ep,
|
|
281
284
|
static void endpoint_shutdown(grpc_endpoint* ep, grpc_error* why) {
|
282
285
|
custom_tcp_endpoint* tcp = (custom_tcp_endpoint*)ep;
|
283
286
|
if (!tcp->shutting_down) {
|
284
|
-
if (grpc_tcp_trace
|
287
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
|
285
288
|
const char* str = grpc_error_string(why);
|
286
289
|
gpr_log(GPR_INFO, "TCP %p shutdown why=%s", tcp->socket, str);
|
287
290
|
}
|
288
291
|
tcp->shutting_down = true;
|
289
|
-
//
|
290
|
-
//
|
291
|
-
// tcp->
|
292
|
-
// tcp->write_cb = nullptr;
|
292
|
+
// grpc_core::ExecCtx::Run(DEBUG_LOCATION,tcp->read_cb,
|
293
|
+
// GRPC_ERROR_REF(why));
|
294
|
+
// grpc_core::ExecCtx::Run(DEBUG_LOCATION,tcp->write_cb,
|
295
|
+
// GRPC_ERROR_REF(why)); tcp->read_cb = nullptr; tcp->write_cb = nullptr;
|
293
296
|
grpc_resource_user_shutdown(tcp->resource_user);
|
294
297
|
grpc_custom_socket_vtable->shutdown(tcp->socket);
|
295
298
|
}
|
@@ -302,6 +305,7 @@ static void custom_close_callback(grpc_custom_socket* socket) {
|
|
302
305
|
grpc_custom_socket_vtable->destroy(socket);
|
303
306
|
gpr_free(socket);
|
304
307
|
} else if (socket->endpoint) {
|
308
|
+
grpc_core::ApplicationCallbackExecCtx callback_exec_ctx;
|
305
309
|
grpc_core::ExecCtx exec_ctx;
|
306
310
|
custom_tcp_endpoint* tcp = (custom_tcp_endpoint*)socket->endpoint;
|
307
311
|
TCP_UNREF(tcp, "destroy");
|
@@ -309,7 +313,6 @@ static void custom_close_callback(grpc_custom_socket* socket) {
|
|
309
313
|
}
|
310
314
|
|
311
315
|
static void endpoint_destroy(grpc_endpoint* ep) {
|
312
|
-
grpc_network_status_unregister_endpoint(ep);
|
313
316
|
custom_tcp_endpoint* tcp = (custom_tcp_endpoint*)ep;
|
314
317
|
grpc_custom_socket_vtable->close(tcp->socket, custom_close_callback);
|
315
318
|
}
|
@@ -324,7 +327,9 @@ static grpc_resource_user* endpoint_get_resource_user(grpc_endpoint* ep) {
|
|
324
327
|
return tcp->resource_user;
|
325
328
|
}
|
326
329
|
|
327
|
-
static int endpoint_get_fd(grpc_endpoint* ep) { return -1; }
|
330
|
+
static int endpoint_get_fd(grpc_endpoint* /*ep*/) { return -1; }
|
331
|
+
|
332
|
+
static bool endpoint_can_track_err(grpc_endpoint* /*ep*/) { return false; }
|
328
333
|
|
329
334
|
static grpc_endpoint_vtable vtable = {endpoint_read,
|
330
335
|
endpoint_write,
|
@@ -335,16 +340,18 @@ static grpc_endpoint_vtable vtable = {endpoint_read,
|
|
335
340
|
endpoint_destroy,
|
336
341
|
endpoint_get_resource_user,
|
337
342
|
endpoint_get_peer,
|
338
|
-
endpoint_get_fd
|
343
|
+
endpoint_get_fd,
|
344
|
+
endpoint_can_track_err};
|
339
345
|
|
340
346
|
grpc_endpoint* custom_tcp_endpoint_create(grpc_custom_socket* socket,
|
341
347
|
grpc_resource_quota* resource_quota,
|
342
348
|
char* peer_string) {
|
343
349
|
custom_tcp_endpoint* tcp =
|
344
350
|
(custom_tcp_endpoint*)gpr_malloc(sizeof(custom_tcp_endpoint));
|
351
|
+
grpc_core::ApplicationCallbackExecCtx callback_exec_ctx;
|
345
352
|
grpc_core::ExecCtx exec_ctx;
|
346
353
|
|
347
|
-
if (grpc_tcp_trace
|
354
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
|
348
355
|
gpr_log(GPR_INFO, "Creating TCP endpoint %p", socket);
|
349
356
|
}
|
350
357
|
memset(tcp, 0, sizeof(custom_tcp_endpoint));
|
@@ -358,8 +365,6 @@ grpc_endpoint* custom_tcp_endpoint_create(grpc_custom_socket* socket,
|
|
358
365
|
tcp->resource_user = grpc_resource_user_create(resource_quota, peer_string);
|
359
366
|
grpc_resource_user_slice_allocator_init(
|
360
367
|
&tcp->slice_allocator, tcp->resource_user, tcp_read_allocation_done, tcp);
|
361
|
-
/* Tell network status tracking code about the new endpoint */
|
362
|
-
grpc_network_status_register_endpoint(&tcp->base);
|
363
368
|
|
364
369
|
return &tcp->base;
|
365
370
|
}
|
@@ -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
|
|
@@ -22,17 +22,21 @@
|
|
22
22
|
|
23
23
|
#ifdef GRPC_POSIX_SOCKET_TCP
|
24
24
|
|
25
|
-
#include "src/core/lib/iomgr/network_status_tracker.h"
|
26
25
|
#include "src/core/lib/iomgr/tcp_posix.h"
|
27
26
|
|
28
27
|
#include <errno.h>
|
29
28
|
#include <limits.h>
|
29
|
+
#include <netinet/in.h>
|
30
|
+
#include <netinet/tcp.h>
|
30
31
|
#include <stdbool.h>
|
32
|
+
#include <stdio.h>
|
31
33
|
#include <stdlib.h>
|
32
34
|
#include <string.h>
|
33
35
|
#include <sys/socket.h>
|
34
36
|
#include <sys/types.h>
|
35
37
|
#include <unistd.h>
|
38
|
+
#include <algorithm>
|
39
|
+
#include <unordered_map>
|
36
40
|
|
37
41
|
#include <grpc/slice.h>
|
38
42
|
#include <grpc/support/alloc.h>
|
@@ -46,18 +50,39 @@
|
|
46
50
|
#include "src/core/lib/debug/trace.h"
|
47
51
|
#include "src/core/lib/gpr/string.h"
|
48
52
|
#include "src/core/lib/gpr/useful.h"
|
53
|
+
#include "src/core/lib/gprpp/sync.h"
|
54
|
+
#include "src/core/lib/iomgr/buffer_list.h"
|
49
55
|
#include "src/core/lib/iomgr/ev_posix.h"
|
50
56
|
#include "src/core/lib/iomgr/executor.h"
|
57
|
+
#include "src/core/lib/iomgr/socket_utils_posix.h"
|
51
58
|
#include "src/core/lib/profiling/timers.h"
|
52
59
|
#include "src/core/lib/slice/slice_internal.h"
|
53
60
|
#include "src/core/lib/slice/slice_string_helpers.h"
|
54
61
|
|
62
|
+
#ifndef SOL_TCP
|
63
|
+
#define SOL_TCP IPPROTO_TCP
|
64
|
+
#endif
|
65
|
+
|
66
|
+
#ifndef TCP_INQ
|
67
|
+
#define TCP_INQ 36
|
68
|
+
#define TCP_CM_INQ TCP_INQ
|
69
|
+
#endif
|
70
|
+
|
55
71
|
#ifdef GRPC_HAVE_MSG_NOSIGNAL
|
56
72
|
#define SENDMSG_FLAGS MSG_NOSIGNAL
|
57
73
|
#else
|
58
74
|
#define SENDMSG_FLAGS 0
|
59
75
|
#endif
|
60
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
|
+
|
61
86
|
#ifdef GRPC_MSG_IOVLEN_TYPE
|
62
87
|
typedef GRPC_MSG_IOVLEN_TYPE msg_iovlen_type;
|
63
88
|
#else
|
@@ -66,6 +91,264 @@ typedef size_t msg_iovlen_type;
|
|
66
91
|
|
67
92
|
extern grpc_core::TraceFlag grpc_tcp_trace;
|
68
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
|
+
|
69
352
|
namespace {
|
70
353
|
struct grpc_tcp {
|
71
354
|
grpc_endpoint base;
|
@@ -76,7 +359,7 @@ struct grpc_tcp {
|
|
76
359
|
bool is_first_read;
|
77
360
|
double target_length;
|
78
361
|
double bytes_read_this_round;
|
79
|
-
|
362
|
+
grpc_core::RefCount refcount;
|
80
363
|
gpr_atm shutdown_count;
|
81
364
|
|
82
365
|
int min_read_chunk_size;
|
@@ -86,8 +369,11 @@ struct grpc_tcp {
|
|
86
369
|
grpc_slice_buffer last_read_buffer;
|
87
370
|
|
88
371
|
grpc_slice_buffer* incoming_buffer;
|
372
|
+
int inq; /* bytes pending on the socket from the last read. */
|
373
|
+
bool inq_capable; /* cache whether kernel supports inq */
|
374
|
+
|
89
375
|
grpc_slice_buffer* outgoing_buffer;
|
90
|
-
|
376
|
+
/* byte within outgoing_buffer->slices[0] to write next */
|
91
377
|
size_t outgoing_byte_idx;
|
92
378
|
|
93
379
|
grpc_closure* read_cb;
|
@@ -97,19 +383,48 @@ struct grpc_tcp {
|
|
97
383
|
|
98
384
|
grpc_closure read_done_closure;
|
99
385
|
grpc_closure write_done_closure;
|
386
|
+
grpc_closure error_closure;
|
100
387
|
|
101
388
|
char* peer_string;
|
102
389
|
|
103
390
|
grpc_resource_user* resource_user;
|
104
391
|
grpc_resource_user_slice_allocator slice_allocator;
|
392
|
+
|
393
|
+
grpc_core::TracedBuffer* tb_head; /* List of traced buffers */
|
394
|
+
gpr_mu tb_mu; /* Lock for access to list of traced buffers */
|
395
|
+
|
396
|
+
/* grpc_endpoint_write takes an argument which if non-null means that the
|
397
|
+
* transport layer wants the TCP layer to collect timestamps for this write.
|
398
|
+
* This arg is forwarded to the timestamps callback function when the ACK
|
399
|
+
* timestamp is received from the kernel. This arg is a (void *) which allows
|
400
|
+
* users of this API to pass in a pointer to any kind of structure. This
|
401
|
+
* structure could actually be a tag or any book-keeping object that the user
|
402
|
+
* can use to distinguish between different traced writes. The only
|
403
|
+
* requirement from the TCP endpoint layer is that this arg should be non-null
|
404
|
+
* if the user wants timestamps for the write. */
|
405
|
+
void* outgoing_buffer_arg;
|
406
|
+
/* A counter which starts at 0. It is initialized the first time the socket
|
407
|
+
* options for collecting timestamps are set, and is incremented with each
|
408
|
+
* byte sent. */
|
409
|
+
int bytes_counter;
|
410
|
+
bool socket_ts_enabled; /* True if timestamping options are set on the socket
|
411
|
+
*/
|
412
|
+
bool ts_capable; /* Cache whether we can set timestamping options */
|
413
|
+
gpr_atm stop_error_notification; /* Set to 1 if we do not want to be notified
|
414
|
+
on errors anymore */
|
415
|
+
TcpZerocopySendCtx tcp_zerocopy_send_ctx;
|
416
|
+
TcpZerocopySendRecord* current_zerocopy_send = nullptr;
|
105
417
|
};
|
106
418
|
|
107
419
|
struct backup_poller {
|
108
420
|
gpr_mu* pollset_mu;
|
109
421
|
grpc_closure run_poller;
|
110
422
|
};
|
423
|
+
|
111
424
|
} // namespace
|
112
425
|
|
426
|
+
static void ZerocopyDisableAndWaitForRemaining(grpc_tcp* tcp);
|
427
|
+
|
113
428
|
#define BACKUP_POLLER_POLLSET(b) ((grpc_pollset*)((b) + 1))
|
114
429
|
|
115
430
|
static gpr_atm g_uncovered_notifications_pending;
|
@@ -120,18 +435,18 @@ static void tcp_handle_write(void* arg /* grpc_tcp */, grpc_error* error);
|
|
120
435
|
static void tcp_drop_uncovered_then_handle_write(void* arg /* grpc_tcp */,
|
121
436
|
grpc_error* error);
|
122
437
|
|
123
|
-
static void done_poller(void* bp, grpc_error* error_ignored) {
|
438
|
+
static void done_poller(void* bp, grpc_error* /*error_ignored*/) {
|
124
439
|
backup_poller* p = static_cast<backup_poller*>(bp);
|
125
|
-
if (grpc_tcp_trace
|
440
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
|
126
441
|
gpr_log(GPR_INFO, "BACKUP_POLLER:%p destroy", p);
|
127
442
|
}
|
128
443
|
grpc_pollset_destroy(BACKUP_POLLER_POLLSET(p));
|
129
444
|
gpr_free(p);
|
130
445
|
}
|
131
446
|
|
132
|
-
static void run_poller(void* bp, grpc_error* error_ignored) {
|
447
|
+
static void run_poller(void* bp, grpc_error* /*error_ignored*/) {
|
133
448
|
backup_poller* p = static_cast<backup_poller*>(bp);
|
134
|
-
if (grpc_tcp_trace
|
449
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
|
135
450
|
gpr_log(GPR_INFO, "BACKUP_POLLER:%p run", p);
|
136
451
|
}
|
137
452
|
gpr_mu_lock(p->pollset_mu);
|
@@ -147,40 +462,49 @@ static void run_poller(void* bp, grpc_error* error_ignored) {
|
|
147
462
|
gpr_atm_full_cas(&g_uncovered_notifications_pending, 1, 0)) {
|
148
463
|
gpr_mu_lock(p->pollset_mu);
|
149
464
|
bool cas_ok = gpr_atm_full_cas(&g_backup_poller, (gpr_atm)p, 0);
|
150
|
-
if (grpc_tcp_trace
|
465
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
|
151
466
|
gpr_log(GPR_INFO, "BACKUP_POLLER:%p done cas_ok=%d", p, cas_ok);
|
152
467
|
}
|
153
468
|
gpr_mu_unlock(p->pollset_mu);
|
154
|
-
if (grpc_tcp_trace
|
469
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
|
155
470
|
gpr_log(GPR_INFO, "BACKUP_POLLER:%p shutdown", p);
|
156
471
|
}
|
157
472
|
grpc_pollset_shutdown(BACKUP_POLLER_POLLSET(p),
|
158
473
|
GRPC_CLOSURE_INIT(&p->run_poller, done_poller, p,
|
159
474
|
grpc_schedule_on_exec_ctx));
|
160
475
|
} else {
|
161
|
-
if (grpc_tcp_trace
|
476
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
|
162
477
|
gpr_log(GPR_INFO, "BACKUP_POLLER:%p reschedule", p);
|
163
478
|
}
|
164
|
-
|
479
|
+
grpc_core::Executor::Run(&p->run_poller, GRPC_ERROR_NONE,
|
480
|
+
grpc_core::ExecutorType::DEFAULT,
|
481
|
+
grpc_core::ExecutorJobType::LONG);
|
165
482
|
}
|
166
483
|
}
|
167
484
|
|
168
|
-
static void drop_uncovered(grpc_tcp* tcp) {
|
485
|
+
static void drop_uncovered(grpc_tcp* /*tcp*/) {
|
169
486
|
backup_poller* p = (backup_poller*)gpr_atm_acq_load(&g_backup_poller);
|
170
487
|
gpr_atm old_count =
|
171
|
-
|
172
|
-
if (grpc_tcp_trace
|
488
|
+
gpr_atm_full_fetch_add(&g_uncovered_notifications_pending, -1);
|
489
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
|
173
490
|
gpr_log(GPR_INFO, "BACKUP_POLLER:%p uncover cnt %d->%d", p,
|
174
491
|
static_cast<int>(old_count), static_cast<int>(old_count) - 1);
|
175
492
|
}
|
176
493
|
GPR_ASSERT(old_count != 1);
|
177
494
|
}
|
178
495
|
|
496
|
+
// gRPC API considers a Write operation to be done the moment it clears ‘flow
|
497
|
+
// control’ i.e., not necessarily sent on the wire. This means that the
|
498
|
+
// application MIGHT not call `grpc_completion_queue_next/pluck` in a timely
|
499
|
+
// manner when its `Write()` API is acked.
|
500
|
+
//
|
501
|
+
// We need to ensure that the fd is 'covered' (i.e being monitored by some
|
502
|
+
// polling thread and progress is made) and hence add it to a backup poller here
|
179
503
|
static void cover_self(grpc_tcp* tcp) {
|
180
504
|
backup_poller* p;
|
181
505
|
gpr_atm old_count =
|
182
506
|
gpr_atm_no_barrier_fetch_add(&g_uncovered_notifications_pending, 2);
|
183
|
-
if (grpc_tcp_trace
|
507
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
|
184
508
|
gpr_log(GPR_INFO, "BACKUP_POLLER: cover cnt %d->%d",
|
185
509
|
static_cast<int>(old_count), 2 + static_cast<int>(old_count));
|
186
510
|
}
|
@@ -188,22 +512,22 @@ static void cover_self(grpc_tcp* tcp) {
|
|
188
512
|
GRPC_STATS_INC_TCP_BACKUP_POLLERS_CREATED();
|
189
513
|
p = static_cast<backup_poller*>(
|
190
514
|
gpr_zalloc(sizeof(*p) + grpc_pollset_size()));
|
191
|
-
if (grpc_tcp_trace
|
515
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
|
192
516
|
gpr_log(GPR_INFO, "BACKUP_POLLER:%p create", p);
|
193
517
|
}
|
194
518
|
grpc_pollset_init(BACKUP_POLLER_POLLSET(p), &p->pollset_mu);
|
195
519
|
gpr_atm_rel_store(&g_backup_poller, (gpr_atm)p);
|
196
|
-
|
197
|
-
GRPC_CLOSURE_INIT(&p->run_poller, run_poller, p,
|
198
|
-
|
199
|
-
|
520
|
+
grpc_core::Executor::Run(
|
521
|
+
GRPC_CLOSURE_INIT(&p->run_poller, run_poller, p, nullptr),
|
522
|
+
GRPC_ERROR_NONE, grpc_core::ExecutorType::DEFAULT,
|
523
|
+
grpc_core::ExecutorJobType::LONG);
|
200
524
|
} else {
|
201
525
|
while ((p = (backup_poller*)gpr_atm_acq_load(&g_backup_poller)) ==
|
202
526
|
nullptr) {
|
203
527
|
// spin waiting for backup poller
|
204
528
|
}
|
205
529
|
}
|
206
|
-
if (grpc_tcp_trace
|
530
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
|
207
531
|
gpr_log(GPR_INFO, "BACKUP_POLLER:%p add %p", p, tcp);
|
208
532
|
}
|
209
533
|
grpc_pollset_add_fd(BACKUP_POLLER_POLLSET(p), tcp->em_fd);
|
@@ -213,27 +537,24 @@ static void cover_self(grpc_tcp* tcp) {
|
|
213
537
|
}
|
214
538
|
|
215
539
|
static void notify_on_read(grpc_tcp* tcp) {
|
216
|
-
if (grpc_tcp_trace
|
540
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
|
217
541
|
gpr_log(GPR_INFO, "TCP:%p notify_on_read", tcp);
|
218
542
|
}
|
219
|
-
GRPC_CLOSURE_INIT(&tcp->read_done_closure, tcp_handle_read, tcp,
|
220
|
-
grpc_schedule_on_exec_ctx);
|
221
543
|
grpc_fd_notify_on_read(tcp->em_fd, &tcp->read_done_closure);
|
222
544
|
}
|
223
545
|
|
224
546
|
static void notify_on_write(grpc_tcp* tcp) {
|
225
|
-
if (grpc_tcp_trace
|
547
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
|
226
548
|
gpr_log(GPR_INFO, "TCP:%p notify_on_write", tcp);
|
227
549
|
}
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
grpc_schedule_on_exec_ctx);
|
550
|
+
if (!grpc_event_engine_run_in_background()) {
|
551
|
+
cover_self(tcp);
|
552
|
+
}
|
232
553
|
grpc_fd_notify_on_write(tcp->em_fd, &tcp->write_done_closure);
|
233
554
|
}
|
234
555
|
|
235
556
|
static void tcp_drop_uncovered_then_handle_write(void* arg, grpc_error* error) {
|
236
|
-
if (grpc_tcp_trace
|
557
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
|
237
558
|
gpr_log(GPR_INFO, "TCP:%p got_write: %s", arg, grpc_error_string(error));
|
238
559
|
}
|
239
560
|
drop_uncovered(static_cast<grpc_tcp*>(arg));
|
@@ -292,6 +613,7 @@ static void tcp_handle_write(void* arg /* grpc_tcp */, grpc_error* error);
|
|
292
613
|
|
293
614
|
static void tcp_shutdown(grpc_endpoint* ep, grpc_error* why) {
|
294
615
|
grpc_tcp* tcp = reinterpret_cast<grpc_tcp*>(ep);
|
616
|
+
ZerocopyDisableAndWaitForRemaining(tcp);
|
295
617
|
grpc_fd_shutdown(tcp->em_fd, why);
|
296
618
|
grpc_resource_user_shutdown(tcp->resource_user);
|
297
619
|
}
|
@@ -302,74 +624,77 @@ static void tcp_free(grpc_tcp* tcp) {
|
|
302
624
|
grpc_slice_buffer_destroy_internal(&tcp->last_read_buffer);
|
303
625
|
grpc_resource_user_unref(tcp->resource_user);
|
304
626
|
gpr_free(tcp->peer_string);
|
627
|
+
/* The lock is not really necessary here, since all refs have been released */
|
628
|
+
gpr_mu_lock(&tcp->tb_mu);
|
629
|
+
grpc_core::TracedBuffer::Shutdown(
|
630
|
+
&tcp->tb_head, tcp->outgoing_buffer_arg,
|
631
|
+
GRPC_ERROR_CREATE_FROM_STATIC_STRING("endpoint destroyed"));
|
632
|
+
gpr_mu_unlock(&tcp->tb_mu);
|
633
|
+
tcp->outgoing_buffer_arg = nullptr;
|
634
|
+
gpr_mu_destroy(&tcp->tb_mu);
|
635
|
+
tcp->tcp_zerocopy_send_ctx.~TcpZerocopySendCtx();
|
305
636
|
gpr_free(tcp);
|
306
637
|
}
|
307
638
|
|
308
639
|
#ifndef NDEBUG
|
309
|
-
#define TCP_UNREF(tcp, reason) tcp_unref((tcp), (reason),
|
310
|
-
#define TCP_REF(tcp, reason) tcp_ref((tcp), (reason),
|
311
|
-
static void tcp_unref(grpc_tcp* tcp, const char* reason,
|
312
|
-
|
313
|
-
if (
|
314
|
-
gpr_atm val = gpr_atm_no_barrier_load(&tcp->refcount.count);
|
315
|
-
gpr_log(file, line, GPR_LOG_SEVERITY_DEBUG,
|
316
|
-
"TCP unref %p : %s %" PRIdPTR " -> %" PRIdPTR, tcp, reason, val,
|
317
|
-
val - 1);
|
318
|
-
}
|
319
|
-
if (gpr_unref(&tcp->refcount)) {
|
640
|
+
#define TCP_UNREF(tcp, reason) tcp_unref((tcp), (reason), DEBUG_LOCATION)
|
641
|
+
#define TCP_REF(tcp, reason) tcp_ref((tcp), (reason), DEBUG_LOCATION)
|
642
|
+
static void tcp_unref(grpc_tcp* tcp, const char* reason,
|
643
|
+
const grpc_core::DebugLocation& debug_location) {
|
644
|
+
if (GPR_UNLIKELY(tcp->refcount.Unref(debug_location, reason))) {
|
320
645
|
tcp_free(tcp);
|
321
646
|
}
|
322
647
|
}
|
323
648
|
|
324
|
-
static void tcp_ref(grpc_tcp* tcp, const char* reason,
|
325
|
-
|
326
|
-
|
327
|
-
gpr_atm val = gpr_atm_no_barrier_load(&tcp->refcount.count);
|
328
|
-
gpr_log(file, line, GPR_LOG_SEVERITY_DEBUG,
|
329
|
-
"TCP ref %p : %s %" PRIdPTR " -> %" PRIdPTR, tcp, reason, val,
|
330
|
-
val + 1);
|
331
|
-
}
|
332
|
-
gpr_ref(&tcp->refcount);
|
649
|
+
static void tcp_ref(grpc_tcp* tcp, const char* reason,
|
650
|
+
const grpc_core::DebugLocation& debug_location) {
|
651
|
+
tcp->refcount.Ref(debug_location, reason);
|
333
652
|
}
|
334
653
|
#else
|
335
654
|
#define TCP_UNREF(tcp, reason) tcp_unref((tcp))
|
336
655
|
#define TCP_REF(tcp, reason) tcp_ref((tcp))
|
337
656
|
static void tcp_unref(grpc_tcp* tcp) {
|
338
|
-
if (
|
657
|
+
if (GPR_UNLIKELY(tcp->refcount.Unref())) {
|
339
658
|
tcp_free(tcp);
|
340
659
|
}
|
341
660
|
}
|
342
661
|
|
343
|
-
static void tcp_ref(grpc_tcp* tcp) {
|
662
|
+
static void tcp_ref(grpc_tcp* tcp) { tcp->refcount.Ref(); }
|
344
663
|
#endif
|
345
664
|
|
346
665
|
static void tcp_destroy(grpc_endpoint* ep) {
|
347
|
-
grpc_network_status_unregister_endpoint(ep);
|
348
666
|
grpc_tcp* tcp = reinterpret_cast<grpc_tcp*>(ep);
|
349
667
|
grpc_slice_buffer_reset_and_unref_internal(&tcp->last_read_buffer);
|
668
|
+
if (grpc_event_engine_can_track_errors()) {
|
669
|
+
ZerocopyDisableAndWaitForRemaining(tcp);
|
670
|
+
gpr_atm_no_barrier_store(&tcp->stop_error_notification, true);
|
671
|
+
grpc_fd_set_error(tcp->em_fd);
|
672
|
+
}
|
350
673
|
TCP_UNREF(tcp, "destroy");
|
351
674
|
}
|
352
675
|
|
353
676
|
static void call_read_cb(grpc_tcp* tcp, grpc_error* error) {
|
354
677
|
grpc_closure* cb = tcp->read_cb;
|
355
678
|
|
356
|
-
if (grpc_tcp_trace
|
679
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
|
357
680
|
gpr_log(GPR_INFO, "TCP:%p call_cb %p %p:%p", tcp, cb, cb->cb, cb->cb_arg);
|
358
681
|
size_t i;
|
359
682
|
const char* str = grpc_error_string(error);
|
360
|
-
gpr_log(GPR_INFO, "
|
361
|
-
|
362
|
-
|
363
|
-
|
364
|
-
|
365
|
-
|
366
|
-
|
683
|
+
gpr_log(GPR_INFO, "READ %p (peer=%s) error=%s", tcp, tcp->peer_string, str);
|
684
|
+
|
685
|
+
if (gpr_should_log(GPR_LOG_SEVERITY_DEBUG)) {
|
686
|
+
for (i = 0; i < tcp->incoming_buffer->count; i++) {
|
687
|
+
char* dump = grpc_dump_slice(tcp->incoming_buffer->slices[i],
|
688
|
+
GPR_DUMP_HEX | GPR_DUMP_ASCII);
|
689
|
+
gpr_log(GPR_DEBUG, "DATA: %s", dump);
|
690
|
+
gpr_free(dump);
|
691
|
+
}
|
367
692
|
}
|
368
693
|
}
|
369
694
|
|
370
695
|
tcp->read_cb = nullptr;
|
371
696
|
tcp->incoming_buffer = nullptr;
|
372
|
-
|
697
|
+
grpc_core::Closure::Run(DEBUG_LOCATION, cb, error);
|
373
698
|
}
|
374
699
|
|
375
700
|
#define MAX_READ_IOVEC 4
|
@@ -378,75 +703,154 @@ static void tcp_do_read(grpc_tcp* tcp) {
|
|
378
703
|
struct msghdr msg;
|
379
704
|
struct iovec iov[MAX_READ_IOVEC];
|
380
705
|
ssize_t read_bytes;
|
381
|
-
size_t
|
382
|
-
|
383
|
-
|
384
|
-
|
385
|
-
|
706
|
+
size_t total_read_bytes = 0;
|
707
|
+
size_t iov_len =
|
708
|
+
std::min<size_t>(MAX_READ_IOVEC, tcp->incoming_buffer->count);
|
709
|
+
#ifdef GRPC_LINUX_ERRQUEUE
|
710
|
+
constexpr size_t cmsg_alloc_space =
|
711
|
+
CMSG_SPACE(sizeof(grpc_core::scm_timestamping)) + CMSG_SPACE(sizeof(int));
|
712
|
+
#else
|
713
|
+
constexpr size_t cmsg_alloc_space = 24 /* CMSG_SPACE(sizeof(int)) */;
|
714
|
+
#endif /* GRPC_LINUX_ERRQUEUE */
|
715
|
+
char cmsgbuf[cmsg_alloc_space];
|
716
|
+
for (size_t i = 0; i < iov_len; i++) {
|
386
717
|
iov[i].iov_base = GRPC_SLICE_START_PTR(tcp->incoming_buffer->slices[i]);
|
387
718
|
iov[i].iov_len = GRPC_SLICE_LENGTH(tcp->incoming_buffer->slices[i]);
|
388
719
|
}
|
389
720
|
|
390
|
-
msg.msg_name = nullptr;
|
391
|
-
msg.msg_namelen = 0;
|
392
|
-
msg.msg_iov = iov;
|
393
|
-
msg.msg_iovlen = static_cast<msg_iovlen_type>(tcp->incoming_buffer->count);
|
394
|
-
msg.msg_control = nullptr;
|
395
|
-
msg.msg_controllen = 0;
|
396
|
-
msg.msg_flags = 0;
|
397
|
-
|
398
|
-
GRPC_STATS_INC_TCP_READ_OFFER(tcp->incoming_buffer->length);
|
399
|
-
GRPC_STATS_INC_TCP_READ_OFFER_IOV_SIZE(tcp->incoming_buffer->count);
|
400
|
-
|
401
721
|
do {
|
402
|
-
|
403
|
-
|
404
|
-
|
405
|
-
|
406
|
-
|
407
|
-
|
408
|
-
|
409
|
-
|
410
|
-
|
411
|
-
|
412
|
-
|
413
|
-
|
722
|
+
/* Assume there is something on the queue. If we receive TCP_INQ from
|
723
|
+
* kernel, we will update this value, otherwise, we have to assume there is
|
724
|
+
* always something to read until we get EAGAIN. */
|
725
|
+
tcp->inq = 1;
|
726
|
+
|
727
|
+
msg.msg_name = nullptr;
|
728
|
+
msg.msg_namelen = 0;
|
729
|
+
msg.msg_iov = iov;
|
730
|
+
msg.msg_iovlen = static_cast<msg_iovlen_type>(iov_len);
|
731
|
+
if (tcp->inq_capable) {
|
732
|
+
msg.msg_control = cmsgbuf;
|
733
|
+
msg.msg_controllen = sizeof(cmsgbuf);
|
414
734
|
} else {
|
735
|
+
msg.msg_control = nullptr;
|
736
|
+
msg.msg_controllen = 0;
|
737
|
+
}
|
738
|
+
msg.msg_flags = 0;
|
739
|
+
|
740
|
+
GRPC_STATS_INC_TCP_READ_OFFER(tcp->incoming_buffer->length);
|
741
|
+
GRPC_STATS_INC_TCP_READ_OFFER_IOV_SIZE(tcp->incoming_buffer->count);
|
742
|
+
|
743
|
+
do {
|
744
|
+
GPR_TIMER_SCOPE("recvmsg", 0);
|
745
|
+
GRPC_STATS_INC_SYSCALL_READ();
|
746
|
+
read_bytes = recvmsg(tcp->fd, &msg, 0);
|
747
|
+
} while (read_bytes < 0 && errno == EINTR);
|
748
|
+
|
749
|
+
/* We have read something in previous reads. We need to deliver those
|
750
|
+
* bytes to the upper layer. */
|
751
|
+
if (read_bytes <= 0 && total_read_bytes > 0) {
|
752
|
+
tcp->inq = 1;
|
753
|
+
break;
|
754
|
+
}
|
755
|
+
|
756
|
+
if (read_bytes < 0) {
|
757
|
+
/* NB: After calling call_read_cb a parallel call of the read handler may
|
758
|
+
* be running. */
|
759
|
+
if (errno == EAGAIN) {
|
760
|
+
finish_estimate(tcp);
|
761
|
+
tcp->inq = 0;
|
762
|
+
/* We've consumed the edge, request a new one */
|
763
|
+
notify_on_read(tcp);
|
764
|
+
} else {
|
765
|
+
grpc_slice_buffer_reset_and_unref_internal(tcp->incoming_buffer);
|
766
|
+
call_read_cb(tcp,
|
767
|
+
tcp_annotate_error(GRPC_OS_ERROR(errno, "recvmsg"), tcp));
|
768
|
+
TCP_UNREF(tcp, "read");
|
769
|
+
}
|
770
|
+
return;
|
771
|
+
}
|
772
|
+
if (read_bytes == 0) {
|
773
|
+
/* 0 read size ==> end of stream
|
774
|
+
*
|
775
|
+
* We may have read something, i.e., total_read_bytes > 0, but
|
776
|
+
* since the connection is closed we will drop the data here, because we
|
777
|
+
* can't call the callback multiple times. */
|
415
778
|
grpc_slice_buffer_reset_and_unref_internal(tcp->incoming_buffer);
|
416
|
-
call_read_cb(
|
417
|
-
|
779
|
+
call_read_cb(
|
780
|
+
tcp, tcp_annotate_error(
|
781
|
+
GRPC_ERROR_CREATE_FROM_STATIC_STRING("Socket closed"), tcp));
|
418
782
|
TCP_UNREF(tcp, "read");
|
783
|
+
return;
|
419
784
|
}
|
420
|
-
|
421
|
-
/* 0 read size ==> end of stream */
|
422
|
-
grpc_slice_buffer_reset_and_unref_internal(tcp->incoming_buffer);
|
423
|
-
call_read_cb(
|
424
|
-
tcp, tcp_annotate_error(
|
425
|
-
GRPC_ERROR_CREATE_FROM_STATIC_STRING("Socket closed"), tcp));
|
426
|
-
TCP_UNREF(tcp, "read");
|
427
|
-
} else {
|
785
|
+
|
428
786
|
GRPC_STATS_INC_TCP_READ_SIZE(read_bytes);
|
429
787
|
add_to_estimate(tcp, static_cast<size_t>(read_bytes));
|
430
|
-
|
431
|
-
|
432
|
-
|
433
|
-
|
434
|
-
|
435
|
-
|
436
|
-
|
437
|
-
|
438
|
-
|
439
|
-
|
788
|
+
GPR_DEBUG_ASSERT((size_t)read_bytes <=
|
789
|
+
tcp->incoming_buffer->length - total_read_bytes);
|
790
|
+
|
791
|
+
#ifdef GRPC_HAVE_TCP_INQ
|
792
|
+
if (tcp->inq_capable) {
|
793
|
+
GPR_DEBUG_ASSERT(!(msg.msg_flags & MSG_CTRUNC));
|
794
|
+
struct cmsghdr* cmsg = CMSG_FIRSTHDR(&msg);
|
795
|
+
for (; cmsg != nullptr; cmsg = CMSG_NXTHDR(&msg, cmsg)) {
|
796
|
+
if (cmsg->cmsg_level == SOL_TCP && cmsg->cmsg_type == TCP_CM_INQ &&
|
797
|
+
cmsg->cmsg_len == CMSG_LEN(sizeof(int))) {
|
798
|
+
tcp->inq = *reinterpret_cast<int*>(CMSG_DATA(cmsg));
|
799
|
+
break;
|
800
|
+
}
|
801
|
+
}
|
802
|
+
}
|
803
|
+
#endif /* GRPC_HAVE_TCP_INQ */
|
804
|
+
|
805
|
+
total_read_bytes += read_bytes;
|
806
|
+
if (tcp->inq == 0 || total_read_bytes == tcp->incoming_buffer->length) {
|
807
|
+
/* We have filled incoming_buffer, and we cannot read any more. */
|
808
|
+
break;
|
809
|
+
}
|
810
|
+
|
811
|
+
/* We had a partial read, and still have space to read more data.
|
812
|
+
* So, adjust IOVs and try to read more. */
|
813
|
+
size_t remaining = read_bytes;
|
814
|
+
size_t j = 0;
|
815
|
+
for (size_t i = 0; i < iov_len; i++) {
|
816
|
+
if (remaining >= iov[i].iov_len) {
|
817
|
+
remaining -= iov[i].iov_len;
|
818
|
+
continue;
|
819
|
+
}
|
820
|
+
if (remaining > 0) {
|
821
|
+
iov[j].iov_base = static_cast<char*>(iov[i].iov_base) + remaining;
|
822
|
+
iov[j].iov_len = iov[i].iov_len - remaining;
|
823
|
+
remaining = 0;
|
824
|
+
} else {
|
825
|
+
iov[j].iov_base = iov[i].iov_base;
|
826
|
+
iov[j].iov_len = iov[i].iov_len;
|
827
|
+
}
|
828
|
+
++j;
|
829
|
+
}
|
830
|
+
iov_len = j;
|
831
|
+
} while (true);
|
832
|
+
|
833
|
+
if (tcp->inq == 0) {
|
834
|
+
finish_estimate(tcp);
|
835
|
+
}
|
836
|
+
|
837
|
+
GPR_DEBUG_ASSERT(total_read_bytes > 0);
|
838
|
+
if (total_read_bytes < tcp->incoming_buffer->length) {
|
839
|
+
grpc_slice_buffer_trim_end(tcp->incoming_buffer,
|
840
|
+
tcp->incoming_buffer->length - total_read_bytes,
|
841
|
+
&tcp->last_read_buffer);
|
440
842
|
}
|
843
|
+
call_read_cb(tcp, GRPC_ERROR_NONE);
|
844
|
+
TCP_UNREF(tcp, "read");
|
441
845
|
}
|
442
846
|
|
443
847
|
static void tcp_read_allocation_done(void* tcpp, grpc_error* error) {
|
444
848
|
grpc_tcp* tcp = static_cast<grpc_tcp*>(tcpp);
|
445
|
-
if (grpc_tcp_trace
|
849
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
|
446
850
|
gpr_log(GPR_INFO, "TCP:%p read_allocation_done: %s", tcp,
|
447
851
|
grpc_error_string(error));
|
448
852
|
}
|
449
|
-
if (error != GRPC_ERROR_NONE) {
|
853
|
+
if (GPR_UNLIKELY(error != GRPC_ERROR_NONE)) {
|
450
854
|
grpc_slice_buffer_reset_and_unref_internal(tcp->incoming_buffer);
|
451
855
|
grpc_slice_buffer_reset_and_unref_internal(&tcp->last_read_buffer);
|
452
856
|
call_read_cb(tcp, GRPC_ERROR_REF(error));
|
@@ -458,28 +862,32 @@ static void tcp_read_allocation_done(void* tcpp, grpc_error* error) {
|
|
458
862
|
|
459
863
|
static void tcp_continue_read(grpc_tcp* tcp) {
|
460
864
|
size_t target_read_size = get_target_read_size(tcp);
|
461
|
-
|
865
|
+
/* Wait for allocation only when there is no buffer left. */
|
866
|
+
if (tcp->incoming_buffer->length == 0 &&
|
462
867
|
tcp->incoming_buffer->count < MAX_READ_IOVEC) {
|
463
|
-
if (grpc_tcp_trace
|
868
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
|
464
869
|
gpr_log(GPR_INFO, "TCP:%p alloc_slices", tcp);
|
465
870
|
}
|
466
|
-
grpc_resource_user_alloc_slices(&tcp->slice_allocator,
|
467
|
-
|
468
|
-
|
469
|
-
|
470
|
-
|
871
|
+
if (GPR_UNLIKELY(!grpc_resource_user_alloc_slices(&tcp->slice_allocator,
|
872
|
+
target_read_size, 1,
|
873
|
+
tcp->incoming_buffer))) {
|
874
|
+
// Wait for allocation.
|
875
|
+
return;
|
471
876
|
}
|
472
|
-
tcp_do_read(tcp);
|
473
877
|
}
|
878
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
|
879
|
+
gpr_log(GPR_INFO, "TCP:%p do_read", tcp);
|
880
|
+
}
|
881
|
+
tcp_do_read(tcp);
|
474
882
|
}
|
475
883
|
|
476
884
|
static void tcp_handle_read(void* arg /* grpc_tcp */, grpc_error* error) {
|
477
885
|
grpc_tcp* tcp = static_cast<grpc_tcp*>(arg);
|
478
|
-
if (grpc_tcp_trace
|
886
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
|
479
887
|
gpr_log(GPR_INFO, "TCP:%p got_read: %s", tcp, grpc_error_string(error));
|
480
888
|
}
|
481
889
|
|
482
|
-
if (error != GRPC_ERROR_NONE) {
|
890
|
+
if (GPR_UNLIKELY(error != GRPC_ERROR_NONE)) {
|
483
891
|
grpc_slice_buffer_reset_and_unref_internal(tcp->incoming_buffer);
|
484
892
|
grpc_slice_buffer_reset_and_unref_internal(&tcp->last_read_buffer);
|
485
893
|
call_read_cb(tcp, GRPC_ERROR_REF(error));
|
@@ -490,7 +898,7 @@ static void tcp_handle_read(void* arg /* grpc_tcp */, grpc_error* error) {
|
|
490
898
|
}
|
491
899
|
|
492
900
|
static void tcp_read(grpc_endpoint* ep, grpc_slice_buffer* incoming_buffer,
|
493
|
-
grpc_closure* cb) {
|
901
|
+
grpc_closure* cb, bool urgent) {
|
494
902
|
grpc_tcp* tcp = reinterpret_cast<grpc_tcp*>(ep);
|
495
903
|
GPR_ASSERT(tcp->read_cb == nullptr);
|
496
904
|
tcp->read_cb = cb;
|
@@ -503,27 +911,503 @@ static void tcp_read(grpc_endpoint* ep, grpc_slice_buffer* incoming_buffer,
|
|
503
911
|
* the polling engine */
|
504
912
|
tcp->is_first_read = false;
|
505
913
|
notify_on_read(tcp);
|
914
|
+
} else if (!urgent && tcp->inq == 0) {
|
915
|
+
/* Upper layer asked to read more but we know there is no pending data
|
916
|
+
* to read from previous reads. So, wait for POLLIN.
|
917
|
+
*/
|
918
|
+
notify_on_read(tcp);
|
506
919
|
} else {
|
507
920
|
/* Not the first time. We may or may not have more bytes available. In any
|
508
921
|
* case call tcp->read_done_closure (i.e tcp_handle_read()) which does the
|
509
922
|
* right thing (i.e calls tcp_do_read() which either reads the available
|
510
923
|
* bytes or calls notify_on_read() to be notified when new bytes become
|
511
924
|
* available */
|
512
|
-
|
925
|
+
grpc_core::Closure::Run(DEBUG_LOCATION, &tcp->read_done_closure,
|
926
|
+
GRPC_ERROR_NONE);
|
927
|
+
}
|
928
|
+
}
|
929
|
+
|
930
|
+
/* A wrapper around sendmsg. It sends \a msg over \a fd and returns the number
|
931
|
+
* of bytes sent. */
|
932
|
+
ssize_t tcp_send(int fd, const struct msghdr* msg, int additional_flags = 0) {
|
933
|
+
GPR_TIMER_SCOPE("sendmsg", 1);
|
934
|
+
ssize_t sent_length;
|
935
|
+
do {
|
936
|
+
/* TODO(klempner): Cork if this is a partial write */
|
937
|
+
GRPC_STATS_INC_SYSCALL_WRITE();
|
938
|
+
sent_length = sendmsg(fd, msg, SENDMSG_FLAGS | additional_flags);
|
939
|
+
} while (sent_length < 0 && errno == EINTR);
|
940
|
+
return sent_length;
|
941
|
+
}
|
942
|
+
|
943
|
+
/** This is to be called if outgoing_buffer_arg is not null. On linux platforms,
|
944
|
+
* this will call sendmsg with socket options set to collect timestamps inside
|
945
|
+
* the kernel. On return, sent_length is set to the return value of the sendmsg
|
946
|
+
* call. Returns false if setting the socket options failed. This is not
|
947
|
+
* implemented for non-linux platforms currently, and crashes out.
|
948
|
+
*/
|
949
|
+
static bool tcp_write_with_timestamps(grpc_tcp* tcp, struct msghdr* msg,
|
950
|
+
size_t sending_length,
|
951
|
+
ssize_t* sent_length,
|
952
|
+
int additional_flags = 0);
|
953
|
+
|
954
|
+
/** The callback function to be invoked when we get an error on the socket. */
|
955
|
+
static void tcp_handle_error(void* arg /* grpc_tcp */, grpc_error* error);
|
956
|
+
|
957
|
+
static TcpZerocopySendRecord* tcp_get_send_zerocopy_record(
|
958
|
+
grpc_tcp* tcp, grpc_slice_buffer* buf);
|
959
|
+
|
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
|
+
}
|
992
|
+
|
993
|
+
static bool tcp_write_with_timestamps(grpc_tcp* tcp, struct msghdr* msg,
|
994
|
+
size_t sending_length,
|
995
|
+
ssize_t* sent_length,
|
996
|
+
int additional_flags) {
|
997
|
+
if (!tcp->socket_ts_enabled) {
|
998
|
+
uint32_t opt = grpc_core::kTimestampingSocketOptions;
|
999
|
+
if (setsockopt(tcp->fd, SOL_SOCKET, SO_TIMESTAMPING,
|
1000
|
+
static_cast<void*>(&opt), sizeof(opt)) != 0) {
|
1001
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
|
1002
|
+
gpr_log(GPR_ERROR, "Failed to set timestamping options on the socket.");
|
1003
|
+
}
|
1004
|
+
return false;
|
1005
|
+
}
|
1006
|
+
tcp->bytes_counter = -1;
|
1007
|
+
tcp->socket_ts_enabled = true;
|
1008
|
+
}
|
1009
|
+
/* Set control message to indicate that you want timestamps. */
|
1010
|
+
union {
|
1011
|
+
char cmsg_buf[CMSG_SPACE(sizeof(uint32_t))];
|
1012
|
+
struct cmsghdr align;
|
1013
|
+
} u;
|
1014
|
+
cmsghdr* cmsg = reinterpret_cast<cmsghdr*>(u.cmsg_buf);
|
1015
|
+
cmsg->cmsg_level = SOL_SOCKET;
|
1016
|
+
cmsg->cmsg_type = SO_TIMESTAMPING;
|
1017
|
+
cmsg->cmsg_len = CMSG_LEN(sizeof(uint32_t));
|
1018
|
+
*reinterpret_cast<int*>(CMSG_DATA(cmsg)) =
|
1019
|
+
grpc_core::kTimestampingRecordingOptions;
|
1020
|
+
msg->msg_control = u.cmsg_buf;
|
1021
|
+
msg->msg_controllen = CMSG_SPACE(sizeof(uint32_t));
|
1022
|
+
|
1023
|
+
/* If there was an error on sendmsg the logic in tcp_flush will handle it. */
|
1024
|
+
ssize_t length = tcp_send(tcp->fd, msg, additional_flags);
|
1025
|
+
*sent_length = length;
|
1026
|
+
/* Only save timestamps if all the bytes were taken by sendmsg. */
|
1027
|
+
if (sending_length == static_cast<size_t>(length)) {
|
1028
|
+
gpr_mu_lock(&tcp->tb_mu);
|
1029
|
+
grpc_core::TracedBuffer::AddNewEntry(
|
1030
|
+
&tcp->tb_head, static_cast<uint32_t>(tcp->bytes_counter + length),
|
1031
|
+
tcp->fd, tcp->outgoing_buffer_arg);
|
1032
|
+
gpr_mu_unlock(&tcp->tb_mu);
|
1033
|
+
tcp->outgoing_buffer_arg = nullptr;
|
1034
|
+
}
|
1035
|
+
return true;
|
1036
|
+
}
|
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
|
+
|
1075
|
+
/** Reads \a cmsg to derive timestamps from the control messages. If a valid
|
1076
|
+
* timestamp is found, the traced buffer list is updated with this timestamp.
|
1077
|
+
* The caller of this function should be looping on the control messages found
|
1078
|
+
* in \a msg. \a cmsg should point to the control message that the caller wants
|
1079
|
+
* processed.
|
1080
|
+
* On return, a pointer to a control message is returned. On the next iteration,
|
1081
|
+
* CMSG_NXTHDR(msg, ret_val) should be passed as \a cmsg. */
|
1082
|
+
struct cmsghdr* process_timestamp(grpc_tcp* tcp, msghdr* msg,
|
1083
|
+
struct cmsghdr* cmsg) {
|
1084
|
+
auto next_cmsg = CMSG_NXTHDR(msg, cmsg);
|
1085
|
+
cmsghdr* opt_stats = nullptr;
|
1086
|
+
if (next_cmsg == nullptr) {
|
1087
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
|
1088
|
+
gpr_log(GPR_ERROR, "Received timestamp without extended error");
|
1089
|
+
}
|
1090
|
+
return cmsg;
|
1091
|
+
}
|
1092
|
+
|
1093
|
+
/* Check if next_cmsg is an OPT_STATS msg */
|
1094
|
+
if (next_cmsg->cmsg_level == SOL_SOCKET &&
|
1095
|
+
next_cmsg->cmsg_type == SCM_TIMESTAMPING_OPT_STATS) {
|
1096
|
+
opt_stats = next_cmsg;
|
1097
|
+
next_cmsg = CMSG_NXTHDR(msg, opt_stats);
|
1098
|
+
if (next_cmsg == nullptr) {
|
1099
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
|
1100
|
+
gpr_log(GPR_ERROR, "Received timestamp without extended error");
|
1101
|
+
}
|
1102
|
+
return opt_stats;
|
1103
|
+
}
|
1104
|
+
}
|
1105
|
+
|
1106
|
+
if (!(next_cmsg->cmsg_level == SOL_IP || next_cmsg->cmsg_level == SOL_IPV6) ||
|
1107
|
+
!(next_cmsg->cmsg_type == IP_RECVERR ||
|
1108
|
+
next_cmsg->cmsg_type == IPV6_RECVERR)) {
|
1109
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
|
1110
|
+
gpr_log(GPR_ERROR, "Unexpected control message");
|
1111
|
+
}
|
1112
|
+
return cmsg;
|
1113
|
+
}
|
1114
|
+
|
1115
|
+
auto tss =
|
1116
|
+
reinterpret_cast<struct grpc_core::scm_timestamping*>(CMSG_DATA(cmsg));
|
1117
|
+
auto serr = reinterpret_cast<struct sock_extended_err*>(CMSG_DATA(next_cmsg));
|
1118
|
+
if (serr->ee_errno != ENOMSG ||
|
1119
|
+
serr->ee_origin != SO_EE_ORIGIN_TIMESTAMPING) {
|
1120
|
+
gpr_log(GPR_ERROR, "Unexpected control message");
|
1121
|
+
return cmsg;
|
1122
|
+
}
|
1123
|
+
/* The error handling can potentially be done on another thread so we need
|
1124
|
+
* to protect the traced buffer list. A lock free list might be better. Using
|
1125
|
+
* a simple mutex for now. */
|
1126
|
+
gpr_mu_lock(&tcp->tb_mu);
|
1127
|
+
grpc_core::TracedBuffer::ProcessTimestamp(&tcp->tb_head, serr, opt_stats,
|
1128
|
+
tss);
|
1129
|
+
gpr_mu_unlock(&tcp->tb_mu);
|
1130
|
+
return next_cmsg;
|
1131
|
+
}
|
1132
|
+
|
1133
|
+
/** For linux platforms, reads the socket's error queue and processes error
|
1134
|
+
* messages from the queue.
|
1135
|
+
*/
|
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;
|
1161
|
+
while (true) {
|
1162
|
+
do {
|
1163
|
+
r = recvmsg(tcp->fd, &msg, MSG_ERRQUEUE);
|
1164
|
+
saved_errno = errno;
|
1165
|
+
} while (r < 0 && saved_errno == EINTR);
|
1166
|
+
|
1167
|
+
if (r == -1 && saved_errno == EAGAIN) {
|
1168
|
+
return processed_err; /* No more errors to process */
|
1169
|
+
}
|
1170
|
+
if (r == -1) {
|
1171
|
+
return processed_err;
|
1172
|
+
}
|
1173
|
+
if (GPR_UNLIKELY((msg.msg_flags & MSG_CTRUNC) != 0)) {
|
1174
|
+
gpr_log(GPR_ERROR, "Error message was truncated.");
|
1175
|
+
}
|
1176
|
+
|
1177
|
+
if (msg.msg_controllen == 0) {
|
1178
|
+
/* There was no control message found. It was probably spurious. */
|
1179
|
+
return processed_err;
|
1180
|
+
}
|
1181
|
+
bool seen = false;
|
1182
|
+
for (auto cmsg = CMSG_FIRSTHDR(&msg); cmsg && cmsg->cmsg_len;
|
1183
|
+
cmsg = CMSG_NXTHDR(&msg, cmsg)) {
|
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. */
|
1196
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
|
1197
|
+
gpr_log(GPR_INFO,
|
1198
|
+
"unknown control message cmsg_level:%d cmsg_type:%d",
|
1199
|
+
cmsg->cmsg_level, cmsg->cmsg_type);
|
1200
|
+
}
|
1201
|
+
return processed_err;
|
1202
|
+
}
|
1203
|
+
}
|
1204
|
+
if (!seen) {
|
1205
|
+
return processed_err;
|
1206
|
+
}
|
1207
|
+
}
|
1208
|
+
}
|
1209
|
+
|
1210
|
+
static void tcp_handle_error(void* arg /* grpc_tcp */, grpc_error* error) {
|
1211
|
+
grpc_tcp* tcp = static_cast<grpc_tcp*>(arg);
|
1212
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
|
1213
|
+
gpr_log(GPR_INFO, "TCP:%p got_error: %s", tcp, grpc_error_string(error));
|
1214
|
+
}
|
1215
|
+
|
1216
|
+
if (error != GRPC_ERROR_NONE ||
|
1217
|
+
static_cast<bool>(gpr_atm_acq_load(&tcp->stop_error_notification))) {
|
1218
|
+
/* We aren't going to register to hear on error anymore, so it is safe to
|
1219
|
+
* unref. */
|
1220
|
+
TCP_UNREF(tcp, "error-tracking");
|
1221
|
+
return;
|
1222
|
+
}
|
1223
|
+
|
1224
|
+
/* We are still interested in collecting timestamps, so let's try reading
|
1225
|
+
* them. */
|
1226
|
+
bool processed = process_errors(tcp);
|
1227
|
+
/* This might not a timestamps error. Set the read and write closures to be
|
1228
|
+
* ready. */
|
1229
|
+
if (!processed) {
|
1230
|
+
grpc_fd_set_readable(tcp->em_fd);
|
1231
|
+
grpc_fd_set_writable(tcp->em_fd);
|
1232
|
+
}
|
1233
|
+
grpc_fd_notify_on_error(tcp->em_fd, &tcp->error_closure);
|
1234
|
+
}
|
1235
|
+
|
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
|
+
|
1244
|
+
static bool tcp_write_with_timestamps(grpc_tcp* /*tcp*/, struct msghdr* /*msg*/,
|
1245
|
+
size_t /*sending_length*/,
|
1246
|
+
ssize_t* /*sent_length*/,
|
1247
|
+
int /*additional_flags*/) {
|
1248
|
+
gpr_log(GPR_ERROR, "Write with timestamps not supported for this platform");
|
1249
|
+
GPR_ASSERT(0);
|
1250
|
+
return false;
|
1251
|
+
}
|
1252
|
+
|
1253
|
+
static void tcp_handle_error(void* /*arg*/ /* grpc_tcp */,
|
1254
|
+
grpc_error* /*error*/) {
|
1255
|
+
gpr_log(GPR_ERROR, "Error handling is not supported for this platform");
|
1256
|
+
GPR_ASSERT(0);
|
1257
|
+
}
|
1258
|
+
#endif /* GRPC_LINUX_ERRQUEUE */
|
1259
|
+
|
1260
|
+
/* If outgoing_buffer_arg is filled, shuts down the list early, so that any
|
1261
|
+
* release operations needed can be performed on the arg */
|
1262
|
+
void tcp_shutdown_buffer_list(grpc_tcp* tcp) {
|
1263
|
+
if (tcp->outgoing_buffer_arg) {
|
1264
|
+
gpr_mu_lock(&tcp->tb_mu);
|
1265
|
+
grpc_core::TracedBuffer::Shutdown(
|
1266
|
+
&tcp->tb_head, tcp->outgoing_buffer_arg,
|
1267
|
+
GRPC_ERROR_CREATE_FROM_STATIC_STRING("TracedBuffer list shutdown"));
|
1268
|
+
gpr_mu_unlock(&tcp->tb_mu);
|
1269
|
+
tcp->outgoing_buffer_arg = nullptr;
|
513
1270
|
}
|
514
1271
|
}
|
515
1272
|
|
516
|
-
/* returns true if done, false if pending; if returning true, *error is set */
|
517
1273
|
#if defined(IOV_MAX) && IOV_MAX < 1000
|
518
1274
|
#define MAX_WRITE_IOVEC IOV_MAX
|
519
1275
|
#else
|
520
1276
|
#define MAX_WRITE_IOVEC 1000
|
521
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
|
+
|
522
1406
|
static bool tcp_flush(grpc_tcp* tcp, grpc_error** error) {
|
523
1407
|
struct msghdr msg;
|
524
1408
|
struct iovec iov[MAX_WRITE_IOVEC];
|
525
1409
|
msg_iovlen_type iov_size;
|
526
|
-
ssize_t sent_length;
|
1410
|
+
ssize_t sent_length = 0;
|
527
1411
|
size_t sending_length;
|
528
1412
|
size_t trailing;
|
529
1413
|
size_t unwind_slice_idx;
|
@@ -533,7 +1417,7 @@ static bool tcp_flush(grpc_tcp* tcp, grpc_error** error) {
|
|
533
1417
|
// buffer as we write
|
534
1418
|
size_t outgoing_slice_idx = 0;
|
535
1419
|
|
536
|
-
|
1420
|
+
while (true) {
|
537
1421
|
sending_length = 0;
|
538
1422
|
unwind_slice_idx = outgoing_slice_idx;
|
539
1423
|
unwind_byte_idx = tcp->outgoing_byte_idx;
|
@@ -557,19 +1441,28 @@ static bool tcp_flush(grpc_tcp* tcp, grpc_error** error) {
|
|
557
1441
|
msg.msg_namelen = 0;
|
558
1442
|
msg.msg_iov = iov;
|
559
1443
|
msg.msg_iovlen = iov_size;
|
560
|
-
msg.msg_control = nullptr;
|
561
|
-
msg.msg_controllen = 0;
|
562
1444
|
msg.msg_flags = 0;
|
1445
|
+
bool tried_sending_message = false;
|
1446
|
+
if (tcp->outgoing_buffer_arg != nullptr) {
|
1447
|
+
if (!tcp->ts_capable ||
|
1448
|
+
!tcp_write_with_timestamps(tcp, &msg, sending_length, &sent_length)) {
|
1449
|
+
/* We could not set socket options to collect Fathom timestamps.
|
1450
|
+
* Fallback on writing without timestamps. */
|
1451
|
+
tcp->ts_capable = false;
|
1452
|
+
tcp_shutdown_buffer_list(tcp);
|
1453
|
+
} else {
|
1454
|
+
tried_sending_message = true;
|
1455
|
+
}
|
1456
|
+
}
|
1457
|
+
if (!tried_sending_message) {
|
1458
|
+
msg.msg_control = nullptr;
|
1459
|
+
msg.msg_controllen = 0;
|
563
1460
|
|
564
|
-
|
565
|
-
|
1461
|
+
GRPC_STATS_INC_TCP_WRITE_SIZE(sending_length);
|
1462
|
+
GRPC_STATS_INC_TCP_WRITE_IOV_SIZE(iov_size);
|
566
1463
|
|
567
|
-
|
568
|
-
|
569
|
-
/* TODO(klempner): Cork if this is a partial write */
|
570
|
-
GRPC_STATS_INC_SYSCALL_WRITE();
|
571
|
-
sent_length = sendmsg(tcp->fd, &msg, SENDMSG_FLAGS);
|
572
|
-
} while (sent_length < 0 && errno == EINTR);
|
1464
|
+
sent_length = tcp_send(tcp->fd, &msg);
|
1465
|
+
}
|
573
1466
|
|
574
1467
|
if (sent_length < 0) {
|
575
1468
|
if (errno == EAGAIN) {
|
@@ -577,22 +1470,24 @@ static bool tcp_flush(grpc_tcp* tcp, grpc_error** error) {
|
|
577
1470
|
// unref all and forget about all slices that have been written to this
|
578
1471
|
// point
|
579
1472
|
for (size_t idx = 0; idx < unwind_slice_idx; ++idx) {
|
580
|
-
|
581
|
-
grpc_slice_buffer_take_first(tcp->outgoing_buffer));
|
1473
|
+
grpc_slice_buffer_remove_first(tcp->outgoing_buffer);
|
582
1474
|
}
|
583
1475
|
return false;
|
584
1476
|
} else if (errno == EPIPE) {
|
585
1477
|
*error = tcp_annotate_error(GRPC_OS_ERROR(errno, "sendmsg"), tcp);
|
586
1478
|
grpc_slice_buffer_reset_and_unref_internal(tcp->outgoing_buffer);
|
1479
|
+
tcp_shutdown_buffer_list(tcp);
|
587
1480
|
return true;
|
588
1481
|
} else {
|
589
1482
|
*error = tcp_annotate_error(GRPC_OS_ERROR(errno, "sendmsg"), tcp);
|
590
1483
|
grpc_slice_buffer_reset_and_unref_internal(tcp->outgoing_buffer);
|
1484
|
+
tcp_shutdown_buffer_list(tcp);
|
591
1485
|
return true;
|
592
1486
|
}
|
593
1487
|
}
|
594
1488
|
|
595
1489
|
GPR_ASSERT(tcp->outgoing_byte_idx == 0);
|
1490
|
+
tcp->bytes_counter += sent_length;
|
596
1491
|
trailing = sending_length - static_cast<size_t>(sent_length);
|
597
1492
|
while (trailing > 0) {
|
598
1493
|
size_t slice_length;
|
@@ -607,7 +1502,6 @@ static bool tcp_flush(grpc_tcp* tcp, grpc_error** error) {
|
|
607
1502
|
trailing -= slice_length;
|
608
1503
|
}
|
609
1504
|
}
|
610
|
-
|
611
1505
|
if (outgoing_slice_idx == tcp->outgoing_buffer->count) {
|
612
1506
|
*error = GRPC_ERROR_NONE;
|
613
1507
|
grpc_slice_buffer_reset_and_unref_internal(tcp->outgoing_buffer);
|
@@ -623,72 +1517,105 @@ static void tcp_handle_write(void* arg /* grpc_tcp */, grpc_error* error) {
|
|
623
1517
|
if (error != GRPC_ERROR_NONE) {
|
624
1518
|
cb = tcp->write_cb;
|
625
1519
|
tcp->write_cb = nullptr;
|
626
|
-
|
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
|
+
}
|
1525
|
+
grpc_core::Closure::Run(DEBUG_LOCATION, cb, GRPC_ERROR_REF(error));
|
627
1526
|
TCP_UNREF(tcp, "write");
|
628
1527
|
return;
|
629
1528
|
}
|
630
1529
|
|
631
|
-
|
632
|
-
|
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) {
|
1535
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
|
633
1536
|
gpr_log(GPR_INFO, "write: delayed");
|
634
1537
|
}
|
635
1538
|
notify_on_write(tcp);
|
1539
|
+
// tcp_flush does not populate error if it has returned false.
|
1540
|
+
GPR_DEBUG_ASSERT(error == GRPC_ERROR_NONE);
|
636
1541
|
} else {
|
637
1542
|
cb = tcp->write_cb;
|
638
1543
|
tcp->write_cb = nullptr;
|
639
|
-
|
1544
|
+
tcp->current_zerocopy_send = nullptr;
|
1545
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
|
640
1546
|
const char* str = grpc_error_string(error);
|
641
1547
|
gpr_log(GPR_INFO, "write: %s", str);
|
642
1548
|
}
|
643
|
-
|
644
|
-
|
1549
|
+
// No need to take a ref on error since tcp_flush provides a ref.
|
1550
|
+
grpc_core::Closure::Run(DEBUG_LOCATION, cb, error);
|
645
1551
|
TCP_UNREF(tcp, "write");
|
646
1552
|
}
|
647
1553
|
}
|
648
1554
|
|
649
1555
|
static void tcp_write(grpc_endpoint* ep, grpc_slice_buffer* buf,
|
650
|
-
grpc_closure* cb) {
|
1556
|
+
grpc_closure* cb, void* arg) {
|
651
1557
|
GPR_TIMER_SCOPE("tcp_write", 0);
|
652
1558
|
grpc_tcp* tcp = reinterpret_cast<grpc_tcp*>(ep);
|
653
1559
|
grpc_error* error = GRPC_ERROR_NONE;
|
1560
|
+
TcpZerocopySendRecord* zerocopy_send_record = nullptr;
|
654
1561
|
|
655
|
-
if (grpc_tcp_trace
|
1562
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
|
656
1563
|
size_t i;
|
657
1564
|
|
658
1565
|
for (i = 0; i < buf->count; i++) {
|
659
|
-
|
660
|
-
|
661
|
-
|
662
|
-
|
1566
|
+
gpr_log(GPR_INFO, "WRITE %p (peer=%s)", tcp, tcp->peer_string);
|
1567
|
+
if (gpr_should_log(GPR_LOG_SEVERITY_DEBUG)) {
|
1568
|
+
char* data =
|
1569
|
+
grpc_dump_slice(buf->slices[i], GPR_DUMP_HEX | GPR_DUMP_ASCII);
|
1570
|
+
gpr_log(GPR_DEBUG, "DATA: %s", data);
|
1571
|
+
gpr_free(data);
|
1572
|
+
}
|
663
1573
|
}
|
664
1574
|
}
|
665
1575
|
|
666
1576
|
GPR_ASSERT(tcp->write_cb == nullptr);
|
1577
|
+
GPR_DEBUG_ASSERT(tcp->current_zerocopy_send == nullptr);
|
667
1578
|
|
668
1579
|
if (buf->length == 0) {
|
669
|
-
|
670
|
-
cb,
|
671
|
-
|
672
|
-
|
673
|
-
|
1580
|
+
grpc_core::Closure::Run(
|
1581
|
+
DEBUG_LOCATION, cb,
|
1582
|
+
grpc_fd_is_shutdown(tcp->em_fd)
|
1583
|
+
? tcp_annotate_error(GRPC_ERROR_CREATE_FROM_STATIC_STRING("EOF"),
|
1584
|
+
tcp)
|
1585
|
+
: GRPC_ERROR_NONE);
|
1586
|
+
tcp_shutdown_buffer_list(tcp);
|
674
1587
|
return;
|
675
1588
|
}
|
676
|
-
tcp->outgoing_buffer = buf;
|
677
|
-
tcp->outgoing_byte_idx = 0;
|
678
1589
|
|
679
|
-
|
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;
|
1597
|
+
if (arg) {
|
1598
|
+
GPR_ASSERT(grpc_event_engine_can_track_errors());
|
1599
|
+
}
|
1600
|
+
|
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) {
|
680
1606
|
TCP_REF(tcp, "write");
|
681
1607
|
tcp->write_cb = cb;
|
682
|
-
|
1608
|
+
tcp->current_zerocopy_send = zerocopy_send_record;
|
1609
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
|
683
1610
|
gpr_log(GPR_INFO, "write: delayed");
|
684
1611
|
}
|
685
1612
|
notify_on_write(tcp);
|
686
1613
|
} else {
|
687
|
-
if (grpc_tcp_trace
|
1614
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
|
688
1615
|
const char* str = grpc_error_string(error);
|
689
1616
|
gpr_log(GPR_INFO, "write: %s", str);
|
690
1617
|
}
|
691
|
-
|
1618
|
+
grpc_core::Closure::Run(DEBUG_LOCATION, cb, error);
|
692
1619
|
}
|
693
1620
|
}
|
694
1621
|
|
@@ -706,6 +1633,7 @@ static void tcp_add_to_pollset_set(grpc_endpoint* ep,
|
|
706
1633
|
static void tcp_delete_from_pollset_set(grpc_endpoint* ep,
|
707
1634
|
grpc_pollset_set* pollset_set) {
|
708
1635
|
grpc_tcp* tcp = reinterpret_cast<grpc_tcp*>(ep);
|
1636
|
+
ZerocopyDisableAndWaitForRemaining(tcp);
|
709
1637
|
grpc_pollset_set_del_fd(pollset_set, tcp->em_fd);
|
710
1638
|
}
|
711
1639
|
|
@@ -724,6 +1652,22 @@ static grpc_resource_user* tcp_get_resource_user(grpc_endpoint* ep) {
|
|
724
1652
|
return tcp->resource_user;
|
725
1653
|
}
|
726
1654
|
|
1655
|
+
static bool tcp_can_track_err(grpc_endpoint* ep) {
|
1656
|
+
grpc_tcp* tcp = reinterpret_cast<grpc_tcp*>(ep);
|
1657
|
+
if (!grpc_event_engine_can_track_errors()) {
|
1658
|
+
return false;
|
1659
|
+
}
|
1660
|
+
struct sockaddr addr;
|
1661
|
+
socklen_t len = sizeof(addr);
|
1662
|
+
if (getsockname(tcp->fd, &addr, &len) < 0) {
|
1663
|
+
return false;
|
1664
|
+
}
|
1665
|
+
if (addr.sa_family == AF_INET || addr.sa_family == AF_INET6) {
|
1666
|
+
return true;
|
1667
|
+
}
|
1668
|
+
return false;
|
1669
|
+
}
|
1670
|
+
|
727
1671
|
static const grpc_endpoint_vtable vtable = {tcp_read,
|
728
1672
|
tcp_write,
|
729
1673
|
tcp_add_to_pollset,
|
@@ -733,16 +1677,23 @@ static const grpc_endpoint_vtable vtable = {tcp_read,
|
|
733
1677
|
tcp_destroy,
|
734
1678
|
tcp_get_resource_user,
|
735
1679
|
tcp_get_peer,
|
736
|
-
tcp_get_fd
|
1680
|
+
tcp_get_fd,
|
1681
|
+
tcp_can_track_err};
|
737
1682
|
|
738
1683
|
#define MAX_CHUNK_SIZE 32 * 1024 * 1024
|
739
1684
|
|
740
1685
|
grpc_endpoint* grpc_tcp_create(grpc_fd* em_fd,
|
741
1686
|
const grpc_channel_args* channel_args,
|
742
1687
|
const char* peer_string) {
|
1688
|
+
static constexpr bool kZerocpTxEnabledDefault = false;
|
743
1689
|
int tcp_read_chunk_size = GRPC_TCP_DEFAULT_READ_SLICE_SIZE;
|
744
1690
|
int tcp_max_read_chunk_size = 4 * 1024 * 1024;
|
745
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;
|
746
1697
|
grpc_resource_quota* resource_quota = grpc_resource_quota_create(nullptr);
|
747
1698
|
if (channel_args != nullptr) {
|
748
1699
|
for (size_t i = 0; i < channel_args->num_args; i++) {
|
@@ -767,6 +1718,23 @@ grpc_endpoint* grpc_tcp_create(grpc_fd* em_fd,
|
|
767
1718
|
resource_quota =
|
768
1719
|
grpc_resource_quota_ref_internal(static_cast<grpc_resource_quota*>(
|
769
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);
|
770
1738
|
}
|
771
1739
|
}
|
772
1740
|
}
|
@@ -783,6 +1751,7 @@ grpc_endpoint* grpc_tcp_create(grpc_fd* em_fd,
|
|
783
1751
|
tcp->fd = grpc_fd_wrapped_fd(em_fd);
|
784
1752
|
tcp->read_cb = nullptr;
|
785
1753
|
tcp->write_cb = nullptr;
|
1754
|
+
tcp->current_zerocopy_send = nullptr;
|
786
1755
|
tcp->release_fd_cb = nullptr;
|
787
1756
|
tcp->release_fd = nullptr;
|
788
1757
|
tcp->incoming_buffer = nullptr;
|
@@ -792,17 +1761,71 @@ grpc_endpoint* grpc_tcp_create(grpc_fd* em_fd,
|
|
792
1761
|
tcp->bytes_read_this_round = 0;
|
793
1762
|
/* Will be set to false by the very first endpoint read function */
|
794
1763
|
tcp->is_first_read = true;
|
1764
|
+
tcp->bytes_counter = -1;
|
1765
|
+
tcp->socket_ts_enabled = false;
|
1766
|
+
tcp->ts_capable = true;
|
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
|
+
}
|
795
1782
|
/* paired with unref in grpc_tcp_destroy */
|
796
|
-
|
1783
|
+
new (&tcp->refcount) grpc_core::RefCount(1, &grpc_tcp_trace);
|
797
1784
|
gpr_atm_no_barrier_store(&tcp->shutdown_count, 0);
|
798
1785
|
tcp->em_fd = em_fd;
|
799
1786
|
grpc_slice_buffer_init(&tcp->last_read_buffer);
|
800
1787
|
tcp->resource_user = grpc_resource_user_create(resource_quota, peer_string);
|
801
1788
|
grpc_resource_user_slice_allocator_init(
|
802
1789
|
&tcp->slice_allocator, tcp->resource_user, tcp_read_allocation_done, tcp);
|
803
|
-
/* Tell network status tracker about new endpoint */
|
804
|
-
grpc_network_status_register_endpoint(&tcp->base);
|
805
1790
|
grpc_resource_quota_unref_internal(resource_quota);
|
1791
|
+
gpr_mu_init(&tcp->tb_mu);
|
1792
|
+
tcp->tb_head = nullptr;
|
1793
|
+
GRPC_CLOSURE_INIT(&tcp->read_done_closure, tcp_handle_read, tcp,
|
1794
|
+
grpc_schedule_on_exec_ctx);
|
1795
|
+
if (grpc_event_engine_run_in_background()) {
|
1796
|
+
// If there is a polling engine always running in the background, there is
|
1797
|
+
// no need to run the backup poller.
|
1798
|
+
GRPC_CLOSURE_INIT(&tcp->write_done_closure, tcp_handle_write, tcp,
|
1799
|
+
grpc_schedule_on_exec_ctx);
|
1800
|
+
} else {
|
1801
|
+
GRPC_CLOSURE_INIT(&tcp->write_done_closure,
|
1802
|
+
tcp_drop_uncovered_then_handle_write, tcp,
|
1803
|
+
grpc_schedule_on_exec_ctx);
|
1804
|
+
}
|
1805
|
+
/* Always assume there is something on the queue to read. */
|
1806
|
+
tcp->inq = 1;
|
1807
|
+
#ifdef GRPC_HAVE_TCP_INQ
|
1808
|
+
int one = 1;
|
1809
|
+
if (setsockopt(tcp->fd, SOL_TCP, TCP_INQ, &one, sizeof(one)) == 0) {
|
1810
|
+
tcp->inq_capable = true;
|
1811
|
+
} else {
|
1812
|
+
gpr_log(GPR_DEBUG, "cannot set inq fd=%d errno=%d", tcp->fd, errno);
|
1813
|
+
tcp->inq_capable = false;
|
1814
|
+
}
|
1815
|
+
#else
|
1816
|
+
tcp->inq_capable = false;
|
1817
|
+
#endif /* GRPC_HAVE_TCP_INQ */
|
1818
|
+
/* Start being notified on errors if event engine can track errors. */
|
1819
|
+
if (grpc_event_engine_can_track_errors()) {
|
1820
|
+
/* Grab a ref to tcp so that we can safely access the tcp struct when
|
1821
|
+
* processing errors. We unref when we no longer want to track errors
|
1822
|
+
* separately. */
|
1823
|
+
TCP_REF(tcp, "error-tracking");
|
1824
|
+
gpr_atm_rel_store(&tcp->stop_error_notification, 0);
|
1825
|
+
GRPC_CLOSURE_INIT(&tcp->error_closure, tcp_handle_error, tcp,
|
1826
|
+
grpc_schedule_on_exec_ctx);
|
1827
|
+
grpc_fd_notify_on_error(tcp->em_fd, &tcp->error_closure);
|
1828
|
+
}
|
806
1829
|
|
807
1830
|
return &tcp->base;
|
808
1831
|
}
|
@@ -815,12 +1838,17 @@ int grpc_tcp_fd(grpc_endpoint* ep) {
|
|
815
1838
|
|
816
1839
|
void grpc_tcp_destroy_and_release_fd(grpc_endpoint* ep, int* fd,
|
817
1840
|
grpc_closure* done) {
|
818
|
-
grpc_network_status_unregister_endpoint(ep);
|
819
1841
|
grpc_tcp* tcp = reinterpret_cast<grpc_tcp*>(ep);
|
820
1842
|
GPR_ASSERT(ep->vtable == &vtable);
|
821
1843
|
tcp->release_fd = fd;
|
822
1844
|
tcp->release_fd_cb = done;
|
823
1845
|
grpc_slice_buffer_reset_and_unref_internal(&tcp->last_read_buffer);
|
1846
|
+
if (grpc_event_engine_can_track_errors()) {
|
1847
|
+
/* Stop errors notification. */
|
1848
|
+
ZerocopyDisableAndWaitForRemaining(tcp);
|
1849
|
+
gpr_atm_no_barrier_store(&tcp->stop_error_notification, true);
|
1850
|
+
grpc_fd_set_error(tcp->em_fd);
|
1851
|
+
}
|
824
1852
|
TCP_UNREF(tcp, "destroy");
|
825
1853
|
}
|
826
1854
|
|