
    ۇehL&                         d dl Z d dlZd dlZd dlZd dlmZ  G d de          Z G d d          Z G d d          Z	dS )	    N)clusterc                       e Zd ZdS )
StopServerN)__name__
__module____qualname__     J/var/www/api/venv/lib/python3.11/site-packages/asyncpg/_testbase/fuzzer.pyr   r      s        Dr
   r   c                       e Zd Zdddddedej        e         dededej        e         d	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 Zd Zd ZdS )TCPFuzzingProxyz	127.0.0.1N)listening_addrlistening_portsettingsr   r   backend_hostbackend_portr   returnc                    || _         || _        || _        || _        |pi | _        d | _        d | _        d | _        d | _        i | _	        d | _
        d | _        d S N)r   r   r   r   r   loopconnectivityconnectivity_loss
stop_eventconnectionssocklisten_task)selfr   r   r   r   r   s         r   __init__zTCPFuzzingProxy.__init__   sj     -,(( B	 !%	r
   c                   K   t          j        |          }t          j        | j                                                  }	 t          j        ||gt           j                   d {V  | j                                        rt                      |                                |                                s|	                                 |                                s|	                                 S S # |                                s|	                                 |                                s|	                                 w w xY wN)return_when)
asyncioensure_futurer   waitFIRST_COMPLETEDis_setr   resultdonecancel)r   work	work_taskstop_event_tasks       r   _waitzTCPFuzzingProxy._wait&   sY     )$//	!/0D0D0F0FGG	),O,#35 5 5 5 5 5 5 5 5 5 %%'' * ll" ''))>>## #  """"'')) )&&(((() >>## #  """"'')) )&&(((()s   A"C7 7AE
c                     t          j                    }t          j        | j        |f          | _        | j                                         |                    d          st          d          d S )N)targetargs   )timeoutzfuzzer proxy failed to start)	threadingEventThread_start_threadthreadstartr$   RuntimeError)r   starteds     r   r8   zTCPFuzzingProxy.start9   su    /##&%WJ8 8 8||A|&& 	?=>>>	? 	?r
   c                 v    | j                             | j                   | j                                         d S r   )r   call_soon_threadsafe_stopr7   joinr   s    r   stopzTCPFuzzingProxy.stopA   s4    	&&tz222r
   c                 8    | j                                          d S r   )r   setr?   s    r   r=   zTCPFuzzingProxy._stopE   s    r
   c                    t          j                    | _        t          j        | j                   t          j                    | _        | j                                         t          j                    | _        t          j                    | _        | j	        t          j                    | _	        t          j                    | _        | j                            | j        | j	        f           | j                            d           | j                            d           	 | j                            |                     |                     | j                                         d S # | j                                         w xY w)N2   F)r"   new_event_loopr   set_event_loopr4   r   rB   r   r   r   r   find_available_portsocketr   bindr   listensetblockingrun_until_complete_mainclose)r   started_events     r   r6   zTCPFuzzingProxy._start_threadH   s,   *,,	ty)))#MOO!(!-//&")"="?"?DMOO		+T-@ABBB		e$$$	I((M)B)BCCCIOODIOOs   %-E- -Fc                 >  K   t          j        |                                           | _        |                                 	 | j         d {V  t          | j                  D ]}|                                 t          j        d           d {V  t          | j
        d          r1| j
                            | j                                                   | j                                         d S # t          | j                  D ]}|                                 t          j        d           d {V  t          | j
        d          r1| j
                            | j                                                   | j                                         w xY w)Ng{Gz?remove_reader)r"   r#   rJ   r   rB   listr   rN   sleephasattrr   rQ   r   fileno)r   rO   cs      r   rM   zTCPFuzzingProxy._main^   s     "0??	""""""""$*++  				-%%%%%%%%%ty/22 <	''	(8(8(:(:;;;IOO $*++  				-%%%%%%%%%ty/22 <	''	(8(8(:(:;;;IOOs   C6 6B&Fc                   K   	 	 |                      | j                            | j                             d {V \  }}t	          j                    }|                    d           |                      | j                            || j        | j        f                     d {V  n# t          $ r Y d S w xY wt          |||           }| j                            |                                          }|| j        |<   )NTF)r-   r   sock_acceptr   rH   rK   sock_connectr   r   r   
Connectioncreate_taskhandler   )r   client_sock_backend_sockconn	conn_tasks         r   rJ   zTCPFuzzingProxy.listenl   sH     	/
'+zzI))$)44(6 (6 "6 "6 "6 "6 "6 "6Q  &}((///jj!7!7 4#4d6G"H"J "J K K K K K K K K K K    k<>>D	--dkkmm<<I%.DT"	/s   B#B) )
B76B7c                 D    | j                             | j                   d S r   )r   r<   _trigger_connectivity_lossr?   s    r   trigger_connectivity_lossz)TCPFuzzingProxy.trigger_connectivity_loss~   s!    	&&t'FGGGGGr
   c                 j    | j                                          | j                                         d S r   )r   clearr   rB   r?   s    r   rc   z*TCPFuzzingProxy._trigger_connectivity_loss   s2    !!!""$$$$$r
   c                 D    | j                             | j                   d S r   )r   r<   _restore_connectivityr?   s    r   restore_connectivityz$TCPFuzzingProxy.restore_connectivity   s!    	&&t'ABBBBBr
   c                 j    | j                                          | j                                         d S r   )r   rB   r   rf   r?   s    r   rh   z%TCPFuzzingProxy._restore_connectivity   s2    $$&&&&&r
   c                 .    |                                   d S r   )ri   r?   s    r   resetzTCPFuzzingProxy.reset   s    !!#####r
   c                 l    | j                             |d           }||                                 d S d S r   )r   popr)   )r   
