예제 #1
0
static PyObject *pygrpc_read_event_args(grpc_event *c_event) {
  if (c_event->data.read == NULL) {
    return PyTuple_Pack(7, read_event_kind, (PyObject *)c_event->tag,
                        Py_None, Py_None, Py_None, Py_None, Py_None);
  } else {
    size_t length;
    size_t offset;
    grpc_byte_buffer_reader *reader;
    gpr_slice slice;
    char *c_bytes;
    PyObject *bytes;
    PyObject *event_args;

    length = grpc_byte_buffer_length(c_event->data.read);
    reader = grpc_byte_buffer_reader_create(c_event->data.read);
    c_bytes = gpr_malloc(length);
    offset = 0;
    while (grpc_byte_buffer_reader_next(reader, &slice)) {
      memcpy(c_bytes + offset, GPR_SLICE_START_PTR(slice),
             GPR_SLICE_LENGTH(slice));
      offset += GPR_SLICE_LENGTH(slice);
    }
    grpc_byte_buffer_reader_destroy(reader);
    bytes = PyBytes_FromStringAndSize(c_bytes, length);
    gpr_free(c_bytes);
    if (bytes == NULL) {
      return NULL;
    }
    event_args = PyTuple_Pack(7, read_event_kind, (PyObject *)c_event->tag,
                              Py_None, Py_None, Py_None, bytes, Py_None);
    Py_DECREF(bytes);
    return event_args;
  }
}
예제 #2
0
파일: byte_buffer.c 프로젝트: mindis/grpc
void byte_buffer_to_string(grpc_byte_buffer *buffer, char **out_string,
                           size_t *out_length) {
  size_t length = grpc_byte_buffer_length(buffer);
  char *string = ecalloc(length + 1, sizeof(char));
  size_t offset = 0;
  grpc_byte_buffer_reader *reader = grpc_byte_buffer_reader_create(buffer);
  gpr_slice next;
  while (grpc_byte_buffer_reader_next(reader, &next) != 0) {
    memcpy(string + offset, GPR_SLICE_START_PTR(next), GPR_SLICE_LENGTH(next));
    offset += GPR_SLICE_LENGTH(next);
  }
  *out_string = string;
  *out_length = length;
}
예제 #3
0
파일: server.c 프로젝트: mindis/grpc
static void assert_read_ok(call_state *s, grpc_byte_buffer *b) {
  grpc_byte_buffer_reader *bb_reader = NULL;
  gpr_slice read_slice;
  unsigned i;

  bb_reader = grpc_byte_buffer_reader_create(b);
  while (grpc_byte_buffer_reader_next(bb_reader, &read_slice)) {
    for (i = 0; i < GPR_SLICE_LENGTH(read_slice); i++) {
      GPR_ASSERT(GPR_SLICE_START_PTR(read_slice)[i] == s->bytes_read % 256);
      s->bytes_read++;
    }
    gpr_slice_unref(read_slice);
  }
  grpc_byte_buffer_reader_destroy(bb_reader);
}