class HrrRbSsh::Connection::Channel::ChannelType::DirectTcpip
Constants
- NAME
Public Class Methods
new(connection, channel, message, socket=nil, logger: nil)
click to toggle source
# File lib/hrr_rb_ssh/connection/channel/channel_type/direct_tcpip.rb, line 15 def initialize connection, channel, message, socket=nil, logger: nil self.logger = logger @connection = connection @channel = channel @host_to_connect = message[:'host to connect'] @port_to_connect = message[:'port to connect'] @originator_IP_address = message[:'originator IP address'] @originator_port = message[:'originator port'] end
Public Instance Methods
close()
click to toggle source
# File lib/hrr_rb_ssh/connection/channel/channel_type/direct_tcpip.rb, line 31 def close begin if @sender_thread_finished && @receiver_thread_finished log_info { "closing direct-tcpip" } @socket.close log_info { "closing channel IOs" } @channel.io.each{ |io| io.close rescue nil } log_info { "channel IOs closed" } @channel.close from=:channel_type_instance log_info { "direct-tcpip closed" } end rescue => e log_error { [e.backtrace[0], ": ", e.message, " (", e.class.to_s, ")\n\t", e.backtrace[1..-1].join("\n\t")].join } end end
receiver_thread()
click to toggle source
# File lib/hrr_rb_ssh/connection/channel/channel_type/direct_tcpip.rb, line 76 def receiver_thread Thread.new(@socket){ |s| begin loop do begin s.write @channel.io[0].readpartial(10240) rescue EOFError log_info { "io is EOF" } s.close_write break rescue IOError log_info { "socket is closed" } break rescue => e log_error { [e.backtrace[0], ": ", e.message, " (", e.class.to_s, ")\n\t", e.backtrace[1..-1].join("\n\t")].join } s.close_write break end end log_info { "finishing receiver thread" } @receiver_thread_finished = true close ensure log_info { "receiver thread finished" } end } end
sender_thread()
click to toggle source
# File lib/hrr_rb_ssh/connection/channel/channel_type/direct_tcpip.rb, line 47 def sender_thread Thread.new(@socket){ |s| begin loop do begin @channel.io[1].write s.readpartial(10240) rescue EOFError log_info { "socket is EOF" } @channel.io[1].close rescue nil break rescue IOError log_info { "socket is closed" } @channel.io[1].close rescue nil break rescue => e log_error { [e.backtrace[0], ": ", e.message, " (", e.class.to_s, ")\n\t", e.backtrace[1..-1].join("\n\t")].join } @channel.io[1].close rescue nil break end end log_info { "finishing sender thread" } @sender_thread_finished = true close ensure log_info { "sender thread finished" } end } end
start()
click to toggle source
# File lib/hrr_rb_ssh/connection/channel/channel_type/direct_tcpip.rb, line 25 def start @socket = TCPSocket.new @host_to_connect, @port_to_connect @sender_thread = sender_thread @receiver_thread = receiver_thread end