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
@@ -52,8 +52,8 @@ class XdsServerCredentials final : public grpc_server_credentials {
|
|
52
52
|
: grpc_server_credentials(kCredentialsTypeXds),
|
53
53
|
fallback_credentials_(std::move(fallback_credentials)) {}
|
54
54
|
|
55
|
-
RefCountedPtr<grpc_server_security_connector> create_security_connector(
|
56
|
-
override;
|
55
|
+
RefCountedPtr<grpc_server_security_connector> create_security_connector(
|
56
|
+
const grpc_channel_args* /* args */) override;
|
57
57
|
|
58
58
|
private:
|
59
59
|
RefCountedPtr<grpc_server_credentials> fallback_credentials_;
|
@@ -62,7 +62,7 @@ class XdsServerCredentials final : public grpc_server_credentials {
|
|
62
62
|
bool TestOnlyXdsVerifySubjectAlternativeNames(
|
63
63
|
const char* const* subject_alternative_names,
|
64
64
|
size_t subject_alternative_names_size,
|
65
|
-
const std::vector<
|
65
|
+
const std::vector<StringMatcher>& matchers);
|
66
66
|
|
67
67
|
} // namespace grpc_core
|
68
68
|
|
@@ -51,14 +51,14 @@ RefCountedPtr<grpc_auth_context> TestOnlyMakeInsecureAuthContext() {
|
|
51
51
|
// check_call_host and cancel_check_call_host are no-ops since we want to
|
52
52
|
// provide an insecure channel.
|
53
53
|
bool InsecureChannelSecurityConnector::check_call_host(
|
54
|
-
absl::string_view host
|
55
|
-
grpc_closure* on_call_host_checked
|
54
|
+
absl::string_view /*host*/, grpc_auth_context* /*auth_context*/,
|
55
|
+
grpc_closure* /*on_call_host_checked*/, grpc_error** error) {
|
56
56
|
*error = GRPC_ERROR_NONE;
|
57
57
|
return true;
|
58
58
|
}
|
59
59
|
|
60
60
|
void InsecureChannelSecurityConnector::cancel_check_call_host(
|
61
|
-
grpc_closure* on_call_host_checked
|
61
|
+
grpc_closure* /*on_call_host_checked*/, grpc_error* error) {
|
62
62
|
GRPC_ERROR_UNREF(error);
|
63
63
|
}
|
64
64
|
|
@@ -76,7 +76,7 @@ void InsecureChannelSecurityConnector::add_handshakers(
|
|
76
76
|
}
|
77
77
|
|
78
78
|
void InsecureChannelSecurityConnector::check_peer(
|
79
|
-
tsi_peer peer, grpc_endpoint* ep
|
79
|
+
tsi_peer peer, grpc_endpoint* /*ep*/,
|
80
80
|
RefCountedPtr<grpc_auth_context>* auth_context,
|
81
81
|
grpc_closure* on_peer_checked) {
|
82
82
|
*auth_context = MakeAuthContext();
|
@@ -104,7 +104,7 @@ void InsecureServerSecurityConnector::add_handshakers(
|
|
104
104
|
}
|
105
105
|
|
106
106
|
void InsecureServerSecurityConnector::check_peer(
|
107
|
-
tsi_peer peer, grpc_endpoint* ep
|
107
|
+
tsi_peer peer, grpc_endpoint* /*ep*/,
|
108
108
|
grpc_core::RefCountedPtr<grpc_auth_context>* auth_context,
|
109
109
|
grpc_closure* on_peer_checked) {
|
110
110
|
*auth_context = MakeAuthContext();
|
@@ -41,11 +41,13 @@
|
|
41
41
|
|
42
42
|
/* -- Constants. -- */
|
43
43
|
|
44
|
-
#
|
45
|
-
static const char* installed_roots_path =
|
46
|
-
#
|
44
|
+
#if defined(GRPC_ROOT_PEM_PATH)
|
45
|
+
static const char* installed_roots_path = GRPC_ROOT_PEM_PATH;
|
46
|
+
#elif defined(INSTALL_PREFIX)
|
47
47
|
static const char* installed_roots_path =
|
48
|
-
INSTALL_PREFIX "/share/grpc/roots.pem";
|
48
|
+
INSTALL_PREFIX "/usr/share/grpc/roots.pem";
|
49
|
+
#else
|
50
|
+
static const char* installed_roots_path = "/usr/share/grpc/roots.pem";
|
49
51
|
#endif
|
50
52
|
|
51
53
|
#ifndef TSI_OPENSSL_ALPN_SUPPORT
|
@@ -395,6 +397,9 @@ grpc_security_status grpc_ssl_tsi_client_handshaker_factory_init(
|
|
395
397
|
const char* root_certs;
|
396
398
|
const tsi_ssl_root_certs_store* root_store;
|
397
399
|
if (pem_root_certs == nullptr) {
|
400
|
+
gpr_log(GPR_INFO,
|
401
|
+
"No root certificates specified; use ones stored in system default "
|
402
|
+
"locations instead");
|
398
403
|
// Use default root certificates.
|
399
404
|
root_certs = grpc_core::DefaultSslRootStore::GetPemRootCerts();
|
400
405
|
if (root_certs == nullptr) {
|
@@ -136,9 +136,20 @@ TlsChannelSecurityConnector::TlsChannelSecurityConnector(
|
|
136
136
|
if (options_->watch_identity_pair()) {
|
137
137
|
watched_identity_cert_name = options_->identity_cert_name();
|
138
138
|
}
|
139
|
-
|
140
|
-
|
141
|
-
|
139
|
+
// We will use the root certs stored in system default locations if not
|
140
|
+
// watching root certs on the client side. We will handle this case
|
141
|
+
// differently here, because "watching a default roots without the identity
|
142
|
+
// certs" is a valid case(and hence we will need to call
|
143
|
+
// OnCertificatesChanged), but it requires nothing from the provider, and
|
144
|
+
// hence no need to register the watcher.
|
145
|
+
bool use_default_roots = !options_->watch_root_cert();
|
146
|
+
if (use_default_roots && !options_->watch_identity_pair()) {
|
147
|
+
watcher_ptr->OnCertificatesChanged(absl::nullopt, absl::nullopt);
|
148
|
+
} else {
|
149
|
+
distributor->WatchTlsCertificates(std::move(watcher_ptr),
|
150
|
+
watched_root_cert_name,
|
151
|
+
watched_identity_cert_name);
|
152
|
+
}
|
142
153
|
}
|
143
154
|
|
144
155
|
TlsChannelSecurityConnector::~TlsChannelSecurityConnector() {
|
@@ -148,7 +159,9 @@ TlsChannelSecurityConnector::~TlsChannelSecurityConnector() {
|
|
148
159
|
// Cancel all the watchers.
|
149
160
|
grpc_tls_certificate_distributor* distributor =
|
150
161
|
options_->certificate_distributor();
|
151
|
-
distributor
|
162
|
+
if (distributor != nullptr) {
|
163
|
+
distributor->CancelTlsCertificatesWatch(certificate_watcher_);
|
164
|
+
}
|
152
165
|
if (client_handshaker_factory_ != nullptr) {
|
153
166
|
tsi_ssl_client_handshaker_factory_unref(client_handshaker_factory_);
|
154
167
|
}
|
@@ -305,6 +318,12 @@ int TlsChannelSecurityConnector::cmp(
|
|
305
318
|
bool TlsChannelSecurityConnector::check_call_host(
|
306
319
|
absl::string_view host, grpc_auth_context* auth_context,
|
307
320
|
grpc_closure* /*on_call_host_checked*/, grpc_error** error) {
|
321
|
+
if (options_->server_verification_option() ==
|
322
|
+
GRPC_TLS_SKIP_HOSTNAME_VERIFICATION ||
|
323
|
+
options_->server_verification_option() ==
|
324
|
+
GRPC_TLS_SKIP_ALL_SERVER_VERIFICATION) {
|
325
|
+
return true;
|
326
|
+
}
|
308
327
|
return grpc_ssl_check_call_host(host, target_name_.c_str(),
|
309
328
|
overridden_target_name_.c_str(), auth_context,
|
310
329
|
error);
|
@@ -327,16 +346,12 @@ void TlsChannelSecurityConnector::TlsChannelCertificateWatcher::
|
|
327
346
|
if (key_cert_pairs.has_value()) {
|
328
347
|
security_connector_->pem_key_cert_pair_list_ = std::move(key_cert_pairs);
|
329
348
|
}
|
330
|
-
bool
|
331
|
-
|
332
|
-
bool
|
333
|
-
security_connector_->options_->watch_identity_pair()
|
334
|
-
bool identity_has_value =
|
349
|
+
const bool root_ready = !security_connector_->options_->watch_root_cert() ||
|
350
|
+
security_connector_->pem_root_certs_.has_value();
|
351
|
+
const bool identity_ready =
|
352
|
+
!security_connector_->options_->watch_identity_pair() ||
|
335
353
|
security_connector_->pem_key_cert_pair_list_.has_value();
|
336
|
-
if (
|
337
|
-
identity_has_value) ||
|
338
|
-
(root_being_watched && root_has_value && !identity_being_watched) ||
|
339
|
-
(!root_being_watched && identity_being_watched && identity_has_value)) {
|
354
|
+
if (root_ready && identity_ready) {
|
340
355
|
if (security_connector_->UpdateHandshakerFactoryLocked() !=
|
341
356
|
GRPC_SECURITY_OK) {
|
342
357
|
gpr_log(GPR_ERROR, "Update handshaker factory failed.");
|
@@ -383,9 +398,11 @@ TlsChannelSecurityConnector::UpdateHandshakerFactoryLocked() {
|
|
383
398
|
if (pem_key_cert_pair_list_.has_value()) {
|
384
399
|
pem_key_cert_pair = ConvertToTsiPemKeyCertPair(*pem_key_cert_pair_list_);
|
385
400
|
}
|
401
|
+
bool use_default_roots = !options_->watch_root_cert();
|
386
402
|
grpc_security_status status = grpc_ssl_tsi_client_handshaker_factory_init(
|
387
403
|
pem_key_cert_pair,
|
388
|
-
pem_root_certs.empty() ? nullptr
|
404
|
+
pem_root_certs.empty() || use_default_roots ? nullptr
|
405
|
+
: pem_root_certs.c_str(),
|
389
406
|
skip_server_certificate_verification,
|
390
407
|
grpc_get_tsi_tls_version(options_->min_tls_version()),
|
391
408
|
grpc_get_tsi_tls_version(options_->max_tls_version()), ssl_session_cache_,
|
@@ -516,6 +533,7 @@ TlsServerSecurityConnector::TlsServerSecurityConnector(
|
|
516
533
|
if (options_->watch_identity_pair()) {
|
517
534
|
watched_identity_cert_name = options_->identity_cert_name();
|
518
535
|
}
|
536
|
+
// Server side won't use default system roots at any time.
|
519
537
|
distributor->WatchTlsCertificates(std::move(watcher_ptr),
|
520
538
|
watched_root_cert_name,
|
521
539
|
watched_identity_cert_name);
|
@@ -29,6 +29,7 @@
|
|
29
29
|
#include <grpc/support/log.h>
|
30
30
|
|
31
31
|
#include "src/core/lib/channel/channel_args.h"
|
32
|
+
#include "src/core/lib/channel/channelz.h"
|
32
33
|
#include "src/core/lib/channel/handshaker.h"
|
33
34
|
#include "src/core/lib/channel/handshaker_registry.h"
|
34
35
|
#include "src/core/lib/gprpp/ref_counted_ptr.h"
|
@@ -84,7 +85,7 @@ class SecurityHandshaker : public Handshaker {
|
|
84
85
|
tsi_handshaker* handshaker_;
|
85
86
|
RefCountedPtr<grpc_security_connector> connector_;
|
86
87
|
|
87
|
-
|
88
|
+
Mutex mu_;
|
88
89
|
|
89
90
|
bool is_shutdown_ = false;
|
90
91
|
// Endpoint and read buffer to destroy after a shutdown.
|
@@ -120,14 +121,12 @@ SecurityHandshaker::SecurityHandshaker(tsi_handshaker* handshaker,
|
|
120
121
|
max_frame_size_ = grpc_channel_arg_get_integer(
|
121
122
|
arg, {0, 0, std::numeric_limits<int>::max()});
|
122
123
|
}
|
123
|
-
gpr_mu_init(&mu_);
|
124
124
|
grpc_slice_buffer_init(&outgoing_);
|
125
125
|
GRPC_CLOSURE_INIT(&on_peer_checked_, &SecurityHandshaker::OnPeerCheckedFn,
|
126
126
|
this, grpc_schedule_on_exec_ctx);
|
127
127
|
}
|
128
128
|
|
129
129
|
SecurityHandshaker::~SecurityHandshaker() {
|
130
|
-
gpr_mu_destroy(&mu_);
|
131
130
|
tsi_handshaker_destroy(handshaker_);
|
132
131
|
tsi_handshaker_result_destroy(handshaker_result_);
|
133
132
|
if (endpoint_to_destroy_ != nullptr) {
|
@@ -201,6 +200,31 @@ void SecurityHandshaker::HandshakeFailedLocked(grpc_error* error) {
|
|
201
200
|
ExecCtx::Run(DEBUG_LOCATION, on_handshake_done_, error);
|
202
201
|
}
|
203
202
|
|
203
|
+
namespace {
|
204
|
+
|
205
|
+
RefCountedPtr<channelz::SocketNode::Security>
|
206
|
+
MakeChannelzSecurityFromAuthContext(grpc_auth_context* auth_context) {
|
207
|
+
RefCountedPtr<channelz::SocketNode::Security> security =
|
208
|
+
MakeRefCounted<channelz::SocketNode::Security>();
|
209
|
+
// TODO(yashykt): Currently, we are assuming TLS by default and are only able
|
210
|
+
// to fill in the remote certificate but we should ideally be able to fill in
|
211
|
+
// other fields in
|
212
|
+
// https://github.com/grpc/grpc/blob/fcd43e90304862a823316b224ee733d17a8cfd90/src/proto/grpc/channelz/channelz.proto#L326
|
213
|
+
// from grpc_auth_context.
|
214
|
+
security->type = channelz::SocketNode::Security::ModelType::kTls;
|
215
|
+
security->tls = absl::make_optional<channelz::SocketNode::Security::Tls>();
|
216
|
+
grpc_auth_property_iterator it = grpc_auth_context_find_properties_by_name(
|
217
|
+
auth_context, GRPC_X509_PEM_CERT_PROPERTY_NAME);
|
218
|
+
const grpc_auth_property* prop = grpc_auth_property_iterator_next(&it);
|
219
|
+
if (prop != nullptr) {
|
220
|
+
security->tls->remote_certificate =
|
221
|
+
std::string(prop->value, prop->value_length);
|
222
|
+
}
|
223
|
+
return security;
|
224
|
+
}
|
225
|
+
|
226
|
+
} // namespace
|
227
|
+
|
204
228
|
void SecurityHandshaker::OnPeerCheckedInner(grpc_error* error) {
|
205
229
|
MutexLock lock(&mu_);
|
206
230
|
if (error != GRPC_ERROR_NONE || is_shutdown_) {
|
@@ -253,9 +277,13 @@ void SecurityHandshaker::OnPeerCheckedInner(grpc_error* error) {
|
|
253
277
|
tsi_handshaker_result_destroy(handshaker_result_);
|
254
278
|
handshaker_result_ = nullptr;
|
255
279
|
// Add auth context to channel args.
|
256
|
-
grpc_arg
|
280
|
+
absl::InlinedVector<grpc_arg, 2> args_to_add;
|
281
|
+
args_to_add.push_back(grpc_auth_context_to_arg(auth_context_.get()));
|
282
|
+
auto security = MakeChannelzSecurityFromAuthContext(auth_context_.get());
|
283
|
+
args_to_add.push_back(security->MakeChannelArg());
|
257
284
|
grpc_channel_args* tmp_args = args_->args;
|
258
|
-
args_->args = grpc_channel_args_copy_and_add(tmp_args,
|
285
|
+
args_->args = grpc_channel_args_copy_and_add(tmp_args, args_to_add.data(),
|
286
|
+
args_to_add.size());
|
259
287
|
grpc_channel_args_destroy(tmp_args);
|
260
288
|
// Invoke callback.
|
261
289
|
ExecCtx::Run(DEBUG_LOCATION, on_handshake_done_, GRPC_ERROR_NONE);
|
@@ -300,6 +300,13 @@ static grpc_error* server_auth_init_channel_elem(
|
|
300
300
|
GPR_ASSERT(!args->is_last);
|
301
301
|
grpc_auth_context* auth_context =
|
302
302
|
grpc_find_auth_context_in_args(args->channel_args);
|
303
|
+
if (auth_context == nullptr) {
|
304
|
+
grpc_error* error = GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
305
|
+
"No authorization context found. This might be a TRANSIENT failure due "
|
306
|
+
"to certificates not having been loaded yet.");
|
307
|
+
gpr_log(GPR_DEBUG, "%s", grpc_error_string(error));
|
308
|
+
return error;
|
309
|
+
}
|
303
310
|
GPR_ASSERT(auth_context != nullptr);
|
304
311
|
grpc_server_credentials* creds =
|
305
312
|
grpc_find_server_credentials_in_args(args->channel_args);
|
@@ -44,13 +44,13 @@
|
|
44
44
|
using grpc_core::InternedSliceRefcount;
|
45
45
|
|
46
46
|
typedef struct slice_shard {
|
47
|
-
|
47
|
+
grpc_core::Mutex mu;
|
48
48
|
InternedSliceRefcount** strs;
|
49
49
|
size_t count;
|
50
50
|
size_t capacity;
|
51
51
|
} slice_shard;
|
52
52
|
|
53
|
-
static slice_shard g_shards
|
53
|
+
static slice_shard* g_shards;
|
54
54
|
|
55
55
|
struct static_metadata_hash_ent {
|
56
56
|
uint32_t hash;
|
@@ -259,13 +259,12 @@ template <typename SliceArgs>
|
|
259
259
|
static InternedSliceRefcount* FindOrCreateInternedSlice(uint32_t hash,
|
260
260
|
const SliceArgs& args) {
|
261
261
|
slice_shard* shard = &g_shards[SHARD_IDX(hash)];
|
262
|
-
|
262
|
+
grpc_core::MutexLock lock(&shard->mu);
|
263
263
|
const size_t idx = TABLE_IDX(hash, shard->capacity);
|
264
264
|
InternedSliceRefcount* s = MatchInternedSliceLocked(hash, idx, args);
|
265
265
|
if (s == nullptr) {
|
266
266
|
s = InternNewStringLocked(shard, idx, hash, args);
|
267
267
|
}
|
268
|
-
gpr_mu_unlock(&shard->mu);
|
269
268
|
return s;
|
270
269
|
}
|
271
270
|
|
@@ -312,9 +311,9 @@ void grpc_slice_intern_init(void) {
|
|
312
311
|
grpc_core::g_hash_seed =
|
313
312
|
static_cast<uint32_t>(gpr_now(GPR_CLOCK_REALTIME).tv_nsec);
|
314
313
|
}
|
314
|
+
g_shards = new slice_shard[SHARD_COUNT];
|
315
315
|
for (size_t i = 0; i < SHARD_COUNT; i++) {
|
316
316
|
slice_shard* shard = &g_shards[i];
|
317
|
-
gpr_mu_init(&shard->mu);
|
318
317
|
shard->count = 0;
|
319
318
|
shard->capacity = INITIAL_SHARD_CAPACITY;
|
320
319
|
shard->strs = static_cast<InternedSliceRefcount**>(
|
@@ -352,7 +351,6 @@ void grpc_slice_intern_init(void) {
|
|
352
351
|
void grpc_slice_intern_shutdown(void) {
|
353
352
|
for (size_t i = 0; i < SHARD_COUNT; i++) {
|
354
353
|
slice_shard* shard = &g_shards[i];
|
355
|
-
gpr_mu_destroy(&shard->mu);
|
356
354
|
/* TODO(ctiller): GPR_ASSERT(shard->count == 0); */
|
357
355
|
if (shard->count != 0) {
|
358
356
|
gpr_log(GPR_DEBUG, "WARNING: %" PRIuPTR " metadata strings were leaked",
|
@@ -371,4 +369,5 @@ void grpc_slice_intern_shutdown(void) {
|
|
371
369
|
}
|
372
370
|
gpr_free(shard->strs);
|
373
371
|
}
|
372
|
+
delete[] g_shards;
|
374
373
|
}
|
@@ -94,9 +94,9 @@ struct CallRegistrationTable {
|
|
94
94
|
// The map key should be owned strings rather than unowned char*'s to
|
95
95
|
// guarantee that it outlives calls on the core channel (which may outlast the
|
96
96
|
// C++ or other wrapped language Channel that registered these calls).
|
97
|
-
std::map<std::pair<std::string, std::string>, RegisteredCall>
|
98
|
-
|
99
|
-
int method_registration_attempts
|
97
|
+
std::map<std::pair<std::string, std::string>, RegisteredCall> map
|
98
|
+
ABSL_GUARDED_BY(mu);
|
99
|
+
int method_registration_attempts ABSL_GUARDED_BY(mu) = 0;
|
100
100
|
};
|
101
101
|
|
102
102
|
} // namespace grpc_core
|
@@ -705,7 +705,7 @@ static void cq_end_op_for_next(
|
|
705
705
|
6, (cq, tag, errmsg, done, done_arg, storage));
|
706
706
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_trace_operation_failures) &&
|
707
707
|
error != GRPC_ERROR_NONE) {
|
708
|
-
gpr_log(
|
708
|
+
gpr_log(GPR_INFO, "Operation failed: tag=%p, error=%s", tag, errmsg);
|
709
709
|
}
|
710
710
|
}
|
711
711
|
cq_next_data* cqd = static_cast<cq_next_data*> DATA_FROM_CQ(cq);
|
@@ -63,16 +63,15 @@ extern void grpc_register_built_in_plugins(void);
|
|
63
63
|
#define MAX_PLUGINS 128
|
64
64
|
|
65
65
|
static gpr_once g_basic_init = GPR_ONCE_INIT;
|
66
|
-
static
|
66
|
+
static grpc_core::Mutex* g_init_mu;
|
67
67
|
static int g_initializations;
|
68
|
-
static
|
68
|
+
static grpc_core::CondVar* g_shutting_down_cv;
|
69
69
|
static bool g_shutting_down;
|
70
70
|
|
71
71
|
static void do_basic_init(void) {
|
72
72
|
gpr_log_verbosity_init();
|
73
|
-
|
74
|
-
g_shutting_down_cv =
|
75
|
-
gpr_cv_init(g_shutting_down_cv);
|
73
|
+
g_init_mu = new grpc_core::Mutex();
|
74
|
+
g_shutting_down_cv = new grpc_core::CondVar();
|
76
75
|
g_shutting_down = false;
|
77
76
|
grpc_register_built_in_plugins();
|
78
77
|
grpc_cq_global_init();
|
@@ -130,11 +129,11 @@ void grpc_init(void) {
|
|
130
129
|
int i;
|
131
130
|
gpr_once_init(&g_basic_init, do_basic_init);
|
132
131
|
|
133
|
-
grpc_core::MutexLock lock(
|
132
|
+
grpc_core::MutexLock lock(g_init_mu);
|
134
133
|
if (++g_initializations == 1) {
|
135
134
|
if (g_shutting_down) {
|
136
135
|
g_shutting_down = false;
|
137
|
-
|
136
|
+
g_shutting_down_cv->SignalAll();
|
138
137
|
}
|
139
138
|
grpc_core::Fork::GlobalInit();
|
140
139
|
grpc_fork_handlers_auto_register();
|
@@ -196,14 +195,14 @@ void grpc_shutdown_internal_locked(void) {
|
|
196
195
|
grpc_core::ExecCtx::GlobalShutdown();
|
197
196
|
grpc_core::ApplicationCallbackExecCtx::GlobalShutdown();
|
198
197
|
g_shutting_down = false;
|
199
|
-
|
198
|
+
g_shutting_down_cv->SignalAll();
|
200
199
|
// Absolute last action will be to delete static metadata context.
|
201
200
|
grpc_destroy_static_metadata_ctx();
|
202
201
|
}
|
203
202
|
|
204
203
|
void grpc_shutdown_internal(void* /*ignored*/) {
|
205
204
|
GRPC_API_TRACE("grpc_shutdown_internal", 0, ());
|
206
|
-
grpc_core::MutexLock lock(
|
205
|
+
grpc_core::MutexLock lock(g_init_mu);
|
207
206
|
// We have released lock from the shutdown thread and it is possible that
|
208
207
|
// another grpc_init has been called, and do nothing if that is the case.
|
209
208
|
if (--g_initializations != 0) {
|
@@ -214,7 +213,7 @@ void grpc_shutdown_internal(void* /*ignored*/) {
|
|
214
213
|
|
215
214
|
void grpc_shutdown(void) {
|
216
215
|
GRPC_API_TRACE("grpc_shutdown(void)", 0, ());
|
217
|
-
grpc_core::MutexLock lock(
|
216
|
+
grpc_core::MutexLock lock(g_init_mu);
|
218
217
|
|
219
218
|
if (--g_initializations == 0) {
|
220
219
|
grpc_core::ApplicationCallbackExecCtx* acec =
|
@@ -243,7 +242,7 @@ void grpc_shutdown(void) {
|
|
243
242
|
|
244
243
|
void grpc_shutdown_blocking(void) {
|
245
244
|
GRPC_API_TRACE("grpc_shutdown_blocking(void)", 0, ());
|
246
|
-
grpc_core::MutexLock lock(
|
245
|
+
grpc_core::MutexLock lock(g_init_mu);
|
247
246
|
if (--g_initializations == 0) {
|
248
247
|
g_shutting_down = true;
|
249
248
|
grpc_shutdown_internal_locked();
|
@@ -253,16 +252,15 @@ void grpc_shutdown_blocking(void) {
|
|
253
252
|
int grpc_is_initialized(void) {
|
254
253
|
int r;
|
255
254
|
gpr_once_init(&g_basic_init, do_basic_init);
|
256
|
-
grpc_core::MutexLock lock(
|
255
|
+
grpc_core::MutexLock lock(g_init_mu);
|
257
256
|
r = g_initializations > 0;
|
258
257
|
return r;
|
259
258
|
}
|
260
259
|
|
261
260
|
void grpc_maybe_wait_for_async_shutdown(void) {
|
262
261
|
gpr_once_init(&g_basic_init, do_basic_init);
|
263
|
-
grpc_core::MutexLock lock(
|
262
|
+
grpc_core::MutexLock lock(g_init_mu);
|
264
263
|
while (g_shutting_down) {
|
265
|
-
|
266
|
-
gpr_inf_future(GPR_CLOCK_REALTIME));
|
264
|
+
g_shutting_down_cv->Wait(g_init_mu);
|
267
265
|
}
|
268
266
|
}
|
@@ -35,12 +35,20 @@
|
|
35
35
|
#include "src/core/lib/transport/connectivity_state.h"
|
36
36
|
#include "src/core/lib/transport/static_metadata.h"
|
37
37
|
|
38
|
+
#define GRPC_ARG_LAME_FILTER_ERROR "grpc.lame_filter_error"
|
39
|
+
|
38
40
|
namespace grpc_core {
|
39
41
|
|
40
42
|
namespace {
|
41
43
|
|
42
44
|
struct ChannelData {
|
43
|
-
ChannelData(
|
45
|
+
explicit ChannelData(grpc_channel_element_args* args)
|
46
|
+
: state_tracker("lame_channel", GRPC_CHANNEL_SHUTDOWN) {
|
47
|
+
grpc_error* err = grpc_channel_args_find_pointer<grpc_error>(
|
48
|
+
args->channel_args, GRPC_ARG_LAME_FILTER_ERROR);
|
49
|
+
if (err != nullptr) error = GRPC_ERROR_REF(err);
|
50
|
+
}
|
51
|
+
|
44
52
|
~ChannelData() { GRPC_ERROR_UNREF(error); }
|
45
53
|
|
46
54
|
grpc_error* error = GRPC_ERROR_NONE;
|
@@ -105,9 +113,7 @@ static void lame_destroy_call_elem(grpc_call_element* /*elem*/,
|
|
105
113
|
|
106
114
|
static grpc_error* lame_init_channel_elem(grpc_channel_element* elem,
|
107
115
|
grpc_channel_element_args* args) {
|
108
|
-
|
109
|
-
GPR_ASSERT(args->is_last);
|
110
|
-
new (elem->channel_data) ChannelData;
|
116
|
+
new (elem->channel_data) ChannelData(args);
|
111
117
|
return GRPC_ERROR_NONE;
|
112
118
|
}
|
113
119
|
|
@@ -116,12 +122,25 @@ static void lame_destroy_channel_elem(grpc_channel_element* elem) {
|
|
116
122
|
chand->~ChannelData();
|
117
123
|
}
|
118
124
|
|
125
|
+
// Channel arg vtable for a grpc_error*.
|
126
|
+
void* ErrorCopy(void* p) {
|
127
|
+
grpc_error* error = static_cast<grpc_error*>(p);
|
128
|
+
return GRPC_ERROR_REF(error);
|
129
|
+
}
|
130
|
+
void ErrorDestroy(void* p) {
|
131
|
+
grpc_error* error = static_cast<grpc_error*>(p);
|
132
|
+
GRPC_ERROR_UNREF(error);
|
133
|
+
}
|
134
|
+
int ErrorCompare(void* p, void* q) { return GPR_ICMP(p, q); }
|
135
|
+
const grpc_arg_pointer_vtable kLameFilterErrorArgVtable = {
|
136
|
+
ErrorCopy, ErrorDestroy, ErrorCompare};
|
137
|
+
|
119
138
|
} // namespace
|
120
139
|
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
140
|
+
grpc_arg MakeLameClientErrorArg(grpc_error* error) {
|
141
|
+
return grpc_channel_arg_pointer_create(
|
142
|
+
const_cast<char*>(GRPC_ARG_LAME_FILTER_ERROR), error,
|
143
|
+
&kLameFilterErrorArgVtable);
|
125
144
|
}
|
126
145
|
|
127
146
|
} // namespace grpc_core
|
@@ -146,20 +165,20 @@ grpc_channel* grpc_lame_client_channel_create(const char* target,
|
|
146
165
|
grpc_status_code error_code,
|
147
166
|
const char* error_message) {
|
148
167
|
grpc_core::ExecCtx exec_ctx;
|
149
|
-
grpc_channel_element* elem;
|
150
|
-
grpc_channel* channel =
|
151
|
-
grpc_channel_create(target, nullptr, GRPC_CLIENT_LAME_CHANNEL, nullptr);
|
152
|
-
elem = grpc_channel_stack_element(grpc_channel_get_channel_stack(channel), 0);
|
153
168
|
GRPC_API_TRACE(
|
154
169
|
"grpc_lame_client_channel_create(target=%s, error_code=%d, "
|
155
170
|
"error_message=%s)",
|
156
171
|
3, (target, (int)error_code, error_message));
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
172
|
+
grpc_error* error = grpc_error_set_str(
|
173
|
+
grpc_error_set_int(
|
174
|
+
GRPC_ERROR_CREATE_FROM_STATIC_STRING("lame client channel"),
|
175
|
+
GRPC_ERROR_INT_GRPC_STATUS, error_code),
|
176
|
+
GRPC_ERROR_STR_GRPC_MESSAGE,
|
177
|
+
grpc_slice_from_static_string(error_message));
|
178
|
+
grpc_arg error_arg = grpc_core::MakeLameClientErrorArg(error);
|
179
|
+
grpc_channel_args args = {1, &error_arg};
|
180
|
+
grpc_channel* channel =
|
181
|
+
grpc_channel_create(target, &args, GRPC_CLIENT_LAME_CHANNEL, nullptr);
|
182
|
+
GRPC_ERROR_UNREF(error);
|
164
183
|
return channel;
|
165
184
|
}
|