grpc 1.30.1 → 1.32.0.pre1
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 +723 -15910
- data/include/grpc/grpc_security.h +31 -14
- data/include/grpc/grpc_security_constants.h +3 -0
- data/include/grpc/impl/codegen/README.md +22 -0
- data/include/grpc/impl/codegen/grpc_types.h +7 -5
- data/include/grpc/impl/codegen/port_platform.h +6 -33
- data/src/core/ext/filters/client_channel/backend_metric.cc +12 -9
- data/src/core/ext/filters/client_channel/backup_poller.cc +3 -2
- data/src/core/ext/filters/client_channel/client_channel.cc +470 -285
- data/src/core/ext/filters/client_channel/client_channel.h +1 -1
- data/src/core/ext/filters/client_channel/client_channel_channelz.h +0 -3
- data/src/core/ext/filters/client_channel/config_selector.cc +62 -0
- data/src/core/ext/filters/client_channel/config_selector.h +93 -0
- data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +24 -2
- data/src/core/ext/filters/client_channel/health/health_check_client.cc +8 -1
- data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +8 -8
- data/src/core/ext/filters/client_channel/http_proxy.cc +6 -4
- data/src/core/ext/filters/client_channel/lb_policy.h +4 -0
- data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +6 -4
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +59 -36
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +0 -13
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +0 -3
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +1 -37
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +19 -13
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +29 -10
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +5 -4
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +4 -6
- data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +23 -13
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +18 -12
- data/src/core/ext/filters/client_channel/lb_policy/xds/eds.cc +22 -14
- data/src/core/ext/filters/client_channel/lb_policy/xds/lrs.cc +18 -9
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_routing.cc +385 -78
- data/src/core/ext/filters/client_channel/lb_policy_registry.cc +4 -5
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +5 -2
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc +6 -5
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +8 -6
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +9 -7
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +7 -5
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +36 -51
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_libuv.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +6 -2
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +383 -31
- data/src/core/ext/filters/client_channel/resolver_registry.cc +13 -14
- data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +6 -7
- data/src/core/ext/filters/client_channel/resolver_result_parsing.h +0 -1
- data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +38 -32
- data/src/core/ext/filters/client_channel/resolving_lb_policy.h +39 -20
- data/src/core/ext/filters/client_channel/server_address.cc +40 -7
- data/src/core/ext/filters/client_channel/server_address.h +42 -4
- data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +142 -0
- data/src/core/ext/filters/client_channel/subchannel.cc +65 -24
- data/src/core/ext/filters/client_channel/subchannel.h +16 -4
- data/src/core/ext/filters/http/client/http_client_filter.cc +5 -5
- data/src/core/ext/filters/http/http_filters_plugin.cc +2 -1
- data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +74 -33
- data/src/core/ext/filters/http/message_compress/message_decompress_filter.h +3 -1
- data/src/core/ext/filters/max_age/max_age_filter.cc +2 -1
- data/src/core/ext/filters/message_size/message_size_filter.cc +56 -80
- data/src/core/ext/filters/message_size/message_size_filter.h +6 -0
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +87 -31
- data/src/core/ext/transport/chttp2/client/chttp2_connector.h +18 -1
- data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +10 -35
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +378 -348
- data/src/core/ext/transport/chttp2/server/chttp2_server.h +7 -2
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +3 -3
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +10 -16
- data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +9 -9
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +256 -279
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +23 -28
- data/src/core/ext/transport/chttp2/transport/flow_control.h +14 -16
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +9 -12
- data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +4 -6
- data/src/core/ext/transport/chttp2/transport/frame_ping.cc +5 -6
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +12 -13
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +8 -9
- data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +9 -12
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +25 -29
- data/src/core/ext/transport/chttp2/transport/hpack_table.cc +13 -17
- data/src/core/ext/transport/chttp2/transport/internal.h +18 -1
- data/src/core/ext/transport/chttp2/transport/parsing.cc +34 -71
- data/src/core/ext/transport/chttp2/transport/writing.cc +15 -19
- data/src/core/ext/transport/inproc/inproc_transport.cc +47 -27
- data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h +0 -1
- data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +3 -4
- data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +224 -0
- data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +700 -0
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +74 -0
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +226 -0
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +380 -0
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +1378 -0
- data/src/core/ext/upb-generated/envoy/{api/v2/cluster → config/cluster/v3}/filter.upb.c +8 -8
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +69 -0
- data/src/core/ext/upb-generated/envoy/{api/v2/cluster → config/cluster/v3}/outlier_detection.upb.c +8 -8
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +323 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +112 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +334 -0
- data/src/core/ext/upb-generated/envoy/{api/v2/core → config/core/v3}/backoff.upb.c +8 -8
- data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +79 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +309 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +869 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +96 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +328 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +34 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +71 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +195 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +634 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +170 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +684 -0
- data/src/core/ext/upb-generated/envoy/{api/v2/core → config/core/v3}/http_uri.upb.c +8 -8
- data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +80 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +152 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +536 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +28 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +58 -0
- data/src/core/ext/upb-generated/envoy/{api/v2/core → config/core/v3}/socket_option.upb.c +6 -6
- data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +88 -0
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +91 -0
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +220 -0
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +91 -0
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +273 -0
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +112 -0
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +332 -0
- data/src/core/ext/upb-generated/envoy/config/listener/{v2 → v3}/api_listener.upb.c +8 -8
- data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +65 -0
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +108 -0
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +401 -0
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +138 -0
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +490 -0
- data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +41 -0
- data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +94 -0
- data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +174 -0
- data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +599 -0
- data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +63 -0
- data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +204 -0
- data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +773 -0
- data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +2855 -0
- data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +59 -0
- data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +135 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +50 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +108 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +312 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +1125 -0
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.c +20 -0
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.h +34 -0
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +111 -0
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +401 -0
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +72 -0
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +198 -0
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +105 -0
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +388 -0
- data/src/core/ext/upb-generated/envoy/{api/v2 → service/cluster/v3}/cds.upb.c +5 -6
- data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.h +49 -0
- data/src/core/ext/upb-generated/envoy/service/discovery/{v2 → v3}/ads.upb.c +5 -4
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h +49 -0
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +129 -0
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +386 -0
- data/src/core/ext/upb-generated/envoy/{api/v2 → service/endpoint/v3}/eds.upb.c +5 -6
- data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.h +49 -0
- data/src/core/ext/upb-generated/envoy/{api/v2 → service/listener/v3}/lds.upb.c +5 -6
- data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.h +49 -0
- data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +55 -0
- data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +136 -0
- data/src/core/ext/upb-generated/envoy/{api/v2 → service/route/v3}/rds.upb.c +5 -6
- data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.h +49 -0
- data/src/core/ext/upb-generated/envoy/{api/v2 → service/route/v3}/srds.upb.c +5 -6
- data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.h +49 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +47 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +114 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +35 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +77 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +34 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +71 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +64 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +145 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +53 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +127 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +63 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +188 -0
- data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +88 -0
- data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +258 -0
- data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +90 -0
- data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +250 -0
- data/src/core/ext/upb-generated/envoy/type/{http.upb.c → v3/http.upb.c} +2 -2
- data/src/core/ext/upb-generated/envoy/type/{http.upb.h → v3/http.upb.h} +8 -9
- data/src/core/ext/upb-generated/envoy/type/{percent.upb.c → v3/percent.upb.c} +9 -8
- data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +86 -0
- data/src/core/ext/upb-generated/envoy/type/{range.upb.c → v3/range.upb.c} +12 -11
- data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +111 -0
- data/src/core/ext/upb-generated/envoy/type/{semantic_version.upb.c → v3/semantic_version.upb.c} +6 -5
- data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +61 -0
- data/src/core/ext/upb-generated/gogoproto/gogo.upb.h +0 -1
- data/src/core/ext/upb-generated/google/api/annotations.upb.h +0 -1
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +234 -0
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +759 -0
- data/src/core/ext/upb-generated/google/api/http.upb.h +29 -28
- data/src/core/ext/upb-generated/google/protobuf/any.upb.h +5 -6
- data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +39 -39
- data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +412 -386
- data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +5 -6
- data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +1 -2
- data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +1 -1
- data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +34 -55
- data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +5 -6
- data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +27 -28
- data/src/core/ext/upb-generated/google/rpc/status.upb.h +8 -8
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c +1 -1
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +32 -45
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +4 -4
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +157 -178
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +14 -13
- data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +6 -7
- data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +59 -56
- data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +11 -12
- data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h +0 -1
- data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +5 -6
- data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +27 -0
- data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +53 -0
- data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.c +6 -6
- data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.h +41 -68
- data/src/core/ext/upb-generated/validate/validate.upb.c +11 -11
- data/src/core/ext/upb-generated/validate/validate.upb.h +537 -536
- data/src/core/ext/xds/xds_api.cc +2388 -0
- data/src/core/ext/{filters/client_channel/xds → xds}/xds_api.h +120 -40
- data/src/core/ext/{filters/client_channel/xds → xds}/xds_bootstrap.cc +56 -25
- data/src/core/ext/{filters/client_channel/xds → xds}/xds_bootstrap.h +8 -3
- data/src/core/ext/{filters/client_channel/xds → xds}/xds_channel.h +4 -4
- data/src/core/ext/{filters/client_channel/xds → xds}/xds_channel_args.h +3 -3
- data/src/core/ext/{filters/client_channel/xds → xds}/xds_channel_secure.cc +2 -5
- data/src/core/ext/{filters/client_channel/xds → xds}/xds_client.cc +94 -347
- data/src/core/ext/{filters/client_channel/xds → xds}/xds_client.h +12 -45
- data/src/core/ext/{filters/client_channel/xds → xds}/xds_client_stats.cc +2 -2
- data/src/core/ext/{filters/client_channel/xds → xds}/xds_client_stats.h +13 -13
- data/src/core/lib/channel/channel_trace.cc +2 -6
- data/src/core/lib/channel/channelz.cc +19 -30
- data/src/core/lib/channel/channelz.h +1 -1
- data/src/core/lib/channel/channelz_registry.cc +3 -1
- data/src/core/lib/gpr/log_linux.cc +6 -8
- data/src/core/lib/gpr/log_posix.cc +6 -8
- data/src/core/lib/gpr/string.cc +10 -9
- data/src/core/lib/gpr/string.h +4 -2
- data/src/core/lib/gpr/sync_posix.cc +2 -8
- data/src/core/lib/gprpp/global_config_env.cc +8 -6
- data/src/core/lib/http/httpcli.cc +13 -10
- data/src/core/lib/http/httpcli_security_connector.cc +5 -5
- data/src/core/lib/iomgr/cfstream_handle.cc +1 -0
- data/src/core/lib/iomgr/endpoint.cc +5 -1
- data/src/core/lib/iomgr/endpoint.h +7 -3
- data/src/core/lib/iomgr/endpoint_cfstream.cc +32 -11
- data/src/core/lib/iomgr/endpoint_pair_posix.cc +10 -10
- data/src/core/lib/iomgr/error_cfstream.cc +9 -8
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +5 -6
- data/src/core/lib/iomgr/ev_epollex_linux.cc +15 -21
- data/src/core/lib/iomgr/ev_poll_posix.cc +6 -5
- data/src/core/lib/iomgr/is_epollexclusive_available.cc +14 -0
- data/src/core/{ext/filters/client_channel → lib/iomgr}/parse_address.cc +1 -1
- data/src/core/{ext/filters/client_channel → lib/iomgr}/parse_address.h +3 -3
- data/src/core/lib/iomgr/port.h +1 -21
- data/src/core/lib/iomgr/resolve_address_custom.cc +13 -18
- data/src/core/lib/iomgr/resolve_address_windows.cc +8 -8
- data/src/core/lib/iomgr/resource_quota.cc +34 -31
- data/src/core/lib/iomgr/sockaddr_utils.cc +9 -6
- data/src/core/lib/iomgr/sockaddr_utils.h +3 -2
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +95 -55
- data/src/core/lib/iomgr/socket_windows.cc +4 -5
- data/src/core/lib/iomgr/tcp_client_cfstream.cc +9 -11
- data/src/core/lib/iomgr/tcp_client_custom.cc +6 -9
- data/src/core/lib/iomgr/tcp_client_posix.cc +27 -36
- data/src/core/lib/iomgr/tcp_client_windows.cc +9 -9
- data/src/core/lib/iomgr/tcp_custom.cc +33 -17
- data/src/core/lib/iomgr/tcp_custom.h +1 -1
- data/src/core/lib/iomgr/tcp_posix.cc +31 -13
- data/src/core/lib/iomgr/tcp_server.cc +3 -4
- data/src/core/lib/iomgr/tcp_server.h +7 -5
- data/src/core/lib/iomgr/tcp_server_custom.cc +6 -14
- data/src/core/lib/iomgr/tcp_server_posix.cc +34 -41
- data/src/core/lib/iomgr/tcp_server_utils_posix.h +3 -4
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +5 -7
- data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +4 -9
- data/src/core/lib/iomgr/tcp_server_windows.cc +16 -16
- data/src/core/lib/iomgr/tcp_windows.cc +26 -10
- data/src/core/lib/iomgr/timer_generic.cc +13 -12
- data/src/core/lib/iomgr/udp_server.cc +24 -23
- data/src/core/lib/iomgr/udp_server.h +5 -2
- data/src/core/lib/iomgr/unix_sockets_posix.cc +9 -14
- data/src/core/lib/iomgr/unix_sockets_posix.h +3 -1
- data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +5 -2
- data/src/core/lib/json/json_reader.cc +20 -21
- data/src/core/lib/security/authorization/authorization_engine.cc +177 -0
- data/src/core/lib/security/authorization/authorization_engine.h +84 -0
- data/src/core/lib/security/authorization/evaluate_args.cc +153 -0
- data/src/core/lib/security/authorization/evaluate_args.h +59 -0
- data/src/core/lib/security/authorization/mock_cel/activation.h +57 -0
- data/src/core/lib/security/authorization/mock_cel/cel_expr_builder_factory.h +42 -0
- data/src/core/lib/security/authorization/mock_cel/cel_expression.h +68 -0
- data/src/core/lib/security/authorization/mock_cel/cel_value.h +93 -0
- data/src/core/lib/security/authorization/mock_cel/evaluator_core.h +67 -0
- data/src/core/lib/security/authorization/mock_cel/flat_expr_builder.h +56 -0
- data/src/core/lib/security/authorization/mock_cel/statusor.h +50 -0
- data/src/core/lib/security/credentials/credentials.h +5 -3
- data/src/core/lib/security/credentials/google_default/credentials_generic.cc +8 -6
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +64 -43
- data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +7 -4
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +19 -28
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +6 -6
- data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +20 -0
- data/src/core/lib/security/credentials/ssl/ssl_credentials.h +10 -0
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +10 -0
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +11 -12
- data/src/core/lib/security/security_connector/security_connector.cc +2 -0
- data/src/core/lib/security/security_connector/security_connector.h +1 -1
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +18 -11
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +5 -0
- data/src/core/lib/security/security_connector/ssl_utils.cc +44 -23
- data/src/core/lib/security/security_connector/ssl_utils.h +6 -2
- data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +27 -24
- data/src/core/lib/security/transport/client_auth_filter.cc +10 -9
- data/src/core/lib/security/transport/secure_endpoint.cc +7 -1
- data/src/core/lib/security/util/json_util.cc +12 -13
- data/src/core/lib/slice/slice.cc +38 -1
- data/src/core/lib/slice/slice_internal.h +1 -0
- data/src/core/lib/surface/call.cc +52 -53
- data/src/core/lib/surface/call.h +2 -1
- data/src/core/lib/surface/channel.cc +28 -20
- data/src/core/lib/surface/channel.h +12 -2
- data/src/core/lib/surface/completion_queue.cc +0 -5
- data/src/core/lib/surface/init.cc +1 -1
- data/src/core/lib/surface/server.cc +1102 -1347
- data/src/core/lib/surface/server.h +369 -71
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/authority_override.cc +38 -0
- data/src/core/lib/transport/authority_override.h +32 -0
- data/src/core/lib/transport/connectivity_state.cc +18 -13
- data/src/core/lib/transport/connectivity_state.h +18 -6
- data/src/core/lib/transport/error_utils.cc +13 -0
- data/src/core/lib/transport/error_utils.h +6 -0
- data/src/core/lib/transport/static_metadata.cc +295 -276
- data/src/core/lib/transport/static_metadata.h +80 -73
- data/src/core/lib/transport/transport.h +13 -0
- data/src/core/lib/uri/uri_parser.cc +30 -35
- data/src/core/lib/uri/uri_parser.h +3 -1
- data/src/core/plugin_registry/grpc_plugin_registry.cc +4 -0
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +23 -13
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +24 -0
- data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +2 -0
- data/src/core/tsi/ssl_transport_security.cc +102 -11
- data/src/core/tsi/ssl_transport_security.h +14 -2
- data/src/core/tsi/transport_security_interface.h +5 -0
- data/src/ruby/bin/math_services_pb.rb +4 -4
- data/src/ruby/ext/grpc/extconf.rb +5 -2
- data/src/ruby/ext/grpc/rb_call.c +3 -2
- data/src/ruby/ext/grpc/rb_call.h +4 -0
- data/src/ruby/ext/grpc/rb_call_credentials.c +54 -10
- data/src/ruby/ext/grpc/rb_channel_credentials.c +9 -0
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +2 -2
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +4 -4
- data/src/ruby/lib/grpc/generic/client_stub.rb +1 -1
- data/src/ruby/lib/grpc/generic/interceptors.rb +1 -1
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/pb/grpc/health/v1/health_services_pb.rb +2 -2
- data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +5 -0
- data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +28 -12
- data/src/ruby/spec/channel_credentials_spec.rb +10 -0
- data/src/ruby/spec/generic/active_call_spec.rb +19 -8
- data/src/ruby/spec/pb/codegen/grpc/testing/package_options_import2.proto +23 -0
- data/src/ruby/spec/pb/codegen/grpc/testing/package_options_ruby_style.proto +2 -0
- data/src/ruby/spec/pb/codegen/grpc/testing/same_package_service_name.proto +27 -0
- data/src/ruby/spec/pb/codegen/grpc/testing/same_ruby_package_service_name.proto +29 -0
- data/src/ruby/spec/pb/codegen/package_option_spec.rb +25 -1
- data/src/ruby/spec/user_agent_spec.rb +74 -0
- data/third_party/abseil-cpp/absl/algorithm/container.h +1727 -0
- data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +161 -0
- data/third_party/abseil-cpp/absl/base/internal/exponential_biased.cc +93 -0
- data/third_party/abseil-cpp/absl/base/internal/exponential_biased.h +130 -0
- data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.cc +620 -0
- data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.h +126 -0
- data/third_party/abseil-cpp/absl/container/fixed_array.h +515 -0
- data/third_party/abseil-cpp/absl/container/flat_hash_set.h +503 -0
- data/third_party/abseil-cpp/absl/container/internal/common.h +202 -0
- data/third_party/abseil-cpp/absl/container/internal/container_memory.h +440 -0
- data/third_party/abseil-cpp/absl/container/internal/hash_function_defaults.h +146 -0
- data/third_party/abseil-cpp/absl/container/internal/hash_policy_traits.h +191 -0
- data/third_party/abseil-cpp/absl/container/internal/hashtable_debug_hooks.h +85 -0
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +269 -0
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +297 -0
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler_force_weak_definition.cc +30 -0
- data/third_party/abseil-cpp/absl/container/internal/have_sse.h +49 -0
- data/third_party/abseil-cpp/absl/container/internal/layout.h +741 -0
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +48 -0
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +1882 -0
- data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.cc +138 -0
- data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.h +32 -0
- data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +1895 -0
- data/third_party/abseil-cpp/absl/debugging/internal/demangle.h +71 -0
- data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.cc +382 -0
- data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +134 -0
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +192 -0
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +125 -0
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +70 -0
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +99 -0
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +248 -0
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_unimplemented-inl.inc +24 -0
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_win32-inl.inc +85 -0
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +346 -0
- data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +128 -0
- data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +194 -0
- data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.h +158 -0
- data/third_party/abseil-cpp/absl/debugging/stacktrace.cc +140 -0
- data/third_party/abseil-cpp/absl/debugging/stacktrace.h +231 -0
- data/third_party/abseil-cpp/absl/debugging/symbolize.cc +25 -0
- data/third_party/abseil-cpp/absl/debugging/symbolize.h +99 -0
- data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +1480 -0
- data/third_party/abseil-cpp/absl/debugging/symbolize_unimplemented.inc +40 -0
- data/third_party/abseil-cpp/absl/debugging/symbolize_win32.inc +81 -0
- data/third_party/abseil-cpp/absl/functional/function_ref.h +139 -0
- data/third_party/abseil-cpp/absl/functional/internal/function_ref.h +106 -0
- data/third_party/abseil-cpp/absl/hash/hash.h +324 -0
- data/third_party/abseil-cpp/absl/hash/internal/city.cc +346 -0
- data/third_party/abseil-cpp/absl/hash/internal/city.h +96 -0
- data/third_party/abseil-cpp/absl/hash/internal/hash.cc +55 -0
- data/third_party/abseil-cpp/absl/hash/internal/hash.h +988 -0
- data/third_party/abseil-cpp/absl/status/status.cc +447 -0
- data/third_party/abseil-cpp/absl/status/status.h +428 -0
- data/third_party/abseil-cpp/absl/status/status_payload_printer.cc +43 -0
- data/third_party/abseil-cpp/absl/status/status_payload_printer.h +51 -0
- data/third_party/abseil-cpp/absl/strings/cord.cc +2019 -0
- data/third_party/abseil-cpp/absl/strings/cord.h +1121 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +151 -0
- data/third_party/abseil-cpp/absl/synchronization/barrier.cc +52 -0
- data/third_party/abseil-cpp/absl/synchronization/barrier.h +79 -0
- data/third_party/abseil-cpp/absl/synchronization/blocking_counter.cc +57 -0
- data/third_party/abseil-cpp/absl/synchronization/blocking_counter.h +99 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +140 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.h +60 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc +697 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.h +141 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +155 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/mutex_nonprod.inc +261 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +106 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +115 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +484 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +159 -0
- data/third_party/abseil-cpp/absl/synchronization/mutex.cc +2728 -0
- data/third_party/abseil-cpp/absl/synchronization/mutex.h +1056 -0
- data/third_party/abseil-cpp/absl/synchronization/notification.cc +78 -0
- data/third_party/abseil-cpp/absl/synchronization/notification.h +123 -0
- data/third_party/abseil-cpp/absl/types/bad_variant_access.cc +64 -0
- data/third_party/abseil-cpp/absl/types/bad_variant_access.h +82 -0
- data/third_party/abseil-cpp/absl/types/internal/variant.h +1646 -0
- data/third_party/abseil-cpp/absl/types/variant.h +861 -0
- data/third_party/boringssl-with-bazel/err_data.c +266 -254
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bitstr.c +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_enum.c +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_int.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_time.c +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_type.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/asn1/asn_pack.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/asn1/f_enum.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/asn1/f_int.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/asn1/f_string.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/tls_cbc.c +1 -0
- data/third_party/boringssl-with-bazel/src/crypto/ec_extra/hash_to_curve.c +12 -52
- data/third_party/boringssl-with-bazel/src/crypto/ec_extra/internal.h +0 -22
- data/third_party/boringssl-with-bazel/src/crypto/evp/evp_asn1.c +159 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/mode_wrappers.c +17 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +11 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +2 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p224-64.c +13 -11
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-x86_64.c +24 -23
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256.c +20 -16
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple_mul.c +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/util.c +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +62 -0
- data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +456 -0
- data/third_party/boringssl-with-bazel/src/crypto/hpke/internal.h +192 -0
- data/third_party/boringssl-with-bazel/src/crypto/mem.c +29 -15
- data/third_party/boringssl-with-bazel/src/crypto/pkcs8/internal.h +7 -0
- data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +36 -5
- data/third_party/boringssl-with-bazel/src/crypto/trust_token/internal.h +0 -29
- data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +116 -363
- data/third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token.c +7 -45
- data/third_party/boringssl-with-bazel/src/crypto/x509/a_strex.c +4 -4
- data/third_party/boringssl-with-bazel/src/crypto/x509/algorithm.c +8 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/asn1_gen.c +4 -4
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509.c +0 -67
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c +13 -6
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c +10 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +41 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_trs.c +4 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +28 -9
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509cset.c +25 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +35 -13
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_pubkey.c +0 -154
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_sig.c +20 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509.c +28 -6
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +5 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +74 -35
- data/third_party/boringssl-with-bazel/src/include/openssl/aes.h +16 -4
- data/third_party/boringssl-with-bazel/src/include/openssl/arm_arch.h +52 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +22 -22
- data/third_party/boringssl-with-bazel/src/include/openssl/base.h +2 -2
- data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +69 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +72 -23
- data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +2 -3
- data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +1 -10
- data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +800 -715
- data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +3 -3
- data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +9 -2
- data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +2 -2
- data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +9 -0
- data/third_party/boringssl-with-bazel/src/ssl/internal.h +21 -14
- data/third_party/boringssl-with-bazel/src/ssl/ssl_asn1.cc +7 -7
- data/third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc +3 -6
- data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +38 -0
- data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +4 -24
- data/third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc +5 -5
- data/third_party/boringssl-with-bazel/src/ssl/t1_enc.cc +45 -24
- data/third_party/boringssl-with-bazel/src/ssl/t1_lib.cc +34 -9
- data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +31 -21
- data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +17 -9
- data/third_party/boringssl-with-bazel/src/ssl/tls_record.cc +5 -3
- data/third_party/re2/re2/bitmap256.h +117 -0
- data/third_party/re2/re2/bitstate.cc +385 -0
- data/third_party/re2/re2/compile.cc +1279 -0
- data/third_party/re2/re2/dfa.cc +2130 -0
- data/third_party/re2/re2/filtered_re2.cc +121 -0
- data/third_party/re2/re2/filtered_re2.h +109 -0
- data/third_party/re2/re2/mimics_pcre.cc +197 -0
- data/third_party/re2/re2/nfa.cc +713 -0
- data/third_party/re2/re2/onepass.cc +623 -0
- data/third_party/re2/re2/parse.cc +2464 -0
- data/third_party/re2/re2/perl_groups.cc +119 -0
- data/third_party/re2/re2/pod_array.h +55 -0
- data/third_party/re2/re2/prefilter.cc +710 -0
- data/third_party/re2/re2/prefilter.h +108 -0
- data/third_party/re2/re2/prefilter_tree.cc +407 -0
- data/third_party/re2/re2/prefilter_tree.h +139 -0
- data/third_party/re2/re2/prog.cc +988 -0
- data/third_party/re2/re2/prog.h +436 -0
- data/third_party/re2/re2/re2.cc +1362 -0
- data/third_party/re2/re2/re2.h +1002 -0
- data/third_party/re2/re2/regexp.cc +980 -0
- data/third_party/re2/re2/regexp.h +659 -0
- data/third_party/re2/re2/set.cc +154 -0
- data/third_party/re2/re2/set.h +80 -0
- data/third_party/re2/re2/simplify.cc +657 -0
- data/third_party/re2/re2/sparse_array.h +392 -0
- data/third_party/re2/re2/sparse_set.h +264 -0
- data/third_party/re2/re2/stringpiece.cc +65 -0
- data/third_party/re2/re2/stringpiece.h +210 -0
- data/third_party/re2/re2/tostring.cc +351 -0
- data/third_party/re2/re2/unicode_casefold.cc +582 -0
- data/third_party/re2/re2/unicode_casefold.h +78 -0
- data/third_party/re2/re2/unicode_groups.cc +6269 -0
- data/third_party/re2/re2/unicode_groups.h +67 -0
- data/third_party/re2/re2/walker-inl.h +246 -0
- data/third_party/re2/util/benchmark.h +156 -0
- data/third_party/re2/util/flags.h +26 -0
- data/third_party/re2/util/logging.h +109 -0
- data/third_party/re2/util/malloc_counter.h +19 -0
- data/third_party/re2/util/mix.h +41 -0
- data/third_party/re2/util/mutex.h +148 -0
- data/third_party/re2/util/pcre.cc +1025 -0
- data/third_party/re2/util/pcre.h +681 -0
- data/third_party/re2/util/rune.cc +260 -0
- data/third_party/re2/util/strutil.cc +149 -0
- data/third_party/re2/util/strutil.h +21 -0
- data/third_party/re2/util/test.h +50 -0
- data/third_party/re2/util/utf.h +44 -0
- data/third_party/re2/util/util.h +42 -0
- data/third_party/upb/upb/decode.c +517 -505
- data/third_party/upb/upb/encode.c +165 -123
- data/third_party/upb/upb/msg.c +130 -64
- data/third_party/upb/upb/msg.h +418 -14
- data/third_party/upb/upb/port_def.inc +35 -6
- data/third_party/upb/upb/port_undef.inc +8 -1
- data/third_party/upb/upb/table.c +53 -86
- data/third_party/upb/upb/table.int.h +11 -52
- data/third_party/upb/upb/upb.c +151 -125
- data/third_party/upb/upb/upb.h +91 -147
- data/third_party/upb/upb/upb.hpp +88 -0
- metadata +310 -148
- data/src/core/ext/filters/client_channel/xds/xds_api.cc +0 -1906
- data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.c +0 -21
- data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.h +0 -35
- data/src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.c +0 -114
- data/src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.h +0 -418
- data/src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.c +0 -72
- data/src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.h +0 -197
- data/src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.c +0 -105
- data/src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.h +0 -378
- data/src/core/ext/upb-generated/envoy/api/v2/cds.upb.h +0 -53
- data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.c +0 -403
- data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.h +0 -1447
- data/src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.c +0 -74
- data/src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.h +0 -218
- data/src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.h +0 -69
- data/src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.h +0 -305
- data/src/core/ext/upb-generated/envoy/api/v2/core/address.upb.c +0 -112
- data/src/core/ext/upb-generated/envoy/api/v2/core/address.upb.h +0 -328
- data/src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.h +0 -78
- data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.c +0 -313
- data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.h +0 -897
- data/src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.c +0 -96
- data/src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.h +0 -322
- data/src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.c +0 -34
- data/src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.h +0 -72
- data/src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.c +0 -197
- data/src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.h +0 -642
- data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.c +0 -172
- data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.h +0 -673
- data/src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.h +0 -80
- data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.c +0 -152
- data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.h +0 -518
- data/src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.h +0 -89
- data/src/core/ext/upb-generated/envoy/api/v2/discovery.upb.c +0 -129
- data/src/core/ext/upb-generated/envoy/api/v2/discovery.upb.h +0 -392
- data/src/core/ext/upb-generated/envoy/api/v2/eds.upb.h +0 -53
- data/src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.c +0 -92
- data/src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.h +0 -240
- data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.c +0 -18
- data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.h +0 -33
- data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.c +0 -91
- data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.h +0 -266
- data/src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.c +0 -112
- data/src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.h +0 -324
- data/src/core/ext/upb-generated/envoy/api/v2/lds.upb.h +0 -53
- data/src/core/ext/upb-generated/envoy/api/v2/listener.upb.c +0 -109
- data/src/core/ext/upb-generated/envoy/api/v2/listener.upb.h +0 -399
- data/src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.c +0 -18
- data/src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.h +0 -33
- data/src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.c +0 -145
- data/src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.h +0 -527
- data/src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.c +0 -43
- data/src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.h +0 -112
- data/src/core/ext/upb-generated/envoy/api/v2/rds.upb.h +0 -53
- data/src/core/ext/upb-generated/envoy/api/v2/route.upb.c +0 -63
- data/src/core/ext/upb-generated/envoy/api/v2/route.upb.h +0 -199
- data/src/core/ext/upb-generated/envoy/api/v2/route/route.upb.c +0 -18
- data/src/core/ext/upb-generated/envoy/api/v2/route/route.upb.h +0 -33
- data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.c +0 -815
- data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.h +0 -3032
- data/src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.c +0 -59
- data/src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.h +0 -134
- data/src/core/ext/upb-generated/envoy/api/v2/srds.upb.h +0 -53
- data/src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.c +0 -228
- data/src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.h +0 -725
- data/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.c +0 -316
- data/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.h +0 -1132
- data/src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.h +0 -65
- data/src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.c +0 -51
- data/src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.h +0 -125
- data/src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.h +0 -50
- data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.c +0 -54
- data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.h +0 -134
- data/src/core/ext/upb-generated/envoy/type/matcher/regex.upb.c +0 -63
- data/src/core/ext/upb-generated/envoy/type/matcher/regex.upb.h +0 -144
- data/src/core/ext/upb-generated/envoy/type/matcher/string.upb.c +0 -53
- data/src/core/ext/upb-generated/envoy/type/matcher/string.upb.h +0 -133
- data/src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.c +0 -88
- data/src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.h +0 -258
- data/src/core/ext/upb-generated/envoy/type/percent.upb.h +0 -87
- data/src/core/ext/upb-generated/envoy/type/range.upb.h +0 -112
- data/src/core/ext/upb-generated/envoy/type/semantic_version.upb.h +0 -62
- data/src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.c +0 -89
- data/src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.h +0 -249
- data/src/core/lib/security/transport/target_authority_table.cc +0 -75
- data/src/core/lib/security/transport/target_authority_table.h +0 -40
- data/src/core/lib/slice/slice_hash_table.h +0 -199
- data/src/core/lib/slice/slice_weak_hash_table.h +0 -102
- data/third_party/upb/upb/generated_util.h +0 -105
@@ -40,6 +40,9 @@ class MessageSizeParsedConfig : public ServiceConfigParser::ParsedConfig {
|
|
40
40
|
|
41
41
|
const message_size_limits& limits() const { return limits_; }
|
42
42
|
|
43
|
+
static const MessageSizeParsedConfig* GetFromCallContext(
|
44
|
+
const grpc_call_context_element* context);
|
45
|
+
|
43
46
|
private:
|
44
47
|
message_size_limits limits_;
|
45
48
|
};
|
@@ -54,6 +57,9 @@ class MessageSizeParser : public ServiceConfigParser::Parser {
|
|
54
57
|
static size_t ParserIndex();
|
55
58
|
};
|
56
59
|
|
60
|
+
int GetMaxRecvSizeFromChannelArgs(const grpc_channel_args* args);
|
61
|
+
int GetMaxSendSizeFromChannelArgs(const grpc_channel_args* args);
|
62
|
+
|
57
63
|
} // namespace grpc_core
|
58
64
|
|
59
65
|
#endif /* GRPC_CORE_EXT_FILTERS_MESSAGE_SIZE_MESSAGE_SIZE_FILTER_H */
|
@@ -129,6 +129,15 @@ void Chttp2Connector::StartHandshakeLocked() {
|
|
129
129
|
endpoint_ = nullptr; // Endpoint handed off to handshake manager.
|
130
130
|
}
|
131
131
|
|
132
|
+
namespace {
|
133
|
+
void NullThenSchedClosure(const DebugLocation& location, grpc_closure** closure,
|
134
|
+
grpc_error* error) {
|
135
|
+
grpc_closure* c = *closure;
|
136
|
+
*closure = nullptr;
|
137
|
+
ExecCtx::Run(location, c, error);
|
138
|
+
}
|
139
|
+
} // namespace
|
140
|
+
|
132
141
|
void Chttp2Connector::OnHandshakeDone(void* arg, grpc_error* error) {
|
133
142
|
auto* args = static_cast<HandshakerArgs*>(arg);
|
134
143
|
Chttp2Connector* self = static_cast<Chttp2Connector*>(args->user_data);
|
@@ -154,53 +163,100 @@ void Chttp2Connector::OnHandshakeDone(void* arg, grpc_error* error) {
|
|
154
163
|
error = GRPC_ERROR_REF(error);
|
155
164
|
}
|
156
165
|
self->result_->Reset();
|
166
|
+
NullThenSchedClosure(DEBUG_LOCATION, &self->notify_, error);
|
157
167
|
} else if (args->endpoint != nullptr) {
|
158
|
-
grpc_endpoint_delete_from_pollset_set(args->endpoint,
|
159
|
-
self->args_.interested_parties);
|
160
168
|
self->result_->transport =
|
161
169
|
grpc_create_chttp2_transport(args->args, args->endpoint, true);
|
162
170
|
self->result_->socket_node =
|
163
171
|
grpc_chttp2_transport_get_socket_node(self->result_->transport);
|
172
|
+
self->result_->channel_args = args->args;
|
164
173
|
GPR_ASSERT(self->result_->transport != nullptr);
|
165
|
-
|
166
|
-
//
|
167
|
-
|
168
|
-
|
169
|
-
//
|
170
|
-
// We could pass a notify_on_receive_settings callback to
|
171
|
-
// grpc_chttp2_transport_start_reading() to let us know when
|
172
|
-
// settings are received, but we would need to figure out how to use
|
173
|
-
// that information here.
|
174
|
-
//
|
175
|
-
// Unfortunately, we don't currently have a way to split apart the two
|
176
|
-
// effects of scheduling c->notify: we start sending RPCs immediately
|
177
|
-
// (which we want to do) and we consider the connection attempt successful
|
178
|
-
// (which we don't want to do until we get the notify_on_receive_settings
|
179
|
-
// callback from the transport). If we could split those things
|
180
|
-
// apart, then we could start sending RPCs but then wait for our
|
181
|
-
// timeout before deciding if the connection attempt is successful.
|
182
|
-
// If the attempt is not successful, then we would tear down the
|
183
|
-
// transport and feed the failure back into the backoff code.
|
184
|
-
//
|
185
|
-
// In addition, even if we did that, we would probably not want to do
|
186
|
-
// so until after transparent retries is implemented. Otherwise, any
|
187
|
-
// RPC that we attempt to send on the connection before the timeout
|
188
|
-
// would fail instead of being retried on a subsequent attempt.
|
174
|
+
self->endpoint_ = args->endpoint;
|
175
|
+
self->Ref().release(); // Ref held by OnReceiveSettings()
|
176
|
+
GRPC_CLOSURE_INIT(&self->on_receive_settings_, OnReceiveSettings, self,
|
177
|
+
grpc_schedule_on_exec_ctx);
|
178
|
+
self->Ref().release(); // Ref held by OnTimeout()
|
189
179
|
grpc_chttp2_transport_start_reading(self->result_->transport,
|
190
|
-
args->read_buffer,
|
191
|
-
|
180
|
+
args->read_buffer,
|
181
|
+
&self->on_receive_settings_);
|
182
|
+
GRPC_CLOSURE_INIT(&self->on_timeout_, OnTimeout, self,
|
183
|
+
grpc_schedule_on_exec_ctx);
|
184
|
+
grpc_timer_init(&self->timer_, self->args_.deadline, &self->on_timeout_);
|
192
185
|
} else {
|
193
186
|
// If the handshaking succeeded but there is no endpoint, then the
|
194
187
|
// handshaker may have handed off the connection to some external
|
195
188
|
// code. Just verify that exit_early flag is set.
|
196
189
|
GPR_DEBUG_ASSERT(args->exit_early);
|
190
|
+
NullThenSchedClosure(DEBUG_LOCATION, &self->notify_, error);
|
197
191
|
}
|
198
|
-
grpc_closure* notify = self->notify_;
|
199
|
-
self->notify_ = nullptr;
|
200
|
-
ExecCtx::Run(DEBUG_LOCATION, notify, error);
|
201
192
|
self->handshake_mgr_.reset();
|
202
193
|
}
|
203
194
|
self->Unref();
|
204
195
|
}
|
205
196
|
|
197
|
+
void Chttp2Connector::OnReceiveSettings(void* arg, grpc_error* error) {
|
198
|
+
Chttp2Connector* self = static_cast<Chttp2Connector*>(arg);
|
199
|
+
{
|
200
|
+
MutexLock lock(&self->mu_);
|
201
|
+
if (!self->notify_error_.has_value()) {
|
202
|
+
grpc_endpoint_delete_from_pollset_set(self->endpoint_,
|
203
|
+
self->args_.interested_parties);
|
204
|
+
if (error != GRPC_ERROR_NONE) {
|
205
|
+
// Transport got an error while waiting on SETTINGS frame.
|
206
|
+
// TODO(yashykt): The following two lines should be moved to
|
207
|
+
// SubchannelConnector::Result::Reset()
|
208
|
+
grpc_transport_destroy(self->result_->transport);
|
209
|
+
grpc_channel_args_destroy(self->result_->channel_args);
|
210
|
+
self->result_->Reset();
|
211
|
+
}
|
212
|
+
self->MaybeNotify(GRPC_ERROR_REF(error));
|
213
|
+
grpc_timer_cancel(&self->timer_);
|
214
|
+
} else {
|
215
|
+
// OnTimeout() was already invoked. Call Notify() again so that notify_
|
216
|
+
// can be invoked.
|
217
|
+
self->MaybeNotify(GRPC_ERROR_NONE);
|
218
|
+
}
|
219
|
+
}
|
220
|
+
self->Unref();
|
221
|
+
}
|
222
|
+
|
223
|
+
void Chttp2Connector::OnTimeout(void* arg, grpc_error* error) {
|
224
|
+
Chttp2Connector* self = static_cast<Chttp2Connector*>(arg);
|
225
|
+
{
|
226
|
+
MutexLock lock(&self->mu_);
|
227
|
+
if (!self->notify_error_.has_value()) {
|
228
|
+
// The transport did not receive the settings frame in time. Destroy the
|
229
|
+
// transport.
|
230
|
+
grpc_endpoint_delete_from_pollset_set(self->endpoint_,
|
231
|
+
self->args_.interested_parties);
|
232
|
+
// TODO(yashykt): The following two lines should be moved to
|
233
|
+
// SubchannelConnector::Result::Reset()
|
234
|
+
grpc_transport_destroy(self->result_->transport);
|
235
|
+
grpc_channel_args_destroy(self->result_->channel_args);
|
236
|
+
self->result_->Reset();
|
237
|
+
self->MaybeNotify(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
238
|
+
"connection attempt timed out before receiving SETTINGS frame"));
|
239
|
+
} else {
|
240
|
+
// OnReceiveSettings() was already invoked. Call Notify() again so that
|
241
|
+
// notify_ can be invoked.
|
242
|
+
self->MaybeNotify(GRPC_ERROR_NONE);
|
243
|
+
}
|
244
|
+
}
|
245
|
+
self->Unref();
|
246
|
+
}
|
247
|
+
|
248
|
+
void Chttp2Connector::MaybeNotify(grpc_error* error) {
|
249
|
+
if (notify_error_.has_value()) {
|
250
|
+
GRPC_ERROR_UNREF(error);
|
251
|
+
NullThenSchedClosure(DEBUG_LOCATION, ¬ify_, notify_error_.value());
|
252
|
+
// Clear state for a new Connect().
|
253
|
+
// Clear out the endpoint_, since it is the responsibility of
|
254
|
+
// the transport to shut it down.
|
255
|
+
endpoint_ = nullptr;
|
256
|
+
notify_error_.reset();
|
257
|
+
} else {
|
258
|
+
notify_error_ = error;
|
259
|
+
}
|
260
|
+
}
|
261
|
+
|
206
262
|
} // namespace grpc_core
|
@@ -39,6 +39,19 @@ class Chttp2Connector : public SubchannelConnector {
|
|
39
39
|
static void Connected(void* arg, grpc_error* error);
|
40
40
|
void StartHandshakeLocked();
|
41
41
|
static void OnHandshakeDone(void* arg, grpc_error* error);
|
42
|
+
static void OnReceiveSettings(void* arg, grpc_error* error);
|
43
|
+
static void OnTimeout(void* arg, grpc_error* error);
|
44
|
+
|
45
|
+
// We cannot invoke notify_ until both OnTimeout() and OnReceiveSettings()
|
46
|
+
// have been called since that is an indicator to the upper layer that we are
|
47
|
+
// done with the connection attempt. So, the notification process is broken
|
48
|
+
// into two steps. 1) Either OnTimeout() or OnReceiveSettings() gets invoked
|
49
|
+
// first. Whichever gets invoked, calls MaybeNotify() to set the result and
|
50
|
+
// triggers the other callback to be invoked. 2) When the other callback is
|
51
|
+
// invoked, we call MaybeNotify() again to actually invoke the notify_
|
52
|
+
// callback. Note that this only happens if the handshake is done and the
|
53
|
+
// connector is waiting on the SETTINGS frame.
|
54
|
+
void MaybeNotify(grpc_error* error);
|
42
55
|
|
43
56
|
Mutex mu_;
|
44
57
|
Args args_;
|
@@ -47,9 +60,13 @@ class Chttp2Connector : public SubchannelConnector {
|
|
47
60
|
bool shutdown_ = false;
|
48
61
|
bool connecting_ = false;
|
49
62
|
// Holds the endpoint when first created before being handed off to
|
50
|
-
// the handshake manager.
|
63
|
+
// the handshake manager, and then again after handshake is done.
|
51
64
|
grpc_endpoint* endpoint_ = nullptr;
|
52
65
|
grpc_closure connected_;
|
66
|
+
grpc_closure on_receive_settings_;
|
67
|
+
grpc_timer timer_;
|
68
|
+
grpc_closure on_timeout_;
|
69
|
+
absl::optional<grpc_error*> notify_error_;
|
53
70
|
RefCountedPtr<HandshakeManager> handshake_mgr_;
|
54
71
|
};
|
55
72
|
|
@@ -33,11 +33,10 @@
|
|
33
33
|
#include "src/core/lib/iomgr/sockaddr_utils.h"
|
34
34
|
#include "src/core/lib/security/credentials/credentials.h"
|
35
35
|
#include "src/core/lib/security/security_connector/security_connector.h"
|
36
|
-
#include "src/core/lib/security/transport/target_authority_table.h"
|
37
|
-
#include "src/core/lib/slice/slice_hash_table.h"
|
38
36
|
#include "src/core/lib/slice/slice_internal.h"
|
39
37
|
#include "src/core/lib/surface/api_trace.h"
|
40
38
|
#include "src/core/lib/surface/channel.h"
|
39
|
+
#include "src/core/lib/transport/authority_override.h"
|
41
40
|
#include "src/core/lib/uri/uri_parser.h"
|
42
41
|
|
43
42
|
namespace grpc_core {
|
@@ -75,39 +74,16 @@ class Chttp2SecureClientChannelFactory : public ClientChannelFactory {
|
|
75
74
|
"channel args.");
|
76
75
|
return nullptr;
|
77
76
|
}
|
78
|
-
//
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
grpc_uri_parse(server_uri_str, true /* suppress errors */);
|
85
|
-
GPR_ASSERT(server_uri != nullptr);
|
86
|
-
const TargetAuthorityTable* target_authority_table =
|
87
|
-
FindTargetAuthorityTableInArgs(args);
|
88
|
-
grpc_core::UniquePtr<char> authority;
|
89
|
-
if (target_authority_table != nullptr) {
|
90
|
-
// Find the authority for the target.
|
91
|
-
const char* target_uri_str =
|
92
|
-
Subchannel::GetUriFromSubchannelAddressArg(args);
|
93
|
-
grpc_uri* target_uri =
|
94
|
-
grpc_uri_parse(target_uri_str, false /* suppress errors */);
|
95
|
-
GPR_ASSERT(target_uri != nullptr);
|
96
|
-
if (target_uri->path[0] != '\0') { // "path" may be empty
|
97
|
-
const grpc_slice key = grpc_slice_from_static_string(
|
98
|
-
target_uri->path[0] == '/' ? target_uri->path + 1
|
99
|
-
: target_uri->path);
|
100
|
-
const grpc_core::UniquePtr<char>* value =
|
101
|
-
target_authority_table->Get(key);
|
102
|
-
if (value != nullptr) authority.reset(gpr_strdup(value->get()));
|
103
|
-
grpc_slice_unref_internal(key);
|
104
|
-
}
|
105
|
-
grpc_uri_destroy(target_uri);
|
106
|
-
}
|
107
|
-
// If the authority hasn't already been set (either because no target
|
108
|
-
// authority table was present or because the target was not present
|
109
|
-
// in the table), fall back to using the original server URI.
|
77
|
+
// Find the authority to use in the security connector.
|
78
|
+
// First, check the authority override channel arg.
|
79
|
+
// Otherwise, get it from the server name used to construct the
|
80
|
+
// channel.
|
81
|
+
grpc_core::UniquePtr<char> authority(
|
82
|
+
gpr_strdup(FindAuthorityOverrideInArgs(args)));
|
110
83
|
if (authority == nullptr) {
|
84
|
+
const char* server_uri_str =
|
85
|
+
grpc_channel_args_find_string(args, GRPC_ARG_SERVER_URI);
|
86
|
+
GPR_ASSERT(server_uri_str != nullptr);
|
111
87
|
authority = ResolverRegistry::GetDefaultAuthority(server_uri_str);
|
112
88
|
}
|
113
89
|
grpc_arg args_to_add[2];
|
@@ -120,7 +96,6 @@ class Chttp2SecureClientChannelFactory : public ClientChannelFactory {
|
|
120
96
|
}
|
121
97
|
grpc_channel_args* args_with_authority =
|
122
98
|
grpc_channel_args_copy_and_add(args, args_to_add, num_args_to_add);
|
123
|
-
grpc_uri_destroy(server_uri);
|
124
99
|
// Create the security connector using the credentials and target name.
|
125
100
|
grpc_channel_args* new_args_from_connector = nullptr;
|
126
101
|
RefCountedPtr<grpc_channel_security_connector>
|
@@ -23,22 +23,25 @@
|
|
23
23
|
#include <inttypes.h>
|
24
24
|
#include <limits.h>
|
25
25
|
#include <string.h>
|
26
|
+
#include <vector>
|
27
|
+
|
28
|
+
#include "absl/strings/str_cat.h"
|
29
|
+
#include "absl/strings/str_format.h"
|
26
30
|
|
27
31
|
#include <grpc/grpc.h>
|
28
32
|
#include <grpc/impl/codegen/grpc_types.h>
|
29
33
|
#include <grpc/support/alloc.h>
|
30
34
|
#include <grpc/support/log.h>
|
31
|
-
#include <grpc/support/string_util.h>
|
32
35
|
#include <grpc/support/sync.h>
|
33
36
|
|
34
|
-
#include "absl/strings/str_format.h"
|
35
|
-
|
36
37
|
#include "src/core/ext/filters/http/server/http_server_filter.h"
|
37
38
|
#include "src/core/ext/transport/chttp2/transport/chttp2_transport.h"
|
38
39
|
#include "src/core/ext/transport/chttp2/transport/internal.h"
|
39
40
|
#include "src/core/lib/channel/channel_args.h"
|
40
41
|
#include "src/core/lib/channel/handshaker.h"
|
41
42
|
#include "src/core/lib/channel/handshaker_registry.h"
|
43
|
+
#include "src/core/lib/gprpp/ref_counted.h"
|
44
|
+
#include "src/core/lib/gprpp/ref_counted_ptr.h"
|
42
45
|
#include "src/core/lib/iomgr/endpoint.h"
|
43
46
|
#include "src/core/lib/iomgr/resolve_address.h"
|
44
47
|
#include "src/core/lib/iomgr/resource_quota.h"
|
@@ -47,405 +50,432 @@
|
|
47
50
|
#include "src/core/lib/surface/api_trace.h"
|
48
51
|
#include "src/core/lib/surface/server.h"
|
49
52
|
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
53
|
+
namespace grpc_core {
|
54
|
+
namespace {
|
55
|
+
|
56
|
+
class Chttp2ServerListener : public Server::ListenerInterface {
|
57
|
+
public:
|
58
|
+
static grpc_error* Create(Server* server, const char* addr,
|
59
|
+
grpc_channel_args* args, int* port_num);
|
60
|
+
|
61
|
+
static grpc_error* CreateWithAcceptor(Server* server, const char* name,
|
62
|
+
grpc_channel_args* args);
|
63
|
+
|
64
|
+
// Do not instantiate directly. Use one of the factory methods above.
|
65
|
+
Chttp2ServerListener(Server* server, grpc_channel_args* args);
|
66
|
+
~Chttp2ServerListener();
|
67
|
+
|
68
|
+
void Start(Server* server,
|
69
|
+
const std::vector<grpc_pollset*>* pollsets) override;
|
70
|
+
|
71
|
+
channelz::ListenSocketNode* channelz_listen_socket_node() const override {
|
72
|
+
return channelz_listen_socket_.get();
|
73
|
+
}
|
74
|
+
|
75
|
+
void SetOnDestroyDone(grpc_closure* on_destroy_done) override;
|
62
76
|
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
77
|
+
void Orphan() override;
|
78
|
+
|
79
|
+
private:
|
80
|
+
class ConnectionState : public RefCounted<ConnectionState> {
|
81
|
+
public:
|
82
|
+
ConnectionState(Chttp2ServerListener* listener,
|
83
|
+
grpc_pollset* accepting_pollset,
|
84
|
+
grpc_tcp_server_acceptor* acceptor,
|
85
|
+
RefCountedPtr<HandshakeManager> handshake_mgr,
|
86
|
+
grpc_channel_args* args, grpc_endpoint* endpoint);
|
87
|
+
|
88
|
+
~ConnectionState();
|
89
|
+
|
90
|
+
private:
|
91
|
+
static void OnTimeout(void* arg, grpc_error* error);
|
92
|
+
static void OnReceiveSettings(void* arg, grpc_error* error);
|
93
|
+
static void OnHandshakeDone(void* arg, grpc_error* error);
|
94
|
+
|
95
|
+
Chttp2ServerListener* const listener_;
|
96
|
+
grpc_pollset* const accepting_pollset_;
|
97
|
+
grpc_tcp_server_acceptor* const acceptor_;
|
98
|
+
RefCountedPtr<HandshakeManager> handshake_mgr_;
|
99
|
+
// State for enforcing handshake timeout on receiving HTTP/2 settings.
|
100
|
+
grpc_chttp2_transport* transport_ = nullptr;
|
101
|
+
grpc_millis deadline_;
|
102
|
+
grpc_timer timer_;
|
103
|
+
grpc_closure on_timeout_;
|
104
|
+
grpc_closure on_receive_settings_;
|
105
|
+
grpc_pollset_set* const interested_parties_;
|
106
|
+
};
|
107
|
+
|
108
|
+
static void OnAccept(void* arg, grpc_endpoint* tcp,
|
109
|
+
grpc_pollset* accepting_pollset,
|
110
|
+
grpc_tcp_server_acceptor* acceptor);
|
111
|
+
|
112
|
+
RefCountedPtr<HandshakeManager> CreateHandshakeManager();
|
113
|
+
|
114
|
+
static void TcpServerShutdownComplete(void* arg, grpc_error* error);
|
115
|
+
|
116
|
+
static void DestroyListener(Server* /*server*/, void* arg,
|
117
|
+
grpc_closure* destroy_done);
|
118
|
+
|
119
|
+
Server* const server_;
|
120
|
+
grpc_channel_args* const args_;
|
121
|
+
grpc_tcp_server* tcp_server_;
|
122
|
+
Mutex mu_;
|
123
|
+
bool shutdown_ = true;
|
124
|
+
grpc_closure tcp_server_shutdown_complete_;
|
125
|
+
grpc_closure* on_destroy_done_ = nullptr;
|
126
|
+
HandshakeManager* pending_handshake_mgrs_ = nullptr;
|
127
|
+
RefCountedPtr<channelz::ListenSocketNode> channelz_listen_socket_;
|
76
128
|
};
|
77
129
|
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
130
|
+
//
|
131
|
+
// Chttp2ServerListener::ConnectionState
|
132
|
+
//
|
133
|
+
|
134
|
+
grpc_millis GetConnectionDeadline(const grpc_channel_args* args) {
|
135
|
+
int timeout_ms =
|
136
|
+
grpc_channel_args_find_integer(args, GRPC_ARG_SERVER_HANDSHAKE_TIMEOUT_MS,
|
137
|
+
{120 * GPR_MS_PER_SEC, 1, INT_MAX});
|
138
|
+
return ExecCtx::Get()->Now() + timeout_ms;
|
139
|
+
}
|
140
|
+
|
141
|
+
Chttp2ServerListener::ConnectionState::ConnectionState(
|
142
|
+
Chttp2ServerListener* listener, grpc_pollset* accepting_pollset,
|
143
|
+
grpc_tcp_server_acceptor* acceptor,
|
144
|
+
RefCountedPtr<HandshakeManager> handshake_mgr, grpc_channel_args* args,
|
145
|
+
grpc_endpoint* endpoint)
|
146
|
+
: listener_(listener),
|
147
|
+
accepting_pollset_(accepting_pollset),
|
148
|
+
acceptor_(acceptor),
|
149
|
+
handshake_mgr_(std::move(handshake_mgr)),
|
150
|
+
deadline_(GetConnectionDeadline(args)),
|
151
|
+
interested_parties_(grpc_pollset_set_create()) {
|
152
|
+
grpc_pollset_set_add_pollset(interested_parties_, accepting_pollset_);
|
153
|
+
HandshakerRegistry::AddHandshakers(HANDSHAKER_SERVER, args,
|
154
|
+
interested_parties_, handshake_mgr_.get());
|
155
|
+
handshake_mgr_->DoHandshake(endpoint, args, deadline_, acceptor_,
|
156
|
+
OnHandshakeDone, this);
|
157
|
+
}
|
158
|
+
|
159
|
+
Chttp2ServerListener::ConnectionState::~ConnectionState() {
|
160
|
+
if (transport_ != nullptr) {
|
161
|
+
GRPC_CHTTP2_UNREF_TRANSPORT(transport_, "receive settings timeout");
|
89
162
|
}
|
163
|
+
grpc_pollset_set_del_pollset(interested_parties_, accepting_pollset_);
|
164
|
+
grpc_pollset_set_destroy(interested_parties_);
|
90
165
|
}
|
91
166
|
|
92
|
-
|
93
|
-
|
94
|
-
|
167
|
+
void Chttp2ServerListener::ConnectionState::OnTimeout(void* arg,
|
168
|
+
grpc_error* error) {
|
169
|
+
ConnectionState* self = static_cast<ConnectionState*>(arg);
|
95
170
|
// Note that we may be called with GRPC_ERROR_NONE when the timer fires
|
96
171
|
// or with an error indicating that the timer system is being shut down.
|
97
172
|
if (error != GRPC_ERROR_CANCELLED) {
|
98
173
|
grpc_transport_op* op = grpc_make_transport_op(nullptr);
|
99
174
|
op->disconnect_with_error = GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
100
175
|
"Did not receive HTTP/2 settings before handshake timeout");
|
101
|
-
grpc_transport_perform_op(&
|
176
|
+
grpc_transport_perform_op(&self->transport_->base, op);
|
102
177
|
}
|
103
|
-
|
178
|
+
self->Unref();
|
104
179
|
}
|
105
180
|
|
106
|
-
|
107
|
-
|
108
|
-
|
181
|
+
void Chttp2ServerListener::ConnectionState::OnReceiveSettings(
|
182
|
+
void* arg, grpc_error* error) {
|
183
|
+
ConnectionState* self = static_cast<ConnectionState*>(arg);
|
109
184
|
if (error == GRPC_ERROR_NONE) {
|
110
|
-
grpc_timer_cancel(&
|
185
|
+
grpc_timer_cancel(&self->timer_);
|
111
186
|
}
|
112
|
-
|
187
|
+
self->Unref();
|
113
188
|
}
|
114
189
|
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
connection_state->svr_state->server);
|
127
|
-
if (resource_user != nullptr) {
|
128
|
-
grpc_resource_user_free(resource_user, GRPC_RESOURCE_QUOTA_CHANNEL_SIZE);
|
129
|
-
}
|
130
|
-
if (error == GRPC_ERROR_NONE && args->endpoint != nullptr) {
|
131
|
-
// We were shut down after handshaking completed successfully, so
|
132
|
-
// destroy the endpoint here.
|
133
|
-
// TODO(ctiller): It is currently necessary to shutdown endpoints
|
134
|
-
// before destroying them, even if we know that there are no
|
135
|
-
// pending read/write callbacks. This should be fixed, at which
|
136
|
-
// point this can be removed.
|
137
|
-
grpc_endpoint_shutdown(args->endpoint, GRPC_ERROR_NONE);
|
138
|
-
grpc_endpoint_destroy(args->endpoint);
|
139
|
-
grpc_channel_args_destroy(args->args);
|
140
|
-
grpc_slice_buffer_destroy_internal(args->read_buffer);
|
141
|
-
gpr_free(args->read_buffer);
|
142
|
-
}
|
143
|
-
} else {
|
144
|
-
// If the handshaking succeeded but there is no endpoint, then the
|
145
|
-
// handshaker may have handed off the connection to some external
|
146
|
-
// code, so we can just clean up here without creating a transport.
|
147
|
-
if (args->endpoint != nullptr) {
|
148
|
-
grpc_transport* transport = grpc_create_chttp2_transport(
|
149
|
-
args->args, args->endpoint, false, resource_user);
|
150
|
-
grpc_server_setup_transport(
|
151
|
-
connection_state->svr_state->server, transport,
|
152
|
-
connection_state->accepting_pollset, args->args,
|
153
|
-
grpc_chttp2_transport_get_socket_node(transport), resource_user);
|
154
|
-
// Use notify_on_receive_settings callback to enforce the
|
155
|
-
// handshake deadline.
|
156
|
-
connection_state->transport =
|
157
|
-
reinterpret_cast<grpc_chttp2_transport*>(transport);
|
158
|
-
gpr_ref(&connection_state->refs);
|
159
|
-
GRPC_CLOSURE_INIT(&connection_state->on_receive_settings,
|
160
|
-
on_receive_settings, connection_state,
|
161
|
-
grpc_schedule_on_exec_ctx);
|
162
|
-
grpc_chttp2_transport_start_reading(
|
163
|
-
transport, args->read_buffer, &connection_state->on_receive_settings);
|
164
|
-
grpc_channel_args_destroy(args->args);
|
165
|
-
gpr_ref(&connection_state->refs);
|
166
|
-
GRPC_CHTTP2_REF_TRANSPORT((grpc_chttp2_transport*)transport,
|
167
|
-
"receive settings timeout");
|
168
|
-
GRPC_CLOSURE_INIT(&connection_state->on_timeout, on_timeout,
|
169
|
-
connection_state, grpc_schedule_on_exec_ctx);
|
170
|
-
grpc_timer_init(&connection_state->timer, connection_state->deadline,
|
171
|
-
&connection_state->on_timeout);
|
172
|
-
} else {
|
190
|
+
void Chttp2ServerListener::ConnectionState::OnHandshakeDone(void* arg,
|
191
|
+
grpc_error* error) {
|
192
|
+
auto* args = static_cast<HandshakerArgs*>(arg);
|
193
|
+
ConnectionState* self = static_cast<ConnectionState*>(args->user_data);
|
194
|
+
{
|
195
|
+
MutexLock lock(&self->listener_->mu_);
|
196
|
+
grpc_resource_user* resource_user =
|
197
|
+
self->listener_->server_->default_resource_user();
|
198
|
+
if (error != GRPC_ERROR_NONE || self->listener_->shutdown_) {
|
199
|
+
const char* error_str = grpc_error_string(error);
|
200
|
+
gpr_log(GPR_DEBUG, "Handshaking failed: %s", error_str);
|
173
201
|
if (resource_user != nullptr) {
|
174
202
|
grpc_resource_user_free(resource_user,
|
175
203
|
GRPC_RESOURCE_QUOTA_CHANNEL_SIZE);
|
176
204
|
}
|
205
|
+
if (error == GRPC_ERROR_NONE && args->endpoint != nullptr) {
|
206
|
+
// We were shut down after handshaking completed successfully, so
|
207
|
+
// destroy the endpoint here.
|
208
|
+
// TODO(ctiller): It is currently necessary to shutdown endpoints
|
209
|
+
// before destroying them, even if we know that there are no
|
210
|
+
// pending read/write callbacks. This should be fixed, at which
|
211
|
+
// point this can be removed.
|
212
|
+
grpc_endpoint_shutdown(args->endpoint, GRPC_ERROR_NONE);
|
213
|
+
grpc_endpoint_destroy(args->endpoint);
|
214
|
+
grpc_channel_args_destroy(args->args);
|
215
|
+
grpc_slice_buffer_destroy_internal(args->read_buffer);
|
216
|
+
gpr_free(args->read_buffer);
|
217
|
+
}
|
218
|
+
} else {
|
219
|
+
// If the handshaking succeeded but there is no endpoint, then the
|
220
|
+
// handshaker may have handed off the connection to some external
|
221
|
+
// code, so we can just clean up here without creating a transport.
|
222
|
+
if (args->endpoint != nullptr) {
|
223
|
+
grpc_transport* transport = grpc_create_chttp2_transport(
|
224
|
+
args->args, args->endpoint, false, resource_user);
|
225
|
+
self->listener_->server_->SetupTransport(
|
226
|
+
transport, self->accepting_pollset_, args->args,
|
227
|
+
grpc_chttp2_transport_get_socket_node(transport), resource_user);
|
228
|
+
// Use notify_on_receive_settings callback to enforce the
|
229
|
+
// handshake deadline.
|
230
|
+
// Note: The reinterpret_cast<>s here are safe, because
|
231
|
+
// grpc_chttp2_transport is a C-style extension of
|
232
|
+
// grpc_transport, so this is morally equivalent of a
|
233
|
+
// static_cast<> to a derived class.
|
234
|
+
// TODO(roth): Change to static_cast<> when we C++-ify the
|
235
|
+
// transport API.
|
236
|
+
self->transport_ = reinterpret_cast<grpc_chttp2_transport*>(transport);
|
237
|
+
self->Ref().release(); // Held by OnReceiveSettings().
|
238
|
+
GRPC_CLOSURE_INIT(&self->on_receive_settings_, OnReceiveSettings, self,
|
239
|
+
grpc_schedule_on_exec_ctx);
|
240
|
+
grpc_chttp2_transport_start_reading(transport, args->read_buffer,
|
241
|
+
&self->on_receive_settings_);
|
242
|
+
grpc_channel_args_destroy(args->args);
|
243
|
+
self->Ref().release(); // Held by OnTimeout().
|
244
|
+
GRPC_CHTTP2_REF_TRANSPORT(
|
245
|
+
reinterpret_cast<grpc_chttp2_transport*>(transport),
|
246
|
+
"receive settings timeout");
|
247
|
+
GRPC_CLOSURE_INIT(&self->on_timeout_, OnTimeout, self,
|
248
|
+
grpc_schedule_on_exec_ctx);
|
249
|
+
grpc_timer_init(&self->timer_, self->deadline_, &self->on_timeout_);
|
250
|
+
} else {
|
251
|
+
if (resource_user != nullptr) {
|
252
|
+
grpc_resource_user_free(resource_user,
|
253
|
+
GRPC_RESOURCE_QUOTA_CHANNEL_SIZE);
|
254
|
+
}
|
255
|
+
}
|
177
256
|
}
|
257
|
+
self->handshake_mgr_->RemoveFromPendingMgrList(
|
258
|
+
&self->listener_->pending_handshake_mgrs_);
|
178
259
|
}
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
gpr_free(connection_state->acceptor);
|
184
|
-
grpc_tcp_server_unref(connection_state->svr_state->tcp_server);
|
185
|
-
server_connection_state_unref(connection_state);
|
260
|
+
self->handshake_mgr_.reset();
|
261
|
+
gpr_free(self->acceptor_);
|
262
|
+
grpc_tcp_server_unref(self->listener_->tcp_server_);
|
263
|
+
self->Unref();
|
186
264
|
}
|
187
265
|
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
266
|
+
//
|
267
|
+
// Chttp2ServerListener
|
268
|
+
//
|
269
|
+
|
270
|
+
grpc_error* Chttp2ServerListener::Create(Server* server, const char* addr,
|
271
|
+
grpc_channel_args* args,
|
272
|
+
int* port_num) {
|
273
|
+
std::vector<grpc_error*> error_list;
|
274
|
+
grpc_resolved_addresses* resolved = nullptr;
|
275
|
+
Chttp2ServerListener* listener = nullptr;
|
276
|
+
// The bulk of this method is inside of a lambda to make cleanup
|
277
|
+
// easier without using goto.
|
278
|
+
grpc_error* error = [&]() {
|
279
|
+
*port_num = -1;
|
280
|
+
/* resolve address */
|
281
|
+
grpc_error* error = grpc_blocking_resolve_address(addr, "https", &resolved);
|
282
|
+
if (error != GRPC_ERROR_NONE) return error;
|
283
|
+
// Create Chttp2ServerListener.
|
284
|
+
listener = new Chttp2ServerListener(server, args);
|
285
|
+
error = grpc_tcp_server_create(&listener->tcp_server_shutdown_complete_,
|
286
|
+
args, &listener->tcp_server_);
|
287
|
+
if (error != GRPC_ERROR_NONE) return error;
|
288
|
+
for (size_t i = 0; i < resolved->naddrs; i++) {
|
289
|
+
int port_temp;
|
290
|
+
error = grpc_tcp_server_add_port(listener->tcp_server_,
|
291
|
+
&resolved->addrs[i], &port_temp);
|
292
|
+
if (error != GRPC_ERROR_NONE) {
|
293
|
+
error_list.push_back(error);
|
294
|
+
} else {
|
295
|
+
if (*port_num == -1) {
|
296
|
+
*port_num = port_temp;
|
297
|
+
} else {
|
298
|
+
GPR_ASSERT(*port_num == port_temp);
|
299
|
+
}
|
300
|
+
}
|
301
|
+
}
|
302
|
+
if (error_list.size() == resolved->naddrs) {
|
303
|
+
std::string msg =
|
304
|
+
absl::StrFormat("No address added out of total %" PRIuPTR " resolved",
|
305
|
+
resolved->naddrs);
|
306
|
+
return GRPC_ERROR_CREATE_REFERENCING_FROM_COPIED_STRING(
|
307
|
+
msg.c_str(), error_list.data(), error_list.size());
|
308
|
+
} else if (!error_list.empty()) {
|
309
|
+
std::string msg = absl::StrFormat(
|
310
|
+
"Only %" PRIuPTR " addresses added out of total %" PRIuPTR
|
311
|
+
" resolved",
|
312
|
+
resolved->naddrs - error_list.size(), resolved->naddrs);
|
313
|
+
error = GRPC_ERROR_CREATE_REFERENCING_FROM_COPIED_STRING(
|
314
|
+
msg.c_str(), error_list.data(), error_list.size());
|
315
|
+
gpr_log(GPR_INFO, "WARNING: %s", grpc_error_string(error));
|
316
|
+
GRPC_ERROR_UNREF(error);
|
317
|
+
/* we managed to bind some addresses: continue */
|
318
|
+
}
|
319
|
+
// Create channelz node.
|
320
|
+
if (grpc_channel_args_find_bool(args, GRPC_ARG_ENABLE_CHANNELZ,
|
321
|
+
GRPC_ENABLE_CHANNELZ_DEFAULT)) {
|
322
|
+
listener->channelz_listen_socket_ =
|
323
|
+
MakeRefCounted<channelz::ListenSocketNode>(
|
324
|
+
addr, absl::StrFormat("chttp2 listener %s", addr));
|
325
|
+
}
|
326
|
+
/* Register with the server only upon success */
|
327
|
+
server->AddListener(OrphanablePtr<Server::ListenerInterface>(listener));
|
328
|
+
return GRPC_ERROR_NONE;
|
329
|
+
}();
|
330
|
+
if (resolved != nullptr) {
|
331
|
+
grpc_resolved_addresses_destroy(resolved);
|
332
|
+
}
|
333
|
+
if (error != GRPC_ERROR_NONE) {
|
334
|
+
if (listener != nullptr) {
|
335
|
+
if (listener->tcp_server_ != nullptr) {
|
336
|
+
grpc_tcp_server_unref(listener->tcp_server_);
|
337
|
+
} else {
|
338
|
+
delete listener;
|
339
|
+
}
|
340
|
+
} else {
|
341
|
+
grpc_channel_args_destroy(args);
|
342
|
+
}
|
343
|
+
*port_num = 0;
|
199
344
|
}
|
200
|
-
|
201
|
-
|
345
|
+
for (grpc_error* error : error_list) {
|
346
|
+
GRPC_ERROR_UNREF(error);
|
347
|
+
}
|
348
|
+
return error;
|
349
|
+
}
|
350
|
+
|
351
|
+
grpc_error* Chttp2ServerListener::CreateWithAcceptor(Server* server,
|
352
|
+
const char* name,
|
353
|
+
grpc_channel_args* args) {
|
354
|
+
Chttp2ServerListener* listener = new Chttp2ServerListener(server, args);
|
355
|
+
grpc_error* error = grpc_tcp_server_create(
|
356
|
+
&listener->tcp_server_shutdown_complete_, args, &listener->tcp_server_);
|
357
|
+
if (error != GRPC_ERROR_NONE) {
|
358
|
+
delete listener;
|
359
|
+
return error;
|
360
|
+
}
|
361
|
+
// TODO(yangg) channelz
|
362
|
+
TcpServerFdHandler** arg_val =
|
363
|
+
grpc_channel_args_find_pointer<TcpServerFdHandler*>(args, name);
|
364
|
+
*arg_val = grpc_tcp_server_create_fd_handler(listener->tcp_server_);
|
365
|
+
server->AddListener(OrphanablePtr<Server::ListenerInterface>(listener));
|
366
|
+
return GRPC_ERROR_NONE;
|
367
|
+
}
|
368
|
+
|
369
|
+
Chttp2ServerListener::Chttp2ServerListener(Server* server,
|
370
|
+
grpc_channel_args* args)
|
371
|
+
: server_(server), args_(args) {
|
372
|
+
GRPC_CLOSURE_INIT(&tcp_server_shutdown_complete_, TcpServerShutdownComplete,
|
373
|
+
this, grpc_schedule_on_exec_ctx);
|
374
|
+
}
|
375
|
+
|
376
|
+
Chttp2ServerListener::~Chttp2ServerListener() {
|
377
|
+
grpc_channel_args_destroy(args_);
|
378
|
+
}
|
379
|
+
|
380
|
+
/* Server callback: start listening on our ports */
|
381
|
+
void Chttp2ServerListener::Start(Server* /*server*/,
|
382
|
+
const std::vector<grpc_pollset*>* pollsets) {
|
383
|
+
{
|
384
|
+
MutexLock lock(&mu_);
|
385
|
+
shutdown_ = false;
|
386
|
+
}
|
387
|
+
grpc_tcp_server_start(tcp_server_, pollsets, OnAccept, this);
|
388
|
+
}
|
389
|
+
|
390
|
+
void Chttp2ServerListener::SetOnDestroyDone(grpc_closure* on_destroy_done) {
|
391
|
+
MutexLock lock(&mu_);
|
392
|
+
on_destroy_done_ = on_destroy_done;
|
393
|
+
}
|
394
|
+
|
395
|
+
RefCountedPtr<HandshakeManager> Chttp2ServerListener::CreateHandshakeManager() {
|
396
|
+
MutexLock lock(&mu_);
|
397
|
+
if (shutdown_) return nullptr;
|
398
|
+
grpc_resource_user* resource_user = server_->default_resource_user();
|
202
399
|
if (resource_user != nullptr &&
|
203
400
|
!grpc_resource_user_safe_alloc(resource_user,
|
204
401
|
GRPC_RESOURCE_QUOTA_CHANNEL_SIZE)) {
|
205
|
-
gpr_log(
|
206
|
-
|
207
|
-
|
208
|
-
|
402
|
+
gpr_log(GPR_ERROR,
|
403
|
+
"Memory quota exhausted, rejecting connection, no handshaking.");
|
404
|
+
return nullptr;
|
405
|
+
}
|
406
|
+
auto handshake_mgr = MakeRefCounted<HandshakeManager>();
|
407
|
+
handshake_mgr->AddToPendingMgrList(&pending_handshake_mgrs_);
|
408
|
+
grpc_tcp_server_ref(tcp_server_); // Ref held by ConnectionState.
|
409
|
+
return handshake_mgr;
|
410
|
+
}
|
411
|
+
|
412
|
+
void Chttp2ServerListener::OnAccept(void* arg, grpc_endpoint* tcp,
|
413
|
+
grpc_pollset* accepting_pollset,
|
414
|
+
grpc_tcp_server_acceptor* acceptor) {
|
415
|
+
Chttp2ServerListener* self = static_cast<Chttp2ServerListener*>(arg);
|
416
|
+
RefCountedPtr<HandshakeManager> handshake_mgr =
|
417
|
+
self->CreateHandshakeManager();
|
418
|
+
if (handshake_mgr == nullptr) {
|
209
419
|
grpc_endpoint_shutdown(tcp, GRPC_ERROR_NONE);
|
210
420
|
grpc_endpoint_destroy(tcp);
|
211
421
|
gpr_free(acceptor);
|
212
422
|
return;
|
213
423
|
}
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
gpr_mu_unlock(&state->mu);
|
218
|
-
server_connection_state* connection_state =
|
219
|
-
static_cast<server_connection_state*>(
|
220
|
-
gpr_zalloc(sizeof(*connection_state)));
|
221
|
-
gpr_ref_init(&connection_state->refs, 1);
|
222
|
-
connection_state->svr_state = state;
|
223
|
-
connection_state->accepting_pollset = accepting_pollset;
|
224
|
-
connection_state->acceptor = acceptor;
|
225
|
-
connection_state->handshake_mgr = handshake_mgr;
|
226
|
-
connection_state->interested_parties = grpc_pollset_set_create();
|
227
|
-
grpc_pollset_set_add_pollset(connection_state->interested_parties,
|
228
|
-
connection_state->accepting_pollset);
|
229
|
-
grpc_core::HandshakerRegistry::AddHandshakers(
|
230
|
-
grpc_core::HANDSHAKER_SERVER, state->args,
|
231
|
-
connection_state->interested_parties,
|
232
|
-
connection_state->handshake_mgr.get());
|
233
|
-
const grpc_arg* timeout_arg =
|
234
|
-
grpc_channel_args_find(state->args, GRPC_ARG_SERVER_HANDSHAKE_TIMEOUT_MS);
|
235
|
-
connection_state->deadline =
|
236
|
-
grpc_core::ExecCtx::Get()->Now() +
|
237
|
-
grpc_channel_arg_get_integer(timeout_arg,
|
238
|
-
{120 * GPR_MS_PER_SEC, 1, INT_MAX});
|
239
|
-
connection_state->handshake_mgr->DoHandshake(
|
240
|
-
tcp, state->args, connection_state->deadline, acceptor, on_handshake_done,
|
241
|
-
connection_state);
|
424
|
+
// Deletes itself when done.
|
425
|
+
new ConnectionState(self, accepting_pollset, acceptor,
|
426
|
+
std::move(handshake_mgr), self->args_, tcp);
|
242
427
|
}
|
243
428
|
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
size_t pollset_count) {
|
248
|
-
server_state* state = static_cast<server_state*>(arg);
|
249
|
-
gpr_mu_lock(&state->mu);
|
250
|
-
state->shutdown = false;
|
251
|
-
gpr_mu_unlock(&state->mu);
|
252
|
-
grpc_tcp_server_start(state->tcp_server, pollsets, pollset_count, on_accept,
|
253
|
-
state);
|
254
|
-
}
|
255
|
-
|
256
|
-
static void tcp_server_shutdown_complete(void* arg, grpc_error* error) {
|
257
|
-
server_state* state = static_cast<server_state*>(arg);
|
429
|
+
void Chttp2ServerListener::TcpServerShutdownComplete(void* arg,
|
430
|
+
grpc_error* error) {
|
431
|
+
Chttp2ServerListener* self = static_cast<Chttp2ServerListener*>(arg);
|
258
432
|
/* ensure all threads have unlocked */
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
|
433
|
+
grpc_closure* destroy_done = nullptr;
|
434
|
+
{
|
435
|
+
MutexLock lock(&self->mu_);
|
436
|
+
destroy_done = self->on_destroy_done_;
|
437
|
+
GPR_ASSERT(self->shutdown_);
|
438
|
+
if (self->pending_handshake_mgrs_ != nullptr) {
|
439
|
+
self->pending_handshake_mgrs_->ShutdownAllPending(GRPC_ERROR_REF(error));
|
440
|
+
}
|
441
|
+
self->channelz_listen_socket_.reset();
|
264
442
|
}
|
265
|
-
state->channelz_listen_socket.reset();
|
266
|
-
gpr_mu_unlock(&state->mu);
|
267
443
|
// Flush queued work before destroying handshaker factory, since that
|
268
444
|
// may do a synchronous unref.
|
269
|
-
|
445
|
+
ExecCtx::Get()->Flush();
|
270
446
|
if (destroy_done != nullptr) {
|
271
|
-
|
272
|
-
|
273
|
-
grpc_core::ExecCtx::Get()->Flush();
|
447
|
+
ExecCtx::Run(DEBUG_LOCATION, destroy_done, GRPC_ERROR_REF(error));
|
448
|
+
ExecCtx::Get()->Flush();
|
274
449
|
}
|
275
|
-
|
276
|
-
gpr_mu_destroy(&state->mu);
|
277
|
-
gpr_free(state);
|
450
|
+
delete self;
|
278
451
|
}
|
279
452
|
|
280
453
|
/* Server callback: destroy the tcp listener (so we don't generate further
|
281
454
|
callbacks) */
|
282
|
-
|
283
|
-
|
284
|
-
|
285
|
-
|
286
|
-
|
287
|
-
|
288
|
-
|
289
|
-
gpr_mu_unlock(&state->mu);
|
455
|
+
void Chttp2ServerListener::Orphan() {
|
456
|
+
grpc_tcp_server* tcp_server;
|
457
|
+
{
|
458
|
+
MutexLock lock(&mu_);
|
459
|
+
shutdown_ = true;
|
460
|
+
tcp_server = tcp_server_;
|
461
|
+
}
|
290
462
|
grpc_tcp_server_shutdown_listeners(tcp_server);
|
291
463
|
grpc_tcp_server_unref(tcp_server);
|
292
464
|
}
|
293
465
|
|
294
|
-
|
295
|
-
const char* name,
|
296
|
-
grpc_channel_args* args) {
|
297
|
-
grpc_tcp_server* tcp_server = nullptr;
|
298
|
-
grpc_error* err = GRPC_ERROR_NONE;
|
299
|
-
server_state* state = nullptr;
|
300
|
-
const grpc_arg* arg = nullptr;
|
301
|
-
grpc_core::TcpServerFdHandler** arg_val = nullptr;
|
302
|
-
state = static_cast<server_state*>(gpr_zalloc(sizeof(*state)));
|
303
|
-
GRPC_CLOSURE_INIT(&state->tcp_server_shutdown_complete,
|
304
|
-
tcp_server_shutdown_complete, state,
|
305
|
-
grpc_schedule_on_exec_ctx);
|
306
|
-
err = grpc_tcp_server_create(&state->tcp_server_shutdown_complete, args,
|
307
|
-
&tcp_server);
|
308
|
-
if (err != GRPC_ERROR_NONE) {
|
309
|
-
goto error;
|
310
|
-
}
|
311
|
-
state->server = server;
|
312
|
-
state->tcp_server = tcp_server;
|
313
|
-
state->args = args;
|
314
|
-
state->shutdown = true;
|
315
|
-
gpr_mu_init(&state->mu);
|
316
|
-
// TODO(yangg) channelz
|
317
|
-
arg = grpc_channel_args_find(args, name);
|
318
|
-
GPR_ASSERT(arg->type == GRPC_ARG_POINTER);
|
319
|
-
arg_val = static_cast<grpc_core::TcpServerFdHandler**>(arg->value.pointer.p);
|
320
|
-
*arg_val = grpc_tcp_server_create_fd_handler(tcp_server);
|
321
|
-
|
322
|
-
grpc_server_add_listener(server, state, server_start_listener,
|
323
|
-
server_destroy_listener, /* node */ nullptr);
|
324
|
-
return err;
|
325
|
-
|
326
|
-
/* Error path: cleanup and return */
|
327
|
-
error:
|
328
|
-
GPR_ASSERT(err != GRPC_ERROR_NONE);
|
329
|
-
if (tcp_server) {
|
330
|
-
grpc_tcp_server_unref(tcp_server);
|
331
|
-
} else {
|
332
|
-
grpc_channel_args_destroy(args);
|
333
|
-
gpr_free(state);
|
334
|
-
}
|
335
|
-
return err;
|
336
|
-
}
|
466
|
+
} // namespace
|
337
467
|
|
338
|
-
|
339
|
-
|
340
|
-
|
341
|
-
grpc_resolved_addresses* resolved = nullptr;
|
342
|
-
grpc_tcp_server* tcp_server = nullptr;
|
343
|
-
size_t i;
|
344
|
-
size_t count = 0;
|
345
|
-
int port_temp;
|
346
|
-
grpc_error* err = GRPC_ERROR_NONE;
|
347
|
-
server_state* state = nullptr;
|
348
|
-
grpc_error** errors = nullptr;
|
349
|
-
size_t naddrs = 0;
|
350
|
-
const grpc_arg* arg = nullptr;
|
351
|
-
|
352
|
-
*port_num = -1;
|
468
|
+
//
|
469
|
+
// Chttp2ServerAddPort()
|
470
|
+
//
|
353
471
|
|
472
|
+
grpc_error* Chttp2ServerAddPort(Server* server, const char* addr,
|
473
|
+
grpc_channel_args* args, int* port_num) {
|
354
474
|
if (strncmp(addr, "external:", 9) == 0) {
|
355
|
-
return
|
356
|
-
|
357
|
-
|
358
|
-
/* resolve address */
|
359
|
-
err = grpc_blocking_resolve_address(addr, "https", &resolved);
|
360
|
-
if (err != GRPC_ERROR_NONE) {
|
361
|
-
goto error;
|
362
|
-
}
|
363
|
-
state = static_cast<server_state*>(gpr_zalloc(sizeof(*state)));
|
364
|
-
GRPC_CLOSURE_INIT(&state->tcp_server_shutdown_complete,
|
365
|
-
tcp_server_shutdown_complete, state,
|
366
|
-
grpc_schedule_on_exec_ctx);
|
367
|
-
err = grpc_tcp_server_create(&state->tcp_server_shutdown_complete, args,
|
368
|
-
&tcp_server);
|
369
|
-
if (err != GRPC_ERROR_NONE) {
|
370
|
-
goto error;
|
371
|
-
}
|
372
|
-
|
373
|
-
state->server = server;
|
374
|
-
state->tcp_server = tcp_server;
|
375
|
-
state->args = args;
|
376
|
-
state->shutdown = true;
|
377
|
-
gpr_mu_init(&state->mu);
|
378
|
-
|
379
|
-
naddrs = resolved->naddrs;
|
380
|
-
errors = static_cast<grpc_error**>(gpr_malloc(sizeof(*errors) * naddrs));
|
381
|
-
for (i = 0; i < naddrs; i++) {
|
382
|
-
errors[i] =
|
383
|
-
grpc_tcp_server_add_port(tcp_server, &resolved->addrs[i], &port_temp);
|
384
|
-
if (errors[i] == GRPC_ERROR_NONE) {
|
385
|
-
if (*port_num == -1) {
|
386
|
-
*port_num = port_temp;
|
387
|
-
} else {
|
388
|
-
GPR_ASSERT(*port_num == port_temp);
|
389
|
-
}
|
390
|
-
count++;
|
391
|
-
}
|
475
|
+
return grpc_core::Chttp2ServerListener::CreateWithAcceptor(server, addr,
|
476
|
+
args);
|
392
477
|
}
|
393
|
-
|
394
|
-
char* msg;
|
395
|
-
gpr_asprintf(&msg, "No address added out of total %" PRIuPTR " resolved",
|
396
|
-
naddrs);
|
397
|
-
err = GRPC_ERROR_CREATE_REFERENCING_FROM_COPIED_STRING(msg, errors, naddrs);
|
398
|
-
gpr_free(msg);
|
399
|
-
goto error;
|
400
|
-
} else if (count != naddrs) {
|
401
|
-
char* msg;
|
402
|
-
gpr_asprintf(&msg,
|
403
|
-
"Only %" PRIuPTR " addresses added out of total %" PRIuPTR
|
404
|
-
" resolved",
|
405
|
-
count, naddrs);
|
406
|
-
err = GRPC_ERROR_CREATE_REFERENCING_FROM_COPIED_STRING(msg, errors, naddrs);
|
407
|
-
gpr_free(msg);
|
408
|
-
|
409
|
-
const char* warning_message = grpc_error_string(err);
|
410
|
-
gpr_log(GPR_INFO, "WARNING: %s", warning_message);
|
411
|
-
|
412
|
-
/* we managed to bind some addresses: continue */
|
413
|
-
}
|
414
|
-
grpc_resolved_addresses_destroy(resolved);
|
415
|
-
|
416
|
-
arg = grpc_channel_args_find(args, GRPC_ARG_ENABLE_CHANNELZ);
|
417
|
-
if (grpc_channel_arg_get_bool(arg, GRPC_ENABLE_CHANNELZ_DEFAULT)) {
|
418
|
-
state->channelz_listen_socket =
|
419
|
-
grpc_core::MakeRefCounted<grpc_core::channelz::ListenSocketNode>(
|
420
|
-
addr, absl::StrFormat("chttp2 listener %s", addr));
|
421
|
-
}
|
422
|
-
|
423
|
-
/* Register with the server only upon success */
|
424
|
-
grpc_server_add_listener(server, state, server_start_listener,
|
425
|
-
server_destroy_listener,
|
426
|
-
state->channelz_listen_socket);
|
427
|
-
goto done;
|
428
|
-
|
429
|
-
/* Error path: cleanup and return */
|
430
|
-
error:
|
431
|
-
GPR_ASSERT(err != GRPC_ERROR_NONE);
|
432
|
-
if (resolved) {
|
433
|
-
grpc_resolved_addresses_destroy(resolved);
|
434
|
-
}
|
435
|
-
if (tcp_server) {
|
436
|
-
grpc_tcp_server_unref(tcp_server);
|
437
|
-
} else {
|
438
|
-
grpc_channel_args_destroy(args);
|
439
|
-
gpr_free(state);
|
440
|
-
}
|
441
|
-
*port_num = 0;
|
442
|
-
|
443
|
-
done:
|
444
|
-
if (errors != nullptr) {
|
445
|
-
for (i = 0; i < naddrs; i++) {
|
446
|
-
GRPC_ERROR_UNREF(errors[i]);
|
447
|
-
}
|
448
|
-
gpr_free(errors);
|
449
|
-
}
|
450
|
-
return err;
|
478
|
+
return grpc_core::Chttp2ServerListener::Create(server, addr, args, port_num);
|
451
479
|
}
|
480
|
+
|
481
|
+
} // namespace grpc_core
|