aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core/lib/security/security_connector
diff options
context:
space:
mode:
authorGravatar Sree Kuchibhotla <sreek@google.com>2018-06-18 09:37:46 -0700
committerGravatar Sree Kuchibhotla <sreek@google.com>2018-06-18 09:39:09 -0700
commit09d7da2652e64c38267bde4ba9c52673e2b97f32 (patch)
treefbdd9fbc058fa2c55a60044c1bd88bf429e4aa28 /src/core/lib/security/security_connector
parent16ad9b828073579d0c6364570a3803b26e7fb39d (diff)
parenta2769d5ee4116152eead50678741906b1667923b (diff)
Merge branch 'master' into epollex-ownerfd-fix
Diffstat (limited to 'src/core/lib/security/security_connector')
-rw-r--r--src/core/lib/security/security_connector/security_connector.cc22
-rw-r--r--src/core/lib/security/security_connector/security_connector.h3
2 files changed, 22 insertions, 3 deletions
diff --git a/src/core/lib/security/security_connector/security_connector.cc b/src/core/lib/security/security_connector/security_connector.cc
index ea001d453d..b54a7643e4 100644
--- a/src/core/lib/security/security_connector/security_connector.cc
+++ b/src/core/lib/security/security_connector/security_connector.cc
@@ -255,10 +255,26 @@ grpc_arg grpc_security_connector_to_arg(grpc_security_connector* sc) {
&connector_arg_vtable);
}
+grpc_security_connector* grpc_security_connector_from_arg(const grpc_arg* arg) {
+ if (strcmp(arg->key, GRPC_ARG_SECURITY_CONNECTOR)) return nullptr;
+ if (arg->type != GRPC_ARG_POINTER) {
+ gpr_log(GPR_ERROR, "Invalid type %d for arg %s", arg->type,
+ GRPC_ARG_SECURITY_CONNECTOR);
+ return nullptr;
+ }
+ return static_cast<grpc_security_connector*>(arg->value.pointer.p);
+}
+
grpc_security_connector* grpc_security_connector_find_in_args(
- const grpc_channel_args* channel_args) {
- return grpc_channel_args_get_pointer<grpc_security_connector>(
- channel_args, GRPC_ARG_SECURITY_CONNECTOR);
+ const grpc_channel_args* args) {
+ size_t i;
+ if (args == nullptr) return nullptr;
+ for (i = 0; i < args->num_args; i++) {
+ grpc_security_connector* sc =
+ grpc_security_connector_from_arg(&args->args[i]);
+ if (sc != nullptr) return sc;
+ }
+ return nullptr;
}
static tsi_client_certificate_request_type
diff --git a/src/core/lib/security/security_connector/security_connector.h b/src/core/lib/security/security_connector/security_connector.h
index 9da66ef01d..f9723166d0 100644
--- a/src/core/lib/security/security_connector/security_connector.h
+++ b/src/core/lib/security/security_connector/security_connector.h
@@ -99,6 +99,9 @@ int grpc_security_connector_cmp(grpc_security_connector* sc,
/* Util to encapsulate the connector in a channel arg. */
grpc_arg grpc_security_connector_to_arg(grpc_security_connector* sc);
+/* Util to get the connector from a channel arg. */
+grpc_security_connector* grpc_security_connector_from_arg(const grpc_arg* arg);
+
/* Util to find the connector from channel args. */
grpc_security_connector* grpc_security_connector_find_in_args(
const grpc_channel_args* args);