• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  *
3  * Copyright 2015 gRPC authors.
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  *     http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  *
17  */
18 
19 #include <ruby/ruby.h>
20 
21 #include "rb_byte_buffer.h"
22 #include "rb_grpc_imports.generated.h"
23 
24 #include <grpc/byte_buffer_reader.h>
25 #include <grpc/grpc.h>
26 #include <grpc/slice.h>
27 #include "rb_grpc.h"
28 
grpc_rb_s_to_byte_buffer(char * string,size_t length)29 grpc_byte_buffer* grpc_rb_s_to_byte_buffer(char* string, size_t length) {
30   grpc_slice slice = grpc_slice_from_copied_buffer(string, length);
31   grpc_byte_buffer* buffer = grpc_raw_byte_buffer_create(&slice, 1);
32   grpc_slice_unref(slice);
33   return buffer;
34 }
35 
grpc_rb_byte_buffer_to_s(grpc_byte_buffer * buffer)36 VALUE grpc_rb_byte_buffer_to_s(grpc_byte_buffer* buffer) {
37   VALUE rb_string;
38   grpc_byte_buffer_reader reader;
39   grpc_slice next;
40   if (buffer == NULL) {
41     return Qnil;
42   }
43   rb_string = rb_str_buf_new(grpc_byte_buffer_length(buffer));
44   if (!grpc_byte_buffer_reader_init(&reader, buffer)) {
45     rb_raise(rb_eRuntimeError, "Error initializing byte buffer reader.");
46     return Qnil;
47   }
48   while (grpc_byte_buffer_reader_next(&reader, &next) != 0) {
49     rb_str_cat(rb_string, (const char*)GRPC_SLICE_START_PTR(next),
50                GRPC_SLICE_LENGTH(next));
51     grpc_slice_unref(next);
52   }
53   grpc_byte_buffer_reader_destroy(&reader);
54   return rb_string;
55 }
56 
grpc_rb_slice_to_ruby_string(grpc_slice slice)57 VALUE grpc_rb_slice_to_ruby_string(grpc_slice slice) {
58   if (GRPC_SLICE_START_PTR(slice) == NULL) {
59     rb_raise(rb_eRuntimeError,
60              "attempt to convert uninitialized grpc_slice to ruby string");
61   }
62   return rb_str_new((char*)GRPC_SLICE_START_PTR(slice),
63                     GRPC_SLICE_LENGTH(slice));
64 }
65