aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core/lib
diff options
context:
space:
mode:
authorGravatar Noah Eisen <ncteisen@gmail.com>2018-06-13 17:10:32 -0700
committerGravatar GitHub <noreply@github.com>2018-06-13 17:10:32 -0700
commite98ce7220f7623b3da11bfc38a98d92f55bdb6ea (patch)
treeb0bd018ca90855c2876eba498214f2dc992c45de /src/core/lib
parent26287ea74d5d23be77e8206ca5188511d1fe60f6 (diff)
parent1198d8dfc625ce123c591d8f5079e75f23f772e5 (diff)
Merge pull request #15678 from ncteisen/channel-arg-sanity
Add Type Checking On Channel Args
Diffstat (limited to 'src/core/lib')
-rw-r--r--src/core/lib/channel/channel_args.h37
-rw-r--r--src/core/lib/iomgr/resource_quota.cc16
-rw-r--r--src/core/lib/iomgr/tcp_client_posix.cc16
-rw-r--r--src/core/lib/iomgr/tcp_server_custom.cc19
-rw-r--r--src/core/lib/iomgr/tcp_server_posix.cc19
-rw-r--r--src/core/lib/iomgr/tcp_server_utils_posix_common.cc18
-rw-r--r--src/core/lib/iomgr/udp_server.cc10
-rw-r--r--src/core/lib/security/context/security_context.cc21
-rw-r--r--src/core/lib/security/context/security_context.h1
-rw-r--r--src/core/lib/security/credentials/credentials.cc45
-rw-r--r--src/core/lib/security/credentials/credentials.h5
-rw-r--r--src/core/lib/security/credentials/fake/fake_credentials.cc5
-rw-r--r--src/core/lib/security/credentials/google_default/google_default_credentials.cc11
-rw-r--r--src/core/lib/security/credentials/ssl/ssl_credentials.cc10
-rw-r--r--src/core/lib/security/security_connector/security_connector.cc22
-rw-r--r--src/core/lib/security/security_connector/security_connector.h3
-rw-r--r--src/core/lib/security/transport/target_authority_table.cc13
17 files changed, 88 insertions, 183 deletions
diff --git a/src/core/lib/channel/channel_args.h b/src/core/lib/channel/channel_args.h
index 5ff303a9dc..0c4f56a688 100644
--- a/src/core/lib/channel/channel_args.h
+++ b/src/core/lib/channel/channel_args.h
@@ -23,6 +23,7 @@
#include <grpc/compression.h>
#include <grpc/grpc.h>
+#include <grpc/support/log.h>
#include "src/core/lib/iomgr/socket_mutator.h"
// Channel args are intentionally immutable, to avoid the need for locking.
@@ -110,13 +111,49 @@ typedef struct grpc_integer_options {
/** Returns the value of \a arg, subject to the contraints in \a options. */
int grpc_channel_arg_get_integer(const grpc_arg* arg,
const grpc_integer_options options);
+/** convinience helper for the above that finds the arg first. */
+inline int grpc_channel_args_get_integer(const grpc_channel_args* args,
+ const char* name,
+ const grpc_integer_options options) {
+ return grpc_channel_arg_get_integer(grpc_channel_args_find(args, name),
+ options);
+}
/** Returns the value of \a arg if \a arg is of type GRPC_ARG_STRING.
Otherwise, emits a warning log, and returns nullptr.
If arg is nullptr, returns nullptr, and does not emit a warning. */
char* grpc_channel_arg_get_string(const grpc_arg* arg);
+/** convinience helper for the above that finds the arg first. */
+inline char* grpc_channel_args_get_string(const grpc_channel_args* args,
+ const char* name) {
+ return grpc_channel_arg_get_string(grpc_channel_args_find(args, name));
+}
+
+/** Returns the value of \a arg if \a arg is of type GRPC_ARG_POINTER
+ Otherwise, emits a warning log, and returns nullptr.
+ If arg is nullptr, returns nullptr, and does not emit a warning. */
+template <typename Type>
+inline Type* grpc_channel_arg_get_pointer(const grpc_arg* arg) {
+ if (arg == nullptr) return nullptr;
+ if (arg->type != GRPC_ARG_POINTER) {
+ gpr_log(GPR_ERROR, "%s ignored: it must be an pointer", arg->key);
+ return nullptr;
+ }
+ return static_cast<Type*>(arg->value.pointer.p);
+}
+/** convinience helper for the above that finds the arg first. */
+template <typename Type>
+inline Type* grpc_channel_args_get_pointer(const grpc_channel_args* args,
+ const char* name) {
+ return grpc_channel_arg_get_pointer<Type>(grpc_channel_args_find(args, name));
+}
bool grpc_channel_arg_get_bool(const grpc_arg* arg, bool default_value);
+inline bool grpc_channel_args_get_bool(const grpc_channel_args* args,
+ const char* name, bool default_value) {
+ return grpc_channel_arg_get_bool(grpc_channel_args_find(args, name),
+ default_value);
+}
// Helpers for creating channel args.
grpc_arg grpc_channel_arg_string_create(char* name, char* value);
diff --git a/src/core/lib/iomgr/resource_quota.cc b/src/core/lib/iomgr/resource_quota.cc
index 539bc120ce..8a308f71bb 100644
--- a/src/core/lib/iomgr/resource_quota.cc
+++ b/src/core/lib/iomgr/resource_quota.cc
@@ -30,6 +30,7 @@
#include <grpc/support/log.h>
#include <grpc/support/string_util.h>
+#include "src/core/lib/channel/channel_args.h"
#include "src/core/lib/gpr/useful.h"
#include "src/core/lib/iomgr/combiner.h"
@@ -670,18 +671,9 @@ size_t grpc_resource_quota_peek_size(grpc_resource_quota* resource_quota) {
grpc_resource_quota* grpc_resource_quota_from_channel_args(
const grpc_channel_args* channel_args) {
- for (size_t i = 0; i < channel_args->num_args; i++) {
- if (0 == strcmp(channel_args->args[i].key, GRPC_ARG_RESOURCE_QUOTA)) {
- if (channel_args->args[i].type == GRPC_ARG_POINTER) {
- return grpc_resource_quota_ref_internal(
- static_cast<grpc_resource_quota*>(
- channel_args->args[i].value.pointer.p));
- } else {
- gpr_log(GPR_DEBUG, GRPC_ARG_RESOURCE_QUOTA " should be a pointer");
- }
- }
- }
- return grpc_resource_quota_create(nullptr);
+ grpc_resource_quota* rq = grpc_channel_args_get_pointer<grpc_resource_quota>(
+ channel_args, GRPC_ARG_RESOURCE_QUOTA);
+ return rq == nullptr ? grpc_resource_quota_create(nullptr) : rq;
}
static void* rq_copy(void* rq) {
diff --git a/src/core/lib/iomgr/tcp_client_posix.cc b/src/core/lib/iomgr/tcp_client_posix.cc
index 296ee74311..30015fc203 100644
--- a/src/core/lib/iomgr/tcp_client_posix.cc
+++ b/src/core/lib/iomgr/tcp_client_posix.cc
@@ -66,6 +66,7 @@ typedef struct {
static grpc_error* prepare_socket(const grpc_resolved_address* addr, int fd,
const grpc_channel_args* channel_args) {
grpc_error* err = GRPC_ERROR_NONE;
+ grpc_socket_mutator* mutator = nullptr;
GPR_ASSERT(fd >= 0);
@@ -79,16 +80,11 @@ static grpc_error* prepare_socket(const grpc_resolved_address* addr, int fd,
}
err = grpc_set_socket_no_sigpipe_if_possible(fd);
if (err != GRPC_ERROR_NONE) goto error;
- if (channel_args) {
- for (size_t i = 0; i < channel_args->num_args; i++) {
- if (0 == strcmp(channel_args->args[i].key, GRPC_ARG_SOCKET_MUTATOR)) {
- GPR_ASSERT(channel_args->args[i].type == GRPC_ARG_POINTER);
- grpc_socket_mutator* mutator = static_cast<grpc_socket_mutator*>(
- channel_args->args[i].value.pointer.p);
- err = grpc_set_socket_with_mutator(fd, mutator);
- if (err != GRPC_ERROR_NONE) goto error;
- }
- }
+ mutator = grpc_channel_args_get_pointer<grpc_socket_mutator>(
+ channel_args, GRPC_ARG_SOCKET_MUTATOR);
+ if (mutator != nullptr) {
+ err = grpc_set_socket_with_mutator(fd, mutator);
+ if (err != GRPC_ERROR_NONE) goto error;
}
goto done;
diff --git a/src/core/lib/iomgr/tcp_server_custom.cc b/src/core/lib/iomgr/tcp_server_custom.cc
index 019b354473..a3496de336 100644
--- a/src/core/lib/iomgr/tcp_server_custom.cc
+++ b/src/core/lib/iomgr/tcp_server_custom.cc
@@ -26,6 +26,7 @@
#include <grpc/support/alloc.h>
#include <grpc/support/log.h>
+#include "src/core/lib/channel/channel_args.h"
#include "src/core/lib/iomgr/error.h"
#include "src/core/lib/iomgr/exec_ctx.h"
#include "src/core/lib/iomgr/iomgr_custom.h"
@@ -80,21 +81,9 @@ static grpc_error* tcp_server_create(grpc_closure* shutdown_complete,
const grpc_channel_args* args,
grpc_tcp_server** server) {
grpc_tcp_server* s = (grpc_tcp_server*)gpr_malloc(sizeof(grpc_tcp_server));
- s->resource_quota = grpc_resource_quota_create(nullptr);
- for (size_t i = 0; i < (args == nullptr ? 0 : args->num_args); i++) {
- if (0 == strcmp(GRPC_ARG_RESOURCE_QUOTA, args->args[i].key)) {
- if (args->args[i].type == GRPC_ARG_POINTER) {
- grpc_resource_quota_unref_internal(s->resource_quota);
- s->resource_quota = grpc_resource_quota_ref_internal(
- (grpc_resource_quota*)args->args[i].value.pointer.p);
- } else {
- grpc_resource_quota_unref_internal(s->resource_quota);
- gpr_free(s);
- return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
- GRPC_ARG_RESOURCE_QUOTA " must be a pointer to a buffer pool");
- }
- }
- }
+ grpc_resource_quota* rq = grpc_channel_args_get_pointer<grpc_resource_quota>(
+ args, GRPC_ARG_RESOURCE_QUOTA);
+ s->resource_quota = rq == nullptr ? grpc_resource_quota_create(nullptr) : rq;
gpr_ref_init(&s->refs, 1);
s->on_accept_cb = nullptr;
s->on_accept_cb_arg = nullptr;
diff --git a/src/core/lib/iomgr/tcp_server_posix.cc b/src/core/lib/iomgr/tcp_server_posix.cc
index 8ddf684fea..0a9b4bfd5f 100644
--- a/src/core/lib/iomgr/tcp_server_posix.cc
+++ b/src/core/lib/iomgr/tcp_server_posix.cc
@@ -64,22 +64,11 @@ static grpc_error* tcp_server_create(grpc_closure* shutdown_complete,
s->expand_wildcard_addrs = false;
for (size_t i = 0; i < (args == nullptr ? 0 : args->num_args); i++) {
if (0 == strcmp(GRPC_ARG_ALLOW_REUSEPORT, args->args[i].key)) {
- if (args->args[i].type == GRPC_ARG_INTEGER) {
- s->so_reuseport = grpc_is_socket_reuse_port_supported() &&
- (args->args[i].value.integer != 0);
- } else {
- gpr_free(s);
- return GRPC_ERROR_CREATE_FROM_STATIC_STRING(GRPC_ARG_ALLOW_REUSEPORT
- " must be an integer");
- }
+ s->so_reuseport = grpc_channel_arg_get_bool(
+ &args->args[i], grpc_is_socket_reuse_port_supported());
} else if (0 == strcmp(GRPC_ARG_EXPAND_WILDCARD_ADDRS, args->args[i].key)) {
- if (args->args[i].type == GRPC_ARG_INTEGER) {
- s->expand_wildcard_addrs = (args->args[i].value.integer != 0);
- } else {
- gpr_free(s);
- return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
- GRPC_ARG_EXPAND_WILDCARD_ADDRS " must be an integer");
- }
+ s->expand_wildcard_addrs =
+ grpc_channel_arg_get_bool(&args->args[i], false);
}
}
gpr_ref_init(&s->refs, 1);
diff --git a/src/core/lib/iomgr/tcp_server_utils_posix_common.cc b/src/core/lib/iomgr/tcp_server_utils_posix_common.cc
index b9f8145572..8c254d587b 100644
--- a/src/core/lib/iomgr/tcp_server_utils_posix_common.cc
+++ b/src/core/lib/iomgr/tcp_server_utils_posix_common.cc
@@ -34,6 +34,7 @@
#include <grpc/support/string_util.h>
#include <grpc/support/sync.h>
+#include "src/core/lib/channel/channel_args.h"
#include "src/core/lib/iomgr/error.h"
#include "src/core/lib/iomgr/sockaddr.h"
#include "src/core/lib/iomgr/sockaddr_utils.h"
@@ -149,6 +150,7 @@ grpc_error* grpc_tcp_server_prepare_socket(grpc_tcp_server* s, int fd,
bool so_reuseport, int* port) {
grpc_resolved_address sockname_temp;
grpc_error* err = GRPC_ERROR_NONE;
+ grpc_socket_mutator* mutator = nullptr;
GPR_ASSERT(fd >= 0);
@@ -169,17 +171,11 @@ grpc_error* grpc_tcp_server_prepare_socket(grpc_tcp_server* s, int fd,
}
err = grpc_set_socket_no_sigpipe_if_possible(fd);
if (err != GRPC_ERROR_NONE) goto error;
-
- if (s->channel_args) {
- for (size_t i = 0; i < s->channel_args->num_args; i++) {
- if (0 == strcmp(s->channel_args->args[i].key, GRPC_ARG_SOCKET_MUTATOR)) {
- GPR_ASSERT(s->channel_args->args[i].type == GRPC_ARG_POINTER);
- grpc_socket_mutator* mutator = static_cast<grpc_socket_mutator*>(
- s->channel_args->args[i].value.pointer.p);
- err = grpc_set_socket_with_mutator(fd, mutator);
- if (err != GRPC_ERROR_NONE) goto error;
- }
- }
+ mutator = grpc_channel_args_get_pointer<grpc_socket_mutator>(
+ s->channel_args, GRPC_ARG_SOCKET_MUTATOR);
+ if (mutator != nullptr) {
+ err = grpc_set_socket_with_mutator(fd, mutator);
+ if (err != GRPC_ERROR_NONE) goto error;
}
if (bind(fd, reinterpret_cast<grpc_sockaddr*>(const_cast<char*>(addr->addr)),
diff --git a/src/core/lib/iomgr/udp_server.cc b/src/core/lib/iomgr/udp_server.cc
index bdb2d0e764..99af977da3 100644
--- a/src/core/lib/iomgr/udp_server.cc
+++ b/src/core/lib/iomgr/udp_server.cc
@@ -197,14 +197,8 @@ struct grpc_udp_server {
};
static grpc_socket_factory* get_socket_factory(const grpc_channel_args* args) {
- if (args) {
- const grpc_arg* arg = grpc_channel_args_find(args, GRPC_ARG_SOCKET_FACTORY);
- if (arg) {
- GPR_ASSERT(arg->type == GRPC_ARG_POINTER);
- return static_cast<grpc_socket_factory*>(arg->value.pointer.p);
- }
- }
- return nullptr;
+ return grpc_channel_args_get_pointer<grpc_socket_factory>(
+ args, GRPC_ARG_SOCKET_FACTORY);
}
grpc_udp_server* grpc_udp_server_create(const grpc_channel_args* args) {
diff --git a/src/core/lib/security/context/security_context.cc b/src/core/lib/security/context/security_context.cc
index 14051a3f00..1f93416b23 100644
--- a/src/core/lib/security/context/security_context.cc
+++ b/src/core/lib/security/context/security_context.cc
@@ -326,23 +326,8 @@ grpc_arg grpc_auth_context_to_arg(grpc_auth_context* p) {
&auth_context_pointer_vtable);
}
-grpc_auth_context* grpc_auth_context_from_arg(const grpc_arg* arg) {
- if (strcmp(arg->key, GRPC_AUTH_CONTEXT_ARG) != 0) return nullptr;
- if (arg->type != GRPC_ARG_POINTER) {
- gpr_log(GPR_ERROR, "Invalid type %d for arg %s", arg->type,
- GRPC_AUTH_CONTEXT_ARG);
- return nullptr;
- }
- return static_cast<grpc_auth_context*>(arg->value.pointer.p);
-}
-
grpc_auth_context* grpc_find_auth_context_in_args(
- const grpc_channel_args* args) {
- size_t i;
- if (args == nullptr) return nullptr;
- for (i = 0; i < args->num_args; i++) {
- grpc_auth_context* p = grpc_auth_context_from_arg(&args->args[i]);
- if (p != nullptr) return p;
- }
- return nullptr;
+ const grpc_channel_args* channel_args) {
+ return grpc_channel_args_get_pointer<grpc_auth_context>(
+ channel_args, GRPC_AUTH_CONTEXT_ARG);
}
diff --git a/src/core/lib/security/context/security_context.h b/src/core/lib/security/context/security_context.h
index e782e4f28f..2f73a5482c 100644
--- a/src/core/lib/security/context/security_context.h
+++ b/src/core/lib/security/context/security_context.h
@@ -108,7 +108,6 @@ void grpc_server_security_context_destroy(void* ctx);
#define GRPC_AUTH_CONTEXT_ARG "grpc.auth_context"
grpc_arg grpc_auth_context_to_arg(grpc_auth_context* c);
-grpc_auth_context* grpc_auth_context_from_arg(const grpc_arg* arg);
grpc_auth_context* grpc_find_auth_context_in_args(
const grpc_channel_args* args);
diff --git a/src/core/lib/security/credentials/credentials.cc b/src/core/lib/security/credentials/credentials.cc
index c43cb440eb..edeea29327 100644
--- a/src/core/lib/security/credentials/credentials.cc
+++ b/src/core/lib/security/credentials/credentials.cc
@@ -168,27 +168,10 @@ grpc_arg grpc_channel_credentials_to_arg(
&credentials_pointer_vtable);
}
-grpc_channel_credentials* grpc_channel_credentials_from_arg(
- const grpc_arg* arg) {
- if (strcmp(arg->key, GRPC_ARG_CHANNEL_CREDENTIALS)) return nullptr;
- if (arg->type != GRPC_ARG_POINTER) {
- gpr_log(GPR_ERROR, "Invalid type %d for arg %s", arg->type,
- GRPC_ARG_CHANNEL_CREDENTIALS);
- return nullptr;
- }
- return static_cast<grpc_channel_credentials*>(arg->value.pointer.p);
-}
-
grpc_channel_credentials* grpc_channel_credentials_find_in_args(
- const grpc_channel_args* args) {
- size_t i;
- if (args == nullptr) return nullptr;
- for (i = 0; i < args->num_args; i++) {
- grpc_channel_credentials* credentials =
- grpc_channel_credentials_from_arg(&args->args[i]);
- if (credentials != nullptr) return credentials;
- }
- return nullptr;
+ const grpc_channel_args* channel_args) {
+ return grpc_channel_args_get_pointer<grpc_channel_credentials>(
+ channel_args, GRPC_ARG_CHANNEL_CREDENTIALS);
}
grpc_server_credentials* grpc_server_credentials_ref(
@@ -263,24 +246,8 @@ grpc_arg grpc_server_credentials_to_arg(grpc_server_credentials* p) {
&cred_ptr_vtable);
}
-grpc_server_credentials* grpc_server_credentials_from_arg(const grpc_arg* arg) {
- if (strcmp(arg->key, GRPC_SERVER_CREDENTIALS_ARG) != 0) return nullptr;
- if (arg->type != GRPC_ARG_POINTER) {
- gpr_log(GPR_ERROR, "Invalid type %d for arg %s", arg->type,
- GRPC_SERVER_CREDENTIALS_ARG);
- return nullptr;
- }
- return static_cast<grpc_server_credentials*>(arg->value.pointer.p);
-}
-
grpc_server_credentials* grpc_find_server_credentials_in_args(
- const grpc_channel_args* args) {
- size_t i;
- if (args == nullptr) return nullptr;
- for (i = 0; i < args->num_args; i++) {
- grpc_server_credentials* p =
- grpc_server_credentials_from_arg(&args->args[i]);
- if (p != nullptr) return p;
- }
- return nullptr;
+ const grpc_channel_args* channel_args) {
+ return grpc_channel_args_get_pointer<grpc_server_credentials>(
+ channel_args, GRPC_SERVER_CREDENTIALS_ARG);
}
diff --git a/src/core/lib/security/credentials/credentials.h b/src/core/lib/security/credentials/credentials.h
index b486d25ab2..ba380283cc 100644
--- a/src/core/lib/security/credentials/credentials.h
+++ b/src/core/lib/security/credentials/credentials.h
@@ -131,10 +131,6 @@ grpc_channel_credentials_duplicate_without_call_credentials(
/* Util to encapsulate the channel credentials in a channel arg. */
grpc_arg grpc_channel_credentials_to_arg(grpc_channel_credentials* credentials);
-/* Util to get the channel credentials from a channel arg. */
-grpc_channel_credentials* grpc_channel_credentials_from_arg(
- const grpc_arg* arg);
-
/* Util to find the channel credentials from channel args. */
grpc_channel_credentials* grpc_channel_credentials_find_in_args(
const grpc_channel_args* args);
@@ -227,7 +223,6 @@ void grpc_server_credentials_unref(grpc_server_credentials* creds);
#define GRPC_SERVER_CREDENTIALS_ARG "grpc.server_credentials"
grpc_arg grpc_server_credentials_to_arg(grpc_server_credentials* c);
-grpc_server_credentials* grpc_server_credentials_from_arg(const grpc_arg* arg);
grpc_server_credentials* grpc_find_server_credentials_in_args(
const grpc_channel_args* args);
diff --git a/src/core/lib/security/credentials/fake/fake_credentials.cc b/src/core/lib/security/credentials/fake/fake_credentials.cc
index 858ab6b41b..08321a85c6 100644
--- a/src/core/lib/security/credentials/fake/fake_credentials.cc
+++ b/src/core/lib/security/credentials/fake/fake_credentials.cc
@@ -84,9 +84,8 @@ grpc_arg grpc_fake_transport_expected_targets_arg(char* expected_targets) {
const char* grpc_fake_transport_get_expected_targets(
const grpc_channel_args* args) {
- const grpc_arg* expected_target_arg =
- grpc_channel_args_find(args, GRPC_ARG_FAKE_SECURITY_EXPECTED_TARGETS);
- return grpc_channel_arg_get_string(expected_target_arg);
+ return grpc_channel_args_get_string(args,
+ GRPC_ARG_FAKE_SECURITY_EXPECTED_TARGETS);
}
/* -- Metadata-only test credentials. -- */
diff --git a/src/core/lib/security/credentials/google_default/google_default_credentials.cc b/src/core/lib/security/credentials/google_default/google_default_credentials.cc
index 38c9175717..fa565d4ef8 100644
--- a/src/core/lib/security/credentials/google_default/google_default_credentials.cc
+++ b/src/core/lib/security/credentials/google_default/google_default_credentials.cc
@@ -79,13 +79,10 @@ static grpc_security_status google_default_create_security_connector(
grpc_channel_security_connector** sc, grpc_channel_args** new_args) {
grpc_google_default_channel_credentials* c =
reinterpret_cast<grpc_google_default_channel_credentials*>(creds);
- bool is_grpclb_load_balancer = grpc_channel_arg_get_bool(
- grpc_channel_args_find(args, GRPC_ARG_ADDRESS_IS_GRPCLB_LOAD_BALANCER),
- false);
- bool is_backend_from_grpclb_load_balancer = grpc_channel_arg_get_bool(
- grpc_channel_args_find(
- args, GRPC_ARG_ADDRESS_IS_BACKEND_FROM_GRPCLB_LOAD_BALANCER),
- false);
+ bool is_grpclb_load_balancer = grpc_channel_args_get_bool(
+ args, GRPC_ARG_ADDRESS_IS_GRPCLB_LOAD_BALANCER, false);
+ bool is_backend_from_grpclb_load_balancer = grpc_channel_args_get_bool(
+ args, GRPC_ARG_ADDRESS_IS_BACKEND_FROM_GRPCLB_LOAD_BALANCER, false);
bool use_alts =
is_grpclb_load_balancer || is_backend_from_grpclb_load_balancer;
grpc_security_status status = GRPC_SECURITY_ERROR;
diff --git a/src/core/lib/security/credentials/ssl/ssl_credentials.cc b/src/core/lib/security/credentials/ssl/ssl_credentials.cc
index 2b6377d3ec..13dae19b4b 100644
--- a/src/core/lib/security/credentials/ssl/ssl_credentials.cc
+++ b/src/core/lib/security/credentials/ssl/ssl_credentials.cc
@@ -60,14 +60,12 @@ static grpc_security_status ssl_create_security_connector(
tsi_ssl_session_cache* ssl_session_cache = nullptr;
for (size_t i = 0; args && i < args->num_args; i++) {
grpc_arg* arg = &args->args[i];
- if (strcmp(arg->key, GRPC_SSL_TARGET_NAME_OVERRIDE_ARG) == 0 &&
- arg->type == GRPC_ARG_STRING) {
- overridden_target_name = arg->value.string;
+ if (strcmp(arg->key, GRPC_SSL_TARGET_NAME_OVERRIDE_ARG) == 0) {
+ overridden_target_name = grpc_channel_arg_get_string(arg);
}
- if (strcmp(arg->key, GRPC_SSL_SESSION_CACHE_ARG) == 0 &&
- arg->type == GRPC_ARG_POINTER) {
+ if (strcmp(arg->key, GRPC_SSL_SESSION_CACHE_ARG) == 0) {
ssl_session_cache =
- static_cast<tsi_ssl_session_cache*>(arg->value.pointer.p);
+ grpc_channel_arg_get_pointer<tsi_ssl_session_cache>(arg);
}
}
status = grpc_ssl_channel_security_connector_create(
diff --git a/src/core/lib/security/security_connector/security_connector.cc b/src/core/lib/security/security_connector/security_connector.cc
index b54a7643e4..ea001d453d 100644
--- a/src/core/lib/security/security_connector/security_connector.cc
+++ b/src/core/lib/security/security_connector/security_connector.cc
@@ -255,26 +255,10 @@ 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* 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;
+ const grpc_channel_args* channel_args) {
+ return grpc_channel_args_get_pointer<grpc_security_connector>(
+ channel_args, GRPC_ARG_SECURITY_CONNECTOR);
}
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 f9723166d0..9da66ef01d 100644
--- a/src/core/lib/security/security_connector/security_connector.h
+++ b/src/core/lib/security/security_connector/security_connector.h
@@ -99,9 +99,6 @@ 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);
diff --git a/src/core/lib/security/transport/target_authority_table.cc b/src/core/lib/security/transport/target_authority_table.cc
index 1eeb557f6a..467e681a50 100644
--- a/src/core/lib/security/transport/target_authority_table.cc
+++ b/src/core/lib/security/transport/target_authority_table.cc
@@ -59,17 +59,8 @@ grpc_arg CreateTargetAuthorityTableChannelArg(TargetAuthorityTable* table) {
TargetAuthorityTable* FindTargetAuthorityTableInArgs(
const grpc_channel_args* args) {
- const grpc_arg* arg =
- grpc_channel_args_find(args, GRPC_ARG_TARGET_AUTHORITY_TABLE);
- if (arg != nullptr) {
- if (arg->type == GRPC_ARG_POINTER) {
- return static_cast<TargetAuthorityTable*>(arg->value.pointer.p);
- } else {
- gpr_log(GPR_ERROR, "value of " GRPC_ARG_TARGET_AUTHORITY_TABLE
- " channel arg was not pointer type; ignoring");
- }
- }
- return nullptr;
+ return grpc_channel_args_get_pointer<TargetAuthorityTable>(
+ args, GRPC_ARG_TARGET_AUTHORITY_TABLE);
}
} // namespace grpc_core