hrr_rb_sftp 0.1.0 → 0.2.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.
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
@@ -0,0 +1,76 @@
1
+ module HrrRbSftp
2
+ class Protocol
3
+ module Version3
4
+ class Packets
5
+
6
+ #
7
+ # This class implements SFTP protocol version 1 SSH_FXP_SYMLINK packet type, format, and responder.
8
+ #
9
+ class SSH_FXP_SYMLINK < Packets::Packet
10
+
11
+ #
12
+ # Represents SSH_FXP_SYMLINK packet type.
13
+ #
14
+ TYPE = 20
15
+
16
+ #
17
+ # Represents SSH_FXP_SYMLINK packet format.
18
+ #
19
+ FORMAT = [
20
+ [DataTypes::Byte, :"type" ],
21
+ [DataTypes::Uint32, :"request-id"],
22
+ [DataTypes::String, :"targetpath"],
23
+ [DataTypes::String, :"linkpath" ],
24
+ ]
25
+
26
+ #
27
+ # Responds to SSH_FXP_SYMLINK request.
28
+ #
29
+ # @param request [Hash{Symbol=>Object}] SSH_FXP_SYMLINK request represented in Hash.
30
+ # @return [Hash{Symbol=>Object}] Response represented in Hash. Its type is SSH_FXP_STATUS.
31
+ #
32
+ def respond_to request
33
+ begin
34
+ log_debug { "File.symlink(#{request[:"targetpath"].inspect}, #{request[:"linkpath"].inspect})" }
35
+ File.symlink request[:"targetpath"], request[:"linkpath"]
36
+ {
37
+ :"type" => Packets::SSH_FXP_STATUS::TYPE,
38
+ :"request-id" => request[:"request-id"],
39
+ :"code" => Packets::SSH_FXP_STATUS::SSH_FX_OK,
40
+ :"error message" => "Success",
41
+ :"language tag" => "",
42
+ }
43
+ rescue Errno::EACCES => e
44
+ log_debug { e.message }
45
+ {
46
+ :"type" => Packets::SSH_FXP_STATUS::TYPE,
47
+ :"request-id" => request[:"request-id"],
48
+ :"code" => Packets::SSH_FXP_STATUS::SSH_FX_PERMISSION_DENIED,
49
+ :"error message" => "Permission denied",
50
+ :"language tag" => "",
51
+ }
52
+ rescue Errno::EEXIST => e
53
+ log_debug { e.message }
54
+ {
55
+ :"type" => Packets::SSH_FXP_STATUS::TYPE,
56
+ :"request-id" => request[:"request-id"],
57
+ :"code" => Packets::SSH_FXP_STATUS::SSH_FX_FAILURE,
58
+ :"error message" => "File exists",
59
+ :"language tag" => "",
60
+ }
61
+ rescue => e
62
+ log_error { [e.backtrace[0], ": ", e.message, " (", e.class.to_s, ")\n\t", e.backtrace[1..-1].join("\n\t")].join }
63
+ {
64
+ :"type" => Packets::SSH_FXP_STATUS::TYPE,
65
+ :"request-id" => request[:"request-id"],
66
+ :"code" => Packets::SSH_FXP_STATUS::SSH_FX_FAILURE,
67
+ :"error message" => e.message,
68
+ :"language tag" => "",
69
+ }
70
+ end
71
+ end
72
+ end
73
+ end
74
+ end
75
+ end
76
+ end
@@ -0,0 +1,25 @@
1
+ module HrrRbSftp
2
+ class Protocol
3
+ module Version3
4
+ class Packets
5
+
6
+ #
7
+ # This class implements SFTP protocol version 3 SSH_FXP_STATUS packet type, format, and responder.
8
+ #
9
+ class SSH_FXP_STATUS < Version2::Packets::SSH_FXP_STATUS
10
+
11
+ #
12
+ # Represents SSH_FXP_STATUS packet format.
13
+ #
14
+ FORMAT = [
15
+ [DataTypes::Byte, :"type" ],
16
+ [DataTypes::Uint32, :"request-id" ],
17
+ [DataTypes::Uint32, :"code" ],
18
+ [DataTypes::String, :"error message"],
19
+ [DataTypes::String, :"language tag" ],
20
+ ]
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,95 @@
1
+ module HrrRbSftp
2
+ class Protocol
3
+ module Version3
4
+ class Packets
5
+
6
+ #
7
+ # This class implements SFTP protocol version 1 SSH_FXP_EXTENDED packet type, format, and responder.
8
+ #
9
+ class SSH_FXP_EXTENDED < Packets::Packet
10
+
11
+ #
12
+ # Represents SSH_FXP_EXTENDED packet type.
13
+ #
14
+ TYPE = 200
15
+
16
+ #
17
+ # Represents SSH_FXP_EXTENDED packet format.
18
+ #
19
+ FORMAT = [
20
+ [DataTypes::Byte, :"type" ],
21
+ [DataTypes::Uint32, :"request-id" ],
22
+ [DataTypes::String, :"extended-request"],
23
+ ]
24
+
25
+ #
26
+ # Private method #conditional_format is used instead.
27
+ #
28
+ # @example
29
+ # {
30
+ # :"extended-request" => {
31
+ # "hardlink@openssh.com" => [
32
+ # [DataTypes::String, :"oldpath"],
33
+ # [DataTypes::String, :"newpath"],
34
+ # ],
35
+ # },
36
+ # }
37
+ #
38
+ #
39
+ CONDITIONAL_FORMAT = nil
40
+
41
+ #
42
+ # Responds to SSH_FXP_EXTENDED request.
43
+ #
44
+ # @param request [Hash{Symbol=>Object}] SSH_FXP_EXTENDED request represented in Hash.
45
+ # @return [Hash{Symbol=>Object}] Response represented in Hash. Its type is SSH_FXP_STATUS.
46
+ #
47
+ def respond_to request
48
+ begin
49
+ if extensions.respond_to? request
50
+ extensions.respond_to request
51
+ else
52
+ {
53
+ :"type" => Packets::SSH_FXP_STATUS::TYPE,
54
+ :"request-id" => request[:"request-id"],
55
+ :"code" => Packets::SSH_FXP_STATUS::SSH_FX_OP_UNSUPPORTED,
56
+ :"error message" => "Unsupported extended-request: #{request[:"extended-request"]}",
57
+ :"language tag" => "",
58
+ }
59
+ end
60
+ rescue => e
61
+ log_error { [e.backtrace[0], ": ", e.message, " (", e.class.to_s, ")\n\t", e.backtrace[1..-1].join("\n\t")].join }
62
+ {
63
+ :"type" => Packets::SSH_FXP_STATUS::TYPE,
64
+ :"request-id" => request[:"request-id"],
65
+ :"code" => Packets::SSH_FXP_STATUS::SSH_FX_FAILURE,
66
+ :"error message" => e.message,
67
+ :"language tag" => "",
68
+ }
69
+ end
70
+ end
71
+
72
+ private
73
+
74
+ #
75
+ # Returns An instance of Extensions.
76
+ #
77
+ # @return [Extensions] An instance of Extensions.
78
+ #
79
+ def extensions
80
+ @extensions ||= Protocol.const_get(:"Version#{version}")::Extensions.new(context, logger: logger)
81
+ end
82
+
83
+ #
84
+ # Overrides Common::Packetable#conditional_format private method and represents SSH_FXP_EXTENDED packet conditional format.
85
+ #
86
+ def conditional_format packet
87
+ packet.inject([]){ |a, (field_name, field_value)|
88
+ a + ((extensions.conditional_request_format[field_name] || {})[field_value] || [])
89
+ }
90
+ end
91
+ end
92
+ end
93
+ end
94
+ end
95
+ end
@@ -0,0 +1,60 @@
1
+ module HrrRbSftp
2
+ class Protocol
3
+ module Version3
4
+ class Packets
5
+
6
+ #
7
+ # This class implements SFTP protocol version 1 SSH_FXP_EXTENDED_REPLY packet type, format, and responder.
8
+ #
9
+ class SSH_FXP_EXTENDED_REPLY < Packets::Packet
10
+
11
+ #
12
+ # Represents SSH_FXP_EXTENDED_REPLY packet type.
13
+ #
14
+ TYPE = 201
15
+
16
+ #
17
+ # Represents SSH_FXP_EXTENDED_REPLY packet format.
18
+ #
19
+ FORMAT = [
20
+ [DataTypes::Byte, :"type" ],
21
+ [DataTypes::Uint32, :"request-id"],
22
+ ]
23
+
24
+ #
25
+ # Private method #conditional_format is used instead.
26
+ #
27
+ # @example
28
+ # {
29
+ # :"extended-reply" => {
30
+ # "hardlink@openssh.com" => [
31
+ # ],
32
+ # },
33
+ # }
34
+ #
35
+ CONDITIONAL_FORMAT = nil
36
+
37
+ private
38
+
39
+ #
40
+ # Returns An instance of Extensions.
41
+ #
42
+ # @return [Extensions] An instance of Extensions.
43
+ #
44
+ def extensions
45
+ @extensions ||= Protocol.const_get(:"Version#{version}")::Extensions.new(context, logger: logger)
46
+ end
47
+
48
+ #
49
+ # Overrides Common::Packetable#conditional_format private method and represents SSH_FXP_EXTENDED_REPLY packet conditional format.
50
+ #
51
+ def conditional_format packet
52
+ packet.inject([]){ |a, (field_name, field_value)|
53
+ a + ((extensions.conditional_reply_format[field_name] || {})[field_value] || [])
54
+ }
55
+ end
56
+ end
57
+ end
58
+ end
59
+ end
60
+ end
@@ -1,17 +1,32 @@
1
1
  module HrrRbSftp
