
    z%ih                     d   d Z ddlZddlZddlZddlZ eed      re dz  Z ddlmZ ddlmZ ddlm	Z	 dd	lm
Z
 dd
lmZ ddlmZ ddlmZ dZdeddZdeddZ eed      rdeddZdeddZ G d dej*                        Z G d deej*                        Z G d d      Z G d d      Zy))StreamReaderStreamWriterStreamReaderProtocolopen_connectionstart_server    NAF_UNIX)open_unix_connectionstart_unix_server   )
coroutines)events)
exceptions)format_helpers)	protocols)logger)sleepi   )limitc                   	K   	 t        j                         }t        ||      }t        ||      	 |j                  	fd| |fi | d {   \  }}t        |	||      }||fS 7 w)Nr   loopr   c                       S N protocols   C/home/uftp/.pyenv/versions/3.12.0/lib/python3.12/asyncio/streams.py<lambda>z!open_connection.<locals>.<lambda>0   s         )r   get_running_loopr   r   create_connectionr   )
hostportr   kwdsr   reader	transport_writerr   s
            @r   r   r      s}     " ""$DD1F#F6H///$.(,. .LIq)Xvt<F6>.s   AA*A(A*c                    K   	 t        j                          fd} j                  |||fi | d {   S 7 w)Nc                  >    t              } t        |       }|S Nr   r   r   r   r%   r   client_connected_cbr   r   s     r   factoryzstart_server.<locals>.factoryN   s&    E5'0C-13r   )r   r    create_server)r.   r"   r#   r   r$   r/   r   s   `  `  @r   r   r   5   sE     * ""$D $##GT4@4@@@@s   5A?Ac                   K   	 t        j                         }t        ||      }t        ||       |j                  fd| fi | d {   \  }}t        |||      }||fS 7 w)Nr   r   c                       S r   r   r   s   r   r   z&open_unix_connection.<locals>.<lambda>b   s    H r   )r   r    r   r   create_unix_connectionr   )	pathr   r$   r   r%   r&   r'   r(   r   s	           @r   r	   r	   Z   sw     N&&(E5'T:8T88d,&*, ,	1i64@v~,s   A
A)A'A)c                    K   	 t        j                          fd} j                  ||fi | d {   S 7 w)Nc                  >    t              } t        |       }|S r+   r,   r-   s     r   r/   z"start_unix_server.<locals>.factoryk   s&    !D9F+F4G157HOr   )r   r    create_unix_server)r.   r4   r   r$   r/   r   s   ` `  @r   r
   r
   f   s?     K&&(	 -T,,WdCdCCCCs   4A >A c                   4    e Zd Z	 ddZd Zd Zd Zd Zd Zy)	FlowControlMixinNc                     |t        j                         | _        n|| _        d| _        t	        j
                         | _        d| _        y NF)r   get_event_loop_loop_pausedcollectionsdeque_drain_waiters_connection_lost)selfr   s     r   __init__zFlowControlMixin.__init__~   s>    <..0DJDJ)//1 %r   c                 t    d| _         | j                  j                         rt        j                  d|        y y )NTz%r pauses writing)r>   r=   	get_debugr   debugrC   s    r   pause_writingzFlowControlMixin.pause_writing   s-    ::!LL,d3 "r   c                     d| _         | j                  j                         rt        j                  d|        | j
                  D ]$  }|j                         r|j                  d        & y )NFz%r resumes writing)r>   r=   rF   r   rG   rA   done
