
    ^h                       S r SSKJr  SSKrSSKJrJr  SSKJr  S/r	SS j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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`.
    )annotationsN)Callable	Generator   )loggerTelnetProtocolParserc                    [        U 45      $ N)bytes)numbers    `/home/james-whalen/.local/lib/python3.13/site-packages/prompt_toolkit/contrib/telnet/protocol.pyint2byter      s    &                "                                             c                      \ rS rSrSr        SS jrSS jrSS jrSS jrSS jr	SS jr
SS	 jrSS
 jrSS jrSS jrSS jrSS jrSrg)r   8   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        X0l        U R                  5       U l        U R                  R                  S 5        g r
   )data_received_callbacksize_received_callbackttype_received_callback_parse_coroutine_parsersend)selfr&   r'   r(   s       r   __init__TelnetProtocolParser.__init__G   s8     '=#&<#'>$,,.$r   c                &    U R                  U5        g r
   )r&   r,   datas     r   received_data"TelnetProtocolParser.received_dataT   s    ##D)r   c                2    [         R                  " SU5        g)zReceived telnet DO command.zDO %rNr   infor0   s     r   do_received TelnetProtocolParser.do_receivedW   s    GT"r   c                2    [         R                  " SU5        g)zReceived telnet DONT command.zDONT %rNr5   r0   s     r   dont_received"TelnetProtocolParser.dont_received[       It$r   c                2    [         R                  " SU5        g)zReceived telnet WILL command.zWILL %rNr5   r0   s     r   will_received"TelnetProtocolParser.will_received_   r<   r   c                2    [         R                  " SU5        g)zReceived telnet WONT command.zWONT %rNr5   r0   s     r   wont_received"TelnetProtocolParser.wont_receivedc   r<   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)
DOr7   DONTr:   WILLr>   WONTrA   r   r6   )r,   commandr1   s      r   command_received%TelnetProtocolParser.command_receivedg   sg    b=T"_t$_t$_t$ KK0'@r   c                    [        U5      S:X  a+  [        R                  " S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unpackr'   r   warning)r,   r1   columnsrowss       r   nawsTelnetProtocolParser.nawsw   s>     t9> #MM%6MG''6NN78r   c                    USS USS pU[         :X  a#  UR                  S5      nU R                  U5        g[        R                  " S5        g)z
Received terminal type.
r   r   Nasciiz.Received a non-IS terminal type Subnegotiation)ISdecoder(   r   rP   )r,   r1   subcmdttypes       r   rZ   TelnetProtocolParser.ttype   sG     Aay$qr(R<KK(E((/NNKLr   c                    USS USS p2U[         :X  a  U R                  U5        g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))NAWSrS   TTYPErZ   r   r6   rM   )r,   r1   rH   payloads       r   	negotiateTelnetProtocolParser.negotiate   sQ      !9d12hd?IIgJJw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   IACr2   NOPDMBRKIPAOAYTECELGArI   rD   rE   rF   rG   SBSEappendr`   join)r,   dd2d3r1   d4s         r   r)   %TelnetProtocolParser._parse_coroutine   s    
 AHQK c9&&r* CS"b#r2rBB))"c2 BdD11B))"1 2XD"9!&B!Rx % $B KKO  NN388D>2""1%S s   D<D>c                ^    U H'  nU R                   R                  [        U5      5        M)     g)z
Feed data to the parser.
N)r*   r+   r   )r,   r1   bs      r   feedTelnetProtocolParser.feed   s$     ALLhqk* r   )r*   r&   r'   r(   N)r&   zCallable[[bytes], None]r'   zCallable[[int, int], None]r(   zCallable[[str], None]returnNone)r1   r   rz   r{   )rH   r   r1   r   rz   r{   )rz   zGenerator[None, bytes, None])__name__
__module____qualname____firstlineno____doc__r-   r2   r7   r:   r>   rA   rI   rS   rZ   r`   r)   rx   __static_attributes__ r   r   r   r   8   sl      7  !;  "7	 
 
 *#%%%A 9	M?.&`+r   )r   intrz   r   )%r   
__future__r   rN   typingr   r   logr   __all__r   rd   SGArc   rD   rE   LINEMODErm   rF   rG   MODErn   ECHOr]   SUPPRESS_GO_AHEADr^   SENDrW   re   rf   rg   rh   ri   rj   rk   rl   r   r   r   r   <module>r      s"   #  &  

 qkqksmc]}B<c]}}{c]{|B<QK {a[c]smc]c]smc]c]c]Y+ Y+r   