2
+
3
+ #
4
+ # This class implements payload receiver.
5
+ #
2
6
  class Receiver
7
+
8
+ #
9
+ # Instantiates a new payload receiver for the input IO.
10
+ #
11
+ # @param io_in [IO] An IO for input.
12
+ #
3
13
  def initialize io_in
4
14
  @io_in = io_in
5
15
  end
6
16
 
17
+ #
18
+ # Receives payload_length payload. When input IO is EOF, returns nil.
19
+ #
20
+ # @return [String, nil] Received payload. when input IO is EOF, retruns nil.
21
+ #
7
22
  def receive
8
23
  begin
9
- paylaod_length = Protocol::Common::DataType::Uint32.decode(@io_in)
24
+ paylaod_length = Protocol::Common::DataTypes::Uint32.decode(@io_in)
10
25
  rescue NoMethodError
11
26
  nil
12
27
  else
13
28
  payload = @io_in.read(paylaod_length)
14
- if payload.nil? || payload.length != paylaod_length
29
+ if payload.nil? || payload.bytesize != paylaod_length
15
30
  nil
16
31
  else
17
32
  payload
@@ -1,11 +1,25 @@
1
1
  module HrrRbSftp
2
+
3
+ #
4
+ # This class implements payload sender.
5
+ #
2
6
  class Sender
