
                            S r SSKJr  SSKrSSKJrJrJr  SSKJ	r	  Sr
\" S5      r\" S5      r\" S	5      r\" S
5      r\" S5      r\" S5      r\" S5      r\" S5      r\" S5      r\" S5      r\" S5      r\" S5      r\" S5      r\" S5      r\" S5      r\" S5      r\" S5      r\" S5      r\" S5      r\" S5      r\" S5      r\" S5      r\" S5      r  " S S\!5      r"g)z
Parser for the Telnet protocol. (Not a complete implementation of the telnet
specification, but sufficient for a command line interface.)

Inspired by `Twisted.conch.telnet`.
    )unicode_literalsN)int2bytebinary_type	iterbytes   )logger)TelnetProtocolParser            "                                          c                   Z    \ rS rSrSrS rS rS rS rS r	S r
S	 rS
 rS rS rS rSrg)r	   .   z
Parser for the Telnet protocol.
Usage::

    def data_received(data):
        print(data)

    def size_received(rows, columns):
        print(rows, columns)

    p = TelnetProtocolParser(data_received, size_received)
    p.feed(binary_data)
c                 |    Xl         X l        U R                  5       U l        U R                  R	                  S 5        g N)data_received_callbacksize_received_callback_parse_coroutine_parsersend)selfr    r!   s      9lib/third_party/prompt_toolkit/contrib/telnet/protocol.py__init__TelnetProtocolParser.__init__<   s0    &<#&<#,,.$    c                 &    U R                  U5        g r   )r    r%   datas     r&   received_data"TelnetProtocolParser.received_dataC   s    ##D)r)   c                 2    [         R                  " SU5        g)zReceived telnet DO command. zDO %rNr   infor+   s     r&   do_received TelnetProtocolParser.do_receivedF   s    GT"r)   c                 2    [         R                  " SU5        g)zReceived telnet DONT command. zDONT %rNr0   r+   s     r&   dont_received"TelnetProtocolParser.dont_receivedJ       It$r)   c                 2    [         R                  " SU5        g)zReceived telnet WILL command. zWILL %rNr0   r+   s     r&   will_received"TelnetProtocolParser.will_receivedN   r7   r)   c                 2    [         R                  " SU5        g)zReceived telnet WONT command. zWONT %rNr0   r+   s     r&   wont_received"TelnetProtocolParser.wont_receivedR   r7   r)   c                    U[         :X  a  U R                  U5        g U[        :X  a  U R                  U5        g U[        :X  a  U R                  U5        g U[        :X  a  U R                  U5        g [        R                  " SX5        g )Nzcommand received %r %r)
DOr2   DONTr5   WILLr9   WONTr<   r   r1   )r%   commandr,   s      r&   command_received%TelnetProtocolParser.command_receivedV   sg    b=T"_t$_t$_t$ KK0'@r)   c                     [        U5      S:X  a4  [        R                  " [        S5      U5      u  p#U R	                  X25        g[
        R                  " S5        g)z%
Received NAWS. (Window dimensions.)
   z!HHzWrong number of NAWS bytesN)lenstructunpackstrr!   r   warning)r%   r,   columnsrowss       r&   nawsTelnetProtocolParser.nawsf   sB     t9> #MM#e*d;MG''6NN78r)   c                     USS USS p2[        U[        5      (       d   eU[        :X  a  U R                  U5        g[        R
                  " S[        U5      5        g)z
Got negotiate data.
r   r   NzNegotiate (%r got bytes))
isinstancebytesNAWSrO   r   r1   rH   )r%   r,   rC   payloads       r&   	negotiateTelnetProtocolParser.negotiates   sP      !9d12h'5))))d?IIgKK2CI>r)   c           
   #     #     Sv nU[        S5      :X  a  GO"U[        :X  Ga  Sv nU[        :X  a  U R                  U5        OU[        [        [
        [        [        [        [        [        [        4	;   a  U R                  US5        OU[        [        [        [         4;   a  Sv nU R                  X#5        OU["        :X  ae  / n Sv nU[        :X  a!  Sv nU[$        :X  a  O%UR'                  U5        OUR'                  U5        MB  U R)                  SR+                  U5      5        OU R                  U5        GM:  7f)zG
Parser state machine.
Every 'yield' expression returns the next byte.
Nr   r)   )r   IACr-   NOPDMBRKIPAOAYTECELGArD   r?   r@   rA   rB   SBSEappendrV   join)r%   dd2d3r,   d4s         r&   r"   %TelnetProtocolParser._parse_coroutine   s    
 AHQK c9&&r* CS"b#r2rBB))"d3 BdD11B))"1 2XD"9!&B!Rx % $B KKO  NN388D>2""1%S s   D<D>c                     [        U[        5      (       d   e[        U5       H'  nU R                  R	                  [        U5      5        M)     g)z
Feed data to the parser.
N)rR   r   r   r#   r$   r   )r%   r,   bs      r&   feedTelnetProtocolParser.feed   s;     $,,,,4ALLhqk* !r)   )r#   r    r!   N)__name__
__module____qualname____firstlineno____doc__r'   r-   r2   r5   r9   r<   rD   rO   rV   r"   rn   __static_attributes__ r)   r&   r	   r	   .   s@     *#%%%A 9
?.&`+r)   r	   )#rt   
__future__r   rI   sixr   r   r   logr   __all__rZ   SGArY   r?   r@   LINEMODErc   rA   rB   MODErd   ECHOrT   SUPPRESS_GO_AHEADr[   r\   r]   r^   r_   r`   ra   rb   objectr	   rv   r)   r&   <module>r      s   (  0 0 
 A;A;C=C=C=B<C=C=C=A;C=A;B<B<QK C=C=C=C=C=C=C=C=G+6 G+r)   