def send( payload )
@mutex.synchronize do
payload = @compressor.compress( payload.to_s )
actual_length = 4 + payload.length + 1
padding_length = @cipher.block_size -
( actual_length % @cipher.block_size )
padding_length += @cipher.block_size if padding_length < 4
packet_length = payload.length + padding_length + 1
if packet_length < 16
padding_length += @cipher.block_size
packet_length = payload.length + padding_length + 1
end
padding = Array.new( padding_length ) { rand(256) }.pack("C*")
unencrypted_data = [ packet_length, padding_length, payload,
padding ].pack( "NCA*A*" )
mac = compute_hmac( unencrypted_data )
encrypted_data = @cipher.update( unencrypted_data ) << @cipher.final
message = encrypted_data + mac
@socket.send message, 0
increment_sequence_number
end
end