7
+
8
+ #
9
+ # Instantiates a new payload sender for the output IO.
10
+ #
11
+ # @param io_out [IO] An IO for output.
12
+ #
3
13
  def initialize io_out
4
14
  @io_out = io_out
5
15
  end
6
16
 
17
+ #
18
+ # Sends payload_length then payload.
19
+ # Flushes output IO once payload is sent.
20
+ #
7
21
  def send payload
8
- @io_out.write(Protocol::Common::DataType::Uint32.encode(payload.length))
22
+ @io_out.write(Protocol::Common::DataTypes::Uint32.encode(payload.bytesize))
9
23
  @io_out.write(payload)
10
24
  @io_out.flush
11
25
  end
@@ -1,12 +1,37 @@
1
1
  module HrrRbSftp
2
+
3
+ #
4
+ # This class implements SFTP server.
5
+ #
6
+ # @example
7
+ # # instantiate a server
8
+ # server = HrrRbSftp::Server.new(logger: logger)
9
+ #
10
+ # # then start the server with IO arguments
11
+ # server.start(io_in, io_out, io_err)
12
+ #
2
13
  class Server
3
14
  include Loggable
4
15
 
16
+ #
17
+ # @param logger [Logger] logger.
18
+ #
5
19
  def initialize logger: nil
6
20
  self.logger = logger
7
21
  end
8
22
 
9
- def start io_in, io_out, io_err
23
+ #
24
+ # Starts SFTP server.
25
+ #
26
+ # @example
27
+ # # start a server with IO arguments
28
+ # server.start(io_in, io_out, io_err)
29
+ #
30
+ # @param io_in [IO] An IO for input.
31
+ # @param io_out [IO] An IO for output.
32
+ # @param io_err [IO] An IO for debug output.
33
+ #
34
+ def start io_in, io_out, io_err=nil
10
35
  log_info { "start server" }
11
36
 
12
37
  @io_in = io_in
@@ -46,7 +71,10 @@ module HrrRbSftp
46
71
  version = [remote_version, local_version].min
47
72
  log_info { "negotiated version: #{version}" }
