aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core/ext/transport/cronet/transport/cronet_transport.cc
diff options
context:
space:
mode:
authorGravatar Muxi Yan <mxyan@google.com>2018-02-21 15:18:07 -0800
committerGravatar Muxi Yan <mxyan@google.com>2018-02-21 15:18:07 -0800
commit09bd5c0b1b9d5748b8a272e8495ecd0c9fd1602c (patch)
tree989fca8c486289a0d664009eac8341990ca3bdb6 /src/core/ext/transport/cronet/transport/cronet_transport.cc
parentec42f328349efdbd88a267f74bde8e31dd6c7d68 (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.cc63
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;