Improve the way to reject :authority header

pull/10009/head
Muxi Yan 8 years ago
parent 21490a1e2d
commit b3f11af3a5
  1. 34
      src/core/ext/transport/cronet/transport/cronet_transport.c

@ -1239,32 +1239,22 @@ static void set_pollset_set_do_nothing(grpc_exec_ctx *exec_ctx,
static void perform_stream_op(grpc_exec_ctx *exec_ctx, grpc_transport *gt, static void perform_stream_op(grpc_exec_ctx *exec_ctx, grpc_transport *gt,
grpc_stream *gs, grpc_transport_stream_op *op) { grpc_stream *gs, grpc_transport_stream_op *op) {
CRONET_LOG(GPR_DEBUG, "perform_stream_op"); CRONET_LOG(GPR_DEBUG, "perform_stream_op");
stream_obj *s = (stream_obj *)gs;
add_to_storage(s, op);
if (op->send_initial_metadata && if (op->send_initial_metadata &&
header_has_authority(op->send_initial_metadata->list.head)) { header_has_authority(op->send_initial_metadata->list.head)) {
/* Cronet does not support :authority header field. We cancel the call when /* Cronet does not support :authority header field. We cancel the call when
this field is present in metadata */ this field is present in metadata */
bidirectional_stream_header_array header_array; if (op->recv_initial_metadata_ready) {
bidirectional_stream_header *header; grpc_closure_sched(exec_ctx, op->recv_initial_metadata_ready, GRPC_ERROR_CANCELLED);
bidirectional_stream cbs; }
CRONET_LOG(GPR_DEBUG, if (op->recv_message_ready) {
":authority header is provided but not supported;" grpc_closure_sched(exec_ctx, op->recv_message_ready, GRPC_ERROR_CANCELLED);
" cancel operations"); }
/* Notify application that operation is cancelled by forging trailers */ grpc_closure_sched(exec_ctx, op->on_complete, GRPC_ERROR_CANCELLED);
header_array.count = 1; return;
header_array.capacity = 1;
header_array.headers = gpr_malloc(sizeof(bidirectional_stream_header));
header = (bidirectional_stream_header *)header_array.headers;
header->key = "grpc-status";
header->value = "1"; /* Return status GRPC_STATUS_CANCELLED */
cbs.annotation = (void *)s;
s->state.state_op_done[OP_CANCEL_ERROR] = true;
on_response_trailers_received(&cbs, &header_array);
gpr_free(header_array.headers);
} else {
execute_from_storage(s);
} }
stream_obj *s = (stream_obj *)gs;
add_to_storage(s, op);
execute_from_storage(s);
} }
static void destroy_stream(grpc_exec_ctx *exec_ctx, grpc_transport *gt, static void destroy_stream(grpc_exec_ctx *exec_ctx, grpc_transport *gt,

Loading…
Cancel
Save