diff options
author | David Garcia Quintas <dgq@google.com> | 2015-06-30 23:29:03 -0700 |
---|---|---|
committer | David Garcia Quintas <dgq@google.com> | 2015-06-30 23:29:03 -0700 |
commit | d7d9ce27c523798384051246e18e3f00b29dd8c9 (patch) | |
tree | 3bea869080c65f73f1c92ded39c6b7e1434394fe /src/core | |
parent | fc0fa3381c7b7088936ce6f41a8f8c41ef3c38ac (diff) |
WIP in *_end2end_test.cc. Tests pass. Fixed leaks and introduced concept of compression request thru MD
Diffstat (limited to 'src/core')
-rw-r--r-- | src/core/channel/compress_filter.c | 19 | ||||
-rw-r--r-- | src/core/channel/compress_filter.h | 2 | ||||
-rw-r--r-- | src/core/surface/call.c | 2 | ||||
-rw-r--r-- | src/core/surface/channel.c | 2 | ||||
-rw-r--r-- | src/core/surface/channel.h | 2 | ||||
-rw-r--r-- | src/core/surface/secure_channel_create.c | 5 |
6 files changed, 18 insertions, 14 deletions
diff --git a/src/core/channel/compress_filter.c b/src/core/channel/compress_filter.c index f5fe87d6b8..6100a90668 100644 --- a/src/core/channel/compress_filter.c +++ b/src/core/channel/compress_filter.c @@ -50,7 +50,8 @@ typedef struct call_data { } call_data; typedef struct channel_data { - grpc_mdstr *mdstr_compression_algorithm_key; + grpc_mdstr *mdstr_request_compression_algorithm_key; + grpc_mdstr *mdstr_outgoing_compression_algorithm_key; grpc_mdelem *mdelem_compression_algorithms[GRPC_COMPRESS_ALGORITHMS_COUNT]; grpc_compression_algorithm default_compression_algorithm; } channel_data; @@ -72,14 +73,14 @@ static int compress_send_sb(grpc_compression_algorithm algorithm, } /** For each \a md element from the incoming metadata, filter out the entry for - * "grpc-compression-algorithm", using its value to populate the call data's + * "grpc-encoding", using its value to populate the call data's * compression_algorithm field. */ static grpc_mdelem* compression_md_filter(void *user_data, grpc_mdelem *md) { grpc_call_element *elem = user_data; call_data *calld = elem->call_data; channel_data *channeld = elem->channel_data; - if (md->key == channeld->mdstr_compression_algorithm_key) { + if (md->key == channeld->mdstr_request_compression_algorithm_key) { const char *md_c_str = grpc_mdstr_as_c_string(md->value); if (!grpc_compression_algorithm_parse(md_c_str, &calld->compression_algorithm)) { @@ -184,7 +185,6 @@ static void process_send_ops(grpc_call_element *elem, break; case GRPC_OP_SLICE: if (did_compress) { - gpr_slice_unref(sop->data.slice); if (j < calld->slices.count) { sop->data.slice = gpr_slice_ref(calld->slices.slices[j++]); } @@ -259,7 +259,10 @@ static void init_channel_elem(grpc_channel_element *elem, channeld->default_compression_algorithm = grpc_compression_algorithm_for_level(clevel); - channeld->mdstr_compression_algorithm_key = + channeld->mdstr_request_compression_algorithm_key = + grpc_mdstr_from_string(mdctx, GRPC_COMPRESS_REQUEST_ALGORITHM_KEY); + + channeld->mdstr_outgoing_compression_algorithm_key = grpc_mdstr_from_string(mdctx, "grpc-encoding"); for (algo_idx = 0; algo_idx < GRPC_COMPRESS_ALGORITHMS_COUNT; ++algo_idx) { @@ -267,7 +270,8 @@ static void init_channel_elem(grpc_channel_element *elem, GPR_ASSERT(grpc_compression_algorithm_name(algo_idx, &algorith_name) != 0); channeld->mdelem_compression_algorithms[algo_idx] = grpc_mdelem_from_metadata_strings( - mdctx, grpc_mdstr_ref(channeld->mdstr_compression_algorithm_key), + mdctx, + grpc_mdstr_ref(channeld->mdstr_outgoing_compression_algorithm_key), grpc_mdstr_from_string(mdctx, algorith_name)); } @@ -283,7 +287,8 @@ static void destroy_channel_elem(grpc_channel_element *elem) { channel_data *channeld = elem->channel_data; grpc_compression_algorithm algo_idx; - grpc_mdstr_unref(channeld->mdstr_compression_algorithm_key); + grpc_mdstr_unref(channeld->mdstr_request_compression_algorithm_key); + grpc_mdstr_unref(channeld->mdstr_outgoing_compression_algorithm_key); for (algo_idx = 0; algo_idx < GRPC_COMPRESS_ALGORITHMS_COUNT; ++algo_idx) { grpc_mdelem_unref(channeld->mdelem_compression_algorithms[algo_idx]); diff --git a/src/core/channel/compress_filter.h b/src/core/channel/compress_filter.h index ea667969e1..3a196eb7bf 100644 --- a/src/core/channel/compress_filter.h +++ b/src/core/channel/compress_filter.h @@ -36,6 +36,8 @@ #include "src/core/channel/channel_stack.h" +#define GRPC_COMPRESS_REQUEST_ALGORITHM_KEY "internal:grpc-encoding-request" + /** Message-level compression filter. * * See <grpc/compression.h> for the available compression levels. diff --git a/src/core/surface/call.c b/src/core/surface/call.c index 37dadecb35..5f489c0f4e 100644 --- a/src/core/surface/call.c +++ b/src/core/surface/call.c @@ -1243,7 +1243,7 @@ static void recv_metadata(grpc_call *call, grpc_metadata_batch *md) { } else if (key == grpc_channel_get_message_string(call->channel)) { set_status_details(call, STATUS_FROM_WIRE, grpc_mdstr_ref(md->value)); } else if (key == - grpc_channel_get_compresssion_algorithm_string(call->channel)) { + grpc_channel_get_compression_algorithm_string(call->channel)) { set_compression_algorithm(call, decode_compression(md)); } else { dest = &call->buffered_metadata[is_trailing]; diff --git a/src/core/surface/channel.c b/src/core/surface/channel.c index d3dcb2255f..cab99e71d3 100644 --- a/src/core/surface/channel.c +++ b/src/core/surface/channel.c @@ -273,7 +273,7 @@ grpc_mdstr *grpc_channel_get_status_string(grpc_channel *channel) { return channel->grpc_status_string; } -grpc_mdstr *grpc_channel_get_compresssion_algorithm_string( +grpc_mdstr *grpc_channel_get_compression_algorithm_string( grpc_channel *channel) { return channel->grpc_compression_algorithm_string; } diff --git a/src/core/surface/channel.h b/src/core/surface/channel.h index 8d0fe812ce..66924ad72c 100644 --- a/src/core/surface/channel.h +++ b/src/core/surface/channel.h @@ -53,7 +53,7 @@ grpc_mdctx *grpc_channel_get_metadata_context(grpc_channel *channel); grpc_mdelem *grpc_channel_get_reffed_status_elem(grpc_channel *channel, int status_code); grpc_mdstr *grpc_channel_get_status_string(grpc_channel *channel); -grpc_mdstr *grpc_channel_get_compresssion_algorithm_string( +grpc_mdstr *grpc_channel_get_compression_algorithm_string( grpc_channel *channel); grpc_mdstr *grpc_channel_get_message_string(grpc_channel *channel); gpr_uint32 grpc_channel_get_max_message_length(grpc_channel *channel); diff --git a/src/core/surface/secure_channel_create.c b/src/core/surface/secure_channel_create.c index be46c54427..cfa869ec71 100644 --- a/src/core/surface/secure_channel_create.c +++ b/src/core/surface/secure_channel_create.c @@ -244,10 +244,7 @@ grpc_channel *grpc_secure_channel_create(grpc_credentials *creds, if (grpc_channel_args_is_census_enabled(args)) { filters[n++] = &grpc_client_census_filter; } */ - if (grpc_channel_args_get_compression_level(args) > - GRPC_COMPRESS_LEVEL_NONE) { - filters[n++] = &grpc_compress_filter; - } + filters[n++] = &grpc_compress_filter; filters[n++] = &grpc_client_channel_filter; GPR_ASSERT(n <= MAX_FILTERS); channel = grpc_channel_create_from_filters(filters, n, args_copy, mdctx, 1); |