示例#1
0
文件: client.c 项目: Abioy/kythe
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);
  }
}
示例#2
0
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);
  }
}
示例#3
0
文件: lame_client.c 项目: mindis/grpc
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);
}
示例#4
0
文件: server.c 项目: mindis/grpc
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;
  }
}