grpc 1.28.0 → 1.30.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of grpc might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/Makefile +7694 -11190
- data/include/grpc/grpc.h +2 -2
- data/include/grpc/grpc_security.h +22 -9
- data/include/grpc/grpc_security_constants.h +1 -0
- data/include/grpc/impl/codegen/grpc_types.h +19 -21
- data/include/grpc/impl/codegen/port_platform.h +6 -2
- data/include/grpc/module.modulemap +24 -39
- data/src/core/ext/filters/client_channel/backend_metric.cc +7 -4
- data/src/core/ext/filters/client_channel/client_channel.cc +203 -236
- data/src/core/ext/filters/client_channel/client_channel_plugin.cc +3 -2
- data/src/core/ext/filters/client_channel/health/health_check_client.cc +7 -22
- data/src/core/ext/filters/client_channel/health/health_check_client.h +3 -3
- data/src/core/ext/filters/client_channel/http_proxy.cc +17 -10
- data/src/core/ext/filters/client_channel/lb_policy.cc +19 -18
- data/src/core/ext/filters/client_channel/lb_policy.h +42 -33
- data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +83 -0
- data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +99 -0
- data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +10 -4
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +240 -301
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +89 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +40 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +11 -9
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +3 -2
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +871 -0
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +5 -11
- data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +734 -0
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +84 -37
- data/src/core/ext/filters/client_channel/lb_policy/xds/eds.cc +938 -0
- data/src/core/ext/filters/client_channel/lb_policy/xds/lrs.cc +528 -0
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +1 -2
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_routing.cc +834 -0
- data/src/core/ext/filters/client_channel/lb_policy_registry.cc +6 -2
- data/src/core/ext/filters/client_channel/local_subchannel_pool.h +2 -1
- data/src/core/ext/filters/client_channel/parse_address.cc +22 -21
- data/src/core/ext/filters/client_channel/resolver.cc +5 -8
- data/src/core/ext/filters/client_channel/resolver.h +12 -14
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +73 -59
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc +35 -35
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +8 -7
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +16 -20
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +4 -4
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +72 -117
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +184 -133
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +5 -3
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc +7 -4
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +40 -43
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +93 -102
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +0 -4
- data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +2 -2
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +32 -5
- data/src/core/ext/filters/client_channel/resolver_factory.h +2 -2
- data/src/core/ext/filters/client_channel/resolver_registry.cc +6 -3
- data/src/core/ext/filters/client_channel/resolver_registry.h +8 -8
- data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +16 -16
- data/src/core/ext/filters/client_channel/resolver_result_parsing.h +19 -16
- data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +20 -31
- data/src/core/ext/filters/client_channel/resolving_lb_policy.h +4 -3
- data/src/core/ext/filters/client_channel/server_address.cc +6 -9
- data/src/core/ext/filters/client_channel/server_address.h +6 -12
- data/src/core/ext/filters/client_channel/service_config.cc +104 -144
- data/src/core/ext/filters/client_channel/service_config.h +28 -98
- data/src/core/ext/filters/client_channel/service_config_call_data.h +68 -0
- data/src/core/ext/filters/client_channel/service_config_parser.cc +87 -0
- data/src/core/ext/filters/client_channel/service_config_parser.h +89 -0
- data/src/core/ext/filters/client_channel/subchannel.cc +54 -24
- data/src/core/ext/filters/client_channel/subchannel.h +35 -11
- data/src/core/ext/filters/client_channel/xds/xds_api.cc +348 -221
- data/src/core/ext/filters/client_channel/xds/xds_api.h +37 -37
- data/src/core/ext/filters/client_channel/xds/xds_bootstrap.cc +44 -49
- data/src/core/ext/filters/client_channel/xds/xds_bootstrap.h +4 -3
- data/src/core/ext/filters/client_channel/xds/xds_channel_secure.cc +4 -2
- data/src/core/ext/filters/client_channel/xds/xds_client.cc +532 -339
- data/src/core/ext/filters/client_channel/xds/xds_client.h +57 -22
- data/src/core/ext/filters/client_channel/xds/xds_client_stats.cc +11 -12
- data/src/core/ext/filters/client_channel/xds/xds_client_stats.h +31 -19
- data/src/core/ext/filters/http/client/http_client_filter.cc +23 -28
- data/src/core/ext/filters/http/client_authority_filter.cc +4 -4
- data/src/core/ext/filters/http/http_filters_plugin.cc +27 -12
- data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +258 -221
- data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +358 -0
- data/src/core/ext/filters/http/message_compress/message_decompress_filter.h +29 -0
- data/src/core/ext/filters/message_size/message_size_filter.cc +7 -10
- data/src/core/ext/filters/message_size/message_size_filter.h +4 -4
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +4 -4
- data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +4 -6
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +23 -22
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +1 -0
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +3 -3
- data/src/core/ext/transport/chttp2/transport/frame_goaway.h +2 -3
- data/src/core/ext/transport/chttp2/transport/frame_ping.h +2 -3
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +2 -3
- data/src/core/ext/transport/chttp2/transport/frame_settings.h +2 -3
- data/src/core/ext/transport/chttp2/transport/frame_window_update.h +2 -3
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +29 -16
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +2 -3
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +2 -3
- data/src/core/ext/transport/chttp2/transport/hpack_table.h +2 -2
- data/src/core/ext/transport/chttp2/transport/http2_settings.h +4 -5
- data/src/core/ext/transport/chttp2/transport/huffsyms.h +2 -3
- data/src/core/ext/transport/chttp2/transport/internal.h +14 -21
- data/src/core/ext/transport/chttp2/transport/stream_map.h +2 -3
- data/src/core/ext/transport/chttp2/transport/writing.cc +15 -8
- data/src/core/ext/transport/inproc/inproc_transport.cc +19 -0
- data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.c +4 -229
- data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.h +5 -875
- data/src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.c +114 -0
- data/src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.h +418 -0
- data/src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.c +72 -0
- data/src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.h +197 -0
- data/src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.c +105 -0
- data/src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.h +378 -0
- data/src/core/ext/upb-generated/envoy/api/v2/cds.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.c +21 -8
- data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.h +43 -7
- data/src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/api/v2/core/address.upb.c +2 -1
- data/src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.c +35 -0
- data/src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.h +78 -0
- data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.c +47 -26
- data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.h +115 -65
- data/src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.c +34 -0
- data/src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.h +72 -0
- data/src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.c +2 -1
- data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.c +24 -20
- data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.h +28 -13
- data/src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.c +38 -18
- data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.h +88 -6
- data/src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.c +34 -0
- data/src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.h +89 -0
- data/src/core/ext/upb-generated/envoy/api/v2/discovery.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/api/v2/eds.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.c +9 -6
- data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.h +12 -4
- data/src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/api/v2/lds.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/api/v2/listener.upb.c +15 -10
- data/src/core/ext/upb-generated/envoy/api/v2/listener.upb.h +16 -0
- data/src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.c +2 -1
- data/src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/api/v2/rds.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/api/v2/route.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/api/v2/route/route.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.c +63 -41
- data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.h +173 -77
- data/src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/api/v2/srds.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.c +48 -28
- data/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.h +90 -30
- data/src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.c +51 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.h +125 -0
- data/src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.c +4 -2
- data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.h +4 -0
- data/src/core/ext/upb-generated/envoy/type/http.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/regex.upb.c +16 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/regex.upb.h +36 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/string.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/type/percent.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/type/range.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/type/semantic_version.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.c +1 -0
- data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +9 -8
- data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +30 -24
- data/src/core/ext/upb-generated/udpa/annotations/status.upb.c +28 -0
- data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +65 -0
- data/src/core/ext/upb-generated/validate/validate.upb.c +21 -20
- data/src/core/ext/upb-generated/validate/validate.upb.h +69 -63
- data/src/core/lib/channel/channel_args.cc +15 -14
- data/src/core/lib/channel/channel_args.h +3 -1
- data/src/core/lib/channel/channel_stack.h +20 -13
- data/src/core/lib/channel/channelz.cc +5 -6
- data/src/core/lib/channel/channelz.h +3 -2
- data/src/core/lib/channel/channelz_registry.cc +5 -3
- data/src/core/lib/channel/connected_channel.cc +7 -5
- data/src/core/lib/channel/context.h +1 -1
- data/src/core/lib/channel/handshaker.cc +11 -13
- data/src/core/lib/channel/handshaker.h +4 -2
- data/src/core/lib/channel/handshaker_registry.cc +5 -17
- data/src/core/lib/channel/status_util.cc +2 -3
- data/src/core/lib/compression/message_compress.cc +5 -1
- data/src/core/lib/debug/stats.cc +21 -27
- data/src/core/lib/debug/stats.h +3 -1
- data/src/core/lib/gpr/spinlock.h +2 -3
- data/src/core/lib/gpr/string.cc +2 -26
- data/src/core/lib/gpr/string.h +0 -16
- data/src/core/lib/gpr/sync_abseil.cc +2 -0
- data/src/core/lib/gpr/time.cc +4 -0
- data/src/core/lib/gpr/time_posix.cc +1 -1
- data/src/core/lib/gprpp/atomic.h +6 -6
- data/src/core/lib/gprpp/fork.cc +1 -1
- data/src/core/lib/gprpp/host_port.cc +29 -35
- data/src/core/lib/gprpp/host_port.h +14 -17
- data/src/core/lib/gprpp/map.h +5 -11
- data/src/core/lib/gprpp/ref_counted_ptr.h +5 -0
- data/src/core/lib/http/format_request.cc +46 -65
- data/src/core/lib/http/httpcli.cc +2 -3
- data/src/core/lib/http/httpcli.h +2 -3
- data/src/core/lib/http/httpcli_security_connector.cc +5 -5
- data/src/core/lib/http/parser.h +2 -3
- data/src/core/lib/iomgr/buffer_list.h +22 -21
- data/src/core/lib/iomgr/call_combiner.h +3 -2
- data/src/core/lib/iomgr/cfstream_handle.cc +3 -2
- data/src/core/lib/iomgr/closure.h +2 -3
- data/src/core/lib/iomgr/dualstack_socket_posix.cc +47 -0
- data/src/core/lib/iomgr/endpoint_cfstream.cc +2 -3
- data/src/core/lib/iomgr/endpoint_pair.h +2 -3
- data/src/core/lib/iomgr/error.cc +6 -9
- data/src/core/lib/iomgr/error.h +0 -1
- data/src/core/lib/iomgr/ev_apple.cc +356 -0
- data/src/core/lib/iomgr/ev_apple.h +43 -0
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +20 -23
- data/src/core/lib/iomgr/ev_epollex_linux.cc +2 -3
- data/src/core/lib/iomgr/ev_poll_posix.cc +3 -3
- data/src/core/lib/iomgr/ev_posix.cc +2 -3
- data/src/core/lib/iomgr/exec_ctx.h +14 -2
- data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +84 -20
- data/src/core/lib/iomgr/pollset_set_custom.cc +10 -10
- data/src/core/lib/{gprpp/optional.h → iomgr/pollset_uv.h} +11 -12
- data/src/core/lib/iomgr/port.h +1 -0
- data/src/core/lib/iomgr/python_util.h +46 -0
- data/src/core/lib/iomgr/resolve_address.h +4 -6
- data/src/core/lib/iomgr/resolve_address_custom.cc +29 -39
- data/src/core/lib/iomgr/resolve_address_custom.h +4 -2
- data/src/core/lib/iomgr/resolve_address_posix.cc +10 -11
- data/src/core/lib/iomgr/resolve_address_windows.cc +8 -17
- data/src/core/lib/iomgr/resource_quota.cc +4 -6
- data/src/core/lib/iomgr/sockaddr_utils.cc +23 -29
- data/src/core/lib/iomgr/sockaddr_utils.h +9 -14
- data/src/core/lib/iomgr/socket_factory_posix.h +2 -3
- data/src/core/lib/iomgr/socket_mutator.h +2 -3
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +7 -26
- data/src/core/lib/iomgr/socket_utils_posix.h +3 -0
- data/src/core/lib/iomgr/tcp_client_cfstream.cc +5 -7
- data/src/core/lib/iomgr/tcp_client_posix.cc +8 -5
- data/src/core/lib/iomgr/tcp_client_windows.cc +2 -3
- data/src/core/lib/iomgr/tcp_custom.cc +2 -3
- data/src/core/lib/iomgr/tcp_server_custom.cc +5 -9
- data/src/core/lib/iomgr/tcp_server_posix.cc +5 -4
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +5 -4
- data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +8 -11
- data/src/core/lib/iomgr/tcp_uv.cc +3 -2
- data/src/core/lib/iomgr/time_averaged_stats.h +2 -3
- data/src/core/lib/iomgr/timer_generic.cc +2 -3
- data/src/core/lib/{gprpp/inlined_vector.h → iomgr/timer_generic.h} +19 -17
- data/src/core/lib/iomgr/timer_heap.h +2 -3
- data/src/core/lib/iomgr/udp_server.cc +9 -14
- data/src/core/lib/json/json.h +3 -2
- data/src/core/lib/json/json_reader.cc +5 -5
- data/src/core/lib/json/json_writer.cc +13 -12
- data/src/core/lib/security/credentials/composite/composite_credentials.cc +12 -0
- data/src/core/lib/security/credentials/composite/composite_credentials.h +6 -3
- data/src/core/lib/security/credentials/credentials.cc +0 -84
- data/src/core/lib/security/credentials/credentials.h +8 -59
- data/src/core/lib/security/credentials/fake/fake_credentials.h +4 -0
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +3 -8
- data/src/core/lib/security/credentials/iam/iam_credentials.cc +8 -6
- data/src/core/lib/security/credentials/iam/iam_credentials.h +4 -0
- data/src/core/lib/security/credentials/jwt/json_token.cc +1 -1
- data/src/core/lib/security/credentials/jwt/json_token.h +2 -5
- data/src/core/lib/security/credentials/jwt/jwt_credentials.h +12 -0
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +8 -15
- data/src/core/lib/security/credentials/jwt/jwt_verifier.h +2 -3
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +55 -27
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +9 -3
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +13 -0
- data/src/core/lib/security/credentials/plugin/plugin_credentials.h +2 -0
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +23 -13
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +38 -11
- data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +21 -6
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +7 -7
- data/src/core/lib/security/security_connector/load_system_roots_linux.cc +3 -2
- data/src/core/lib/security/security_connector/local/local_security_connector.cc +1 -1
- data/src/core/lib/security/security_connector/security_connector.h +1 -1
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +20 -25
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +4 -6
- data/src/core/lib/security/security_connector/ssl_utils.cc +59 -12
- data/src/core/lib/security/security_connector/ssl_utils.h +12 -10
- data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +77 -51
- data/src/core/lib/security/security_connector/tls/tls_security_connector.h +27 -5
- data/src/core/lib/security/transport/client_auth_filter.cc +1 -2
- data/src/core/lib/slice/slice_intern.cc +2 -3
- data/src/core/lib/slice/slice_internal.h +14 -0
- data/src/core/lib/slice/slice_utils.h +9 -0
- data/src/core/lib/surface/byte_buffer_reader.cc +2 -47
- data/src/core/lib/surface/call.cc +2 -3
- data/src/core/lib/surface/call_log_batch.cc +50 -58
- data/src/core/lib/surface/channel.cc +53 -31
- data/src/core/lib/surface/channel.h +35 -4
- data/src/core/lib/surface/channel_ping.cc +2 -3
- data/src/core/lib/surface/completion_queue.cc +33 -33
- data/src/core/lib/surface/event_string.cc +18 -25
- data/src/core/lib/surface/event_string.h +3 -1
- data/src/core/lib/surface/init_secure.cc +1 -4
- data/src/core/lib/surface/server.cc +570 -369
- data/src/core/lib/surface/server.h +32 -0
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/byte_stream.h +7 -2
- data/src/core/lib/transport/connectivity_state.cc +7 -6
- data/src/core/lib/transport/connectivity_state.h +5 -3
- data/src/core/lib/transport/metadata.cc +3 -3
- data/src/core/lib/transport/metadata_batch.h +2 -3
- data/src/core/lib/transport/static_metadata.h +1 -1
- data/src/core/lib/transport/status_conversion.cc +6 -14
- data/src/core/lib/transport/transport.cc +2 -3
- data/src/core/lib/transport/transport.h +3 -2
- data/src/core/lib/transport/transport_op_string.cc +61 -102
- data/src/core/lib/uri/uri_parser.h +2 -3
- data/src/core/plugin_registry/grpc_plugin_registry.cc +20 -4
- data/src/core/tsi/alts/crypt/aes_gcm.cc +0 -2
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +8 -1
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +8 -4
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +32 -2
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +9 -1
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.h +2 -3
- data/src/core/tsi/fake_transport_security.cc +10 -15
- data/src/core/tsi/ssl/session_cache/ssl_session.h +0 -2
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +0 -2
- data/src/core/tsi/ssl_transport_security.cc +52 -39
- data/src/core/tsi/ssl_transport_security.h +8 -8
- data/src/core/tsi/ssl_types.h +0 -2
- data/src/core/tsi/transport_security.h +6 -9
- data/src/core/tsi/transport_security_grpc.h +2 -3
- data/src/core/tsi/transport_security_interface.h +3 -3
- data/src/ruby/ext/grpc/rb_call.c +9 -1
- data/src/ruby/lib/grpc/errors.rb +103 -42
- data/src/ruby/lib/grpc/generic/active_call.rb +2 -3
- data/src/ruby/lib/grpc/generic/interceptors.rb +4 -4
- data/src/ruby/lib/grpc/generic/rpc_server.rb +9 -10
- data/src/ruby/lib/grpc/generic/service.rb +5 -4
- data/src/ruby/lib/grpc/structs.rb +1 -1
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/pb/generate_proto_ruby.sh +5 -3
- data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +11 -0
- data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +16 -0
- data/src/ruby/spec/debug_message_spec.rb +134 -0
- data/src/ruby/spec/generic/service_spec.rb +2 -0
- data/src/ruby/spec/pb/codegen/grpc/testing/package_options_ruby_style.proto +5 -0
- data/src/ruby/spec/pb/codegen/package_option_spec.rb +2 -0
- data/src/ruby/spec/testdata/ca.pem +18 -13
- data/src/ruby/spec/testdata/client.key +26 -14
- data/src/ruby/spec/testdata/client.pem +18 -12
- data/src/ruby/spec/testdata/server1.key +26 -14
- data/src/ruby/spec/testdata/server1.pem +20 -14
- data/third_party/abseil-cpp/absl/time/civil_time.cc +175 -0
- data/third_party/abseil-cpp/absl/time/civil_time.h +538 -0
- data/third_party/abseil-cpp/absl/time/clock.cc +569 -0
- data/third_party/abseil-cpp/absl/time/clock.h +74 -0
- data/third_party/abseil-cpp/absl/time/duration.cc +922 -0
- data/third_party/abseil-cpp/absl/time/format.cc +153 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time.h +332 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +622 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +384 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/zone_info_source.h +102 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/civil_time_detail.cc +94 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.cc +140 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.h +52 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +922 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.cc +45 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.h +76 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.cc +121 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.h +93 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc +958 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.h +138 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.cc +308 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.h +55 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +187 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_posix.cc +159 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_posix.h +132 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +122 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc +115 -0
- data/third_party/abseil-cpp/absl/time/internal/get_current_time_chrono.inc +31 -0
- data/third_party/abseil-cpp/absl/time/internal/get_current_time_posix.inc +24 -0
- data/third_party/abseil-cpp/absl/time/time.cc +499 -0
- data/third_party/abseil-cpp/absl/time/time.h +1584 -0
- data/third_party/boringssl-with-bazel/err_data.c +329 -297
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/derive_key.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/cpu-arm-linux.c +7 -5
- data/third_party/boringssl-with-bazel/src/crypto/cpu-intel.c +13 -4
- data/third_party/boringssl-with-bazel/src/crypto/crypto.c +11 -0
- data/third_party/boringssl-with-bazel/src/{third_party/fiat → crypto/curve25519}/curve25519.c +18 -26
- data/third_party/boringssl-with-bazel/src/{third_party/fiat → crypto/curve25519}/curve25519_tables.h +13 -21
- data/third_party/boringssl-with-bazel/src/{third_party/fiat → crypto/curve25519}/internal.h +14 -22
- data/third_party/boringssl-with-bazel/src/crypto/curve25519/spake25519.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/dh/dh.c +15 -0
- data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +10 -0
- data/third_party/boringssl-with-bazel/src/crypto/ec_extra/hash_to_curve.c +425 -0
- data/third_party/boringssl-with-bazel/src/crypto/ec_extra/internal.h +78 -0
- data/third_party/boringssl-with-bazel/src/crypto/ecdh_extra/ecdh_extra.c +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/err/err.c +33 -32
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/aes_nohw.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +2 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/exponentiation.c +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +14 -11
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/montgomery.c +8 -8
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/mul.c +30 -154
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digests.c +16 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +289 -117
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +13 -27
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_montgomery.c +96 -55
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/felem.c +25 -7
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +432 -160
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/oct.c +63 -71
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p224-64.c +5 -14
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-x86_64-table.h +9481 -9485
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-x86_64.c +80 -99
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256.c +736 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256_table.h +297 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/scalar.c +90 -11
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple.c +125 -148
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple_mul.c +189 -3
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/wnaf.c +61 -18
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdh/ecdh.c +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +20 -5
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/fork_detect.c +137 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/fork_detect.h +49 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/getrandom_fillin.h +64 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/internal.h +41 -5
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.c +32 -17
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +24 -114
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/blinding.c +4 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/internal.h +1 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +51 -38
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +15 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +44 -35
- data/third_party/boringssl-with-bazel/src/crypto/mem.c +29 -12
- data/third_party/boringssl-with-bazel/src/crypto/obj/obj_dat.h +15 -1
- data/third_party/boringssl-with-bazel/src/crypto/rand_extra/deterministic.c +6 -10
- data/third_party/boringssl-with-bazel/src/crypto/rand_extra/windows.c +16 -0
- data/third_party/boringssl-with-bazel/src/crypto/thread_pthread.c +4 -0
- data/third_party/boringssl-with-bazel/src/crypto/thread_win.c +4 -0
- data/third_party/boringssl-with-bazel/src/crypto/trust_token/internal.h +278 -0
- data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +1474 -0
- data/third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token.c +720 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +16 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +5 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509name.c +4 -3
- data/third_party/boringssl-with-bazel/src/include/openssl/base.h +5 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +9 -4
- data/third_party/boringssl-with-bazel/src/include/openssl/dh.h +20 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/digest.h +1 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/dsa.h +16 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h +6 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/err.h +2 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/nid.h +5 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/rand.h +3 -17
- data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +31 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/sha.h +26 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +172 -77
- data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +1 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +291 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +5 -3
- data/third_party/boringssl-with-bazel/src/include/openssl/x509_vfy.h +1 -0
- data/third_party/boringssl-with-bazel/src/ssl/d1_both.cc +0 -4
- data/third_party/boringssl-with-bazel/src/ssl/d1_lib.cc +3 -3
- data/third_party/boringssl-with-bazel/src/ssl/dtls_method.cc +13 -4
- data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +146 -57
- data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +14 -3
- data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +28 -20
- data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +12 -4
- data/third_party/boringssl-with-bazel/src/ssl/internal.h +64 -47
- data/third_party/boringssl-with-bazel/src/ssl/s3_both.cc +10 -10
- data/third_party/boringssl-with-bazel/src/ssl/s3_lib.cc +2 -2
- data/third_party/boringssl-with-bazel/src/ssl/s3_pkt.cc +21 -21
- data/third_party/boringssl-with-bazel/src/ssl/ssl_asn1.cc +29 -0
- data/third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc +4 -0
- data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +6 -1
- data/third_party/boringssl-with-bazel/src/ssl/ssl_privkey.cc +13 -2
- data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +64 -5
- data/third_party/boringssl-with-bazel/src/ssl/ssl_stat.cc +6 -0
- data/third_party/boringssl-with-bazel/src/ssl/t1_enc.cc +6 -2
- data/third_party/boringssl-with-bazel/src/ssl/t1_lib.cc +47 -53
- data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +1 -1
- data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +98 -27
- data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +23 -75
- data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +50 -20
- data/third_party/boringssl-with-bazel/src/ssl/tls_method.cc +63 -25
- data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_32.h +245 -175
- data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_64.h +135 -75
- data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_32.h +1593 -1672
- data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_64.h +512 -503
- metadata +111 -37
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds.cc +0 -1754
- data/src/core/lib/gprpp/string_view.h +0 -60
- data/src/core/tsi/grpc_shadow_boringssl.h +0 -3311
- data/third_party/boringssl-with-bazel/src/third_party/fiat/p256.c +0 -1063
@@ -23,12 +23,14 @@
|
|
23
23
|
|
24
24
|
#include <stdbool.h>
|
25
25
|
|
26
|
+
#include "absl/strings/str_split.h"
|
27
|
+
#include "absl/strings/string_view.h"
|
28
|
+
|
26
29
|
#include <grpc/grpc_security.h>
|
27
30
|
#include <grpc/slice_buffer.h>
|
28
31
|
|
29
32
|
#include "src/core/lib/gprpp/global_config.h"
|
30
33
|
#include "src/core/lib/gprpp/ref_counted_ptr.h"
|
31
|
-
#include "src/core/lib/gprpp/string_view.h"
|
32
34
|
#include "src/core/lib/iomgr/error.h"
|
33
35
|
#include "src/core/lib/security/security_connector/security_connector.h"
|
34
36
|
#include "src/core/lib/security/security_connector/ssl_utils_config.h"
|
@@ -45,17 +47,17 @@
|
|
45
47
|
grpc_error* grpc_ssl_check_alpn(const tsi_peer* peer);
|
46
48
|
|
47
49
|
/* Check peer name information returned from SSL handshakes. */
|
48
|
-
grpc_error* grpc_ssl_check_peer_name(
|
50
|
+
grpc_error* grpc_ssl_check_peer_name(absl::string_view peer_name,
|
49
51
|
const tsi_peer* peer);
|
50
52
|
/* Compare targer_name information extracted from SSL security connectors. */
|
51
|
-
int grpc_ssl_cmp_target_name(
|
52
|
-
|
53
|
-
|
54
|
-
|
53
|
+
int grpc_ssl_cmp_target_name(absl::string_view target_name,
|
54
|
+
absl::string_view other_target_name,
|
55
|
+
absl::string_view overridden_target_name,
|
56
|
+
absl::string_view other_overridden_target_name);
|
55
57
|
/* Check the host that will be set for a call is acceptable.*/
|
56
|
-
bool grpc_ssl_check_call_host(
|
57
|
-
|
58
|
-
|
58
|
+
bool grpc_ssl_check_call_host(absl::string_view host,
|
59
|
+
absl::string_view target_name,
|
60
|
+
absl::string_view overridden_target_name,
|
59
61
|
grpc_auth_context* auth_context,
|
60
62
|
grpc_error** error);
|
61
63
|
/* Return HTTP2-compliant cipher suites that gRPC accepts by default. */
|
@@ -101,7 +103,7 @@ tsi_peer grpc_shallow_peer_from_ssl_auth_context(
|
|
101
103
|
const grpc_auth_context* auth_context);
|
102
104
|
void grpc_shallow_peer_destruct(tsi_peer* peer);
|
103
105
|
int grpc_ssl_host_matches_name(const tsi_peer* peer,
|
104
|
-
|
106
|
+
absl::string_view peer_name);
|
105
107
|
|
106
108
|
/* --- Default SSL Root Store. --- */
|
107
109
|
namespace grpc_core {
|
@@ -23,6 +23,8 @@
|
|
23
23
|
#include <stdbool.h>
|
24
24
|
#include <string.h>
|
25
25
|
|
26
|
+
#include "absl/strings/string_view.h"
|
27
|
+
|
26
28
|
#include <grpc/grpc.h>
|
27
29
|
#include <grpc/support/alloc.h>
|
28
30
|
#include <grpc/support/log.h>
|
@@ -62,54 +64,67 @@ tsi_ssl_pem_key_cert_pair* ConvertToTsiPemKeyCertPair(
|
|
62
64
|
|
63
65
|
} // namespace
|
64
66
|
|
65
|
-
/** -- Util function to fetch TLS server/channel credentials. -- */
|
66
67
|
grpc_status_code TlsFetchKeyMaterials(
|
67
68
|
const grpc_core::RefCountedPtr<grpc_tls_key_materials_config>&
|
68
69
|
key_materials_config,
|
69
|
-
const grpc_tls_credentials_options& options, bool
|
70
|
-
grpc_ssl_certificate_config_reload_status*
|
70
|
+
const grpc_tls_credentials_options& options, bool is_server,
|
71
|
+
grpc_ssl_certificate_config_reload_status* status) {
|
71
72
|
GPR_ASSERT(key_materials_config != nullptr);
|
73
|
+
GPR_ASSERT(status != nullptr);
|
72
74
|
bool is_key_materials_empty =
|
73
75
|
key_materials_config->pem_key_cert_pair_list().empty();
|
74
|
-
|
75
|
-
|
76
|
+
grpc_tls_credential_reload_config* credential_reload_config =
|
77
|
+
options.credential_reload_config();
|
78
|
+
/** If there are no key materials and no credential reload config and the
|
79
|
+
* caller is a server, then return an error. We do not require that a client
|
80
|
+
* always provision certificates. **/
|
81
|
+
if (credential_reload_config == nullptr && is_key_materials_empty &&
|
82
|
+
is_server) {
|
76
83
|
gpr_log(GPR_ERROR,
|
77
84
|
"Either credential reload config or key materials should be "
|
78
85
|
"provisioned.");
|
79
86
|
return GRPC_STATUS_FAILED_PRECONDITION;
|
80
87
|
}
|
81
|
-
grpc_status_code
|
82
|
-
|
83
|
-
if (
|
88
|
+
grpc_status_code reload_status = GRPC_STATUS_OK;
|
89
|
+
/** Use |credential_reload_config| to update |key_materials_config|. **/
|
90
|
+
if (credential_reload_config != nullptr) {
|
84
91
|
grpc_tls_credential_reload_arg* arg = new grpc_tls_credential_reload_arg();
|
85
92
|
arg->key_materials_config = key_materials_config.get();
|
86
|
-
|
93
|
+
arg->error_details = new grpc_tls_error_details();
|
94
|
+
int result = credential_reload_config->Schedule(arg);
|
87
95
|
if (result) {
|
88
|
-
|
96
|
+
/** Credential reloading is performed async. This is not yet supported.
|
97
|
+
* **/
|
89
98
|
gpr_log(GPR_ERROR, "Async credential reload is unsupported now.");
|
90
|
-
status =
|
99
|
+
*status = GRPC_SSL_CERTIFICATE_CONFIG_RELOAD_UNCHANGED;
|
100
|
+
reload_status =
|
91
101
|
is_key_materials_empty ? GRPC_STATUS_UNIMPLEMENTED : GRPC_STATUS_OK;
|
92
102
|
} else {
|
93
|
-
|
94
|
-
*
|
103
|
+
/** Credential reloading is performed sync. **/
|
104
|
+
*status = arg->status;
|
95
105
|
if (arg->status == GRPC_SSL_CERTIFICATE_CONFIG_RELOAD_UNCHANGED) {
|
96
106
|
/* Key materials is not empty. */
|
97
107
|
gpr_log(GPR_DEBUG, "Credential does not change after reload.");
|
98
108
|
} else if (arg->status == GRPC_SSL_CERTIFICATE_CONFIG_RELOAD_FAIL) {
|
99
109
|
gpr_log(GPR_ERROR, "Credential reload failed with an error:");
|
100
110
|
if (arg->error_details != nullptr) {
|
101
|
-
gpr_log(GPR_ERROR, "%s", arg->error_details);
|
111
|
+
gpr_log(GPR_ERROR, "%s", arg->error_details->error_details().c_str());
|
102
112
|
}
|
103
|
-
|
113
|
+
reload_status =
|
114
|
+
is_key_materials_empty ? GRPC_STATUS_INTERNAL : GRPC_STATUS_OK;
|
104
115
|
}
|
105
116
|
}
|
106
|
-
|
117
|
+
delete arg->error_details;
|
118
|
+
/** If the credential reload config was constructed via a wrapped language,
|
119
|
+
* then |arg->context| and |arg->destroy_context| will not be nullptr. In
|
120
|
+
* this case, we must destroy |arg->context|, which stores the wrapped
|
121
|
+
* language-version of the credential reload arg. **/
|
107
122
|
if (arg->destroy_context != nullptr) {
|
108
123
|
arg->destroy_context(arg->context);
|
109
124
|
}
|
110
125
|
delete arg;
|
111
126
|
}
|
112
|
-
return
|
127
|
+
return reload_status;
|
113
128
|
}
|
114
129
|
|
115
130
|
grpc_error* TlsCheckHostName(const char* peer_name, const tsi_peer* peer) {
|
@@ -131,15 +146,14 @@ TlsChannelSecurityConnector::TlsChannelSecurityConnector(
|
|
131
146
|
: grpc_channel_security_connector(GRPC_SSL_URL_SCHEME,
|
132
147
|
std::move(channel_creds),
|
133
148
|
std::move(request_metadata_creds)),
|
134
|
-
overridden_target_name_(
|
135
|
-
|
136
|
-
: gpr_strdup(overridden_target_name)) {
|
149
|
+
overridden_target_name_(
|
150
|
+
overridden_target_name == nullptr ? "" : overridden_target_name) {
|
137
151
|
key_materials_config_ = grpc_tls_key_materials_config_create()->Ref();
|
138
152
|
check_arg_ = ServerAuthorizationCheckArgCreate(this);
|
139
|
-
|
140
|
-
|
153
|
+
absl::string_view host;
|
154
|
+
absl::string_view port;
|
141
155
|
grpc_core::SplitHostPort(target_name, &host, &port);
|
142
|
-
target_name_ =
|
156
|
+
target_name_ = std::string(host);
|
143
157
|
}
|
144
158
|
|
145
159
|
TlsChannelSecurityConnector::~TlsChannelSecurityConnector() {
|
@@ -163,8 +177,8 @@ void TlsChannelSecurityConnector::add_handshakers(
|
|
163
177
|
tsi_handshaker* tsi_hs = nullptr;
|
164
178
|
tsi_result result = tsi_ssl_client_handshaker_factory_create_handshaker(
|
165
179
|
client_handshaker_factory_,
|
166
|
-
overridden_target_name_
|
167
|
-
|
180
|
+
overridden_target_name_.empty() ? target_name_.c_str()
|
181
|
+
: overridden_target_name_.c_str(),
|
168
182
|
&tsi_hs);
|
169
183
|
if (result != TSI_OK) {
|
170
184
|
gpr_log(GPR_ERROR, "Handshaker creation failed with error %s.",
|
@@ -179,9 +193,9 @@ void TlsChannelSecurityConnector::check_peer(
|
|
179
193
|
tsi_peer peer, grpc_endpoint* /*ep*/,
|
180
194
|
grpc_core::RefCountedPtr<grpc_auth_context>* auth_context,
|
181
195
|
grpc_closure* on_peer_checked) {
|
182
|
-
const char* target_name = overridden_target_name_
|
183
|
-
?
|
184
|
-
:
|
196
|
+
const char* target_name = overridden_target_name_.empty()
|
197
|
+
? target_name_.c_str()
|
198
|
+
: overridden_target_name_.c_str();
|
185
199
|
grpc_error* error = grpc_ssl_check_alpn(&peer);
|
186
200
|
if (error != GRPC_ERROR_NONE) {
|
187
201
|
grpc_core::ExecCtx::Run(DEBUG_LOCATION, on_peer_checked, error);
|
@@ -258,16 +272,16 @@ int TlsChannelSecurityConnector::cmp(
|
|
258
272
|
if (c != 0) {
|
259
273
|
return c;
|
260
274
|
}
|
261
|
-
return grpc_ssl_cmp_target_name(
|
262
|
-
|
263
|
-
|
275
|
+
return grpc_ssl_cmp_target_name(
|
276
|
+
target_name_.c_str(), other->target_name_.c_str(),
|
277
|
+
overridden_target_name_.c_str(), other->overridden_target_name_.c_str());
|
264
278
|
}
|
265
279
|
|
266
280
|
bool TlsChannelSecurityConnector::check_call_host(
|
267
|
-
|
281
|
+
absl::string_view host, grpc_auth_context* auth_context,
|
268
282
|
grpc_closure* on_call_host_checked, grpc_error** error) {
|
269
|
-
return grpc_ssl_check_call_host(host, target_name_.
|
270
|
-
overridden_target_name_.
|
283
|
+
return grpc_ssl_check_call_host(host, target_name_.c_str(),
|
284
|
+
overridden_target_name_.c_str(), auth_context,
|
271
285
|
error);
|
272
286
|
}
|
273
287
|
|
@@ -334,17 +348,18 @@ grpc_security_status TlsChannelSecurityConnector::InitializeHandshakerFactory(
|
|
334
348
|
static_cast<const TlsCredentials*>(channel_creds());
|
335
349
|
grpc_tls_key_materials_config* key_materials_config =
|
336
350
|
creds->options().key_materials_config();
|
337
|
-
|
351
|
+
// key_materials_config_->set_key_materials will handle the copying of the key
|
352
|
+
// materials users provided
|
338
353
|
if (key_materials_config != nullptr) {
|
339
|
-
|
340
|
-
key_materials_config->
|
341
|
-
|
342
|
-
gpr_strdup(key_materials_config->pem_root_certs()));
|
343
|
-
key_materials_config_->set_key_materials(std::move(pem_root_certs),
|
344
|
-
std::move(cert_pair_list));
|
354
|
+
key_materials_config_->set_key_materials(
|
355
|
+
key_materials_config->pem_root_certs(),
|
356
|
+
key_materials_config->pem_key_cert_pair_list());
|
345
357
|
}
|
346
358
|
grpc_ssl_certificate_config_reload_status reload_status =
|
347
359
|
GRPC_SSL_CERTIFICATE_CONFIG_RELOAD_UNCHANGED;
|
360
|
+
/** If |creds->options()| has a credential reload config, then the call to
|
361
|
+
* |TlsFetchKeyMaterials| will use it to update the root cert and
|
362
|
+
* pem-key-cert-pair list stored in |key_materials_config_|. **/
|
348
363
|
if (TlsFetchKeyMaterials(key_materials_config_, creds->options(), false,
|
349
364
|
&reload_status) != GRPC_STATUS_OK) {
|
350
365
|
/* Raise an error if key materials are not populated. */
|
@@ -359,6 +374,9 @@ grpc_security_status TlsChannelSecurityConnector::RefreshHandshakerFactory() {
|
|
359
374
|
static_cast<const TlsCredentials*>(channel_creds());
|
360
375
|
grpc_ssl_certificate_config_reload_status reload_status =
|
361
376
|
GRPC_SSL_CERTIFICATE_CONFIG_RELOAD_UNCHANGED;
|
377
|
+
/** If |creds->options()| has a credential reload config, then the call to
|
378
|
+
* |TlsFetchKeyMaterials| will use it to update the root cert and
|
379
|
+
* pem-key-cert-pair list stored in |key_materials_config_|. **/
|
362
380
|
if (TlsFetchKeyMaterials(key_materials_config_, creds->options(), false,
|
363
381
|
&reload_status) != GRPC_STATUS_OK) {
|
364
382
|
return GRPC_SECURITY_ERROR;
|
@@ -390,14 +408,14 @@ grpc_error* TlsChannelSecurityConnector::ProcessServerAuthorizationCheckResult(
|
|
390
408
|
gpr_asprintf(&msg,
|
391
409
|
"Server authorization check is cancelled by the caller with "
|
392
410
|
"error: %s",
|
393
|
-
arg->error_details);
|
411
|
+
arg->error_details->error_details().c_str());
|
394
412
|
error = GRPC_ERROR_CREATE_FROM_COPIED_STRING(msg);
|
395
413
|
} else if (arg->status == GRPC_STATUS_OK) {
|
396
414
|
/* Server authorization check completed successfully but returned check
|
397
415
|
* failure. */
|
398
416
|
if (!arg->success) {
|
399
417
|
gpr_asprintf(&msg, "Server authorization check failed with error: %s",
|
400
|
-
arg->error_details);
|
418
|
+
arg->error_details->error_details().c_str());
|
401
419
|
error = GRPC_ERROR_CREATE_FROM_COPIED_STRING(msg);
|
402
420
|
}
|
403
421
|
/* Server authorization check did not complete correctly. */
|
@@ -405,7 +423,7 @@ grpc_error* TlsChannelSecurityConnector::ProcessServerAuthorizationCheckResult(
|
|
405
423
|
gpr_asprintf(
|
406
424
|
&msg,
|
407
425
|
"Server authorization check did not finish correctly with error: %s",
|
408
|
-
arg->error_details);
|
426
|
+
arg->error_details->error_details().c_str());
|
409
427
|
error = GRPC_ERROR_CREATE_FROM_COPIED_STRING(msg);
|
410
428
|
}
|
411
429
|
gpr_free(msg);
|
@@ -417,6 +435,7 @@ TlsChannelSecurityConnector::ServerAuthorizationCheckArgCreate(
|
|
417
435
|
void* user_data) {
|
418
436
|
grpc_tls_server_authorization_check_arg* arg =
|
419
437
|
new grpc_tls_server_authorization_check_arg();
|
438
|
+
arg->error_details = new grpc_tls_error_details();
|
420
439
|
arg->cb = ServerAuthorizationCheckDone;
|
421
440
|
arg->cb_user_data = user_data;
|
422
441
|
arg->status = GRPC_STATUS_OK;
|
@@ -431,7 +450,7 @@ void TlsChannelSecurityConnector::ServerAuthorizationCheckArgDestroy(
|
|
431
450
|
gpr_free((void*)arg->target_name);
|
432
451
|
gpr_free((void*)arg->peer_cert);
|
433
452
|
if (arg->peer_cert_full_chain) gpr_free((void*)arg->peer_cert_full_chain);
|
434
|
-
|
453
|
+
delete arg->error_details;
|
435
454
|
if (arg->destroy_context != nullptr) {
|
436
455
|
arg->destroy_context(arg->context);
|
437
456
|
}
|
@@ -539,15 +558,17 @@ grpc_security_status TlsServerSecurityConnector::InitializeHandshakerFactory() {
|
|
539
558
|
grpc_tls_key_materials_config* key_materials_config =
|
540
559
|
creds->options().key_materials_config();
|
541
560
|
if (key_materials_config != nullptr) {
|
542
|
-
|
543
|
-
key_materials_config->
|
544
|
-
|
545
|
-
gpr_strdup(key_materials_config->pem_root_certs()));
|
546
|
-
key_materials_config_->set_key_materials(std::move(pem_root_certs),
|
547
|
-
std::move(cert_pair_list));
|
561
|
+
key_materials_config_->set_key_materials(
|
562
|
+
key_materials_config->pem_root_certs(),
|
563
|
+
key_materials_config->pem_key_cert_pair_list());
|
548
564
|
}
|
549
565
|
grpc_ssl_certificate_config_reload_status reload_status =
|
550
566
|
GRPC_SSL_CERTIFICATE_CONFIG_RELOAD_UNCHANGED;
|
567
|
+
/** If |creds->options()| has a credential reload config, then the call to
|
568
|
+
* |TlsFetchKeyMaterials| will use it to update the root cert and
|
569
|
+
* pem-key-cert-pair list stored in |key_materials_config_|. Otherwise, it
|
570
|
+
* will return |GRPC_STATUS_OK| if |key_materials_config_| already has
|
571
|
+
* credentials, and an error code if not. **/
|
551
572
|
if (TlsFetchKeyMaterials(key_materials_config_, creds->options(), true,
|
552
573
|
&reload_status) != GRPC_STATUS_OK) {
|
553
574
|
/* Raise an error if key materials are not populated. */
|
@@ -562,6 +583,11 @@ grpc_security_status TlsServerSecurityConnector::RefreshHandshakerFactory() {
|
|
562
583
|
static_cast<const TlsServerCredentials*>(server_creds());
|
563
584
|
grpc_ssl_certificate_config_reload_status reload_status =
|
564
585
|
GRPC_SSL_CERTIFICATE_CONFIG_RELOAD_UNCHANGED;
|
586
|
+
/** If |creds->options()| has a credential reload config, then the call to
|
587
|
+
* |TlsFetchKeyMaterials| will use it to update the root cert and
|
588
|
+
* pem-key-cert-pair list stored in |key_materials_config_|. Otherwise, it
|
589
|
+
* will return |GRPC_STATUS_OK| if |key_materials_config_| already has
|
590
|
+
* credentials, and an error code if not. **/
|
565
591
|
if (TlsFetchKeyMaterials(key_materials_config_, creds->options(), true,
|
566
592
|
&reload_status) != GRPC_STATUS_OK) {
|
567
593
|
return GRPC_SECURITY_ERROR;
|
@@ -57,8 +57,7 @@ class TlsChannelSecurityConnector final
|
|
57
57
|
|
58
58
|
int cmp(const grpc_security_connector* other_sc) const override;
|
59
59
|
|
60
|
-
bool check_call_host(
|
61
|
-
grpc_auth_context* auth_context,
|
60
|
+
bool check_call_host(absl::string_view host, grpc_auth_context* auth_context,
|
62
61
|
grpc_closure* on_call_host_checked,
|
63
62
|
grpc_error** error) override;
|
64
63
|
|
@@ -98,8 +97,8 @@ class TlsChannelSecurityConnector final
|
|
98
97
|
|
99
98
|
grpc_core::Mutex mu_;
|
100
99
|
grpc_closure* on_peer_checked_;
|
101
|
-
|
102
|
-
|
100
|
+
std::string target_name_;
|
101
|
+
std::string overridden_target_name_;
|
103
102
|
tsi_ssl_client_handshaker_factory* client_handshaker_factory_ = nullptr;
|
104
103
|
grpc_tls_server_authorization_check_arg* check_arg_;
|
105
104
|
grpc_core::RefCountedPtr<grpc_tls_key_materials_config> key_materials_config_;
|
@@ -145,10 +144,33 @@ class TlsServerSecurityConnector final : public grpc_server_security_connector {
|
|
145
144
|
};
|
146
145
|
|
147
146
|
// ---- Functions below are exposed for testing only -----------------------
|
147
|
+
|
148
|
+
/** The |TlsFetchKeyMaterials| API ensures that |key_materials_config| has a
|
149
|
+
* non-empty pem-key-cert pair list. This is done as follows:
|
150
|
+
* - if |options| is equipped with a credential reload config, then this
|
151
|
+
* methods uses credential reloading to populate |key_materials_config|, and
|
152
|
+
* afterwards it populates |reload_status| with the status of this operation.
|
153
|
+
* In particular, any data stored in |key_materials_config| is overwritten.
|
154
|
+
* - if |options| has no credential reload config, then:
|
155
|
+
* - if |key_materials_config| already has a non-empty pem-key-cert pair
|
156
|
+
* list or is called by a client, then the method returns |GRPC_STATUS_OK|.
|
157
|
+
* - if |key_materials_config| has an empty pem-key-cert pair list and is
|
158
|
+
* called by a server, then the method return an error code.
|
159
|
+
*
|
160
|
+
* The arguments are detailed below:
|
161
|
+
* - key_materials_config: a key materials config that will be populated by the
|
162
|
+
* method on success; the caller should not pass in nullptr. Any data held by
|
163
|
+
* the config will be overwritten.
|
164
|
+
* - options: the TLS credentials options whose credential reloading config
|
165
|
+
* will be used to populate |key_materials_config|.
|
166
|
+
* - is_server: true denotes that this method is called by a server, and
|
167
|
+
* false denotes that this method is called by a client.
|
168
|
+
* - status: the status of the credential reloading after the method
|
169
|
+
* returns; the caller should not pass in nullptr. **/
|
148
170
|
grpc_status_code TlsFetchKeyMaterials(
|
149
171
|
const grpc_core::RefCountedPtr<grpc_tls_key_materials_config>&
|
150
172
|
key_materials_config,
|
151
|
-
const grpc_tls_credentials_options& options, bool
|
173
|
+
const grpc_tls_credentials_options& options, bool is_server,
|
152
174
|
grpc_ssl_certificate_config_reload_status* status);
|
153
175
|
|
154
176
|
// TlsCheckHostName checks if |peer_name| matches the identity information
|
@@ -379,8 +379,7 @@ static void client_auth_start_transport_stream_op_batch(
|
|
379
379
|
GRPC_CALL_STACK_REF(calld->owning_call, "check_call_host");
|
380
380
|
GRPC_CLOSURE_INIT(&calld->async_result_closure, on_host_checked, batch,
|
381
381
|
grpc_schedule_on_exec_ctx);
|
382
|
-
|
383
|
-
grpc_core::StringViewFromSlice(calld->host));
|
382
|
+
absl::string_view call_host(grpc_core::StringViewFromSlice(calld->host));
|
384
383
|
grpc_error* error = GRPC_ERROR_NONE;
|
385
384
|
if (chand->security_connector->check_call_host(
|
386
385
|
call_host, chand->auth_context.get(),
|
@@ -52,11 +52,10 @@ typedef struct slice_shard {
|
|
52
52
|
|
53
53
|
static slice_shard g_shards[SHARD_COUNT];
|
54
54
|
|
55
|
-
|
55
|
+
struct static_metadata_hash_ent {
|
56
56
|
uint32_t hash;
|
57
57
|
uint32_t idx;
|
58
|
-
}
|
59
|
-
|
58
|
+
};
|
60
59
|
static static_metadata_hash_ent
|
61
60
|
static_metadata_hash[4 * GRPC_STATIC_MDSTR_COUNT];
|
62
61
|
static uint32_t max_static_metadata_hash_probe;
|
@@ -347,4 +347,18 @@ size_t grpc_slice_memory_usage(grpc_slice s);
|
|
347
347
|
grpc_core::UnmanagedMemorySlice grpc_slice_sub_no_ref(
|
348
348
|
const grpc_core::UnmanagedMemorySlice& source, size_t begin, size_t end);
|
349
349
|
|
350
|
+
namespace grpc_core {
|
351
|
+
|
352
|
+
struct SliceHash {
|
353
|
+
std::size_t operator()(const grpc_slice& slice) const {
|
354
|
+
return grpc_slice_hash_internal(slice);
|
355
|
+
}
|
356
|
+
};
|
357
|
+
|
358
|
+
} // namespace grpc_core
|
359
|
+
|
360
|
+
inline bool operator==(const grpc_slice& s1, const grpc_slice& s2) {
|
361
|
+
return grpc_slice_eq(s1, s2);
|
362
|
+
}
|
363
|
+
|
350
364
|
#endif /* GRPC_CORE_LIB_SLICE_SLICE_INTERNAL_H */
|
@@ -23,6 +23,8 @@
|
|
23
23
|
|
24
24
|
#include <cstring>
|
25
25
|
|
26
|
+
#include "absl/strings/string_view.h"
|
27
|
+
|
26
28
|
#include <grpc/slice.h>
|
27
29
|
|
28
30
|
#include "src/core/lib/gpr/murmur_hash.h"
|
@@ -186,6 +188,13 @@ struct InternedSlice : public ManagedMemorySlice {
|
|
186
188
|
explicit InternedSlice(InternedSliceRefcount* s);
|
187
189
|
};
|
188
190
|
|
191
|
+
// Converts grpc_slice to absl::string_view.
|
192
|
+
inline absl::string_view StringViewFromSlice(const grpc_slice& slice) {
|
193
|
+
return absl::string_view(
|
194
|
+
reinterpret_cast<const char*>(GRPC_SLICE_START_PTR(slice)),
|
195
|
+
GRPC_SLICE_LENGTH(slice));
|
196
|
+
}
|
197
|
+
|
189
198
|
} // namespace grpc_core
|
190
199
|
|
191
200
|
#endif /* GRPC_CORE_LIB_SLICE_SLICE_UTILS_H */
|
@@ -22,73 +22,28 @@
|
|
22
22
|
#include <string.h>
|
23
23
|
|
24
24
|
#include <grpc/byte_buffer.h>
|
25
|
-
#include <grpc/compression.h>
|
26
25
|
#include <grpc/grpc.h>
|
27
26
|
#include <grpc/slice_buffer.h>
|
28
27
|
#include <grpc/support/alloc.h>
|
29
28
|
#include <grpc/support/log.h>
|
30
29
|
|
31
|
-
#include "src/core/lib/compression/message_compress.h"
|
32
30
|
#include "src/core/lib/iomgr/exec_ctx.h"
|
33
31
|
#include "src/core/lib/slice/slice_internal.h"
|
34
32
|
|
35
|
-
static int is_compressed(grpc_byte_buffer* buffer) {
|
36
|
-
switch (buffer->type) {
|
37
|
-
case GRPC_BB_RAW:
|
38
|
-
if (buffer->data.raw.compression == GRPC_COMPRESS_NONE) {
|
39
|
-
return 0 /* GPR_FALSE */;
|
40
|
-
}
|
41
|
-
break;
|
42
|
-
}
|
43
|
-
return 1 /* GPR_TRUE */;
|
44
|
-
}
|
45
|
-
|
46
33
|
int grpc_byte_buffer_reader_init(grpc_byte_buffer_reader* reader,
|
47
34
|
grpc_byte_buffer* buffer) {
|
48
|
-
grpc_core::ExecCtx exec_ctx;
|
49
|
-
grpc_slice_buffer decompressed_slices_buffer;
|
50
35
|
reader->buffer_in = buffer;
|
51
36
|
switch (reader->buffer_in->type) {
|
52
37
|
case GRPC_BB_RAW:
|
53
|
-
|
54
|
-
if (is_compressed(reader->buffer_in)) {
|
55
|
-
if (grpc_msg_decompress(
|
56
|
-
|
57
|
-
grpc_compression_algorithm_to_message_compression_algorithm(
|
58
|
-
reader->buffer_in->data.raw.compression),
|
59
|
-
&reader->buffer_in->data.raw.slice_buffer,
|
60
|
-
&decompressed_slices_buffer) == 0) {
|
61
|
-
gpr_log(GPR_ERROR,
|
62
|
-
"Unexpected error decompressing data for algorithm with enum "
|
63
|
-
"value '%d'.",
|
64
|
-
reader->buffer_in->data.raw.compression);
|
65
|
-
memset(reader, 0, sizeof(*reader));
|
66
|
-
return 0;
|
67
|
-
} else { /* all fine */
|
68
|
-
reader->buffer_out =
|
69
|
-
grpc_raw_byte_buffer_create(decompressed_slices_buffer.slices,
|
70
|
-
decompressed_slices_buffer.count);
|
71
|
-
}
|
72
|
-
grpc_slice_buffer_destroy_internal(&decompressed_slices_buffer);
|
73
|
-
} else { /* not compressed, use the input buffer as output */
|
74
|
-
reader->buffer_out = reader->buffer_in;
|
75
|
-
}
|
38
|
+
reader->buffer_out = reader->buffer_in;
|
76
39
|
reader->current.index = 0;
|
77
40
|
break;
|
78
41
|
}
|
79
|
-
|
80
42
|
return 1;
|
81
43
|
}
|
82
44
|
|
83
45
|
void grpc_byte_buffer_reader_destroy(grpc_byte_buffer_reader* reader) {
|
84
|
-
|
85
|
-
case GRPC_BB_RAW:
|
86
|
-
/* keeping the same if-else structure as in the init function */
|
87
|
-
if (is_compressed(reader->buffer_in)) {
|
88
|
-
grpc_byte_buffer_destroy(reader->buffer_out);
|
89
|
-
}
|
90
|
-
break;
|
91
|
-
}
|
46
|
+
reader->buffer_out = nullptr;
|
92
47
|
}
|
93
48
|
|
94
49
|
int grpc_byte_buffer_reader_peek(grpc_byte_buffer_reader* reader,
|