diff options
Diffstat (limited to 'src/ruby/ext/grpc/rb_call.c')
-rw-r--r-- | src/ruby/ext/grpc/rb_call.c | 25 |
1 files changed, 24 insertions, 1 deletions
diff --git a/src/ruby/ext/grpc/rb_call.c b/src/ruby/ext/grpc/rb_call.c index 40364328ee..1647d9b484 100644 --- a/src/ruby/ext/grpc/rb_call.c +++ b/src/ruby/ext/grpc/rb_call.c @@ -39,6 +39,7 @@ #include <grpc/support/alloc.h> #include "rb_byte_buffer.h" +#include "rb_call_credentials.h" #include "rb_completion_queue.h" #include "rb_grpc.h" @@ -279,6 +280,26 @@ static VALUE grpc_rb_call_set_write_flag(VALUE self, VALUE write_flag) { return rb_ivar_set(self, id_write_flag, write_flag); } +/* + call-seq: + call.set_credentials call_credentials + + Sets credentials on a call */ +static VALUE grpc_rb_call_set_credentials(VALUE self, VALUE credentials) { + grpc_call *call = NULL; + grpc_call_credentials *creds; + grpc_call_error err; + TypedData_Get_Struct(self, grpc_call, &grpc_call_data_type, call); + creds = grpc_rb_get_wrapped_call_credentials(credentials); + err = grpc_call_set_credentials(call, creds); + if (err != GRPC_CALL_OK) { + rb_raise(grpc_rb_eCallError, + "grpc_call_set_credentials failed with %s (code=%d)", + grpc_call_error_detail_of(err), err); + } + return Qnil; +} + /* grpc_rb_md_ary_fill_hash_cb is the hash iteration callback used to fill grpc_metadata_array. @@ -347,7 +368,7 @@ static int grpc_rb_md_ary_capacity_hash_cb(VALUE key, VALUE val, /* grpc_rb_md_ary_convert converts a ruby metadata hash into a grpc_metadata_array. */ -static void grpc_rb_md_ary_convert(VALUE md_ary_hash, +void grpc_rb_md_ary_convert(VALUE md_ary_hash, grpc_metadata_array *md_ary) { VALUE md_ary_obj = Qnil; if (md_ary_hash == Qnil) { @@ -795,6 +816,8 @@ void Init_grpc_call() { rb_define_method(grpc_rb_cCall, "write_flag", grpc_rb_call_get_write_flag, 0); rb_define_method(grpc_rb_cCall, "write_flag=", grpc_rb_call_set_write_flag, 1); + rb_define_method(grpc_rb_cCall, "set_credentials!", + grpc_rb_call_set_credentials, 1); /* Ids used to support call attributes */ id_metadata = rb_intern("metadata"); |