set_resultrC   waiters     r   resume_writingzFlowControlMixin.resume_writing   sT    ::!LL-t4)) 	(F;;=!!$'	(r   c                     d| _         | j                  sy | j                  D ]8  }|j                         r||j	                  d        (|j                  |       : y NT)rB   r>   rA   rK   rL   set_exceptionrC   excrN   s      r   connection_lostz FlowControlMixin.connection_lost   sS     $||)) 	.F;;=;%%d+((-	.r   c                 N  K   | j                   rt        d      | j                  sy | j                  j	                         }| j
                  j                  |       	 | d {    | j
                  j                  |       y 7  # | j
                  j                  |       w xY ww)NzConnection lost)rB   ConnectionResetErrorr>   r=   create_futurerA   appendremoverM   s     r   _drain_helperzFlowControlMixin._drain_helper   s       &'899||))+""6*	/LL&&v. &&v.s0   AB%B "B#B 'B%B B""B%c                     t         r   )NotImplementedErrorrC   streams     r   _get_close_waiterz"FlowControlMixin._get_close_waiter   s    !!r   r   )	__name__
__module____qualname__rD   rI   rO   rU   r[   r`   r   r   r   r9   r9   t   s%    &4(.
/"r   r9   c                   d     e Zd Z	 dZd fd	Zed        Zd Zd Z fdZ	d Z
d Zd	 Zd
 Z xZS )r   Nc                 4   t         |   |       |,t        j                  |      | _        |j
                  | _        nd | _        ||| _        d| _        d | _        d | _	        d | _
        || _        d| _        | j                  j                         | _        y )Nr   F)superrD   weakrefref_stream_reader_wr_source_traceback_strong_reader_reject_connection_stream_writer_task
_transport_client_connected_cb	_over_sslr=   rX   _closed)rC   stream_readerr.   r   	__class__s       r   rD   zStreamReaderProtocol.__init__   s    d#$%,[[%?D"%2%D%DD"%)D"* #0D"'"
$7!zz//1r   c                 <    | j                   y | j                         S r   )ri   rH   s    r   _stream_readerz#StreamReaderProtocol._stream_reader   s     !!)%%''r   c                     | j                   }|j                  }|| _        || _        |j	                  d      d u| _        y )N
sslcontext)r=   r&   rm   ro   get_extra_inforq   )rC   r(   r   r&   s       r   _replace_writerz$StreamReaderProtocol._replace_writer   s<    zz$$	$#"11,?tKr   c                 2   | j                   rKddi}| j                  r| j                  |d<   | j                  j                  |       |j	                          y || _        | j                  }||j                  |       |j                  d      d u| _	        | j                  vt        || || j                        | _        | j                  || j                        }t        j                  |      r | j                  j                  |      | _        d | _        y y )NmessagezpAn open stream was garbage collected prior to establishing network connection; call "stream.close()" explicitly.source_tracebackrx   )rl   rj   r=   call_exception_handlerabortro   rv   set_transportry   rq   rp   r   rm   r   iscoroutinecreate_taskrn   rk   )rC   r&   contextr%   ress        r   connection_madez$StreamReaderProtocol.connection_made   s	   "" @G
 %%.2.D.D*+JJ--g6OO#$$  +"11,?tK$$0".y$/5/3zz#;D ++F,0,?,?AC%%c*!ZZ33C8
"&D 1r   c                 f   | j                   }|$||j                          n|j                  |       | j                  j	                         s9|| j                  j                  d        n| j                  j                  |       t        |   |       d | _        d | _	        d | _
        d | _        y r   )rv   feed_eofrR   rr   rK   rL   rf   rU   ri   rm   rn   ro   )rC   rT   r%   rt   s      r   rU   z$StreamReaderProtocol.connection_lost   s    $${!$$S)||  "{''-**3/$!%"
r   c                 D    | j                   }||j                  |       y y r   )rv   	feed_data)rC   datar%   s      r   data_receivedz"StreamReaderProtocol.data_received  s&    $$T" r   c                 Z    | j                   }||j                          | j                  ryy)NFT)rv   r   rq   )rC   r%   s     r   eof_receivedz!StreamReaderProtocol.eof_received  s,    $$OO>> r   c                     | j                   S r   )rr   r^   s     r   r`   z&StreamReaderProtocol._get_close_waiter  s    ||r   c                     	 | j                   }|j                         r"|j                         s|j                          y y y # t        $ r Y y w xY wr   )rr   rK   	cancelled	exceptionAttributeError)rC   closeds     r   __del__zStreamReaderProtocol.__del__   sM    	#\\F {{}V%5%5%7  " &8}  		s   A 	AANN)ra   rb   rc   rj   rD   propertyrv   rz   r   rU   r   r   r`   r   __classcell__)rt   s   @r   r   r      sM     2( ( (
L'6$#
		#r   r   c                   x    e Zd Z	 d Zd Zed        Zd Zd Zd Z	d Z
d Zd	 Zd
 ZddZd ZdddddZd Zy)r   c                     || _         || _        || _        || _        | j                  j	                         | _        | j
                  j                  d        y r   )ro   	_protocol_readerr=   rX   _complete_futrL   )rC   r&   r   r%   r   s        r   rD   zStreamWriter.__init__6  sI    #! 
!ZZ557%%d+r   c                     | j                   j                  d| j                  g}| j                  |j	                  d| j                         dj                  dj                  |            S )N
transport=zreader=<{}> )rt   ra   ro   r   rY   formatjoinrC   infos     r   __repr__zStreamWriter.__repr__@  s[    '':doo5H)IJ<<#KK'$,,!123}}SXXd^,,r   c                     | j                   S r   ro   rH   s    r   r&   zStreamWriter.transportF  s    r   c                 :    | j                   j                  |       y r   )ro   writerC   r   s     r   r   zStreamWriter.writeJ  s    d#r   c                 :    | j                   j                  |       y r   )ro   
writelinesr   s     r   r   zStreamWriter.writelinesM  s    ""4(r   c                 6    | j                   j                         S r   )ro   	write_eofrH   s    r   r   zStreamWriter.write_eofP  s    ((**r   c                 6    | j                   j                         S r   )ro   can_write_eofrH   s    r   r   zStreamWriter.can_write_eofS  s    ,,..r   c                 6    | j                   j                         S r   )ro   closerH   s    r   r   zStreamWriter.closeV  s    $$&&r   c                 6    | j                   j                         S r   )ro   
is_closingrH   s    r   r   zStreamWriter.is_closingY  s    ))++r   c                 V   K   | j                   j                  |        d {    y 7 wr   )r   r`   rH   s    r   wait_closedzStreamWriter.wait_closed\  s     nn..t444s   )')Nc                 :    | j                   j                  ||      S r   )ro   ry   )rC   namedefaults      r   ry   zStreamWriter.get_extra_info_  s    --dG<<r   c                   K   	 | j                   | j                   j                         }||| j                  j                         rt	        d       d {    | j
                  j                          d {    y 7 '7 w)Nr   )r   r   ro   r   r   r   r[   )rC   rT   s     r   drainzStreamWriter.drainb  so     	 <<#,,((*C	??%%' (NNnn**,,, ,s$   ABA>!B8B 9B B)server_hostnamessl_handshake_timeoutssl_shutdown_timeoutc          	      &  K   	 | j                   j                  d u}| j                   }| j                          d {    | j                  j	                  | j
                  ||||||       d {   }|| _        |j                  |        y 7 Q7 w)N)server_sider   r   r   )r   rp   r   r=   	start_tlsro   rz   )rC   rx   r   r   r   r   r   new_transports           r   r   zStreamWriter.start_tls{  s      	Bnn99E>>jjl"jj22OOXz#_"7!5	 3 7 7
 (  & 	7s!   9BB3B/B0BBc                 Z    | j                   j                         s| j                          y y r   )ro   r   r   rH   s    r   r   zStreamWriter.__del__  s     ))+JJL ,r   r   )ra   rb   rc   rD   r   r   r&   r   r   r   r   r   r   r   ry   r   r   r   r   r   r   r   r   ,  sg    ,-  $)+/',5=-4 )-.2-1' r   r   c                       e Zd ZdZedfdZd Zd Zd Zd Z	d Z