48
73
 
49
- send_fxp_version version
74
+ extension_pairs = Protocol.extension_pairs(version)
75
+ log_info { "extension-pairs: #{extension_pairs}" }
76
+
77
+ send_fxp_version version, extension_pairs
50
78
 
51
79
  version
52
80
  end
@@ -60,31 +88,34 @@ module HrrRbSftp
60
88
  raise "Failed receiving SSH_FXP_INIT"
61
89
  end
62
90
 
63
- packet = Protocol::Common::Packet::SSH_FXP_INIT.new({}, logger: logger).decode payload
91
+ packet = Protocol::Common::Packets::SSH_FXP_INIT.new(logger: logger).decode payload
64
92
  packet[:"version"]
65
93
  end
66
94
 
67
- def send_fxp_version version
95
+ def send_fxp_version version, extensions
68
96
  log_debug { "start send_fxp_version" }
69
97
 
70
98
  packet = {
71
- :"type" => Protocol::Common::Packet::SSH_FXP_VERSION::TYPE,
99
+ :"type" => Protocol::Common::Packets::SSH_FXP_VERSION::TYPE,
72
100
  :"version" => version,
73
- :"extensions" => [],
101
+ :"extensions" => extensions,
74
102
  }
75
- payload = Protocol::Common::Packet::SSH_FXP_VERSION.new({}, logger: logger).encode packet
103
+ payload = Protocol::Common::Packets::SSH_FXP_VERSION.new(logger: logger).encode packet
76
104
  @sender.send payload
77
105
  end
78
106
 
79
107
  def respond_to_requests
80
108
  log_info { "start respond_to_requests" }
81
109
 
82
- log_info { "start request and response loop" }
83
- while request = @receiver.receive
84
- response = @protocol.respond_to request
85
- @sender.send response
110
+ begin
111
+ log_info { "start request and response loop" }
112
+ while request = @receiver.receive
113
+ response = @protocol.respond_to request
114
+ @sender.send response
115
+ end
116
+ ensure
117
+ log_info { "request and response loop finished" }
86
118
  end
87
- log_info { "request and response loop finished" }
88
119
  end
89
120
 
90
121
  def close_handles
@@ -1,3 +1,7 @@
1
1
  module HrrRbSftp
2
- VERSION = "0.1.0"
2
+
3
+ #
4
+ # hrr_rb_sftp library version.
5
+ #
6
+ VERSION = "0.2.0"
3
7
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hrr_rb_sftp
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - hirura
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-06-07 00:00:00.000000000 Z
11
+ date: 2020-06-20 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Pure Ruby SFTP server implementation.
14
14
  email:
@@ -35,54 +35,61 @@ files:
35
35
  - lib/hrr_rb_sftp/loggable.rb
36
36
  - lib/hrr_rb_sftp/protocol.rb
37
37
  - lib/hrr_rb_sftp/protocol/common.rb
38
- - lib/hrr_rb_sftp/protocol/common/data_type.rb
39
- - lib/hrr_rb_sftp/protocol/common/data_type/byte.rb
40
- - lib/hrr_rb_sftp/protocol/common/data_type/extension_pair.rb
41
- - lib/hrr_rb_sftp/protocol/common/data_type/extension_pairs.rb
42
- - lib/hrr_rb_sftp/protocol/common/data_type/string.rb
43
- - lib/hrr_rb_sftp/protocol/common/data_type/uint32.rb
44
- - lib/hrr_rb_sftp/protocol/common/data_type/uint64.rb
45
- - lib/hrr_rb_sftp/protocol/common/packet.rb
46
- - lib/hrr_rb_sftp/protocol/common/packet/001_ssh_fxp_init.rb
47
- - lib/hrr_rb_sftp/protocol/common/packet/002_ssh_fxp_version.rb
48
- - lib/hrr_rb_sftp/protocol/common/packetable.rb
38
+ - lib/hrr_rb_sftp/protocol/common/data_types.rb
39
+ - lib/hrr_rb_sftp/protocol/common/data_types/byte.rb
40
+ - lib/hrr_rb_sftp/protocol/common/data_types/extension_pair.rb
41
+ - lib/hrr_rb_sftp/protocol/common/data_types/extension_pairs.rb
42
+ - lib/hrr_rb_sftp/protocol/common/data_types/string.rb
43
+ - lib/hrr_rb_sftp/protocol/common/data_types/uint32.rb
44
+ - lib/hrr_rb_sftp/protocol/common/data_types/uint64.rb
45
+ - lib/hrr_rb_sftp/protocol/common/packets.rb
46
+ - lib/hrr_rb_sftp/protocol/common/packets/001_ssh_fxp_init.rb
47
+ - lib/hrr_rb_sftp/protocol/common/packets/002_ssh_fxp_version.rb
48
+ - lib/hrr_rb_sftp/protocol/common/packets/packet.rb
49
49
  - lib/hrr_rb_sftp/protocol/version1.rb
