static void call_op(grpc_call_element *elem, grpc_call_element *from_elem, grpc_call_op *op) { GRPC_CALL_LOG_OP(GPR_INFO, elem, op); switch (op->type) { case GRPC_SEND_DEADLINE: grpc_call_set_deadline(elem, op->data.deadline); grpc_call_next_op(elem, op); break; case GRPC_RECV_METADATA: grpc_call_recv_metadata(elem, op->data.metadata); break; case GRPC_RECV_DEADLINE: gpr_log(GPR_ERROR, "Deadline received by client (ignored)"); break; case GRPC_RECV_MESSAGE: grpc_call_recv_message(elem, op->data.message); op->done_cb(op->user_data, GRPC_OP_OK); break; case GRPC_RECV_HALF_CLOSE: grpc_call_read_closed(elem); break; case GRPC_RECV_FINISH: grpc_call_stream_closed(elem); break; case GRPC_RECV_END_OF_INITIAL_METADATA: grpc_call_initial_metadata_complete(elem); break; default: GPR_ASSERT(op->dir == GRPC_CALL_DOWN); grpc_call_next_op(elem, op); } }
static void call_op(grpc_call_element *elem, grpc_call_element *from_elem, grpc_call_op *op) { GRPC_CALL_LOG_OP(GPR_INFO, elem, op); switch (op->type) { case GRPC_RECV_METADATA: grpc_call_recv_metadata(elem, &op->data.metadata); break; case GRPC_RECV_MESSAGE: grpc_call_recv_message(elem, op->data.message); op->done_cb(op->user_data, GRPC_OP_OK); break; case GRPC_RECV_HALF_CLOSE: grpc_call_read_closed(elem); break; case GRPC_RECV_FINISH: grpc_call_stream_closed(elem); break; case GRPC_RECV_SYNTHETIC_STATUS: grpc_call_recv_synthetic_status(elem, op->data.synthetic_status.status, op->data.synthetic_status.message); break; default: GPR_ASSERT(op->dir == GRPC_CALL_DOWN); grpc_call_next_op(elem, op); } }
static void call_op(grpc_call_element *elem, grpc_call_element *from_elem, grpc_call_op *op) { channel_data *channeld = elem->channel_data; GRPC_CALL_LOG_OP(GPR_INFO, elem, op); switch (op->type) { case GRPC_SEND_START: grpc_call_recv_metadata(elem, grpc_mdelem_ref(channeld->status)); grpc_call_recv_metadata(elem, grpc_mdelem_ref(channeld->message)); grpc_call_stream_closed(elem); break; case GRPC_SEND_METADATA: grpc_mdelem_unref(op->data.metadata); break; default: break; } op->done_cb(op->user_data, GRPC_OP_ERROR); }
static void call_op(grpc_call_element *elem, grpc_call_element *from_elemn, grpc_call_op *op) { channel_data *chand = elem->channel_data; call_data *calld = elem->call_data; grpc_mdelem *md; GRPC_CALL_LOG_OP(GPR_INFO, elem, op); switch (op->type) { case GRPC_RECV_METADATA: md = op->data.metadata; if (md->key == chand->path_key) { calld->path = grpc_mdstr_ref(md->value); grpc_mdelem_unref(md); } else if (md->key == chand->authority_key) { calld->host = grpc_mdstr_ref(md->value); grpc_mdelem_unref(md); } else { grpc_call_recv_metadata(elem, md); } break; case GRPC_RECV_END_OF_INITIAL_METADATA: start_new_rpc(elem); grpc_call_initial_metadata_complete(elem); break; case GRPC_RECV_MESSAGE: grpc_call_recv_message(elem, op->data.message); op->done_cb(op->user_data, GRPC_OP_OK); break; case GRPC_RECV_HALF_CLOSE: read_closed(elem); break; case GRPC_RECV_FINISH: stream_closed(elem); break; case GRPC_RECV_DEADLINE: grpc_call_set_deadline(elem, op->data.deadline); ((call_data *)elem->call_data)->deadline = op->data.deadline; break; default: GPR_ASSERT(op->dir == GRPC_CALL_DOWN); grpc_call_next_op(elem, op); break; } }