d Zd	 Zd
 Zd Zd Zd ZddZddZd Zd Zd Zy)r   Nc                 l   |dk  rt        d      || _        |t        j                         | _        n|| _        t               | _        d| _        d | _        d | _	        d | _
        d| _        | j                  j                         r.t        j                  t        j                   d            | _        y y )Nr   zLimit cannot be <= 0Fr   )
ValueError_limitr   r<   r=   	bytearray_buffer_eof_waiter
_exceptionro   r>   rF   r   extract_stacksys	_getframerj   )rC   r   r   s      r   rD   zStreamReader.__init__  s     A:344<..0DJDJ {	::!%3%A%Aa &"D" "r   c                    dg}| j                   r'|j                  t        | j                          d       | j                  r|j                  d       | j                  t
        k7  r|j                  d| j                          | j                  r|j                  d| j                         | j                  r|j                  d| j                         | j                  r|j                  d| j                         | j                  r|j                  d       d	j                  d
j                  |            S )Nr   z byteseofzlimit=zwaiter=z
exception=r   pausedr   r   )r   rY   lenr   r   _DEFAULT_LIMITr   r   ro   r>   r   r   r   s     r   r   zStreamReader.__repr__  s    <<KK3t||,-V4599KK;;.(KK&./<<KK'$,,!123??KK*T__$789??KK*T__$789<<KK!}}SXXd^,,r   c                     | j                   S r   )r   rH   s    r   r   zStreamReader.exception  s    r   c                     || _         | j                  }|*d | _        |j                         s|j                  |       y y y r   )r   r   r   rR   rS   s      r   rR   zStreamReader.set_exception  sC    DL##%$$S) & r   c                 v    	 | j                   }|*d | _         |j                         s|j                  d        y y y r   )r   r   rL   rM   s     r   _wakeup_waiterzStreamReader._wakeup_waiter  s?    ?DL##%!!$' & r   c                     || _         y r   r   )rC   r&   s     r   r   zStreamReader.set_transport  s	    #r   c                     | j                   rEt        | j                        | j                  k  r"d| _         | j                  j                          y y y r;   )r>   r   r   r   ro   resume_readingrH   s    r   _maybe_resume_transportz$StreamReader._maybe_resume_transport  s;    <<C-< DLOO**, =<r   c                 2    d| _         | j                          y rQ   )r   r   rH   s    r   r   zStreamReader.feed_eof  s    	r   c                 :    	 | j                   xr | j                   S r   )r   r   rH   s    r   at_eofzStreamReader.at_eof  s    Kyy---r   c                 P   |sy | j                   j                  |       | j                          | j                  V| j                  sIt        | j                         d| j                  z  kD  r#	 | j                  j                          d| _        y y y y # t        $ r
 d | _        Y y w xY w)N   T)	r   extendr   ro   r>   r   r   pause_readingr]   r   s     r   r   zStreamReader.feed_data  s     D!OO'LLDLL!AO3$--/  $ 4 ! (
 ' ' #'	's   -B B%$B%c                 .  K   	 | j                   t        | d      | j                  r!d| _        | j                  j	                          | j
                  j                         | _         	 | j                    d {    d | _         y 7 # d | _         w xY ww)NzF() called while another coroutine is already waiting for incoming dataF)r   RuntimeErrorr>   ro   r   r=   rX   )rC   	func_names     r   _wait_for_datazStreamReader._wait_for_data  s     	 <<#+ 4 56 6 << DLOO**,zz//1	 ,,DL DLs0   A(B+B	 :B;B	 ?BB	 		BBc                   K   	 d}t        |      }	 | j                  |       d {   }|S 7 # t        j                  $ r}|j                  cY d }~S d }~wt        j
                  $ r}| j                  j                  ||j                        r| j                  d |j                  |z   = n| j                  j                          | j                          t        |j                  d         d }~ww xY ww)N   
