connection_completed()
click to toggle source
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
@nego_timer = EM::Timer.new(PryRemoteEm::NEGOTIMER) do
fail("[pry-remote-em] server didn't finish negotiation within #{PryRemoteEm::NEGOTIMER} seconds; terminating")
end
end
log()
click to toggle source
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
opts()
click to toggle source
def opts
@opts ||= {}
end
print(str)
click to toggle source
def print(str); $stderr.puts(str) end
receive_banner(name, version, scheme)
click to toggle source
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()
click to toggle source
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