class HrrRbSftp::Protocol::Version1::Packets
This class implements SFTP protocol version 1 packet types, formats, and responders.
Public Class Methods
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/version1/packets.rb, line 17 def initialize context, logger: nil self.logger = logger @packets = packet_classes.map{|c| {c::TYPE => c.new(context, logger: logger)}}.inject({}, :merge) end
Public Instance Methods
respond_to(request_payload)
click to toggle source
Responds to a request.
@param request_payload [String] Request payload. @return [String] Response payload that is encoded packet generated by each SFTP protocol version and each request responder. @raise [RuntimeError] When the SFTP protocol version does not support or the library does not implement the request type.
# File lib/hrr_rb_sftp/protocol/version1/packets.rb, line 30 def respond_to request_payload request_type = request_payload[0].unpack("C")[0] response_packet = if @packets.has_key?(request_type) request_packet = @packets[request_type].decode request_payload @packets[request_type].respond_to request_packet else raise RuntimeError, "Unsupported type: #{request_type}" end response_type = response_packet[:"type"] @packets[response_type].encode response_packet end
Private Instance Methods
packet_classes()
click to toggle source
# File lib/hrr_rb_sftp/protocol/version1/packets.rb, line 44 def packet_classes self.class.constants.select{|c| c.to_s.start_with?("SSH_FXP_")}.map{|c| self.class.const_get(c)} end