
     fք                       d dl mZ d dlZd dlmZ d dlmZ d dlmZm	Z	 d dl
Z
d dlZd dlmZ 	 d dlZd dlmZ n# e$ rZ ee           Y dZ[ndZ[ww xY wd dlZd dlZd dlmZmZ d d	lmZmZ d
dlmZmZmZ erd dlmZ  ej                     Z!e!"                    d          Z# ej$        ej%                  Z&e#'                    e&            ej$        ej%                  Z(e!)                    e(           ej*        +                    dd ej,        de          gddg          Z-dAdZ.edddddBd            Z/e-dCd!            Z0edDd$            Z1dEd%Z2dEd&Z3dEd'Z4dEd(Z5dEd)Z6dEd*Z7dEd+Z8dFd-Z9dFd.Z:dFd/Z;dFd0Z<dFd1Z=dEd2Z>edEd3            Z?dFd4Z@dEd5ZAe-dGd6            ZBej*        C                    d7          dEd8            ZDej*        C                    d7          dEd9            ZEej*        C                    d7          dEd:            ZFej*        C                    d7          dEd;            ZGdEd<ZHdFd=ZIdFd>ZJdEd?ZKdEd@ZLdS )H    )annotationsN)asynccontextmanager)count)TYPE_CHECKINGNoReturn)skip_if_optional_else_raise)SSL)DTLSChannelDTLSEndpoint)FakeNet	UDPPacket   )
binds_ipv6gc_collect_harderslow)AsyncGeneratorzexample.comipv6FT)marksipv4)idskwargs
int | boolreturnr   c                     |                      dd          }|rt          j        j        nt          j        j        }t          j                            t          j        j        |          }t          |fi | S )Nr   F)typefamily)poptriosocketAF_INET6AF_INET
SOCK_DGRAMr   )r   r   r   socks       X/var/www/api.educacionweb.es/myenv/lib/python3.11/site-packages/trio/_tests/test_dtls.pyendpointr%   -   sc    ::fe$$D%)BT[!!t{/BF;4;#9&IID'''''    )
autocancelmtur   r'   boolr(   
int | None:AsyncGenerator[tuple[DTLSEndpoint, tuple[str, int]], None]c                 K   t          |          5 }|rdnd}|j                            |df           d {V  t          j                    4 d {V }d
fd	}|                    |j        t          |           d {V  ||j                                        fW V  | r|j	        
                                 d d d           d {V  n# 1 d {V swxY w Y   d d d            d S # 1 swxY w Y   d S )Nr   z::1	127.0.0.1r   dtls_channelr
   r   Nonec                  K   t          d| j        j                                        d| j                   |                                	 t          d           |                                  d {V  t          d           | 2 3 d {V }t          d|d| j                   |                     |           d {V  =6 d S # t          j	        $ r t          d           Y d S w xY w)Nzecho handler started: server z client zserver starting do_handshakezserver finished do_handshakezechoing  -> zecho handler channel broken)
printr%   r   getsocknamepeer_addressset_ciphertext_mtudo_handshakesendr   BrokenResourceError)r/   packetr(   s     r$   echo_handlerz&dtls_echo_server.<locals>.echo_handler=   sc     <*3:FFHH< <*7< <  
 ? 33C88898999&335555555558999(4 8 8 8 8 8 8 8fTTT|7PTTUUU*//7777777777 )5 / 9 9 978888889s   :C C	8C C.-C.)r/   r
   r   r0   )r%   r   bindr   open_nurserystartserve
server_ctxr4   cancel_scopecancel)r'   r(   r   server	localhostnurseryr;   s    `     r$   dtls_echo_serverrF   4   s      
t			 .!2EE{	m  )Q000000000$&& 	. 	. 	. 	. 	. 	. 	.'9 9 9 9 9 9$ --j,GGGGGGGGG&-335555555 .$++---3	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	.. . . . . . . . . . . . . . . . . .s7   AC-A'C=C-
C	C-C	C--C14C1r0   c                l  K   t          |           4 d {V \  }}t          |           5 }|                    |t                    }t	          j        t          j                  5  |                                 d d d            n# 1 swxY w Y   |	                                 d {V  |
                    d           d {V  |                                 d {V dk    sJ |
                    d           d {V  |                                 d {V dk    sJ t	          j        t          d          5  |
                    d           d {V  d d d            n# 1 swxY w Y   |                    d           |                                }|                    d           |                                |k    sJ |                    d           |                                |k    sJ 	 d d d            n# 1 swxY w Y   d d d           d {V  d S # 1 d {V swxY w Y   d S )	Nr-      hellos   goodbyez4^openssl doesn't support sending empty DTLS packets$matchr&   i  i  )rF   r%   connect
client_ctxpytestraisesr   NeedHandshakeErrorget_cleartext_mtur7   r8   receive
ValueErrorr6   )r   server_endpointaddressclient_endpointclient_channelcleartext_mtu_1234s         r$   
test_smokerX   W   s     T*** L L L L L L L.H4    	LO,44WjIINt677 3 3002223 3 3 3 3 3 3 3 3 3 3 3 3 3 3 !--///////// %%h/////////'//11111111X==== %%j111111111'//11111111Z????"X   / / %))#........./ / / / / / / / / / / / / / /
 --d333!/!A!A!C!C--d333!33558JJJJJ--d333!33559KKKKKK+	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	LL L L L L L L L L L L L L L L L L L L L L L L L L L L L L Ls~   H#:H'B<HBHBB.H>E&H&E**H-E*.B
H9H#H			H#H		H##
H-0H-autojump_clocktrio.testing.MockClockc           
     J  
K   d}t          j        d          t                      

                                 d| _        t                      4 d {V \  }}t          j                    4 d {V d
fddfd	}|
_        t          |          D ]=}t          d
           t          d
           t          d
           t                      5 }|                    |t                    }t          d           |                                 d {V  t          d           t          |                                          }	 t          j        d          5 }	|                    |           d {V  |                                 d {V |k    sJ 	 d d d            n# 1 swxY w Y   |	j        snq	 d d d            n# 1 swxY w Y   ?	 d d d           d {V  n# 1 d {V swxY w Y   d d d           d {V  d S # 1 d {V swxY w Y   d S )Nd   r   gMbP?r:   r   r   r0   c                  K   	                      g dg d          d         }t          | j         d| j         d|            |dk    rd S |d	k    r                    |            n|d
k    r0t          j                                        dz             d {V  nW|dk    sJ t          | j         d| j         d| j        	                                            
                    |            d S )NT)deliverdropdupedelay)gffffff?皙?rb   rb   )weightsr   r2   z: r_   r`   ra      r^   z: delivered )choicesr3   sourcedestinationsend_packetr   sleeprandompayloadhexdeliver_packet)r:   opfnrs     r$   route_packetz:test_handshake_over_terrible_network.<locals>.route_packet   sL     *<<< 4 4 4 #   B V]JJ0BJJbJJKKKV||vv....w"ja88888888882  "Y%} 7 7&2D 7 7 & 2 2 4 47 7   ))&111U*r&   c                X    	                      |            d S # t          $ r Y d S w xY wN)
start_soonRuntimeError)r:   rE   rq   s    r$   route_packet_wrapperzBtest_handshake_over_terrible_network.<locals>.route_packet_wrapper   sH    &&|V<<<<<#    DDs    
))zP################################################################################zclient starting do_handshakezclient finished do_handshakeT
   r:   r   r   r0   )rj   Randomr   enableautojump_thresholdrF   r   r=   rq   ranger3   r%   rK   rL   r7   strencodemove_on_afterr8   rQ   cancelled_caught)rY   
HANDSHAKES_rT   rv   irU   clientmsgcscopero   rE   rp   rq   s             @@@@r$   $test_handshake_over_terrible_networkr   r   sF      JaA	BIIKKK(-N%!! K" K" K" K" K" K" K"\a$&& J	" J	" J	" J	" J	" J	" J	"'+ + + + + + +Z       3BO:&& " "hhhZZ "?,44WjIIF8999 --/////////8999a&&--//C"!/33 Av"(++c"2"22222222)/)9)9#9#9#9#9#9#9S#@#@#@#@#@A A A A A A A A A A A A A A A  &6 "!"
 "" " " " " " " " " " " " " " "	"s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	" J	"K" K" K" K" K" K" K" K" K" K" K" K" K" K" K" K" K" K" K" K" K" K" K" K" K" K" K" K" K" K"s   H7A#G.B
G	$<F-!G	-F11G	4F15G	G.GG.GG.H.
G8	8H;G8	<H
HHc                 |  K   t                      4 d {V \  } }t                      5 }|                    |t                    }|                    d           d {V  |                                 d {V dk    sJ 	 d d d            n# 1 swxY w Y   d d d           d {V  d S # 1 d {V swxY w Y   d S )N   xyz)rF   r%   rK   rL   r8   rQ   r   rT   rU   r   s       r$   test_implicit_handshaker      s     !! 4 4 4 4 4 4 4\aZZ 	4?$,,WjAAF ++f%%%%%%%%%))))))))V33333	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	44 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4s5   B+ABB+B	B+B	B++
B58B5c            	     .  K   t                      5 } t                      5 }| j                            d           d {V  t          j                    4 d {V }dd}|                    | j        t          |           d {V  |                    | j        	                                t                    }t          j                    4 d {V }|                    |j        d           |                    |j                   d d d           d {V  n# 1 d {V swxY w Y   |j                                         d d d           d {V  n# 1 d {V swxY w Y   d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )	Nr.   r   channelr
   r   r0   c                   K   t          j                    4 d {V }|                    | j        d           |                    | j                   d d d           d {V  d S # 1 d {V swxY w Y   d S )Ns   from server)r   r=   rt   r8   rQ   )r   rE   s     r$   handlerz!test_full_duplex.<locals>.handler   s      ,.. 8 8 8 8 8 8 8'&&w|^DDD&&w7778 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8s   6A%%
A/2A/s   from clientr   r
   r   r0   )r%   r   r<   r   r=   r>   r?   r@   rK   r4   rL   rt   r8   rQ   rA   rB   )rS   rU   server_nurseryr   r   rE   s         r$   test_full_duplexr      s!      
 1

 1o$))*:;;;;;;;;;$&& 	1 	1 	1 	1 	1 	1 	1.8 8 8 8
 !&&'<j'RRRRRRRRR$,,&2244j F (** 3 3 3 3 3 3 3g""6;???""6>2223 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 '..000!	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	11 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1s}   F
:E2A7E6D	E
D##E&D#'EE2
EE2"E#E2&F
2E6	6F
9E6	:F

FFc                   K   t                      4 d {V \  } }t                      5 }|                    |t                    }|                                 d {V  |                                 t          j        t          j	                  5  |
                    d           d {V  d d d            n# 1 swxY w Y   t          j        t          j	                  5  |                                 d {V  d d d            n# 1 swxY w Y   |                                 |                                 d {V  d d d            n# 1 swxY w Y   d d d           d {V  d S # 1 d {V swxY w Y   d S )N   abc)rF   r%   rK   rL   r7   closerM   rN   r   ClosedResourceErrorr8   rQ   acloser   s       r$   test_channel_closingr      s     !! " " " " " " "\aZZ 	"?$,,WjAAF%%'''''''''LLNNNt788 * *kk&)))))))))* * * * * * * * * * * * * * *t788 ' 'nn&&&&&&&&&' ' ' ' ' ' ' ' ' ' ' ' ' ' ' LLNNN--//!!!!!!!	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	"" " " " " " " " " " " " " " " " " " " " " " " " " " " " " "s}   E,A(EB9-E9B==E B=!E"D	=E	DED1EE,E	E,E	E,,
E69E6c                    K   t          d          4 d {V \  } }|                                  d d d           d {V  n# 1 d {V swxY w Y   |                                  d S )NF)r'   )rF   r   )rS   rT   s     r$   !test_serve_exits_cleanly_on_closer      s      5111              5Oow                                                      s   A
AAc            
       K   t                      4 d {V \  } }t                      4 d {V \  } }t                      5 }|                    |t                    }|                    |t                    }|                    d           d {V  |                    d           d {V  |                                 d {V dk    sJ |                                 d {V dk    sJ |                                 t          j        t          j
                  5  |                    d           d {V  d d d            n# 1 swxY w Y   t          j        t          j
                  5  |                                 d {V  d d d            n# 1 swxY w Y   t          j        t          j
                  5  |                    |t                     d d d            n# 1 swxY w Y   d	d}t          j                    4 d {V }t          j        t          j
                  5  |                    |j        t          |           d {V  d d d            n# 1 swxY w Y   d d d           d {V  n# 1 d {V swxY w Y   d d d            n# 1 swxY w Y   d d d           d {V  n# 1 d {V swxY w Y   d d d           d {V  d S # 1 d {V swxY w Y   d S )
Nr   r      xxxr   objectr   r0   c                
   K   d S rs    r   s    r$   null_handlerz+test_client_multiplex.<locals>.null_handler  s      r&   r   r   r   r0   )rF   r%   rK   rL   r8   rQ   r   rM   rN   r   r   r=   r>   r?   r@   )r   address1address2rU   client1client2r   rE   s           r$   test_client_multiplexr     sI     !! Y Y Y Y Y Y Y]a4D4F4F Y Y Y Y Y Y Y-1hZZ 	Y?%--h
CCG%--h
CCG,,v&&&&&&&&&,,v&&&&&&&&& ********f4444 ********f4444!!###t788 + +ll6*********+ + + + + + + + + + + + + + +t788 ( (oo'''''''''( ( ( ( ( ( ( ( ( ( ( ( ( ( (t788 > >''*===> > > > > > > > > > > > > > >    (** Y Y Y Y Y Y Yg]4#;<< Y Y!--(=z<XXXXXXXXXY Y Y Y Y Y Y Y Y Y Y Y Y Y YY Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y+	Y 	Y 	Y 	Y 	Y 	Y 	Y 	Y 	Y 	Y 	Y 	Y 	Y 	Y 	YY Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Ys  KJ;CJ E	<JEJE!J1F	JFJF !JG)	J)G--J0G-1 JJ	0(I$J	$I((J	+I(,J	/J
JJJJJ;J""J;%J"&J;)K;
K	KK		K
K),K)c                    K   t           j                                        5 } t          j        t          d          5  t          |            d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nz#^DTLS requires a SOCK_DGRAM socket$rI   )r   r   rM   rN   rR   r   )ss    r$   test_dtls_over_dgram_onlyr   #  s      					 ]:-RSSS 	 	OOO	 	 	 	 	 	 	 	 	 	 	 	 	 	 	                 s4   A1AA1A	A1 A	!A11A58A5c                 N  K   dd} t                      5 }|j                            d           d {V  t          j                    4 d {V }|                    |j        t          |            d {V  t          j	        t          j
                  5  |                    |j        t          |            d {V  d d d            n# 1 swxY w Y   |j                                         d d d           d {V  n# 1 d {V swxY w Y   t          j                    4 d {V }|                    |j        t          |            d {V  |j                                         d d d           d {V  n# 1 d {V swxY w Y   d d d            d S # 1 swxY w Y   d S )Nr   r   r   r0   c                
   K   d S rs   r   r   s    r$   r   z'test_double_serve.<locals>.null_handler*  s      r&   r   r   )r%   r   r<   r   r=   r>   r?   r@   rM   rN   BusyResourceErrorrA   rB   )r   rS   rE   s      r$   test_double_server   )  sO         
 *$))*:;;;;;;;;;$&& 	* 	* 	* 	* 	* 	* 	*'-- 5z<PPPPPPPPPt566 U UmmO$9:|TTTTTTTTTU U U U U U U U U U U U U U U  '')))	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* $&& 	* 	* 	* 	* 	* 	* 	*'-- 5z<PPPPPPPPP '')))	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	** * * * * * * * * * * * * * * * * *s   :FAC?(C	=C?	CC?CC?-F?
D			FD		F)AE<*F<
F	F	F	
FF!Ftrio.abc.Clockc                ,  K   t                      }|                                 t                      5 }t                      5 }|j                            d           d {V  t          j        d          5 }|                    |j                                        t                    }|
                                 d {V  d d d            n# 1 swxY w Y   |j        sJ 	 d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nr   r\   )r   rz   r%   r   r<   r   r   rK   r4   rL   r7   r   )rY   ro   r   r   r   r   s         r$   test_connect_to_non_serverr   ;  s     	BIIKKK	 'w

 'gn!!"2333333333$$ 	)oogn&@&@&B&BJOOG&&(((((((((	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) &&&&&' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'sZ   D	5C17ACC1CC1CC1%D	1C5	5D	8C5	9D		DDc           	       K   t                      }|                                 dD ]}t                      4 d {V \  }}t          |          5 }|j        |k    sJ |                    |t                    }t          |dz             D ]V}|                    t          |          
                                           d {V  t          j        d           d {V  W|                                }|j        dk    sJ t          |          D ]A}|                                 d {V t          |          
                                k    sJ B|                    d           d {V  |                                 d {V dk    sJ 	 d d d            n# 1 swxY w Y   d d d           d {V  n# 1 d {V swxY w Y   d S )N)rw      )incoming_packets_buffer      s   buffer clear now)r   rz   rF   r%   r   rK   rL   r|   r8   r}   r~   r   ri   
statistics incoming_packets_dropped_in_triorQ   )	rY   ro   buffer_sizer   rT   rU   r   r   statss	            r$   test_incoming_buffer_overflowr   G  s     	BIIKKK E E#%% 	E 	E 	E 	E 	E 	E 	E!W+>>> E/&>+MMMM(00*EE{R/00 ( (A ++c!ffmmoo666666666*Q--''''''''))++=CCCC{++ E EA!'!1!1111111SVV]]__DDDDDkk"5666666666#^^--------1DDDDDDE E E E E E E E E E E E E E E	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	EE Es6   F;D?FF;F""F;%F"&F;;
G	G	c                  K   t                      }|                                 ddlm}m}m}m}m}m}m	}  | ||j
        |j        d | ||j        ddddt          d                                                  }	|	dz   }
|	d d         }|	d d         }t          |	          }d	|d
<    | ||j
        |j        d | ||j        ddddt          d                                                  } | ||j
        |j        d | ||j        ddddt          d                              dz                       } | ||j
        |j        dd                    } | ||j
        |j        dt          d          dz                       }t                      4 d {V \  }}t           j                            t           j        j                  5 }dd|
|||||||f
D ]8}|                    ||           d {V  t!          j        d           d {V  9	 d d d            n# 1 swxY w Y   d d d           d {V  d S # 1 d {V swxY w Y   d S )Nr   )ContentTypeHandshakeFragmentHandshakeTypeProtocolVersionRecordencode_handshake_fragmentencode_recordrw   )msg_typemsg_lenmsg_seqfrag_offsetfrag_lenfrag)content_typeversionepoch_seqnork                r   r&   #      r   r   r   )r   rz   
trio._dtlsr   r   r   r   r   r   r   	handshakeDTLS10client_hellobytes	bytearrayrF   r   r   r"   sendtori   )rY   ro   r   r   r   r   r   r   r   r   client_hello_extendedclient_hello_shortclient_hello_really_shortclient_hello_corrupt_record_lenclient_hello_fragmented$client_hello_trailing_data_in_recordhandshake_empty client_hello_truncated_in_cookier   rT   r#   
bad_packets                         r$   *test_server_socket_doesnt_crash_on_garbager   Z  sd      
BIIKKK                  !=$.#*--!!*7 !r  	 			
 	
 	
 L$ )72%crc* ,SbS 1&/&=&=#*.#B'+m$.#*--!!*7 !r  	 			
 	
 	
 $ ,9=$.#*--!!*7 !r  	 	 
		
 	
 	
, ,(& $m$.#*		
 	
 	
 O (5}$.#**%%/		
 	
 	
( ($  !! $ $ $ $ $ $ $\a[T[%;<< 	$%")/'40 $ $
 kk*g666666666jmm########$	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $s7   33I&AH9-I9H=	=I H=	I
I!$I!c                  	
K   t                      		                                 ddlmm t          j                    5 t          d          
d
	
fd}|	_        t                      4 d {V \  }}	 t                      5 }|                    |t                    }|                                 d {V  d d d            n# 1 swxY w Y   \# 1 d {V swxY w Y   	 d d d            n# 1 swxY w Y   j        sJ d S )Nr   )	BadPacketdecode_client_hello_untrustedr   r:   r   r   r0   c                   	  | j                   \  }}}t          |          dk    rt          | j                   }t          	          }|t          |          k    r&t          |          dz
  }                                 ||xx         dz  cc<   t          j        | |          } n# $ r Y nw xY w                    |            d S )Nr   r   )rk   )rk   lenr   nextrB   attrsevolverm   )
r:   r   cookierk   offsetr   r   r   ro   offset_to_corrupts
        r$   rq   z2test_invalid_cookie_rejected.<locals>.route_packet  s    C<<V^LL61 v;;!## (77G!"344FW-- "%W!1FOOOt+OOO"\&'BBBF      f%%%%%s   B- -B54B5Trx   )r   rz   r   r   r   r   CancelScoper   rq   rF   r%   rK   rL   r7   r   )rY   rq   r   rT   r   r   r   r   r   ro   r   s         @@@@@r$   test_invalid_cookie_rejectedr     s     	BIIKKKCCCCCCCC				  1v ""II	& 	& 	& 	& 	& 	& 	& 	& 	& 	&* '#%% 	1 	1 	1 	1 	1 	1 	1!W1ZZ 16$nnWjAAG!..0000000001 1 1 1 1 1 1 1 1 1 1 1 1 1 11	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	19 1  1  1  1  1  1  1  1  1  1  1  1  1  1  1B """"""sT   5C9:C6CCCCCC
C%	%C9(C%	)C99C= C=c           	     L  K   t                      }|                                 t                      5 }t                      5 }|j                            d           d {V  t          j                    4 d {V }ddfd}|                    |j        t          |           d {V  t          d           t          j                    5 |                    |j                                        t                    }|                                 d {V  d d d            n# 1 swxY w Y   j        sJ t          d	           |                    |j                                        t                    }|                                 d {V d
k    sJ t          j        d           d {V  |j                                         d d d           d {V  n# 1 d {V swxY w Y   d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nr   Tr   r
   r   r0   c                  K   rdt          d                                            t          j        d           d {V  t          d           t	          j        t          j                  5  |                                  d {V  d d d            d S # 1 swxY w Y   d S t          d           |                     d           d {V  d S )NFz'handler: first time, cancelling connectg      ?z"handler: handshake should fail nowz&handler: not first time, sending hellorH   )	r3   rB   r   ri   rM   rN   r9   r7   r8   )r   connect_cscope
first_times    r$   r   zAtest_client_cancels_handshake_and_starts_new_one.<locals>.handler  s:      
1!&JCDDD"))+++*S//)))))))>???t'?@@ 5 5%224444444445 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 BCCC!,,x00000000000s   2BB!Bzclient: starting first connectzclient: starting second connectrH   rw   r   )r   rz   r%   r   r<   r   r=   r>   r?   r@   r3   r   rK   r4   rL   r7   r   rQ   ri   rA   rB   )	rY   ro   rC   r   rE   r   r   r   r   s	          @@r$   0test_client_cancels_handshake_and_starts_new_oner     sx      
BIIKKK	 !*vxzz !*Vm  !1222222222$&& 	* 	* 	* 	* 	* 	* 	*'J1 1 1 1 1 1 1 --j'BBBBBBBBB2333!## -~ ..)B)B)D)DjQQ**,,,,,,,,,- - - - - - - - - - - - - - - "22223444nnV]%>%>%@%@*MMG ********h6666 *R..        '')))?	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	*!* !* !* !* !* !* !* !* !* !* !* !* !* !* !* !* !* !* !* !* !* !* !* !* !* !* !* !* !* !* !* !* !*s   H:H>AG$AD*	G$*D..G$1D.2B G$H$
G..H1G.2H5HH	HH		HH Hc            	       K   t                      5 } t                      5 }| j                            d           d {V  |j                            d           d {V  dddfd}t          j                    4 d {V }|                    | j        t          |           d {V  |                    |j        t                     d {V  |                    | j        	                                t                    }|                    d           d {V  |                                 d {V dk    sJ |                     |j        	                                t                    }|                                 d {V  t          j        t          j                  5  |                    d	           d {V  d d d            n# 1 swxY w Y   |                    d
           d {V  |                                 d {V d
k    sJ |j                                         d d d           d {V  n# 1 d {V swxY w Y   d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nr   r   r
   r   r0   c                V   K   | 2 3 d {V }|                      |           d {V  #6 d S rs   )r8   )r   r:   s     r$   r;   z-test_swap_client_server.<locals>.echo_handler(  s^       ' + + + + + + +fll6********** !(s   (c                   K   t          j        t          j                  5   |            d {V  d d d            d S # 1 swxY w Y   d S rs   )rM   rN   r   r9   )r   r;   s    r$   crashing_echo_handlerz6test_swap_client_server.<locals>.crashing_echo_handler,  s      t788 , ,"l7+++++++++, , , , , , , , , , , , , , , , , ,s   AAAs   b as clients   association brokens   a as clientr   )r%   r   r<   r   r=   r>   r?   r@   rK   r4   rL   r8   rQ   r7   rM   rN   r9   rA   rB   )abr   rE   b_to_aa_to_br;   s         @r$   test_swap_client_serverr  #  s	     	 *q(** *hmm,---------hmm,---------	+ 	+ 	+ 	+	, 	, 	, 	, 	, 	, $&& 	* 	* 	* 	* 	* 	* 	*'--5JKKKKKKKKK--\BBBBBBBBBYYqx3355zBBF++n---------))))))))^;;;;YYqx3355zBBF%%'''''''''t788 9 9kk"78888888889 9 9 9 9 9 9 9 9 9 9 9 9 9 9++n---------))))))))^;;;; '')))	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *s   I9A$I!D&I+G	IGIGAI2I!
II!II!I9!I%	%I9(I%	)I99I= I=c                   K   t                                                       ddfd} | _        t                      4 d {V \  }t	                      5 t          j                    4 d {V }dfd}|                    |           t          j        d           d {V  d	|j	        
                    d
j	                                                   d {V  d d d           d {V  n# 1 d {V swxY w Y   d d d            n# 1 swxY w Y   d d d           d {V  d S # 1 d {V swxY w Y   d S )NTr:   r   r   r0   c                z    rt          d|            d S t          d|                                |            d S )Nzdropped packetzdelivered packet)r3   rm   r:   
blackholedro   s    r$   rq   z@test_openssl_retransmit_doesnt_break_stuff.<locals>.route_packetL  sN     	"F+++F &))) 	&!!!!!r&   c                    K                        t                    } |                     d           d {V  |                     d           d {V  |                                  d {V dk    sJ d S )Ng      ?initial_retransmit_timeout   hi)rK   rL   r7   r8   rQ   )r   rT   rU   s    r$   	connecterz=test_openssl_retransmit_doesnt_break_stuff.<locals>.connecter`  s      ,44WjIIF ---MMMMMMMMM ++e,,,,,,,,,!'!1!1111111U::::::r&   g?Fr   rx   r   r0   )r   rz   rq   rF   r%   r   r=   rt   ri   r   r   r4   )rq   rS   rE   r
  rT   r  rU   ro   s       @@@@r$   *test_openssl_retransmit_doesnt_break_stuffr  B  s     
 
