hrr_rb_ssh 0.4.0.pre1 → 0.4.0.pre2

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 (72) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +16 -8
  3. data/demo/client.rb +1 -3
  4. data/demo/echo_server.rb +1 -3
  5. data/demo/more_flexible_auth.rb +1 -3
  6. data/demo/multi_step_auth.rb +1 -3
  7. data/demo/server.rb +1 -3
  8. data/demo/subsystem_echo_server.rb +1 -3
  9. data/hrr_rb_ssh.gemspec +1 -1
  10. data/lib/hrr_rb_ssh/algorithm/publickey/ecdsa_sha2.rb +12 -9
  11. data/lib/hrr_rb_ssh/algorithm/publickey/ssh_dss.rb +10 -7
  12. data/lib/hrr_rb_ssh/algorithm/publickey/ssh_rsa.rb +9 -6
  13. data/lib/hrr_rb_ssh/authentication/method/keyboard_interactive/context.rb +9 -8
  14. data/lib/hrr_rb_ssh/authentication/method/keyboard_interactive/info_request.rb +6 -5
  15. data/lib/hrr_rb_ssh/authentication/method/keyboard_interactive/info_response.rb +5 -2
  16. data/lib/hrr_rb_ssh/authentication/method/keyboard_interactive.rb +12 -10
  17. data/lib/hrr_rb_ssh/authentication/method/none/context.rb +7 -6
  18. data/lib/hrr_rb_ssh/authentication/method/none.rb +10 -8
  19. data/lib/hrr_rb_ssh/authentication/method/password/context.rb +7 -6
  20. data/lib/hrr_rb_ssh/authentication/method/password.rb +10 -8
  21. data/lib/hrr_rb_ssh/authentication/method/publickey/algorithm/functionable.rb +13 -11
  22. data/lib/hrr_rb_ssh/authentication/method/publickey/context.rb +5 -2
  23. data/lib/hrr_rb_ssh/authentication/method/publickey.rb +16 -14
  24. data/lib/hrr_rb_ssh/authentication.rb +28 -27
  25. data/lib/hrr_rb_ssh/client.rb +58 -56
  26. data/lib/hrr_rb_ssh/codable.rb +20 -10
  27. data/lib/hrr_rb_ssh/connection/channel/channel_type/direct_tcpip.rb +20 -18
  28. data/lib/hrr_rb_ssh/connection/channel/channel_type/forwarded_tcpip.rb +20 -18
  29. data/lib/hrr_rb_ssh/connection/channel/channel_type/session/proc_chain/chain_context.rb +0 -3
  30. data/lib/hrr_rb_ssh/connection/channel/channel_type/session/proc_chain.rb +0 -2
  31. data/lib/hrr_rb_ssh/connection/channel/channel_type/session/request_type/env/context.rb +5 -4
  32. data/lib/hrr_rb_ssh/connection/channel/channel_type/session/request_type/env.rb +2 -5
  33. data/lib/hrr_rb_ssh/connection/channel/channel_type/session/request_type/exec/context.rb +5 -4
  34. data/lib/hrr_rb_ssh/connection/channel/channel_type/session/request_type/exec.rb +2 -5
  35. data/lib/hrr_rb_ssh/connection/channel/channel_type/session/request_type/pty_req/context.rb +5 -4
  36. data/lib/hrr_rb_ssh/connection/channel/channel_type/session/request_type/pty_req.rb +2 -5
  37. data/lib/hrr_rb_ssh/connection/channel/channel_type/session/request_type/shell/context.rb +5 -4
  38. data/lib/hrr_rb_ssh/connection/channel/channel_type/session/request_type/shell.rb +2 -5
  39. data/lib/hrr_rb_ssh/connection/channel/channel_type/session/request_type/subsystem/context.rb +5 -4
  40. data/lib/hrr_rb_ssh/connection/channel/channel_type/session/request_type/subsystem.rb +2 -5
  41. data/lib/hrr_rb_ssh/connection/channel/channel_type/session/request_type/window_change/context.rb +5 -4
  42. data/lib/hrr_rb_ssh/connection/channel/channel_type/session/request_type/window_change.rb +2 -5
  43. data/lib/hrr_rb_ssh/connection/channel/channel_type/session.rb +14 -12
  44. data/lib/hrr_rb_ssh/connection/channel.rb +73 -71
  45. data/lib/hrr_rb_ssh/connection/global_request_handler.rb +14 -12
  46. data/lib/hrr_rb_ssh/connection/request_handler/reference_env_request_handler.rb +0 -2
  47. data/lib/hrr_rb_ssh/connection/request_handler/reference_exec_request_handler.rb +4 -6
  48. data/lib/hrr_rb_ssh/connection/request_handler/reference_pty_req_request_handler.rb +10 -12
  49. data/lib/hrr_rb_ssh/connection/request_handler/reference_shell_request_handler.rb +4 -6
  50. data/lib/hrr_rb_ssh/connection/request_handler/reference_window_change_request_handler.rb +0 -2
  51. data/lib/hrr_rb_ssh/connection/request_handler.rb +1 -3
  52. data/lib/hrr_rb_ssh/connection.rb +53 -53
  53. data/lib/hrr_rb_ssh/loggable.rb +42 -0
  54. data/lib/hrr_rb_ssh/server.rb +11 -9
  55. data/lib/hrr_rb_ssh/transport/compression_algorithm/functionable.rb +5 -3
  56. data/lib/hrr_rb_ssh/transport/compression_algorithm/unfunctionable.rb +5 -3
  57. data/lib/hrr_rb_ssh/transport/encryption_algorithm/functionable.rb +5 -3
  58. data/lib/hrr_rb_ssh/transport/encryption_algorithm/unfunctionable.rb +5 -3
  59. data/lib/hrr_rb_ssh/transport/kex_algorithm/diffie_hellman.rb +9 -8
  60. data/lib/hrr_rb_ssh/transport/kex_algorithm/diffie_hellman_group_exchange.rb +13 -12
  61. data/lib/hrr_rb_ssh/transport/kex_algorithm/elliptic_curve_diffie_hellman.rb +9 -8
  62. data/lib/hrr_rb_ssh/transport/mac_algorithm/functionable.rb +5 -3
  63. data/lib/hrr_rb_ssh/transport/mac_algorithm/unfunctionable.rb +5 -3
  64. data/lib/hrr_rb_ssh/transport/receiver.rb +8 -7
  65. data/lib/hrr_rb_ssh/transport/sender.rb +5 -3
  66. data/lib/hrr_rb_ssh/transport/sequence_number.rb +0 -4
  67. data/lib/hrr_rb_ssh/transport/server_host_key_algorithm/functionable.rb +5 -3
  68. data/lib/hrr_rb_ssh/transport.rb +41 -40
  69. data/lib/hrr_rb_ssh/version.rb +1 -1
  70. data/lib/hrr_rb_ssh.rb +0 -1
  71. metadata +6 -6
  72. data/lib/hrr_rb_ssh/logger.rb +0 -56