50
- - lib/hrr_rb_sftp/protocol/version1/data_type.rb
51
- - lib/hrr_rb_sftp/protocol/version1/data_type/attrs.rb
52
- - lib/hrr_rb_sftp/protocol/version1/packet.rb
53
- - lib/hrr_rb_sftp/protocol/version1/packet/003_ssh_fxp_open.rb
54
- - lib/hrr_rb_sftp/protocol/version1/packet/004_ssh_fxp_close.rb
55
- - lib/hrr_rb_sftp/protocol/version1/packet/005_ssh_fxp_read.rb
56
- - lib/hrr_rb_sftp/protocol/version1/packet/006_ssh_fxp_write.rb
57
- - lib/hrr_rb_sftp/protocol/version1/packet/007_ssh_fxp_lstat.rb
58
- - lib/hrr_rb_sftp/protocol/version1/packet/008_ssh_fxp_fstat.rb
59
- - lib/hrr_rb_sftp/protocol/version1/packet/009_ssh_fxp_setstat.rb
60
- - lib/hrr_rb_sftp/protocol/version1/packet/010_ssh_fxp_fsetstat.rb
61
- - lib/hrr_rb_sftp/protocol/version1/packet/011_ssh_fxp_opendir.rb
62
- - lib/hrr_rb_sftp/protocol/version1/packet/012_ssh_fxp_readdir.rb
63
- - lib/hrr_rb_sftp/protocol/version1/packet/013_ssh_fxp_remove.rb
64
- - lib/hrr_rb_sftp/protocol/version1/packet/014_ssh_fxp_mkdir.rb
65
- - lib/hrr_rb_sftp/protocol/version1/packet/015_ssh_fxp_rmdir.rb
66
- - lib/hrr_rb_sftp/protocol/version1/packet/016_ssh_fxp_realpath.rb
67
- - lib/hrr_rb_sftp/protocol/version1/packet/017_ssh_fxp_stat.rb
68
- - lib/hrr_rb_sftp/protocol/version1/packet/101_ssh_fxp_status.rb
69
- - lib/hrr_rb_sftp/protocol/version1/packet/102_ssh_fxp_handle.rb
70
- - lib/hrr_rb_sftp/protocol/version1/packet/103_ssh_fxp_data.rb
71
- - lib/hrr_rb_sftp/protocol/version1/packet/104_ssh_fxp_name.rb
72
- - lib/hrr_rb_sftp/protocol/version1/packet/105_ssh_fxp_attrs.rb
50
+ - lib/hrr_rb_sftp/protocol/version1/data_types.rb
51
+ - lib/hrr_rb_sftp/protocol/version1/data_types/attrs.rb
52
+ - lib/hrr_rb_sftp/protocol/version1/packets.rb
53
+ - lib/hrr_rb_sftp/protocol/version1/packets/003_ssh_fxp_open.rb
54
+ - lib/hrr_rb_sftp/protocol/version1/packets/004_ssh_fxp_close.rb
55
+ - lib/hrr_rb_sftp/protocol/version1/packets/005_ssh_fxp_read.rb
56
+ - lib/hrr_rb_sftp/protocol/version1/packets/006_ssh_fxp_write.rb
57
+ - lib/hrr_rb_sftp/protocol/version1/packets/007_ssh_fxp_lstat.rb
58
+ - lib/hrr_rb_sftp/protocol/version1/packets/008_ssh_fxp_fstat.rb
59
+ - lib/hrr_rb_sftp/protocol/version1/packets/009_ssh_fxp_setstat.rb
60
+ - lib/hrr_rb_sftp/protocol/version1/packets/010_ssh_fxp_fsetstat.rb
61
+ - lib/hrr_rb_sftp/protocol/version1/packets/011_ssh_fxp_opendir.rb
62
+ - lib/hrr_rb_sftp/protocol/version1/packets/012_ssh_fxp_readdir.rb
63
+ - lib/hrr_rb_sftp/protocol/version1/packets/013_ssh_fxp_remove.rb
64
+ - lib/hrr_rb_sftp/protocol/version1/packets/014_ssh_fxp_mkdir.rb
65
+ - lib/hrr_rb_sftp/protocol/version1/packets/015_ssh_fxp_rmdir.rb
66
+ - lib/hrr_rb_sftp/protocol/version1/packets/016_ssh_fxp_realpath.rb
67
+ - lib/hrr_rb_sftp/protocol/version1/packets/017_ssh_fxp_stat.rb
68
+ - lib/hrr_rb_sftp/protocol/version1/packets/101_ssh_fxp_status.rb
69
+ - lib/hrr_rb_sftp/protocol/version1/packets/102_ssh_fxp_handle.rb
70
+ - lib/hrr_rb_sftp/protocol/version1/packets/103_ssh_fxp_data.rb
71
+ - lib/hrr_rb_sftp/protocol/version1/packets/104_ssh_fxp_name.rb
72
+ - lib/hrr_rb_sftp/protocol/version1/packets/105_ssh_fxp_attrs.rb
73
+ - lib/hrr_rb_sftp/protocol/version1/packets/packet.rb
73
74
  - lib/hrr_rb_sftp/protocol/version2.rb
