def get
@mutex.synchronize do
if @log.debug?
@log.debug "reading #{@cipher.block_size} bytes from socket..."
end
data = read( @cipher.block_size )
reader = @buffers.reader( @cipher.update( data ) )
packet_length = reader.read_long
remaining_to_read = packet_length + 4 - @cipher.block_size
if @log.debug?
@log.debug "packet length(#{packet_length}) " +
"remaining(#{remaining_to_read})"
end
data = read( remaining_to_read )
hmac = @hmac.mac_length > 0 ? read( @hmac.mac_length ) : ""
reader.append @cipher.update( data )
reader.append @cipher.final
padding_length = reader.read_byte
payload = reader.read( packet_length - padding_length - 1 )
padding = reader.read( padding_length ) if padding_length > 0
my_computed_hmac = compute_hmac( reader.content )
raise Net::SSH::Exception, "corrupted mac detected" if hmac != my_computed_hmac
payload = @decompressor.decompress( payload )
increment_sequence_number
buffer = @buffers.reader( payload )
@log.debug "received: #{buffer.content.inspect}" if @log.debug?
return buffer
end
end