@@ -1,17 +1,19 @@
1
1
  # coding: utf-8
2
2
  # vim: et ts=2 sw=2
3
3
 
4
- require 'hrr_rb_ssh/logger'
4
+ require 'hrr_rb_ssh/loggable'
5
5
 
6
6
  module HrrRbSsh
7
7
  class Connection
8
8
  class Channel
9
9
  class ChannelType
10
10
  class Session < ChannelType
11
+ include Loggable
12
+
11
13
  NAME = 'session'
12
14
 
13
- def initialize connection, channel, message, socket=nil
14
- @logger = Logger.new self.class.name
15
+ def initialize connection, channel, message, socket=nil, logger: nil
16
+ self.logger = logger
15
17
  @connection = connection
16
18
  @channel = channel
17
19
  @proc_chain = ProcChain.new
@@ -32,27 +34,27 @@ module HrrRbSsh
32
34
 
33
35
  def request message
34
36
  request_type = message[:'request type']
35
- RequestType[request_type].run @proc_chain, @connection.username, @channel.io, @connection.variables, message, @connection.options, self
37
+ RequestType[request_type].run @proc_chain, @connection.username, @channel.io, @connection.variables, message, @connection.options, self, logger: logger
36
38
  end
37
39
 
38
40
  def proc_chain_thread
39
41
  Thread.start {
40
- @logger.info { "start proc chain thread" }
42
+ log_info { "start proc chain thread" }
41
43
  begin
42
44
  exitstatus = @proc_chain.call_next
43
45
  rescue => e
44
- @logger.error { [e.backtrace[0], ": ", e.message, " (", e.class.to_s, ")\n\t", e.backtrace[1..-1].join("\n\t")].join }
46
+ log_error { [e.backtrace[0], ": ", e.message, " (", e.class.to_s, ")\n\t", e.backtrace[1..-1].join("\n\t")].join }
45
47
  exitstatus = 1
46
48
  ensure
47
- @logger.info { "closing proc chain thread" }
48
- @logger.info { "closing channel IOs" }
49
+ log_info { "closing proc chain thread" }
50
+ log_info { "closing channel IOs" }
49
51
  @channel.io.each{ |io| io.close rescue nil }
50
- @logger.info { "channel IOs closed" }
51
- @logger.info { "wait for sending output" }
52
+ log_info { "channel IOs closed" }
53
+ log_info { "wait for sending output" }
52
54
  @channel.wait_until_senders_closed
53
- @logger.info { "sending output finished" }
55
+ log_info { "sending output finished" }
54
56
  @channel.close from=:channel_type_instance, exitstatus=exitstatus
55
- @logger.info { "proc chain thread closed" }
57
+ log_info { "proc chain thread closed" }
56
58
  end
57
59
  }
