/usr/lib/ruby/vendor_ruby/net/ssh/multi/channel_proxy.rb is in ruby-net-ssh-multi 1.1-1build1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | module Net; module SSH; module Multi
# The ChannelProxy is a delegate class that represents a channel that has
# not yet been opened. It is only used when Net::SSH::Multi is running with
# with a concurrent connections limit (see Net::SSH::Multi::Session#concurrent_connections).
#
# You'll never need to instantiate one of these directly, and will probably
# (if all goes well!) never even notice when one of these is in use. Essentially,
# it is spawned by a Net::SSH::Multi::PendingConnection when the pending
# connection is asked to open a channel. Any actions performed on the
# channel proxy will then be recorded, until a real channel is set as the
# delegate (see #delegate_to). At that point, all recorded actions will be
# replayed on the channel, and any subsequent actions will be immediately
# delegated to the channel.
class ChannelProxy
# This is the "on confirm" callback that gets called when the real channel
# is opened.
attr_reader :on_confirm
# Instantiates a new channel proxy with the given +on_confirm+ callback.
def initialize(&on_confirm)
@on_confirm = on_confirm
@recordings = []
@channel = nil
end
# Instructs the proxy to delegate all further actions to the given +channel+
# (which must be an instance of Net::SSH::Connection::Channel). All recorded
# actions are immediately replayed, in order, against the delegate channel.
def delegate_to(channel)
@channel = channel
@recordings.each do |sym, args, block|
@channel.__send__(sym, *args, &block)
end
end
# If a channel delegate has been specified (see #delegate_to), the method
# will be immediately sent to the delegate. Otherwise, the call is added
# to the list of recorded method calls, to be played back when a delegate
# is specified.
def method_missing(sym, *args, &block)
if @channel
@channel.__send__(sym, *args, &block)
else
@recordings << [sym, args, block]
end
end
end
end; end; end
|