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
@@ -38,7 +38,8 @@ static optional_filter compress_filter = {
|
|
38
38
|
&grpc_message_compress_filter, GRPC_ARG_ENABLE_PER_MESSAGE_COMPRESSION};
|
39
39
|
|
40
40
|
static optional_filter decompress_filter = {
|
41
|
-
&
|
41
|
+
&grpc_core::MessageDecompressFilter,
|
42
|
+
GRPC_ARG_ENABLE_PER_MESSAGE_DECOMPRESSION};
|
42
43
|
|
43
44
|
static bool is_building_http_like_transport(
|
44
45
|
grpc_channel_stack_builder* builder) {
|
@@ -18,16 +18,20 @@
|
|
18
18
|
|
19
19
|
#include <grpc/support/port_platform.h>
|
20
20
|
|
21
|
+
#include "src/core/ext/filters/http/message_compress/message_decompress_filter.h"
|
22
|
+
|
21
23
|
#include <assert.h>
|
22
24
|
#include <string.h>
|
23
25
|
|
26
|
+
#include "absl/strings/str_cat.h"
|
27
|
+
|
24
28
|
#include <grpc/compression.h>
|
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
|
-
#include "
|
33
|
+
#include "absl/strings/str_format.h"
|
34
|
+
#include "src/core/ext/filters/message_size/message_size_filter.h"
|
31
35
|
#include "src/core/lib/channel/channel_args.h"
|
32
36
|
#include "src/core/lib/compression/algorithm_metadata.h"
|
33
37
|
#include "src/core/lib/compression/compression_args.h"
|
@@ -37,14 +41,25 @@
|
|
37
41
|
#include "src/core/lib/slice/slice_internal.h"
|
38
42
|
#include "src/core/lib/slice/slice_string_helpers.h"
|
39
43
|
|
44
|
+
namespace grpc_core {
|
40
45
|
namespace {
|
41
46
|
|
42
|
-
class ChannelData {
|
47
|
+
class ChannelData {
|
48
|
+
public:
|
49
|
+
explicit ChannelData(const grpc_channel_element_args* args)
|
50
|
+
: max_recv_size_(GetMaxRecvSizeFromChannelArgs(args->channel_args)) {}
|
51
|
+
|
52
|
+
int max_recv_size() const { return max_recv_size_; }
|
53
|
+
|
54
|
+
private:
|
55
|
+
int max_recv_size_;
|
56
|
+
};
|
43
57
|
|
44
58
|
class CallData {
|
45
59
|
public:
|
46
|
-
|
47
|
-
: call_combiner_(args.call_combiner)
|
60
|
+
CallData(const grpc_call_element_args& args, const ChannelData* chand)
|
61
|
+
: call_combiner_(args.call_combiner),
|
62
|
+
max_recv_message_length_(chand->max_recv_size()) {
|
48
63
|
// Initialize state for recv_initial_metadata_ready callback
|
49
64
|
GRPC_CLOSURE_INIT(&on_recv_initial_metadata_ready_,
|
50
65
|
OnRecvInitialMetadataReady, this,
|
@@ -59,6 +74,13 @@ class CallData {
|
|
59
74
|
GRPC_CLOSURE_INIT(&on_recv_trailing_metadata_ready_,
|
60
75
|
OnRecvTrailingMetadataReady, this,
|
61
76
|
grpc_schedule_on_exec_ctx);
|
77
|
+
const MessageSizeParsedConfig* limits =
|
78
|
+
MessageSizeParsedConfig::GetFromCallContext(args.context);
|
79
|
+
if (limits != nullptr && limits->limits().max_recv_size >= 0 &&
|
80
|
+
(limits->limits().max_recv_size < max_recv_message_length_ ||
|
81
|
+
max_recv_message_length_ < 0)) {
|
82
|
+
max_recv_message_length_ = limits->limits().max_recv_size;
|
83
|
+
}
|
62
84
|
}
|
63
85
|
|
64
86
|
~CallData() { grpc_slice_buffer_destroy_internal(&recv_slices_); }
|
@@ -82,7 +104,7 @@ class CallData {
|
|
82
104
|
void MaybeResumeOnRecvTrailingMetadataReady();
|
83
105
|
static void OnRecvTrailingMetadataReady(void* arg, grpc_error* error);
|
84
106
|
|
85
|
-
|
107
|
+
CallCombiner* call_combiner_;
|
86
108
|
// Overall error for the call
|
87
109
|
grpc_error* error_ = GRPC_ERROR_NONE;
|
88
110
|
// Fields for handling recv_initial_metadata_ready callback
|
@@ -91,17 +113,18 @@ class CallData {
|
|
91
113
|
grpc_metadata_batch* recv_initial_metadata_ = nullptr;
|
92
114
|
// Fields for handling recv_message_ready callback
|
93
115
|
bool seen_recv_message_ready_ = false;
|
116
|
+
int max_recv_message_length_;
|
94
117
|
grpc_message_compression_algorithm algorithm_ = GRPC_MESSAGE_COMPRESS_NONE;
|
95
118
|
grpc_closure on_recv_message_ready_;
|
96
119
|
grpc_closure* original_recv_message_ready_ = nullptr;
|
97
120
|
grpc_closure on_recv_message_next_done_;
|
98
|
-
|
121
|
+
OrphanablePtr<ByteStream>* recv_message_ = nullptr;
|
99
122
|
// recv_slices_ holds the slices read from the original recv_message stream.
|
100
123
|
// It is initialized during construction and reset when a new stream is
|
101
124
|
// created using it.
|
102
125
|
grpc_slice_buffer recv_slices_;
|
103
|
-
std::aligned_storage<sizeof(
|
104
|
-
alignof(
|
126
|
+
std::aligned_storage<sizeof(SliceBufferByteStream),
|
127
|
+
alignof(SliceBufferByteStream)>::type
|
105
128
|
recv_replacement_stream_;
|
106
129
|
// Fields for handling recv_trailing_metadata_ready callback
|
107
130
|
bool seen_recv_trailing_metadata_ready_ = false;
|
@@ -139,7 +162,7 @@ void CallData::OnRecvInitialMetadataReady(void* arg, grpc_error* error) {
|
|
139
162
|
calld->MaybeResumeOnRecvTrailingMetadataReady();
|
140
163
|
grpc_closure* closure = calld->original_recv_initial_metadata_ready_;
|
141
164
|
calld->original_recv_initial_metadata_ready_ = nullptr;
|
142
|
-
|
165
|
+
Closure::Run(DEBUG_LOCATION, closure, GRPC_ERROR_REF(error));
|
143
166
|
}
|
144
167
|
|
145
168
|
void CallData::MaybeResumeOnRecvMessageReady() {
|
@@ -170,6 +193,19 @@ void CallData::OnRecvMessageReady(void* arg, grpc_error* error) {
|
|
170
193
|
0) {
|
171
194
|
return calld->ContinueRecvMessageReadyCallback(GRPC_ERROR_NONE);
|
172
195
|
}
|
196
|
+
if (calld->max_recv_message_length_ >= 0 &&
|
197
|
+
(*calld->recv_message_)->length() >
|
198
|
+
static_cast<uint32_t>(calld->max_recv_message_length_)) {
|
199
|
+
std::string message_string = absl::StrFormat(
|
200
|
+
"Received message larger than max (%u vs. %d)",
|
201
|
+
(*calld->recv_message_)->length(), calld->max_recv_message_length_);
|
202
|
+
GPR_DEBUG_ASSERT(calld->error_ == GRPC_ERROR_NONE);
|
203
|
+
calld->error_ = grpc_error_set_int(
|
204
|
+
GRPC_ERROR_CREATE_FROM_COPIED_STRING(message_string.c_str()),
|
205
|
+
GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_RESOURCE_EXHAUSTED);
|
206
|
+
return calld->ContinueRecvMessageReadyCallback(
|
207
|
+
GRPC_ERROR_REF(calld->error_));
|
208
|
+
}
|
173
209
|
grpc_slice_buffer_destroy_internal(&calld->recv_slices_);
|
174
210
|
grpc_slice_buffer_init(&calld->recv_slices_);
|
175
211
|
return calld->ContinueReadingRecvMessage();
|
@@ -223,14 +259,12 @@ void CallData::FinishRecvMessage() {
|
|
223
259
|
grpc_slice_buffer_init(&decompressed_slices);
|
224
260
|
if (grpc_msg_decompress(algorithm_, &recv_slices_, &decompressed_slices) ==
|
225
261
|
0) {
|
226
|
-
char* msg;
|
227
|
-
gpr_asprintf(
|
228
|
-
&msg,
|
229
|
-
"Unexpected error decompressing data for algorithm with enum value %d",
|
230
|
-
algorithm_);
|
231
262
|
GPR_DEBUG_ASSERT(error_ == GRPC_ERROR_NONE);
|
232
|
-
error_ = GRPC_ERROR_CREATE_FROM_COPIED_STRING(
|
233
|
-
|
263
|
+
error_ = GRPC_ERROR_CREATE_FROM_COPIED_STRING(
|
264
|
+
absl::StrCat("Unexpected error decompressing data for algorithm with "
|
265
|
+
"enum value ",
|
266
|
+
algorithm_)
|
267
|
+
.c_str());
|
234
268
|
grpc_slice_buffer_destroy_internal(&decompressed_slices);
|
235
269
|
} else {
|
236
270
|
uint32_t recv_flags =
|
@@ -241,9 +275,9 @@ void CallData::FinishRecvMessage() {
|
|
241
275
|
// Initializing recv_replacement_stream_ with decompressed_slices removes
|
242
276
|
// all the slices from decompressed_slices leaving it empty.
|
243
277
|
new (&recv_replacement_stream_)
|
244
|
-
|
245
|
-
recv_message_->reset(
|
246
|
-
&recv_replacement_stream_));
|
278
|
+
SliceBufferByteStream(&decompressed_slices, recv_flags);
|
279
|
+
recv_message_->reset(
|
280
|
+
reinterpret_cast<SliceBufferByteStream*>(&recv_replacement_stream_));
|
247
281
|
recv_message_ = nullptr;
|
248
282
|
}
|
249
283
|
ContinueRecvMessageReadyCallback(GRPC_ERROR_REF(error_));
|
@@ -254,7 +288,7 @@ void CallData::ContinueRecvMessageReadyCallback(grpc_error* error) {
|
|
254
288
|
// The surface will clean up the receiving stream if there is an error.
|
255
289
|
grpc_closure* closure = original_recv_message_ready_;
|
256
290
|
original_recv_message_ready_ = nullptr;
|
257
|
-
|
291
|
+
Closure::Run(DEBUG_LOCATION, closure, error);
|
258
292
|
}
|
259
293
|
|
260
294
|
void CallData::MaybeResumeOnRecvTrailingMetadataReady() {
|
@@ -283,7 +317,7 @@ void CallData::OnRecvTrailingMetadataReady(void* arg, grpc_error* error) {
|
|
283
317
|
calld->error_ = GRPC_ERROR_NONE;
|
284
318
|
grpc_closure* closure = calld->original_recv_trailing_metadata_ready_;
|
285
319
|
calld->original_recv_trailing_metadata_ready_ = nullptr;
|
286
|
-
|
320
|
+
Closure::Run(DEBUG_LOCATION, closure, error);
|
287
321
|
}
|
288
322
|
|
289
323
|
void CallData::DecompressStartTransportStreamOpBatch(
|
@@ -322,37 +356,44 @@ void DecompressStartTransportStreamOpBatch(
|
|
322
356
|
calld->DecompressStartTransportStreamOpBatch(elem, batch);
|
323
357
|
}
|
324
358
|
|
325
|
-
|
326
|
-
|
327
|
-
|
359
|
+
grpc_error* DecompressInitCallElem(grpc_call_element* elem,
|
360
|
+
const grpc_call_element_args* args) {
|
361
|
+
ChannelData* chand = static_cast<ChannelData*>(elem->channel_data);
|
362
|
+
new (elem->call_data) CallData(*args, chand);
|
328
363
|
return GRPC_ERROR_NONE;
|
329
364
|
}
|
330
365
|
|
331
|
-
|
332
|
-
|
333
|
-
|
366
|
+
void DecompressDestroyCallElem(grpc_call_element* elem,
|
367
|
+
const grpc_call_final_info* /*final_info*/,
|
368
|
+
grpc_closure* /*ignored*/) {
|
334
369
|
CallData* calld = static_cast<CallData*>(elem->call_data);
|
335
370
|
calld->~CallData();
|
336
371
|
}
|
337
372
|
|
338
|
-
|
339
|
-
|
373
|
+
grpc_error* DecompressInitChannelElem(grpc_channel_element* elem,
|
374
|
+
grpc_channel_element_args* args) {
|
375
|
+
ChannelData* chand = static_cast<ChannelData*>(elem->channel_data);
|
376
|
+
new (chand) ChannelData(args);
|
340
377
|
return GRPC_ERROR_NONE;
|
341
378
|
}
|
342
379
|
|
343
|
-
void DecompressDestroyChannelElem(grpc_channel_element*
|
380
|
+
void DecompressDestroyChannelElem(grpc_channel_element* elem) {
|
381
|
+
ChannelData* chand = static_cast<ChannelData*>(elem->channel_data);
|
382
|
+
chand->~ChannelData();
|
383
|
+
}
|
344
384
|
|
345
385
|
} // namespace
|
346
386
|
|
347
|
-
const grpc_channel_filter
|
387
|
+
const grpc_channel_filter MessageDecompressFilter = {
|
348
388
|
DecompressStartTransportStreamOpBatch,
|
349
389
|
grpc_channel_next_op,
|
350
390
|
sizeof(CallData),
|
351
391
|
DecompressInitCallElem,
|
352
392
|
grpc_call_stack_ignore_set_pollset_or_pollset_set,
|
353
393
|
DecompressDestroyCallElem,
|
354
|
-
|
394
|
+
sizeof(ChannelData),
|
355
395
|
DecompressInitChannelElem,
|
356
396
|
DecompressDestroyChannelElem,
|
357
397
|
grpc_channel_next_get_info,
|
358
398
|
"message_decompress"};
|
399
|
+
} // namespace grpc_core
|
@@ -23,7 +23,9 @@
|
|
23
23
|
|
24
24
|
#include "src/core/lib/channel/channel_stack.h"
|
25
25
|
|
26
|
-
|
26
|
+
namespace grpc_core {
|
27
|
+
extern const grpc_channel_filter MessageDecompressFilter;
|
28
|
+
} // namespace grpc_core
|
27
29
|
|
28
30
|
#endif /* GRPC_CORE_EXT_FILTERS_HTTP_MESSAGE_COMPRESS_MESSAGE_DECOMPRESS_FILTER_H \
|
29
31
|
*/
|
@@ -21,10 +21,11 @@
|
|
21
21
|
#include <limits.h>
|
22
22
|
#include <string.h>
|
23
23
|
|
24
|
+
#include "absl/strings/str_format.h"
|
25
|
+
|
24
26
|
#include <grpc/impl/codegen/grpc_types.h>
|
25
27
|
#include <grpc/support/alloc.h>
|
26
28
|
#include <grpc/support/log.h>
|
27
|
-
#include <grpc/support/string_util.h>
|
28
29
|
|
29
30
|
#include "src/core/ext/filters/client_channel/service_config.h"
|
30
31
|
#include "src/core/ext/filters/client_channel/service_config_call_data.h"
|
@@ -45,6 +46,25 @@ namespace {
|
|
45
46
|
size_t g_message_size_parser_index;
|
46
47
|
} // namespace
|
47
48
|
|
49
|
+
//
|
50
|
+
// MessageSizeParsedConfig
|
51
|
+
//
|
52
|
+
|
53
|
+
const MessageSizeParsedConfig* MessageSizeParsedConfig::GetFromCallContext(
|
54
|
+
const grpc_call_context_element* context) {
|
55
|
+
if (context == nullptr) return nullptr;
|
56
|
+
auto* svc_cfg_call_data = static_cast<ServiceConfigCallData*>(
|
57
|
+
context[GRPC_CONTEXT_SERVICE_CONFIG_CALL_DATA].value);
|
58
|
+
if (svc_cfg_call_data == nullptr) return nullptr;
|
59
|
+
return static_cast<const MessageSizeParsedConfig*>(
|
60
|
+
svc_cfg_call_data->GetMethodParsedConfig(
|
61
|
+
MessageSizeParser::ParserIndex()));
|
62
|
+
}
|
63
|
+
|
64
|
+
//
|
65
|
+
// MessageSizeParser
|
66
|
+
//
|
67
|
+
|
48
68
|
std::unique_ptr<ServiceConfigParser::ParsedConfig>
|
49
69
|
MessageSizeParser::ParsePerMethodParams(const Json& json, grpc_error** error) {
|
50
70
|
GPR_DEBUG_ASSERT(error != nullptr && *error == GRPC_ERROR_NONE);
|
@@ -97,12 +117,26 @@ void MessageSizeParser::Register() {
|
|
97
117
|
}
|
98
118
|
|
99
119
|
size_t MessageSizeParser::ParserIndex() { return g_message_size_parser_index; }
|
120
|
+
|
121
|
+
int GetMaxRecvSizeFromChannelArgs(const grpc_channel_args* args) {
|
122
|
+
if (grpc_channel_args_want_minimal_stack(args)) return -1;
|
123
|
+
return grpc_channel_args_find_integer(
|
124
|
+
args, GRPC_ARG_MAX_RECEIVE_MESSAGE_LENGTH,
|
125
|
+
{GRPC_DEFAULT_MAX_RECV_MESSAGE_LENGTH, -1, INT_MAX});
|
126
|
+
}
|
127
|
+
|
128
|
+
int GetMaxSendSizeFromChannelArgs(const grpc_channel_args* args) {
|
129
|
+
if (grpc_channel_args_want_minimal_stack(args)) return -1;
|
130
|
+
return grpc_channel_args_find_integer(
|
131
|
+
args, GRPC_ARG_MAX_SEND_MESSAGE_LENGTH,
|
132
|
+
{GRPC_DEFAULT_MAX_SEND_MESSAGE_LENGTH, -1, INT_MAX});
|
133
|
+
}
|
134
|
+
|
100
135
|
} // namespace grpc_core
|
101
136
|
|
102
137
|
namespace {
|
103
138
|
struct channel_data {
|
104
139
|
grpc_core::MessageSizeParsedConfig::message_size_limits limits;
|
105
|
-
grpc_core::RefCountedPtr<grpc_core::ServiceConfig> svc_cfg;
|
106
140
|
};
|
107
141
|
|
108
142
|
struct call_data {
|
@@ -118,24 +152,8 @@ struct call_data {
|
|
118
152
|
// Note: Per-method config is only available on the client, so we
|
119
153
|
// apply the max request size to the send limit and the max response
|
120
154
|
// size to the receive limit.
|
121
|
-
const grpc_core::MessageSizeParsedConfig* limits =
|
122
|
-
|
123
|
-
if (args.context != nullptr) {
|
124
|
-
svc_cfg_call_data = static_cast<grpc_core::ServiceConfigCallData*>(
|
125
|
-
args.context[GRPC_CONTEXT_SERVICE_CONFIG_CALL_DATA].value);
|
126
|
-
}
|
127
|
-
if (svc_cfg_call_data != nullptr) {
|
128
|
-
limits = static_cast<const grpc_core::MessageSizeParsedConfig*>(
|
129
|
-
svc_cfg_call_data->GetMethodParsedConfig(
|
130
|
-
grpc_core::MessageSizeParser::ParserIndex()));
|
131
|
-
} else if (chand.svc_cfg != nullptr) {
|
132
|
-
const auto* objs_vector =
|
133
|
-
chand.svc_cfg->GetMethodParsedConfigVector(args.path);
|
134
|
-
if (objs_vector != nullptr) {
|
135
|
-
limits = static_cast<const grpc_core::MessageSizeParsedConfig*>(
|
136
|
-
(*objs_vector)[grpc_core::MessageSizeParser::ParserIndex()].get());
|
137
|
-
}
|
138
|
-
}
|
155
|
+
const grpc_core::MessageSizeParsedConfig* limits =
|
156
|
+
grpc_core::MessageSizeParsedConfig::GetFromCallContext(args.context);
|
139
157
|
if (limits != nullptr) {
|
140
158
|
if (limits->limits().max_send_size >= 0 &&
|
141
159
|
(limits->limits().max_send_size < this->limits.max_send_size ||
|
@@ -181,17 +199,16 @@ static void recv_message_ready(void* user_data, grpc_error* error) {
|
|
181
199
|
if (*calld->recv_message != nullptr && calld->limits.max_recv_size >= 0 &&
|
182
200
|
(*calld->recv_message)->length() >
|
183
201
|
static_cast<size_t>(calld->limits.max_recv_size)) {
|
184
|
-
char* message_string;
|
185
|
-
gpr_asprintf(&message_string,
|
186
|
-
"Received message larger than max (%u vs. %d)",
|
187
|
-
(*calld->recv_message)->length(), calld->limits.max_recv_size);
|
188
202
|
grpc_error* new_error = grpc_error_set_int(
|
189
|
-
GRPC_ERROR_CREATE_FROM_COPIED_STRING(
|
203
|
+
GRPC_ERROR_CREATE_FROM_COPIED_STRING(
|
204
|
+
absl::StrFormat("Received message larger than max (%u vs. %d)",
|
205
|
+
(*calld->recv_message)->length(),
|
206
|
+
calld->limits.max_recv_size)
|
207
|
+
.c_str()),
|
190
208
|
GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_RESOURCE_EXHAUSTED);
|
191
209
|
error = grpc_error_add_child(GRPC_ERROR_REF(error), new_error);
|
192
210
|
GRPC_ERROR_UNREF(calld->error);
|
193
211
|
calld->error = GRPC_ERROR_REF(error);
|
194
|
-
gpr_free(message_string);
|
195
212
|
} else {
|
196
213
|
GRPC_ERROR_REF(error);
|
197
214
|
}
|
@@ -241,17 +258,17 @@ static void message_size_start_transport_stream_op_batch(
|
|
241
258
|
if (op->send_message && calld->limits.max_send_size >= 0 &&
|
242
259
|
op->payload->send_message.send_message->length() >
|
243
260
|
static_cast<size_t>(calld->limits.max_send_size)) {
|
244
|
-
char* message_string;
|
245
|
-
gpr_asprintf(&message_string, "Sent message larger than max (%u vs. %d)",
|
246
|
-
op->payload->send_message.send_message->length(),
|
247
|
-
calld->limits.max_send_size);
|
248
261
|
grpc_transport_stream_op_batch_finish_with_failure(
|
249
262
|
op,
|
250
|
-
grpc_error_set_int(
|
251
|
-
|
252
|
-
|
263
|
+
grpc_error_set_int(
|
264
|
+
GRPC_ERROR_CREATE_FROM_COPIED_STRING(
|
265
|
+
absl::StrFormat(
|
266
|
+
"Sent message larger than max (%u vs. %d)",
|
267
|
+
op->payload->send_message.send_message->length(),
|
268
|
+
calld->limits.max_send_size)
|
269
|
+
.c_str()),
|
270
|
+
GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_RESOURCE_EXHAUSTED),
|
253
271
|
calld->call_combiner);
|
254
|
-
gpr_free(message_string);
|
255
272
|
return;
|
256
273
|
}
|
257
274
|
// Inject callback for receiving a message.
|
@@ -288,35 +305,11 @@ static void message_size_destroy_call_elem(
|
|
288
305
|
calld->~call_data();
|
289
306
|
}
|
290
307
|
|
291
|
-
static int default_size(const grpc_channel_args* args,
|
292
|
-
int without_minimal_stack) {
|
293
|
-
if (grpc_channel_args_want_minimal_stack(args)) {
|
294
|
-
return -1;
|
295
|
-
}
|
296
|
-
return without_minimal_stack;
|
297
|
-
}
|
298
|
-
|
299
308
|
grpc_core::MessageSizeParsedConfig::message_size_limits get_message_size_limits(
|
300
309
|
const grpc_channel_args* channel_args) {
|
301
310
|
grpc_core::MessageSizeParsedConfig::message_size_limits lim;
|
302
|
-
lim.max_send_size =
|
303
|
-
|
304
|
-
lim.max_recv_size =
|
305
|
-
default_size(channel_args, GRPC_DEFAULT_MAX_RECV_MESSAGE_LENGTH);
|
306
|
-
for (size_t i = 0; i < channel_args->num_args; ++i) {
|
307
|
-
if (strcmp(channel_args->args[i].key, GRPC_ARG_MAX_SEND_MESSAGE_LENGTH) ==
|
308
|
-
0) {
|
309
|
-
const grpc_integer_options options = {lim.max_send_size, -1, INT_MAX};
|
310
|
-
lim.max_send_size =
|
311
|
-
grpc_channel_arg_get_integer(&channel_args->args[i], options);
|
312
|
-
}
|
313
|
-
if (strcmp(channel_args->args[i].key,
|
314
|
-
GRPC_ARG_MAX_RECEIVE_MESSAGE_LENGTH) == 0) {
|
315
|
-
const grpc_integer_options options = {lim.max_recv_size, -1, INT_MAX};
|
316
|
-
lim.max_recv_size =
|
317
|
-
grpc_channel_arg_get_integer(&channel_args->args[i], options);
|
318
|
-
}
|
319
|
-
}
|
311
|
+
lim.max_send_size = grpc_core::GetMaxSendSizeFromChannelArgs(channel_args);
|
312
|
+
lim.max_recv_size = grpc_core::GetMaxRecvSizeFromChannelArgs(channel_args);
|
320
313
|
return lim;
|
321
314
|
}
|
322
315
|
|
@@ -327,26 +320,6 @@ static grpc_error* message_size_init_channel_elem(
|
|
327
320
|
channel_data* chand = static_cast<channel_data*>(elem->channel_data);
|
328
321
|
new (chand) channel_data();
|
329
322
|
chand->limits = get_message_size_limits(args->channel_args);
|
330
|
-
// TODO(yashykt): We only need to read GRPC_ARG_SERVICE_CONFIG in the case of
|
331
|
-
// direct channels. (Service config is otherwise stored in the call_context by
|
332
|
-
// client_channel filter.) If we ever need a second filter that also needs to
|
333
|
-
// parse GRPC_ARG_SERVICE_CONFIG, we should refactor this code and add a
|
334
|
-
// separate filter that reads GRPC_ARG_SERVICE_CONFIG and saves the parsed
|
335
|
-
// config in the call_context.
|
336
|
-
const grpc_arg* channel_arg =
|
337
|
-
grpc_channel_args_find(args->channel_args, GRPC_ARG_SERVICE_CONFIG);
|
338
|
-
const char* service_config_str = grpc_channel_arg_get_string(channel_arg);
|
339
|
-
if (service_config_str != nullptr) {
|
340
|
-
grpc_error* service_config_error = GRPC_ERROR_NONE;
|
341
|
-
auto svc_cfg = grpc_core::ServiceConfig::Create(service_config_str,
|
342
|
-
&service_config_error);
|
343
|
-
if (service_config_error == GRPC_ERROR_NONE) {
|
344
|
-
chand->svc_cfg = std::move(svc_cfg);
|
345
|
-
} else {
|
346
|
-
gpr_log(GPR_ERROR, "%s", grpc_error_string(service_config_error));
|
347
|
-
}
|
348
|
-
GRPC_ERROR_UNREF(service_config_error);
|
349
|
-
}
|
350
323
|
return GRPC_ERROR_NONE;
|
351
324
|
}
|
352
325
|
|
@@ -387,6 +360,9 @@ static bool maybe_add_message_size_filter(grpc_channel_stack_builder* builder,
|
|
387
360
|
void* /*arg*/) {
|
388
361
|
const grpc_channel_args* channel_args =
|
389
362
|
grpc_channel_stack_builder_get_channel_arguments(builder);
|
363
|
+
if (grpc_channel_args_want_minimal_stack(channel_args)) {
|
364
|
+
return true;
|
365
|
+
}
|
390
366
|
bool enable = false;
|
391
367
|
grpc_core::MessageSizeParsedConfig::message_size_limits lim =
|
392
368
|
get_message_size_limits(channel_args);
|