
     h4                       d Z ddlmZ ddlZddlZddlZddlZddlmZ ddlm	Z	m
Z
mZmZmZmZmZmZmZ ddlmZmZ ddlmZ ddlmZ dd	lmZmZ dd
lmZmZ ddlm Z  ddl!m"Z" ddl#m$Z$m%Z% ddl&m'Z' ddl(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5 dgZ6d!dZ7d"dZ8 G d d          Z9 G d d          Z:d#dZ; G d  d          Z<dS )$z
Telnet server.
    )annotationsN)get_running_loop)	Any	AwaitableCallableListOptionalSetTextIOTuplecast)create_app_sessionget_app)run_in_terminal)Size)AnyFormattedTextto_formatted_text)	PipeInputcreate_pipe_input)Vt100_Output)print_formatted_text)	BaseStyle
DummyStyle   )logger)DOECHOIACLINEMODEMODENAWSSBSESENDSUPPRESS_GO_AHEADTTYPEWILLTelnetProtocolParserTelnetServernumberintreturnbytesc                "    t          | f          S N)r-   )r*   s    `/var/www/html/Sam_Eipo/venv/lib/python3.11/site-packages/prompt_toolkit/contrib/telnet/server.pyint2byter1   ,   s    &    
connectionsocket.socketNonec                   t          j        d           |                     t          t          z   t
          z              |                     t          t          z   t          z              |                     t          t          z   t
          z   t          z   t          d          z   t          z   t          z              |                     t          t          z   t          z              |                     t          t          z   t          z              |                     t          t          z   t          z              |                     t          t          z   t          z   t          z   t          z   t          z              d S )NzInitializing telnet connectionr   )r   infosendr   r   r   r'   r%   r"   r    r1   r#   r   r!   r&   r$   r3   s    r0   _initialize_telnetr:   0   s   
K0111 OOC"Hx'((( OOC$J!22333 OOC"Hx'$.!<sBRGHHH OOC$J%&&& OOC"HtO$$$ OOC"Hu$%%%
 OOC"Hu$t+c1B677777r2   c                  j    e Zd ZdZddZdd
ZddZddZddZe	dd            Z
e	dd            ZdS )_ConnectionStdoutzk
    Wrapper around socket which provides `write` and `flush` methods for the
    Vt100_Output output.
    r3   r4   encodingstrr,   r5   c                L    || _         || _        d| _        g | _        d| _        d S )NstrictF)	_encoding_connection_errors_buffer_closed)selfr3   r=   s      r0   __init__z_ConnectionStdout.__init__S   s*    !%$&r2   datac                    |                     dd          }| j                            |                    | j        | j                             |                                  d S )N
z
)errors)replacerD   appendencoderA   rC   flushrF   rH   s     r0   writez_ConnectionStdout.writeZ   sP    ||D&))DKKt|KLLMMM

r2   boolc                    dS NT rF   s    r0   isattyz_ConnectionStdout.isatty_   s    tr2   c                    	 | j         s2| j                            d                    | j                             n.# t
          $ r!}t          j        d|z             Y d }~nd }~ww xY wg | _        d S )Nr2   z"Couldn't send data over socket: %s)rE   rB   r8   joinrD   OSErrorr   warning)rF   es     r0   rO   z_ConnectionStdout.flushb   s    	E< > %%chht|&<&<=== 	E 	E 	EN?!CDDDDDDDD	E s   9< 
A'A""A'c                    d| _         d S rT   )rE   rV   s    r0   closez_ConnectionStdout.closek   s    r2   c                    | j         S r/   )rA   rV   s    r0   r=   z_ConnectionStdout.encodingn   s
    ~r2   c                    | j         S r/   )rC   rV   s    r0   rK   z_ConnectionStdout.errorsr   s
    |r2   N)r3   r4   r=   r>   r,   r5   )rH   r>   r,   r5   )r,   rR   r,   r5   )r,   r>   )__name__
__module____qualname____doc__rG   rQ   rW   rO   r^   propertyr=   rK   rU   r2   r0   r<   r<   M   s         
      
             X    X  r2   r<   c                  V    e Zd ZdZ	 d$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 )*TelnetConnectionz6
    Class that represents one Telnet connection.
    Tconnr4   addrtuple[str, int]interact-Callable[[TelnetConnection], Awaitable[None]]serverr)   r=   r>   styleBaseStyle | Nonevt100_inputr   
