hrr_rb_sftp 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (102) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +23 -0
  3. data/lib/hrr_rb_sftp.rb +79 -1
  4. data/lib/hrr_rb_sftp/loggable.rb +34 -0
  5. data/lib/hrr_rb_sftp/protocol.rb +39 -33
  6. data/lib/hrr_rb_sftp/protocol/common.rb +6 -3
  7. data/lib/hrr_rb_sftp/protocol/common/data_types.rb +19 -0
  8. data/lib/hrr_rb_sftp/protocol/common/data_types/byte.rb +40 -0
  9. data/lib/hrr_rb_sftp/protocol/common/data_types/extension_pair.rb +41 -0
  10. data/lib/hrr_rb_sftp/protocol/common/data_types/extension_pairs.rb +42 -0
  11. data/lib/hrr_rb_sftp/protocol/common/data_types/string.rb +42 -0
  12. data/lib/hrr_rb_sftp/protocol/common/data_types/uint32.rb +40 -0
  13. data/lib/hrr_rb_sftp/protocol/common/data_types/uint64.rb +40 -0
  14. data/lib/hrr_rb_sftp/protocol/common/packets.rb +16 -0
  15. data/lib/hrr_rb_sftp/protocol/common/packets/001_ssh_fxp_init.rb +27 -0
  16. data/lib/hrr_rb_sftp/protocol/common/packets/002_ssh_fxp_version.rb +28 -0
  17. data/lib/hrr_rb_sftp/protocol/common/packets/packet.rb +96 -0
  18. data/lib/hrr_rb_sftp/protocol/version1.rb +11 -3
  19. data/lib/hrr_rb_sftp/protocol/version1/data_types.rb +15 -0
  20. data/lib/hrr_rb_sftp/protocol/version1/data_types/attrs.rb +91 -0
  21. data/lib/hrr_rb_sftp/protocol/version1/packets.rb +72 -0
  22. data/lib/hrr_rb_sftp/protocol/version1/{packet → packets}/003_ssh_fxp_open.rb +94 -43
  23. data/lib/hrr_rb_sftp/protocol/version1/packets/004_ssh_fxp_close.rb +61 -0
  24. data/lib/hrr_rb_sftp/protocol/version1/packets/005_ssh_fxp_read.rb +72 -0
  25. data/lib/hrr_rb_sftp/protocol/version1/packets/006_ssh_fxp_write.rb +64 -0
  26. data/lib/hrr_rb_sftp/protocol/version1/{packet → packets}/007_ssh_fxp_lstat.rb +27 -9
  27. data/lib/hrr_rb_sftp/protocol/version1/{packet → packets}/008_ssh_fxp_fstat.rb +26 -9
  28. data/lib/hrr_rb_sftp/protocol/version1/packets/009_ssh_fxp_setstat.rb +92 -0
  29. data/lib/hrr_rb_sftp/protocol/version1/packets/010_ssh_fxp_fsetstat.rb +85 -0
  30. data/lib/hrr_rb_sftp/protocol/version1/{packet → packets}/011_ssh_fxp_opendir.rb +32 -11
  31. data/lib/hrr_rb_sftp/protocol/version1/{packet → packets}/012_ssh_fxp_readdir.rb +73 -49
  32. data/lib/hrr_rb_sftp/protocol/version1/{packet → packets}/013_ssh_fxp_remove.rb +27 -9
  33. data/lib/hrr_rb_sftp/protocol/version1/{packet → packets}/014_ssh_fxp_mkdir.rb +28 -10
  34. data/lib/hrr_rb_sftp/protocol/version1/{packet → packets}/015_ssh_fxp_rmdir.rb +32 -12
  35. data/lib/hrr_rb_sftp/protocol/version1/packets/016_ssh_fxp_realpath.rb +47 -0
  36. data/lib/hrr_rb_sftp/protocol/version1/{packet → packets}/017_ssh_fxp_stat.rb +27 -9
  37. data/lib/hrr_rb_sftp/protocol/version1/packets/101_ssh_fxp_status.rb +73 -0
  38. data/lib/hrr_rb_sftp/protocol/version1/packets/102_ssh_fxp_handle.rb +28 -0
  39. data/lib/hrr_rb_sftp/protocol/version1/packets/103_ssh_fxp_data.rb +28 -0
  40. data/lib/hrr_rb_sftp/protocol/version1/packets/104_ssh_fxp_name.rb +48 -0
  41. data/lib/hrr_rb_sftp/protocol/version1/packets/105_ssh_fxp_attrs.rb +28 -0
  42. data/lib/hrr_rb_sftp/protocol/version1/packets/packet.rb +57 -0
  43. data/lib/hrr_rb_sftp/protocol/version2.rb +11 -3
  44. data/lib/hrr_rb_sftp/protocol/version2/data_types.rb +13 -0
  45. data/lib/hrr_rb_sftp/protocol/version2/packets.rb +14 -0
  46. data/lib/hrr_rb_sftp/protocol/version2/packets/018_ssh_fxp_rename.rb +91 -0
  47. data/lib/hrr_rb_sftp/protocol/version3.rb +12 -3
  48. data/lib/hrr_rb_sftp/protocol/version3/data_types.rb +13 -0
  49. data/lib/hrr_rb_sftp/protocol/version3/extensions.rb +94 -0
  50. data/lib/hrr_rb_sftp/protocol/version3/extensions/extension.rb +58 -0
  51. data/lib/hrr_rb_sftp/protocol/version3/extensions/fsync_at_openssh_com.rb +59 -0
  52. data/lib/hrr_rb_sftp/protocol/version3/extensions/hardlink_at_openssh_com.rb +84 -0
  53. data/lib/hrr_rb_sftp/protocol/version3/extensions/lsetstat_at_openssh_com.rb +132 -0
  54. data/lib/hrr_rb_sftp/protocol/version3/extensions/posix_rename_at_openssh_com.rb +76 -0
  55. data/lib/hrr_rb_sftp/protocol/version3/packets.rb +19 -0
  56. data/lib/hrr_rb_sftp/protocol/version3/packets/014_ssh_fxp_mkdir.rb +75 -0
  57. data/lib/hrr_rb_sftp/protocol/version3/packets/019_ssh_fxp_readlink.rb +76 -0
  58. data/lib/hrr_rb_sftp/protocol/version3/packets/020_ssh_fxp_symlink.rb +76 -0
  59. data/lib/hrr_rb_sftp/protocol/version3/packets/101_ssh_fxp_status.rb +25 -0
  60. data/lib/hrr_rb_sftp/protocol/version3/packets/200_ssh_fxp_extended.rb +95 -0
  61. data/lib/hrr_rb_sftp/protocol/version3/packets/201_ssh_fxp_extended_reply.rb +60 -0
  62. data/lib/hrr_rb_sftp/receiver.rb +17 -2
  63. data/lib/hrr_rb_sftp/sender.rb +15 -1
  64. data/lib/hrr_rb_sftp/server.rb +43 -12
  65. data/lib/hrr_rb_sftp/version.rb +5 -1
  66. metadata +54 -47
  67. data/lib/hrr_rb_sftp/protocol/common/data_type.rb +0 -15
  68. data/lib/hrr_rb_sftp/protocol/common/data_type/byte.rb +0 -22
  69. data/lib/hrr_rb_sftp/protocol/common/data_type/extension_pair.rb +0 -23
  70. data/lib/hrr_rb_sftp/protocol/common/data_type/extension_pairs.rb +0 -24
  71. data/lib/hrr_rb_sftp/protocol/common/data_type/string.rb +0 -24
  72. data/lib/hrr_rb_sftp/protocol/common/data_type/uint32.rb +0 -22
  73. data/lib/hrr_rb_sftp/protocol/common/data_type/uint64.rb +0 -22
  74. data/lib/hrr_rb_sftp/protocol/common/packet.rb +0 -11
  75. data/lib/hrr_rb_sftp/protocol/common/packet/001_ssh_fxp_init.rb +0 -18
  76. data/lib/hrr_rb_sftp/protocol/common/packet/002_ssh_fxp_version.rb +0 -19
  77. data/lib/hrr_rb_sftp/protocol/common/packetable.rb +0 -72
  78. data/lib/hrr_rb_sftp/protocol/version1/data_type.rb +0 -11
  79. data/lib/hrr_rb_sftp/protocol/version1/data_type/attrs.rb +0 -54
  80. data/lib/hrr_rb_sftp/protocol/version1/packet.rb +0 -29
  81. data/lib/hrr_rb_sftp/protocol/version1/packet/004_ssh_fxp_close.rb +0 -44
  82. data/lib/hrr_rb_sftp/protocol/version1/packet/005_ssh_fxp_read.rb +0 -53
  83. data/lib/hrr_rb_sftp/protocol/version1/packet/006_ssh_fxp_write.rb +0 -46
  84. data/lib/hrr_rb_sftp/protocol/version1/packet/009_ssh_fxp_setstat.rb +0 -63
  85. data/lib/hrr_rb_sftp/protocol/version1/packet/010_ssh_fxp_fsetstat.rb +0 -48
  86. data/lib/hrr_rb_sftp/protocol/version1/packet/016_ssh_fxp_realpath.rb +0 -30
  87. data/lib/hrr_rb_sftp/protocol/version1/packet/101_ssh_fxp_status.rb +0 -29
  88. data/lib/hrr_rb_sftp/protocol/version1/packet/102_ssh_fxp_handle.rb +0 -19
  89. data/lib/hrr_rb_sftp/protocol/version1/packet/103_ssh_fxp_data.rb +0 -19
  90. data/lib/hrr_rb_sftp/protocol/version1/packet/104_ssh_fxp_name.rb +0 -33
  91. data/lib/hrr_rb_sftp/protocol/version1/packet/105_ssh_fxp_attrs.rb +0 -19
  92. data/lib/hrr_rb_sftp/protocol/version2/data_type.rb +0 -9
  93. data/lib/hrr_rb_sftp/protocol/version2/packet.rb +0 -11
  94. data/lib/hrr_rb_sftp/protocol/version2/packet/018_ssh_fxp_rename.rb +0 -70
  95. data/lib/hrr_rb_sftp/protocol/version3/data_type.rb +0 -9
  96. data/lib/hrr_rb_sftp/protocol/version3/packet.rb +0 -16
  97. data/lib/hrr_rb_sftp/protocol/version3/packet/014_ssh_fxp_mkdir.rb +0 -58
  98. data/lib/hrr_rb_sftp/protocol/version3/packet/019_ssh_fxp_readlink.rb +0 -57
  99. data/lib/hrr_rb_sftp/protocol/version3/packet/020_ssh_fxp_symlink.rb +0 -58
  100. data/lib/hrr_rb_sftp/protocol/version3/packet/101_ssh_fxp_status.rb +0 -31
  101. data/lib/hrr_rb_sftp/protocol/version3/packet/200_ssh_fxp_extended.rb +0 -34
  102. data/lib/hrr_rb_sftp/protocol/version3/packet/201_ssh_fxp_extended_reply.rb +0 -23