r   )r   	readuntilr   IncompleteReadErrorpartialLimitOverrunErrorr   
startswithconsumedclearr   r   args)rC   sepseplenlinees        r   readlinezStreamReader.readline  s     	 S
	(,,D  --- 	99++ 	(||&&sAJJ7LL!5!**v"5!56""$((*QVVAY''	(sJ   C6/ -/ C6/ C3AC3C6C3)BC..C33C6c                   K   	 t        |      }|dk(  rt        d      | j                  | j                  d}	 t        | j                        }||z
  |k\  rO| j                  j	                  ||      }|dk7  rn|dz   |z
  }|| j
                  kD  rt        j                  d|      | j                  rEt        | j                        }| j                  j                          t        j                  |d       | j                  d       d {    || j
                  kD  rt        j                  d|      | j                  d ||z    }| j                  d ||z   = | j                          t        |      S 7 iw)Nr   z,Separator should be at least one-byte stringr   z2Separator is not found, and chunk exceed the limitr   z2Separator is found, but chunk is longer than limit)r   r   r   r   findr   r   r   r   bytesr   r   r   r   )rC   	separatorr   offsetbuflenisepchunks          r   r   zStreamReader.readuntil2  s    	& YQ;KLL??&//!*  &F &(||((F;2:   !f,DKK'$66L    yydll+""$ 44UDAA %%k222= @ $++..DdL L ^dVm,LL$-($$&U| 3s   D	E7E5A*E7c                   K   	 | j                   | j                   |dk(  ry|dk  rLg }	 | j                  | j                         d {   }|sn|j                  |       8dj	                  |      S | j
                  s%| j                  s| j                  d       d {    t        t        | j
                        d |       }| j
                  d |= | j                          |S 7 7 Hw)Nr   r   read)r   r  r   rY   r   r   r   r   r   