enable_cprrR   r,   r5   c	                    | _         | _        | _        | _        | _        | _        d _        t          j                     _	        | _
         _        d  _        t          dd           _        t          |           d fdt!          t"          t%          ||                     _        d fd}	d fd}
d fd}t)          |	|
|           _        d  _        d S )NF(   O   rowscolumnsr,   r   c                      j         S r/   )sizerV   s   r0   get_sizez+TelnetConnection.__init__.<locals>.get_size   s    9r2   )r=   rH   r-   r5   c                <    j                             |            dS )z-TelnetProtocolParser 'data_received' callbackN)rq   
send_bytesrH   rF   s    r0   data_receivedz0TelnetConnection.__init__.<locals>.data_received   s     ''-----r2   rw   r+   rx   c                    t          | |          _        j        $j        rj                            d            dS dS dS )z-TelnetProtocolParser 'size_received' callbackrv   Nc                 B    t                                                      S r/   )r   
_on_resizerU   r2   r0   <lambda>zBTelnetConnection.__init__.<locals>.size_received.<locals>.<lambda>   s    )=)=)?)? r2   )r   rz   vt100_outputcontextrun)rw   rx   rF   s     r0   size_receivedz0TelnetConnection.__init__.<locals>.size_received   sU    $888DI ,,  !?!?@@@@@ -,,,r2   ttyper>   c                t    t          j        |           _        j                                         dS )z.TelnetProtocolParser 'ttype_received' callback)termrr   N)r   stdoutr   _readyset)r   rr   r{   rF   s    r0   ttype_receivedz1TelnetConnection.__init__.<locals>.ttype_received   s?     ,XEj! ! !D KOOr2   )r,   r   rH   r-   r,   r5   )rw   r+   rx   r+   r,   r5   )r   r>   r,   r5   )ri   rj   rl   rn   r=   ro   rE   asyncioEventr   rq   rr   r   r   rz   r:   r   r   r<   r   r(   parserr   )rF   ri   rj   rl   rn   r=   ro   rq   rr   r   r   r   r{   s   `       `   @r0   rG   zTelnetConnection.__init__|   sK    		  
moo&$15 b"---	 	4   	 	 	 	 	 	 6#4TH#M#M#MNN	. 	. 	. 	. 	. 	.	A 	A 	A 	A 	A 	A	 	 	 	 	 	 	 	 +=-XX37r2   c                   K   d fd}t                      }|                     j        |           	  j                                         d{V  t           j         j                  5  t          j	                     _
                                         d{V  ddd           n# 1 swxY w Y                                     dS #                                   w xY w)z"
        Run application.
        r,   r5   c                     j                             d          } | r                    |            d S t          j        dj        z                                              d S )Ni   z"Connection closed by client. %r %r)ri   recvfeedr   r7   rj   r^   r~   s    r0   handle_incoming_dataz>TelnetConnection.run_application.<locals>.handle_incoming_data   s\    9>>$''D 		$ @49LMMM