58
60
  end
@@ -4,12 +4,14 @@
4
4
  require 'socket'
5
5
  require 'thread'
6
6
  require 'monitor'
7
- require 'hrr_rb_ssh/logger'
7
+ require 'hrr_rb_ssh/loggable'
8
8
  require 'hrr_rb_ssh/connection/channel/channel_type'
9
9
 
10
10
  module HrrRbSsh
11
11
  class Connection
12
12
  class Channel
13
+ include Loggable
14
+
13
15
  INITIAL_WINDOW_SIZE = 100000
14
16
  MAXIMUM_PACKET_SIZE = 100000
15
17
 
@@ -24,8 +26,8 @@ module HrrRbSsh
24
26
  :receive_message_queue,
25
27
  :exit_status
26
28
 
27
- def initialize connection, message, socket=nil
28
- @logger = Logger.new self.class.name
29
+ def initialize connection, message, socket=nil, logger: nil
30
+ self.logger = logger
29
31
 
30
32
  @connection = connection
31
33
 
@@ -37,7 +39,7 @@ module HrrRbSsh
37
39
  @remote_window_size = message[:'initial window size']
38
40
  @remote_maximum_packet_size = message[:'maximum packet size']
39
41
 
40
- @channel_type_instance = ChannelType[@channel_type].new connection, self, message, socket
42
+ @channel_type_instance = ChannelType[@channel_type].new connection, self, message, socket, logger: logger
41
43
 
42
44
  @receive_message_queue = Queue.new
43
45
  @receive_data_queue = Queue.new
@@ -83,13 +85,13 @@ module HrrRbSsh
83
85
  @channel_type_instance.start
84
86
  end
85
87
  @closed = false
86
- @logger.debug { "in start: #{@waiting_thread}" }
88
+ log_debug { "in start: #{@waiting_thread}" }
87
89
  @waiting_thread.wakeup if @waiting_thread
88
90
  end
89
91
 
90
92
  def wait_until_started
91
93
  @waiting_thread = Thread.current
92
- @logger.debug { "in wait_until_started: #{@waiting_thread}" }
94
+ log_debug { "in wait_until_started: #{@waiting_thread}" }
93
95
  Thread.stop
94
96
  end
95
97
 
@@ -101,7 +103,7 @@ module HrrRbSsh
101
103
  begin
102
104
  t.join if t.instance_of? Thread
103
105
  rescue => e
104
- @logger.error { [e.backtrace[0], ": ", e.message, " (", e.class.to_s, ")\n\t", e.backtrace[1..-1].join("\n\t")].join }
106
+ log_error { [e.backtrace[0], ": ", e.message, " (", e.class.to_s, ")\n\t", e.backtrace[1..-1].join("\n\t")].join }
105
107
  end
106
108
  }
107
109
  end
@@ -109,7 +111,7 @@ module HrrRbSsh
109
111
  def close from=:outside, exitstatus=0
110
112
  @channel_closing_monitor.synchronize {
111
113
  return if @closed
112
- @logger.info { "close channel" }
114
+ log_info { "close channel" }
113
115
  @closed = true
114
116
  }
115
117
  unless from == :channel_type_instance
@@ -123,7 +125,7 @@ module HrrRbSsh
123
125
  when Integer
124
126
  send_channel_request_exit_status exitstatus
125
127
  else
126
- @logger.warn { "skip sending exit-status because exitstatus is not an instance of Integer" }
128
+ log_warn { "skip sending exit-status because exitstatus is not an instance of Integer" }
127
129
  end
128
130
  elsif from == :sender_thread
129
131
  send_channel_eof
@@ -132,9 +134,9 @@ module HrrRbSsh
132
134
  rescue Error::ClosedConnection => e
133
135
  Thread.pass
134
136
  rescue => e
135
- @logger.error { [e.backtrace[0], ": ", e.message, " (", e.class.to_s, ")\n\t", e.backtrace[1..-1].join("\n\t")].join }
137
+ log_error { [e.backtrace[0], ": ", e.message, " (", e.class.to_s, ")\n\t", e.backtrace[1..-1].join("\n\t")].join }
136
138
  end
137
- @logger.info { "channel closed" }
139
+ log_info { "channel closed" }
138
140
  end
139
141
 
140
142
  def wait_until_closed
@@ -150,7 +152,7 @@ module HrrRbSsh
150
152
  begin
151
153
  t.join if t.instance_of? Thread
152
154
  rescue => e
