123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264 |
- require_relative 'telnet/codes'
- class RFC1143
- include Telnet::Codes
- attr_reader :telopt
- attr_reader :us
- attr_reader :him
- attr_reader :agree
-
- def initialize(to, u, h, a)
- @telopt = to
- @us = u
- @him = h
- @agree = a
- end
- def handle_will
- case @us
- when :no
- if @agree
- return TELNET_DO, @telopt
- else
- return TELNET_DONT, @telopt
- end
- when :yes
-
- return nil, nil
- when :wantno
- @him = :no
- return :error, "DONT answered by WILL"
- when :wantno_opposite
- @him = :yes
- return :error, "DONT answered by WILL"
- when :wantyes
- @him = :yes
- return nil, nil
- when :wantyes_opposite
- @him = :wantno
- return TELNET_DONT, @telopt
- end
- end
-
-
-
- def handle_wont
- case @us
- when :no
- return nil, nil
- when :yes
- @him = :no
- return TELNET_DONT, @telopt
- when :wantno
- @him = :no
- return nil, nil
- when :wantno_opposite
- @him = :wantyes
- return TELNET_DO, @telopt
- when :wantyes
- @him = :no
- return nil, nil
- when :wantyes_opposite
- @him = :no
- return nil, nil
- end
- end
-
- def handle_do
- case @him
- when :no
- @us = :wantyes
- return TELNET_WILL, @telopt
- when :yes
- return :error, 'Already enabled'
- when :wantno
-
- return :error, 'Request in the middle of negotiation'
- when :wantno_opposite
- return :error, 'Already queued request'
- when :wantyes
- return :error, 'Already negotiating for enable'
- when :wantyes_opposite
- @us = :wantyes
- return nil, nil
- end
- end
-
- def handle_dont
- case @him
- when :no
- return :error, 'Already disabled'
- when :yes
- @us = :wantno
- return TELNET_WONT, @telopt
- when :wantno
- return :error, 'Already negotiating for disable'
- when :wantno_opposite
- @us = :wantno
- return nil, nil
- when :wantyes
-
- return :error, 'Request in the middle of negotiation'
- when :wantyes_opposite
- return :error, 'Already queued disable request'
- end
- end
-
-
- def send_will
- case @us
- when :no
- @us = :wantyes
- return TELNET_WILL, @telopt
- when :wantno
- @us = :wantno_opposite
- when :wantyes_opposite
- @us = :wantyes
- else
- return nil, nil
- end
- end
-
-
- def send_wont
- case @us
- when :yes
- @us = :wantno
- return TELNET_WONT, @telopt
- when :wantno_opposite
- @us = :wantno
- return nil, nil
- when :wantyes
- @us = :wantyes_opposite
- return nil, nil
- else
- return nil, nil
- end
- end
-
- def send_do
- case @him
- when :no
- @him = :wantyes
- return TELNET_DO, @telopt
- when :wantno
- @him = :wantno_opposite
- return nil, nil
- when :wantyes_opposite
- @us = :wantyes
- return nil, nil
- else
- return nil, nil
- end
- end
-
- def send_dont
- case @him
- when :yes
- @him = :wantno
- return TELNET_DONT, @telopt
- when :wantno_opposite
- @him = :wantno
- return nil, nil
- when :wantyes
- @him = :wantyes_opposite
- else
- return nil, nil
- end
- end
- end
-
|