grpc 1.30.0 → 1.31.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 +560 -619
- data/include/grpc/grpc_security.h +8 -0
- data/include/grpc/grpc_security_constants.h +3 -0
- data/include/grpc/impl/codegen/grpc_types.h +7 -5
- data/include/grpc/impl/codegen/port_platform.h +0 -32
- data/src/core/ext/filters/client_channel/backend_metric.cc +12 -9
- data/src/core/ext/filters/client_channel/client_channel.cc +406 -261
- data/src/core/ext/filters/client_channel/config_selector.cc +62 -0
- data/src/core/ext/filters/client_channel/config_selector.h +93 -0
- data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +24 -2
- data/src/core/ext/filters/client_channel/health/health_check_client.cc +2 -0
- data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +6 -5
- data/src/core/ext/filters/client_channel/http_proxy.cc +6 -4
- data/src/core/ext/filters/client_channel/lb_policy.h +2 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +39 -23
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +4 -6
- data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +3 -4
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_routing.cc +381 -72
- data/src/core/ext/filters/client_channel/lb_policy_registry.cc +4 -5
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +5 -2
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc +6 -5
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +8 -6
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +9 -7
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +7 -5
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +33 -48
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +6 -2
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +21 -18
- data/src/core/ext/filters/client_channel/resolver_registry.cc +13 -14
- data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +6 -7
- data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +33 -28
- data/src/core/ext/filters/client_channel/resolving_lb_policy.h +39 -20
- data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +142 -0
- data/src/core/ext/filters/client_channel/subchannel.cc +1 -1
- data/src/core/ext/filters/client_channel/xds/xds_api.cc +327 -123
- data/src/core/ext/filters/client_channel/xds/xds_api.h +72 -7
- data/src/core/ext/filters/client_channel/xds/xds_bootstrap.cc +12 -23
- data/src/core/ext/filters/client_channel/xds/xds_client.cc +112 -33
- data/src/core/ext/filters/client_channel/xds/xds_client_stats.h +10 -10
- data/src/core/ext/filters/http/client/http_client_filter.cc +5 -5
- data/src/core/ext/filters/http/http_filters_plugin.cc +2 -1
- data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +74 -33
- data/src/core/ext/filters/http/message_compress/message_decompress_filter.h +3 -1
- data/src/core/ext/filters/message_size/message_size_filter.cc +56 -80
- data/src/core/ext/filters/message_size/message_size_filter.h +6 -0
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +383 -347
- data/src/core/ext/transport/chttp2/server/chttp2_server.h +6 -2
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +1 -1
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +7 -13
- data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +7 -8
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +19 -4
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +22 -27
- data/src/core/ext/transport/chttp2/transport/flow_control.h +14 -16
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +9 -12
- data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +4 -6
- data/src/core/ext/transport/chttp2/transport/frame_ping.cc +5 -6
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +12 -13
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +6 -7
- data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +9 -12
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +25 -29
- data/src/core/ext/transport/chttp2/transport/hpack_table.cc +13 -17
- data/src/core/ext/transport/chttp2/transport/internal.h +13 -0
- data/src/core/ext/transport/chttp2/transport/parsing.cc +33 -43
- data/src/core/ext/transport/chttp2/transport/writing.cc +9 -14
- data/src/core/ext/transport/inproc/inproc_transport.cc +35 -15
- data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h +0 -1
- data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +3 -4
- data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.h +0 -1
- data/src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.h +80 -69
- data/src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.h +24 -23
- data/src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.h +66 -56
- data/src/core/ext/upb-generated/envoy/api/v2/cds.upb.h +1 -2
- data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.h +317 -311
- data/src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.h +42 -34
- data/src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.h +7 -7
- data/src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.h +79 -61
- data/src/core/ext/upb-generated/envoy/api/v2/core/address.upb.h +55 -49
- data/src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.h +9 -8
- data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.h +163 -169
- data/src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.h +51 -45
- data/src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.h +4 -5
- data/src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.h +107 -100
- data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.h +137 -117
- data/src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.h +9 -9
- data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.h +105 -87
- data/src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.h +12 -13
- data/src/core/ext/upb-generated/envoy/api/v2/discovery.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/api/v2/discovery.upb.h +95 -101
- data/src/core/ext/upb-generated/envoy/api/v2/eds.upb.h +1 -2
- data/src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.h +49 -65
- data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.h +0 -1
- data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.h +49 -42
- data/src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.h +70 -62
- data/src/core/ext/upb-generated/envoy/api/v2/lds.upb.h +1 -2
- data/src/core/ext/upb-generated/envoy/api/v2/listener.upb.h +81 -65
- data/src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.h +0 -1
- data/src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.h +91 -80
- data/src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.h +9 -10
- data/src/core/ext/upb-generated/envoy/api/v2/rds.upb.h +1 -2
- data/src/core/ext/upb-generated/envoy/api/v2/route.upb.h +36 -31
- data/src/core/ext/upb-generated/envoy/api/v2/route/route.upb.h +0 -1
- data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.c +7 -7
- data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.h +648 -696
- data/src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.h +16 -15
- data/src/core/ext/upb-generated/envoy/api/v2/srds.upb.h +1 -2
- data/src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.h +95 -88
- data/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.h +234 -199
- data/src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.h +5 -5
- data/src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.h +13 -13
- data/src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.h +1 -2
- data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.h +20 -18
- data/src/core/ext/upb-generated/envoy/type/http.upb.h +0 -1
- data/src/core/ext/upb-generated/envoy/type/matcher/regex.upb.h +18 -17
- data/src/core/ext/upb-generated/envoy/type/matcher/string.upb.h +14 -14
- data/src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.h +23 -23
- data/src/core/ext/upb-generated/envoy/type/percent.upb.h +8 -9
- data/src/core/ext/upb-generated/envoy/type/range.upb.h +15 -16
- data/src/core/ext/upb-generated/envoy/type/semantic_version.upb.h +7 -8
- data/src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.h +36 -35
- data/src/core/ext/upb-generated/gogoproto/gogo.upb.h +0 -1
- data/src/core/ext/upb-generated/google/api/annotations.upb.h +0 -1
- data/src/core/ext/upb-generated/google/api/http.upb.h +29 -28
- data/src/core/ext/upb-generated/google/protobuf/any.upb.h +5 -6
- data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +3 -3
- data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +412 -386
- data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +5 -6
- data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +1 -2
- data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +1 -1
- data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +33 -54
- data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +5 -6
- data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +27 -28
- data/src/core/ext/upb-generated/google/rpc/status.upb.h +8 -8
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c +1 -1
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +32 -45
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +4 -4
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +157 -178
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +14 -13
- data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +6 -7
- data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +59 -56
- data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +11 -12
- data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h +0 -1
- data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +5 -6
- data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.c +6 -6
- data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.h +41 -68
- data/src/core/ext/upb-generated/validate/validate.upb.h +536 -535
- data/src/core/lib/channel/channel_trace.cc +2 -6
- data/src/core/lib/channel/channelz.cc +5 -15
- data/src/core/lib/gpr/log_linux.cc +6 -8
- data/src/core/lib/gpr/log_posix.cc +6 -8
- data/src/core/lib/gpr/string.cc +10 -9
- data/src/core/lib/gpr/string.h +4 -2
- data/src/core/lib/gprpp/global_config_env.cc +8 -6
- data/src/core/lib/http/httpcli.cc +13 -10
- data/src/core/lib/http/httpcli_security_connector.cc +5 -5
- data/src/core/lib/iomgr/cfstream_handle.cc +1 -0
- data/src/core/lib/iomgr/endpoint_pair_posix.cc +10 -10
- data/src/core/lib/iomgr/error_cfstream.cc +9 -8
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +5 -6
- data/src/core/lib/iomgr/ev_epollex_linux.cc +15 -21
- data/src/core/lib/iomgr/ev_poll_posix.cc +6 -5
- data/src/core/lib/iomgr/ev_posix.cc +2 -0
- data/src/core/lib/iomgr/iomgr.cc +10 -0
- data/src/core/lib/iomgr/iomgr.h +10 -0
- data/src/core/lib/iomgr/is_epollexclusive_available.cc +14 -0
- data/src/core/lib/iomgr/port.h +1 -21
- data/src/core/lib/iomgr/resolve_address_custom.cc +13 -18
- data/src/core/lib/iomgr/resolve_address_windows.cc +8 -8
- data/src/core/lib/iomgr/resource_quota.cc +34 -31
- data/src/core/lib/iomgr/sockaddr_utils.cc +7 -5
- data/src/core/lib/iomgr/sockaddr_utils.h +1 -1
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +95 -55
- data/src/core/lib/iomgr/socket_windows.cc +4 -5
- data/src/core/lib/iomgr/tcp_client_cfstream.cc +9 -11
- data/src/core/lib/iomgr/tcp_client_custom.cc +6 -9
- data/src/core/lib/iomgr/tcp_client_posix.cc +27 -36
- data/src/core/lib/iomgr/tcp_client_windows.cc +9 -9
- data/src/core/lib/iomgr/tcp_custom.cc +1 -1
- data/src/core/lib/iomgr/tcp_custom.h +1 -1
- data/src/core/lib/iomgr/tcp_server.cc +3 -4
- data/src/core/lib/iomgr/tcp_server.h +7 -5
- data/src/core/lib/iomgr/tcp_server_custom.cc +6 -14
- data/src/core/lib/iomgr/tcp_server_posix.cc +34 -41
- data/src/core/lib/iomgr/tcp_server_utils_posix.h +3 -4
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +5 -7
- data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +4 -9
- data/src/core/lib/iomgr/tcp_server_windows.cc +16 -16
- data/src/core/lib/iomgr/timer_generic.cc +13 -12
- data/src/core/lib/iomgr/udp_server.cc +24 -23
- data/src/core/lib/iomgr/udp_server.h +5 -2
- data/src/core/lib/iomgr/unix_sockets_posix.cc +9 -14
- data/src/core/lib/iomgr/unix_sockets_posix.h +3 -1
- data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +5 -2
- data/src/core/lib/json/json_reader.cc +20 -21
- data/src/core/lib/security/credentials/credentials.h +5 -3
- data/src/core/lib/security/credentials/google_default/credentials_generic.cc +8 -6
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +12 -9
- data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +7 -4
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +19 -28
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +6 -6
- data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +20 -0
- data/src/core/lib/security/credentials/ssl/ssl_credentials.h +10 -0
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +10 -0
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +10 -10
- data/src/core/lib/security/security_connector/security_connector.cc +2 -0
- data/src/core/lib/security/security_connector/security_connector.h +1 -1
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +18 -11
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +5 -0
- data/src/core/lib/security/security_connector/ssl_utils.cc +44 -23
- data/src/core/lib/security/security_connector/ssl_utils.h +6 -2
- data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +27 -24
- data/src/core/lib/security/transport/auth_filters.h +0 -5
- data/src/core/lib/security/transport/client_auth_filter.cc +10 -9
- data/src/core/lib/security/util/json_util.cc +12 -13
- data/src/core/lib/slice/slice.cc +38 -1
- data/src/core/lib/slice/slice_internal.h +1 -0
- data/src/core/lib/surface/call.cc +40 -41
- data/src/core/lib/surface/completion_queue.cc +271 -14
- data/src/core/lib/surface/completion_queue.h +8 -0
- data/src/core/lib/surface/init.cc +2 -0
- data/src/core/lib/surface/server.cc +565 -632
- data/src/core/lib/surface/server.h +34 -12
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/transport.h +6 -0
- data/src/core/lib/uri/uri_parser.cc +8 -15
- data/src/core/plugin_registry/grpc_plugin_registry.cc +4 -0
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +23 -13
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +2 -0
- data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +2 -0
- data/src/core/tsi/ssl_transport_security.cc +108 -11
- data/src/core/tsi/ssl_transport_security.h +14 -2
- data/src/core/tsi/transport_security_interface.h +5 -0
- data/src/ruby/bin/math_services_pb.rb +4 -4
- data/src/ruby/ext/grpc/extconf.rb +5 -2
- data/src/ruby/ext/grpc/rb_call.c +3 -2
- data/src/ruby/ext/grpc/rb_call.h +4 -0
- data/src/ruby/ext/grpc/rb_call_credentials.c +57 -12
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +4 -0
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +6 -0
- data/src/ruby/lib/grpc/generic/client_stub.rb +1 -1
- data/src/ruby/lib/grpc/generic/interceptors.rb +1 -1
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/pb/grpc/health/v1/health_services_pb.rb +2 -2
- data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +5 -0
- data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +28 -12
- data/src/ruby/spec/pb/codegen/grpc/testing/package_options_import2.proto +23 -0
- data/src/ruby/spec/pb/codegen/grpc/testing/package_options_ruby_style.proto +2 -0
- data/src/ruby/spec/pb/codegen/grpc/testing/same_package_service_name.proto +27 -0
- data/src/ruby/spec/pb/codegen/grpc/testing/same_ruby_package_service_name.proto +29 -0
- data/src/ruby/spec/pb/codegen/package_option_spec.rb +25 -1
- data/src/ruby/spec/support/services.rb +10 -4
- data/src/ruby/spec/user_agent_spec.rb +74 -0
- data/third_party/boringssl-with-bazel/err_data.c +89 -83
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bitstr.c +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_enum.c +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_int.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_time.c +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_type.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/asn1/asn_pack.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/asn1/f_enum.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/asn1/f_int.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/asn1/f_string.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/tls_cbc.c +1 -0
- data/third_party/boringssl-with-bazel/src/crypto/ec_extra/hash_to_curve.c +12 -52
- data/third_party/boringssl-with-bazel/src/crypto/ec_extra/internal.h +0 -22
- data/third_party/boringssl-with-bazel/src/crypto/evp/evp_asn1.c +143 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/mode_wrappers.c +17 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +11 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +2 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p224-64.c +13 -11
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-x86_64.c +24 -23
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256.c +20 -16
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple_mul.c +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/util.c +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +62 -0
- data/third_party/boringssl-with-bazel/src/crypto/mem.c +29 -15
- data/third_party/boringssl-with-bazel/src/crypto/pkcs8/internal.h +7 -0
- data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +36 -5
- data/third_party/boringssl-with-bazel/src/crypto/trust_token/internal.h +0 -29
- data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +116 -363
- data/third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token.c +7 -45
- data/third_party/boringssl-with-bazel/src/crypto/x509/a_strex.c +4 -4
- data/third_party/boringssl-with-bazel/src/crypto/x509/algorithm.c +8 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/asn1_gen.c +4 -4
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509.c +0 -67
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c +13 -6
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c +10 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +41 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_trs.c +4 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +28 -9
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509cset.c +25 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +35 -13
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_pubkey.c +0 -154
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509.c +28 -6
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +5 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +74 -35
- data/third_party/boringssl-with-bazel/src/include/openssl/aes.h +16 -4
- data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +22 -22
- data/third_party/boringssl-with-bazel/src/include/openssl/base.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +69 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +33 -16
- data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +1 -10
- data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +789 -715
- data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +3 -3
- data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +9 -2
- data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +2 -2
- data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +9 -0
- data/third_party/boringssl-with-bazel/src/ssl/internal.h +17 -14
- data/third_party/boringssl-with-bazel/src/ssl/ssl_asn1.cc +7 -7
- data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +28 -0
- data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +4 -24
- data/third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc +5 -5
- data/third_party/boringssl-with-bazel/src/ssl/t1_enc.cc +45 -24
- data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +31 -21
- data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +12 -9
- data/third_party/re2/re2/bitmap256.h +117 -0
- data/third_party/re2/re2/bitstate.cc +385 -0
- data/third_party/re2/re2/compile.cc +1279 -0
- data/third_party/re2/re2/dfa.cc +2130 -0
- data/third_party/re2/re2/filtered_re2.cc +121 -0
- data/third_party/re2/re2/filtered_re2.h +109 -0
- data/third_party/re2/re2/mimics_pcre.cc +197 -0
- data/third_party/re2/re2/nfa.cc +713 -0
- data/third_party/re2/re2/onepass.cc +623 -0
- data/third_party/re2/re2/parse.cc +2464 -0
- data/third_party/re2/re2/perl_groups.cc +119 -0
- data/third_party/re2/re2/pod_array.h +55 -0
- data/third_party/re2/re2/prefilter.cc +710 -0
- data/third_party/re2/re2/prefilter.h +108 -0
- data/third_party/re2/re2/prefilter_tree.cc +407 -0
- data/third_party/re2/re2/prefilter_tree.h +139 -0
- data/third_party/re2/re2/prog.cc +988 -0
- data/third_party/re2/re2/prog.h +436 -0
- data/third_party/re2/re2/re2.cc +1362 -0
- data/third_party/re2/re2/re2.h +1002 -0
- data/third_party/re2/re2/regexp.cc +980 -0
- data/third_party/re2/re2/regexp.h +659 -0
- data/third_party/re2/re2/set.cc +154 -0
- data/third_party/re2/re2/set.h +80 -0
- data/third_party/re2/re2/simplify.cc +657 -0
- data/third_party/re2/re2/sparse_array.h +392 -0
- data/third_party/re2/re2/sparse_set.h +264 -0
- data/third_party/re2/re2/stringpiece.cc +65 -0
- data/third_party/re2/re2/stringpiece.h +210 -0
- data/third_party/re2/re2/tostring.cc +351 -0
- data/third_party/re2/re2/unicode_casefold.cc +582 -0
- data/third_party/re2/re2/unicode_casefold.h +78 -0
- data/third_party/re2/re2/unicode_groups.cc +6269 -0
- data/third_party/re2/re2/unicode_groups.h +67 -0
- data/third_party/re2/re2/walker-inl.h +246 -0
- data/third_party/re2/util/benchmark.h +156 -0
- data/third_party/re2/util/flags.h +26 -0
- data/third_party/re2/util/logging.h +109 -0
- data/third_party/re2/util/malloc_counter.h +19 -0
- data/third_party/re2/util/mix.h +41 -0
- data/third_party/re2/util/mutex.h +148 -0
- data/third_party/re2/util/pcre.cc +1025 -0
- data/third_party/re2/util/pcre.h +681 -0
- data/third_party/re2/util/rune.cc +260 -0
- data/third_party/re2/util/strutil.cc +149 -0
- data/third_party/re2/util/strutil.h +21 -0
- data/third_party/re2/util/test.h +50 -0
- data/third_party/re2/util/utf.h +44 -0
- data/third_party/re2/util/util.h +42 -0
- data/third_party/upb/upb/decode.c +467 -504
- data/third_party/upb/upb/encode.c +163 -121
- data/third_party/upb/upb/msg.c +130 -64
- data/third_party/upb/upb/msg.h +418 -14
- data/third_party/upb/upb/port_def.inc +35 -6
- data/third_party/upb/upb/port_undef.inc +8 -1
- data/third_party/upb/upb/table.c +53 -75
- data/third_party/upb/upb/table.int.h +11 -43
- data/third_party/upb/upb/upb.c +148 -124
- data/third_party/upb/upb/upb.h +65 -147
- data/third_party/upb/upb/upb.hpp +86 -0
- metadata +90 -30
- data/third_party/upb/upb/generated_util.h +0 -105
@@ -32,14 +32,36 @@ extern const grpc_channel_filter grpc_server_top_filter;
|
|
32
32
|
/** Lightweight tracing of server channel state */
|
33
33
|
extern grpc_core::TraceFlag grpc_server_channel_trace;
|
34
34
|
|
35
|
-
|
36
|
-
|
35
|
+
namespace grpc_core {
|
36
|
+
|
37
|
+
/// Interface for listeners.
|
38
|
+
/// Implementations must override the Orphan() method, which should stop
|
39
|
+
/// listening and initiate destruction of the listener.
|
40
|
+
class ServerListenerInterface : public Orphanable {
|
41
|
+
public:
|
42
|
+
virtual ~ServerListenerInterface() = default;
|
43
|
+
|
44
|
+
/// Starts listening. This listener may refer to the pollset object beyond
|
45
|
+
/// this call, so it is a pointer rather than a reference.
|
46
|
+
virtual void Start(grpc_server* server,
|
47
|
+
const std::vector<grpc_pollset*>* pollsets) = 0;
|
48
|
+
|
49
|
+
/// Returns the channelz node for the listen socket, or null if not
|
50
|
+
/// supported.
|
51
|
+
virtual channelz::ListenSocketNode* channelz_listen_socket_node() const = 0;
|
52
|
+
|
53
|
+
/// Sets a closure to be invoked by the listener when its destruction
|
54
|
+
/// is complete.
|
55
|
+
virtual void SetOnDestroyDone(grpc_closure* on_destroy_done) = 0;
|
56
|
+
};
|
57
|
+
|
58
|
+
} // namespace grpc_core
|
59
|
+
|
60
|
+
/* Add a listener to the server: when the server starts, it will call Start(),
|
61
|
+
and when it shuts down, it will orphan the listener. */
|
37
62
|
void grpc_server_add_listener(
|
38
|
-
grpc_server* server,
|
39
|
-
|
40
|
-
size_t npollsets),
|
41
|
-
void (*destroy)(grpc_server* server, void* arg, grpc_closure* on_done),
|
42
|
-
grpc_core::RefCountedPtr<grpc_core::channelz::ListenSocketNode> node);
|
63
|
+
grpc_server* server,
|
64
|
+
grpc_core::OrphanablePtr<grpc_core::ServerListenerInterface> listener);
|
43
65
|
|
44
66
|
/* Setup a transport - creates a channel stack, binds the transport to the
|
45
67
|
server */
|
@@ -57,12 +79,12 @@ const grpc_channel_args* grpc_server_get_channel_args(grpc_server* server);
|
|
57
79
|
|
58
80
|
grpc_resource_user* grpc_server_get_default_resource_user(grpc_server* server);
|
59
81
|
|
60
|
-
|
82
|
+
bool grpc_server_has_open_connections(grpc_server* server);
|
61
83
|
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
84
|
+
// Do not call this before grpc_server_start. Returns the pollsets. The vector
|
85
|
+
// itself is immutable, but the pollsets inside are mutable. The result is valid
|
86
|
+
// for the lifetime of the server.
|
87
|
+
const std::vector<grpc_pollset*>& grpc_server_get_pollsets(grpc_server* server);
|
66
88
|
|
67
89
|
namespace grpc_core {
|
68
90
|
|
@@ -23,6 +23,6 @@
|
|
23
23
|
|
24
24
|
#include <grpc/grpc.h>
|
25
25
|
|
26
|
-
const char* grpc_version_string(void) { return "
|
26
|
+
const char* grpc_version_string(void) { return "11.0.0"; }
|
27
27
|
|
28
|
-
const char* grpc_g_stands_for(void) { return "
|
28
|
+
const char* grpc_g_stands_for(void) { return "galore"; }
|
@@ -242,6 +242,12 @@ struct grpc_transport_stream_op_batch_payload {
|
|
242
242
|
|
243
243
|
struct {
|
244
244
|
grpc_metadata_batch* send_trailing_metadata = nullptr;
|
245
|
+
// Set by the transport to true if the stream successfully wrote the
|
246
|
+
// trailing metadata. If this is not set but there was a send trailing
|
247
|
+
// metadata op present, this can indicate that a server call can be marked
|
248
|
+
// as a cancellation (since the stream was write-closed before status could
|
249
|
+
// be delivered).
|
250
|
+
bool* sent = nullptr;
|
245
251
|
} send_trailing_metadata;
|
246
252
|
|
247
253
|
struct {
|
@@ -22,10 +22,13 @@
|
|
22
22
|
|
23
23
|
#include <string.h>
|
24
24
|
|
25
|
+
#include <string>
|
26
|
+
|
27
|
+
#include "absl/strings/str_format.h"
|
28
|
+
|
25
29
|
#include <grpc/slice_buffer.h>
|
26
30
|
#include <grpc/support/alloc.h>
|
27
31
|
#include <grpc/support/log.h>
|
28
|
-
#include <grpc/support/string_util.h>
|
29
32
|
|
30
33
|
#include "src/core/lib/gpr/string.h"
|
31
34
|
#include "src/core/lib/slice/percent_encoding.h"
|
@@ -37,22 +40,12 @@
|
|
37
40
|
|
38
41
|
static grpc_uri* bad_uri(const char* uri_text, size_t pos, const char* section,
|
39
42
|
bool suppress_errors) {
|
40
|
-
char* line_prefix;
|
41
|
-
size_t pfx_len;
|
42
|
-
|
43
43
|
if (!suppress_errors) {
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
line_prefix = static_cast<char*>(gpr_malloc(pfx_len + 1));
|
50
|
-
memset(line_prefix, ' ', pfx_len);
|
51
|
-
line_prefix[pfx_len] = 0;
|
52
|
-
gpr_log(GPR_ERROR, "%s^ here", line_prefix);
|
53
|
-
gpr_free(line_prefix);
|
44
|
+
std::string line_prefix = absl::StrFormat("bad uri.%s: '", section);
|
45
|
+
gpr_log(GPR_ERROR, "%s%s'", line_prefix.c_str(), uri_text);
|
46
|
+
size_t pfx_len = line_prefix.size() + pos;
|
47
|
+
gpr_log(GPR_ERROR, "%s^ here", std::string(pfx_len, ' ').c_str());
|
54
48
|
}
|
55
|
-
|
56
49
|
return nullptr;
|
57
50
|
}
|
58
51
|
|
@@ -64,6 +64,8 @@ void grpc_max_age_filter_init(void);
|
|
64
64
|
void grpc_max_age_filter_shutdown(void);
|
65
65
|
void grpc_message_size_filter_init(void);
|
66
66
|
void grpc_message_size_filter_shutdown(void);
|
67
|
+
void grpc_service_config_channel_arg_filter_init(void);
|
68
|
+
void grpc_service_config_channel_arg_filter_shutdown(void);
|
67
69
|
void grpc_client_authority_filter_init(void);
|
68
70
|
void grpc_client_authority_filter_shutdown(void);
|
69
71
|
void grpc_workaround_cronet_compression_filter_init(void);
|
@@ -114,6 +116,8 @@ void grpc_register_built_in_plugins(void) {
|
|
114
116
|
grpc_max_age_filter_shutdown);
|
115
117
|
grpc_register_plugin(grpc_message_size_filter_init,
|
116
118
|
grpc_message_size_filter_shutdown);
|
119
|
+
grpc_register_plugin(grpc_service_config_channel_arg_filter_init,
|
120
|
+
grpc_service_config_channel_arg_filter_shutdown);
|
117
121
|
grpc_register_plugin(grpc_client_authority_filter_init,
|
118
122
|
grpc_client_authority_filter_shutdown);
|
119
123
|
grpc_register_plugin(grpc_workaround_cronet_compression_filter_init,
|
@@ -22,6 +22,8 @@
|
|
22
22
|
|
23
23
|
#include "src/core/tsi/alts/handshaker/alts_handshaker_client.h"
|
24
24
|
|
25
|
+
#include "upb/upb.hpp"
|
26
|
+
|
25
27
|
#include <grpc/byte_buffer.h>
|
26
28
|
#include <grpc/support/alloc.h>
|
27
29
|
#include <grpc/support/log.h>
|
@@ -261,7 +263,13 @@ void alts_handshaker_client_handle_response(alts_handshaker_client* c,
|
|
261
263
|
}
|
262
264
|
tsi_handshaker_result* result = nullptr;
|
263
265
|
if (is_handshake_finished_properly(resp)) {
|
264
|
-
|
266
|
+
tsi_result status =
|
267
|
+
alts_tsi_handshaker_result_create(resp, client->is_client, &result);
|
268
|
+
if (status != TSI_OK) {
|
269
|
+
gpr_log(GPR_ERROR, "alts_tsi_handshaker_result_create() failed");
|
270
|
+
handle_response_done(client, status, nullptr, 0, nullptr);
|
271
|
+
return;
|
272
|
+
}
|
265
273
|
alts_tsi_handshaker_result_set_unused_bytes(
|
266
274
|
result, &client->recv_bytes,
|
267
275
|
grpc_gcp_HandshakerResp_bytes_consumed(resp));
|
@@ -549,17 +557,12 @@ static grpc_byte_buffer* get_serialized_start_server(
|
|
549
557
|
grpc_gcp_HandshakerReq_mutable_server_start(req, arena.ptr());
|
550
558
|
grpc_gcp_StartServerHandshakeReq_add_application_protocols(
|
551
559
|
start_server, upb_strview_makez(ALTS_APPLICATION_PROTOCOL), arena.ptr());
|
552
|
-
grpc_gcp_StartServerHandshakeReq_HandshakeParametersEntry* param =
|
553
|
-
grpc_gcp_StartServerHandshakeReq_add_handshake_parameters(start_server,
|
554
|
-
arena.ptr());
|
555
|
-
grpc_gcp_StartServerHandshakeReq_HandshakeParametersEntry_set_key(
|
556
|
-
param, grpc_gcp_ALTS);
|
557
560
|
grpc_gcp_ServerHandshakeParameters* value =
|
558
561
|
grpc_gcp_ServerHandshakeParameters_new(arena.ptr());
|
559
562
|
grpc_gcp_ServerHandshakeParameters_add_record_protocols(
|
560
563
|
value, upb_strview_makez(ALTS_RECORD_PROTOCOL), arena.ptr());
|
561
|
-
|
562
|
-
|
564
|
+
grpc_gcp_StartServerHandshakeReq_handshake_parameters_set(
|
565
|
+
start_server, grpc_gcp_ALTS, value, arena.ptr());
|
563
566
|
grpc_gcp_StartServerHandshakeReq_set_in_bytes(
|
564
567
|
start_server, upb_strview_make(reinterpret_cast<const char*>(
|
565
568
|
GRPC_SLICE_START_PTR(*bytes_received)),
|
@@ -661,11 +664,18 @@ static void handshaker_client_destruct(alts_handshaker_client* c) {
|
|
661
664
|
// TODO(apolcyn): we could remove this indirection and call
|
662
665
|
// grpc_call_unref inline if there was an internal variant of
|
663
666
|
// grpc_call_unref that didn't need to flush an ExecCtx.
|
664
|
-
grpc_core::ExecCtx::
|
665
|
-
|
666
|
-
|
667
|
-
|
668
|
-
|
667
|
+
if (grpc_core::ExecCtx::Get() == nullptr) {
|
668
|
+
// Unref handshaker call if there is no exec_ctx, e.g., in the case of
|
669
|
+
// Envoy ALTS transport socket.
|
670
|
+
grpc_call_unref(client->call);
|
671
|
+
} else {
|
672
|
+
// Using existing exec_ctx to unref handshaker call.
|
673
|
+
grpc_core::ExecCtx::Run(
|
674
|
+
DEBUG_LOCATION,
|
675
|
+
GRPC_CLOSURE_CREATE(handshaker_call_unref, client->call,
|
676
|
+
grpc_schedule_on_exec_ctx),
|
677
|
+
GRPC_ERROR_NONE);
|
678
|
+
}
|
669
679
|
}
|
670
680
|
}
|
671
681
|
|
@@ -33,6 +33,8 @@
|
|
33
33
|
#include <sys/socket.h>
|
34
34
|
#endif
|
35
35
|
|
36
|
+
#include <string>
|
37
|
+
|
36
38
|
#include <grpc/grpc_security.h>
|
37
39
|
#include <grpc/support/alloc.h>
|
38
40
|
#include <grpc/support/log.h>
|
@@ -49,6 +51,7 @@ extern "C" {
|
|
49
51
|
#include <openssl/engine.h>
|
50
52
|
#include <openssl/err.h>
|
51
53
|
#include <openssl/ssl.h>
|
54
|
+
#include <openssl/tls1.h>
|
52
55
|
#include <openssl/x509.h>
|
53
56
|
#include <openssl/x509v3.h>
|
54
57
|
}
|
@@ -888,6 +891,50 @@ static int NullVerifyCallback(int /*preverify_ok*/, X509_STORE_CTX* /*ctx*/) {
|
|
888
891
|
return 1;
|
889
892
|
}
|
890
893
|
|
894
|
+
// Sets the min and max TLS version of |ssl_context| to |min_tls_version| and
|
895
|
+
// |max_tls_version|, respectively. Calling this method is a no-op when using
|
896
|
+
// OpenSSL versions < 1.1.
|
897
|
+
static tsi_result tsi_set_min_and_max_tls_versions(
|
898
|
+
SSL_CTX* ssl_context, tsi_tls_version min_tls_version,
|
899
|
+
tsi_tls_version max_tls_version) {
|
900
|
+
if (ssl_context == nullptr) {
|
901
|
+
gpr_log(GPR_INFO,
|
902
|
+
"Invalid nullptr argument to |tsi_set_min_and_max_tls_versions|.");
|
903
|
+
return TSI_INVALID_ARGUMENT;
|
904
|
+
}
|
905
|
+
#if OPENSSL_VERSION_NUMBER >= 0x10100000
|
906
|
+
// Set the min TLS version of the SSL context.
|
907
|
+
switch (min_tls_version) {
|
908
|
+
case tsi_tls_version::TSI_TLS1_2:
|
909
|
+
SSL_CTX_set_min_proto_version(ssl_context, TLS1_2_VERSION);
|
910
|
+
break;
|
911
|
+
#if defined(TLS1_3_VERSION)
|
912
|
+
case tsi_tls_version::TSI_TLS1_3:
|
913
|
+
SSL_CTX_set_min_proto_version(ssl_context, TLS1_3_VERSION);
|
914
|
+
break;
|
915
|
+
#endif
|
916
|
+
default:
|
917
|
+
gpr_log(GPR_INFO, "TLS version is not supported.");
|
918
|
+
return TSI_FAILED_PRECONDITION;
|
919
|
+
}
|
920
|
+
// Set the max TLS version of the SSL context.
|
921
|
+
switch (max_tls_version) {
|
922
|
+
case tsi_tls_version::TSI_TLS1_2:
|
923
|
+
SSL_CTX_set_max_proto_version(ssl_context, TLS1_2_VERSION);
|
924
|
+
break;
|
925
|
+
#if defined(TLS1_3_VERSION)
|
926
|
+
case tsi_tls_version::TSI_TLS1_3:
|
927
|
+
SSL_CTX_set_max_proto_version(ssl_context, TLS1_3_VERSION);
|
928
|
+
break;
|
929
|
+
#endif
|
930
|
+
default:
|
931
|
+
gpr_log(GPR_INFO, "TLS version is not supported.");
|
932
|
+
return TSI_FAILED_PRECONDITION;
|
933
|
+
}
|
934
|
+
#endif
|
935
|
+
return TSI_OK;
|
936
|
+
}
|
937
|
+
|
891
938
|
/* --- tsi_ssl_root_certs_store methods implementation. ---*/
|
892
939
|
|
893
940
|
tsi_ssl_root_certs_store* tsi_ssl_root_certs_store_create(
|
@@ -1299,7 +1346,7 @@ static const tsi_handshaker_result_vtable handshaker_result_vtable = {
|
|
1299
1346
|
};
|
1300
1347
|
|
1301
1348
|
static tsi_result ssl_handshaker_result_create(
|
1302
|
-
tsi_ssl_handshaker* handshaker,
|
1349
|
+
tsi_ssl_handshaker* handshaker, unsigned char* unused_bytes,
|
1303
1350
|
size_t unused_bytes_size, tsi_handshaker_result** handshaker_result) {
|
1304
1351
|
if (handshaker == nullptr || handshaker_result == nullptr ||
|
1305
1352
|
(unused_bytes_size > 0 && unused_bytes == nullptr)) {
|
@@ -1313,11 +1360,8 @@ static tsi_result ssl_handshaker_result_create(
|
|
1313
1360
|
handshaker->ssl = nullptr;
|
1314
1361
|
result->network_io = handshaker->network_io;
|
1315
1362
|
handshaker->network_io = nullptr;
|
1316
|
-
|
1317
|
-
|
1318
|
-
static_cast<unsigned char*>(gpr_malloc(unused_bytes_size));
|
1319
|
-
memcpy(result->unused_bytes, unused_bytes, unused_bytes_size);
|
1320
|
-
}
|
1363
|
+
/* Transfer ownership of |unused_bytes| to the handshaker result. */
|
1364
|
+
result->unused_bytes = unused_bytes;
|
1321
1365
|
result->unused_bytes_size = unused_bytes_size;
|
1322
1366
|
*handshaker_result = &result->base;
|
1323
1367
|
return TSI_OK;
|
@@ -1410,6 +1454,36 @@ static void ssl_handshaker_destroy(tsi_handshaker* self) {
|
|
1410
1454
|
gpr_free(impl);
|
1411
1455
|
}
|
1412
1456
|
|
1457
|
+
// Removes the bytes remaining in |impl->SSL|'s read BIO and writes them to
|
1458
|
+
// |bytes_remaining|.
|
1459
|
+
static tsi_result ssl_bytes_remaining(tsi_ssl_handshaker* impl,
|
1460
|
+
unsigned char** bytes_remaining,
|
1461
|
+
size_t* bytes_remaining_size) {
|
1462
|
+
if (impl == nullptr || bytes_remaining == nullptr ||
|
1463
|
+
bytes_remaining_size == nullptr) {
|
1464
|
+
return TSI_INVALID_ARGUMENT;
|
1465
|
+
}
|
1466
|
+
// Atempt to read all of the bytes in SSL's read BIO. These bytes should
|
1467
|
+
// contain application data records that were appended to a handshake record
|
1468
|
+
// containing the ClientFinished or ServerFinished message.
|
1469
|
+
size_t bytes_in_ssl = BIO_pending(SSL_get_rbio(impl->ssl));
|
1470
|
+
if (bytes_in_ssl == 0) return TSI_OK;
|
1471
|
+
*bytes_remaining = static_cast<uint8_t*>(gpr_malloc(bytes_in_ssl));
|
1472
|
+
int bytes_read = BIO_read(SSL_get_rbio(impl->ssl), *bytes_remaining,
|
1473
|
+
static_cast<int>(bytes_in_ssl));
|
1474
|
+
// If an unexpected number of bytes were read, return an error status and free
|
1475
|
+
// all of the bytes that were read.
|
1476
|
+
if (bytes_read < 0 || static_cast<size_t>(bytes_read) != bytes_in_ssl) {
|
1477
|
+
gpr_log(GPR_ERROR,
|
1478
|
+
"Failed to read the expected number of bytes from SSL object.");
|
1479
|
+
gpr_free(*bytes_remaining);
|
1480
|
+
*bytes_remaining = nullptr;
|
1481
|
+
return TSI_INTERNAL_ERROR;
|
1482
|
+
}
|
1483
|
+
*bytes_remaining_size = static_cast<size_t>(bytes_read);
|
1484
|
+
return TSI_OK;
|
1485
|
+
}
|
1486
|
+
|
1413
1487
|
static tsi_result ssl_handshaker_next(
|
1414
1488
|
tsi_handshaker* self, const unsigned char* received_bytes,
|
1415
1489
|
size_t received_bytes_size, const unsigned char** bytes_to_send,
|
@@ -1450,9 +1524,19 @@ static tsi_result ssl_handshaker_next(
|
|
1450
1524
|
if (ssl_handshaker_get_result(impl) == TSI_HANDSHAKE_IN_PROGRESS) {
|
1451
1525
|
*handshaker_result = nullptr;
|
1452
1526
|
} else {
|
1453
|
-
|
1454
|
-
|
1455
|
-
|
1527
|
+
// Any bytes that remain in |impl->ssl|'s read BIO after the handshake is
|
1528
|
+
// complete must be extracted and set to the unused bytes of the handshaker
|
1529
|
+
// result. This indicates to the gRPC stack that there are bytes from the
|
1530
|
+
// peer that must be processed.
|
1531
|
+
unsigned char* unused_bytes = nullptr;
|
1532
|
+
size_t unused_bytes_size = 0;
|
1533
|
+
status = ssl_bytes_remaining(impl, &unused_bytes, &unused_bytes_size);
|
1534
|
+
if (status != TSI_OK) return status;
|
1535
|
+
if (unused_bytes_size > received_bytes_size) {
|
1536
|
+
gpr_log(GPR_ERROR, "More unused bytes than received bytes.");
|
1537
|
+
gpr_free(unused_bytes);
|
1538
|
+
return TSI_INTERNAL_ERROR;
|
1539
|
+
}
|
1456
1540
|
status = ssl_handshaker_result_create(impl, unused_bytes, unused_bytes_size,
|
1457
1541
|
handshaker_result);
|
1458
1542
|
if (status == TSI_OK) {
|
@@ -1805,11 +1889,17 @@ tsi_result tsi_create_ssl_client_handshaker_factory_with_options(
|
|
1805
1889
|
return TSI_INVALID_ARGUMENT;
|
1806
1890
|
}
|
1807
1891
|
|
1808
|
-
#if
|
1892
|
+
#if OPENSSL_VERSION_NUMBER >= 0x10100000
|
1809
1893
|
ssl_context = SSL_CTX_new(TLS_method());
|
1810
1894
|
#else
|
1811
1895
|
ssl_context = SSL_CTX_new(TLSv1_2_method());
|
1812
1896
|
#endif
|
1897
|
+
// TODO(mattstev): Re-enable TLS 1.3 by using |options.min_tls_version| and
|
1898
|
+
// |options.max_tls_version|, rather than hardcoding in TLS 1.2 as the min and
|
1899
|
+
// max.
|
1900
|
+
result = tsi_set_min_and_max_tls_versions(
|
1901
|
+
ssl_context, tsi_tls_version::TSI_TLS1_2, tsi_tls_version::TSI_TLS1_2);
|
1902
|
+
if (result != TSI_OK) return result;
|
1813
1903
|
if (ssl_context == nullptr) {
|
1814
1904
|
gpr_log(GPR_ERROR, "Could not create ssl context.");
|
1815
1905
|
return TSI_INVALID_ARGUMENT;
|
@@ -1969,11 +2059,18 @@ tsi_result tsi_create_ssl_server_handshaker_factory_with_options(
|
|
1969
2059
|
|
1970
2060
|
for (i = 0; i < options->num_key_cert_pairs; i++) {
|
1971
2061
|
do {
|
1972
|
-
#if
|
2062
|
+
#if OPENSSL_VERSION_NUMBER >= 0x10100000
|
1973
2063
|
impl->ssl_contexts[i] = SSL_CTX_new(TLS_method());
|
1974
2064
|
#else
|
1975
2065
|
impl->ssl_contexts[i] = SSL_CTX_new(TLSv1_2_method());
|
1976
2066
|
#endif
|
2067
|
+
// TODO(mattstev): Re-enable TLS 1.3 by using |options.min_tls_version|
|
2068
|
+
// and |options.max_tls_version|, rather than hardcoding in TLS 1.2 as the
|
2069
|
+
// min and max.
|
2070
|
+
result = tsi_set_min_and_max_tls_versions(impl->ssl_contexts[i],
|
2071
|
+
tsi_tls_version::TSI_TLS1_2,
|
2072
|
+
tsi_tls_version::TSI_TLS1_2);
|
2073
|
+
if (result != TSI_OK) return result;
|
1977
2074
|
if (impl->ssl_contexts[i] == nullptr) {
|
1978
2075
|
gpr_log(GPR_ERROR, "Could not create ssl context.");
|
1979
2076
|
result = TSI_OUT_OF_RESOURCES;
|
@@ -21,6 +21,7 @@
|
|
21
21
|
|
22
22
|
#include <grpc/support/port_platform.h>
|
23
23
|
|
24
|
+
#include <grpc/grpc_security_constants.h>
|
24
25
|
#include "absl/strings/string_view.h"
|
25
26
|
#include "src/core/tsi/transport_security_interface.h"
|
26
27
|
|
@@ -152,6 +153,10 @@ struct tsi_ssl_client_handshaker_options {
|
|
152
153
|
/* skip server certificate verification. */
|
153
154
|
bool skip_server_certificate_verification;
|
154
155
|
|
156
|
+
/* The min and max TLS versions that will be negotiated by the handshaker. */
|
157
|
+
tsi_tls_version min_tls_version;
|
158
|
+
tsi_tls_version max_tls_version;
|
159
|
+
|
155
160
|
tsi_ssl_client_handshaker_options()
|
156
161
|
: pem_key_cert_pair(nullptr),
|
157
162
|
pem_root_certs(nullptr),
|
@@ -160,7 +165,9 @@ struct tsi_ssl_client_handshaker_options {
|
|
160
165
|
alpn_protocols(nullptr),
|
161
166
|
num_alpn_protocols(0),
|
162
167
|
session_cache(nullptr),
|
163
|
-
skip_server_certificate_verification(false)
|
168
|
+
skip_server_certificate_verification(false),
|
169
|
+
min_tls_version(tsi_tls_version::TSI_TLS1_2),
|
170
|
+
max_tls_version(tsi_tls_version::TSI_TLS1_3) {}
|
164
171
|
};
|
165
172
|
|
166
173
|
/* Creates a client handshaker factory.
|
@@ -276,6 +283,9 @@ struct tsi_ssl_server_handshaker_options {
|
|
276
283
|
const char* session_ticket_key;
|
277
284
|
/* session_ticket_key_size is a size of session ticket encryption key. */
|
278
285
|
size_t session_ticket_key_size;
|
286
|
+
/* The min and max TLS versions that will be negotiated by the handshaker. */
|
287
|
+
tsi_tls_version min_tls_version;
|
288
|
+
tsi_tls_version max_tls_version;
|
279
289
|
|
280
290
|
tsi_ssl_server_handshaker_options()
|
281
291
|
: pem_key_cert_pairs(nullptr),
|
@@ -286,7 +296,9 @@ struct tsi_ssl_server_handshaker_options {
|
|
286
296
|
alpn_protocols(nullptr),
|
287
297
|
num_alpn_protocols(0),
|
288
298
|
session_ticket_key(nullptr),
|
289
|
-
session_ticket_key_size(0)
|
299
|
+
session_ticket_key_size(0),
|
300
|
+
min_tls_version(tsi_tls_version::TSI_TLS1_2),
|
301
|
+
max_tls_version(tsi_tls_version::TSI_TLS1_3) {}
|
290
302
|
};
|
291
303
|
|
292
304
|
/* Creates a server handshaker factory.
|