Method: Net::SFTP::Protocol::V05::Base#open
- Defined in:
- lib/net/sftp/protocol/05/base.rb
#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, ) 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() send_request(FXP_OPEN, :string, path, :long, desired_access, :long, sftp_flags, :raw, attributes.to_s) end |