153
- @logger.error { [e.backtrace[0], ": ", e.message, " (", e.class.to_s, ")\n\t", e.backtrace[1..-1].join("\n\t")].join }
155
+ log_error { [e.backtrace[0], ": ", e.message, " (", e.class.to_s, ")\n\t", e.backtrace[1..-1].join("\n\t")].join }
154
156
  end
155
157
  }
156
158
  end
@@ -161,7 +163,7 @@ module HrrRbSsh
161
163
 
162
164
  def channel_loop_thread
163
165
  Thread.start do
164
- @logger.info { "start channel loop thread" }
166
+ log_info { "start channel loop thread" }
165
167
  begin
166
168
  loop do
167
169
  begin
@@ -174,13 +176,13 @@ module HrrRbSsh
174
176
  @receive_data_queue.close
175
177
  @receive_extended_data_queue.close
176
178
  when Message::SSH_MSG_CHANNEL_REQUEST::VALUE
177
- @logger.info { "received channel request: #{message[:'request type']}" }
179
+ log_info { "received channel request: #{message[:'request type']}" }
178
180
  case @connection.mode
179
181
  when Mode::SERVER
180
182
  begin
181
183
  @channel_type_instance.request message
182
184
  rescue => e
183
- @logger.warn { "request failed: #{e.message}" }
185
+ log_warn { "request failed: #{e.message}" }
184
186
  send_channel_failure if message[:'want reply']
185
187
  else
186
188
  send_channel_success if message[:'want reply']
@@ -188,45 +190,45 @@ module HrrRbSsh
188
190
  when Mode::CLIENT
189
191
  case message[:'request type']
190
192
  when "exit-status"
191
- @logger.info { "exit status: #{message[:'exit status']}" }
193
+ log_info { "exit status: #{message[:'exit status']}" }
192
194
  @exit_status = message[:'exit status'].to_i
193
195
  end
194
196
  end
195
197
  when Message::SSH_MSG_CHANNEL_DATA::VALUE
196
- @logger.info { "received channel data" }
198
+ log_info { "received channel data" }
197
199
  local_channel = message[:'recipient channel']
198
200
  @receive_data_queue.enq message[:'data']
199
201
  when Message::SSH_MSG_CHANNEL_EXTENDED_DATA::VALUE
200
- @logger.info { "received channel extended data" }
202
+ log_info { "received channel extended data" }
201
203
  local_channel = message[:'recipient channel']
202
204
  @receive_extended_data_queue.enq message[:'data']
203
205
  when Message::SSH_MSG_CHANNEL_WINDOW_ADJUST::VALUE
204
- @logger.debug { "received channel window adjust" }
206
+ log_debug { "received channel window adjust" }
205
207
  @remote_window_size = [@remote_window_size + message[:'bytes to add'], 0xffff_ffff].min
206
208
  else
207
- @logger.warn { "received unsupported message: #{message.inspect}" }
209
+ log_warn { "received unsupported message: #{message.inspect}" }
208
210
  end
209
211
  rescue => e
210
- @logger.error { [e.backtrace[0], ": ", e.message, " (", e.class.to_s, ")\n\t", e.backtrace[1..-1].join("\n\t")].join }
212
+ log_error { [e.backtrace[0], ": ", e.message, " (", e.class.to_s, ")\n\t", e.backtrace[1..-1].join("\n\t")].join }
211
213
  close from=:channel_loop_thread
212
214
  break
213
215
  end
214
216
  end
215
217
  ensure
216
- @logger.info { "closing channel loop thread" }
218
+ log_info { "closing channel loop thread" }
217
219
  @receive_data_queue.close
218
220
  @receive_extended_data_queue.close
219
221
  end
220
- @logger.info { "channel loop thread closed" }
222
+ log_info { "channel loop thread closed" }
221
223
  end
222
224
  end
223
225
 
224
226
  def out_sender_thread
225
227
  Thread.start {
226
- @logger.info { "start out sender thread" }
228
+ log_info { "start out sender thread" }
227
229
  loop do
228
230
  if @r_io_out.closed?
229
- @logger.info { "closing out sender thread" }
231
+ log_info { "closing out sender thread" }
230
232
  break
231
233
  end
232
234
  begin
@@ -238,21 +240,21 @@ module HrrRbSsh
238
240
  rescue EOFError, IOError => e
239
241
  @r_io_out.close rescue nil
240
242
  rescue => e
241
- @logger.error { [e.backtrace[0], ": ", e.message, " (", e.class.to_s, ")\n\t", e.backtrace[1..-1].join("\n\t")].join }
243
+ log_error { [e.backtrace[0], ": ", e.message, " (", e.class.to_s, ")\n\t", e.backtrace[1..-1].join("\n\t")].join }
242
244
  @r_io_out.close rescue nil
243
245
  close
244
246
  end
245
247
  end
246
- @logger.info { "out sender thread closed" }
248
+ log_info { "out sender thread closed" }
247
249
  }
