
    :"riL&                     n    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	y)	    N)clusterc                       e Zd Zy)
StopServerN)__name__
__module____qualname__     `/var/www/fortnox.pascalinesoft.com/venv/lib/python3.12/site-packages/asyncpg/_testbase/fuzzer.pyr   r      s    r
   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y)TCPFuzzingProxyz	127.0.0.1N)listening_addrlistening_portsettingsr   r   backend_hostbackend_portr   returnc                    || _         || _        || _        || _        |xs i | _        d | _        d | _        d | _        d | _        i | _	        d | _
        d | _        y 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__   sd     -,(( B	 !%	r
   c                 h  K   t        j                  |      }t        j                  | j                  j                               }	 t        j                  ||gt         j                         d {    | j                  j                         r
t               |j                         |j                         s|j                          |j                         s|j                          S S 7 y# |j                         s|j                          |j                         s|j                          w w xY w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&   s     ))$/	!//0D0D0FG	),,O,#335 5 5 %%' l" '')>>#  ""'')&&( *5 >>#  ""'')&&( *s2   AD2*C, 0C*17C, (AD2*C, ,AD//D2c                     t        j                         }t        j                  | j                  |f      | _        | j                  j                          |j                  d      st        d      y )N)targetargs   )timeoutzfuzzer proxy failed to start)	threadingEventThread_start_threadthreadstartr$   RuntimeError)r   starteds     r   r8   zTCPFuzzingProxy.start9   s\    //#&&%%WJ8||A|&=>> 'r
   c                     | j                   j                  | j                         | j                  j	                          y r   )r   call_soon_threadsafe_stopr7   joinr   s    r   stopzTCPFuzzingProxy.stopA   s(    		&&tzz2r
   c                 8    | j                   j                          y r   )r   setr?   s    r   r=   zTCPFuzzingProxy._stopE   s    r
   c                 P   t        j                         | _        t        j                  | j                         t        j                         | _        | j
                  j                          t        j                         | _        t        j                         | _        | j                  t        j                         | _	        t        j                         | _        | j                  j                  | j                  | j                  f       | j                  j!                  d       | j                  j#                  d       	 | j                  j%                  | j'                  |             | j                  j)                          y # | j                  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   **,	tyy)#MMO!(!--/&")"="="?DMMO			++T-@-@AB				e$	II((M)BCIIOODIIOOs   *F	 	F%c                 b  K   t        j                  | j                               | _        |j	                          	 | j                   d {    t        | j                        D ]  }|j                           t        j                  d       d {    t        | j                  d      r3| j                  j                  | j                  j                                | j                  j                          y 7 7 j# t        | j                        D ]  }|j                           t        j                  d       d {  7   t        | j                  d      r3| j                  j                  | j                  j                                | j                  j                          w xY w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0?	""""$**+ 	--%%%tyy/2		''		(8(8(:;IIOO # & $**+ 	--%%%tyy/2		''		(8(8(:;IIOOsP   9F/C? C;C? AF/C=A(F/;C? =F/?AF,EA)F,,F/c                   K   	 	 | j                  | j                  j                  | j                               d {   \  }}t	        j                         }|j                  d       | j                  | j                  j                  || j                  | j                  f             d {    t        |||       }| j                  j                  |j                               }|| j                  |<   7 7 L# t        $ r Y y w xY wwNF)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   s     
'+zzII))$))4(6 "6Q  &}}((/jj!7!7 4#4#4d6G6G"H"J K K K
 k<>D		--dkkm<I%.DT" "6K sL   D7C< C8A0C< -C:.C< 2AD8C< :C< <	DDDDc                 N    | j                   j                  | j                         y r   )r   r<   _trigger_connectivity_lossr?   s    r   trigger_connectivity_lossz)TCPFuzzingProxy.trigger_connectivity_loss~   s    		&&t'F'FGr
   c                 l    | j                   j                          | j                  j                          y r   )r   clearr   rB   r?   s    r   rd   z*TCPFuzzingProxy._trigger_connectivity_loss   s&    !""$r
   c                 N    | j                   j                  | j                         y r   )r   r<   _restore_connectivityr?   s    r   restore_connectivityz$TCPFuzzingProxy.restore_connectivity   s    		&&t'A'ABr
   c                 l    | j                   j                          | j                  j                          y r   )r   rB   r   rg   r?   s    r   ri   z%TCPFuzzingProxy._restore_connectivity   s&    $$&r
   c                 $    | j                          y r   )rj   r?   s    r   resetzTCPFuzzingProxy.reset   s    !!#r
   c                 b    | j                   j                  |d       }||j                          y y r   )r   popr)   )r   
connectionrb   s      r   _close_connectionz!TCPFuzzingProxy._close_connection   s1    $$((T:	  !r
   c                     t        | j                        D ](  }| j                  j                  | j                  |       * y r   )rR   r   r   r<   rq   )r   ra   s     r   close_all_connectionsz%TCPFuzzingProxy.close_all_connections   s8    ))* 	IDII**4+A+A4H	Ir
   )r   r   r   strtypingOptionalintdictr   r-   r8   r@   r=   r6   rM   rJ   re   rd   rj   ri   rm   rq   rs   r	   r
   r   r   r      s    .96:15 #  !'!5 " 25  "??40  ;? ")&?,/$H%C'$
Ir
   r   c                   6    e Zd Zd Zd Zd Zd Zd Zd Zd Z	y)	r[   c                     || _         || _        || _        |j                  | _        |j                  | _        |j
                  | _        d | _        d | _        d| _        y rX   )	r^   r`   proxyr   r   r   proxy_to_backend_taskproxy_from_backend_task	is_closed)r   r^   r`   r{   s       r   r   zConnection.__init__   sW    &(
JJ	!..!&!8!8%)"'+$r
   c                    | j                   ry d| _         | j                  !| j                  j                          d | _        | j                  !| j                  j                          d | _        | j                  j                  |        y )NT)r~   r|   r)   r}   r{   rq   r?   s    r   rN   zConnection.close   sq    >>%%1&&--/)-D&''3((//1+/D(

$$T*r
   c                 t  K   t        j                  | j                               | _        t        j                  | j	                               | _        	 t        j                  | j                  | j
                  gt         j                         d {    | j                  | j                  j                          | j
                  | j
                  j                          | j                  j                  | j                  j                                | j                  j                  | j                  j                                | j                  j                  | j                  j                                | j                  j                  | j                  j                                | j                  j                          | j                  j                          y 7 R# | j                  | j                  j                          | j
                  | j
                  j                          | j                  j                  | j                  j                                | j                  j                  | j                  j                                | j                  j                  | j                  j                                | j                  j                  | j                  j                                | j                  j                          | j                  j                          w xY w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   sT    %,%:%:!!#&%" (/'<'<##%('$	&,,++T-I-IJ#335 5 5
 ))5**113++7,,335 II##D$4$4$;$;$=>II##D$4$4$;$;$=>II##D$5$5$<$<$>?II##D$5$5$<$<$>?""$##%+5
 ))5**113++7,,335 II##D$4$4$;$;$=>II##D$4$4$;$;$=>II##D$5$5$<$<$>?II##D$5$5$<$<$>?""$##%s2   AL8>G' G$G' EL8$G' 'EL55L8c                   K   t        j                  | j                  j                  ||            }t        j                  | j                  j                               }	 t        j
                  ||gt         j                         d {    | j                  j                         r^	 | j                  j                         sB|j                         s|j                          |j                         s|j                          y y y |j                         | j                  j                         sB|j                         s|j                          |j                         s|j                          S S S 7 # | j                  j                         sB|j                         s|j                          |j                         s|j                          w w w xY w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    ))IIa(*	!//""'')+	-,,O,#335 5 5 %%,,. 99&&( ~~'$$&&++-#**, . ) !'')99&&( ~~'$$&&++-#**, . )5 99&&( ~~'$$&&++-#**, . )?   AG *E5 
E3E5 *AGE5 AG3E5 5AGGc                   K   t        j                  | j                  j                  ||            }t        j                  | j                  j                               }	 t        j
                  ||gt         j                         d {    | j                  j                         r^	 | j                  j                         sB|j                         s|j                          |j                         s|j                          y y y |j                         | j                  j                         sB|j                         s|j                          |j                         s|j                          S S S 7 # | j                  j                         sB|j                         s|j                          |j                         s|j                          w w w xY w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    **II""4.0
!//""'')+	-,,_-#335 5 5 %%,,. 99&&(!(%%'&++-#**, . ) "((*99&&(!(%%'&++-#**, . )5 99&&(!(%%'&++-#**, . )r   c                 x  K   d }	 	 | j                   j                          d {    ||}d }n$| j                  | j                  d       d {   }|dk(  rnD| j                  j                         r|r|}s| j                  | j                  |       d {    	 | j                  j                         s&| j                  j                  | j                         y y 7 7 7 K# t        $ r Y Rw xY w# | j                  j                         s&| j                  j                  | j                         w w xY wwNi   r
   )r   r$   r   r^   r   r&   r   r`   ConnectionErrorr   r~   	call_soonrN   r   bufr   s      r   r   zConnection.proxy_to_backend   s    	0'',,...?DC!%D,<,<d!CCD3;))002"kk$"3"3T:::   99&&(		##DJJ/ )% /
 D ; 		 99&&(		##DJJ/ )q   D:C& C *C& C"AC& C$C& C5 AD: C& "C& $C& &	C2/C5 1C22C5 5AD77D:c                 x  K   d }	 	 | j                   j                          d {    ||}d }n$| j                  | j                  d       d {   }|dk(  rnD| j                  j                         r|r|}s| j                  | j                  |       d {    	 | j                  j                         s&| j                  j                  | j                         y y 7 7 7 K# t        $ r Y Rw xY w# | j                  j                         s&| j                  j                  | j                         w w xY wwr   )r   r$   r   r`   r   r&   r   r^   r   r   r~   r   rN   r   s      r   r   zConnection.proxy_from_backend  s    	0'',,...?DC!%D,=,=t!DDD3;))002"kk$"2"2D999   99&&(		##DJJ/ )% /
 E : 		 99&&(		##DJJ/ )r   N)
r   r   r   r   rN   r]   r   r   r   r   r	   r
   r   r[   r[      s%    	+ &>-,-,040r
   r[   )
r"   rH   r3   ru   asyncpgr   	Exceptionr   r   r[   r	   r
   r   <module>r      s=        	 	BI BIJY0 Y0r
   