@@ -1,15 +0,0 @@
1
- module HrrRbSftp
2
- class Protocol
3
- module Common
4
- module DataType
5
- end
6
- end
7
- end
8
- end
9
-
10
- require "hrr_rb_sftp/protocol/common/data_type/byte"
11
- require "hrr_rb_sftp/protocol/common/data_type/uint32"
12
- require "hrr_rb_sftp/protocol/common/data_type/uint64"
13
- require 'hrr_rb_sftp/protocol/common/data_type/string'
14
- require 'hrr_rb_sftp/protocol/common/data_type/extension_pair'
15
- require 'hrr_rb_sftp/protocol/common/data_type/extension_pairs'
@@ -1,22 +0,0 @@
1
- module HrrRbSftp
2
- class Protocol
3
- module Common
4
- module DataType
5
- module Byte
6
- def self.encode arg
7
- case arg
8
- when 0x00..0xff
9
- [arg].pack("C")
10
- else
11
- raise ArgumentError, "must be in #{0x00}..#{0xff}, but got #{arg.inspect}"
12
- end
13
- end
14
-
15
- def self.decode io
16
- io.read(1).unpack("C")[0]
17
- end
18
- end
19
- end
20
- end
21
- end
22
- end
@@ -1,23 +0,0 @@
1
- module HrrRbSftp
2
- class Protocol
3
- module Common
4
- module DataType
5
- module ExtensionPair
6
- def self.encode arg
7
- unless arg.kind_of? ::Hash
8
- raise ArgumentError, "must be a kind of Hash, but got #{arg.inspect}"
9
- end
10
- DataType::String.encode(arg[:"extension-name"]) + DataType::String.encode(arg[:"extension-data"])
11
- end
12
-
13
- def self.decode io
14
- {
15
- :"extension-name" => DataType::String.decode(io),
16
- :"extension-data" => DataType::String.decode(io),
17
- }
18
- end
19
- end
20
- end
21
- end
22
- end
23
- end
@@ -1,24 +0,0 @@
1
- module HrrRbSftp
2
- class Protocol
3
- module Common
4
- module DataType
5
- module ExtensionPairs
6
- def self.encode arg
7
- unless arg.kind_of? ::Array
8
- raise ArgumentError, "must be a kind of Array, but got #{arg.inspect}"
9
- end
10
- arg.map{|arg| ExtensionPair.encode(arg)}.join
11
- end
12
-
13
- def self.decode io
14
- extension_pairs = Array.new
15
- until io.eof?
16
- extension_pairs.push ExtensionPair.decode(io)
17
- end
18
- extension_pairs
19
- end
20
- end
21
- end
22
- end
23
- end
24
- end
@@ -1,24 +0,0 @@
1
- module HrrRbSftp
2
- class Protocol
3
- module Common
4
- module DataType
5
- module String
6
- def self.encode arg
7
- unless arg.kind_of? ::String
8
- raise ArgumentError, "must be a kind of String, but got #{arg.inspect}"
9
- end
10
- if arg.bytesize > 0xffff_ffff
11
- raise ArgumentError, "must be shorter than or equal to #{0xffff_ffff}, but got length #{arg.bytesize}"
12
- end
13
- [arg.bytesize, arg].pack("Na*")
14
- end
15
-
16
- def self.decode io
17
- length = io.read(4).unpack("N")[0]
18
- io.read(length).unpack("a*")[0].force_encoding(Encoding::UTF_8)
19
- end
20
- end
21
- end
22
- end
23
- end
24
- end
@@ -1,22 +0,0 @@
1
- module HrrRbSftp
2
- class Protocol
3
- module Common
4
- module DataType
5
- module Uint32
6
- def self.encode arg
7
- case arg
8
- when 0x0000_0000..0xffff_ffff
9
- [arg].pack("N")
10
- else
11
- raise ArgumentError, "must be in #{0x0000_0000}..#{0xffff_ffff}, but got #{arg.inspect}"
12
- end
13
- end
14
-
15
- def self.decode io
16
- io.read(4).unpack("N")[0]
17
- end
18
- end
19
- end
20
- end
21
- end
22
- end
@@ -1,22 +0,0 @@
1
- module HrrRbSftp
2
- class Protocol
3
- module Common
4
- module DataType
5
- module Uint64
6
- def self.encode arg
7
- case arg
8
- when 0x0000_0000_0000_0000..0xffff_ffff_ffff_ffff
9
- [arg >> 32].pack("N") + [arg & 0x0000_0000_ffff_ffff].pack("N")
10
- else
11
- raise ArgumentError, "must be in #{0x0000_0000_0000_0000}..#{0xffff_ffff_ffff_ffff}, but got #{arg.inspect}"
12
- end
13
- end
14
-
15
- def self.decode io
16
- (io.read(4).unpack("N")[0] << 32) + (io.read(4).unpack("N")[0])
17
- end
18
- end
19
- end
20
- end
21
- end
22
- end
@@ -1,11 +0,0 @@
1
- module HrrRbSftp
2
- class Protocol
3
- module Common
4
- module Packet
5
- end
6
- end
7
- end
8
- end
9
-
10
- require "hrr_rb_sftp/protocol/common/packet/001_ssh_fxp_init"
11
- require "hrr_rb_sftp/protocol/common/packet/002_ssh_fxp_version"
@@ -1,18 +0,0 @@
1
- module HrrRbSftp
2
- class Protocol
3
- module Common
4
- module Packet
5
- class SSH_FXP_INIT
6
- include Packetable
7
-
8
- TYPE = 1
9
-
10
- FORMAT = [
11
- [DataType::Byte, :"type" ],
12
- [DataType::Uint32, :"version"],
13
- ]
14
- end
15
- end
16
- end
17
- end
18
- end
@@ -1,19 +0,0 @@
1
- module HrrRbSftp
2
- class Protocol
3
- module Common
4
- module Packet
5
- class SSH_FXP_VERSION
6
- include Packetable
7
-
8
- TYPE = 2
9
-
10
- FORMAT = [
11
- [DataType::Byte, :"type" ],
12
- [DataType::Uint32, :"version" ],
13
- [DataType::ExtensionPairs, :"extensions"],
14
- ]
15
- end
16
- end
17
- end
18
- end
19
- end
@@ -1,72 +0,0 @@
1
- module HrrRbSftp
2
- class Protocol
3
- module Common
4
- module Packetable
5
- include Loggable
6
-
7
- def initialize handles, logger: nil
8
- self.logger = logger
9
-
10
- @handles = handles
11
- end
12
-
13
- def encode packet
14
- log_debug { 'encoding packet: ' + packet.inspect }
15
- format = common_format + conditional_format(packet)
16
- format.map{ |data_type, field_name|
17
- begin
18
- field_value = packet[field_name]
19
- data_type.encode field_value
20
- rescue => e
21
- log_debug { "'field_name', 'field_value': #{field_name.inspect}, #{field_value.inspect}" }
22
- raise e
23
- end
24
- }.join
25
- end
26
-
27
- def decode payload
28
- payload_io = StringIO.new payload
29
- format = common_format
30
- decoded_packet = decode_recursively(payload_io).inject(Hash.new){ |h, (k, v)| h.update({k => v}) }
31
- log_debug { 'decoded packet: ' + decoded_packet.inspect }
32
- decoded_packet
33
- end
34
-
35
- private
36
-
37
- def common_format
38
- self.class::FORMAT
39
- end
40
-
41
- def conditional_format packet
42
- return [] unless self.class.const_defined? :CONDITIONAL_FORMAT
43
- packet.inject([]){ |a, (field_name, field_value)|
44
- a + (self.class::CONDITIONAL_FORMAT.fetch(field_name, {})[field_value] || [])
45
- }
46
- end
47
-
48
- def decode_recursively payload_io, packet=nil
49
- if packet.class == Array and packet.size == 0
50
- []
51
- else
52
- format = case packet
53
- when nil
54
- common_format
55
- when Array
56
- conditional_format(packet)
57
- end
58
- decoded_packet = format.map{ |data_type, field_name|
59
- begin
60
- [field_name, data_type.decode(payload_io)]
61
- rescue => e
62
- log_debug { "'field_name': #{field_name.inspect}" }
63
- raise e
64
- end
65
- }
66
- decoded_packet + decode_recursively(payload_io, decoded_packet)
67
- end
68
- end
69
- end
70
- end
71
- end
72
- end
@@ -1,11 +0,0 @@
1
- module HrrRbSftp
2
- class Protocol
3
- class Version1
4
- module DataType
5
- include Common::DataType
6
- end
7
- end
8
- end
9
- end
10
-
11
- require "hrr_rb_sftp/protocol/version1/data_type/attrs"
@@ -1,54 +0,0 @@
1
- module HrrRbSftp
2
- class Protocol
3
- class Version1
4
- module DataType
5
- class Attrs
6
- SSH_FILEXFER_ATTR_SIZE = 0x00000001
7
- SSH_FILEXFER_ATTR_UIDGID = 0x00000002
8
- SSH_FILEXFER_ATTR_PERMISSIONS = 0x00000004
9
- SSH_FILEXFER_ATTR_ACMODTIME = 0x00000008
10
- SSH_FILEXFER_ATTR_EXTENDED = 0x80000000
11
-
12
- def self.encode arg
13
- unless arg.kind_of? ::Hash
14
- raise ArgumentError, "must be a kind of Hash, but got #{arg.inspect}"
15
- end
16
-
17
- flags = 0
18
- flags |= SSH_FILEXFER_ATTR_SIZE if arg.has_key?(:"size")
19
- flags |= SSH_FILEXFER_ATTR_UIDGID if arg.has_key?(:"uid") && arg.has_key?(:"gid")
20
- flags |= SSH_FILEXFER_ATTR_PERMISSIONS if arg.has_key?(:"permissions")
21
- flags |= SSH_FILEXFER_ATTR_ACMODTIME if arg.has_key?(:"atime") && arg.has_key?(:"mtime")
22
- flags |= SSH_FILEXFER_ATTR_EXTENDED if arg.has_key?(:"extensions")
23
-
24
- payload = DataType::Uint32.encode flags
25
- payload += DataType::Uint64.encode arg[:"size"] unless (flags & SSH_FILEXFER_ATTR_SIZE).zero?
26
- payload += DataType::Uint32.encode arg[:"uid"] unless (flags & SSH_FILEXFER_ATTR_UIDGID).zero?
27
- payload += DataType::Uint32.encode arg[:"gid"] unless (flags & SSH_FILEXFER_ATTR_UIDGID).zero?
28
- payload += DataType::Uint32.encode arg[:"permissions"] unless (flags & SSH_FILEXFER_ATTR_PERMISSIONS).zero?
29
- payload += DataType::Uint32.encode arg[:"atime"] unless (flags & SSH_FILEXFER_ATTR_ACMODTIME).zero?
30
- payload += DataType::Uint32.encode arg[:"mtime"] unless (flags & SSH_FILEXFER_ATTR_ACMODTIME).zero?
31
- payload += DataType::Uint32.encode arg[:"extensions"].size unless (flags & SSH_FILEXFER_ATTR_EXTENDED).zero?
32
- payload += DataType::ExtensionPairs.encode arg[:"extensions"] unless (flags & SSH_FILEXFER_ATTR_EXTENDED).zero?
33
- payload
34
- end
35
-
36
- def self.decode io
37
- attrs = Hash.new
38
- flags = DataType::Uint32.decode(io)
39
- attrs[:"size"] = DataType::Uint64.decode(io) unless (flags & SSH_FILEXFER_ATTR_SIZE).zero?
40
- attrs[:"uid"] = DataType::Uint32.decode(io) unless (flags & SSH_FILEXFER_ATTR_UIDGID).zero?
41
- attrs[:"gid"] = DataType::Uint32.decode(io) unless (flags & SSH_FILEXFER_ATTR_UIDGID).zero?
42
- attrs[:"permissions"] = DataType::Uint32.decode(io) unless (flags & SSH_FILEXFER_ATTR_PERMISSIONS).zero?
43
- attrs[:"atime"] = DataType::Uint32.decode(io) unless (flags & SSH_FILEXFER_ATTR_ACMODTIME).zero?
44
- attrs[:"mtime"] = DataType::Uint32.decode(io) unless (flags & SSH_FILEXFER_ATTR_ACMODTIME).zero?
45
- extended_count = DataType::Uint32.decode(io) unless (flags & SSH_FILEXFER_ATTR_EXTENDED).zero?
46
- attrs[:"extensions"] = Array.new(extended_count){DataType::ExtensionPair.decode(io)} unless (flags & SSH_FILEXFER_ATTR_EXTENDED).zero?
47
- attrs
48
- end
49
- end
50
- end
51
- end
52
- end
53
- end
54
-
@@ -1,29 +0,0 @@
1
- module HrrRbSftp
2
- class Protocol
3
- class Version1
4
- module Packet
5
- end
6
- end
7
- end
8
- end
9
-
10
- require "hrr_rb_sftp/protocol/version1/packet/003_ssh_fxp_open"
11
- require "hrr_rb_sftp/protocol/version1/packet/004_ssh_fxp_close"
12
- require "hrr_rb_sftp/protocol/version1/packet/005_ssh_fxp_read"
13
- require "hrr_rb_sftp/protocol/version1/packet/006_ssh_fxp_write"
14
- require "hrr_rb_sftp/protocol/version1/packet/007_ssh_fxp_lstat"
15
- require "hrr_rb_sftp/protocol/version1/packet/008_ssh_fxp_fstat"
16
- require "hrr_rb_sftp/protocol/version1/packet/009_ssh_fxp_setstat"
17
- require "hrr_rb_sftp/protocol/version1/packet/010_ssh_fxp_fsetstat"
18
- require "hrr_rb_sftp/protocol/version1/packet/011_ssh_fxp_opendir"
19
- require "hrr_rb_sftp/protocol/version1/packet/012_ssh_fxp_readdir"
20
- require "hrr_rb_sftp/protocol/version1/packet/013_ssh_fxp_remove"
21
- require "hrr_rb_sftp/protocol/version1/packet/014_ssh_fxp_mkdir"
22
- require "hrr_rb_sftp/protocol/version1/packet/015_ssh_fxp_rmdir"
23
- require "hrr_rb_sftp/protocol/version1/packet/016_ssh_fxp_realpath"
24
- require "hrr_rb_sftp/protocol/version1/packet/017_ssh_fxp_stat"
25
- require "hrr_rb_sftp/protocol/version1/packet/101_ssh_fxp_status"
26
- require "hrr_rb_sftp/protocol/version1/packet/102_ssh_fxp_handle"
27
- require "hrr_rb_sftp/protocol/version1/packet/103_ssh_fxp_data"
28
- require "hrr_rb_sftp/protocol/version1/packet/104_ssh_fxp_name"
29
- require "hrr_rb_sftp/protocol/version1/packet/105_ssh_fxp_attrs"
@@ -1,44 +0,0 @@
1
- module HrrRbSftp
2
- class Protocol
3
- class Version1
4
- module Packet
5
- class SSH_FXP_CLOSE
6
- include Common::Packetable
7
-
8
- TYPE = 4
9
-
10
- FORMAT = [
11
- [DataType::Byte, :"type" ],
12
- [DataType::Uint32, :"request-id"],
13
- [DataType::String, :"handle" ],
14
- ]
15
-
16
- def respond_to request
17
- begin
18
- raise "Specified handle does not exist" unless @handles.has_key?(request[:"handle"])
19
- handle = request[:"handle"]
20
- @handles[handle].close rescue nil
21
- @handles.delete(handle)
22
- {
23
- :"type" => SSH_FXP_STATUS::TYPE,
24
- :"request-id" => request[:"request-id"],
25
- :"code" => SSH_FXP_STATUS::SSH_FX_OK,
26
- :"error message" => "Success",
27
- :"language tag" => "",
28
- }
29
- rescue => e
30
- log_error { [e.backtrace[0], ": ", e.message, " (", e.class.to_s, ")\n\t", e.backtrace[1..-1].join("\n\t")].join }
31
- {
32
- :"type" => SSH_FXP_STATUS::TYPE,
33
- :"request-id" => request[:"request-id"],
34
- :"code" => SSH_FXP_STATUS::SSH_FX_FAILURE,
35
- :"error message" => e.message,
36
- :"language tag" => "",
37
- }
38
- end
39
- end
40
- end
41
- end
42
- end
43
- end
44
- end
@@ -1,53 +0,0 @@
1
- module HrrRbSftp
2
- class Protocol
3
- class Version1
4
- module Packet
5
- class SSH_FXP_READ
6
- include Common::Packetable
7
-
8
- TYPE = 5
9
-
10
- FORMAT = [
11
- [DataType::Byte, :"type" ],
12
- [DataType::Uint32, :"request-id"],
13
- [DataType::String, :"handle" ],
14
- [DataType::Uint64, :"offset" ],
15
- [DataType::Uint32, :"len" ],
16
- ]
17
-
18
- def respond_to request
19
- begin
20
- raise "Specified handle does not exist" unless @handles.has_key?(request[:"handle"])
21
- file = @handles[request[:"handle"]]
22
- file.pos = request[:"offset"]
23
- unless file.eof?
24
- {
25
- :"type" => SSH_FXP_DATA::TYPE,
26
- :"request-id" => request[:"request-id"],
27
- :"data" => file.read(request[:"len"]),
28
- }
29
- else
30
- {
31
- :"type" => SSH_FXP_STATUS::TYPE,
32
- :"request-id" => request[:"request-id"],
33
- :"code" => SSH_FXP_STATUS::SSH_FX_EOF,
34
- :"error message" => "End of file",
35
- :"language tag" => "",
36
- }
37
- end
38
- rescue => e
39
- log_error { [e.backtrace[0], ": ", e.message, " (", e.class.to_s, ")\n\t", e.backtrace[1..-1].join("\n\t")].join }
40
- {
41
- :"type" => SSH_FXP_STATUS::TYPE,
42
- :"request-id" => request[:"request-id"],
43
- :"code" => SSH_FXP_STATUS::SSH_FX_FAILURE,
44
- :"error message" => e.message,
45
- :"language tag" => "",
46
- }
47
- end
48
- end
49
- end
50
- end
51
- end
52
- end
53
- end