net-ssh 2.0.22 → 2.0.23

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.
@@ -1,4 +1,13 @@
1
1
 
2
+ === 2.0.23 / 03 Jun 2010
3
+
4
+ * delay CHANNEL_EOF packet until output buffer is empty [Rich Lane]
5
+
6
+ Previously, calling #eof! after #send_data would result in the CHANNEL_EOF
7
+ packet being sent immediately, ahead of the data in the output buffer. Now
8
+ buffer becomes empty.
9
+
10
+
2
11
  === 2.0.22 / 20 Apr 2010
3
12
 
4
13
  * Fix for: "Parsing the config errors out because it coerces the "1" into an integer and then tries to split it on spaces for multiple host checking." (http://net-ssh.lighthouseapp.com/projects/36253/tickets/10) [Lee Marlow]
@@ -126,7 +126,7 @@ module Net; module SSH; module Connection
126
126
  @pending_requests = []
127
127
  @on_open_failed = @on_data = @on_extended_data = @on_process = @on_close = @on_eof = nil
128
128
  @on_request = {}
129
- @closing = @eof = false
129
+ @closing = @eof = @sent_eof = false
130
130
  end
131
131
 
132
132
  # A shortcut for accessing properties of the channel (see #properties).
@@ -298,10 +298,10 @@ module Net; module SSH; module Connection
298
298
 
299
299
  # Tells the remote end of the channel that no more data is forthcoming
300
300
  # from this end of the channel. The remote end may still send data.
301
+ # The CHANNEL_EOF packet will be sent once the output buffer is empty.
301
302
  def eof!
302
303
  return if eof?
303
304
  @eof = true
304
- connection.send_message(Buffer.from(:byte, CHANNEL_EOF, :long, remote_id))
305
305
  end
306
306
 
307
307
  # If an #on_process handler has been set up, this will cause it to be
@@ -310,6 +310,11 @@ module Net; module SSH; module Connection
310
310
  def process
311
311
  @on_process.call(self) if @on_process
312
312
  enqueue_pending_output
313
+
314
+ if @eof and not @sent_eof and output.empty?
315
+ connection.send_message(Buffer.from(:byte, CHANNEL_EOF, :long, remote_id))
316
+ @sent_eof = true
317
+ end
313
318
  end
314
319
 
315
320
  # Registers a callback to be invoked when data packets are received by the
@@ -51,7 +51,7 @@ module Net; module SSH
51
51
  MINOR = 0
52
52
 
53
53
  # The tiny component of this version of the Net::SSH library
54
- TINY = 22
54
+ TINY = 23
55
55
 
56
56
  # The current version of the Net::SSH library as a Version instance
57
57
  CURRENT = new(MAJOR, MINOR, TINY)
@@ -1,7 +1,7 @@
1
1
  @spec = Gem::Specification.new do |s|
2
2
  s.name = "net-ssh"
3
3
  s.rubyforge_project = 'net-ssh'
4
- s.version = "2.0.22"
4
+ s.version = "2.0.23"
5
5
  s.summary = "Net::SSH: a pure-Ruby implementation of the SSH2 client protocol."
6
6
  s.description = s.summary
7
7
  s.authors = ["Jamis Buck", "Delano Mandelbaum"]
@@ -378,6 +378,7 @@ module Connection
378
378
  channel.do_open_confirmation(0, 1000, 1000)
379
379
  connection.expect { |t,p| assert_equal CHANNEL_EOF, p.type }
380
380
  channel.eof!
381
+ channel.process
381
382
  end
382
383
 
383
384
  def test_eof_bang_should_not_send_eof_if_eof_was_already_declared
@@ -385,6 +386,7 @@ module Connection
385
386
  connection.expect { |t,p| assert_equal CHANNEL_EOF, p.type }
386
387
  channel.eof!
387
388
  assert_nothing_raised { channel.eof! }
389
+ channel.process
388
390
  end
389
391
 
390
392
  def test_eof_q_should_return_true_if_eof_declared
@@ -394,15 +396,28 @@ module Connection
394
396
  assert !channel.eof?
395
397
  channel.eof!
396
398
  assert channel.eof?
399
+ channel.process
397
400
  end
398
401
 
399
402
  def test_send_data_should_raise_exception_if_eof_declared
400
403
  channel.do_open_confirmation(0, 1000, 1000)
401
404
  connection.expect { |t,p| assert_equal CHANNEL_EOF, p.type }
402
405
  channel.eof!
406
+ channel.process
403
407
  assert_raises(EOFError) { channel.send_data("die! die! die!") }
404
408
  end
405
409
 
410
+ def test_data_should_precede_eof
411
+ channel.do_open_confirmation(0, 1000, 1000)
412
+ connection.expect do |t,p|
413
+ assert_equal CHANNEL_DATA, p.type
414
+ connection.expect { |t,p| assert_equal CHANNEL_EOF, p.type }
415
+ end
416
+ channel.send_data "foo"
417
+ channel.eof!
418
+ channel.process
419
+ end
420
+
406
421
  private
407
422
 
408
423
  class MockConnection
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: net-ssh
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.22
4
+ version: 2.0.23
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jamis Buck
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2010-04-20 00:00:00 -04:00
13
+ date: 2010-06-03 00:00:00 -04:00
14
14
  default_executable:
15
15
  dependencies: []
16
16