BIIKKKJ" " " " " " " #BO!!       %?owZZ 	?(**       g; ; ; ; ; ; ; ""9--- joo%%%%%%% #
%,33O2>>@@        !                          	 	 	 	 	 	 	 	 	 	 	 	 	 	 	                             s[   D7D9A1C<*D<
DD	D
DD7D	D7 D	!D77
EEc                  	
K   t                      

                                 d	d		
fd}|
_        t                      4 d {V \  }}dD ]}t	                      5 }t          j                    }d	|                    |t                    }|	                    |           d {V  t          j                    }||z
  |k    sJ 	 d d d            n# 1 swxY w Y   	 d d d           d {V  d S # 1 d {V swxY w Y   d S )
NTr:   r   r   r0   c                >    rdd S                      |            d S )NF)rm   r  s    r$   rq   zCtest_initial_retransmit_timeout_configuration.<locals>.route_packet~  s.     	&JJJf%%%%%r&   )r   r      r  rx   )
r   rz   rq   rF   r%   r   current_timerK   rL   r7   )rY   rq   r   rT   tr   beforer   afterr  ro   s            @@r$   -test_initial_retransmit_timeout_configurationr  v  s      
BIIKKKJ& & & & & & & #BO!! + + + + + + +\a 	+ 	+A +v*,,!
 ..*==**a*HHHHHHHHH)++v~*****+ + + + + + + + + + + + + + +	++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +s7   C9!A+CC9CC9 C!C99