r2   N)inputoutputra   )r   
add_readerri   r   waitr   rq   r   contextvarscopy_contextr   rl   r^   )rF   r   loops   `  r0   run_applicationz TelnetConnection.run_application   s;     
	 	 	 	 	 	  !!	#7888	+""$$$$$$$$$#$*:4CTUUU * **799mmD)))))))))* * * * * * * * * * * * * * * JJLLLLLDJJLLLLs/   :C .4B."C .B22C 5B26C C%rH   r-   c                :    | j                             |           dS )zF
        Handler for incoming data. (Called by TelnetServer.)
        N)r   r   rP   s     r0   r   zTelnetConnection.feed   s      	r2   c                   | j         szd| _         | j                                         t                                          | j                   | j                                         | j                                         dS dS )z#
        Closed by client.
        TN)rE   rq   r^   r   remove_readerri   r   rV   s    r0   r^   zTelnetConnection.close   s|     | 	 DL""$$$,,TY777IOOK	  	 r2   formatted_textr   c                    | j         dS t          |          }t          | j         || j        pt	                                 dS )z*
        Send text to the client.
        N)r   r   r   ro   r   rF   r   s     r0   r8   zTelnetConnection.send   sP     $F*>::~tz/IZ\\	
 	
 	
 	
 	
r2   c                V     t                                          fd          S )z\
        Send text to the client.
        This is asynchronous, returns a `Future`.
        c                 .                                    S r/   )r8   )r   rF   s   r0   r   z4TelnetConnection.send_above_prompt.<locals>.<lambda>   s    TYY~-F-F r2   )r   _run_in_terminalr   s   ``r0   send_above_promptz"TelnetConnection.send_above_prompt   s4    
 +>::$$%F%F%F%F%FGGGr2   funcCallable[[], None]c                r    | j         r"| j                             t          |           d S t          d          )Nz2Called _run_in_terminal outside `run_application`.)r   r   r   RuntimeError)rF   r   s     r0   r   z!TelnetConnection._run_in_terminal   s<     < 	UL_d33333STTTr2   c                    | j         dS | j                                          | j                             dd           | j                                          dS )zB
        Erase the screen and move the cursor to the top.
        Nr   )r   erase_screencursor_gotorO   rV   s    r0   r   zTelnetConnection.erase_screen   s[     $F&&(((%%a+++!!!!!r2   N)T)ri   r4   rj   rk   rl   rm   rn   r)   r=   r>   ro   rp   rq   r   rr   rR   r,   r5   ra   r   )r   r   r,   r5   )r   r   r,   r5   )rb   rc   rd   re   rG   r   r   r^   r8   r   r   r   rU   r2   r0   rh   rh   w   s           58 58 58 58 58n   6   
  
  
  
 	
 	
 	
 	
H H H HU U U U" " " " " "r2   rh   c                
   K   d S r/   rU   r9   s    r0   _dummy_interactr     s      Dr2   c                  b    e Zd ZdZddedddfddZedd            Zd d!dZd"dZ	d"dZ
d#dZdS )$r)   a  
    Telnet server implementation.

    Example::

        async def interact(connection):
            connection.send("Welcome")
            session = PromptSession()
            result = await session.prompt_async(message="Say something: ")
            connection.send(f"You said: {result}
")

        async def main():
            server = TelnetServer(interact=interact, port=2323)
            await server.run()
    z	127.0.0.1   zutf-8NThostr>   portr+   rl   rm   r=   ro   rp   rr   rR   r,   r5   c                    || _         || _        || _        || _        || _        || _        d | _        g | _        t                      | _	        d S r/   )
r   r   rl   r=   ro   rr   	_run_task_application_tasksr   connections)rF   r   r   rl   r=   ro   rr   s          r0   rG   zTelnetServer.__init__  sO     		  
$48<>25%%r2   r4   c                   t          j         t           j        t           j                  }|                    t           j        t           j        d           |                    ||f           |                    d           |S )Nr      )socketAF_INETSOCK_STREAM
setsockopt
SOL_SOCKETSO_REUSEADDRbindlisten)clsr   r   ss       r0   _create_socketzTelnetServer._create_socket0  s`     M&.&*<==	V&(;Q???	d|	r2   ready_cbCallable[[], None] | Nonec                ~   K                          j         j                  t          j        d j         j                   t                                           fd           |r
 |             	 t          j                     d{V  t                      	                                j
                      j        D ]}|                                 t           j                  dk    r.t          j         j        dt          j                   d{V  dS dS # t                      	                                j
                      j        D ]}|                                 t           j                  dk    r-t          j         j        dt          j                   d{V  w w xY w)z
        Run the telnet server, until this gets cancelled.

        :param ready_cb: Callback that will be called at the point that we're
            actually listening.
        z.Listening for telnet connections on %s port %rc                 .                                    S r/   )_accept)rF   r   s   r0   r   z"TelnetServer.run.<locals>.<lambda>F  s    dll66J6J r2   Nr   )timeoutreturn_when)r   r   r   r   r7   r   r   r   Futurer   r^   r   cancellenr   ALL_COMPLETED)rF   r   tr   s   `  @r0   r   zTelnetServer.run:  s      $$TY	::<di	
 	
 	
 	%%f.J.J.J.J.JKKK 	HJJJ	.""""""""",,V444FLNNN ,  



 4*++a//l+  ' 5            0/ ,,V444FLNNN ,  



 4*++a//l+  ' 5           0s   8D' 'BF<c                    | j         dS t                                          |                                           | _         dS )z}
        Deprecated: Use `.run()` instead.

        Start the telnet server (stop by calling and awaiting `stop()`).
        N)r   r   create_taskr   rV   s    r0   startzTelnetServer.starta  s8     >%F)++77

CCr2   c                   K   | j         ?| j                                          	 | j          d{V  dS # t          j        $ r Y dS w xY wdS )z
        Deprecated: Use `.run()` instead.

        Stop a telnet server that was started using `.start()` and wait for the
        cancellation to complete.
        N)r   r   r   CancelledErrorrV   s    r0   stopzTelnetServer.stopm  sv       >%N!!###n$$$$$$$$$)   	 &%s   3 AAlisten_socketc                     |                                 \  t          j        dgR   d fd}t                                           |                       j                                       dS )z1
        Accept new incoming connection.
        zNew connection %r %rr,   r5   c                   K   	 t                      5 } t          j        j        j        | j                  }j                            |           t          j	        dgR   	 |
                                 d {V  j                            |           t          j	        dgR   n1# j                            |           t          j	        dgR   w xY w	 d d d            n# 1 swxY w Y   n# t          $ r t          j	        d           Y nrt          $ r t          j	        d           Y nSt          $ rG}t          dt!          |          j        z  |           dd l}|                                 Y d }~nd }~ww xY wj                                       d S # j                                       w xY w)N)r=   ro   rq   rr   zStarting interaction %r %rzStopping interaction %r %rz)Unhandled EOFError in telnet application.z2Unhandled KeyboardInterrupt in telnet application.zGot %sr   )r   rh   rl   r=   ro   rr   r   addr   r7   r   removeEOFErrorKeyboardInterruptBaseExceptionprinttyperb   	traceback	print_excr   )rq   r3   r\   r   rj   ri   rF   tasks       r0   r   z!TelnetServer._accept.<locals>.run  s|     #5&(( IK!1!%"j$/#'?	" 	" 	"J $((444K <DtDDDDI(88:::::::::(//
;;;$@H4HHHHH (//
;;;$@H4HHHHHH%I I I I I I I I I I I I I I I&  I I I
 GHHHHH$ R R RPQQQQQ  & & &ha!111555    ##%%%%%%%%	& '..t44444'..t4444s   C= AC1,B3-C13.C!!C1%C= 1C55C= 8C59C= <F+ =FF+ F:F+ <	F=FF+ FF+ +GNra   )acceptr   r7   r   r   r   rM   )rF   r   r   rj   ri   r   s   `  @@@r0   r   zTelnetServer._accept{  s     #))++
d*2T2222$	5 $	5 $	5 $	5 $	5 $	5 $	5 $	5 $	5L  !!--ccee44&&t,,,,,r2   )r   r>   r   r+   rl   rm   r=   r>   ro   rp   rr   rR   r,   r5   )r   r>   r   r+   r,   r4   r/   )r   r   r,   r5   ra   )r   r4   r,   r5   )rb   rc   rd   re   r   rG   classmethodr   r   r   r   r   rU   r2   r0   r)   r)   
  s         $  BQ"&8 8 8 8 8*    [% % % % %N
D 
D 
D 
D   /- /- /- /- /- /-r2   )r*   r+   r,   r-   )r3   r4   r,   r5   )r3   rh   r,   r5   )=re   
__future__r   r   r   r   sysr   typingr   r   r   r   r	   r
   r   r   r   "prompt_toolkit.application.currentr   r   *prompt_toolkit.application.run_in_terminalr   prompt_toolkit.data_structuresr   prompt_toolkit.formatted_textr   r   prompt_toolkit.inputr   r   prompt_toolkit.output.vt100r   prompt_toolkit.rendererr   prompt_toolkit.stylesr   r   logr   protocolr   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   __all__r1   r:   r<   rh   r   r)   rU   r2   r0   <module>r      s    # " " " " "       



 $ $ $ $ $ $ U U U U U U U U U U U U U U U U U U U U U U J J J J J J J J F F F F F F / / / / / / M M M M M M M M = = = = = = = = 4 4 4 4 4 4 P P P P P P 7 7 7 7 7 7 7 7                                   " 
   8 8 8 8:' ' ' ' ' ' ' 'TL" L" L" L" L" L" L" L"^	 	 	 	`- `- `- `- `- `- `- `- `- `-r2   