memoryviewr   )rC   nblocksblockr   s        r   r  zStreamReader.read  s     	* ??&//!6q5
 F"ii44e$	 
 88F##||DII%%f--- Z-bq12LL!$$& 5 .s&   AC*C&	AC*C( AC*(C*c                   K   	 |dk  rt        d      | j                  | j                  |dk(  ryt        | j                        |k  r| j                  rEt        | j                        }| j                  j                          t        j                  ||      | j                  d       d {    t        | j                        |k  rt        | j                        |k(  r0t        | j                        }| j                  j                          n0t        t        | j                        d |       }| j                  d |= | j                          |S 7 w)Nr   z*readexactly size can not be less than zeror   readexactly)r   r   r   r   r   r   r   r   r   r   r  r   )rC   r  
incompleter   s       r   r  zStreamReader.readexactly  s    	 q5IJJ??&//!6$,,!#yy"4<<0
""$ 44ZCC%%m444 $,,!# t||!&DLL DLL1"156DRaR $$& 5s   B-E/E0EBEc                     | S r   r   rH   s    r   	__aiter__zStreamReader.__aiter__  s    r   c                 X   K   | j                          d {   }|dk(  rt        |S 7 w)Nr   )r   StopAsyncIteration)rC   vals     r   	__anext__zStreamReader.__anext__  s+     MMO##:$$
 $s   *(*)r   )r   )ra   rb   rc   rj   r   rD   r   r   rR   r   r   r   r   r   r   r   r   r   r  r  r
  r  r   r   r   r   r     sf    +$ ",-$*($-
.$, 8>Yv1f'Rr   r   r   r   )__all__r?   socketr   rg   hasattr r   r   r   r   r   logr   tasksr   r   r   r   r	   r
   Protocolr9   r   r   r   r   r   r   <module>r     s   '   
 
69<<G         .8A+AD 69
)7
D&4D="y)) ="@u#+Y-?-? u#pa aH` `r   