class HrrRbSftp::Protocol::Version3::Extensions
This class implements SFTP protocol version 3 extension formats and responders.
Public Class Methods
extension_classes()
click to toggle source
@return [Array<Class>] A list of classes that has EXTENSION_NAME constant.
# File lib/hrr_rb_sftp/protocol/version3/extensions.rb, line 14 def self.extension_classes constants.map{|c| const_get(c)}.select{|c| c.respond_to?(:const_defined?) && c.const_defined?(:EXTENSION_NAME)} end
extension_pairs()
click to toggle source
@return [Array] A list of extension-pair that the library supports.
# File lib/hrr_rb_sftp/protocol/version3/extensions.rb, line 21 def self.extension_pairs extension_classes.map{|c| {:"extension-name" => c::EXTENSION_NAME, :"extension-data" => c::EXTENSION_DATA}} end
new(context, logger: nil)
click to toggle source
@param context [Hash] Contextual variables.
- :version (Integer) - Negotiated protocol version. - :handles (Hash\\{String=>File, Dir\}) - Opened handles.
@param logger [Logger] Logger.
# File lib/hrr_rb_sftp/protocol/version3/extensions.rb, line 31 def initialize context, logger: nil self.logger = logger @conditional_request_format = conditional_request_format @conditional_reply_format = conditional_reply_format @extensions = extension_classes.map{ |c| extension = c.new(context, logger: logger) (c::REQUEST_FORMAT[:"extended-request"] || {}).keys.map{|key| {key => extension} }.inject({}, :merge) }.inject({}, :merge) end
Public Instance Methods
conditional_reply_format()
click to toggle source
@return [Hash{Symbol=>Hash{String=>Array<Array(Object, Symbol)>}}] Conditional format used in extended-reply packet.
# File lib/hrr_rb_sftp/protocol/version3/extensions.rb, line 68 def conditional_reply_format @conditional_reply_format ||= reply_formats.inject({}){|h1,h2| h1.merge(h2){|k,v1,v2| v1.merge(v2)}} end
conditional_request_format()
click to toggle source
@return [Hash{Symbol=>Hash{String=>Array<Array(Object, Symbol)>}}] Conditional format used in extended-request packet.
# File lib/hrr_rb_sftp/protocol/version3/extensions.rb, line 61 def conditional_request_format @conditional_request_format ||= request_formats.inject({}){|h1,h2| h1.merge(h2){|k,v1,v2| v1.merge(v2)}} end
respond_to(request)
click to toggle source
@return [Hash{Symbol=>Object] Response represented in Hash.
# File lib/hrr_rb_sftp/protocol/version3/extensions.rb, line 53 def respond_to request extended_request = request[:"extended-request"] @extensions[extended_request].respond_to request end
respond_to?(request)
click to toggle source
@return [Boolean] true if request's extended-request is supported. false if not.
# File lib/hrr_rb_sftp/protocol/version3/extensions.rb, line 45 def respond_to? request extended_request = request[:"extended-request"] @extensions.has_key?(extended_request) end
Private Instance Methods
extension_classes()
click to toggle source
# File lib/hrr_rb_sftp/protocol/version3/extensions.rb, line 74 def extension_classes self.class.constants.map{|c| self.class.const_get(c)}.select{|c| c.respond_to?(:const_defined?) && c.const_defined?(:EXTENSION_NAME)} end
reply_formats()
click to toggle source
# File lib/hrr_rb_sftp/protocol/version3/extensions.rb, line 82 def reply_formats extension_classes.map{|c| c.const_defined?(:REPLY_FORMAT) ? c::REPLY_FORMAT : {}} end
request_formats()
click to toggle source
# File lib/hrr_rb_sftp/protocol/version3/extensions.rb, line 78 def request_formats extension_classes.map{|c| c.const_defined?(:REQUEST_FORMAT) ? c::REQUEST_FORMAT : {}} end