DDc                 F  K   dt                                                       d	fd} | _        t                    4 d {V \  }}t	                      5 }|                    |t                    }|                               |                                 d {V  |	                    d           d {V  |
                                 d {V dk    sJ 	 d d d            n# 1 swxY w Y   d d d           d {V  d S # 1 d {V swxY w Y   d S )
Ni,  r:   r   r   r0   c                    t          d|             t          dt          | j                              t          | j                  k    sJ                     |            d S )Ndelivering zpayload size: )r3   r   rk   rm   )r:   MTUro   s    r$   rq   z9test_explicit_tiny_mtu_is_respected.<locals>.route_packet  sp    $F$$%%%4s6>22445556>""c))))
&!!!!!r&   )r(   r	  rx   )r   rz   rq   rF   r%   rK   rL   r6   r7   r8   rQ   )rq   rC   rT   r   r   r  ro   s        @@r$   #test_explicit_tiny_mtu_is_respectedr    s      C	BIIKKK" " " " " " " #BOC((( 4 4 4 4 4 4 4,=VWZZ 	46nnWj99G&&s+++&&(((((((((,,u%%%%%%%%% ********e33333	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	44 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4s7   DBC2&D2C6	6D9C6	:D
DDc                R  K   t                                                       | rdnddfd}|_        t          |           4 d {V \  }}t	          |           5 }|                    |t                    }|                    d	           |                    d
           d {V  |	                                 d {V d
k    sJ |
                                dk    sJ 	 d d d            n# 1 swxY w Y   d d d           d {V  d S # 1 d {V swxY w Y   d S )Ni  i$  r:   r   r   r0   c                    t          | j                  k    rt          d|             d S t          d|                                 |            d S )Nz	dropping r  )r   rk   r3   rm   )r:   ro   r(   s    r$   rq   z@test_handshake_handles_minimum_network_mtu.<locals>.route_packet  sf    v~$$&f&&'''''((()))f%%%%%r&   r-   i'  r   i(#  rx   )r   rz   rq   rF   r%   rK   rL   r6   r8   rQ   rP   )	r   rY   rq   r   rT   rU   r   ro   r(   s	          @@r$   *test_handshake_handles_minimum_network_mtur    s+     
 
BIIKKK
)))C& & & & & & & #BO
  T*** 	5 	5 	5 	5 	5 	5 	5lq'4    	5O$,,WjAAF %%d+++++f%%%%%%%%%))))))))V3333++--44444	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5s7   D%BC8,D8C<	<D?C<	 D