connectionra   s      r   _close_connectionz!TCPFuzzingProxy._close_connection   s@    $((T::	  ! r
   c                 t    t          | j                  D ]"}| j                            | j        |           #d S r   )rR   r   r   r<   rp   )r   r`   s     r   close_all_connectionsz%TCPFuzzingProxy.close_all_connections   sH    )** 	I 	IDI**4+A4HHHH	I 	Ir
   )r   r   r   strtypingOptionalintdictr   r-   r8   r@   r=   r6   rM   rJ   rd   rc   ri   rh   rl   rp   rr   r	   r
   r   r   r      sY       .96:15     #  !'!5 " 25  "?40  ;?       ") ) )&? ? ?      ,  / / /$H H H% % %C C C' ' '$ $ $  
I I I I Ir
   r   c                   8    e Zd Zd Zd Zd Zd Zd Zd Zd Z	dS )	rZ   c                     || _         || _        || _        |j        | _        |j        | _        |j        | _        d | _        d | _        d| _        d S )NF)	r]   r_   proxyr   r   r   proxy_to_backend_taskproxy_from_backend_task	is_closed)r   r]   r_   rz   s       r   r   zConnection.__init__   sS    &(
J	!.!&!8%)"'+$r
   c                     | j         rd S d| _         | j         | j                                         d | _        | j         | j                                         d | _        | j                            |            d S )NT)r}   r{   r)   r|   rz   rp   r?   s    r   rN   zConnection.close   s    > 	F%1&--///)-D&'3(//111+/D(
