metasploit-framework/lib/rex/ui/text/input/buffer.rb

80 lines
1.2 KiB
Ruby

# -*- coding: binary -*-
require 'rex/ui'
module Rex
module Ui
module Text
require 'rex/io/stream_abstraction'
###
#
# This class implements input against a socket.
#
###
class Input::Buffer < Rex::Ui::Text::Input
class BufferSock
include Rex::IO::StreamAbstraction
def write(buf, opts={})
syswrite(buf)
end
end
def initialize
@sock = BufferSock.new
@sock.initialize_abstraction
end
def close
@sock.cleanup_abstraction
end
def sysread(len = 1)
@sock.rsock.sysread(len)
end
def put(msg, opts={})
@sock.lsock.write(msg)
end
#
# Wait for a line of input to be read from a socket.
#
def gets
# Initialize the line buffer
line = ''
# Read data one byte at a time until we see a LF
while (true)
break if line.include?("\n")
# Read another character of input
char = @sock.rsock.getc
# Append this character to the string
line << char
end
return line
end
#
# Returns whether or not EOF has been reached on stdin.
#
def eof?
@sock.lsock.closed?
end
#
# Returns the file descriptor associated with a socket.
#
def fd
return @sock.rsock
end
end
end
end
end