From e8d9f222f551427d4c65cc37002de70f16982664 Mon Sep 17 00:00:00 2001 From: Craig Tiller Date: Tue, 5 Dec 2023 15:05:31 -0800 Subject: [PATCH] [server] Make SetRegisteredMethodOnMetadata a method, not a static member fn (#35221) As part of the call-v3 work I'll be making a call to this code via a different path shortly, and separating the C-style callback piece out helps that work Closes #35221 COPYBARA_INTEGRATE_REVIEW=https://github.com/grpc/grpc/pull/35221 from ctiller:cg-registered-method 4b6d80ee7f202cb083e2a3cb9811ce2d6a2cd269 PiperOrigin-RevId: 588200784 --- src/core/lib/surface/server.cc | 22 ++++++++++++---------- src/core/lib/surface/server.h | 3 +-- 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/src/core/lib/surface/server.cc b/src/core/lib/surface/server.cc index a56f58d98e4..037e2b59e0b 100644 --- a/src/core/lib/surface/server.cc +++ b/src/core/lib/surface/server.cc @@ -1331,7 +1331,10 @@ void Server::ChannelData::InitTransport(RefCountedPtr server, op->set_accept_stream = true; op->set_accept_stream_fn = AcceptStream; if (IsRegisteredMethodLookupInTransportEnabled()) { - op->set_registered_method_matcher_fn = SetRegisteredMethodOnMetadata; + op->set_registered_method_matcher_fn = [](void* arg, + ClientMetadata* metadata) { + static_cast(arg)->SetRegisteredMethodOnMetadata(*metadata); + }; } // op->set_registered_method_matcher_fn = Registered op->set_accept_stream_user_data = this; @@ -1387,30 +1390,29 @@ Server::ChannelRegisteredMethod* Server::ChannelData::GetRegisteredMethod( } void Server::ChannelData::SetRegisteredMethodOnMetadata( - void* arg, ServerMetadata* metadata) { - auto* chand = static_cast(arg); - auto* authority = metadata->get_pointer(HttpAuthorityMetadata()); + ClientMetadata& metadata) { + auto* authority = metadata.get_pointer(HttpAuthorityMetadata()); if (authority == nullptr) { - authority = metadata->get_pointer(HostMetadata()); + authority = metadata.get_pointer(HostMetadata()); if (authority == nullptr) { // Authority not being set is an RPC error. return; } } - auto* path = metadata->get_pointer(HttpPathMetadata()); + auto* path = metadata.get_pointer(HttpPathMetadata()); if (path == nullptr) { // Path not being set would result in an RPC error. return; } ChannelRegisteredMethod* method; if (!IsRegisteredMethodsMapEnabled()) { - method = chand->GetRegisteredMethod(authority->c_slice(), path->c_slice()); + method = GetRegisteredMethod(authority->c_slice(), path->c_slice()); } else { - method = chand->GetRegisteredMethod(authority->as_string_view(), - path->as_string_view()); + method = GetRegisteredMethod(authority->as_string_view(), + path->as_string_view()); } // insert in metadata - metadata->Set(GrpcRegisteredMethod(), method); + metadata.Set(GrpcRegisteredMethod(), method); } void Server::ChannelData::AcceptStream(void* arg, Transport* /*transport*/, diff --git a/src/core/lib/surface/server.h b/src/core/lib/surface/server.h index f5999bcda30..4e181c8bb37 100644 --- a/src/core/lib/surface/server.h +++ b/src/core/lib/surface/server.h @@ -268,8 +268,7 @@ class Server : public InternallyRefCounted, static void AcceptStream(void* arg, Transport* /*transport*/, const void* transport_server_data); - static void SetRegisteredMethodOnMetadata(void* arg, - ServerMetadata* metadata); + void SetRegisteredMethodOnMetadata(ClientMetadata& metadata); void Destroy() ABSL_EXCLUSIVE_LOCKS_REQUIRED(server_->mu_global_);