diff options
author | 2018-02-21 15:18:07 -0800 | |
---|---|---|
committer | 2018-02-21 15:18:07 -0800 | |
commit | 09bd5c0b1b9d5748b8a272e8495ecd0c9fd1602c (patch) | |
tree | 989fca8c486289a0d664009eac8341990ca3bdb6 /src/core/ext/transport/cronet/transport/cronet_transport.cc | |
parent | ec42f328349efdbd88a267f74bde8e31dd6c7d68 (diff) |
convert cronet headers to metadata in one function
Diffstat (limited to 'src/core/ext/transport/cronet/transport/cronet_transport.cc')
-rw-r--r-- | src/core/ext/transport/cronet/transport/cronet_transport.cc | 63 |
1 files changed, 28 insertions, 35 deletions
diff --git a/src/core/ext/transport/cronet/transport/cronet_transport.cc b/src/core/ext/transport/cronet/transport/cronet_transport.cc index 9dce5c99ca..6c73c80eda 100644 --- a/src/core/ext/transport/cronet/transport/cronet_transport.cc +++ b/src/core/ext/transport/cronet/transport/cronet_transport.cc @@ -415,6 +415,29 @@ static void execute_from_storage(stream_obj* s) { gpr_mu_unlock(&s->mu); } +static void convert_cronet_array_to_metadata( + const bidirectional_stream_header_array* header_array, + grpc_chttp2_incoming_metadata_buffer* mds) { + for (size_t i = 0; i < header_array->count; i++) { + CRONET_LOG(GPR_DEBUG, "header key=%s, value=%s", + header_array->headers[i].key, header_array->headers[i].value); + grpc_slice key = grpc_slice_intern( + grpc_slice_from_static_string(header_array->headers[i].key)); + grpc_slice value; + if (grpc_is_binary_header(key)) { + value = grpc_slice_from_static_string(header_array->headers[i].value); + value = grpc_slice_intern(grpc_chttp2_base64_decode_with_length( + value, infer_length_after_decode(value))); + } else { + value = grpc_slice_intern( + grpc_slice_from_static_string(header_array->headers[i].value)); + } + GRPC_LOG_IF_ERROR("convert_cronet_array_to_metadata", + grpc_chttp2_incoming_metadata_buffer_add( + mds, grpc_mdelem_from_slices(key, value))); + } +} + /* Cronet callback */ @@ -539,23 +562,7 @@ static void on_response_headers_received( sizeof(s->state.rs.initial_metadata)); grpc_chttp2_incoming_metadata_buffer_init(&s->state.rs.initial_metadata, s->arena); - for (size_t i = 0; i < headers->count; i++) { - grpc_slice key = grpc_slice_intern( - grpc_slice_from_static_string(headers->headers[i].key)); - grpc_slice value; - if (grpc_is_binary_header(key)) { - value = grpc_slice_from_static_string(headers->headers[i].value); - value = grpc_slice_intern(grpc_chttp2_base64_decode_with_length( - value, infer_length_after_decode(value))); - } else { - value = grpc_slice_intern( - grpc_slice_from_static_string(headers->headers[i].value)); - } - GRPC_LOG_IF_ERROR("on_response_headers_received", - grpc_chttp2_incoming_metadata_buffer_add( - &s->state.rs.initial_metadata, - grpc_mdelem_from_slices(key, value))); - } + convert_cronet_array_to_metadata(headers, &s->state.rs.initial_metadata); s->state.state_callback_received[OP_RECV_INITIAL_METADATA] = true; if (!(s->state.state_op_done[OP_CANCEL_ERROR] || s->state.state_callback_received[OP_FAILED])) { @@ -650,25 +657,11 @@ static void on_response_trailers_received( s->state.rs.trailing_metadata_valid = false; grpc_chttp2_incoming_metadata_buffer_init(&s->state.rs.trailing_metadata, s->arena); - for (size_t i = 0; i < trailers->count; i++) { - CRONET_LOG(GPR_DEBUG, "trailer key=%s, value=%s", trailers->headers[i].key, - trailers->headers[i].value); - grpc_slice key = grpc_slice_intern( - grpc_slice_from_static_string(trailers->headers[i].key)); - grpc_slice value; - if (grpc_is_binary_header(key)) { - value = grpc_slice_from_static_string(trailers->headers[i].value); - value = grpc_slice_intern(grpc_chttp2_base64_decode_with_length( - value, infer_length_after_decode(value))); - } else { - value = grpc_slice_intern( - grpc_slice_from_static_string(trailers->headers[i].value)); - } - GRPC_LOG_IF_ERROR("on_response_trailers_received", - grpc_chttp2_incoming_metadata_buffer_add( - &s->state.rs.trailing_metadata, - grpc_mdelem_from_slices(key, value))); + convert_cronet_array_to_metadata(trailers, &s->state.rs.trailing_metadata); + if (trailers->count > 0) { s->state.rs.trailing_metadata_valid = true; + } + for (size_t i = 0; i < trailers->count; i++) { if (0 == strcmp(trailers->headers[i].key, "grpc-status") && 0 != strcmp(trailers->headers[i].value, "0")) { s->state.fail_state = true; |