This is a utility class used internally by Forward::Driver. It manages the network server instance for each locally forwarded port, and is passed as the handler to Driver#direct_channel by Forward::Driver#forward_local. Other clients may desire to extend this class and pass the modified class to Forward::Driver#direct_channel for their own purposes, but in general this class will rarely be used outside of Forward::Driver.
Create a new LocalNetworkHandler for the given client connection.
[ show source ]
# File lib/net/ssh/service/forward/local-network-handler.rb, line 32
32: def initialize( log, block_size, client )
33: @log = log
34: @block_size = block_size
35: @client = client
36: end
Invoked when the remote end of the channel will no longer be sending data. It may still receive data, however.
[ show source ]
# File lib/net/ssh/service/forward/local-network-handler.rb, line 46
46: def on_eof( channel )
47: channel[:eof] = true
48: end
Invoked when data is recieved from the channel. This method just sends the data to the client connection.
[ show source ]
# File lib/net/ssh/service/forward/local-network-handler.rb, line 40
40: def on_receive( channel, data )
41: @client.send data, 0
42: end
Called to process the channel in a loop. It will repeatedly read from the client and send the results across the channel.
[ show source ]
# File lib/net/ssh/service/forward/local-network-handler.rb, line 52
52: def process( channel )
53: loop do
54: break if channel[:eof]
55: data = @client.recv(@block_size) or break
56: channel.send_data data unless data.empty?
57: end
58:
59: channel.close
60: rescue StandardError, Exception => e
61: @log.error "error processing connection: " +
62: "#{e.class} (#{e.message})\n " +
63: e.backtrace.join("\n ")
64: end