aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/ruby/lib
diff options
context:
space:
mode:
authorGravatar Alexander Polcyn <apolcyn@google.com>2017-07-18 23:19:24 -0700
committerGravatar Alexander Polcyn <apolcyn@google.com>2017-07-19 17:31:27 -0700
commit7cc30c1155805537e18affd13cc4b7e44c3927be (patch)
tree1bcc0c0910a4ba23a88737e7afac924fdec6e6b7 /src/ruby/lib
parent59a19a9d5ecc34b60fd6c035a6cb261261dd48fe (diff)
add missing fields on server call context and improve robustness of finished calls
Diffstat (limited to 'src/ruby/lib')
-rw-r--r--src/ruby/lib/grpc/generic/active_call.rb14
-rw-r--r--src/ruby/lib/grpc/generic/rpc_server.rb1
2 files changed, 13 insertions, 2 deletions
diff --git a/src/ruby/lib/grpc/generic/active_call.rb b/src/ruby/lib/grpc/generic/active_call.rb
index 4a748a4ac2..84c8887168 100644
--- a/src/ruby/lib/grpc/generic/active_call.rb
+++ b/src/ruby/lib/grpc/generic/active_call.rb
@@ -44,9 +44,9 @@ module GRPC
include Core::TimeConsts
include Core::CallOps
extend Forwardable
- attr_reader :deadline, :metadata_sent, :metadata_to_send
+ attr_reader :deadline, :metadata_sent, :metadata_to_send, :peer, :peer_cert
def_delegators :@call, :cancel, :metadata, :write_flag, :write_flag=,
- :peer, :peer_cert, :trailing_metadata, :status
+ :trailing_metadata, :status
# client_invoke begins a client invocation.
#
@@ -105,8 +105,13 @@ module GRPC
@input_stream_done = false
@call_finished = false
@call_finished_mu = Mutex.new
+
@client_call_executed = false
@client_call_executed_mu = Mutex.new
+
+ # set the peer now so that the accessor can still function
+ # after the server closes the call
+ @peer = call.peer
end
# Sends the initial metadata that has yet to be sent.
@@ -541,6 +546,10 @@ module GRPC
end
end
+ def attach_peer_cert(peer_cert)
+ @peer_cert = peer_cert
+ end
+
private
# To be called once the "input stream" has been completelly
@@ -612,6 +621,7 @@ module GRPC
# server client_streamer handlers.
MultiReqView = view_class(:cancelled?, :deadline, :each_queued_msg,
:each_remote_read, :metadata, :output_metadata,
+ :peer, :peer_cert,
:send_initial_metadata,
:metadata_to_send,
:merge_metadata_to_send,
diff --git a/src/ruby/lib/grpc/generic/rpc_server.rb b/src/ruby/lib/grpc/generic/rpc_server.rb
index ef2cc0ce91..33b3cea1fc 100644
--- a/src/ruby/lib/grpc/generic/rpc_server.rb
+++ b/src/ruby/lib/grpc/generic/rpc_server.rb
@@ -418,6 +418,7 @@ module GRPC
metadata_received: true,
started: false,
metadata_to_send: connect_md)
+ c.attach_peer_cert(an_rpc.call.peer_cert)
mth = an_rpc.method.to_sym
[c, mth]
end