5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
|
# File 'lib/net/telnet/rfc2217/telnet.rb', line 5
def preprocess(string)
string = string.gsub(/#{CR}#{NULL}/no, CR) if @options["Telnetmode"]
string = string.gsub(/#{EOL}/no, "\n") unless @options["Binmode"]
string = string.gsub(/#{NULL}/no, '') unless @options["Binmode"]
string.gsub(/#{IAC}(
[#{IAC}#{AO}#{AYT}#{DM}#{IP}#{NOP}]|
[#{DO}#{DONT}#{WILL}#{WONT}]
[#{OPT_BINARY}-#{OPT_NEW_ENVIRON}#{44.chr}#{OPT_EXOPL}]|
#{SB}[^#{IAC}]*#{IAC}#{SE}
)/xno) do
if block_given? && IAC != $1
next '' if yield $1
end
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]
unless @telnet_option["BINARY"] == true
@telnet_option["BINARY"] = true
self.write(IAC + WILL + OPT_BINARY)
end
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]
unless @telnet_option["SGA"]
@telnet_option["SGA"] = true
self.write(IAC + DO + OPT_SGA)
end
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]
unless @telnet_option["SGA"] == false
@telnet_option["SGA"] = false
self.write(IAC + DONT + OPT_SGA)
end
else
self.write(IAC + DONT + $1[1..1])
end
''
elsif SB[0] == $1[0] ''
else
''
end
end
end
|