D #D z$always:unclosed DTLS:ResourceWarningc                   K   t           j                                        j        } dd}t	          j        t                    5   |             d {V }t           j                                         d {V  t                       d d d            n# 1 swxY w Y   t           j                                         d {V  t           j                                        j        }| |k     sJ | |k    sJ d S )Nr   intc                   K   t                      } t          j                            t          j        j                  5 }|                    d           d {V  |                     |                                t                    }t          j                    4 d {V }|	                    |j
                   t          j                                         d {V  |j                                         d d d           d {V  n# 1 d {V swxY w Y   d d d            n# 1 swxY w Y   t          j                                        j        }|S )Nr   r   )r%   r   r   r"   r<   rK   r4   rL   r=   rt   r7   testingwait_all_tasks_blockedrA   rB   lowlevelcurrent_statisticstasks_living)er   crE   during_taskss        r$   start_and_forget_endpointzDtest_system_task_cleaned_up_on_gc.<locals>.start_and_forget_endpoint  s     JJ [T[%;<< 	.&&)*********		!--//:66A(** . . . . . . .g""1>222l99;;;;;;;;;$++---. . . . . . . . . . . . . . . . . . . . . . . . . . .	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. }7799Fs8    A"D)"AD:D)
D	D)D	D))D-0D-)r   r  )
r   r"  r#  r$  rM   warnsResourceWarningr   r!  r   )before_tasksr(  r'  after_taskss       r$   !test_system_task_cleaned_up_on_gcr-    sO     =3355BL     
o	&	&  6688888888l11333333333              
 ,
