
    Mh                       d Z ddlmZ ddlZddlmZmZ ddlmZ dgZ	d!dZ
 e
d          Z e
d          Z e
d          Z e
d          Z e
d          Z e
d          Z e
d          Z e
d          Z e
d          Z e
d          Z e
d          Z e
d          Z e
d          Z e
d          Z e
d          Z e
d          Z e
d          Z e
d          Z e
d          Z e
d          Z e
d          Z e
d          Z e
d          Z  e
d          Z! e
d          Z" e
d          Z# G d  d          Z$dS )"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TelnetProtocolParsernumberintreturnbytesc                "    t          | f          S N)r   )r	   s    f/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/prompt_toolkit/contrib/telnet/protocol.pyint2byter      s    &                "                                             c                  r    e Zd ZdZdd
ZddZddZddZddZddZ	ddZ
ddZddZddZddZddZdS )r   a  
    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)
    data_received_callbackCallable[[bytes], None]size_received_callbackCallable[[int, int], None]ttype_received_callbackCallable[[str], None]r   Nonec                    || _         || _        || _        |                                 | _        | j                            d            d S r   )r&   r(   r*   _parse_coroutine_parsersend)selfr&   r(   r*   s       r   __init__zTelnetProtocolParser.__init__G   sK     '=#&<#'>$,,..$r   datar   c                0    |                      |           d S r   )r&   r1   r3   s     r   received_dataz"TelnetProtocolParser.received_dataT   s    ##D)))))r   c                0    t          j        d|           dS )zReceived telnet DO command.zDO %rNr   infor5   s     r   do_receivedz TelnetProtocolParser.do_receivedW   s    GT"""""r   c                0    t          j        d|           dS )zReceived telnet DONT command.zDONT %rNr8   r5   s     r   dont_receivedz"TelnetProtocolParser.dont_received[       It$$$$$r   c                0    t          j        d|           dS )zReceived telnet WILL command.zWILL %rNr8   r5   s     r   will_receivedz"TelnetProtocolParser.will_received_   r=   r   c                0    t          j        d|           dS )zReceived telnet WONT command.zWONT %rNr8   r5   s     r   wont_receivedz"TelnetProtocolParser.wont_receivedc   r=   r   commandc                B   |t           k    r|                     |           d S |t          k    r|                     |           d S |t          k    r|                     |           d S |t          k    r|                     |           d S t          j	        d||           d S )Nzcommand received %r %r)
DOr:   DONTr<   WILLr?   WONTrA   r   r9   )r1   rB   r3   s      r   command_receivedz%TelnetProtocolParser.command_receivedg   s    b==T"""""__t$$$$$__t$$$$$__t$$$$$ K0'4@@@@@r   c                    t          |          dk    r0t          j        d|          \  }}|                     ||           dS t	          j        d           dS )z5
        Received NAWS. (Window dimensions.)
           z!HHzWrong number of NAWS bytesN)lenstructunpackr(   r   warning)r1   r3   columnsrowss       r   nawszTelnetProtocolParser.nawsw   s]     t99>> #M%66MGT''g66666N788888r   c                    |dd         |dd         }}|t           k    r,|                    d          }|                     |           dS t          j        d           dS )z)
        Received terminal type.
        r   r   Nasciiz.Received a non-IS terminal type Subnegotiation)ISdecoder*   r   rN   )r1   r3   subcmdttypes       r   rW   zTelnetProtocolParser.ttype   sh     AaCy$qrr(R<<KK((E((/////NKLLLLLr   c                    |dd         |dd         }}|t           k    r|                     |           dS |t          k    r|                     |           dS t	          j        dt          |                     dS )z%
        Got negotiate data.
        r   r   NzNegotiate (%r got bytes))NAWSrQ   TTYPErW   r   r9   rK   )r1   r3   rB   payloads       r   	negotiatezTelnetProtocolParser.negotiate   s      !9d122hd??IIgJJwK2CII>>>>>r   Generator[None, bytes, None]c           
   #    K   	 dV }|t          d          k    rnQ|t          k    r0dV }|t          k    r|                     |           n|t          t          t
          t          t          t          t          t          t          f	v r|                     |d           n|t          t          t          t           fv rdV }|                     ||           n|t"          k    rvg }	 dV }|t          k    r&dV }|t$          k    rn,|                    |           n|                    |           K|                     d                    |                     n|                     |           l)z_
        Parser state machine.
        Every 'yield' expression returns the next byte.
        TNr   r   )r   IACr6   NOPDMBRKIPAOAYTECELGArH   rD   rE   rF   rG   SBSEappendr\   join)r1   dd2d3r3   d4s         r   r.   z%TelnetProtocolParser._parse_coroutine   sg     
)	&AHQKK cUU99&&r**** CS"b#r2rBBB))"c2222 BdD111B))"b1111 2XXD
,"UU99!&B!Rxx % $B KKOOO
, NN388D>>222""1%%%S)	&r   c                ^    |D ])}| j                             t          |                     *dS )z*
        Feed data to the parser.
        N)r/   r0   r   )r1   r3   bs      r   feedzTelnetProtocolParser.feed   s<      	+ 	+ALhqkk****	+ 	+r   N)r&   r'   r(   r)   r*   r+   r   r,   )r3   r   r   r,   )rB   r   r3   r   r   r,   )r   r]   )__name__
__module____qualname____doc__r2   r6   r:   r<   r?   rA   rH   rQ   rW   r\   r.   rs    r   r   r   r   8   s               * * * *# # # #% % % %% % % %% % % %A A A A 9 9 9 9	M 	M 	M 	M? ? ? ?.& .& .& .&`+ + + + + +r   )r	   r
   r   r   )%rw   
__future__r   rL   typingr   r   logr   __all__r   r`   SGAr_   rD   rE   LINEMODEri   rF   rG   MODErj   ECHOrY   SUPPRESS_GO_AHEADrZ   SENDrT   ra   rb   rc   rd   re   rf   rg   rh   r   rx   r   r   <module>r      s    # " " " " "  & & & & & & & &       
   
 hqkkhqkkhsmmXc]]x}}8B<<Xc]]x}}x}}x{{Xc]]x{{x||8B<<HQKK x{{Xa[[Xc]]hsmmXc]]Xc]]hsmmXc]]Xc]]Xc]]Y+ Y+ Y+ Y+ Y+ Y+ Y+ Y+ Y+ Y+r   