net-sftp 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/doc/LICENSE-BSD +27 -0
- data/doc/LICENSE-GPL +280 -0
- data/doc/LICENSE-RUBY +56 -0
- data/examples/asynchronous.rb +57 -0
- data/examples/ssh-service.rb +31 -0
- data/examples/synchronous.rb +120 -0
- data/lib/net/sftp.rb +39 -0
- data/lib/net/sftp/errors.rb +25 -0
- data/lib/net/sftp/operations/abstract.rb +103 -0
- data/lib/net/sftp/operations/close.rb +31 -0
- data/lib/net/sftp/operations/errors.rb +76 -0
- data/lib/net/sftp/operations/fsetstat.rb +36 -0
- data/lib/net/sftp/operations/fstat.rb +32 -0
- data/lib/net/sftp/operations/lstat.rb +31 -0
- data/lib/net/sftp/operations/mkdir.rb +33 -0
- data/lib/net/sftp/operations/open.rb +32 -0
- data/lib/net/sftp/operations/opendir.rb +32 -0
- data/lib/net/sftp/operations/read.rb +84 -0
- data/lib/net/sftp/operations/readdir.rb +55 -0
- data/lib/net/sftp/operations/realpath.rb +37 -0
- data/lib/net/sftp/operations/remove.rb +31 -0
- data/lib/net/sftp/operations/rename.rb +32 -0
- data/lib/net/sftp/operations/rmdir.rb +31 -0
- data/lib/net/sftp/operations/services.rb +42 -0
- data/lib/net/sftp/operations/setstat.rb +33 -0
- data/lib/net/sftp/operations/stat.rb +31 -0
- data/lib/net/sftp/operations/write.rb +63 -0
- data/lib/net/sftp/protocol/01/attributes.rb +146 -0
- data/lib/net/sftp/protocol/01/impl.rb +251 -0
- data/lib/net/sftp/protocol/01/packet-assistant.rb +82 -0
- data/lib/net/sftp/protocol/01/services.rb +47 -0
- data/lib/net/sftp/protocol/02/impl.rb +39 -0
- data/lib/net/sftp/protocol/02/packet-assistant.rb +32 -0
- data/lib/net/sftp/protocol/02/services.rb +44 -0
- data/lib/net/sftp/protocol/03/impl.rb +42 -0
- data/lib/net/sftp/protocol/03/packet-assistant.rb +35 -0
- data/lib/net/sftp/protocol/03/services.rb +44 -0
- data/lib/net/sftp/protocol/04/attributes.rb +227 -0
- data/lib/net/sftp/protocol/04/impl.rb +134 -0
- data/lib/net/sftp/protocol/04/packet-assistant.rb +51 -0
- data/lib/net/sftp/protocol/04/services.rb +44 -0
- data/lib/net/sftp/protocol/05/services.rb +44 -0
- data/lib/net/sftp/protocol/constants.rb +60 -0
- data/lib/net/sftp/protocol/driver.rb +232 -0
- data/lib/net/sftp/protocol/packet-assistant.rb +84 -0
- data/lib/net/sftp/protocol/services.rb +55 -0
- data/lib/net/sftp/session.rb +215 -0
- data/lib/net/sftp/version.rb +25 -0
- data/test/ALL-TESTS.rb +21 -0
- data/test/operations/tc_abstract.rb +124 -0
- data/test/operations/tc_close.rb +40 -0
- data/test/operations/tc_fsetstat.rb +48 -0
- data/test/operations/tc_fstat.rb +40 -0
- data/test/operations/tc_lstat.rb +40 -0
- data/test/operations/tc_mkdir.rb +48 -0
- data/test/operations/tc_open.rb +42 -0
- data/test/operations/tc_opendir.rb +40 -0
- data/test/operations/tc_read.rb +103 -0
- data/test/operations/tc_readdir.rb +88 -0
- data/test/operations/tc_realpath.rb +54 -0
- data/test/operations/tc_remove.rb +40 -0
- data/test/operations/tc_rmdir.rb +40 -0
- data/test/operations/tc_setstat.rb +48 -0
- data/test/operations/tc_stat.rb +40 -0
- data/test/operations/tc_write.rb +91 -0
- data/test/protocol/01/tc_attributes.rb +138 -0
- data/test/protocol/01/tc_impl.rb +294 -0
- data/test/protocol/01/tc_packet_assistant.rb +81 -0
- data/test/protocol/02/tc_impl.rb +41 -0
- data/test/protocol/02/tc_packet_assistant.rb +31 -0
- data/test/protocol/03/tc_impl.rb +48 -0
- data/test/protocol/03/tc_packet_assistant.rb +34 -0
- data/test/protocol/04/tc_attributes.rb +174 -0
- data/test/protocol/04/tc_impl.rb +102 -0
- data/test/protocol/04/tc_packet_assistant.rb +41 -0
- data/test/protocol/tc_driver.rb +219 -0
- metadata +137 -0
@@ -0,0 +1,31 @@
|
|
1
|
+
#--
|
2
|
+
# =============================================================================
|
3
|
+
# Copyright (c) 2004, Jamis Buck (jgb3@email.byu.edu)
|
4
|
+
# All rights reserved.
|
5
|
+
#
|
6
|
+
# This source file is distributed as part of the Net::SFTP Secure FTP Client
|
7
|
+
# library for Ruby. This file (and the library as a whole) may be used only as
|
8
|
+
# allowed by either the BSD license, or the Ruby license (or, by association
|
9
|
+
# with the Ruby license, the GPL). See the "doc" subdirectory of the Net::SFTP
|
10
|
+
# distribution for the texts of these licenses.
|
11
|
+
# -----------------------------------------------------------------------------
|
12
|
+
# net-sftp website: http://net-ssh.rubyforge.org/sftp
|
13
|
+
# project website : http://rubyforge.org/projects/net-ssh
|
14
|
+
# =============================================================================
|
15
|
+
#++
|
16
|
+
|
17
|
+
require 'net/sftp/operations/abstract'
|
18
|
+
|
19
|
+
module Net ; module SFTP ; module Operations
|
20
|
+
|
21
|
+
# The implementation of the +lstat+ operation.
|
22
|
+
class Lstat < Abstract
|
23
|
+
|
24
|
+
# Request attributes for the file/directory at the given path.
|
25
|
+
def perform( path )
|
26
|
+
@driver.lstat( nil, path )
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
|
31
|
+
end ; end ; end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
#--
|
2
|
+
# =============================================================================
|
3
|
+
# Copyright (c) 2004, Jamis Buck (jgb3@email.byu.edu)
|
4
|
+
# All rights reserved.
|
5
|
+
#
|
6
|
+
# This source file is distributed as part of the Net::SFTP Secure FTP Client
|
7
|
+
# library for Ruby. This file (and the library as a whole) may be used only as
|
8
|
+
# allowed by either the BSD license, or the Ruby license (or, by association
|
9
|
+
# with the Ruby license, the GPL). See the "doc" subdirectory of the Net::SFTP
|
10
|
+
# distribution for the texts of these licenses.
|
11
|
+
# -----------------------------------------------------------------------------
|
12
|
+
# net-sftp website: http://net-ssh.rubyforge.org/sftp
|
13
|
+
# project website : http://rubyforge.org/projects/net-ssh
|
14
|
+
# =============================================================================
|
15
|
+
#++
|
16
|
+
|
17
|
+
require 'net/sftp/operations/abstract'
|
18
|
+
|
19
|
+
module Net ; module SFTP ; module Operations
|
20
|
+
|
21
|
+
# The implementation of the +mkdir+ operation.
|
22
|
+
class Mkdir < Abstract
|
23
|
+
|
24
|
+
# Attempt to create the directory at the given path, giving it the
|
25
|
+
# attributes specified by the hash.
|
26
|
+
def perform( path, hash )
|
27
|
+
attrs = @driver.attr_factory.from_hash( hash )
|
28
|
+
@driver.mkdir( nil, path, attrs )
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
|
33
|
+
end ; end ; end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
#--
|
2
|
+
# =============================================================================
|
3
|
+
# Copyright (c) 2004, Jamis Buck (jgb3@email.byu.edu)
|
4
|
+
# All rights reserved.
|
5
|
+
#
|
6
|
+
# This source file is distributed as part of the Net::SFTP Secure FTP Client
|
7
|
+
# library for Ruby. This file (and the library as a whole) may be used only as
|
8
|
+
# allowed by either the BSD license, or the Ruby license (or, by association
|
9
|
+
# with the Ruby license, the GPL). See the "doc" subdirectory of the Net::SFTP
|
10
|
+
# distribution for the texts of these licenses.
|
11
|
+
# -----------------------------------------------------------------------------
|
12
|
+
# net-sftp website: http://net-ssh.rubyforge.org/sftp
|
13
|
+
# project website : http://rubyforge.org/projects/net-ssh
|
14
|
+
# =============================================================================
|
15
|
+
#++
|
16
|
+
|
17
|
+
require 'net/sftp/operations/abstract'
|
18
|
+
|
19
|
+
module Net ; module SFTP ; module Operations
|
20
|
+
|
21
|
+
# Implements the +open+ operation, for obtaining a handle to an open file
|
22
|
+
# on the server.
|
23
|
+
class Open < Abstract
|
24
|
+
|
25
|
+
# Performs the operation.
|
26
|
+
def perform( path, flags=IO::RDONLY, mode=0660 )
|
27
|
+
@driver.open( nil, path, flags, mode )
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
31
|
+
|
32
|
+
end ; end ; end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
#--
|
2
|
+
# =============================================================================
|
3
|
+
# Copyright (c) 2004, Jamis Buck (jgb3@email.byu.edu)
|
4
|
+
# All rights reserved.
|
5
|
+
#
|
6
|
+
# This source file is distributed as part of the Net::SFTP Secure FTP Client
|
7
|
+
# library for Ruby. This file (and the library as a whole) may be used only as
|
8
|
+
# allowed by either the BSD license, or the Ruby license (or, by association
|
9
|
+
# with the Ruby license, the GPL). See the "doc" subdirectory of the Net::SFTP
|
10
|
+
# distribution for the texts of these licenses.
|
11
|
+
# -----------------------------------------------------------------------------
|
12
|
+
# net-sftp website: http://net-ssh.rubyforge.org/sftp
|
13
|
+
# project website : http://rubyforge.org/projects/net-ssh
|
14
|
+
# =============================================================================
|
15
|
+
#++
|
16
|
+
|
17
|
+
require 'net/sftp/operations/abstract'
|
18
|
+
|
19
|
+
module Net ; module SFTP ; module Operations
|
20
|
+
|
21
|
+
# Implements the +opendir+ operation, for obtaining a handle to an open
|
22
|
+
# directory on the server.
|
23
|
+
class Opendir < Abstract
|
24
|
+
|
25
|
+
# Performs the operation.
|
26
|
+
def perform( path )
|
27
|
+
@driver.opendir( nil, path )
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
31
|
+
|
32
|
+
end ; end ; end
|
@@ -0,0 +1,84 @@
|
|
1
|
+
#--
|
2
|
+
# =============================================================================
|
3
|
+
# Copyright (c) 2004, Jamis Buck (jgb3@email.byu.edu)
|
4
|
+
# All rights reserved.
|
5
|
+
#
|
6
|
+
# This source file is distributed as part of the Net::SFTP Secure FTP Client
|
7
|
+
# library for Ruby. This file (and the library as a whole) may be used only as
|
8
|
+
# allowed by either the BSD license, or the Ruby license (or, by association
|
9
|
+
# with the Ruby license, the GPL). See the "doc" subdirectory of the Net::SFTP
|
10
|
+
# distribution for the texts of these licenses.
|
11
|
+
# -----------------------------------------------------------------------------
|
12
|
+
# net-sftp website: http://net-ssh.rubyforge.org/sftp
|
13
|
+
# project website : http://rubyforge.org/projects/net-ssh
|
14
|
+
# =============================================================================
|
15
|
+
#++
|
16
|
+
|
17
|
+
require 'net/sftp/operations/abstract'
|
18
|
+
|
19
|
+
module Net ; module SFTP ; module Operations
|
20
|
+
|
21
|
+
# Implements the +read+ operation, which reads data from an open file handle.
|
22
|
+
# This also implements the common case of reading to the end of the file. In
|
23
|
+
# that case, the callback is guaranteed to receive the contents of the entire
|
24
|
+
# file in one chunk.
|
25
|
+
class Read < Abstract
|
26
|
+
|
27
|
+
# The maximum amount of data to read at once when reading an entire file.
|
28
|
+
# (Setting this to a larger value may cause problems, especially with
|
29
|
+
# very large files, so beware!)
|
30
|
+
CHUNK_SIZE = 64 * 1024
|
31
|
+
|
32
|
+
# Perform the operation. If length is less than 0 (the default), then the
|
33
|
+
# entire file (from the given offset) will be read and returned in "one
|
34
|
+
# fell swoop". Otherwise, the given length of data will be requested.
|
35
|
+
def perform( handle, offset=0, length=-1 )
|
36
|
+
@length = length
|
37
|
+
@handle = handle
|
38
|
+
@offset = offset
|
39
|
+
@data = ""
|
40
|
+
|
41
|
+
real_length = ( length < 0 ? CHUNK_SIZE : length )
|
42
|
+
@driver.read( nil, handle, offset, real_length )
|
43
|
+
end
|
44
|
+
|
45
|
+
# Invoked when a data packet is received from the server. If the original
|
46
|
+
# request was for an entire file, this will send another read request,
|
47
|
+
# offset to the end of the data that has been read so far. Otherwise, the
|
48
|
+
# callback will be invoked directly.
|
49
|
+
def do_data( data )
|
50
|
+
@log.debug "[#{@id}] got #{data.length} bytes" if @log.debug?
|
51
|
+
|
52
|
+
@data << data
|
53
|
+
if @length < 0 || @data.length < @length
|
54
|
+
if @length < 0
|
55
|
+
length = CHUNK_SIZE
|
56
|
+
else
|
57
|
+
length = @length - @data.length
|
58
|
+
length = length > CHUNK_SIZE ? CHUNK_SIZE : length
|
59
|
+
end
|
60
|
+
|
61
|
+
@log.debug "[#{@id}] requesting #{length} more bytes" if @log.debug?
|
62
|
+
@driver.read @id, @handle, @offset + @data.length, length
|
63
|
+
@session.register( @id, self )
|
64
|
+
else
|
65
|
+
@callback[ OK, @data ]
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
# Invoked when a status code is received from the server. If the code is
|
70
|
+
# FX_EOF, then no data could be read because the end of the file was
|
71
|
+
# reached. In this case, the callback is invoked with the data that has been
|
72
|
+
# read so far. Other status codes are handled by the superclass.
|
73
|
+
def do_status( code, message, language )
|
74
|
+
if code == FX_EOF
|
75
|
+
@log.debug "[#{@id}] got EOF" if @log.debug?
|
76
|
+
@callback[ OK, @data ]
|
77
|
+
else
|
78
|
+
super
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
end
|
83
|
+
|
84
|
+
end ; end ; end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
#--
|
2
|
+
# =============================================================================
|
3
|
+
# Copyright (c) 2004, Jamis Buck (jgb3@email.byu.edu)
|
4
|
+
# All rights reserved.
|
5
|
+
#
|
6
|
+
# This source file is distributed as part of the Net::SFTP Secure FTP Client
|
7
|
+
# library for Ruby. This file (and the library as a whole) may be used only as
|
8
|
+
# allowed by either the BSD license, or the Ruby license (or, by association
|
9
|
+
# with the Ruby license, the GPL). See the "doc" subdirectory of the Net::SFTP
|
10
|
+
# distribution for the texts of these licenses.
|
11
|
+
# -----------------------------------------------------------------------------
|
12
|
+
# net-sftp website: http://net-ssh.rubyforge.org/sftp
|
13
|
+
# project website : http://rubyforge.org/projects/net-ssh
|
14
|
+
# =============================================================================
|
15
|
+
#++
|
16
|
+
|
17
|
+
require 'net/sftp/operations/abstract'
|
18
|
+
|
19
|
+
module Net ; module SFTP ; module Operations
|
20
|
+
|
21
|
+
# Implements the +readdir+ operation. This will handle the continuous calls
|
22
|
+
# to +readdir+ until the entire contents of the directory have been read,
|
23
|
+
# returning them in a single array.
|
24
|
+
class Readdir < Abstract
|
25
|
+
|
26
|
+
# Performs the operation.
|
27
|
+
def perform( handle )
|
28
|
+
@items = []
|
29
|
+
@handle = handle
|
30
|
+
@driver.readdir nil, @handle
|
31
|
+
end
|
32
|
+
|
33
|
+
# Invoked when the server returns a list of "names". Requests +readdir+
|
34
|
+
# again, automatically.
|
35
|
+
def do_name( items )
|
36
|
+
@log.debug "[#{@id}] got #{items.length} items" if @log.debug?
|
37
|
+
@items.concat items
|
38
|
+
@driver.readdir @id, @handle
|
39
|
+
@session.register @id, self
|
40
|
+
end
|
41
|
+
|
42
|
+
# Invoked when a status code is received from the server. If the code is
|
43
|
+
# FX_OK or FX_EOF then there is nothing left to read and the callback is
|
44
|
+
# invoked. Other status codes are handled by the superclass.
|
45
|
+
def do_status( code, message, language )
|
46
|
+
if code == FX_OK || code == FX_EOF
|
47
|
+
@callback[ OK, @items ]
|
48
|
+
else
|
49
|
+
super
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
end
|
54
|
+
|
55
|
+
end ; end ; end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
#--
|
2
|
+
# =============================================================================
|
3
|
+
# Copyright (c) 2004, Jamis Buck (jgb3@email.byu.edu)
|
4
|
+
# All rights reserved.
|
5
|
+
#
|
6
|
+
# This source file is distributed as part of the Net::SFTP Secure FTP Client
|
7
|
+
# library for Ruby. This file (and the library as a whole) may be used only as
|
8
|
+
# allowed by either the BSD license, or the Ruby license (or, by association
|
9
|
+
# with the Ruby license, the GPL). See the "doc" subdirectory of the Net::SFTP
|
10
|
+
# distribution for the texts of these licenses.
|
11
|
+
# -----------------------------------------------------------------------------
|
12
|
+
# net-sftp website: http://net-ssh.rubyforge.org/sftp
|
13
|
+
# project website : http://rubyforge.org/projects/net-ssh
|
14
|
+
# =============================================================================
|
15
|
+
#++
|
16
|
+
|
17
|
+
require 'net/sftp/operations/abstract'
|
18
|
+
|
19
|
+
module Net ; module SFTP ; module Operations
|
20
|
+
|
21
|
+
# Implements the +realpath+ operation.
|
22
|
+
class Realpath < Abstract
|
23
|
+
|
24
|
+
# Perform the operation.
|
25
|
+
def perform( path )
|
26
|
+
@driver.realpath( nil, path )
|
27
|
+
end
|
28
|
+
|
29
|
+
# A convenience--returns the first (and only) element of the array of items
|
30
|
+
# that is returned, instead of returning the array itself.
|
31
|
+
def do_name( items )
|
32
|
+
@callback[ OK, items.first ]
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
36
|
+
|
37
|
+
end ; end ; end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
#--
|
2
|
+
# =============================================================================
|
3
|
+
# Copyright (c) 2004, Jamis Buck (jgb3@email.byu.edu)
|
4
|
+
# All rights reserved.
|
5
|
+
#
|
6
|
+
# This source file is distributed as part of the Net::SFTP Secure FTP Client
|
7
|
+
# library for Ruby. This file (and the library as a whole) may be used only as
|
8
|
+
# allowed by either the BSD license, or the Ruby license (or, by association
|
9
|
+
# with the Ruby license, the GPL). See the "doc" subdirectory of the Net::SFTP
|
10
|
+
# distribution for the texts of these licenses.
|
11
|
+
# -----------------------------------------------------------------------------
|
12
|
+
# net-sftp website: http://net-ssh.rubyforge.org/sftp
|
13
|
+
# project website : http://rubyforge.org/projects/net-ssh
|
14
|
+
# =============================================================================
|
15
|
+
#++
|
16
|
+
|
17
|
+
require 'net/sftp/operations/abstract'
|
18
|
+
|
19
|
+
module Net ; module SFTP ; module Operations
|
20
|
+
|
21
|
+
# Implements the +remove+ operation.
|
22
|
+
class Remove < Abstract
|
23
|
+
|
24
|
+
# Perform the operation.
|
25
|
+
def perform( filename )
|
26
|
+
@driver.remove( nil, filename )
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
|
31
|
+
end ; end ; end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
#--
|
2
|
+
# =============================================================================
|
3
|
+
# Copyright (c) 2004, Jamis Buck (jgb3@email.byu.edu)
|
4
|
+
# All rights reserved.
|
5
|
+
#
|
6
|
+
# This source file is distributed as part of the Net::SFTP Secure FTP Client
|
7
|
+
# library for Ruby. This file (and the library as a whole) may be used only as
|
8
|
+
# allowed by either the BSD license, or the Ruby license (or, by association
|
9
|
+
# with the Ruby license, the GPL). See the "doc" subdirectory of the Net::SFTP
|
10
|
+
# distribution for the texts of these licenses.
|
11
|
+
# -----------------------------------------------------------------------------
|
12
|
+
# net-sftp website: http://net-ssh.rubyforge.org/sftp
|
13
|
+
# project website : http://rubyforge.org/projects/net-ssh
|
14
|
+
# =============================================================================
|
15
|
+
#++
|
16
|
+
|
17
|
+
require 'net/sftp/operations/abstract'
|
18
|
+
|
19
|
+
module Net ; module SFTP ; module Operations
|
20
|
+
|
21
|
+
# Implements the +rename+ operation.
|
22
|
+
class Rename < Abstract
|
23
|
+
|
24
|
+
# Perform the operation. The flags parameter is ignored under earlier
|
25
|
+
# versions of the SFTP protocol (3 and under).
|
26
|
+
def perform( filename, new_name, flags=0 )
|
27
|
+
@driver.rename( nil, filename, new_name, flags )
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
31
|
+
|
32
|
+
end ; end ; end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
#--
|
2
|
+
# =============================================================================
|
3
|
+
# Copyright (c) 2004, Jamis Buck (jgb3@email.byu.edu)
|
4
|
+
# All rights reserved.
|
5
|
+
#
|
6
|
+
# This source file is distributed as part of the Net::SFTP Secure FTP Client
|
7
|
+
# library for Ruby. This file (and the library as a whole) may be used only as
|
8
|
+
# allowed by either the BSD license, or the Ruby license (or, by association
|
9
|
+
# with the Ruby license, the GPL). See the "doc" subdirectory of the Net::SFTP
|
10
|
+
# distribution for the texts of these licenses.
|
11
|
+
# -----------------------------------------------------------------------------
|
12
|
+
# net-sftp website: http://net-ssh.rubyforge.org/sftp
|
13
|
+
# project website : http://rubyforge.org/projects/net-ssh
|
14
|
+
# =============================================================================
|
15
|
+
#++
|
16
|
+
|
17
|
+
require 'net/sftp/operations/abstract'
|
18
|
+
|
19
|
+
module Net ; module SFTP ; module Operations
|
20
|
+
|
21
|
+
# Implements the +rmdir+ operation.
|
22
|
+
class Rmdir < Abstract
|
23
|
+
|
24
|
+
# Perform the operation.
|
25
|
+
def perform( path )
|
26
|
+
@driver.rmdir( nil, path )
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
|
31
|
+
end ; end ; end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
#--
|
2
|
+
# =============================================================================
|
3
|
+
# Copyright (c) 2004, Jamis Buck (jgb3@email.byu.edu)
|
4
|
+
# All rights reserved.
|
5
|
+
#
|
6
|
+
# This source file is distributed as part of the Net::SFTP Secure FTP Client
|
7
|
+
# library for Ruby. This file (and the library as a whole) may be used only as
|
8
|
+
# allowed by either the BSD license, or the Ruby license (or, by association
|
9
|
+
# with the Ruby license, the GPL). See the "doc" subdirectory of the Net::SFTP
|
10
|
+
# distribution for the texts of these licenses.
|
11
|
+
# -----------------------------------------------------------------------------
|
12
|
+
# net-sftp website: http://net-ssh.rubyforge.org/sftp
|
13
|
+
# project website : http://rubyforge.org/projects/net-ssh
|
14
|
+
# =============================================================================
|
15
|
+
#++
|
16
|
+
|
17
|
+
module Net ; module SFTP ; module Operations
|
18
|
+
|
19
|
+
# Register all services that implement an SFTP operation.
|
20
|
+
def register_services( container )
|
21
|
+
container.namespace :operations
|
22
|
+
container.operations.use :model => :prototype do |ns|
|
23
|
+
[
|
24
|
+
:open,
|
25
|
+
[ :close_handle, :close ],
|
26
|
+
:read, :write, :opendir, :readdir, :remove,
|
27
|
+
:stat, :lstat, :fstat, :setstat, :fsetstat,
|
28
|
+
:mkdir, :rmdir, :realpath, :rename
|
29
|
+
].each do |op|
|
30
|
+
array = op.is_a?( Array )
|
31
|
+
ns.register( array ? op.first : op ) do |c,p|
|
32
|
+
require "net/sftp/operations/#{array ? op.last : op}"
|
33
|
+
klass_name = ( array ? op.last : op ).to_s
|
34
|
+
klass = const_get( klass_name[0,1].upcase + klass_name[1..-1] )
|
35
|
+
klass.new c[:log_for, p], c[:session], c[:protocol][:driver]
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
module_function :register_services
|
41
|
+
|
42
|
+
end ; end ; end
|