Skip to content
Snippets Groups Projects
Commit b285aab5 authored by Craig Tiller's avatar Craig Tiller
Browse files

Share mdctx between secure channels

parent c4885ede
Branches
Tags
No related merge requests found
...@@ -165,6 +165,16 @@ static int check_request_metadata_creds(grpc_credentials *creds) { ...@@ -165,6 +165,16 @@ static int check_request_metadata_creds(grpc_credentials *creds) {
return 1; return 1;
} }
static grpc_mdctx *get_or_create_mdctx(grpc_credentials *creds) {
grpc_mdctx *mdctx = grpc_credentials_get_metadata_context(creds);
if (mdctx == NULL) {
mdctx = grpc_mdctx_create();
} else {
grpc_mdctx_ref(mdctx);
}
return mdctx;
}
/* -- Fake implementation. -- */ /* -- Fake implementation. -- */
typedef struct { typedef struct {
...@@ -626,7 +636,8 @@ grpc_channel *grpc_ssl_channel_create(grpc_credentials *ssl_creds, ...@@ -626,7 +636,8 @@ grpc_channel *grpc_ssl_channel_create(grpc_credentials *ssl_creds,
arg.key = GRPC_ARG_HTTP2_SCHEME; arg.key = GRPC_ARG_HTTP2_SCHEME;
arg.value.string = "https"; arg.value.string = "https";
new_args = grpc_channel_args_copy_and_add(args, &arg); new_args = grpc_channel_args_copy_and_add(args, &arg);
channel = grpc_secure_channel_create_internal(target, new_args, ctx); channel = grpc_secure_channel_create_internal(
target, new_args, ctx, get_or_create_mdctx(request_metadata_creds));
grpc_security_context_unref(&ctx->base); grpc_security_context_unref(&ctx->base);
grpc_channel_args_destroy(new_args); grpc_channel_args_destroy(new_args);
return channel; return channel;
...@@ -637,8 +648,8 @@ grpc_channel *grpc_fake_transport_security_channel_create( ...@@ -637,8 +648,8 @@ grpc_channel *grpc_fake_transport_security_channel_create(
const char *target, const grpc_channel_args *args) { const char *target, const grpc_channel_args *args) {
grpc_channel_security_context *ctx = grpc_channel_security_context *ctx =
grpc_fake_channel_security_context_create(request_metadata_creds, 1); grpc_fake_channel_security_context_create(request_metadata_creds, 1);
grpc_channel *channel = grpc_channel *channel = grpc_secure_channel_create_internal(
grpc_secure_channel_create_internal(target, args, ctx); target, args, ctx, get_or_create_mdctx(request_metadata_creds));
grpc_security_context_unref(&ctx->base); grpc_security_context_unref(&ctx->base);
return channel; return channel;
} }
......
...@@ -190,7 +190,7 @@ grpc_channel *grpc_fake_transport_security_channel_create( ...@@ -190,7 +190,7 @@ grpc_channel *grpc_fake_transport_security_channel_create(
grpc_channel *grpc_secure_channel_create_internal( grpc_channel *grpc_secure_channel_create_internal(
const char *target, const grpc_channel_args *args, const char *target, const grpc_channel_args *args,
grpc_channel_security_context *ctx); grpc_channel_security_context *ctx, grpc_mdctx *mdctx);
typedef grpc_channel *(*grpc_secure_channel_factory_func)( typedef grpc_channel *(*grpc_secure_channel_factory_func)(
grpc_credentials *transport_security_creds, grpc_credentials *transport_security_creds,
......
...@@ -205,12 +205,11 @@ static grpc_transport_setup_result complete_setup(void *channel_stack, ...@@ -205,12 +205,11 @@ static grpc_transport_setup_result complete_setup(void *channel_stack,
- perform handshakes */ - perform handshakes */
grpc_channel *grpc_secure_channel_create_internal( grpc_channel *grpc_secure_channel_create_internal(
const char *target, const grpc_channel_args *args, const char *target, const grpc_channel_args *args,
grpc_channel_security_context *context) { grpc_channel_security_context *context, grpc_mdctx *mdctx) {
setup *s; setup *s;
grpc_channel *channel; grpc_channel *channel;
grpc_arg context_arg; grpc_arg context_arg;
grpc_channel_args *args_copy; grpc_channel_args *args_copy;
grpc_mdctx *mdctx = grpc_mdctx_create();
#define MAX_FILTERS 3 #define MAX_FILTERS 3
const grpc_channel_filter *filters[MAX_FILTERS]; const grpc_channel_filter *filters[MAX_FILTERS];
int n = 0; int n = 0;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment