[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 4b6d80ee7f
PiperOrigin-RevId: 588200784
pull/35226/head^2
Craig Tiller 1 year ago committed by Copybara-Service
parent 1a086609d7
commit e8d9f222f5
  1. 22
      src/core/lib/surface/server.cc
  2. 3
      src/core/lib/surface/server.h

@ -1331,7 +1331,10 @@ void Server::ChannelData::InitTransport(RefCountedPtr<Server> 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<ChannelData*>(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<Server::ChannelData*>(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*/,

@ -268,8 +268,7 @@ class Server : public InternallyRefCounted<Server>,
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_);

Loading…
Cancel
Save