248
250
  end
249
251
 
250
252
  def err_sender_thread
251
253
  Thread.start {
252
- @logger.info { "start err sender thread" }
254
+ log_info { "start err sender thread" }
253
255
  loop do
254
256
  if @r_io_err.closed?
255
- @logger.info { "closing err sender thread" }
257
+ log_info { "closing err sender thread" }
256
258
  break
257
259
  end
258
260
  begin
@@ -264,32 +266,32 @@ module HrrRbSsh
264
266
  rescue EOFError, IOError => e
265
267
  @r_io_err.close rescue nil
266
268
  rescue => e
267
- @logger.error { [e.backtrace[0], ": ", e.message, " (", e.class.to_s, ")\n\t", e.backtrace[1..-1].join("\n\t")].join }
269
+ log_error { [e.backtrace[0], ": ", e.message, " (", e.class.to_s, ")\n\t", e.backtrace[1..-1].join("\n\t")].join }
268
270
  @r_io_err.close rescue nil
269
271
  close
270
272
  end
271
273
  end
272
- @logger.info { "err sender thread closed" }
274
+ log_info { "err sender thread closed" }
273
275
  }
274
276
  end
275
277
 
276
278
  def receiver_thread
277
279
  Thread.start {
278
- @logger.info { "start receiver thread" }
280
+ log_info { "start receiver thread" }
279
281
  loop do
280
282
  begin
281
283
  data = @receive_data_queue.deq
282
284
  if data.nil? && @receive_data_queue.closed?
283
- @logger.info { "closing receiver thread" }
284
- @logger.info { "closing w_io_in" }
285
+ log_info { "closing receiver thread" }
286
+ log_info { "closing w_io_in" }
285
287
  @w_io_in.close
286
- @logger.info { "w_io_in closed" }
288
+ log_info { "w_io_in closed" }
287
289
  break
288
290
  end
289
291
  @w_io_in.write data
290
292
  @local_window_size -= data.size
291
293
  if @local_window_size < INITIAL_WINDOW_SIZE/2
292
- @logger.info { "send channel window adjust" }
294
+ log_info { "send channel window adjust" }
293
295
  send_channel_window_adjust
294
296
  @local_window_size += INITIAL_WINDOW_SIZE
295
297
  end
@@ -297,32 +299,32 @@ module HrrRbSsh
297
299
  close
298
300
  break
299
301
  rescue => e
300
- @logger.error { [e.backtrace[0], ": ", e.message, " (", e.class.to_s, ")\n\t", e.backtrace[1..-1].join("\n\t")].join }
302
+ log_error { [e.backtrace[0], ": ", e.message, " (", e.class.to_s, ")\n\t", e.backtrace[1..-1].join("\n\t")].join }
301
303
  close
302
304
  break
303
305
  end
304
306
  end
305
- @logger.info { "receiver thread closed" }
307
+ log_info { "receiver thread closed" }
306
308
  }
307
309
  end
308
310
 
309
311
  def out_receiver_thread
310
312
  Thread.start {
311
- @logger.info { "start out receiver thread" }
313
+ log_info { "start out receiver thread" }
312
314
  loop do
313
315
  begin
314
316
  data = @receive_data_queue.deq
315
317
  if data.nil? && @receive_data_queue.closed?
316
- @logger.info { "closing out receiver thread" }
317
- @logger.info { "closing w_io_out" }
318
+ log_info { "closing out receiver thread" }
319
+ log_info { "closing w_io_out" }
318
320
  @w_io_out.close
319
- @logger.info { "w_io_out closed" }
321
+ log_info { "w_io_out closed" }
320
322
  break
321
323
  end
322
324
  @w_io_out.write data
323
325
  @local_window_size -= data.size
324
326
  if @local_window_size < INITIAL_WINDOW_SIZE/2
325
- @logger.info { "send channel window adjust" }
327
+ log_info { "send channel window adjust" }
326
328
  send_channel_window_adjust
327
329
  @local_window_size += INITIAL_WINDOW_SIZE
328
330
  end
@@ -330,32 +332,32 @@ module HrrRbSsh
330
332
  close
331
333
  break
332
334
  rescue => e
333
- @logger.error { [e.backtrace[0], ": ", e.message, " (", e.class.to_s, ")\n\t", e.backtrace[1..-1].join("\n\t")].join }
335
+ log_error { [e.backtrace[0], ": ", e.message, " (", e.class.to_s, ")\n\t", e.backtrace[1..-1].join("\n\t")].join }
334
336
  close
335
337
  break
336
338
  end
337
339
  end
338
- @logger.info { "out receiver thread closed" }
340
+ log_info { "out receiver thread closed" }
339
341
  }
