grpc 1.60.2 → 1.61.0.pre2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Makefile +208 -165
- data/include/grpc/event_engine/event_engine.h +59 -12
- data/include/grpc/event_engine/internal/memory_allocator_impl.h +6 -0
- data/include/grpc/event_engine/internal/slice_cast.h +12 -0
- data/include/grpc/event_engine/memory_allocator.h +3 -1
- data/include/grpc/event_engine/slice.h +5 -0
- data/include/grpc/grpc_security.h +22 -1
- data/include/grpc/impl/call.h +29 -0
- data/include/grpc/impl/channel_arg_names.h +12 -1
- data/include/grpc/impl/slice_type.h +1 -1
- data/include/grpc/module.modulemap +1 -0
- data/src/core/ext/filters/backend_metrics/backend_metric_filter.cc +54 -7
- data/src/core/ext/filters/backend_metrics/backend_metric_filter.h +20 -6
- data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +10 -13
- data/src/core/ext/filters/channel_idle/channel_idle_filter.h +18 -10
- data/src/core/ext/filters/channel_idle/legacy_channel_idle_filter.cc +326 -0
- data/src/core/ext/filters/channel_idle/legacy_channel_idle_filter.h +143 -0
- data/src/core/ext/filters/client_channel/backend_metric.cc +2 -2
- data/src/core/ext/filters/client_channel/client_channel.cc +32 -6
- data/src/core/ext/filters/client_channel/client_channel_internal.h +2 -0
- data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +54 -21
- data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +3 -2
- data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +2 -1
- data/src/core/ext/filters/client_channel/lb_policy/endpoint_list.cc +12 -15
- data/src/core/ext/filters/client_channel/lb_policy/endpoint_list.h +8 -5
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +139 -92
- data/src/core/ext/filters/client_channel/lb_policy/health_check_client.cc +9 -4
- data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +9 -4
- data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +10 -11
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +94 -93
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +5 -3
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +12 -15
- data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +38 -16
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +25 -28
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +10 -10
- data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/weighted_round_robin.cc +37 -35
- data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +11 -9
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +504 -461
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +232 -122
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +8 -6
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_override_host.cc +642 -251
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_override_host.h +2 -6
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_wrr_locality.cc +7 -8
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +2 -1
- data/src/core/ext/filters/client_channel/resolver/dns/event_engine/event_engine_client_channel_resolver.cc +3 -1
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +2 -2
- data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +2 -2
- data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +6 -8
- data/src/core/ext/filters/client_channel/resolver/xds/xds_dependency_manager.cc +1031 -0
- data/src/core/ext/filters/client_channel/resolver/xds/xds_dependency_manager.h +277 -0
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +128 -270
- data/src/core/ext/filters/client_channel/resolver/xds/{xds_resolver.h → xds_resolver_attributes.h} +5 -4
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver_trace.cc +25 -0
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver_trace.h +30 -0
- data/src/core/ext/filters/client_channel/retry_filter.cc +1 -0
- data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +35 -17
- data/src/core/ext/filters/deadline/deadline_filter.cc +12 -0
- data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +17 -13
- data/src/core/ext/filters/fault_injection/fault_injection_filter.h +13 -4
- data/src/core/ext/filters/http/client/http_client_filter.cc +23 -32
- data/src/core/ext/filters/http/client/http_client_filter.h +10 -5
- data/src/core/ext/filters/http/client_authority_filter.cc +14 -14
- data/src/core/ext/filters/http/client_authority_filter.h +12 -4
- data/src/core/ext/filters/http/http_filters_plugin.cc +42 -20
- data/src/core/ext/filters/http/message_compress/compression_filter.cc +55 -80
- data/src/core/ext/filters/http/message_compress/compression_filter.h +54 -12
- data/src/core/ext/filters/http/message_compress/legacy_compression_filter.cc +325 -0
- data/src/core/ext/filters/http/message_compress/legacy_compression_filter.h +139 -0
- data/src/core/ext/filters/http/server/http_server_filter.cc +41 -41
- data/src/core/ext/filters/http/server/http_server_filter.h +11 -4
- data/src/core/ext/filters/message_size/message_size_filter.cc +56 -76
- data/src/core/ext/filters/message_size/message_size_filter.h +35 -23
- data/src/core/ext/filters/rbac/rbac_filter.cc +15 -11
- data/src/core/ext/filters/rbac/rbac_filter.h +11 -4
- data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +25 -13
- data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +47 -50
- data/src/core/ext/filters/stateful_session/stateful_session_filter.h +21 -4
- data/src/core/ext/transport/chttp2/alpn/alpn.cc +1 -1
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +2 -2
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +11 -2
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +68 -145
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +3 -3
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +21 -82
- data/src/core/ext/transport/chttp2/transport/flow_control.h +1 -8
- data/src/core/ext/transport/chttp2/transport/frame.cc +506 -0
- data/src/core/ext/transport/chttp2/transport/frame.h +214 -0
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +1 -1
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +33 -79
- data/src/core/ext/transport/chttp2/transport/frame_settings.h +4 -7
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +27 -36
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +0 -2
- data/src/core/ext/transport/chttp2/transport/http2_settings.cc +122 -32
- data/src/core/ext/transport/chttp2/transport/http2_settings.h +142 -37
- data/src/core/ext/transport/chttp2/transport/internal.h +1 -22
- data/src/core/ext/transport/chttp2/transport/parsing.cc +23 -37
- data/src/core/ext/transport/chttp2/transport/writing.cc +26 -58
- data/src/core/ext/transport/inproc/inproc_transport.cc +172 -13
- data/src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb.h +712 -0
- data/src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb_minitable.c +151 -0
- data/src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb_minitable.h +33 -0
- data/src/core/ext/upbdefs-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upbdefs.c +133 -0
- data/src/core/ext/upbdefs-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upbdefs.h +50 -0
- data/src/core/ext/xds/certificate_provider_store.cc +2 -1
- data/src/core/ext/xds/certificate_provider_store.h +0 -5
- data/src/core/ext/xds/xds_api.cc +31 -18
- data/src/core/ext/xds/xds_api.h +2 -2
- data/src/core/ext/xds/xds_bootstrap.h +3 -0
- data/src/core/ext/xds/xds_certificate_provider.cc +88 -287
- data/src/core/ext/xds/xds_certificate_provider.h +44 -111
- data/src/core/ext/xds/xds_client.cc +420 -414
- data/src/core/ext/xds/xds_client.h +31 -22
- data/src/core/ext/xds/xds_client_grpc.cc +3 -1
- data/src/core/ext/xds/xds_cluster.cc +104 -11
- data/src/core/ext/xds/xds_cluster.h +9 -1
- data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +9 -5
- data/src/core/ext/xds/xds_common_types.cc +14 -10
- data/src/core/ext/xds/xds_endpoint.cc +9 -4
- data/src/core/ext/xds/xds_endpoint.h +5 -1
- data/src/core/ext/xds/xds_health_status.cc +12 -2
- data/src/core/ext/xds/xds_health_status.h +4 -2
- data/src/core/ext/xds/xds_http_rbac_filter.cc +5 -3
- data/src/core/ext/xds/xds_listener.cc +14 -8
- data/src/core/ext/xds/xds_resource_type_impl.h +6 -4
- data/src/core/ext/xds/xds_route_config.cc +34 -22
- data/src/core/ext/xds/xds_route_config.h +1 -0
- data/src/core/ext/xds/xds_server_config_fetcher.cc +61 -57
- data/src/core/ext/xds/xds_transport.h +3 -0
- data/src/core/ext/xds/xds_transport_grpc.cc +47 -50
- data/src/core/ext/xds/xds_transport_grpc.h +4 -0
- data/src/core/lib/channel/call_tracer.cc +12 -0
- data/src/core/lib/channel/call_tracer.h +17 -3
- data/src/core/lib/channel/channel_args.cc +24 -14
- data/src/core/lib/channel/channel_args.h +74 -13
- data/src/core/lib/channel/channel_stack.cc +27 -0
- data/src/core/lib/channel/channel_stack.h +10 -10
- data/src/core/lib/channel/connected_channel.cc +64 -18
- data/src/core/lib/channel/promise_based_filter.h +1041 -1
- data/src/core/lib/channel/server_call_tracer_filter.cc +43 -35
- data/src/core/lib/compression/compression_internal.cc +0 -3
- data/src/core/lib/event_engine/ares_resolver.cc +35 -14
- data/src/core/lib/event_engine/ares_resolver.h +9 -10
- data/src/core/lib/event_engine/cf_engine/dns_service_resolver.cc +8 -1
- data/src/core/lib/event_engine/posix_engine/native_posix_dns_resolver.cc +132 -0
- data/src/core/lib/event_engine/posix_engine/native_posix_dns_resolver.h +61 -0
- data/src/core/lib/event_engine/posix_engine/posix_engine.cc +52 -36
- data/src/core/lib/event_engine/posix_engine/posix_engine.h +4 -9
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.cc +11 -3
- data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +9 -2
- data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +7 -0
- data/src/core/lib/event_engine/posix_engine/timer_manager.cc +17 -27
- data/src/core/lib/event_engine/posix_engine/timer_manager.h +0 -3
- data/src/core/lib/event_engine/ref_counted_dns_resolver_interface.h +55 -0
- data/src/core/lib/event_engine/windows/native_windows_dns_resolver.cc +114 -0
- data/src/core/lib/event_engine/windows/native_windows_dns_resolver.h +51 -0
- data/src/core/lib/event_engine/windows/windows_engine.cc +7 -7
- data/src/core/lib/experiments/config.cc +13 -0
- data/src/core/lib/experiments/config.h +3 -0
- data/src/core/lib/experiments/experiments.cc +245 -366
- data/src/core/lib/experiments/experiments.h +50 -156
- data/src/core/lib/gprpp/debug_location.h +13 -0
- data/src/core/lib/gprpp/dual_ref_counted.h +36 -7
- data/src/core/lib/gprpp/orphanable.h +27 -0
- data/src/core/lib/gprpp/ref_counted.h +63 -22
- data/src/core/lib/gprpp/ref_counted_ptr.h +70 -27
- data/src/core/lib/gprpp/ref_counted_string.h +13 -0
- data/src/core/lib/gprpp/status_helper.cc +1 -2
- data/src/core/lib/iomgr/combiner.cc +15 -51
- data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +31 -0
- data/src/core/lib/iomgr/event_engine_shims/endpoint.h +16 -0
- data/src/core/lib/iomgr/tcp_client_posix.cc +4 -3
- data/src/core/lib/load_balancing/lb_policy.h +1 -1
- data/src/core/lib/promise/activity.cc +17 -2
- data/src/core/lib/promise/activity.h +5 -4
- data/src/core/lib/promise/all_ok.h +80 -0
- data/src/core/lib/promise/detail/join_state.h +2077 -0
- data/src/core/lib/promise/detail/promise_factory.h +1 -0
- data/src/core/lib/promise/detail/promise_like.h +8 -1
- data/src/core/lib/promise/detail/seq_state.h +3458 -150
- data/src/core/lib/promise/detail/status.h +42 -5
- data/src/core/lib/promise/for_each.h +13 -1
- data/src/core/lib/promise/if.h +4 -0
- data/src/core/lib/promise/latch.h +6 -3
- data/src/core/lib/promise/party.cc +33 -31
- data/src/core/lib/promise/party.h +142 -6
- data/src/core/lib/promise/poll.h +39 -13
- data/src/core/lib/promise/promise.h +4 -0
- data/src/core/lib/promise/seq.h +107 -7
- data/src/core/lib/promise/status_flag.h +196 -0
- data/src/core/lib/promise/try_join.h +132 -0
- data/src/core/lib/promise/try_seq.h +132 -10
- data/src/core/lib/resolver/endpoint_addresses.cc +0 -1
- data/src/core/lib/resolver/endpoint_addresses.h +48 -0
- data/src/core/lib/resource_quota/arena.h +2 -2
- data/src/core/lib/resource_quota/memory_quota.cc +57 -8
- data/src/core/lib/resource_quota/memory_quota.h +6 -0
- data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +14 -11
- data/src/core/lib/security/authorization/grpc_server_authz_filter.h +14 -5
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +4 -0
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +4 -0
- data/src/core/lib/security/credentials/external/external_account_credentials.cc +28 -20
- data/src/core/lib/security/credentials/external/external_account_credentials.h +4 -0
- data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +4 -0
- data/src/core/lib/security/credentials/external/file_external_account_credentials.h +4 -0
- data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +4 -0
- data/src/core/lib/security/credentials/external/url_external_account_credentials.h +4 -0
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +2 -1
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +0 -3
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +12 -0
- data/src/core/lib/security/credentials/tls/grpc_tls_crl_provider.cc +22 -5
- data/src/core/lib/security/credentials/tls/grpc_tls_crl_provider.h +1 -5
- data/src/core/lib/security/credentials/tls/tls_credentials.cc +16 -0
- data/src/core/lib/security/credentials/xds/xds_credentials.cc +21 -28
- data/src/core/lib/security/credentials/xds/xds_credentials.h +2 -4
- data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +4 -3
- data/src/core/lib/security/transport/auth_filters.h +71 -4
- data/src/core/lib/security/transport/client_auth_filter.cc +2 -4
- data/src/core/lib/security/transport/legacy_server_auth_filter.cc +244 -0
- data/src/core/lib/security/transport/server_auth_filter.cc +70 -90
- data/src/core/lib/slice/slice_buffer.h +3 -0
- data/src/core/lib/surface/builtins.cc +1 -1
- data/src/core/lib/surface/call.cc +683 -196
- data/src/core/lib/surface/call.h +26 -13
- data/src/core/lib/surface/call_trace.cc +42 -1
- data/src/core/lib/surface/channel.cc +0 -1
- data/src/core/lib/surface/channel.h +0 -6
- data/src/core/lib/surface/channel_init.h +26 -0
- data/src/core/lib/surface/init.cc +14 -8
- data/src/core/lib/surface/server.cc +256 -237
- data/src/core/lib/surface/server.h +26 -54
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/surface/wait_for_cq_end_op.h +94 -0
- data/src/core/lib/transport/call_final_info.cc +38 -0
- data/src/core/lib/transport/call_final_info.h +54 -0
- data/src/core/lib/transport/connectivity_state.cc +3 -2
- data/src/core/lib/transport/connectivity_state.h +4 -0
- data/src/core/lib/transport/metadata_batch.h +4 -4
- data/src/core/lib/transport/transport.cc +70 -19
- data/src/core/lib/transport/transport.h +395 -25
- data/src/core/plugin_registry/grpc_plugin_registry.cc +3 -0
- data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +0 -3
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +1 -1
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +1 -1
- data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +1 -1
- data/src/core/tsi/ssl_transport_security.cc +65 -43
- data/src/ruby/ext/grpc/rb_channel_args.c +3 -1
- data/src/ruby/ext/grpc/rb_grpc.c +0 -1
- data/src/ruby/ext/grpc/rb_grpc.h +0 -2
- 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/version.rb +1 -1
- data/third_party/upb/upb/reflection/def_pool.h +2 -2
- data/third_party/zlib/adler32.c +5 -27
- data/third_party/zlib/compress.c +5 -16
- data/third_party/zlib/crc32.c +86 -162
- data/third_party/zlib/deflate.c +233 -336
- data/third_party/zlib/deflate.h +8 -8
- data/third_party/zlib/gzguts.h +11 -12
- data/third_party/zlib/infback.c +7 -23
- data/third_party/zlib/inffast.c +1 -4
- data/third_party/zlib/inffast.h +1 -1
- data/third_party/zlib/inflate.c +30 -99
- data/third_party/zlib/inftrees.c +6 -11
- data/third_party/zlib/inftrees.h +3 -3
- data/third_party/zlib/trees.c +224 -302
- data/third_party/zlib/uncompr.c +4 -12
- data/third_party/zlib/zconf.h +6 -2
- data/third_party/zlib/zlib.h +191 -188
- data/third_party/zlib/zutil.c +16 -44
- data/third_party/zlib/zutil.h +10 -10
- metadata +35 -13
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +0 -1173
- data/src/core/lib/event_engine/memory_allocator.cc +0 -74
- data/src/core/lib/transport/pid_controller.cc +0 -51
- data/src/core/lib/transport/pid_controller.h +0 -116
- data/third_party/upb/upb/collections/array.h +0 -17
- data/third_party/upb/upb/collections/map.h +0 -17
- data/third_party/upb/upb/upb.hpp +0 -18
@@ -0,0 +1,139 @@
|
|
1
|
+
//
|
2
|
+
//
|
3
|
+
// Copyright 2020 gRPC authors.
|
4
|
+
//
|
5
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
// you may not use this file except in compliance with the License.
|
7
|
+
// You may obtain a copy of the License at
|
8
|
+
//
|
9
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
//
|
11
|
+
// Unless required by applicable law or agreed to in writing, software
|
12
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
// See the License for the specific language governing permissions and
|
15
|
+
// limitations under the License.
|
16
|
+
//
|
17
|
+
//
|
18
|
+
|
19
|
+
#ifndef GRPC_SRC_CORE_EXT_FILTERS_HTTP_MESSAGE_COMPRESS_LEGACY_COMPRESSION_FILTER_H
|
20
|
+
#define GRPC_SRC_CORE_EXT_FILTERS_HTTP_MESSAGE_COMPRESS_LEGACY_COMPRESSION_FILTER_H
|
21
|
+
|
22
|
+
#include <grpc/support/port_platform.h>
|
23
|
+
|
24
|
+
#include <stddef.h>
|
25
|
+
#include <stdint.h>
|
26
|
+
|
27
|
+
#include "absl/status/statusor.h"
|
28
|
+
#include "absl/types/optional.h"
|
29
|
+
|
30
|
+
#include <grpc/impl/compression_types.h>
|
31
|
+
|
32
|
+
#include "src/core/lib/channel/channel_args.h"
|
33
|
+
#include "src/core/lib/channel/channel_fwd.h"
|
34
|
+
#include "src/core/lib/channel/promise_based_filter.h"
|
35
|
+
#include "src/core/lib/compression/compression_internal.h"
|
36
|
+
#include "src/core/lib/promise/arena_promise.h"
|
37
|
+
#include "src/core/lib/transport/metadata_batch.h"
|
38
|
+
#include "src/core/lib/transport/transport.h"
|
39
|
+
|
40
|
+
namespace grpc_core {
|
41
|
+
|
42
|
+
/// Compression filter for messages.
|
43
|
+
///
|
44
|
+
/// See <grpc/compression.h> for the available compression settings.
|
45
|
+
///
|
46
|
+
/// Compression settings may come from:
|
47
|
+
/// - Channel configuration, as established at channel creation time.
|
48
|
+
/// - The metadata accompanying the outgoing data to be compressed. This is
|
49
|
+
/// taken as a request only. We may choose not to honor it. The metadata key
|
50
|
+
/// is given by \a GRPC_COMPRESSION_REQUEST_ALGORITHM_MD_KEY.
|
51
|
+
///
|
52
|
+
/// Compression can be disabled for concrete messages (for instance in order to
|
53
|
+
/// prevent CRIME/BEAST type attacks) by having the GRPC_WRITE_NO_COMPRESS set
|
54
|
+
/// in the MessageHandle flags.
|
55
|
+
///
|
56
|
+
/// The attempted compression mechanism is added to the resulting initial
|
57
|
+
/// metadata under the 'grpc-encoding' key.
|
58
|
+
///
|
59
|
+
/// If compression is actually performed, the MessageHandle's flag is modified
|
60
|
+
/// to incorporate GRPC_WRITE_INTERNAL_COMPRESS. Otherwise, and regardless of
|
61
|
+
/// the aforementioned 'grpc-encoding' metadata value, data will pass through
|
62
|
+
/// uncompressed.
|
63
|
+
|
64
|
+
class LegacyCompressionFilter : public ChannelFilter {
|
65
|
+
protected:
|
66
|
+
struct DecompressArgs {
|
67
|
+
grpc_compression_algorithm algorithm;
|
68
|
+
absl::optional<uint32_t> max_recv_message_length;
|
69
|
+
};
|
70
|
+
|
71
|
+
explicit LegacyCompressionFilter(const ChannelArgs& args);
|
72
|
+
|
73
|
+
grpc_compression_algorithm default_compression_algorithm() const {
|
74
|
+
return default_compression_algorithm_;
|
75
|
+
}
|
76
|
+
|
77
|
+
CompressionAlgorithmSet enabled_compression_algorithms() const {
|
78
|
+
return enabled_compression_algorithms_;
|
79
|
+
}
|
80
|
+
|
81
|
+
grpc_compression_algorithm HandleOutgoingMetadata(
|
82
|
+
grpc_metadata_batch& outgoing_metadata);
|
83
|
+
DecompressArgs HandleIncomingMetadata(
|
84
|
+
const grpc_metadata_batch& incoming_metadata);
|
85
|
+
|
86
|
+
// Compress one message synchronously.
|
87
|
+
MessageHandle CompressMessage(MessageHandle message,
|
88
|
+
grpc_compression_algorithm algorithm) const;
|
89
|
+
// Decompress one message synchronously.
|
90
|
+
absl::StatusOr<MessageHandle> DecompressMessage(MessageHandle message,
|
91
|
+
DecompressArgs args) const;
|
92
|
+
|
93
|
+
private:
|
94
|
+
// Max receive message length, if set.
|
95
|
+
absl::optional<uint32_t> max_recv_size_;
|
96
|
+
size_t message_size_service_config_parser_index_;
|
97
|
+
// The default, channel-level, compression algorithm.
|
98
|
+
grpc_compression_algorithm default_compression_algorithm_;
|
99
|
+
// Enabled compression algorithms.
|
100
|
+
CompressionAlgorithmSet enabled_compression_algorithms_;
|
101
|
+
// Is compression enabled?
|
102
|
+
bool enable_compression_;
|
103
|
+
// Is decompression enabled?
|
104
|
+
bool enable_decompression_;
|
105
|
+
};
|
106
|
+
|
107
|
+
class LegacyClientCompressionFilter final : public LegacyCompressionFilter {
|
108
|
+
public:
|
109
|
+
static const grpc_channel_filter kFilter;
|
110
|
+
|
111
|
+
static absl::StatusOr<LegacyClientCompressionFilter> Create(
|
112
|
+
const ChannelArgs& args, ChannelFilter::Args filter_args);
|
113
|
+
|
114
|
+
// Construct a promise for one call.
|
115
|
+
ArenaPromise<ServerMetadataHandle> MakeCallPromise(
|
116
|
+
CallArgs call_args, NextPromiseFactory next_promise_factory) override;
|
117
|
+
|
118
|
+
private:
|
119
|
+
using LegacyCompressionFilter::LegacyCompressionFilter;
|
120
|
+
};
|
121
|
+
|
122
|
+
class LegacyServerCompressionFilter final : public LegacyCompressionFilter {
|
123
|
+
public:
|
124
|
+
static const grpc_channel_filter kFilter;
|
125
|
+
|
126
|
+
static absl::StatusOr<LegacyServerCompressionFilter> Create(
|
127
|
+
const ChannelArgs& args, ChannelFilter::Args filter_args);
|
128
|
+
|
129
|
+
// Construct a promise for one call.
|
130
|
+
ArenaPromise<ServerMetadataHandle> MakeCallPromise(
|
131
|
+
CallArgs call_args, NextPromiseFactory next_promise_factory) override;
|
132
|
+
|
133
|
+
private:
|
134
|
+
using LegacyCompressionFilter::LegacyCompressionFilter;
|
135
|
+
};
|
136
|
+
|
137
|
+
} // namespace grpc_core
|
138
|
+
|
139
|
+
#endif // GRPC_SRC_CORE_EXT_FILTERS_HTTP_MESSAGE_COMPRESS_LEGACY_COMPRESSION_FILTER_H
|
@@ -49,6 +49,10 @@
|
|
49
49
|
|
50
50
|
namespace grpc_core {
|
51
51
|
|
52
|
+
const NoInterceptor HttpServerFilter::Call::OnClientToServerMessage;
|
53
|
+
const NoInterceptor HttpServerFilter::Call::OnServerToClientMessage;
|
54
|
+
const NoInterceptor HttpServerFilter::Call::OnFinalize;
|
55
|
+
|
52
56
|
const grpc_channel_filter HttpServerFilter::kFilter =
|
53
57
|
MakePromiseBasedFilter<HttpServerFilter, FilterEndpoint::kServer,
|
54
58
|
kFilterExaminesServerInitialMetadata>("http-server");
|
@@ -71,85 +75,81 @@ ServerMetadataHandle MalformedRequest(absl::string_view explanation) {
|
|
71
75
|
}
|
72
76
|
} // namespace
|
73
77
|
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
auto method = md->get(HttpMethodMetadata());
|
78
|
+
ServerMetadataHandle HttpServerFilter::Call::OnClientInitialMetadata(
|
79
|
+
ClientMetadata& md, HttpServerFilter* filter) {
|
80
|
+
auto method = md.get(HttpMethodMetadata());
|
79
81
|
if (method.has_value()) {
|
80
82
|
switch (*method) {
|
81
83
|
case HttpMethodMetadata::kPost:
|
82
84
|
break;
|
83
85
|
case HttpMethodMetadata::kPut:
|
84
|
-
if (allow_put_requests_) {
|
86
|
+
if (filter->allow_put_requests_) {
|
85
87
|
break;
|
86
88
|
}
|
87
89
|
ABSL_FALLTHROUGH_INTENDED;
|
88
90
|
case HttpMethodMetadata::kInvalid:
|
89
91
|
case HttpMethodMetadata::kGet:
|
90
|
-
return
|
92
|
+
return MalformedRequest("Bad method header");
|
91
93
|
}
|
92
94
|
} else {
|
93
|
-
return
|
95
|
+
return MalformedRequest("Missing :method header");
|
94
96
|
}
|
95
97
|
|
96
|
-
auto te = md
|
98
|
+
auto te = md.Take(TeMetadata());
|
97
99
|
if (te == TeMetadata::kTrailers) {
|
98
100
|
// Do nothing, ok.
|
99
101
|
} else if (!te.has_value()) {
|
100
|
-
return
|
102
|
+
return MalformedRequest("Missing :te header");
|
101
103
|
} else {
|
102
|
-
return
|
104
|
+
return MalformedRequest("Bad :te header");
|
103
105
|
}
|
104
106
|
|
105
|
-
auto scheme = md
|
107
|
+
auto scheme = md.Take(HttpSchemeMetadata());
|
106
108
|
if (scheme.has_value()) {
|
107
109
|
if (*scheme == HttpSchemeMetadata::kInvalid) {
|
108
|
-
return
|
110
|
+
return MalformedRequest("Bad :scheme header");
|
109
111
|
}
|
110
112
|
} else {
|
111
|
-
return
|
113
|
+
return MalformedRequest("Missing :scheme header");
|
112
114
|
}
|
113
115
|
|
114
|
-
md
|
116
|
+
md.Remove(ContentTypeMetadata());
|
115
117
|
|
116
|
-
Slice* path_slice = md
|
118
|
+
Slice* path_slice = md.get_pointer(HttpPathMetadata());
|
117
119
|
if (path_slice == nullptr) {
|
118
|
-
return
|
120
|
+
return MalformedRequest("Missing :path header");
|
119
121
|
}
|
120
122
|
|
121
|
-
if (md
|
122
|
-
absl::optional<Slice> host = md
|
123
|
+
if (md.get_pointer(HttpAuthorityMetadata()) == nullptr) {
|
124
|
+
absl::optional<Slice> host = md.Take(HostMetadata());
|
123
125
|
if (host.has_value()) {
|
124
|
-
md
|
126
|
+
md.Set(HttpAuthorityMetadata(), std::move(*host));
|
125
127
|
}
|
126
128
|
}
|
127
129
|
|
128
|
-
if (md
|
129
|
-
return
|
130
|
+
if (md.get_pointer(HttpAuthorityMetadata()) == nullptr) {
|
131
|
+
return MalformedRequest("Missing :authority header");
|
130
132
|
}
|
131
133
|
|
132
|
-
if (!surface_user_agent_) {
|
133
|
-
md
|
134
|
+
if (!filter->surface_user_agent_) {
|
135
|
+
md.Remove(UserAgentMetadata());
|
134
136
|
}
|
135
137
|
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
return md;
|
152
|
-
});
|
138
|
+
return nullptr;
|
139
|
+
}
|
140
|
+
|
141
|
+
void HttpServerFilter::Call::OnServerInitialMetadata(ServerMetadata& md) {
|
142
|
+
if (grpc_call_trace.enabled()) {
|
143
|
+
gpr_log(GPR_INFO, "%s[http-server] Write metadata",
|
144
|
+
Activity::current()->DebugTag().c_str());
|
145
|
+
}
|
146
|
+
FilterOutgoingMetadata(&md);
|
147
|
+
md.Set(HttpStatusMetadata(), 200);
|
148
|
+
md.Set(ContentTypeMetadata(), ContentTypeMetadata::kApplicationGrpc);
|
149
|
+
}
|
150
|
+
|
151
|
+
void HttpServerFilter::Call::OnServerTrailingMetadata(ServerMetadata& md) {
|
152
|
+
FilterOutgoingMetadata(&md);
|
153
153
|
}
|
154
154
|
|
155
155
|
absl::StatusOr<HttpServerFilter> HttpServerFilter::Create(
|
@@ -32,16 +32,23 @@
|
|
32
32
|
namespace grpc_core {
|
33
33
|
|
34
34
|
// Processes metadata on the server side for HTTP2 transports
|
35
|
-
class HttpServerFilter : public
|
35
|
+
class HttpServerFilter : public ImplementChannelFilter<HttpServerFilter> {
|
36
36
|
public:
|
37
37
|
static const grpc_channel_filter kFilter;
|
38
38
|
|
39
39
|
static absl::StatusOr<HttpServerFilter> Create(
|
40
40
|
const ChannelArgs& args, ChannelFilter::Args filter_args);
|
41
41
|
|
42
|
-
|
43
|
-
|
44
|
-
|
42
|
+
class Call {
|
43
|
+
public:
|
44
|
+
ServerMetadataHandle OnClientInitialMetadata(ClientMetadata& md,
|
45
|
+
HttpServerFilter* filter);
|
46
|
+
void OnServerInitialMetadata(ServerMetadata& md);
|
47
|
+
void OnServerTrailingMetadata(ServerMetadata& md);
|
48
|
+
static const NoInterceptor OnClientToServerMessage;
|
49
|
+
static const NoInterceptor OnServerToClientMessage;
|
50
|
+
static const NoInterceptor OnFinalize;
|
51
|
+
};
|
45
52
|
|
46
53
|
private:
|
47
54
|
HttpServerFilter(bool surface_user_agent, bool allow_put_requests)
|
@@ -50,6 +50,15 @@
|
|
50
50
|
|
51
51
|
namespace grpc_core {
|
52
52
|
|
53
|
+
const NoInterceptor ClientMessageSizeFilter::Call::OnClientInitialMetadata;
|
54
|
+
const NoInterceptor ClientMessageSizeFilter::Call::OnServerInitialMetadata;
|
55
|
+
const NoInterceptor ClientMessageSizeFilter::Call::OnServerTrailingMetadata;
|
56
|
+
const NoInterceptor ClientMessageSizeFilter::Call::OnFinalize;
|
57
|
+
const NoInterceptor ServerMessageSizeFilter::Call::OnClientInitialMetadata;
|
58
|
+
const NoInterceptor ServerMessageSizeFilter::Call::OnServerInitialMetadata;
|
59
|
+
const NoInterceptor ServerMessageSizeFilter::Call::OnServerTrailingMetadata;
|
60
|
+
const NoInterceptor ServerMessageSizeFilter::Call::OnFinalize;
|
61
|
+
|
53
62
|
//
|
54
63
|
// MessageSizeParsedConfig
|
55
64
|
//
|
@@ -138,60 +147,6 @@ const grpc_channel_filter ServerMessageSizeFilter::kFilter =
|
|
138
147
|
kFilterExaminesOutboundMessages |
|
139
148
|
kFilterExaminesInboundMessages>("message_size");
|
140
149
|
|
141
|
-
class MessageSizeFilter::CallBuilder {
|
142
|
-
private:
|
143
|
-
auto Interceptor(uint32_t max_length, bool is_send) {
|
144
|
-
return [max_length, is_send,
|
145
|
-
err = err_](MessageHandle msg) -> absl::optional<MessageHandle> {
|
146
|
-
if (grpc_call_trace.enabled()) {
|
147
|
-
gpr_log(GPR_INFO, "%s[message_size] %s len:%" PRIdPTR " max:%d",
|
148
|
-
Activity::current()->DebugTag().c_str(),
|
149
|
-
is_send ? "send" : "recv", msg->payload()->Length(),
|
150
|
-
max_length);
|
151
|
-
}
|
152
|
-
if (msg->payload()->Length() > max_length) {
|
153
|
-
if (err->is_set()) return std::move(msg);
|
154
|
-
auto r = GetContext<Arena>()->MakePooled<ServerMetadata>(
|
155
|
-
GetContext<Arena>());
|
156
|
-
r->Set(GrpcStatusMetadata(), GRPC_STATUS_RESOURCE_EXHAUSTED);
|
157
|
-
r->Set(GrpcMessageMetadata(),
|
158
|
-
Slice::FromCopiedString(
|
159
|
-
absl::StrFormat("%s message larger than max (%u vs. %d)",
|
160
|
-
is_send ? "Sent" : "Received",
|
161
|
-
msg->payload()->Length(), max_length)));
|
162
|
-
err->Set(std::move(r));
|
163
|
-
return absl::nullopt;
|
164
|
-
}
|
165
|
-
return std::move(msg);
|
166
|
-
};
|
167
|
-
}
|
168
|
-
|
169
|
-
public:
|
170
|
-
explicit CallBuilder(const MessageSizeParsedConfig& limits)
|
171
|
-
: limits_(limits) {}
|
172
|
-
|
173
|
-
template <typename T>
|
174
|
-
void AddSend(T* pipe_end) {
|
175
|
-
if (!limits_.max_send_size().has_value()) return;
|
176
|
-
pipe_end->InterceptAndMap(Interceptor(*limits_.max_send_size(), true));
|
177
|
-
}
|
178
|
-
template <typename T>
|
179
|
-
void AddRecv(T* pipe_end) {
|
180
|
-
if (!limits_.max_recv_size().has_value()) return;
|
181
|
-
pipe_end->InterceptAndMap(Interceptor(*limits_.max_recv_size(), false));
|
182
|
-
}
|
183
|
-
|
184
|
-
ArenaPromise<ServerMetadataHandle> Run(
|
185
|
-
CallArgs call_args, NextPromiseFactory next_promise_factory) {
|
186
|
-
return Race(err_->Wait(), next_promise_factory(std::move(call_args)));
|
187
|
-
}
|
188
|
-
|
189
|
-
private:
|
190
|
-
Latch<ServerMetadataHandle>* const err_ =
|
191
|
-
GetContext<Arena>()->ManagedNew<Latch<ServerMetadataHandle>>();
|
192
|
-
MessageSizeParsedConfig limits_;
|
193
|
-
};
|
194
|
-
|
195
150
|
absl::StatusOr<ClientMessageSizeFilter> ClientMessageSizeFilter::Create(
|
196
151
|
const ChannelArgs& args, ChannelFilter::Args) {
|
197
152
|
return ClientMessageSizeFilter(args);
|
@@ -202,20 +157,40 @@ absl::StatusOr<ServerMessageSizeFilter> ServerMessageSizeFilter::Create(
|
|
202
157
|
return ServerMessageSizeFilter(args);
|
203
158
|
}
|
204
159
|
|
205
|
-
|
206
|
-
|
160
|
+
namespace {
|
161
|
+
ServerMetadataHandle CheckPayload(const Message& msg,
|
162
|
+
absl::optional<uint32_t> max_length,
|
163
|
+
bool is_send) {
|
164
|
+
if (!max_length.has_value()) return nullptr;
|
165
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_call_trace)) {
|
166
|
+
gpr_log(GPR_INFO, "%s[message_size] %s len:%" PRIdPTR " max:%d",
|
167
|
+
Activity::current()->DebugTag().c_str(), is_send ? "send" : "recv",
|
168
|
+
msg.payload()->Length(), *max_length);
|
169
|
+
}
|
170
|
+
if (msg.payload()->Length() <= *max_length) return nullptr;
|
171
|
+
auto r = GetContext<Arena>()->MakePooled<ServerMetadata>(GetContext<Arena>());
|
172
|
+
r->Set(GrpcStatusMetadata(), GRPC_STATUS_RESOURCE_EXHAUSTED);
|
173
|
+
r->Set(GrpcMessageMetadata(), Slice::FromCopiedString(absl::StrFormat(
|
174
|
+
"%s message larger than max (%u vs. %d)",
|
175
|
+
is_send ? "Sent" : "Received",
|
176
|
+
msg.payload()->Length(), *max_length)));
|
177
|
+
return r;
|
178
|
+
}
|
179
|
+
} // namespace
|
180
|
+
|
181
|
+
ClientMessageSizeFilter::Call::Call(ClientMessageSizeFilter* filter)
|
182
|
+
: limits_(filter->parsed_config_) {
|
207
183
|
// Get max sizes from channel data, then merge in per-method config values.
|
208
184
|
// Note: Per-method config is only available on the client, so we
|
209
185
|
// apply the max request size to the send limit and the max response
|
210
186
|
// size to the receive limit.
|
211
|
-
MessageSizeParsedConfig limits = this->limits();
|
212
187
|
const MessageSizeParsedConfig* config_from_call_context =
|
213
188
|
MessageSizeParsedConfig::GetFromCallContext(
|
214
189
|
GetContext<grpc_call_context_element>(),
|
215
|
-
service_config_parser_index_);
|
190
|
+
filter->service_config_parser_index_);
|
216
191
|
if (config_from_call_context != nullptr) {
|
217
|
-
absl::optional<uint32_t> max_send_size =
|
218
|
-
absl::optional<uint32_t> max_recv_size =
|
192
|
+
absl::optional<uint32_t> max_send_size = limits_.max_send_size();
|
193
|
+
absl::optional<uint32_t> max_recv_size = limits_.max_recv_size();
|
219
194
|
if (config_from_call_context->max_send_size().has_value() &&
|
220
195
|
(!max_send_size.has_value() ||
|
221
196
|
*config_from_call_context->max_send_size() < *max_send_size)) {
|
@@ -226,21 +201,28 @@ ArenaPromise<ServerMetadataHandle> ClientMessageSizeFilter::MakeCallPromise(
|
|
226
201
|
*config_from_call_context->max_recv_size() < *max_recv_size)) {
|
227
202
|
max_recv_size = *config_from_call_context->max_recv_size();
|
228
203
|
}
|
229
|
-
|
204
|
+
limits_ = MessageSizeParsedConfig(max_send_size, max_recv_size);
|
230
205
|
}
|
206
|
+
}
|
207
|
+
|
208
|
+
ServerMetadataHandle ServerMessageSizeFilter::Call::OnClientToServerMessage(
|
209
|
+
const Message& message, ServerMessageSizeFilter* filter) {
|
210
|
+
return CheckPayload(message, filter->parsed_config_.max_recv_size(), false);
|
211
|
+
}
|
212
|
+
|
213
|
+
ServerMetadataHandle ServerMessageSizeFilter::Call::OnServerToClientMessage(
|
214
|
+
const Message& message, ServerMessageSizeFilter* filter) {
|
215
|
+
return CheckPayload(message, filter->parsed_config_.max_send_size(), true);
|
216
|
+
}
|
231
217
|
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
return b.Run(std::move(call_args), std::move(next_promise_factory));
|
218
|
+
ServerMetadataHandle ClientMessageSizeFilter::Call::OnClientToServerMessage(
|
219
|
+
const Message& message) {
|
220
|
+
return CheckPayload(message, limits_.max_send_size(), true);
|
236
221
|
}
|
237
222
|
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
b.AddSend(call_args.server_to_client_messages);
|
242
|
-
b.AddRecv(call_args.client_to_server_messages);
|
243
|
-
return b.Run(std::move(call_args), std::move(next_promise_factory));
|
223
|
+
ServerMetadataHandle ClientMessageSizeFilter::Call::OnServerToClientMessage(
|
224
|
+
const Message& message) {
|
225
|
+
return CheckPayload(message, limits_.max_recv_size(), false);
|
244
226
|
}
|
245
227
|
|
246
228
|
namespace {
|
@@ -258,12 +240,10 @@ bool HasMessageSizeLimits(const ChannelArgs& channel_args) {
|
|
258
240
|
void RegisterMessageSizeFilter(CoreConfiguration::Builder* builder) {
|
259
241
|
MessageSizeParser::Register(builder);
|
260
242
|
builder->channel_init()
|
261
|
-
->RegisterFilter(GRPC_CLIENT_SUBCHANNEL
|
262
|
-
&ClientMessageSizeFilter::kFilter)
|
243
|
+
->RegisterFilter<ClientMessageSizeFilter>(GRPC_CLIENT_SUBCHANNEL)
|
263
244
|
.ExcludeFromMinimalStack();
|
264
245
|
builder->channel_init()
|
265
|
-
->RegisterFilter(GRPC_CLIENT_DIRECT_CHANNEL
|
266
|
-
&ClientMessageSizeFilter::kFilter)
|
246
|
+
->RegisterFilter<ClientMessageSizeFilter>(GRPC_CLIENT_DIRECT_CHANNEL)
|
267
247
|
.ExcludeFromMinimalStack()
|
268
248
|
.If(HasMessageSizeLimits)
|
269
249
|
// TODO(ctiller): ordering constraint is here to match the ordering that
|
@@ -271,7 +251,7 @@ void RegisterMessageSizeFilter(CoreConfiguration::Builder* builder) {
|
|
271
251
|
// filters from first principles.
|
272
252
|
.Before({&grpc_client_deadline_filter});
|
273
253
|
builder->channel_init()
|
274
|
-
->RegisterFilter(GRPC_SERVER_CHANNEL
|
254
|
+
->RegisterFilter<ServerMessageSizeFilter>(GRPC_SERVER_CHANNEL)
|
275
255
|
.ExcludeFromMinimalStack()
|
276
256
|
.If(HasMessageSizeLimits)
|
277
257
|
// TODO(ctiller): ordering constraint is here to match the ordering that
|
@@ -86,48 +86,60 @@ class MessageSizeParser : public ServiceConfigParser::Parser {
|
|
86
86
|
absl::optional<uint32_t> GetMaxRecvSizeFromChannelArgs(const ChannelArgs& args);
|
87
87
|
absl::optional<uint32_t> GetMaxSendSizeFromChannelArgs(const ChannelArgs& args);
|
88
88
|
|
89
|
-
class
|
90
|
-
|
91
|
-
explicit MessageSizeFilter(const ChannelArgs& args)
|
92
|
-
: limits_(MessageSizeParsedConfig::GetFromChannelArgs(args)) {}
|
93
|
-
|
94
|
-
class CallBuilder;
|
95
|
-
|
96
|
-
const MessageSizeParsedConfig& limits() const { return limits_; }
|
97
|
-
|
98
|
-
private:
|
99
|
-
MessageSizeParsedConfig limits_;
|
100
|
-
};
|
101
|
-
|
102
|
-
class ServerMessageSizeFilter final : public MessageSizeFilter {
|
89
|
+
class ServerMessageSizeFilter final
|
90
|
+
: public ImplementChannelFilter<ServerMessageSizeFilter> {
|
103
91
|
public:
|
104
92
|
static const grpc_channel_filter kFilter;
|
105
93
|
|
106
94
|
static absl::StatusOr<ServerMessageSizeFilter> Create(
|
107
95
|
const ChannelArgs& args, ChannelFilter::Args filter_args);
|
108
96
|
|
109
|
-
|
110
|
-
|
111
|
-
|
97
|
+
class Call {
|
98
|
+
public:
|
99
|
+
static const NoInterceptor OnClientInitialMetadata;
|
100
|
+
static const NoInterceptor OnServerInitialMetadata;
|
101
|
+
static const NoInterceptor OnServerTrailingMetadata;
|
102
|
+
static const NoInterceptor OnFinalize;
|
103
|
+
ServerMetadataHandle OnClientToServerMessage(
|
104
|
+
const Message& message, ServerMessageSizeFilter* filter);
|
105
|
+
ServerMetadataHandle OnServerToClientMessage(
|
106
|
+
const Message& message, ServerMessageSizeFilter* filter);
|
107
|
+
};
|
112
108
|
|
113
109
|
private:
|
114
|
-
|
110
|
+
explicit ServerMessageSizeFilter(const ChannelArgs& args)
|
111
|
+
: parsed_config_(MessageSizeParsedConfig::GetFromChannelArgs(args)) {}
|
112
|
+
const MessageSizeParsedConfig parsed_config_;
|
115
113
|
};
|
116
114
|
|
117
|
-
class ClientMessageSizeFilter final
|
115
|
+
class ClientMessageSizeFilter final
|
116
|
+
: public ImplementChannelFilter<ClientMessageSizeFilter> {
|
118
117
|
public:
|
119
118
|
static const grpc_channel_filter kFilter;
|
120
119
|
|
121
120
|
static absl::StatusOr<ClientMessageSizeFilter> Create(
|
122
121
|
const ChannelArgs& args, ChannelFilter::Args filter_args);
|
123
122
|
|
124
|
-
|
125
|
-
|
126
|
-
|
123
|
+
class Call {
|
124
|
+
public:
|
125
|
+
explicit Call(ClientMessageSizeFilter* filter);
|
126
|
+
|
127
|
+
static const NoInterceptor OnClientInitialMetadata;
|
128
|
+
static const NoInterceptor OnServerInitialMetadata;
|
129
|
+
static const NoInterceptor OnServerTrailingMetadata;
|
130
|
+
static const NoInterceptor OnFinalize;
|
131
|
+
ServerMetadataHandle OnClientToServerMessage(const Message& message);
|
132
|
+
ServerMetadataHandle OnServerToClientMessage(const Message& message);
|
133
|
+
|
134
|
+
private:
|
135
|
+
MessageSizeParsedConfig limits_;
|
136
|
+
};
|
127
137
|
|
128
138
|
private:
|
139
|
+
explicit ClientMessageSizeFilter(const ChannelArgs& args)
|
140
|
+
: parsed_config_(MessageSizeParsedConfig::GetFromChannelArgs(args)) {}
|
129
141
|
const size_t service_config_parser_index_{MessageSizeParser::ParserIndex()};
|
130
|
-
|
142
|
+
const MessageSizeParsedConfig parsed_config_;
|
131
143
|
};
|
132
144
|
|
133
145
|
} // namespace grpc_core
|
@@ -43,8 +43,14 @@
|
|
43
43
|
|
44
44
|
namespace grpc_core {
|
45
45
|
|
46
|
-
|
47
|
-
|
46
|
+
const NoInterceptor RbacFilter::Call::OnServerInitialMetadata;
|
47
|
+
const NoInterceptor RbacFilter::Call::OnServerTrailingMetadata;
|
48
|
+
const NoInterceptor RbacFilter::Call::OnClientToServerMessage;
|
49
|
+
const NoInterceptor RbacFilter::Call::OnServerToClientMessage;
|
50
|
+
const NoInterceptor RbacFilter::Call::OnFinalize;
|
51
|
+
|
52
|
+
absl::Status RbacFilter::Call::OnClientInitialMetadata(ClientMetadata& md,
|
53
|
+
RbacFilter* filter) {
|
48
54
|
// Fetch and apply the rbac policy from the service config.
|
49
55
|
auto* service_config_call_data = static_cast<ServiceConfigCallData*>(
|
50
56
|
GetContext<
|
@@ -52,21 +58,19 @@ ArenaPromise<ServerMetadataHandle> RbacFilter::MakeCallPromise(
|
|
52
58
|
.value);
|
53
59
|
auto* method_params = static_cast<RbacMethodParsedConfig*>(
|
54
60
|
service_config_call_data->GetMethodParsedConfig(
|
55
|
-
service_config_parser_index_));
|
61
|
+
filter->service_config_parser_index_));
|
56
62
|
if (method_params == nullptr) {
|
57
|
-
return
|
58
|
-
absl::PermissionDeniedError("No RBAC policy found.")));
|
63
|
+
return absl::PermissionDeniedError("No RBAC policy found.");
|
59
64
|
} else {
|
60
|
-
auto* authorization_engine =
|
65
|
+
auto* authorization_engine =
|
66
|
+
method_params->authorization_engine(filter->index_);
|
61
67
|
if (authorization_engine
|
62
|
-
->Evaluate(EvaluateArgs(
|
63
|
-
&per_channel_evaluate_args_))
|
68
|
+
->Evaluate(EvaluateArgs(&md, &filter->per_channel_evaluate_args_))
|
64
69
|
.type == AuthorizationEngine::Decision::Type::kDeny) {
|
65
|
-
return
|
66
|
-
absl::PermissionDeniedError("Unauthorized RPC rejected")));
|
70
|
+
return absl::PermissionDeniedError("Unauthorized RPC rejected");
|
67
71
|
}
|
68
72
|
}
|
69
|
-
return
|
73
|
+
return absl::OkStatus();
|
70
74
|
}
|
71
75
|
|
72
76
|
const grpc_channel_filter RbacFilter::kFilterVtable =
|
@@ -34,7 +34,7 @@ namespace grpc_core {
|
|
34
34
|
|
35
35
|
// Filter used when xDS server config fetcher provides a configuration with an
|
36
36
|
// HTTP RBAC filter. Also serves as the type for channel data for the filter.
|
37
|
-
class RbacFilter : public
|
37
|
+
class RbacFilter : public ImplementChannelFilter<RbacFilter> {
|
38
38
|
public:
|
39
39
|
// This channel filter is intended to be used by connections on xDS enabled
|
40
40
|
// servers configured with RBAC. The RBAC filter fetches the RBAC policy from
|
@@ -45,9 +45,16 @@ class RbacFilter : public ChannelFilter {
|
|
45
45
|
static absl::StatusOr<RbacFilter> Create(const ChannelArgs& args,
|
46
46
|
ChannelFilter::Args filter_args);
|
47
47
|
|
48
|
-
|
49
|
-
|
50
|
-
|
48
|
+
class Call {
|
49
|
+
public:
|
50
|
+
absl::Status OnClientInitialMetadata(ClientMetadata& md,
|
51
|
+
RbacFilter* filter);
|
52
|
+
static const NoInterceptor OnServerInitialMetadata;
|
53
|
+
static const NoInterceptor OnServerTrailingMetadata;
|
54
|
+
static const NoInterceptor OnClientToServerMessage;
|
55
|
+
static const NoInterceptor OnServerToClientMessage;
|
56
|
+
static const NoInterceptor OnFinalize;
|
57
|
+
};
|
51
58
|
|
52
59
|
private:
|
53
60
|
RbacFilter(size_t index,
|