|
|
|
@ -160,7 +160,7 @@ absl::StatusOr<ServerMessageSizeFilter> ServerMessageSizeFilter::Create( |
|
|
|
|
namespace { |
|
|
|
|
ServerMetadataHandle CheckPayload(const Message& msg, |
|
|
|
|
absl::optional<uint32_t> max_length, |
|
|
|
|
bool is_send) { |
|
|
|
|
bool is_client, bool is_send) { |
|
|
|
|
if (!max_length.has_value()) return nullptr; |
|
|
|
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_call_trace)) { |
|
|
|
|
gpr_log(GPR_INFO, "%s[message_size] %s len:%" PRIdPTR " max:%d", |
|
|
|
@ -170,10 +170,11 @@ ServerMetadataHandle CheckPayload(const Message& msg, |
|
|
|
|
if (msg.payload()->Length() <= *max_length) return nullptr; |
|
|
|
|
auto r = GetContext<Arena>()->MakePooled<ServerMetadata>(GetContext<Arena>()); |
|
|
|
|
r->Set(GrpcStatusMetadata(), GRPC_STATUS_RESOURCE_EXHAUSTED); |
|
|
|
|
r->Set(GrpcMessageMetadata(), Slice::FromCopiedString(absl::StrFormat( |
|
|
|
|
"%s message larger than max (%u vs. %d)", |
|
|
|
|
is_send ? "Sent" : "Received", |
|
|
|
|
msg.payload()->Length(), *max_length))); |
|
|
|
|
r->Set(GrpcMessageMetadata(), |
|
|
|
|
Slice::FromCopiedString(absl::StrFormat( |
|
|
|
|
"%s: %s message larger than max (%u vs. %d)", |
|
|
|
|
is_client ? "CLIENT" : "SERVER", is_send ? "Sent" : "Received", |
|
|
|
|
msg.payload()->Length(), *max_length))); |
|
|
|
|
return r; |
|
|
|
|
} |
|
|
|
|
} // namespace
|
|
|
|
@ -207,22 +208,26 @@ ClientMessageSizeFilter::Call::Call(ClientMessageSizeFilter* filter) |
|
|
|
|
|
|
|
|
|
ServerMetadataHandle ServerMessageSizeFilter::Call::OnClientToServerMessage( |
|
|
|
|
const Message& message, ServerMessageSizeFilter* filter) { |
|
|
|
|
return CheckPayload(message, filter->parsed_config_.max_recv_size(), false); |
|
|
|
|
return CheckPayload(message, filter->parsed_config_.max_recv_size(), |
|
|
|
|
/*is_client=*/false, false); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
ServerMetadataHandle ServerMessageSizeFilter::Call::OnServerToClientMessage( |
|
|
|
|
const Message& message, ServerMessageSizeFilter* filter) { |
|
|
|
|
return CheckPayload(message, filter->parsed_config_.max_send_size(), true); |
|
|
|
|
return CheckPayload(message, filter->parsed_config_.max_send_size(), |
|
|
|
|
/*is_client=*/false, true); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
ServerMetadataHandle ClientMessageSizeFilter::Call::OnClientToServerMessage( |
|
|
|
|
const Message& message) { |
|
|
|
|
return CheckPayload(message, limits_.max_send_size(), true); |
|
|
|
|
return CheckPayload(message, limits_.max_send_size(), /*is_client=*/true, |
|
|
|
|
true); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
ServerMetadataHandle ClientMessageSizeFilter::Call::OnServerToClientMessage( |
|
|
|
|
const Message& message) { |
|
|
|
|
return CheckPayload(message, limits_.max_recv_size(), false); |
|
|
|
|
return CheckPayload(message, limits_.max_recv_size(), /*is_client=*/true, |
|
|
|
|
false); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
namespace { |
|
|
|
|