340
342
  end
341
343
 
342
344
  def err_receiver_thread
343
345
  Thread.start {
344
- @logger.info { "start err receiver thread" }
346
+ log_info { "start err receiver thread" }
345
347
  loop do
346
348
  begin
347
349
  data = @receive_extended_data_queue.deq
348
350
  if data.nil? && @receive_extended_data_queue.closed?
349
- @logger.info { "closing err receiver thread" }
350
- @logger.info { "closing w_io_err" }
351
+ log_info { "closing err receiver thread" }
352
+ log_info { "closing w_io_err" }
351
353
  @w_io_err.close
352
- @logger.info { "w_io_err closed" }
354
+ log_info { "w_io_err closed" }
353
355
  break
354
356
  end
355
357
  @w_io_err.write data
356
358
  @local_window_size -= data.size
357
359
  if @local_window_size < INITIAL_WINDOW_SIZE/2
358
- @logger.info { "send channel window adjust" }
360
+ log_info { "send channel window adjust" }
359
361
  send_channel_window_adjust
360
362
  @local_window_size += INITIAL_WINDOW_SIZE
361
363
  end
@@ -363,21 +365,21 @@ module HrrRbSsh
363
365
  close
364
366
  break
365
367
  rescue => e
366
- @logger.error { [e.backtrace[0], ": ", e.message, " (", e.class.to_s, ")\n\t", e.backtrace[1..-1].join("\n\t")].join }
368
+ log_error { [e.backtrace[0], ": ", e.message, " (", e.class.to_s, ")\n\t", e.backtrace[1..-1].join("\n\t")].join }
367
369
  close
368
370
  break
369
371
  end
370
372
  end
371
- @logger.info { "err receiver thread closed" }
373
+ log_info { "err receiver thread closed" }
372
374
  }
373
375
  end
374
376
 
375
377
  def sender_thread
376
378
  Thread.start {
377
- @logger.info { "start sender thread" }
379
+ log_info { "start sender thread" }
378
380
  loop do
379
381
  if @r_io_in.closed?
380
- @logger.info { "closing sender thread" }
382
+ log_info { "closing sender thread" }
381
383
  break
382
384
  end
383
385
  begin
@@ -389,12 +391,12 @@ module HrrRbSsh
389
391
  rescue EOFError, IOError => e
390
392
  @r_io_in.close rescue nil
391
393
  rescue => e
392
- @logger.error { [e.backtrace[0], ": ", e.message, " (", e.class.to_s, ")\n\t", e.backtrace[1..-1].join("\n\t")].join }
394
+ log_error { [e.backtrace[0], ": ", e.message, " (", e.class.to_s, ")\n\t", e.backtrace[1..-1].join("\n\t")].join }
393
395
  @r_io_in.close rescue nil
394
396
  end
395
397
  end
396
398
  close from=:sender_thread
397
- @logger.info { "sender thread closed" }
399
+ log_info { "sender thread closed" }
398
400
  }
399
401
  end
400
402
 
@@ -403,7 +405,7 @@ module HrrRbSsh
403
405
  :'message number' => Message::SSH_MSG_CHANNEL_SUCCESS::VALUE,
404
406
  :'recipient channel' => @remote_channel,
405
407
  }
406
- payload = Message::SSH_MSG_CHANNEL_SUCCESS.encode message
408
+ payload = Message::SSH_MSG_CHANNEL_SUCCESS.encode message, logger: logger
407
409
  @connection.send payload
408
410
  end
409
411
 
@@ -412,7 +414,7 @@ module HrrRbSsh
412
414
  :'message number' => Message::SSH_MSG_CHANNEL_FAILURE::VALUE,
413
415
  :'recipient channel' => @remote_channel,
414
416
  }
415
- payload = Message::SSH_MSG_CHANNEL_FAILURE.encode message
417
+ payload = Message::SSH_MSG_CHANNEL_FAILURE.encode message, logger: logger
416
418
  @connection.send payload
417
419
  end
418
420
 
@@ -422,7 +424,7 @@ module HrrRbSsh
422
424
  :'recipient channel' => @remote_channel,
423
425
  :'bytes to add' => INITIAL_WINDOW_SIZE,
424
426
  }
425
- payload = Message::SSH_MSG_CHANNEL_WINDOW_ADJUST.encode message
427
+ payload = Message::SSH_MSG_CHANNEL_WINDOW_ADJUST.encode message, logger: logger
426
428
  @connection.send payload
427
429
  end
428
430
 
@@ -432,7 +434,7 @@ module HrrRbSsh
432
434
  :'recipient channel' => @remote_channel,
433
435
  :'data' => data,
434
436
  }