74
- - lib/hrr_rb_sftp/protocol/version2/data_type.rb
75
- - lib/hrr_rb_sftp/protocol/version2/packet.rb
76
- - lib/hrr_rb_sftp/protocol/version2/packet/018_ssh_fxp_rename.rb
75
+ - lib/hrr_rb_sftp/protocol/version2/data_types.rb
76
+ - lib/hrr_rb_sftp/protocol/version2/packets.rb
77
+ - lib/hrr_rb_sftp/protocol/version2/packets/018_ssh_fxp_rename.rb
77
78
  - lib/hrr_rb_sftp/protocol/version3.rb
78
- - lib/hrr_rb_sftp/protocol/version3/data_type.rb
79
- - lib/hrr_rb_sftp/protocol/version3/packet.rb
80
- - lib/hrr_rb_sftp/protocol/version3/packet/014_ssh_fxp_mkdir.rb
81
- - lib/hrr_rb_sftp/protocol/version3/packet/019_ssh_fxp_readlink.rb
82
- - lib/hrr_rb_sftp/protocol/version3/packet/020_ssh_fxp_symlink.rb
83
- - lib/hrr_rb_sftp/protocol/version3/packet/101_ssh_fxp_status.rb
84
- - lib/hrr_rb_sftp/protocol/version3/packet/200_ssh_fxp_extended.rb
85
- - lib/hrr_rb_sftp/protocol/version3/packet/201_ssh_fxp_extended_reply.rb
79
+ - lib/hrr_rb_sftp/protocol/version3/data_types.rb
80
+ - lib/hrr_rb_sftp/protocol/version3/extensions.rb
81
+ - lib/hrr_rb_sftp/protocol/version3/extensions/extension.rb
82
+ - lib/hrr_rb_sftp/protocol/version3/extensions/fsync_at_openssh_com.rb
83
+ - lib/hrr_rb_sftp/protocol/version3/extensions/hardlink_at_openssh_com.rb
84
+ - lib/hrr_rb_sftp/protocol/version3/extensions/lsetstat_at_openssh_com.rb
85
+ - lib/hrr_rb_sftp/protocol/version3/extensions/posix_rename_at_openssh_com.rb
86
+ - lib/hrr_rb_sftp/protocol/version3/packets.rb
87
+ - lib/hrr_rb_sftp/protocol/version3/packets/014_ssh_fxp_mkdir.rb
88
+ - lib/hrr_rb_sftp/protocol/version3/packets/019_ssh_fxp_readlink.rb
89
+ - lib/hrr_rb_sftp/protocol/version3/packets/020_ssh_fxp_symlink.rb
90
+ - lib/hrr_rb_sftp/protocol/version3/packets/101_ssh_fxp_status.rb
91
+ - lib/hrr_rb_sftp/protocol/version3/packets/200_ssh_fxp_extended.rb
92
+ - lib/hrr_rb_sftp/protocol/version3/packets/201_ssh_fxp_extended_reply.rb
86
93
  - lib/hrr_rb_sftp/receiver.rb
87
94
  - lib/hrr_rb_sftp/sender.rb
88
95
  - lib/hrr_rb_sftp/server.rb