|
|
|
@ -38,6 +38,7 @@ |
|
|
|
|
#include "grpc/grpc.h" |
|
|
|
|
#include "grpc/byte_buffer_reader.h" |
|
|
|
|
#include "grpc/support/slice.h" |
|
|
|
|
#include "grpc/support/log.h" |
|
|
|
|
|
|
|
|
|
#include "byte_buffer.h" |
|
|
|
|
|
|
|
|
@ -72,17 +73,13 @@ Local<Value> ByteBufferToBuffer(grpc_byte_buffer *buffer) { |
|
|
|
|
if (buffer == NULL) { |
|
|
|
|
return scope.Escape(Nan::Null()); |
|
|
|
|
} |
|
|
|
|
size_t length = grpc_byte_buffer_length(buffer); |
|
|
|
|
char *result = new char[length]; |
|
|
|
|
size_t offset = 0; |
|
|
|
|
gpr_log(GPR_DEBUG, "Compressed size: %d", grpc_byte_buffer_length(buffer)); |
|
|
|
|
grpc_byte_buffer_reader reader; |
|
|
|
|
grpc_byte_buffer_reader_init(&reader, buffer); |
|
|
|
|
gpr_slice next; |
|
|
|
|
while (grpc_byte_buffer_reader_next(&reader, &next) != 0) { |
|
|
|
|
memcpy(result + offset, GPR_SLICE_START_PTR(next), GPR_SLICE_LENGTH(next)); |
|
|
|
|
offset += GPR_SLICE_LENGTH(next); |
|
|
|
|
gpr_slice_unref(next); |
|
|
|
|
} |
|
|
|
|
gpr_slice slice = grpc_byte_buffer_reader_readall(&reader); |
|
|
|
|
size_t length = GPR_SLICE_LENGTH(slice); |
|
|
|
|
char *result = new char[length]; |
|
|
|
|
memcpy(result, GPR_SLICE_START_PTR(slice), length); |
|
|
|
|
return scope.Escape(MakeFastBuffer( |
|
|
|
|
Nan::NewBuffer(result, length, delete_buffer, NULL).ToLocalChecked())); |
|
|
|
|
} |
|
|
|
|