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 stream_closed(grpc_call_element *elem) { call_data *calld = elem->call_data; channel_data *chand = elem->channel_data; gpr_mu_lock(&chand->server->mu); switch (calld->state) { case ACTIVATED: break; case PENDING: call_list_remove(calld, PENDING_START); /* fallthrough intended */ case NOT_STARTED: calld->state = ZOMBIED; grpc_iomgr_add_callback(kill_zombie, elem); break; case ZOMBIED: break; } gpr_mu_unlock(&chand->server->mu); grpc_call_stream_closed(elem); }