aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/cpp/server
diff options
context:
space:
mode:
Diffstat (limited to 'src/cpp/server')
-rw-r--r--src/cpp/server/secure_server_credentials.cc37
-rw-r--r--src/cpp/server/secure_server_credentials.h5
2 files changed, 26 insertions, 16 deletions
diff --git a/src/cpp/server/secure_server_credentials.cc b/src/cpp/server/secure_server_credentials.cc
index e5f5c3041c..fab538f1c4 100644
--- a/src/cpp/server/secure_server_credentials.cc
+++ b/src/cpp/server/secure_server_credentials.cc
@@ -44,27 +44,36 @@
namespace grpc {
void AuthMetadataProcessorAyncWrapper::Process(
- void* self, grpc_auth_context* context, const grpc_metadata* md,
- size_t md_count, grpc_process_auth_metadata_done_cb cb, void* user_data) {
- auto* instance = reinterpret_cast<AuthMetadataProcessorAyncWrapper*>(self);
- auto* metadata(new Metadata);
- for (size_t i = 0; i < md_count; i++) {
- metadata->insert(std::make_pair(
- md[i].key, grpc::string(md[i].value, md[i].value_length)));
+ void* wrapper, grpc_auth_context* context, const grpc_metadata* md,
+ size_t num_md, grpc_process_auth_metadata_done_cb cb, void* user_data) {
+ auto* w = reinterpret_cast<AuthMetadataProcessorAyncWrapper*>(wrapper);
+ if (w->processor_ == nullptr) {
+ // Early exit.
+ cb(user_data, NULL, 0, 1);
+ return;
+ }
+ if (w->processor_->IsBlocking()) {
+ w->thread_pool_->Add(
+ std::bind(&AuthMetadataProcessorAyncWrapper::InvokeProcessor, w,
+ context, md, num_md, cb, user_data));
+ } else {
+ // invoke directly.
+ w->InvokeProcessor(context, md, num_md, cb, user_data);
}
- instance->thread_pool_->Add(
- std::bind(&AuthMetadataProcessorAyncWrapper::ProcessAsync, instance,
- context, metadata, cb, user_data));
}
-void AuthMetadataProcessorAyncWrapper::ProcessAsync(
+void AuthMetadataProcessorAyncWrapper::InvokeProcessor(
grpc_auth_context* ctx,
- Metadata* metadata,
+ const grpc_metadata* md, size_t num_md,
grpc_process_auth_metadata_done_cb cb, void* user_data) {
- std::unique_ptr<Metadata> metadata_deleter(metadata);
+ Metadata metadata;
+ for (size_t i = 0; i < num_md; i++) {
+ metadata.insert(std::make_pair(
+ md[i].key, grpc::string(md[i].value, md[i].value_length)));
+ }
SecureAuthContext context(ctx);
Metadata consumed_metadata;
- bool ok = processor_->Process(*metadata, &context, &consumed_metadata);
+ bool ok = processor_->Process(metadata, &context, &consumed_metadata);
if (ok) {
std::vector<grpc_metadata> consumed_md(consumed_metadata.size());
for (const auto& entry : consumed_metadata) {
diff --git a/src/cpp/server/secure_server_credentials.h b/src/cpp/server/secure_server_credentials.h
index 22fd9e2cae..f2709637b1 100644
--- a/src/cpp/server/secure_server_credentials.h
+++ b/src/cpp/server/secure_server_credentials.h
@@ -55,8 +55,9 @@ class AuthMetadataProcessorAyncWrapper GRPC_FINAL {
private:
typedef std::multimap<grpc::string, grpc::string> Metadata;
- void ProcessAsync(grpc_auth_context* context, Metadata* auth_metadata,
- grpc_process_auth_metadata_done_cb cb, void* user_data);
+ void InvokeProcessor(grpc_auth_context* context, const grpc_metadata* md,
+ size_t md_count, grpc_process_auth_metadata_done_cb cb,
+ void* user_data);
std::unique_ptr<ThreadPoolInterface> thread_pool_;
std::shared_ptr<AuthMetadataProcessor> processor_;
};