$$T*****r
   c                   K   t          j        |                                           | _        t          j        |                                           | _        	 t          j        | j        | j        gt           j                   d {V  | j        | j                                         | j        | j                                         | j	        
                    | j                                                   | j	                            | j                                                   | j	        
                    | j                                                   | j	                            | j                                                   | j                                         | j                                         d S # | j        | j                                         | j        | j                                         | j	        
                    | j                                                   | j	                            | j                                                   | j	        
                    | j                                                   | j	                            | j                                                   | j                                         | j                                         w xY wr    )r"   r#   proxy_to_backendr{   proxy_from_backendr|   r$   r%   r)   r   rQ   r]   rU   remove_writerr_   rN   r?   s    r   r\   zConnection.handle   s     %,%:!!##&% &%" (/'<##%%(' ('$	&,+T-IJ#35 5 5 5 5 5 5 5 5 5
 )5*11333+7,33555 I##D$4$;$;$=$=>>>I##D$4$;$;$=$=>>>I##D$5$<$<$>$>???I##D$5$<$<$>$>???""$$$##%%%%%! )5*11333+7,33555 I##D$4$;$;$=$=>>>I##D$4$;$;$=$=>>>I##D$5$<$<$>$>???I##D$5$<$<$>$>???""$$$##%%%%s   2G D8K<c                   K   t          j        | j                            ||                    }t          j        | j                                                  }	 t          j        ||gt           j                   d {V  | j                                        rp	 | j                                        sR|	                                s|
                                 |	                                s|
                                 d S d S d S |                                | j                                        sQ|	                                s|
                                 |	                                s|
                                 S S S # | j                                        sQ|	                                s|
                                 |	                                s|
                                 w w w xY wr    )r"   r#   r   	sock_recvr   r$   r%   r&   r}   r(   r)   r'   )r   r   n	read_taskconn_event_tasks        r   _readzConnection._read   s$     )Ia((* *	!/"''))+ +	-,O,#35 5 5 5 5 5 5 5 5 5 %,,.. * 9&&(( - ~~'' '$$&&&&++-- -#**,,,,,	- -- - !''))9&&(( - ~~'' '$$&&&&++-- -#**,,,,	-- 9&&(( - ~~'' '$$&&&&++-- -#**,,,,	--   AF F A-G9c                   K   t          j        | j                            ||                    }t          j        | j                                                  }	 t          j        ||gt           j                   d {V  | j                                        rp	 | j                                        sR|	                                s|
                                 |	                                s|
                                 d S d S d S |                                | j                                        sQ|	                                s|
                                 |	                                s|
                                 S S S # | j                                        sQ|	                                s|
                                 |	                                s|
                                 w w w xY wr    )r"   r#   r   sock_sendallr   r$   r%   r&   r}   r(   r)   r'   )r   r   data
write_taskr   s        r   _writezConnection._write   s$     *I""4..0 0
!/"''))+ +	-,_-#35 5 5 5 5 5 5 5 5 5 %,,.. + 9&&(( -!(( (%%'''&++-- -#**,,,,,	- -- - "((**9&&(( -!(( (%%'''&++-- -#**,,,,	-- 9&&(( -!(( (%%'''&++-- -#**,,,,	--r   c                 @  K   d }	 	 | j                                          d {V  ||}d }n!|                     | j        d           d {V }|dk    rn@| j                                        r|r|}m|                     | j        |           d {V  n# t          $ r Y nw xY w| j	        
                                s!| j	                            | j                   d S d S # | j	        
                                s | j	                            | j                   w w xY wNTi   r
   )r   r$   r   r]   r   r&   r   r_   ConnectionErrorr   r}   	call_soonrN   r   bufr   s      r   r   zConnection.proxy_to_backend   sv     	0;',,.........?DCC!%D,<d!C!CCCCCCCD3;;)0022  #"kk$"3T:::::::::;   	 	 	D	 9&&(( 0	##DJ/////0 049&&(( 0	##DJ////0*   BB C" 
B# C" "B##C" ";Dc                 @  K   d }	 	 | j                                          d {V  ||}d }n!|                     | j        d           d {V }|dk    rn@| j                                        r|r|}m|                     | j        |           d {V  n# t          $ r Y nw xY w| j	        
                                s!| j	                            | j                   d S d S # | j	        
                                s | j	                            | j                   w w xY wr   )r   r$   r   r_   r   r&   r   r]   r   r   r}   r   rN   r   s      r   r   zConnection.proxy_from_backend  sv     	0:',,.........?DCC!%D,=t!D!DDDDDDDD3;;)0022  #"kk$"2D999999999:   	 	 	D	 9&&(( 0	##DJ/////0 049&&(( 0	##DJ////0r   N)
r   r   r   r   rN   r\   r   r   r   r   r	   r
   r   rZ   rZ      s}        	 	 	+ + + & & &>- - -,- - -,0 0 040 0 0 0 0r
   rZ   )
r"   rH   r3   rt   asyncpgr   	Exceptionr   r   rZ   r	   r
   r   <module>r      s                	 	 	 	 	 	 	 	BI BI BI BI BI BI BI BIJY0 Y0 Y0 Y0 Y0 Y0 Y0 Y0 Y0 Y0r
   