§
    ŒŸjÐ  ã                  óž  — 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    ús/var/www/finuniver-perm.ru/html/student/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   € åŒ�G˜TÑ"Ô"Ð"Ð"Ð"r   c                ó0   — t          j        d|¦  «         dS )zReceived telnet DONT command.zDONT %rNr8   r5   s     r   Údont_receivedz"TelnetProtocolParser.dont_received[   ó   € åŒ�I˜tÑ$Ô$Ð$Ð$Ð$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]   € õ ˆt‰9Œ9˜Š>ˆ>õ #œM¨%°Ñ6Ô6‰MˆG�TØ×'Ò'¨¨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   € ð ˜A˜a˜C”y $ q r r¤(�ˆØ•RŠ<ˆ<Ø—K’K Ñ(Ô(ˆ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€   € ð    ! œ9 d¨1¨2¨2¤h�ˆà•dŠ?ˆ?Ø�IŠI�gÑÔÐÐÐØ�ÒÐØ�JŠJ�wÑÔÐÐÐåŒKÐ2µC¸±I´IÑ>Ô>Ð>Ð>Ð>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à•H˜Q‘K”KÒÐÙð •c’‘Ø�U�U�à�’9�9Ø×&Ò& rÑ*Ô*Ð*Ñ*ð �C¥¥S­"­bµ#µr½2½rÐBÐBÐBØ×)Ò)¨"¨cÑ2Ô2Ð2Ð2ð �B¥¥d­DÐ1Ð1Ð1Ø˜˜�BØ×)Ò)¨"¨bÑ1Ô1Ð1Ð1ð �2’X�Xà�Dð
,Ø"˜U˜U˜à¥š9˜9Ø!&  ˜BØ!¥Ršx˜xØ %à $§¢¨B¡¤  à ŸKšK¨™OœO˜Oð
,ð —N’N 3§8¢8¨D¡>¤>Ñ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×Ò�h q™kœkÑ*Ô*Ð*Ð*ð	+ð 	+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  ððð ð #Ð "Ð "Ð "Ð "Ð "à €€€Ø &Ð &Ð &Ð &Ð &Ð &Ð &Ð &à Ð Ð Ð Ð Ð ð ð€ð
ð ð ð ð
 €hˆq�k„k€Ø€hˆq�k„k€à€hˆs�m„m€Ø€Xˆc�]„]€Ø€x��}„}€Øˆ8�B‰<Œ<€Ø€Xˆc�]„]€Ø€x��}„}€Ø€x��}„}€Ø€x��{„{€Ø€Xˆc�]„]€Ø€x��{„{€Ø€x��|„|€Øˆ8�B‰<Œ<€Ø�H˜Q‘K”KÐ àˆ�‰Œ€Ø€x��{„{€Ø€Xˆa�[„[€à€Xˆc�]„]€Ø€hˆs�m„m€Ø€Xˆc�]„]€Ø€Xˆc�]„]€Ø€hˆs�m„m€Ø€Xˆc�]„]€Ø€Xˆc�]„]€Ø€Xˆc�]„]€ðY+ð Y+ð Y+ð Y+ð Y+ñ Y+ô Y+ð Y+ð Y+ð Y+r   