-
-
/
////////-2244AK,&&&&;&&&&&&s   ABBBc                    K   t                      } t          j        t                    5  ~ t	                       d d d            n# 1 swxY w Y   t
          j                                         d {V  d S rs   )r%   rM   r)  r*  r   r   r   r!  r%  s    r$   !test_gc_before_system_task_startsr0    s      

A	o	&	&                 ,
-
-
/
//////////s   AA
A
c                   K   t                      } |                                  t                      }|j                            d           d {V  |                                 t          j                                         d {V  t          j                            t          j        j	                  5 }|
                    d|j                                                   d {V  d d d            n# 1 swxY w Y   t          j        t                    5  ~t                       d d d            d S # 1 swxY w Y   d S )Nr   r   r   )r   rz   r%   r   r<   _ensure_receive_loopr   r   r!  r"   r   r4   rM   r)  r*  r   )ro   r%  r   s      r$   test_gc_as_packet_receivedr3    s     	BIIKKK

A
(--(
)
))))))))
,
-
-
/
////////			!7		8	8 7Ahhvqx33556666666667 7 7 7 7 7 7 7 7 7 7 7 7 7 7
 
o	&	&                   s$   :4C::C>C>D;;D?D?c                     dd} t          j        |           }t          j        t                    5  ~t                       d d d            d S # 1 swxY w Y   d S )Nr   r   c                 f   K   t                      } |                                  t                      S rs   )r   rz   r%   )ro   s    r$   mainz&test_gc_after_trio_exits.<locals>.main  s(      
 YY
		zzr&   )r   r   )r   runrM   r)  r*  r   )r6  r%  s     r$   test_gc_after_trio_exitsr8    s        	A	o	&	&                   s   AAAc                    K   t                      5 } | j                                         t          j                                         d {V  d d d            d S # 1 swxY w Y   d S rs   )r%   r   r   r   r   r!  r/  s    r$   'test_already_closed_socket_doesnt_crashr:  "  s      	 4q 	
l113333333334 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4s   >AA #A c                  K   t                                                       t                      4 d {V \  }dfd}|_        t	                      5 }t          j        d          5  |                    |t                    }|	                                 d {V  d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   d d d           d {V  d S # 1 d {V swxY w Y   d S )Nr:   r   r   r0   c                d                         |            j                                         d S rs   )rm   r   r   )r:   ro   rC   s    r$   rq   zEtest_socket_closed_while_processing_clienthello.<locals>.route_packet5  s1    f%%%M!!!!!r&   rw   rx   )
r   rz   rF   rq   r%   r   r   rK   rL   r7   )rY   rT   rq   rU   r   ro   rC   s        @@r$   /test_socket_closed_while_processing_clienthellor=  +  s      
BIIKKK  !! , , , , , , ,%6fg	" 	" 	" 	" 	" 	" 	" 'ZZ 	,?#B'' , ,(00*EE))+++++++++, , , , , , , , , , , , , , ,	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,, , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,sY    C'C	06B2&C	2B66C	9B6:C	=C'	C	C'C	C''
C14C1c                z  K   t                      }|                                 dd}||_        t                      4 d {V \  }}t	                      5 }|                    |t                    t          j                    4 d {V }d	fd}|	                    |           t          j
        d           d {V  |                    |t                     d d d           d {V  n# 1 d {V swxY w Y   d d d            n# 1 swxY w Y   d d d           d {V  d S # 1 d {V swxY w Y   d S )
Nr:   r   r   r0   c                    d S rs   r   r:   s    r$   rq   zGtest_association_replaced_while_handshake_running.<locals>.route_packetG  s    r&   c                    K   t          j        t          j                  5                                    d {V  d d d            d S # 1 swxY w Y   d S rs   )rM   rN   r   r9   r7   )c1s   r$   doomed_handshakezKtest_association_replaced_while_handshake_running.<locals>.doomed_handshakeQ  s      t'?@@ 0 0 oo/////////0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0s   A

AArw   rx   r  )r   rz   rq   rF   r%   rK   rL   r   r=   rt   ri   )	rY   ro   rq   r   rT   rU   rE   rC  rB  s	           @r$   1test_association_replaced_while_handshake_runningrD  A  s      
BIIKKK    #BO!! = = = = = = =\aZZ 	=? ((*==B(** 
= 
= 
= 
= 
= 
= 
=g0 0 0 0 0 0 ""#3444jnn$$$$$$$''<<<
= 
= 
= 
= 
= 
= 
= 
= 
= 
= 
= 
= 
= 
= 
= 
= 
= 
= 
= 
= 
= 
= 
= 
= 
= 
= 
=	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	== = = = = = = = = = = = = = = = = = = = = = = = = = = = = =s[   D*5DAC/D/
C99D<C9=D D*D	D*D	D**
D47D4c                 4  K   t                      } |                                  dd}|| _        t                      4 d {V \  }}t	                      5 }|                    |t                    }|                    |t                     t          j        t          j
                  5  |                                 d {V  d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   d d d           d {V  d S # 1 d {V swxY w Y   d S )Nr:   r   r   r   c                    t                      rs   )AssertionErrorr@  s    r$   rq   zGtest_association_replaced_before_handshake_starts.<locals>.route_packeta  s    r&   )r:   r   r   r   )r   rz   rq   rF   r%   rK   rL   rM   rN   r   r9   r7   )ro   rq   r   rT   rU   rB  s         r$   1test_association_replaced_before_handshake_startsrH  \  s     	BIIKKK    #BO!! ( ( ( ( ( ( (\aZZ 	(? ((*==B##GZ888t788 ( (oo'''''''''( ( ( ( ( ( ( ( ( ( ( ( ( ( (	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	(( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (s[   DAC)+CC)CC)CC)D)C-	-D0C-	1D
DDc                   K   t                      4 d {V \  } }t                      5 }t          j                    4 d {V }t	          dd          D ]9}|                    d|ft                    }|                    |j                   :|                    |t                    }|	                    d           d {V  |
                                 d {V dk    sJ |j                                         d d d           d {V  n# 1 d {V swxY w Y   d d d            n# 1 swxY w Y   d d d           d {V  d S # 1 d {V swxY w Y   d S )Nr   rw   r.   r   )rF   r%   r   r=   r|   rK   rL   rt   r7   r8   rQ   rA   rB   )r   rT   rU   rE   r   r   s         r$   test_send_to_closed_local_portrJ  n  s       !! 	. 	. 	. 	. 	. 	. 	.\aZZ 	.?(** . . . . . . .gq" = =A-55{A6F
SSG&&w';<<<<)11':FFll6*********$__........&8888$++---. . . . . . . . . . . . . . . . . . . . . . . . . . .	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	.	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	.sY   E
D,B:D=D,
DD,DD, E
,D0	0E
3D0	4E


EE)r   r   r   r   )r'   r)   r(   r*   r   r)   r   r+   )r   r)   r   r0   )rY   rZ   r   r0   r  )rY   r   r   r0   )r   r)   rY   r   r   r0   )M
__future__r   rj   
contextlibr   	itertoolsr   typingr   r   r   rM   trio._tests.pytest_pluginr   trustmeOpenSSLr	   ImportErrorerrorr   trio.testingr
   r   trio.testing._fake_netr   r   _core._tests.tutilr   r   r   collections.abcr   CAca
issue_certserver_certContextDTLS_METHODr@   configure_certrL   configure_trustmarkparametrizeparamparametrize_ipv6r%   rF   rX   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  filterwarningsr-  r0  r3  r8  r:  r=  rD  rH  rJ  r   r&   r$   <module>re     sX   " " " " " "  * * * * * *       * * * * * * * *   A A A A A A'NNN ' ' '&&&&&&&&'      * * * * * * * * 5 5 5 5 5 5 5 5 D D D D D D D D D D /......WZ\\mmM**S[))
   : & & &S[))
   :    ;**
ULFLZ8889?O +   
( ( ( ( $U. . . . . .D L L L L4 U" U" U" U"p4 4 4 41 1 1 10" " " "$   Y Y Y Y8   * * * *$	' 	' 	' 	'E E E E&o$ o$ o$ o$d'# '# '# '#T** ** ** **Z* * * *> - - - -f+ + + +84 4 4 42 5 5 5 5B BCC '  '  ' DC 'F BCC0 0 0 DC0 BCC   DC( BCC   DC 4 4 4 4, , , ,,= = = =6( ( ( ($. . . . . .s   
9 AAA