class Pione::DRbPatch::RequestInvoker
Public Class Methods
new(server, client, request)
click to toggle source
# File lib/pione/patch/drb-patch.rb, line 376 def initialize(server, client, request) @server = server @client = client @request = request check_insecure_method end
Public Instance Methods
invoke()
click to toggle source
# File lib/pione/patch/drb-patch.rb, line 383 def invoke # evaluate request succ, result = execute_request # send_reply with req_id begin @client.send_reply(@request.req_id, succ, result) rescue => e Log::Debug.system("it happened communication failure in sending reply(req_id: %s): %s" % [@request.req_id, e.message]) end end
Private Instance Methods
check_insecure_method()
click to toggle source
# File lib/pione/patch/drb-patch.rb, line 408 def check_insecure_method @server.check_insecure_method(@request.obj, @request.msg_id) end
eval_request()
click to toggle source
# File lib/pione/patch/drb-patch.rb, line 412 def eval_request $SAFE < @server.safe_level ? safe_eval_request : unsafe_eval_request end
execute_request()
click to toggle source
perform without setup_message
# File lib/pione/patch/drb-patch.rb, line 398 def execute_request result = eval_request if @request.msg_id == :to_ary && result.class == Array result = DRbArray.new(result) end return true, result rescue StandardError, ScriptError => e return false, e end
safe_eval_request()
click to toggle source
Execute the request within sandbox.
# File lib/pione/patch/drb-patch.rb, line 417 def safe_eval_request info = Thread.current['DRb'] Thread.new do # import DRb info to the sandbox Thread.current['DRb'] = info # make sandbox $SAFE = @drb_server.safe_level # invoke request unsafe_request_invoke end.value end
unsafe_eval_request()
click to toggle source
Execute the request.
# File lib/pione/patch/drb-patch.rb, line 432 def unsafe_eval_request @request.eval end