[call-v3] Convert ClientAuthorityFilter (#35469)

Closes #35469

COPYBARA_INTEGRATE_REVIEW=https://github.com/grpc/grpc/pull/35469 from ctiller:caf 1dffe24fcb
PiperOrigin-RevId: 597040037
This commit is contained in:
Craig Tiller 2024-01-09 14:09:09 -08:00 committed by Copybara-Service
parent 3f8af9a74c
commit 4105425da5
2 changed files with 22 additions and 13 deletions

View File

@ -37,6 +37,12 @@
namespace grpc_core {
const NoInterceptor ClientAuthorityFilter::Call::OnServerInitialMetadata;
const NoInterceptor ClientAuthorityFilter::Call::OnServerTrailingMetadata;
const NoInterceptor ClientAuthorityFilter::Call::OnClientToServerMessage;
const NoInterceptor ClientAuthorityFilter::Call::OnServerToClientMessage;
const NoInterceptor ClientAuthorityFilter::Call::OnFinalize;
absl::StatusOr<ClientAuthorityFilter> ClientAuthorityFilter::Create(
const ChannelArgs& args, ChannelFilter::Args) {
absl::optional<absl::string_view> default_authority =
@ -49,17 +55,12 @@ absl::StatusOr<ClientAuthorityFilter> ClientAuthorityFilter::Create(
return ClientAuthorityFilter(Slice::FromCopiedString(*default_authority));
}
ArenaPromise<ServerMetadataHandle> ClientAuthorityFilter::MakeCallPromise(
CallArgs call_args, NextPromiseFactory next_promise_factory) {
void ClientAuthorityFilter::Call::OnClientInitialMetadata(
ClientMetadata& md, ClientAuthorityFilter* filter) {
// If no authority is set, set the default authority.
if (call_args.client_initial_metadata->get_pointer(HttpAuthorityMetadata()) ==
nullptr) {
call_args.client_initial_metadata->Set(HttpAuthorityMetadata(),
default_authority_.Ref());
if (md.get_pointer(HttpAuthorityMetadata()) == nullptr) {
md.Set(HttpAuthorityMetadata(), filter->default_authority_.Ref());
}
// We have no asynchronous work, so we can just ask the next promise to run,
// passing down initial_metadata.
return next_promise_factory(std::move(call_args));
}
const grpc_channel_filter ClientAuthorityFilter::kFilter =

View File

@ -34,16 +34,24 @@
namespace grpc_core {
class ClientAuthorityFilter final : public ChannelFilter {
class ClientAuthorityFilter final
: public ImplementChannelFilter<ClientAuthorityFilter> {
public:
static const grpc_channel_filter kFilter;
static absl::StatusOr<ClientAuthorityFilter> Create(const ChannelArgs& args,
ChannelFilter::Args);
// Construct a promise for one call.
ArenaPromise<ServerMetadataHandle> MakeCallPromise(
CallArgs call_args, NextPromiseFactory next_promise_factory) override;
class Call {
public:
void OnClientInitialMetadata(ClientMetadata& md,
ClientAuthorityFilter* filter);
static const NoInterceptor OnServerInitialMetadata;
static const NoInterceptor OnServerTrailingMetadata;
static const NoInterceptor OnClientToServerMessage;
static const NoInterceptor OnServerToClientMessage;
static const NoInterceptor OnFinalize;
};
private:
explicit ClientAuthorityFilter(Slice default_authority)