Class: Net::SFTP::Protocol::V05::Base

Overview

Wraps the low-level SFTP calls for version 5 of the SFTP protocol.

None of these protocol methods block–all of them return immediately, requiring the SSH event loop to be run while the server response is pending.

You will almost certainly never need to use this driver directly. Please see Net::SFTP::Session for the recommended interface.

Direct Known Subclasses

Net::SFTP::Protocol::V06::Base

Constant Summary

Constants included from Constants::PacketTypes

Constants::PacketTypes::FXP_ATTRS, Constants::PacketTypes::FXP_BLOCK, Constants::PacketTypes::FXP_CLOSE, Constants::PacketTypes::FXP_DATA, Constants::PacketTypes::FXP_EXTENDED, Constants::PacketTypes::FXP_EXTENDED_REPLY, Constants::PacketTypes::FXP_FSETSTAT, Constants::PacketTypes::FXP_FSTAT, Constants::PacketTypes::FXP_HANDLE, Constants::PacketTypes::FXP_INIT, Constants::PacketTypes::FXP_LINK, Constants::PacketTypes::FXP_LSTAT, Constants::PacketTypes::FXP_MKDIR, Constants::PacketTypes::FXP_NAME, Constants::PacketTypes::FXP_OPEN, Constants::PacketTypes::FXP_OPENDIR, Constants::PacketTypes::FXP_READ, Constants::PacketTypes::FXP_READDIR, Constants::PacketTypes::FXP_READLINK, Constants::PacketTypes::FXP_REALPATH, Constants::PacketTypes::FXP_REMOVE, Constants::PacketTypes::FXP_RENAME, Constants::PacketTypes::FXP_RMDIR, Constants::PacketTypes::FXP_SETSTAT, Constants::PacketTypes::FXP_STAT, Constants::PacketTypes::FXP_STATUS, Constants::PacketTypes::FXP_SYMLINK, Constants::PacketTypes::FXP_UNBLOCK, Constants::PacketTypes::FXP_VERSION, Constants::PacketTypes::FXP_WRITE

Instance Attribute Summary

Attributes inherited from Base

#session

Instance Method Summary collapse

Methods inherited from Net::SFTP::Protocol::V04::Base

#fstat, #lstat, #parse_name_packet, #stat

Methods inherited from Net::SFTP::Protocol::V03::Base

#readlink, #symlink

Methods inherited from Net::SFTP::Protocol::V01::Base

#block, #close, #fsetstat, #fstat, #link, #lstat, #mkdir, #opendir, #parse_attrs_packet, #parse_data_packet, #parse_handle_packet, #parse_name_packet, #parse_status_packet, #read, #readdir, #readlink, #realpath, #remove, #rmdir, #setstat, #stat, #symlink, #unblock, #write

Methods inherited from Base

#initialize, #parse

Constructor Details

This class inherits a constructor from Net::SFTP::Protocol::Base

Instance Method Details

#open(path, flags, options) ⇒ Object

Sends a FXP_OPEN packet to the server and returns the packet identifier. The flags parameter is either an integer (in which case it must be a combination of the IO constants) or a string (in which case it must be one of the mode strings that IO::open accepts). The options parameter is a hash that is used to construct a new Attribute object, to pass as part of the FXP_OPEN request.



35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
# File 'lib/net/sftp/protocol/05/base.rb', line 35

def open(path, flags, options)
  flags = normalize_open_flags(flags)

  sftp_flags, desired_access = if flags & (IO::WRONLY | IO::RDWR) != 0
      open = if flags & (IO::CREAT | IO::EXCL) == (IO::CREAT | IO::EXCL)
        FV5::CREATE_NEW
      elsif flags & (IO::CREAT | IO::TRUNC) == (IO::CREAT | IO::TRUNC)
        FV5::CREATE_TRUNCATE
      elsif flags & IO::CREAT == IO::CREAT
        FV5::OPEN_OR_CREATE
      else
        FV5::OPEN_EXISTING
      end
      access = ACE::Mask::WRITE_DATA | ACE::Mask::WRITE_ATTRIBUTES
      access |= ACE::Mask::READ_DATA | ACE::Mask::READ_ATTRIBUTES if (flags & IO::RDWR) == IO::RDWR
      if flags & IO::APPEND == IO::APPEND
        open |= FV5::APPEND_DATA
        access |= ACE::Mask::APPEND_DATA
      end
      [open, access]
    else
      [FV5::OPEN_EXISTING, ACE::Mask::READ_DATA | ACE::Mask::READ_ATTRIBUTES]
    end

  attributes = attribute_factory.new(options)

  send_request(FXP_OPEN, :string, path, :long, desired_access, :long, sftp_flags, :raw, attributes.to_s)
end

#rename(name, new_name, flags = nil) ⇒ Object

Sends a FXP_RENAME packet to the server to request that the file or directory with the given name (must be a full path) be changed to new_name (which must also be a path). The flags parameter must be either nil or 0 (the default), or some combination of the Net::SFTP::Constants::RenameFlags constants.



25
26
27
# File 'lib/net/sftp/protocol/05/base.rb', line 25

def rename(name, new_name, flags=nil)
  send_request(FXP_RENAME, :string, name, :string, new_name, :long, flags || 0)
end

#versionObject

Returns the protocol version implemented by this driver. (5, in this case)



16
17
18
# File 'lib/net/sftp/protocol/05/base.rb', line 16

def version
  5
end