module Net::SSH::Connection
Public Instance Methods
Invokes the on_close callback when the server closes a channel. The channel is the only argument.
# File lib/net/ssh/connection/channel.rb, line 606 def do_close @on_close.call(self) if @on_close end
Invokes the on_eof callback when the server indicates that no further data is forthcoming. The callback is invoked with the channel as the argument.
# File lib/net/ssh/connection/channel.rb, line 600 def do_eof @on_eof.call(self) if @on_eof end
Invokes the on_extended_data callback when the server sends extended data to the channel. This will reduce the available window size on the local end. The callback is invoked with the channel, type, and data.
# File lib/net/ssh/connection/channel.rb, line 592 def do_extended_data(type, data) update_local_window_size(data.length) @on_extended_data.call(self, type, data) if @on_extended_data end
Invokes the next pending request callback with false
as the
second argument.
# File lib/net/ssh/connection/channel.rb, line 612 def do_failure if callback = pending_requests.shift callback.call(self, false) else error { "channel failure received with no pending request to handle it (bug?)" } end end
Invoked when the server failed to open the channel. If an on_open_failed callback was specified, it will be invoked with the channel, reason code, and description as arguments. Otherwise, a ChannelOpenFailed exception will be raised.
# File lib/net/ssh/connection/channel.rb, line 537 def do_open_failed(reason_code, description) if @on_open_failed @on_open_failed.call(self, reason_code, description) else raise ChannelOpenFailed.new(reason_code, description) end end
Invokes the next pending request callback with true
as the
second argument.
# File lib/net/ssh/connection/channel.rb, line 622 def do_success if callback = pending_requests.shift callback.call(self, true) else error { "channel success received with no pending request to handle it (bug?)" } end end
Private Instance Methods
Gets an Array
of local environment variables in the remote
process' environment. A variable name can either be described by a
Regexp
or String
.
channel.forward_local_env [/^GIT_.*$/, "LANG"]
# File lib/net/ssh/connection/channel.rb, line 657 def forward_local_env(env_variable_patterns) Array(env_variable_patterns).each do |env_variable_pattern| matched_variables = ENV.find_all do |env_name, _| case env_variable_pattern when Regexp then env_name =~ env_variable_pattern when String then env_name == env_variable_pattern end end matched_variables.each do |env_name, env_value| self.env(env_name, env_value) end end end
Updates the local window size by the given amount. If the window size drops to less than half of the local maximum (an arbitrary threshold), a CHANNEL_WINDOW_ADJUST message will be sent to the server telling it that the window size has grown.
# File lib/net/ssh/connection/channel.rb, line 642 def update_local_window_size(size) @local_window_size -= size if local_window_size < local_maximum_window_size/2 connection.send_message(Buffer.from(:byte, CHANNEL_WINDOW_ADJUST, :long, remote_id, :long, 0x20000)) @local_window_size += 0x20000 @local_maximum_window_size += 0x20000 end end
Runs the SSH event loop until the remote confirmed channel open experimental api
# File lib/net/ssh/connection/channel.rb, line 634 def wait_until_open_confirmed connection.loop { !remote_id } end