summaryrefslogtreecommitdiff
path: root/lib/net/ssh/transport/packet_stream.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/net/ssh/transport/packet_stream.rb')
-rw-r--r--lib/net/ssh/transport/packet_stream.rb14
1 files changed, 10 insertions, 4 deletions
diff --git a/lib/net/ssh/transport/packet_stream.rb b/lib/net/ssh/transport/packet_stream.rb
index dbf4461..7b45a09 100644
--- a/lib/net/ssh/transport/packet_stream.rb
+++ b/lib/net/ssh/transport/packet_stream.rb
@@ -77,8 +77,12 @@ module Net; module SSH; module Transport
return data.length
end
+ def pending_write?
+ output.length > 0
+ end
+
def send_queue
- if output.length > 0
+ if pending_write?
sent = send(output.to_s, 0)
trace { "sent #{sent} bytes" }
output.consume!(sent)
@@ -87,7 +91,7 @@ module Net; module SSH; module Transport
def wait_for_queue
send_queue
- while output.length > 0
+ while pending_write?
result = IO.select(nil, [self]) or next
next unless result[1].any?
send_queue
@@ -100,6 +104,8 @@ module Net; module SSH; module Transport
end
def enqueue_packet(payload)
+ payload = payload.to_s
+
# the length of the packet, minus the padding
actual_length = 4 + payload.length + 1
@@ -123,7 +129,7 @@ module Net; module SSH; module Transport
encrypted_data = client_cipher.update(unencrypted_data) << client_cipher.final
message = encrypted_data + mac
- trace { "queueing packet ##{@client_sequence_number} len #{packet_length}" }
+ trace { "queueing packet nr #{@client_sequence_number} type #{payload[0]} len #{packet_length}" }
output.append(message)
@client_sequence_number += 1
@@ -176,7 +182,7 @@ module Net; module SSH; module Transport
my_computed_hmac = server_hmac.digest([server_sequence_number, @packet.content].pack("NA*"))
raise Net::SSH::Exception, "corrupted mac detected" if real_hmac != my_computed_hmac
- trace { "received packet ##{@server_sequence_number} len #{@packet_length}" }
+ trace { "received packet nr #{@server_sequence_number} type #{payload[0]} len #{@packet_length}" }
@server_sequence_number += 1
@server_sequence_number = 0 if @server_sequence_number > 0xFFFFFFFF