made send_initial_md compression level a "maybe"

pull/6481/head
David Garcia Quintas 9 years ago
parent 5ff7b71a25
commit 118dc63dbb
  1. 8
      include/grpc/impl/codegen/grpc_types.h
  2. 8
      src/core/lib/surface/call.c
  3. 4
      test/core/end2end/tests/compressed_payload.c

@ -37,6 +37,7 @@
#include <grpc/impl/codegen/byte_buffer.h>
#include <grpc/impl/codegen/status.h>
#include <stdbool.h>
#include <stddef.h>
#ifdef __cplusplus
@ -332,7 +333,12 @@ typedef struct grpc_op {
struct {
size_t count;
grpc_metadata *metadata;
grpc_compression_level compression_level;
/** If \a is_set, \a compression_level will be used for the call.
* Otherwise, \a compression_level won't be considered */
struct {
bool is_set;
grpc_compression_level compression_level;
} maybe_compression_level;
} send_initial_metadata;
grpc_byte_buffer *send_message;
struct {

@ -1323,15 +1323,17 @@ static grpc_call_error call_start_batch(grpc_exec_ctx *exec_ctx,
grpc_metadata compression_md;
memset(&compression_md, 0, sizeof(grpc_metadata));
size_t additional_metadata_count = 0;
if (op->data.send_initial_metadata.compression_level >
GRPC_COMPRESS_LEVEL_NONE) {
if (op->data.send_initial_metadata.maybe_compression_level.is_set &&
op->data.send_initial_metadata.maybe_compression_level
.compression_level > GRPC_COMPRESS_LEVEL_NONE) {
if (call->is_client) {
error = GRPC_CALL_ERROR_NOT_ON_CLIENT;
goto done_with_error;
}
const grpc_compression_algorithm calgo =
compression_algorithm_for_level_locked(
call, op->data.send_initial_metadata.compression_level);
call, op->data.send_initial_metadata.maybe_compression_level
.compression_level);
char *calgo_name;
grpc_compression_algorithm_name(calgo, &calgo_name);
compression_md.key = "grpc-internal-encoding-request";

@ -212,7 +212,9 @@ static void request_with_payload_template(
op = ops;
op->op = GRPC_OP_SEND_INITIAL_METADATA;
op->data.send_initial_metadata.count = 0;
op->data.send_initial_metadata.compression_level = server_compression_level;
op->data.send_initial_metadata.maybe_compression_level.is_set = true;
op->data.send_initial_metadata.maybe_compression_level.compression_level =
server_compression_level;
op->flags = 0;
op->reserved = NULL;
op++;

Loading…
Cancel
Save