435
- payload = Message::SSH_MSG_CHANNEL_DATA.encode message
437
+ payload = Message::SSH_MSG_CHANNEL_DATA.encode message, logger: logger
436
438
  @connection.send payload
437
439
  end
438
440
 
@@ -443,7 +445,7 @@ module HrrRbSsh
443
445
  :'data type code' => code,
444
446
  :'data' => data,
445
447
  }
446
- payload = Message::SSH_MSG_CHANNEL_EXTENDED_DATA.encode message
448
+ payload = Message::SSH_MSG_CHANNEL_EXTENDED_DATA.encode message, logger: logger
447
449
  @connection.send payload
448
450
  end
449
451
 
@@ -460,7 +462,7 @@ module HrrRbSsh
460
462
  :'terminal height, pixels' => term_height_pixel,
461
463
  :'encoded terminal modes' => encoded_term_modes,
462
464
  }
463
- payload = Message::SSH_MSG_CHANNEL_REQUEST.encode message
465
+ payload = Message::SSH_MSG_CHANNEL_REQUEST.encode message, logger: logger
464
466
  @connection.send payload
465
467
  end
466
468
 
@@ -473,7 +475,7 @@ module HrrRbSsh
473
475
  :'variable name' => variable_name,
474
476
  :'variable value' => variable_value,
475
477
  }
476
- payload = Message::SSH_MSG_CHANNEL_REQUEST.encode message
478
+ payload = Message::SSH_MSG_CHANNEL_REQUEST.encode message, logger: logger
477
479
  @connection.send payload
478
480
  end
479
481
 
@@ -484,7 +486,7 @@ module HrrRbSsh
484
486
  :'request type' => "shell",
485
487
  :'want reply' => false,
486
488
  }
487
- payload = Message::SSH_MSG_CHANNEL_REQUEST.encode message
489
+ payload = Message::SSH_MSG_CHANNEL_REQUEST.encode message, logger: logger
488
490
  @connection.send payload
489
491
  end
490
492
 
@@ -496,7 +498,7 @@ module HrrRbSsh
496
498
  :'want reply' => false,
497
499
  :'command' => command,
498
500
  }
499
- payload = Message::SSH_MSG_CHANNEL_REQUEST.encode message
501
+ payload = Message::SSH_MSG_CHANNEL_REQUEST.encode message, logger: logger
500
502
  @connection.send payload
501
503
  end
502
504
 
@@ -508,7 +510,7 @@ module HrrRbSsh
508
510
  :'want reply' => false,
509
511
  :'subsystem name' => subsystem_name,
510
512
  }
511
- payload = Message::SSH_MSG_CHANNEL_REQUEST.encode message
513
+ payload = Message::SSH_MSG_CHANNEL_REQUEST.encode message, logger: logger
512
514
  @connection.send payload
513
515
  end
514
516
 
@@ -523,7 +525,7 @@ module HrrRbSsh
523
525
  :'terminal width, pixels' => term_width_pixel,
524
526
  :'terminal height, pixels' => term_height_pixel,
525
527
  }
526
- payload = Message::SSH_MSG_CHANNEL_REQUEST.encode message
528
+ payload = Message::SSH_MSG_CHANNEL_REQUEST.encode message, logger: logger
527
529
  @connection.send payload
528
530
  end
529
531
 
@@ -535,7 +537,7 @@ module HrrRbSsh
535
537
  :'want reply' => false,
536
538
  :'signal name' => signal_name,
537
539
  }
538
- payload = Message::SSH_MSG_CHANNEL_REQUEST.encode message
540
+ payload = Message::SSH_MSG_CHANNEL_REQUEST.encode message, logger: logger
539
541
  @connection.send payload
540
542
  end
541
543
 
@@ -547,7 +549,7 @@ module HrrRbSsh
547
549
  :'want reply' => false,
548
550
  :'exit status' => exitstatus,
549
551
  }
550
- payload = Message::SSH_MSG_CHANNEL_REQUEST.encode message
552
+ payload = Message::SSH_MSG_CHANNEL_REQUEST.encode message, logger: logger
551
553
  @connection.send payload
552
554
  end
553
555
 
@@ -556,7 +558,7 @@ module HrrRbSsh
556
558
  :'message number' => Message::SSH_MSG_CHANNEL_EOF::VALUE,
557
559
  :'recipient channel' => @remote_channel,
558
560
  }
559
- payload = Message::SSH_MSG_CHANNEL_EOF.encode message
561
+ payload = Message::SSH_MSG_CHANNEL_EOF.encode message, logger: logger
560
562
  @connection.send payload
561
563
  end
562
564
 
@@ -565,7 +567,7 @@ module HrrRbSsh
565
567
  :'message number' => Message::SSH_MSG_CHANNEL_CLOSE::VALUE,
