diff options
Diffstat (limited to 'src/core/channel')
-rw-r--r-- | src/core/channel/http_client_filter.c | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/src/core/channel/http_client_filter.c b/src/core/channel/http_client_filter.c index 98e26aa563..96fa3ecdf8 100644 --- a/src/core/channel/http_client_filter.c +++ b/src/core/channel/http_client_filter.c @@ -32,6 +32,7 @@ */ #include "src/core/channel/http_client_filter.h" +#include <string.h> #include <grpc/support/log.h> typedef struct call_data { int sent_headers; } call_data; @@ -130,6 +131,19 @@ static void destroy_call_elem(grpc_call_element *elem) { ignore_unused(channeld); } +static char *scheme_from_args(const grpc_channel_args *args) { + int i; + if (args != NULL) { + for (i = 0; i < args->num_args; ++i) { + if (args->args[i].type == GRPC_ARG_STRING && + strcmp(args->args[i].key, "grpc.scheme") == 0) { + return args->args[i].value.string; + } + } + } + return "http"; +} + /* Constructor for channel_data */ static void init_channel_elem(grpc_channel_element *elem, const grpc_channel_args *args, grpc_mdctx *mdctx, @@ -146,7 +160,8 @@ static void init_channel_elem(grpc_channel_element *elem, /* initialize members */ channeld->te_trailers = grpc_mdelem_from_strings(mdctx, "te", "trailers"); channeld->method = grpc_mdelem_from_strings(mdctx, ":method", "POST"); - channeld->scheme = grpc_mdelem_from_strings(mdctx, ":scheme", "grpc"); + channeld->scheme = + grpc_mdelem_from_strings(mdctx, ":scheme", scheme_from_args(args)); channeld->content_type = grpc_mdelem_from_strings(mdctx, "content-type", "application/grpc"); } |