class HrrRbSftp::Protocol::Version3::Extensions::StatvfsAtOpensshCom

This class implements statvfs@openssh.com version 2 extension format and responder.

Constants

EXTENSION_DATA

Represents statvfs@openssh.com version 2 extension data.

EXTENSION_NAME

Represents statvfs@openssh.com version 2 extension name.

REPLY_FORMAT

Represents SSH_FXP_EXTENDED_REPLY packet additional format for statvfs@openssh.com version 2 extension.

REQUEST_FORMAT

Represents SSH_FXP_EXTENDED packet additional format for statvfs@openssh.com version 2 extension.

SSH_FXE_STATVFS_ST_NOSUID

Represents statvfs@openssh.com version 2 extension no setuid flag.

SSH_FXE_STATVFS_ST_RDONLY

Represents statvfs@openssh.com version 2 extension read-only flag.

Public Instance Methods

respond_to(request) click to toggle source

Responds to SSH_FXP_EXTENDED request with statvfs@openssh.com extended-request.

@param request [Hash{Symbol=>Object}] SSH_FXP_EXTENDED request represented in Hash. @return [Hash{Symbol=>Object}] Response represented in Hash. In case of success, its type is SSH_FXP_EXTENDED_REPLY. In other cases, its type is SSH_FXP_STATUS.

# File lib/hrr_rb_sftp/protocol/version3/extensions/statvfs_at_openssh_com.rb, line 69
def respond_to request
  begin
    log_debug { "Sys::Filesystem.stat(#{request[:"path"].inspect})" }
    stat = Sys::Filesystem.stat(request[:"path"])
    {
      :"type"           => Packets::SSH_FXP_EXTENDED_REPLY::TYPE,
      :"request-id"     => request[:"request-id"],
      :"extended-reply" => request[:"extended-request"], # implied field in reply format
      :"f_bsize"        => stat.block_size,
      :"f_frsize"       => stat.fragment_size,
      :"f_blocks"       => stat.blocks,
      :"f_bfree"        => stat.blocks_free,
      :"f_bavail"       => stat.blocks_available,
      :"f_files"        => stat.files,
      :"f_ffree"        => stat.files_free,
      :"f_favail"       => stat.files_available,
      :"f_fsid"         => stat.filesystem_id,
      :"f_flag"         => stat.flags & (Sys::Filesystem::Stat::RDONLY | Sys::Filesystem::Stat::NOSUID),
      :"f_namemax"      => stat.name_max,
    }
  rescue Sys::Filesystem::Error => e
    log_debug { e.message }
    {
      :"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