class HrrRbSftp::Protocol::Version3::Packets::SSH_FXP_EXTENDED

This class implements SFTP protocol version 1 SSH_FXP_EXTENDED packet type, format, and responder.

Constants

CONDITIONAL_FORMAT

Private method conditional_format is used instead.

@example

{
  :"extended-request" => {
    "hardlink@openssh.com" => [
      [DataTypes::String, :"oldpath"],
      [DataTypes::String, :"newpath"],
    ],
  },
}
FORMAT

Represents SSH_FXP_EXTENDED packet format.

TYPE

Represents SSH_FXP_EXTENDED packet type.

Public Instance Methods

respond_to(request) click to toggle source

Responds to SSH_FXP_EXTENDED request.

@param request [Hash{Symbol=>Object}] SSH_FXP_EXTENDED request represented in Hash. @return [Hash{Symbol=>Object}] Response represented in Hash. Its type is SSH_FXP_STATUS.

# File lib/hrr_rb_sftp/protocol/version3/packets/200_ssh_fxp_extended.rb, line 47
def respond_to request
  begin
    if extensions.respond_to? request
      extensions.respond_to request
    else
      {
        :"type"          => Packets::SSH_FXP_STATUS::TYPE,
        :"request-id"    => request[:"request-id"],
        :"code"          => Packets::SSH_FXP_STATUS::SSH_FX_OP_UNSUPPORTED,
        :"error message" => "Unsupported extended-request: #{request[:"extended-request"]}",
        :"language tag"  => "",
      }
    end
  rescue => e
    log_error { [e.backtrace[0], ": ", e.message, " (", e.class.to_s, ")\n\t", e.backtrace[1..-1].join("\n\t")].join }
    {
      :"type"          => Packets::SSH_FXP_STATUS::TYPE,
      :"request-id"    => request[:"request-id"],
      :"code"          => Packets::SSH_FXP_STATUS::SSH_FX_FAILURE,
      :"error message" => e.message,
      :"language tag"  => "",
    }
  end
end

Private Instance Methods

conditional_format(packet) click to toggle source

Overrides Common::Packetable#conditional_format private method and represents SSH_FXP_EXTENDED packet conditional format.

# File lib/hrr_rb_sftp/protocol/version3/packets/200_ssh_fxp_extended.rb, line 86
def conditional_format packet
  packet.inject([]){ |a, (field_name, field_value)|
    a + ((extensions.conditional_request_format[field_name] || {})[field_value] || [])
  }
end
extensions() click to toggle source

Returns An instance of Extensions.

@return [Extensions] An instance of Extensions.

# File lib/hrr_rb_sftp/protocol/version3/packets/200_ssh_fxp_extended.rb, line 79
def extensions
  @extensions ||= Protocol.const_get(:"Version#{version}")::Extensions.new(context, logger: logger)
end