grpc 1.35.0.pre1 → 1.37.1
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 +121 -89
- data/include/grpc/grpc.h +15 -1
- data/include/grpc/grpc_security.h +16 -11
- data/include/grpc/impl/codegen/port_platform.h +2 -0
- data/src/core/ext/filters/client_channel/client_channel.cc +359 -331
- data/src/core/ext/filters/client_channel/client_channel.h +0 -2
- data/src/core/ext/filters/client_channel/client_channel_factory.h +2 -1
- data/src/core/ext/filters/client_channel/config_selector.h +9 -1
- data/src/core/ext/filters/client_channel/dynamic_filters.cc +9 -4
- data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +24 -142
- data/src/core/ext/filters/client_channel/global_subchannel_pool.h +15 -10
- data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +2 -2
- data/src/core/ext/filters/client_channel/lb_policy.cc +3 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +3 -5
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h +1 -2
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +1 -2
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +8 -6
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +23 -0
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +27 -0
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +289 -170
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_args.h +5 -0
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +8 -25
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +232 -110
- data/src/core/ext/filters/client_channel/local_subchannel_pool.cc +27 -67
- data/src/core/ext/filters/client_channel/local_subchannel_pool.h +10 -9
- data/src/core/ext/filters/client_channel/resolver.cc +5 -5
- data/src/core/ext/filters/client_channel/resolver.h +1 -12
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +36 -45
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +2 -2
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +3 -1
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +34 -50
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +16 -14
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +18 -15
- data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +377 -0
- data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +4 -4
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +307 -155
- data/src/core/ext/filters/client_channel/server_address.cc +9 -0
- data/src/core/ext/filters/client_channel/server_address.h +31 -0
- data/src/core/ext/filters/client_channel/subchannel.cc +69 -146
- data/src/core/ext/filters/client_channel/subchannel.h +63 -95
- data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +16 -2
- data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +10 -8
- data/src/core/ext/filters/client_idle/client_idle_filter.cc +1 -1
- data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +500 -0
- data/src/core/ext/filters/fault_injection/fault_injection_filter.h +39 -0
- data/src/core/ext/filters/fault_injection/service_config_parser.cc +189 -0
- data/src/core/ext/filters/fault_injection/service_config_parser.h +85 -0
- data/src/core/ext/filters/max_age/max_age_filter.cc +35 -32
- data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +1 -1
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +2 -2
- data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +3 -2
- 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 +3 -2
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +490 -178
- data/src/core/ext/transport/chttp2/server/chttp2_server.h +11 -2
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +11 -1
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +1 -1
- data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +62 -18
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +39 -7
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +12 -1
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +5 -1
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +1 -1
- data/src/core/ext/transport/chttp2/transport/internal.h +1 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.c +406 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.h +1459 -0
- data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +0 -1
- data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.c +350 -0
- data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +1348 -0
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +11 -16
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +42 -59
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c +3 -2
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +15 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +25 -1
- data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +75 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +9 -9
- data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +7 -7
- data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +28 -13
- data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +6 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +25 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +0 -1
- data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +11 -5
- data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.h +41 -7
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +0 -1
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +23 -21
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +122 -77
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +13 -9
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +37 -5
- data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +0 -1
- data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.c +144 -0
- data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.h +488 -0
- data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.c +141 -0
- data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.h +452 -0
- data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +11 -9
- data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +44 -27
- data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +57 -16
- data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +150 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +0 -1
- data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.c +29 -0
- data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.h +67 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.c +79 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.h +268 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c +78 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.h +281 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c +41 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h +113 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +19 -21
- data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +64 -51
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.c +0 -1
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +16 -13
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +50 -18
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +4 -7
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +0 -17
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +0 -1
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +30 -23
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +85 -73
- data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.c +0 -3
- data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.c +0 -3
- data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +0 -1
- data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.c +0 -2
- data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.c +93 -0
- data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.h +323 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.c +36 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.h +90 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +0 -1
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.c +46 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.h +124 -0
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +21 -4
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +29 -0
- data/src/core/ext/upb-generated/udpa/type/v1/typed_struct.upb.c +33 -0
- data/src/core/ext/upb-generated/udpa/type/v1/typed_struct.upb.h +77 -0
- data/src/core/ext/upb-generated/{udpa/core/v1 → xds/core/v3}/authority.upb.c +5 -5
- data/src/core/ext/upb-generated/xds/core/v3/authority.upb.h +60 -0
- data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.c +52 -0
- data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.h +143 -0
- data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +42 -0
- data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.h +84 -0
- data/src/core/ext/upb-generated/{udpa/core/v1 → xds/core/v3}/resource.upb.c +9 -9
- data/src/core/ext/upb-generated/xds/core/v3/resource.upb.h +94 -0
- data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +54 -0
- data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.h +166 -0
- data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +36 -0
- data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.h +85 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.c +354 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.h +140 -0
- data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.c +168 -171
- data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.c +383 -0
- data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.h +115 -0
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +405 -420
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.h +2 -2
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.c +12 -9
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +177 -171
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.h +10 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.c +88 -88
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.c +153 -153
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +10 -7
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.c +4 -7
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.c +33 -20
- data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.c +56 -59
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.c +116 -111
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.c +129 -121
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.c +21 -24
- data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/stats.upbdefs.c +141 -0
- data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/stats.upbdefs.h +70 -0
- data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.c +141 -0
- data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.h +70 -0
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.c +17 -13
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +753 -724
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.h +10 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.c +22 -25
- data/src/core/ext/upbdefs-generated/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.c +51 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/common/fault/v3/fault.upbdefs.c +102 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/common/fault/v3/fault.upbdefs.h +55 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.c +120 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.h +45 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.c +76 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +371 -377
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.c +12 -16
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +112 -108
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.c +45 -53
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c +177 -180
- data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.c +92 -102
- data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-generated/envoy/service/endpoint/v3/eds.upbdefs.c +32 -42
- data/src/core/ext/upbdefs-generated/envoy/service/listener/v3/lds.upbdefs.c +30 -40
- data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.c +4 -7
- data/src/core/ext/upbdefs-generated/envoy/service/route/v3/rds.upbdefs.c +38 -44
- data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.c +130 -0
- data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.h +50 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/node.upbdefs.c +56 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/node.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.c +30 -33
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/struct.upbdefs.c +63 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/struct.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.c +8 -7
- data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.c +9 -9
- data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.c +9 -8
- data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.c +8 -8
- data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.c +8 -8
- data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.c +9 -8
- data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.c +8 -8
- data/src/core/ext/upbdefs-generated/udpa/type/v1/typed_struct.upbdefs.c +44 -0
- data/src/core/ext/upbdefs-generated/udpa/type/v1/typed_struct.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.c +14 -11
- data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.c +42 -0
- data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.c +62 -0
- data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.c +45 -0
- data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.c +49 -0
- data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.c +67 -0
- data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.c +50 -0
- data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.h +35 -0
- data/src/core/ext/xds/xds_api.cc +2149 -666
- data/src/core/ext/xds/xds_api.h +321 -119
- data/src/core/ext/xds/xds_bootstrap.cc +80 -45
- data/src/core/ext/xds/xds_bootstrap.h +17 -5
- data/src/core/ext/xds/xds_certificate_provider.cc +180 -74
- data/src/core/ext/xds/xds_certificate_provider.h +83 -44
- data/src/core/ext/xds/xds_client.cc +181 -34
- data/src/core/ext/xds/xds_client.h +29 -0
- data/src/core/ext/xds/xds_client_stats.cc +2 -1
- data/src/core/ext/xds/xds_client_stats.h +2 -2
- data/src/core/ext/xds/xds_http_fault_filter.cc +226 -0
- data/src/core/ext/xds/xds_http_fault_filter.h +63 -0
- data/src/core/ext/xds/xds_http_filters.cc +114 -0
- data/src/core/ext/xds/xds_http_filters.h +130 -0
- data/src/core/ext/xds/xds_server_config_fetcher.cc +425 -24
- data/src/core/lib/channel/channel_stack.cc +12 -0
- data/src/core/lib/channel/channel_stack.h +7 -0
- data/src/core/lib/channel/channelz.cc +92 -4
- data/src/core/lib/channel/channelz.h +30 -1
- data/src/core/lib/channel/channelz_registry.cc +14 -0
- data/src/core/lib/channel/handshaker.cc +2 -44
- data/src/core/lib/channel/handshaker.h +1 -18
- data/src/core/lib/channel/status_util.cc +12 -2
- data/src/core/lib/channel/status_util.h +5 -0
- data/src/core/lib/gpr/log.cc +6 -1
- data/src/core/lib/gpr/sync_abseil.cc +3 -6
- data/src/core/lib/gpr/sync_windows.cc +2 -2
- data/src/core/lib/gprpp/atomic.h +3 -3
- data/src/core/lib/gprpp/dual_ref_counted.h +3 -3
- data/src/core/lib/gprpp/mpscq.cc +2 -2
- data/src/core/lib/gprpp/ref_counted.h +1 -1
- data/src/core/lib/gprpp/ref_counted_ptr.h +2 -0
- data/src/core/lib/gprpp/sync.h +129 -40
- data/src/core/lib/gprpp/thd.h +1 -1
- data/src/core/lib/gprpp/time_util.cc +77 -0
- data/src/core/lib/gprpp/time_util.h +42 -0
- data/src/core/lib/http/httpcli_security_connector.cc +2 -2
- data/src/core/lib/iomgr/buffer_list.h +1 -1
- data/src/core/lib/iomgr/cfstream_handle.cc +2 -2
- data/src/core/lib/iomgr/error.h +1 -1
- data/src/core/lib/iomgr/ev_apple.cc +11 -8
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +3 -3
- data/src/core/lib/iomgr/ev_epollex_linux.cc +4 -4
- data/src/core/lib/iomgr/ev_posix.cc +3 -3
- data/src/core/lib/iomgr/exec_ctx.cc +6 -2
- data/src/core/lib/iomgr/iomgr_posix.cc +0 -1
- data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +0 -1
- data/src/core/lib/iomgr/resource_quota.cc +1 -1
- data/src/core/lib/iomgr/sockaddr_utils.cc +121 -1
- data/src/core/lib/iomgr/sockaddr_utils.h +25 -0
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +1 -0
- data/src/core/lib/iomgr/tcp_client_posix.cc +1 -1
- data/src/core/lib/iomgr/tcp_posix.cc +5 -8
- data/src/core/lib/iomgr/tcp_uv.cc +2 -2
- data/src/core/lib/iomgr/timer_generic.cc +2 -2
- data/src/core/lib/iomgr/timer_manager.cc +1 -1
- data/src/core/lib/iomgr/wakeup_fd_nospecial.cc +1 -1
- data/src/core/lib/matchers/matchers.cc +339 -0
- data/src/core/lib/matchers/matchers.h +160 -0
- data/src/core/lib/security/credentials/alts/alts_credentials.cc +2 -1
- data/src/core/lib/security/credentials/alts/alts_credentials.h +1 -1
- data/src/core/lib/security/credentials/credentials.h +2 -1
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +1 -1
- data/src/core/lib/security/credentials/external/external_account_credentials.cc +2 -2
- data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +1 -1
- data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +1 -1
- data/src/core/lib/security/credentials/fake/fake_credentials.cc +1 -1
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +7 -6
- data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +2 -2
- data/src/core/lib/security/credentials/jwt/json_token.cc +0 -3
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +0 -3
- data/src/core/lib/security/credentials/local/local_credentials.cc +2 -1
- data/src/core/lib/security/credentials/local/local_credentials.h +1 -1
- data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +2 -1
- data/src/core/lib/security/credentials/ssl/ssl_credentials.h +1 -1
- data/src/core/lib/security/credentials/tls/tls_credentials.cc +2 -1
- data/src/core/lib/security/credentials/tls/tls_credentials.h +1 -1
- data/src/core/lib/security/credentials/xds/xds_credentials.cc +128 -59
- data/src/core/lib/security/credentials/xds/xds_credentials.h +3 -3
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +5 -5
- data/src/core/lib/security/security_connector/ssl_utils.cc +9 -4
- data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +32 -14
- data/src/core/lib/security/transport/security_handshaker.cc +33 -5
- data/src/core/lib/security/transport/server_auth_filter.cc +7 -0
- data/src/core/lib/slice/slice_intern.cc +5 -6
- data/src/core/lib/surface/channel.h +3 -3
- data/src/core/lib/surface/completion_queue.cc +1 -1
- data/src/core/lib/surface/init.cc +13 -15
- data/src/core/lib/surface/lame_client.cc +38 -19
- data/src/core/lib/surface/lame_client.h +4 -3
- data/src/core/lib/surface/server.cc +43 -36
- data/src/core/lib/surface/server.h +76 -14
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/metadata.cc +6 -2
- data/src/core/lib/transport/metadata_batch.cc +27 -0
- data/src/core/lib/transport/metadata_batch.h +14 -0
- data/src/core/plugin_registry/grpc_plugin_registry.cc +12 -0
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +18 -24
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +16 -21
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +1 -1
- data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +1 -3
- data/src/core/tsi/fake_transport_security.cc +11 -2
- data/src/core/tsi/ssl/session_cache/ssl_session.h +0 -3
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +0 -2
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +2 -4
- data/src/core/tsi/ssl_transport_security.cc +0 -3
- data/src/core/tsi/ssl_transport_security.h +0 -3
- data/src/ruby/ext/grpc/extconf.rb +9 -1
- data/src/ruby/ext/grpc/rb_channel.c +10 -1
- data/src/ruby/ext/grpc/rb_channel_credentials.c +11 -1
- data/src/ruby/ext/grpc/rb_channel_credentials.h +4 -0
- data/src/ruby/ext/grpc/rb_compression_options.c +1 -1
- data/src/ruby/ext/grpc/rb_enable_cpp.cc +1 -1
- data/src/ruby/ext/grpc/rb_grpc.c +4 -0
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +2 -0
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +4 -1
- data/src/ruby/ext/grpc/rb_server.c +13 -1
- data/src/ruby/ext/grpc/rb_server_credentials.c +19 -3
- data/src/ruby/ext/grpc/rb_server_credentials.h +4 -0
- data/src/ruby/ext/grpc/rb_xds_channel_credentials.c +215 -0
- data/src/ruby/ext/grpc/rb_xds_channel_credentials.h +35 -0
- data/src/ruby/ext/grpc/rb_xds_server_credentials.c +169 -0
- data/src/ruby/ext/grpc/rb_xds_server_credentials.h +35 -0
- data/src/ruby/lib/grpc/generic/client_stub.rb +4 -2
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +7 -0
- data/src/ruby/spec/call_spec.rb +1 -1
- data/src/ruby/spec/channel_credentials_spec.rb +32 -0
- data/src/ruby/spec/channel_spec.rb +17 -6
- data/src/ruby/spec/client_auth_spec.rb +27 -1
- data/src/ruby/spec/errors_spec.rb +1 -1
- data/src/ruby/spec/generic/active_call_spec.rb +2 -2
- data/src/ruby/spec/generic/client_stub_spec.rb +4 -4
- data/src/ruby/spec/generic/rpc_server_spec.rb +1 -1
- data/src/ruby/spec/server_credentials_spec.rb +25 -0
- data/src/ruby/spec/server_spec.rb +22 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc +1 -0
- data/third_party/boringssl-with-bazel/err_data.c +715 -713
- 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 +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_int.c +5 -5
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +3 -10
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_octet.c +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_type.c +4 -2
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_utctm.c +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +15 -14
- data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_locl.h +30 -0
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_dec.c +28 -79
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +39 -85
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_fre.c +5 -16
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_new.c +10 -61
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_typ.c +0 -2
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_utl.c +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/bio/socket_helper.c +4 -0
- data/third_party/boringssl-with-bazel/src/crypto/blake2/blake2.c +158 -0
- data/third_party/boringssl-with-bazel/src/crypto/bn_extra/bn_asn1.c +3 -10
- data/third_party/boringssl-with-bazel/src/crypto/bytestring/ber.c +8 -9
- data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbs.c +60 -45
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_chacha20poly1305.c +6 -81
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/internal.h +87 -0
- data/third_party/boringssl-with-bazel/src/crypto/cpu-aarch64-win.c +41 -0
- data/third_party/boringssl-with-bazel/src/crypto/cpu-arm-linux.c +11 -2
- data/third_party/boringssl-with-bazel/src/crypto/cpu-arm.c +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/{dh → dh_extra}/dh_asn1.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/{dh → dh_extra}/params.c +179 -0
- data/third_party/boringssl-with-bazel/src/crypto/digest_extra/digest_extra.c +25 -0
- data/third_party/boringssl-with-bazel/src/crypto/ec_extra/ec_asn1.c +2 -17
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +3 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/bn.c +13 -20
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/div.c +2 -3
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +9 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/cipher.c +21 -13
- data/third_party/boringssl-with-bazel/src/crypto/{dh → fipsmodule/dh}/check.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/{dh → fipsmodule/dh}/dh.c +136 -213
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +12 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +9 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/internal.h +28 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.c +135 -43
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +0 -7
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +51 -32
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +147 -0
- data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +18 -29
- data/third_party/boringssl-with-bazel/src/crypto/hpke/internal.h +13 -4
- data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305.c +10 -7
- data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_arm.c +13 -11
- data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_vec.c +4 -0
- data/third_party/boringssl-with-bazel/src/crypto/rand_extra/passive.c +34 -0
- data/third_party/boringssl-with-bazel/src/crypto/rand_extra/rand_extra.c +4 -0
- data/third_party/boringssl-with-bazel/src/crypto/stack/stack.c +7 -13
- data/third_party/boringssl-with-bazel/src/crypto/x509/rsa_pss.c +5 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c +1 -29
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_ext.c +10 -7
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_r2x.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +8 -8
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_v3.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509cset.c +29 -23
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_attrib.c +22 -17
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +1 -2
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_pkey.c +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509.c +39 -4
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509a.c +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_akey.c +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_alt.c +11 -10
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_bitst.c +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_conf.c +25 -25
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_enum.c +2 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_genn.c +40 -20
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ia5.c +3 -4
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_lib.c +25 -36
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_prn.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c +6 -6
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_utl.c +6 -6
- data/third_party/boringssl-with-bazel/src/include/openssl/arm_arch.h +3 -3
- data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +652 -545
- data/third_party/boringssl-with-bazel/src/include/openssl/asn1t.h +0 -167
- data/third_party/boringssl-with-bazel/src/include/openssl/base.h +10 -5
- data/third_party/boringssl-with-bazel/src/include/openssl/blake2.h +62 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/bytestring.h +22 -7
- data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +19 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/cpu.h +22 -32
- data/third_party/boringssl-with-bazel/src/include/openssl/dh.h +56 -26
- data/third_party/boringssl-with-bazel/src/include/openssl/digest.h +1 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/ec.h +15 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +12 -2
- data/third_party/boringssl-with-bazel/src/include/openssl/rand.h +3 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/span.h +2 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +67 -33
- data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +27 -8
- data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +287 -99
- data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +139 -36
- data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +4 -3
- data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +11 -20
- data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +10 -5
- data/third_party/boringssl-with-bazel/src/ssl/internal.h +37 -16
- data/third_party/boringssl-with-bazel/src/ssl/s3_lib.cc +0 -1
- data/third_party/boringssl-with-bazel/src/ssl/ssl_asn1.cc +7 -8
- data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +20 -14
- data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +7 -8
- data/third_party/boringssl-with-bazel/src/ssl/ssl_transcript.cc +2 -2
- data/third_party/boringssl-with-bazel/src/ssl/t1_enc.cc +5 -7
- data/third_party/boringssl-with-bazel/src/ssl/t1_lib.cc +362 -50
- data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +2 -2
- data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +48 -15
- data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +66 -24
- data/third_party/xxhash/xxhash.h +5443 -0
- metadata +140 -84
- data/src/core/ext/upb-generated/udpa/core/v1/authority.upb.h +0 -60
- data/src/core/ext/upb-generated/udpa/core/v1/collection_entry.upb.c +0 -52
- data/src/core/ext/upb-generated/udpa/core/v1/collection_entry.upb.h +0 -143
- data/src/core/ext/upb-generated/udpa/core/v1/context_params.upb.c +0 -42
- data/src/core/ext/upb-generated/udpa/core/v1/context_params.upb.h +0 -84
- data/src/core/ext/upb-generated/udpa/core/v1/resource.upb.h +0 -94
- data/src/core/ext/upb-generated/udpa/core/v1/resource_locator.upb.c +0 -54
- data/src/core/ext/upb-generated/udpa/core/v1/resource_locator.upb.h +0 -173
- data/src/core/ext/upb-generated/udpa/core/v1/resource_name.upb.c +0 -36
- data/src/core/ext/upb-generated/udpa/core/v1/resource_name.upb.h +0 -92
- data/src/core/ext/upbdefs-generated/udpa/core/v1/authority.upbdefs.c +0 -42
- data/src/core/ext/upbdefs-generated/udpa/core/v1/authority.upbdefs.h +0 -35
- data/src/core/ext/upbdefs-generated/udpa/core/v1/collection_entry.upbdefs.c +0 -62
- data/src/core/ext/upbdefs-generated/udpa/core/v1/collection_entry.upbdefs.h +0 -40
- data/src/core/ext/upbdefs-generated/udpa/core/v1/context_params.upbdefs.c +0 -45
- data/src/core/ext/upbdefs-generated/udpa/core/v1/context_params.upbdefs.h +0 -40
- data/src/core/ext/upbdefs-generated/udpa/core/v1/resource.upbdefs.c +0 -49
- data/src/core/ext/upbdefs-generated/udpa/core/v1/resource.upbdefs.h +0 -35
- data/src/core/ext/upbdefs-generated/udpa/core/v1/resource_locator.upbdefs.c +0 -68
- data/src/core/ext/upbdefs-generated/udpa/core/v1/resource_locator.upbdefs.h +0 -40
- data/src/core/ext/upbdefs-generated/udpa/core/v1/resource_name.upbdefs.c +0 -51
- data/src/core/ext/upbdefs-generated/udpa/core/v1/resource_name.upbdefs.h +0 -35
- data/src/core/lib/iomgr/iomgr_posix.h +0 -26
- data/src/core/lib/security/authorization/authorization_engine.cc +0 -177
- data/src/core/lib/security/authorization/authorization_engine.h +0 -84
- data/src/core/lib/security/authorization/evaluate_args.cc +0 -148
- data/src/core/lib/security/authorization/evaluate_args.h +0 -59
- data/src/core/lib/security/authorization/mock_cel/activation.h +0 -57
- data/src/core/lib/security/authorization/mock_cel/cel_expr_builder_factory.h +0 -44
- data/src/core/lib/security/authorization/mock_cel/cel_expression.h +0 -69
- data/src/core/lib/security/authorization/mock_cel/cel_value.h +0 -97
- data/src/core/lib/security/authorization/mock_cel/evaluator_core.h +0 -67
- data/src/core/lib/security/authorization/mock_cel/flat_expr_builder.h +0 -57
- data/third_party/abseil-cpp/absl/container/flat_hash_set.h +0 -504
- data/third_party/upb/upb/json_decode.c +0 -1443
- data/third_party/upb/upb/json_decode.h +0 -23
- data/third_party/upb/upb/json_encode.c +0 -713
- data/third_party/upb/upb/json_encode.h +0 -36
@@ -37,10 +37,11 @@ namespace grpc_core {
|
|
37
37
|
|
38
38
|
class Chttp2InsecureClientChannelFactory : public ClientChannelFactory {
|
39
39
|
public:
|
40
|
-
Subchannel
|
40
|
+
RefCountedPtr<Subchannel> CreateSubchannel(
|
41
|
+
const grpc_channel_args* args) override {
|
41
42
|
grpc_channel_args* new_args =
|
42
43
|
grpc_default_authority_add_if_not_present(args);
|
43
|
-
Subchannel
|
44
|
+
RefCountedPtr<Subchannel> s =
|
44
45
|
Subchannel::Create(MakeOrphanable<Chttp2Connector>(), new_args);
|
45
46
|
grpc_channel_args_destroy(new_args);
|
46
47
|
return s;
|
@@ -62,7 +62,7 @@ grpc_channel* grpc_insecure_channel_create_from_fd(
|
|
62
62
|
transport, nullptr, &error);
|
63
63
|
grpc_channel_args_destroy(final_args);
|
64
64
|
if (channel != nullptr) {
|
65
|
-
grpc_chttp2_transport_start_reading(transport, nullptr, nullptr);
|
65
|
+
grpc_chttp2_transport_start_reading(transport, nullptr, nullptr, nullptr);
|
66
66
|
grpc_core::ExecCtx::Get()->Flush();
|
67
67
|
} else {
|
68
68
|
intptr_t integer;
|
@@ -43,14 +43,15 @@ namespace grpc_core {
|
|
43
43
|
|
44
44
|
class Chttp2SecureClientChannelFactory : public ClientChannelFactory {
|
45
45
|
public:
|
46
|
-
Subchannel
|
46
|
+
RefCountedPtr<Subchannel> CreateSubchannel(
|
47
|
+
const grpc_channel_args* args) override {
|
47
48
|
grpc_channel_args* new_args = GetSecureNamingChannelArgs(args);
|
48
49
|
if (new_args == nullptr) {
|
49
50
|
gpr_log(GPR_ERROR,
|
50
51
|
"Failed to create channel args during subchannel creation.");
|
51
52
|
return nullptr;
|
52
53
|
}
|
53
|
-
Subchannel
|
54
|
+
RefCountedPtr<Subchannel> s =
|
54
55
|
Subchannel::Create(MakeOrphanable<Chttp2Connector>(), new_args);
|
55
56
|
grpc_channel_args_destroy(new_args);
|
56
57
|
return s;
|
@@ -62,13 +62,17 @@ const char kUnixAbstractUriPrefix[] = "unix-abstract:";
|
|
62
62
|
class Chttp2ServerListener : public Server::ListenerInterface {
|
63
63
|
public:
|
64
64
|
static grpc_error* Create(Server* server, grpc_resolved_address* addr,
|
65
|
-
grpc_channel_args* args,
|
65
|
+
grpc_channel_args* args,
|
66
|
+
Chttp2ServerArgsModifier args_modifier,
|
67
|
+
int* port_num);
|
66
68
|
|
67
69
|
static grpc_error* CreateWithAcceptor(Server* server, const char* name,
|
68
|
-
grpc_channel_args* args
|
70
|
+
grpc_channel_args* args,
|
71
|
+
Chttp2ServerArgsModifier args_modifier);
|
69
72
|
|
70
73
|
// Do not instantiate directly. Use one of the factory methods above.
|
71
|
-
Chttp2ServerListener(Server* server, grpc_channel_args* args
|
74
|
+
Chttp2ServerListener(Server* server, grpc_channel_args* args,
|
75
|
+
Chttp2ServerArgsModifier args_modifier);
|
72
76
|
~Chttp2ServerListener() override;
|
73
77
|
|
74
78
|
void Start(Server* server,
|
@@ -86,91 +90,209 @@ class Chttp2ServerListener : public Server::ListenerInterface {
|
|
86
90
|
class ConfigFetcherWatcher
|
87
91
|
: public grpc_server_config_fetcher::WatcherInterface {
|
88
92
|
public:
|
89
|
-
explicit ConfigFetcherWatcher(Chttp2ServerListener
|
90
|
-
: listener_(listener) {}
|
91
|
-
|
92
|
-
void
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
// listener_->args_ = args;
|
98
|
-
if (!listener_->shutdown_) return; // Already started listening.
|
99
|
-
}
|
100
|
-
int port_temp;
|
101
|
-
grpc_error* error = grpc_tcp_server_add_port(
|
102
|
-
listener_->tcp_server_, &listener_->resolved_address_, &port_temp);
|
103
|
-
if (error != GRPC_ERROR_NONE) {
|
104
|
-
GRPC_ERROR_UNREF(error);
|
105
|
-
gpr_log(GPR_ERROR, "Error adding port to server: %s",
|
106
|
-
grpc_error_string(error));
|
107
|
-
// TODO(yashykt): We wouldn't need to assert here if we bound to the
|
108
|
-
// port earlier during AddPort.
|
109
|
-
GPR_ASSERT(0);
|
110
|
-
}
|
111
|
-
listener_->StartListening();
|
112
|
-
}
|
93
|
+
explicit ConfigFetcherWatcher(RefCountedPtr<Chttp2ServerListener> listener)
|
94
|
+
: listener_(std::move(listener)) {}
|
95
|
+
|
96
|
+
void UpdateConnectionManager(
|
97
|
+
RefCountedPtr<grpc_server_config_fetcher::ConnectionManager>
|
98
|
+
connection_manager) override;
|
99
|
+
|
100
|
+
void StopServing() override;
|
113
101
|
|
114
102
|
private:
|
115
|
-
Chttp2ServerListener
|
103
|
+
RefCountedPtr<Chttp2ServerListener> listener_;
|
116
104
|
};
|
117
105
|
|
118
|
-
class
|
106
|
+
class ActiveConnection : public InternallyRefCounted<ActiveConnection> {
|
119
107
|
public:
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
108
|
+
class HandshakingState : public InternallyRefCounted<HandshakingState> {
|
109
|
+
public:
|
110
|
+
HandshakingState(RefCountedPtr<ActiveConnection> connection_ref,
|
111
|
+
grpc_pollset* accepting_pollset,
|
112
|
+
grpc_tcp_server_acceptor* acceptor,
|
113
|
+
grpc_channel_args* args);
|
114
|
+
|
115
|
+
~HandshakingState() override;
|
116
|
+
|
117
|
+
void Orphan() override;
|
118
|
+
|
119
|
+
void Start(grpc_endpoint* endpoint, grpc_channel_args* args);
|
125
120
|
|
126
|
-
|
121
|
+
// Needed to be able to grab an external ref in ActiveConnection::Start()
|
122
|
+
using InternallyRefCounted<HandshakingState>::Ref;
|
123
|
+
|
124
|
+
private:
|
125
|
+
static void OnTimeout(void* arg, grpc_error* error);
|
126
|
+
static void OnReceiveSettings(void* arg, grpc_error* /* error */);
|
127
|
+
static void OnHandshakeDone(void* arg, grpc_error* error);
|
128
|
+
RefCountedPtr<ActiveConnection> const connection_;
|
129
|
+
grpc_pollset* const accepting_pollset_;
|
130
|
+
grpc_tcp_server_acceptor* const acceptor_;
|
131
|
+
RefCountedPtr<HandshakeManager> handshake_mgr_
|
132
|
+
ABSL_GUARDED_BY(&connection_->mu_);
|
133
|
+
// State for enforcing handshake timeout on receiving HTTP/2 settings.
|
134
|
+
grpc_millis const deadline_;
|
135
|
+
grpc_timer timer_ ABSL_GUARDED_BY(&connection_->mu_);
|
136
|
+
grpc_closure on_timeout_ ABSL_GUARDED_BY(&connection_->mu_);
|
137
|
+
grpc_closure on_receive_settings_ ABSL_GUARDED_BY(&connection_->mu_);
|
138
|
+
grpc_pollset_set* const interested_parties_;
|
139
|
+
};
|
140
|
+
|
141
|
+
ActiveConnection(grpc_pollset* accepting_pollset,
|
142
|
+
grpc_tcp_server_acceptor* acceptor,
|
143
|
+
grpc_channel_args* args);
|
144
|
+
~ActiveConnection() override;
|
145
|
+
|
146
|
+
void Orphan() override;
|
147
|
+
|
148
|
+
void SendGoAway();
|
149
|
+
|
150
|
+
void Start(RefCountedPtr<Chttp2ServerListener> listener,
|
151
|
+
grpc_endpoint* endpoint, grpc_channel_args* args);
|
152
|
+
|
153
|
+
// Needed to be able to grab an external ref in
|
154
|
+
// Chttp2ServerListener::OnAccept()
|
155
|
+
using InternallyRefCounted<ActiveConnection>::Ref;
|
127
156
|
|
128
157
|
private:
|
129
|
-
static void
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
//
|
138
|
-
grpc_chttp2_transport* transport_ = nullptr;
|
139
|
-
|
140
|
-
|
141
|
-
grpc_closure on_timeout_;
|
142
|
-
grpc_closure on_receive_settings_;
|
143
|
-
grpc_pollset_set* const interested_parties_;
|
158
|
+
static void OnClose(void* arg, grpc_error* error);
|
159
|
+
|
160
|
+
RefCountedPtr<Chttp2ServerListener> listener_;
|
161
|
+
Mutex mu_ ABSL_ACQUIRED_AFTER(&listener_->mu_);
|
162
|
+
// Set by HandshakingState before the handshaking begins and reset when
|
163
|
+
// handshaking is done.
|
164
|
+
OrphanablePtr<HandshakingState> handshaking_state_ ABSL_GUARDED_BY(&mu_);
|
165
|
+
// Set by HandshakingState when handshaking is done and a valid transport is
|
166
|
+
// created.
|
167
|
+
grpc_chttp2_transport* transport_ ABSL_GUARDED_BY(&mu_) = nullptr;
|
168
|
+
grpc_closure on_close_;
|
169
|
+
bool shutdown_ ABSL_GUARDED_BY(&mu_) = false;
|
144
170
|
};
|
145
171
|
|
172
|
+
// To allow access to RefCounted<> like interface.
|
173
|
+
friend class RefCountedPtr<Chttp2ServerListener>;
|
174
|
+
|
175
|
+
// Should only be called once so as to start the TCP server.
|
146
176
|
void StartListening();
|
147
177
|
|
148
178
|
static void OnAccept(void* arg, grpc_endpoint* tcp,
|
149
179
|
grpc_pollset* accepting_pollset,
|
150
180
|
grpc_tcp_server_acceptor* acceptor);
|
151
181
|
|
152
|
-
RefCountedPtr<HandshakeManager> CreateHandshakeManager();
|
153
|
-
|
154
182
|
static void TcpServerShutdownComplete(void* arg, grpc_error* error);
|
155
183
|
|
156
184
|
static void DestroyListener(Server* /*server*/, void* arg,
|
157
185
|
grpc_closure* destroy_done);
|
158
186
|
|
187
|
+
// The interface required by RefCountedPtr<> has been manually implemented
|
188
|
+
// here to take a ref on tcp_server_ instead. Note that, the handshaker needs
|
189
|
+
// tcp_server_ to exist for the lifetime of the handshake since it's needed by
|
190
|
+
// acceptor. Sharing refs between the listener and tcp_server_ is just an
|
191
|
+
// optimization to avoid taking additional refs on the listener, since
|
192
|
+
// TcpServerShutdownComplete already holds a ref to the listener.
|
193
|
+
void IncrementRefCount() { grpc_tcp_server_ref(tcp_server_); }
|
194
|
+
void IncrementRefCount(const DebugLocation& /* location */,
|
195
|
+
const char* /* reason */) {
|
196
|
+
IncrementRefCount();
|
197
|
+
}
|
198
|
+
|
199
|
+
RefCountedPtr<Chttp2ServerListener> Ref() GRPC_MUST_USE_RESULT {
|
200
|
+
IncrementRefCount();
|
201
|
+
return RefCountedPtr<Chttp2ServerListener>(this);
|
202
|
+
}
|
203
|
+
RefCountedPtr<Chttp2ServerListener> Ref(const DebugLocation& /* location */,
|
204
|
+
const char* /* reason */)
|
205
|
+
GRPC_MUST_USE_RESULT {
|
206
|
+
return Ref();
|
207
|
+
}
|
208
|
+
|
209
|
+
void Unref() { grpc_tcp_server_unref(tcp_server_); }
|
210
|
+
void Unref(const DebugLocation& /* location */, const char* /* reason */) {
|
211
|
+
Unref();
|
212
|
+
}
|
213
|
+
|
159
214
|
Server* const server_;
|
160
|
-
grpc_channel_args* const args_;
|
161
215
|
grpc_tcp_server* tcp_server_;
|
162
216
|
grpc_resolved_address resolved_address_;
|
163
|
-
|
217
|
+
Chttp2ServerArgsModifier const args_modifier_;
|
164
218
|
ConfigFetcherWatcher* config_fetcher_watcher_ = nullptr;
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
219
|
+
Mutex channel_args_mu_;
|
220
|
+
grpc_channel_args* args_ ABSL_GUARDED_BY(channel_args_mu_);
|
221
|
+
RefCountedPtr<grpc_server_config_fetcher::ConnectionManager>
|
222
|
+
connection_manager_ ABSL_GUARDED_BY(channel_args_mu_);
|
223
|
+
Mutex mu_;
|
224
|
+
// Signals whether grpc_tcp_server_start() has been called.
|
225
|
+
bool started_ ABSL_GUARDED_BY(mu_) = false;
|
226
|
+
// Signals whether grpc_tcp_server_start() has completed.
|
227
|
+
CondVar started_cv_ ABSL_GUARDED_BY(mu_);
|
228
|
+
// Signals whether new requests/connections are to be accepted.
|
229
|
+
bool is_serving_ ABSL_GUARDED_BY(mu_) = false;
|
230
|
+
// Signals whether the application has triggered shutdown.
|
231
|
+
bool shutdown_ ABSL_GUARDED_BY(mu_) = false;
|
232
|
+
std::map<ActiveConnection*, OrphanablePtr<ActiveConnection>> connections_
|
233
|
+
ABSL_GUARDED_BY(mu_);
|
234
|
+
grpc_closure tcp_server_shutdown_complete_ ABSL_GUARDED_BY(mu_);
|
235
|
+
grpc_closure* on_destroy_done_ ABSL_GUARDED_BY(mu_) = nullptr;
|
169
236
|
RefCountedPtr<channelz::ListenSocketNode> channelz_listen_socket_;
|
170
237
|
};
|
171
238
|
|
172
239
|
//
|
173
|
-
// Chttp2ServerListener::
|
240
|
+
// Chttp2ServerListener::ConfigFetcherWatcher
|
241
|
+
//
|
242
|
+
|
243
|
+
void Chttp2ServerListener::ConfigFetcherWatcher::UpdateConnectionManager(
|
244
|
+
RefCountedPtr<grpc_server_config_fetcher::ConnectionManager>
|
245
|
+
connection_manager) {
|
246
|
+
RefCountedPtr<grpc_server_config_fetcher::ConnectionManager>
|
247
|
+
connection_manager_to_destroy;
|
248
|
+
{
|
249
|
+
MutexLock lock(&listener_->channel_args_mu_);
|
250
|
+
connection_manager_to_destroy = listener_->connection_manager_;
|
251
|
+
listener_->connection_manager_ = std::move(connection_manager);
|
252
|
+
}
|
253
|
+
{
|
254
|
+
MutexLock lock(&listener_->mu_);
|
255
|
+
if (listener_->shutdown_) {
|
256
|
+
return;
|
257
|
+
}
|
258
|
+
listener_->is_serving_ = true;
|
259
|
+
if (listener_->started_) return;
|
260
|
+
}
|
261
|
+
int port_temp;
|
262
|
+
grpc_error* error = grpc_tcp_server_add_port(
|
263
|
+
listener_->tcp_server_, &listener_->resolved_address_, &port_temp);
|
264
|
+
if (error != GRPC_ERROR_NONE) {
|
265
|
+
GRPC_ERROR_UNREF(error);
|
266
|
+
gpr_log(GPR_ERROR, "Error adding port to server: %s",
|
267
|
+
grpc_error_string(error));
|
268
|
+
// TODO(yashykt): We wouldn't need to assert here if we bound to the
|
269
|
+
// port earlier during AddPort.
|
270
|
+
GPR_ASSERT(0);
|
271
|
+
}
|
272
|
+
listener_->StartListening();
|
273
|
+
{
|
274
|
+
MutexLock lock(&listener_->mu_);
|
275
|
+
listener_->started_ = true;
|
276
|
+
listener_->started_cv_.SignalAll();
|
277
|
+
}
|
278
|
+
}
|
279
|
+
|
280
|
+
void Chttp2ServerListener::ConfigFetcherWatcher::StopServing() {
|
281
|
+
std::map<ActiveConnection*, OrphanablePtr<ActiveConnection>> connections;
|
282
|
+
{
|
283
|
+
MutexLock lock(&listener_->mu_);
|
284
|
+
listener_->is_serving_ = false;
|
285
|
+
connections = std::move(listener_->connections_);
|
286
|
+
}
|
287
|
+
// Send GOAWAYs on the transports so that they disconnected when existing RPCs
|
288
|
+
// finish.
|
289
|
+
for (auto& connection : connections) {
|
290
|
+
connection.first->SendGoAway();
|
291
|
+
}
|
292
|
+
}
|
293
|
+
|
294
|
+
//
|
295
|
+
// Chttp2ServerListener::ActiveConnection::HandshakingState
|
174
296
|
//
|
175
297
|
|
176
298
|
grpc_millis GetConnectionDeadline(const grpc_channel_args* args) {
|
@@ -180,73 +302,96 @@ grpc_millis GetConnectionDeadline(const grpc_channel_args* args) {
|
|
180
302
|
return ExecCtx::Get()->Now() + timeout_ms;
|
181
303
|
}
|
182
304
|
|
183
|
-
Chttp2ServerListener::
|
184
|
-
|
185
|
-
grpc_tcp_server_acceptor* acceptor,
|
186
|
-
|
187
|
-
|
188
|
-
: listener_(listener),
|
305
|
+
Chttp2ServerListener::ActiveConnection::HandshakingState::HandshakingState(
|
306
|
+
RefCountedPtr<ActiveConnection> connection_ref,
|
307
|
+
grpc_pollset* accepting_pollset, grpc_tcp_server_acceptor* acceptor,
|
308
|
+
grpc_channel_args* args)
|
309
|
+
: connection_(std::move(connection_ref)),
|
189
310
|
accepting_pollset_(accepting_pollset),
|
190
311
|
acceptor_(acceptor),
|
191
|
-
handshake_mgr_(
|
312
|
+
handshake_mgr_(MakeRefCounted<HandshakeManager>()),
|
192
313
|
deadline_(GetConnectionDeadline(args)),
|
193
314
|
interested_parties_(grpc_pollset_set_create()) {
|
194
315
|
grpc_pollset_set_add_pollset(interested_parties_, accepting_pollset_);
|
195
316
|
HandshakerRegistry::AddHandshakers(HANDSHAKER_SERVER, args,
|
196
317
|
interested_parties_, handshake_mgr_.get());
|
197
|
-
handshake_mgr_->DoHandshake(endpoint, args, deadline_, acceptor_,
|
198
|
-
OnHandshakeDone, this);
|
199
318
|
}
|
200
319
|
|
201
|
-
Chttp2ServerListener::
|
202
|
-
if (transport_ != nullptr) {
|
203
|
-
GRPC_CHTTP2_UNREF_TRANSPORT(transport_, "receive settings timeout");
|
204
|
-
}
|
320
|
+
Chttp2ServerListener::ActiveConnection::HandshakingState::~HandshakingState() {
|
205
321
|
grpc_pollset_set_del_pollset(interested_parties_, accepting_pollset_);
|
206
322
|
grpc_pollset_set_destroy(interested_parties_);
|
207
323
|
}
|
208
324
|
|
209
|
-
void Chttp2ServerListener::
|
210
|
-
|
211
|
-
|
325
|
+
void Chttp2ServerListener::ActiveConnection::HandshakingState::Orphan() {
|
326
|
+
{
|
327
|
+
MutexLock lock(&connection_->mu_);
|
328
|
+
if (handshake_mgr_ != nullptr) {
|
329
|
+
handshake_mgr_->Shutdown(
|
330
|
+
GRPC_ERROR_CREATE_FROM_STATIC_STRING("Listener stopped serving."));
|
331
|
+
}
|
332
|
+
}
|
333
|
+
Unref();
|
334
|
+
}
|
335
|
+
|
336
|
+
void Chttp2ServerListener::ActiveConnection::HandshakingState::Start(
|
337
|
+
grpc_endpoint* endpoint, grpc_channel_args* args) {
|
338
|
+
Ref().release(); // Held by OnHandshakeDone
|
339
|
+
RefCountedPtr<HandshakeManager> handshake_mgr;
|
340
|
+
{
|
341
|
+
MutexLock lock(&connection_->mu_);
|
342
|
+
if (handshake_mgr_ == nullptr) return;
|
343
|
+
handshake_mgr = handshake_mgr_;
|
344
|
+
}
|
345
|
+
handshake_mgr->DoHandshake(endpoint, args, deadline_, acceptor_,
|
346
|
+
OnHandshakeDone, this);
|
347
|
+
}
|
348
|
+
|
349
|
+
void Chttp2ServerListener::ActiveConnection::HandshakingState::OnTimeout(
|
350
|
+
void* arg, grpc_error* error) {
|
351
|
+
HandshakingState* self = static_cast<HandshakingState*>(arg);
|
212
352
|
// Note that we may be called with GRPC_ERROR_NONE when the timer fires
|
213
353
|
// or with an error indicating that the timer system is being shut down.
|
214
354
|
if (error != GRPC_ERROR_CANCELLED) {
|
215
355
|
grpc_transport_op* op = grpc_make_transport_op(nullptr);
|
216
356
|
op->disconnect_with_error = GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
217
357
|
"Did not receive HTTP/2 settings before handshake timeout");
|
218
|
-
|
358
|
+
grpc_chttp2_transport* transport = nullptr;
|
359
|
+
{
|
360
|
+
MutexLock lock(&self->connection_->mu_);
|
361
|
+
transport = self->connection_->transport_;
|
362
|
+
}
|
363
|
+
grpc_transport_perform_op(&transport->base, op);
|
219
364
|
}
|
220
365
|
self->Unref();
|
221
366
|
}
|
222
367
|
|
223
|
-
void Chttp2ServerListener::
|
224
|
-
void* arg, grpc_error* error) {
|
225
|
-
|
226
|
-
|
227
|
-
grpc_timer_cancel(&self->timer_);
|
228
|
-
}
|
368
|
+
void Chttp2ServerListener::ActiveConnection::HandshakingState::
|
369
|
+
OnReceiveSettings(void* arg, grpc_error* /* error */) {
|
370
|
+
HandshakingState* self = static_cast<HandshakingState*>(arg);
|
371
|
+
grpc_timer_cancel(&self->timer_);
|
229
372
|
self->Unref();
|
230
373
|
}
|
231
374
|
|
232
|
-
void Chttp2ServerListener::
|
233
|
-
|
375
|
+
void Chttp2ServerListener::ActiveConnection::HandshakingState::OnHandshakeDone(
|
376
|
+
void* arg, grpc_error* error) {
|
234
377
|
auto* args = static_cast<HandshakerArgs*>(arg);
|
235
|
-
|
378
|
+
HandshakingState* self = static_cast<HandshakingState*>(args->user_data);
|
379
|
+
OrphanablePtr<HandshakingState> handshaking_state_ref;
|
380
|
+
RefCountedPtr<HandshakeManager> handshake_mgr;
|
381
|
+
bool cleanup_connection = false;
|
382
|
+
bool free_resource_quota = false;
|
383
|
+
grpc_resource_user* resource_user =
|
384
|
+
self->connection_->listener_->server_->default_resource_user();
|
236
385
|
{
|
237
|
-
MutexLock
|
238
|
-
|
239
|
-
self->listener_->server_->default_resource_user();
|
240
|
-
if (error != GRPC_ERROR_NONE || self->listener_->shutdown_) {
|
386
|
+
MutexLock connection_lock(&self->connection_->mu_);
|
387
|
+
if (error != GRPC_ERROR_NONE || self->connection_->shutdown_) {
|
241
388
|
const char* error_str = grpc_error_string(error);
|
242
389
|
gpr_log(GPR_DEBUG, "Handshaking failed: %s", error_str);
|
243
|
-
|
244
|
-
|
245
|
-
GRPC_RESOURCE_QUOTA_CHANNEL_SIZE);
|
246
|
-
}
|
390
|
+
cleanup_connection = true;
|
391
|
+
free_resource_quota = true;
|
247
392
|
if (error == GRPC_ERROR_NONE && args->endpoint != nullptr) {
|
248
|
-
// We were shut down after handshaking completed
|
249
|
-
// destroy the endpoint here.
|
393
|
+
// We were shut down or stopped serving after handshaking completed
|
394
|
+
// successfully, so destroy the endpoint here.
|
250
395
|
// TODO(ctiller): It is currently necessary to shutdown endpoints
|
251
396
|
// before destroying them, even if we know that there are no
|
252
397
|
// pending read/write callbacks. This should be fixed, at which
|
@@ -264,9 +409,11 @@ void Chttp2ServerListener::ConnectionState::OnHandshakeDone(void* arg,
|
|
264
409
|
if (args->endpoint != nullptr) {
|
265
410
|
grpc_transport* transport = grpc_create_chttp2_transport(
|
266
411
|
args->args, args->endpoint, false, resource_user);
|
267
|
-
grpc_error* channel_init_err =
|
268
|
-
|
269
|
-
|
412
|
+
grpc_error* channel_init_err =
|
413
|
+
self->connection_->listener_->server_->SetupTransport(
|
414
|
+
transport, self->accepting_pollset_, args->args,
|
415
|
+
grpc_chttp2_transport_get_socket_node(transport),
|
416
|
+
resource_user);
|
270
417
|
if (channel_init_err == GRPC_ERROR_NONE) {
|
271
418
|
// Use notify_on_receive_settings callback to enforce the
|
272
419
|
// handshake deadline.
|
@@ -276,18 +423,32 @@ void Chttp2ServerListener::ConnectionState::OnHandshakeDone(void* arg,
|
|
276
423
|
// static_cast<> to a derived class.
|
277
424
|
// TODO(roth): Change to static_cast<> when we C++-ify the
|
278
425
|
// transport API.
|
279
|
-
self->transport_ =
|
426
|
+
self->connection_->transport_ =
|
280
427
|
reinterpret_cast<grpc_chttp2_transport*>(transport);
|
428
|
+
GRPC_CHTTP2_REF_TRANSPORT(self->connection_->transport_,
|
429
|
+
"ActiveConnection"); // Held by connection_
|
281
430
|
self->Ref().release(); // Held by OnReceiveSettings().
|
282
431
|
GRPC_CLOSURE_INIT(&self->on_receive_settings_, OnReceiveSettings,
|
283
432
|
self, grpc_schedule_on_exec_ctx);
|
433
|
+
// If the listener has been configured with a config fetcher, we need
|
434
|
+
// to watch on the transport being closed so that we can an updated
|
435
|
+
// list of active connections.
|
436
|
+
grpc_closure* on_close = nullptr;
|
437
|
+
if (self->connection_->listener_->config_fetcher_watcher_ !=
|
438
|
+
nullptr) {
|
439
|
+
// Refs helds by OnClose()
|
440
|
+
self->connection_->Ref().release();
|
441
|
+
on_close = &self->connection_->on_close_;
|
442
|
+
} else {
|
443
|
+
// Remove the connection from the connections_ map since OnClose()
|
444
|
+
// will not be invoked when a config fetcher is set.
|
445
|
+
cleanup_connection = true;
|
446
|
+
}
|
284
447
|
grpc_chttp2_transport_start_reading(transport, args->read_buffer,
|
285
|
-
&self->on_receive_settings_
|
448
|
+
&self->on_receive_settings_,
|
449
|
+
on_close);
|
286
450
|
grpc_channel_args_destroy(args->args);
|
287
451
|
self->Ref().release(); // Held by OnTimeout().
|
288
|
-
GRPC_CHTTP2_REF_TRANSPORT(
|
289
|
-
reinterpret_cast<grpc_chttp2_transport*>(transport),
|
290
|
-
"receive settings timeout");
|
291
452
|
GRPC_CLOSURE_INIT(&self->on_timeout_, OnTimeout, self,
|
292
453
|
grpc_schedule_on_exec_ctx);
|
293
454
|
grpc_timer_init(&self->timer_, self->deadline_, &self->on_timeout_);
|
@@ -299,25 +460,116 @@ void Chttp2ServerListener::ConnectionState::OnHandshakeDone(void* arg,
|
|
299
460
|
grpc_transport_destroy(transport);
|
300
461
|
grpc_slice_buffer_destroy_internal(args->read_buffer);
|
301
462
|
gpr_free(args->read_buffer);
|
302
|
-
|
303
|
-
|
304
|
-
GRPC_RESOURCE_QUOTA_CHANNEL_SIZE);
|
305
|
-
}
|
463
|
+
cleanup_connection = true;
|
464
|
+
free_resource_quota = true;
|
306
465
|
grpc_channel_args_destroy(args->args);
|
307
466
|
}
|
308
467
|
} else {
|
309
|
-
|
310
|
-
|
311
|
-
GRPC_RESOURCE_QUOTA_CHANNEL_SIZE);
|
312
|
-
}
|
468
|
+
cleanup_connection = true;
|
469
|
+
free_resource_quota = true;
|
313
470
|
}
|
314
471
|
}
|
315
|
-
|
316
|
-
|
472
|
+
// Since the handshake manager is done, the connection no longer needs to
|
473
|
+
// shutdown the handshake when the listener needs to stop serving.
|
474
|
+
// Avoid calling the destructor of HandshakeManager and HandshakingState
|
475
|
+
// from within the critical region.
|
476
|
+
handshake_mgr = std::move(self->handshake_mgr_);
|
477
|
+
handshaking_state_ref = std::move(self->connection_->handshaking_state_);
|
317
478
|
}
|
318
|
-
self->handshake_mgr_.reset();
|
319
479
|
gpr_free(self->acceptor_);
|
320
|
-
|
480
|
+
OrphanablePtr<ActiveConnection> connection;
|
481
|
+
if (free_resource_quota && resource_user != nullptr) {
|
482
|
+
grpc_resource_user_free(resource_user, GRPC_RESOURCE_QUOTA_CHANNEL_SIZE);
|
483
|
+
}
|
484
|
+
if (cleanup_connection) {
|
485
|
+
MutexLock listener_lock(&self->connection_->listener_->mu_);
|
486
|
+
auto it = self->connection_->listener_->connections_.find(
|
487
|
+
self->connection_.get());
|
488
|
+
if (it != self->connection_->listener_->connections_.end()) {
|
489
|
+
connection = std::move(it->second);
|
490
|
+
self->connection_->listener_->connections_.erase(it);
|
491
|
+
}
|
492
|
+
}
|
493
|
+
self->Unref();
|
494
|
+
}
|
495
|
+
|
496
|
+
//
|
497
|
+
// Chttp2ServerListener::ActiveConnection
|
498
|
+
//
|
499
|
+
|
500
|
+
Chttp2ServerListener::ActiveConnection::ActiveConnection(
|
501
|
+
grpc_pollset* accepting_pollset, grpc_tcp_server_acceptor* acceptor,
|
502
|
+
grpc_channel_args* args)
|
503
|
+
: handshaking_state_(MakeOrphanable<HandshakingState>(
|
504
|
+
Ref(), accepting_pollset, acceptor, args)) {
|
505
|
+
GRPC_CLOSURE_INIT(&on_close_, ActiveConnection::OnClose, this,
|
506
|
+
grpc_schedule_on_exec_ctx);
|
507
|
+
}
|
508
|
+
|
509
|
+
Chttp2ServerListener::ActiveConnection::~ActiveConnection() {
|
510
|
+
if (transport_ != nullptr) {
|
511
|
+
GRPC_CHTTP2_UNREF_TRANSPORT(transport_, "ActiveConnection");
|
512
|
+
}
|
513
|
+
}
|
514
|
+
|
515
|
+
void Chttp2ServerListener::ActiveConnection::Orphan() {
|
516
|
+
OrphanablePtr<HandshakingState> handshaking_state;
|
517
|
+
{
|
518
|
+
MutexLock lock(&mu_);
|
519
|
+
shutdown_ = true;
|
520
|
+
// Reset handshaking_state_ since we have been orphaned by the listener
|
521
|
+
// signaling that the listener has stopped serving.
|
522
|
+
handshaking_state = std::move(handshaking_state_);
|
523
|
+
}
|
524
|
+
Unref();
|
525
|
+
}
|
526
|
+
|
527
|
+
void Chttp2ServerListener::ActiveConnection::SendGoAway() {
|
528
|
+
grpc_chttp2_transport* transport = nullptr;
|
529
|
+
{
|
530
|
+
MutexLock lock(&mu_);
|
531
|
+
transport = transport_;
|
532
|
+
}
|
533
|
+
if (transport != nullptr) {
|
534
|
+
grpc_transport_op* op = grpc_make_transport_op(nullptr);
|
535
|
+
op->goaway_error = GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
536
|
+
"Server is stopping to serve requests.");
|
537
|
+
grpc_transport_perform_op(&transport->base, op);
|
538
|
+
}
|
539
|
+
}
|
540
|
+
|
541
|
+
void Chttp2ServerListener::ActiveConnection::Start(
|
542
|
+
RefCountedPtr<Chttp2ServerListener> listener, grpc_endpoint* endpoint,
|
543
|
+
grpc_channel_args* args) {
|
544
|
+
RefCountedPtr<HandshakingState> handshaking_state_ref;
|
545
|
+
listener_ = std::move(listener);
|
546
|
+
{
|
547
|
+
MutexLock lock(&mu_);
|
548
|
+
if (shutdown_) return;
|
549
|
+
// Hold a ref to HandshakingState to allow starting the handshake outside
|
550
|
+
// the critical region.
|
551
|
+
handshaking_state_ref = handshaking_state_->Ref();
|
552
|
+
}
|
553
|
+
handshaking_state_ref->Start(endpoint, args);
|
554
|
+
}
|
555
|
+
|
556
|
+
void Chttp2ServerListener::ActiveConnection::OnClose(void* arg,
|
557
|
+
grpc_error* /* error */) {
|
558
|
+
ActiveConnection* self = static_cast<ActiveConnection*>(arg);
|
559
|
+
OrphanablePtr<ActiveConnection> connection;
|
560
|
+
{
|
561
|
+
MutexLock listener_lock(&self->listener_->mu_);
|
562
|
+
MutexLock connection_lock(&self->mu_);
|
563
|
+
// The node was already deleted from the connections_ list if the connection
|
564
|
+
// is shutdown.
|
565
|
+
if (!self->shutdown_) {
|
566
|
+
auto it = self->listener_->connections_.find(self);
|
567
|
+
if (it != self->listener_->connections_.end()) {
|
568
|
+
connection = std::move(it->second);
|
569
|
+
self->listener_->connections_.erase(it);
|
570
|
+
}
|
571
|
+
}
|
572
|
+
}
|
321
573
|
self->Unref();
|
322
574
|
}
|
323
575
|
|
@@ -328,13 +580,14 @@ void Chttp2ServerListener::ConnectionState::OnHandshakeDone(void* arg,
|
|
328
580
|
grpc_error* Chttp2ServerListener::Create(Server* server,
|
329
581
|
grpc_resolved_address* addr,
|
330
582
|
grpc_channel_args* args,
|
583
|
+
Chttp2ServerArgsModifier args_modifier,
|
331
584
|
int* port_num) {
|
332
585
|
Chttp2ServerListener* listener = nullptr;
|
333
586
|
// The bulk of this method is inside of a lambda to make cleanup
|
334
587
|
// easier without using goto.
|
335
588
|
grpc_error* error = [&]() {
|
336
589
|
// Create Chttp2ServerListener.
|
337
|
-
listener = new Chttp2ServerListener(server, args);
|
590
|
+
listener = new Chttp2ServerListener(server, args, args_modifier);
|
338
591
|
error = grpc_tcp_server_create(&listener->tcp_server_shutdown_complete_,
|
339
592
|
args, &listener->tcp_server_);
|
340
593
|
if (error != GRPC_ERROR_NONE) return error;
|
@@ -349,7 +602,7 @@ grpc_error* Chttp2ServerListener::Create(Server* server,
|
|
349
602
|
// Create channelz node.
|
350
603
|
if (grpc_channel_args_find_bool(args, GRPC_ARG_ENABLE_CHANNELZ,
|
351
604
|
GRPC_ENABLE_CHANNELZ_DEFAULT)) {
|
352
|
-
std::string string_address =
|
605
|
+
std::string string_address = grpc_sockaddr_to_uri(addr);
|
353
606
|
listener->channelz_listen_socket_ =
|
354
607
|
MakeRefCounted<channelz::ListenSocketNode>(
|
355
608
|
string_address.c_str(),
|
@@ -374,10 +627,11 @@ grpc_error* Chttp2ServerListener::Create(Server* server,
|
|
374
627
|
return error;
|
375
628
|
}
|
376
629
|
|
377
|
-
grpc_error* Chttp2ServerListener::CreateWithAcceptor(
|
378
|
-
|
379
|
-
|
380
|
-
Chttp2ServerListener* listener =
|
630
|
+
grpc_error* Chttp2ServerListener::CreateWithAcceptor(
|
631
|
+
Server* server, const char* name, grpc_channel_args* args,
|
632
|
+
Chttp2ServerArgsModifier args_modifier) {
|
633
|
+
Chttp2ServerListener* listener =
|
634
|
+
new Chttp2ServerListener(server, args, args_modifier);
|
381
635
|
grpc_error* error = grpc_tcp_server_create(
|
382
636
|
&listener->tcp_server_shutdown_complete_, args, &listener->tcp_server_);
|
383
637
|
if (error != GRPC_ERROR_NONE) {
|
@@ -392,14 +646,22 @@ grpc_error* Chttp2ServerListener::CreateWithAcceptor(Server* server,
|
|
392
646
|
return GRPC_ERROR_NONE;
|
393
647
|
}
|
394
648
|
|
395
|
-
Chttp2ServerListener::Chttp2ServerListener(
|
396
|
-
|
397
|
-
|
649
|
+
Chttp2ServerListener::Chttp2ServerListener(
|
650
|
+
Server* server, grpc_channel_args* args,
|
651
|
+
Chttp2ServerArgsModifier args_modifier)
|
652
|
+
: server_(server), args_modifier_(args_modifier), args_(args) {
|
398
653
|
GRPC_CLOSURE_INIT(&tcp_server_shutdown_complete_, TcpServerShutdownComplete,
|
399
654
|
this, grpc_schedule_on_exec_ctx);
|
400
655
|
}
|
401
656
|
|
402
657
|
Chttp2ServerListener::~Chttp2ServerListener() {
|
658
|
+
// Flush queued work before destroying handshaker factory, since that
|
659
|
+
// may do a synchronous unref.
|
660
|
+
ExecCtx::Get()->Flush();
|
661
|
+
if (on_destroy_done_ != nullptr) {
|
662
|
+
ExecCtx::Run(DEBUG_LOCATION, on_destroy_done_, GRPC_ERROR_NONE);
|
663
|
+
ExecCtx::Get()->Flush();
|
664
|
+
}
|
403
665
|
grpc_channel_args_destroy(args_);
|
404
666
|
}
|
405
667
|
|
@@ -407,22 +669,28 @@ Chttp2ServerListener::~Chttp2ServerListener() {
|
|
407
669
|
void Chttp2ServerListener::Start(
|
408
670
|
Server* /*server*/, const std::vector<grpc_pollset*>* /* pollsets */) {
|
409
671
|
if (server_->config_fetcher() != nullptr) {
|
410
|
-
|
672
|
+
grpc_channel_args* args = nullptr;
|
673
|
+
auto watcher = absl::make_unique<ConfigFetcherWatcher>(Ref());
|
674
|
+
config_fetcher_watcher_ = watcher.get();
|
411
675
|
{
|
412
|
-
MutexLock lock(&
|
413
|
-
|
676
|
+
MutexLock lock(&channel_args_mu_);
|
677
|
+
args = grpc_channel_args_copy(args_);
|
414
678
|
}
|
415
679
|
server_->config_fetcher()->StartWatch(
|
416
|
-
grpc_sockaddr_to_string(&resolved_address_, false),
|
680
|
+
grpc_sockaddr_to_string(&resolved_address_, false), args,
|
681
|
+
std::move(watcher));
|
417
682
|
} else {
|
683
|
+
{
|
684
|
+
MutexLock lock(&mu_);
|
685
|
+
started_ = true;
|
686
|
+
is_serving_ = true;
|
687
|
+
}
|
418
688
|
StartListening();
|
419
689
|
}
|
420
690
|
}
|
421
691
|
|
422
692
|
void Chttp2ServerListener::StartListening() {
|
423
693
|
grpc_tcp_server_start(tcp_server_, &server_->pollsets(), OnAccept, this);
|
424
|
-
MutexLock lock(&mu_);
|
425
|
-
shutdown_ = false;
|
426
694
|
}
|
427
695
|
|
428
696
|
void Chttp2ServerListener::SetOnDestroyDone(grpc_closure* on_destroy_done) {
|
@@ -430,61 +698,93 @@ void Chttp2ServerListener::SetOnDestroyDone(grpc_closure* on_destroy_done) {
|
|
430
698
|
on_destroy_done_ = on_destroy_done;
|
431
699
|
}
|
432
700
|
|
433
|
-
RefCountedPtr<HandshakeManager> Chttp2ServerListener::CreateHandshakeManager() {
|
434
|
-
MutexLock lock(&mu_);
|
435
|
-
if (shutdown_) return nullptr;
|
436
|
-
grpc_resource_user* resource_user = server_->default_resource_user();
|
437
|
-
if (resource_user != nullptr &&
|
438
|
-
!grpc_resource_user_safe_alloc(resource_user,
|
439
|
-
GRPC_RESOURCE_QUOTA_CHANNEL_SIZE)) {
|
440
|
-
gpr_log(GPR_ERROR,
|
441
|
-
"Memory quota exhausted, rejecting connection, no handshaking.");
|
442
|
-
return nullptr;
|
443
|
-
}
|
444
|
-
auto handshake_mgr = MakeRefCounted<HandshakeManager>();
|
445
|
-
handshake_mgr->AddToPendingMgrList(&pending_handshake_mgrs_);
|
446
|
-
grpc_tcp_server_ref(tcp_server_); // Ref held by ConnectionState.
|
447
|
-
return handshake_mgr;
|
448
|
-
}
|
449
|
-
|
450
701
|
void Chttp2ServerListener::OnAccept(void* arg, grpc_endpoint* tcp,
|
451
702
|
grpc_pollset* accepting_pollset,
|
452
703
|
grpc_tcp_server_acceptor* acceptor) {
|
453
704
|
Chttp2ServerListener* self = static_cast<Chttp2ServerListener*>(arg);
|
454
|
-
|
455
|
-
|
456
|
-
|
457
|
-
|
705
|
+
grpc_channel_args* args = nullptr;
|
706
|
+
RefCountedPtr<grpc_server_config_fetcher::ConnectionManager>
|
707
|
+
connection_manager;
|
708
|
+
{
|
709
|
+
MutexLock lock(&self->channel_args_mu_);
|
710
|
+
args = grpc_channel_args_copy(self->args_);
|
711
|
+
connection_manager = self->connection_manager_;
|
712
|
+
}
|
713
|
+
auto endpoint_cleanup = [&](grpc_error* error) {
|
714
|
+
grpc_endpoint_shutdown(tcp, error);
|
458
715
|
grpc_endpoint_destroy(tcp);
|
459
716
|
gpr_free(acceptor);
|
460
|
-
|
717
|
+
};
|
718
|
+
if (self->server_->config_fetcher() != nullptr) {
|
719
|
+
if (connection_manager == nullptr) {
|
720
|
+
grpc_error* error = GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
721
|
+
"No ConnectionManager configured. Closing connection.");
|
722
|
+
endpoint_cleanup(error);
|
723
|
+
grpc_channel_args_destroy(args);
|
724
|
+
return;
|
725
|
+
}
|
726
|
+
// TODO(yashykt): Maybe combine the following two arg modifiers into a
|
727
|
+
// single one.
|
728
|
+
absl::StatusOr<grpc_channel_args*> args_result =
|
729
|
+
connection_manager->UpdateChannelArgsForConnection(args, tcp);
|
730
|
+
if (!args_result.ok()) {
|
731
|
+
gpr_log(GPR_DEBUG, "Closing connection: %s",
|
732
|
+
args_result.status().ToString().c_str());
|
733
|
+
endpoint_cleanup(GRPC_ERROR_CREATE_FROM_COPIED_STRING(
|
734
|
+
args_result.status().ToString().c_str()));
|
735
|
+
return;
|
736
|
+
}
|
737
|
+
grpc_error* error = GRPC_ERROR_NONE;
|
738
|
+
args = self->args_modifier_(*args_result, &error);
|
739
|
+
if (error != GRPC_ERROR_NONE) {
|
740
|
+
gpr_log(GPR_DEBUG, "Closing connection: %s", grpc_error_string(error));
|
741
|
+
endpoint_cleanup(error);
|
742
|
+
grpc_channel_args_destroy(args);
|
743
|
+
return;
|
744
|
+
}
|
461
745
|
}
|
462
|
-
|
463
|
-
|
464
|
-
|
465
|
-
|
466
|
-
|
467
|
-
|
468
|
-
grpc_error* error) {
|
469
|
-
Chttp2ServerListener* self = static_cast<Chttp2ServerListener*>(arg);
|
470
|
-
/* ensure all threads have unlocked */
|
471
|
-
grpc_closure* destroy_done = nullptr;
|
746
|
+
auto connection =
|
747
|
+
MakeOrphanable<ActiveConnection>(accepting_pollset, acceptor, args);
|
748
|
+
// Hold a ref to connection to allow starting handshake outside the
|
749
|
+
// critical region
|
750
|
+
RefCountedPtr<ActiveConnection> connection_ref = connection->Ref();
|
751
|
+
RefCountedPtr<Chttp2ServerListener> listener_ref;
|
472
752
|
{
|
473
753
|
MutexLock lock(&self->mu_);
|
474
|
-
|
475
|
-
|
476
|
-
|
477
|
-
|
754
|
+
// Shutdown the the connection if listener's stopped serving.
|
755
|
+
if (!self->shutdown_ && self->is_serving_) {
|
756
|
+
grpc_resource_user* resource_user =
|
757
|
+
self->server_->default_resource_user();
|
758
|
+
if (resource_user != nullptr &&
|
759
|
+
!grpc_resource_user_safe_alloc(resource_user,
|
760
|
+
GRPC_RESOURCE_QUOTA_CHANNEL_SIZE)) {
|
761
|
+
gpr_log(
|
762
|
+
GPR_ERROR,
|
763
|
+
"Memory quota exhausted, rejecting connection, no handshaking.");
|
764
|
+
} else {
|
765
|
+
// This ref needs to be taken in the critical region after having made
|
766
|
+
// sure that the listener has not been Orphaned, so as to avoid
|
767
|
+
// heap-use-after-free issues where `Ref()` is invoked when the ref of
|
768
|
+
// tcp_server_ has already reached 0. (Ref() implementation of
|
769
|
+
// Chttp2ServerListener is grpc_tcp_server_ref().)
|
770
|
+
listener_ref = self->Ref();
|
771
|
+
self->connections_.emplace(connection.get(), std::move(connection));
|
772
|
+
}
|
478
773
|
}
|
479
|
-
self->channelz_listen_socket_.reset();
|
480
774
|
}
|
481
|
-
|
482
|
-
|
483
|
-
|
484
|
-
|
485
|
-
ExecCtx::Run(DEBUG_LOCATION, destroy_done, GRPC_ERROR_REF(error));
|
486
|
-
ExecCtx::Get()->Flush();
|
775
|
+
if (connection != nullptr) {
|
776
|
+
endpoint_cleanup(GRPC_ERROR_NONE);
|
777
|
+
} else {
|
778
|
+
connection_ref->Start(std::move(listener_ref), tcp, args);
|
487
779
|
}
|
780
|
+
grpc_channel_args_destroy(args);
|
781
|
+
}
|
782
|
+
|
783
|
+
void Chttp2ServerListener::TcpServerShutdownComplete(void* arg,
|
784
|
+
grpc_error* error) {
|
785
|
+
Chttp2ServerListener* self = static_cast<Chttp2ServerListener*>(arg);
|
786
|
+
self->channelz_listen_socket_.reset();
|
787
|
+
GRPC_ERROR_UNREF(error);
|
488
788
|
delete self;
|
489
789
|
}
|
490
790
|
|
@@ -496,10 +796,20 @@ void Chttp2ServerListener::Orphan() {
|
|
496
796
|
if (config_fetcher_watcher_ != nullptr) {
|
497
797
|
server_->config_fetcher()->CancelWatch(config_fetcher_watcher_);
|
498
798
|
}
|
799
|
+
std::map<ActiveConnection*, OrphanablePtr<ActiveConnection>> connections;
|
499
800
|
grpc_tcp_server* tcp_server;
|
500
801
|
{
|
501
802
|
MutexLock lock(&mu_);
|
502
803
|
shutdown_ = true;
|
804
|
+
is_serving_ = false;
|
805
|
+
// Orphan the connections so that they can start cleaning up.
|
806
|
+
connections = std::move(connections_);
|
807
|
+
// If the listener is currently set to be serving but has not been started
|
808
|
+
// yet, it means that `grpc_tcp_server_start` is in progress. Wait for the
|
809
|
+
// operation to finish to avoid causing races.
|
810
|
+
while (is_serving_ && !started_) {
|
811
|
+
started_cv_.Wait(&mu_);
|
812
|
+
}
|
503
813
|
tcp_server = tcp_server_;
|
504
814
|
}
|
505
815
|
grpc_tcp_server_shutdown_listeners(tcp_server);
|
@@ -513,10 +823,12 @@ void Chttp2ServerListener::Orphan() {
|
|
513
823
|
//
|
514
824
|
|
515
825
|
grpc_error* Chttp2ServerAddPort(Server* server, const char* addr,
|
516
|
-
grpc_channel_args* args,
|
826
|
+
grpc_channel_args* args,
|
827
|
+
Chttp2ServerArgsModifier args_modifier,
|
828
|
+
int* port_num) {
|
517
829
|
if (strncmp(addr, "external:", 9) == 0) {
|
518
|
-
return grpc_core::Chttp2ServerListener::CreateWithAcceptor(
|
519
|
-
|
830
|
+
return grpc_core::Chttp2ServerListener::CreateWithAcceptor(
|
831
|
+
server, addr, args, args_modifier);
|
520
832
|
}
|
521
833
|
*port_num = -1;
|
522
834
|
grpc_resolved_addresses* resolved = nullptr;
|
@@ -540,10 +852,10 @@ grpc_error* Chttp2ServerAddPort(Server* server, const char* addr,
|
|
540
852
|
if (*port_num != -1 && grpc_sockaddr_get_port(&resolved->addrs[i]) == 0) {
|
541
853
|
grpc_sockaddr_set_port(&resolved->addrs[i], *port_num);
|
542
854
|
}
|
543
|
-
int port_temp;
|
855
|
+
int port_temp = -1;
|
544
856
|
error = grpc_core::Chttp2ServerListener::Create(
|
545
857
|
server, &resolved->addrs[i], grpc_channel_args_copy(args),
|
546
|
-
&port_temp);
|
858
|
+
args_modifier, &port_temp);
|
547
859
|
if (error != GRPC_ERROR_NONE) {
|
548
860
|
error_list.push_back(error);
|
549
861
|
} else {
|