Module: PryRemoteEm::Client::Generic
Instance Method Summary
collapse
Methods included from Proto
#receive_auth, #receive_clear_buffer, #receive_completion, #receive_data, #receive_msg, #receive_msg_bcast, #receive_object, #receive_prompt, #receive_proxy_connection, #receive_raw, #receive_register_server, #receive_server_list, #receive_server_reload_list, #receive_shell_cmd, #receive_shell_data, #receive_shell_result, #receive_shell_sig, #receive_start_tls, #receive_unknown, #receive_unregister_server, #send_auth, #send_banner, #send_clear_buffer, #send_completion, #send_heatbeat, #send_msg, #send_msg_bcast, #send_object, #send_prompt, #send_proxy_connection, #send_raw, #send_register_server, #send_server_list, #send_server_reload_list, #send_shell_cmd, #send_shell_data, #send_shell_result, #send_shell_sig, #send_start_tls, #send_unregister_server
Instance Method Details
#connection_completed ⇒ Object
34
35
36
37
38
39
40
41
42
43
44
45
46
|
# File 'lib/pry-remote-em/client/generic.rb', line 34
def connection_completed
if get_peername
port, ip = Socket.unpack_sockaddr_in(get_peername)
log.info("[pry-remote-em] client connected to pryem://#{ip}:#{port}/")
else
log.info('[pry-remote-em] client connected')
end
timeout = ENV['PRYEMNEGOTIMEOUT'].nil? || ENV['PRYEMNEGOTIMEOUT'].empty? ? NEGOTIATION_TIMEOUT : ENV['PRYEMNEGOTIMEOUT']
@nego_timer = EM::Timer.new(timeout) do
fail("[pry-remote-em] server didn't finish negotiation within #{timeout} seconds; terminating")
end
end
|
#initialize(opts = {}) ⇒ Object
9
10
11
|
# File 'lib/pry-remote-em/client/generic.rb', line 9
def initialize(opts = {})
@opts = opts
end
|
17
18
19
20
21
22
23
24
25
|
# File 'lib/pry-remote-em/client/generic.rb', line 17
def log
@log ||= Class.new do
def print(str); $stderr.puts(str) end
alias :info :print
alias :warn :print
alias :error :print
alias :debug :print
end.new
end
|
13
14
15
|
# File 'lib/pry-remote-em/client/generic.rb', line 13
def opts
@opts ||= {}
end
|
#receive_banner(name, version, scheme) ⇒ Object
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
|
# File 'lib/pry-remote-em/client/generic.rb', line 48
def receive_banner(name, version, scheme)
log.info("[pry-remote-em] remote is #{name} #{version} #{scheme}")
client_ver = Gem::Version.new(PryRemoteEm::VERSION)
server_req = Gem::Requirement.new("~>#{version}")
server_ver = Gem::Version.new(version)
client_req = Gem::Requirement.new("~>#{PryRemoteEm::VERSION}")
unless server_req.satisfied_by?(client_ver) || client_req.satisfied_by?(server_ver)
fail("[pry-remote-em] incompatible version #{PryRemoteEm::VERSION}")
return false
end
if scheme.nil? || scheme != (reqscheme = opts[:tls] ? 'pryems' : 'pryem')
if scheme == 'pryems' && defined?(::OpenSSL)
opts[:tls] = true
else
fail("[pry-remote-em] server doesn't support required scheme #{reqscheme.dump}")
return false
end
end
@negotiated = true
@nego_timer.cancel
true
end
|
#start_tls ⇒ Object
27
28
29
30
31
32
|
# File 'lib/pry-remote-em/client/generic.rb', line 27
def start_tls
return if @tls_started
@tls_started = true
log.info('[pry-remote-em] negotiating TLS')
super(opts[:tls].is_a?(Hash) ? opts[:tls] : {})
end
|