566
568
  :'recipient channel' => @remote_channel,
567
569
  }
568
- payload = Message::SSH_MSG_CHANNEL_CLOSE.encode message
570
+ payload = Message::SSH_MSG_CHANNEL_CLOSE.encode message, logger: logger
569
571
  @connection.send payload
570
572
  end
571
573
  end
@@ -2,23 +2,25 @@
2
2
  # vim: et ts=2 sw=2
3
3
 
4
4
  require 'socket'
5
- require 'hrr_rb_ssh/logger'
5
+ require 'hrr_rb_ssh/loggable'
6
6
 
7
7
  module HrrRbSsh
8
8
  class Connection
9
9
  class GlobalRequestHandler
10
+ include Loggable
11
+
10
12
  attr_reader \
11
13
  :accepted
12
14
 
13
- def initialize connection
14
- @logger = Logger.new self.class.name
15
+ def initialize connection, logger: nil
16
+ self.logger = logger
15
17
  @connection = connection
16
18
  @tcpip_forward_servers = Hash.new
17
19
  @tcpip_forward_threads = Hash.new
18
20
  end
19
21
 
20
22
  def close
21
- @logger.info { "closing tcpip-forward" }
23
+ log_info { "closing tcpip-forward" }
22
24
  @tcpip_forward_threads.values.each(&:exit)
23
25
  @tcpip_forward_servers.values.each{ |s|
24
26
  begin
@@ -29,7 +31,7 @@ module HrrRbSsh
29
31
  }
30
32
  @tcpip_forward_threads.clear
31
33
  @tcpip_forward_servers.clear
32
- @logger.info { "tcpip-forward closed" }
34
+ log_info { "tcpip-forward closed" }
33
35
  end
34
36
 
35
37
  def request message
@@ -39,13 +41,13 @@ module HrrRbSsh
39
41
  when "cancel-tcpip-forward"
40
42
  cancel_tcpip_forward message
41
43
  else
42
- @logger.warn { "unsupported request name: #{message[:'request name']}" }
44
+ log_warn { "unsupported request name: #{message[:'request name']}" }
43
45
  raise
44
46
  end
45
47
  end
46
48
 
47
49
  def tcpip_forward message
48
- @logger.info { "starting tcpip-forward" }
50
+ log_info { "starting tcpip-forward" }
49
51
  begin
50
52
  address_to_bind = message[:'address to bind']
51
53
  port_number_to_bind = message[:'port number to bind']
@@ -60,18 +62,18 @@ module HrrRbSsh
60
62
  }
61
63
  end
62
64
  rescue => e
63
- @logger.error { [e.backtrace[0], ": ", e.message, " (", e.class.to_s, ")\n\t", e.backtrace[1..-1].join("\n\t")].join }
65
+ log_error { [e.backtrace[0], ": ", e.message, " (", e.class.to_s, ")\n\t", e.backtrace[1..-1].join("\n\t")].join }
64
66
  end
65
67
  }
66
- @logger.info { "tcpip-forward started" }
68
+ log_info { "tcpip-forward started" }
67
69
  rescue => e
68
- @logger.warn { "starting tcpip-forward failed: #{e.message}" }
70
+ log_warn { "starting tcpip-forward failed: #{e.message}" }
69
71
  raise e
70
72
  end
71
73
  end
72
74
 
73
75
  def cancel_tcpip_forward message
74
- @logger.info { "canceling tcpip-forward" }
76
+ log_info { "canceling tcpip-forward" }
75
77
  address_to_bind = message[:'address to bind']
76
78
  port_number_to_bind = message[:'port number to bind']
77
79
  id = "#{address_to_bind}:#{port_number_to_bind}"
@@ -83,7 +85,7 @@ module HrrRbSsh
83
85
  end
84
86
  @tcpip_forward_threads.delete id
85
87
  @tcpip_forward_servers.delete id
86
- @logger.info { "tcpip-forward canceled" }
88
+ log_info { "tcpip-forward canceled" }
87
89
  end
88
90
  end
89
91
  end
@@ -1,7 +1,6 @@
1
1
  # coding: utf-8
2
2
  # vim: et ts=2 sw=2
3
3
 
4
- require 'hrr_rb_ssh/logger'
5
4
  require 'hrr_rb_ssh/connection/request_handler'
6
5
 
7
6
  module HrrRbSsh
@@ -9,7 +8,6 @@ module HrrRbSsh
9
8
  class RequestHandler
10
9
  class ReferenceEnvRequestHandler < RequestHandler
11
10
  def initialize
12
- @logger = Logger.new self.class.name
13
11
  @proc = Proc.new { |context|
14
12
  context.vars[:env] ||= Hash.new
15
13
  context.vars[:env][context.variable_name] = context.variable_value