preprocess(string)
public
Preprocess received data from the host.
Performs newline conversion and detects telnet command sequences. Called
automatically by #waitfor(). You
should only use this method yourself if you have read input directly using
sysread() or similar, and even then only if in telnet mode.
Show source
def preprocess(string)
string = string.gsub(/#{CR}#{NULL}/o, CR) if @options["Telnetmode"]
string = string.gsub(/#{EOL}/o, "\n") unless @options["Binmode"]
string = string.gsub(/#{NULL}/o, '') unless @options["Binmode"]
string.gsub(/#{IAC}(
[#{IAC}#{AO}#{AYT}#{DM}#{IP}#{NOP}]|
[#{DO}#{DONT}#{WILL}#{WONT}]
[#{OPT_BINARY}-#{OPT_NEW_ENVIRON}#{OPT_EXOPL}]|
#{SB}[^#{IAC}]*#{IAC}#{SE}
)/no) do
if IAC == $1
IAC
elsif AYT == $1
self.write("nobody here but us pigeons" + EOL)
''
elsif DO[0] == $1[0]
if OPT_BINARY[0] == $1[1]
@telnet_option["BINARY"] = true
self.write(IAC + WILL + OPT_BINARY)
else
self.write(IAC + WONT + $1[1..1])
end
''
elsif DONT[0] == $1[0]
self.write(IAC + WONT + $1[1..1])
''
elsif WILL[0] == $1[0]
if OPT_BINARY[0] == $1[1]
self.write(IAC + DO + OPT_BINARY)
elsif OPT_ECHO[0] == $1[1]
self.write(IAC + DO + OPT_ECHO)
elsif OPT_SGA[0] == $1[1]
@telnet_option["SGA"] = true
self.write(IAC + DO + OPT_SGA)
else
self.write(IAC + DONT + $1[1..1])
end
''
elsif WONT[0] == $1[0]
if OPT_ECHO[0] == $1[1]
self.write(IAC + DONT + OPT_ECHO)
elsif OPT_SGA[0] == $1[1]
@telnet_option["SGA"] = false
self.write(IAC + DONT + OPT_SGA)
else
self.write(IAC + DONT + $1[1..1])
end
''
else
''
end
end
end