
    vKg2              	          S SK Jr  S SKrS SKJr  S SKJr  S SKJrJ	r	  S SK
r
S SKrS SKJr   S SKrS SKJr  S SKrS SKrS SKJrJr  S S	KJrJr  S
SKJrJrJr  \(       a  S SKJr  \R@                  " 5       r!\!RE                  S5      r#\RH                  " \RJ                  5      r&\#RO                  \&5        \RH                  " \RJ                  5      r(\!RS                  \(5        \RT                  RW                  SS\RX                  " S\S9/SS/S9r-S4S jr.\SSSS.       S5S jj5       r/\-S6S j5       r0\    S7S j5       r1S8S jr2S8S jr3S8S jr4S8S jr5S8S jr6S8S jr7S8S jr8S9S  jr9S9S! jr:    S9S" jr;S9S# jr<    S9S$ jr=S8S% jr>\S8S& j5       r?    S9S' jr@S8S( jrA\-      S:S) j5       rB\RT                  R                  S*5      S8S+ j5       rD\RT                  R                  S*5      S8S, j5       rE\RT                  R                  S*5      S8S- j5       rF\RT                  R                  S*5      S8S. j5       rGS8S/ jrH    S9S0 jrI    S9S1 jrJS8S2 jrKS8S3 jrLg! \ a  r\" \5         SrCGN@SrCff = f);    )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)idsc                     U R                  SS5      nU(       a  [        R                  R                  O[        R                  R                  n[        R                  R                  [        R                  R
                  US9n[        U40 U D6$ )Nr   F)typefamily)poptriosocketAF_INET6AF_INET
SOCK_DGRAMr   )kwargsr   r   socks       U/var/www/highfloat_scraper/venv/lib/python3.13/site-packages/trio/_tests/test_dtls.pyendpointr#   /   sb    ::fe$D%)T[[!!t{{/B/BF;;4;;#9#9&ID'''    )
autocancelmtur   c               4  ^#    [        US9 nU(       a  SOSnUR                  R                  US45      I S h  vN   [        R                  " 5        IS h  vN nSU4S jjnUR                  UR                  [        U5      I S h  vN   X3R                  R                  5       47v   U (       a  UR                  R                  5         S S S 5      IS h  vN   S S S 5        g  N N N` N! , IS h  vN  (       d  f       N(= f! , (       d  f       g = f7f)Nr   z::1	127.0.0.1r   c                  >#    [        SU R                  R                  R                  5       < SU R                  < 35        Tb  U R                  T5         [        S5        U R                  5       I S h  vN   [        S5        U   S h  vN n[        SU< SU R                  < 35        U R                  U5      I S h  vN   MA   NR N> N

 g ! [        R                   a    [        S5         g f = f7f)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)dtls_channelpacketr&   s     r"   echo_handler&dtls_echo_server.<locals>.echo_handlerB   s     *33::FFHK L*77:<
 ? 33C8989&3355589(4 8f
$|7P7P6STU*//777	 687 )5 // 9789sl   AC6C 6C	7C CCC2C CC CC C C6C30C62C33C6)r3   r
   returnNone)r#   r   bindr   open_nurserystartserve
server_ctxr-   cancel_scopecancel)r%   r&   r   server	localhostnurseryr5   s    `     r"   dtls_echo_serverrC   6   s      
t	!E{	mm  )Q000$$&&'9$ --j,GGG--33555$$++-3 '& 
	0&( H) '&&& 
	s   
D,DC%DC'D-C-C)	AC-DC+D	D%D'D)C-+D-D	3C64D	 D
DDc                F  #    [        U S9 IS h  vN u  p[        U S9 nUR                  U[        5      n[        R
                  " [        R                  5         UR                  5         S S S 5        UR                  5       I S h  vN   UR                  S5      I S h  vN   UR                  5       I S h  vN S:X  d   eUR                  S5      I S h  vN   UR                  5       I S h  vN S:X  d   e[        R
                  " [        SS9   UR                  S5      I S h  vN   S S S 5        UR                  S5        UR                  5       nUR                  S5        UR                  5       U:  d   eUR                  S5        UR                  5       U:X  d   e S S S 5        S S S 5      IS h  vN   g  GN! , (       d  f       GN\= f GNL GN6 GN! GN N N! , (       d  f       N= f! , (       d  f       NU= f NL! , IS h  vN  (       d  f       g = f7f)	Nr(      hellos   goodbyez4^openssl doesn't support sending empty DTLS packets$matchr$   i  i  )rC   r#   connect
client_ctxpytestraisesr   NeedHandshakeErrorget_cleartext_mtur0   r1   receive
ValueErrorr/   )r   server_endpointaddressclient_endpointclient_channelcleartext_mtu_1234s         r"   
test_smokerU   \   s    T**.H4 O,44WjINt667002 8 !--/// %%h///'//11X=== %%j111'//11Z???L %))#...	 --d3!/!A!A!C--d3!3358JJJJ--d3!3359KKKK- ! +** 87 0/111 /	  !  +***s   H!F>H!H;G4G,G4GG4 G!G48G9G4GG4/G0#G4G#(G!
)G#-A7G4%H-H!8H9H!
G	G4G4G4G4G4!G##
G1-G44
H	>HH!HHHH!c           
     P  ^
^^^#    Sn[         R                  " S5      m[        5       m
T
R                  5         SU l        [        5        IS h  vN u  p#[        R                  " 5        IS h  vN mS
U
U4S jjmS
UU4S jjnUT
l        [        U5       GH  n[        S5        [        S5        [        S5        [        5        nUR                  U[        5      n[        S5        UR                  5       I S h  vN   [        S5        [        U5      R!                  5       n [        R"                  " S	5       n	UR%                  U5      I S h  vN   UR'                  5       I S h  vN U:X  d   e S S S 5        W	R(                  (       d  OMk  S S S 5        GM     S S S 5      IS h  vN   S S S 5      IS h  vN   g  GNp GNS N Nu N_! , (       d  f       N\= f! , (       d  f       GMT  = f NE! , IS h  vN  (       d  f       NZ= f NQ! , IS h  vN  (       d  f       g = f7f)Nd   r   gMbP?c                  >#     TR                  / SQ/ SQS9S   n[        U R                   SU R                   SU 35        US:X  a  g US:X  a  TR	                  U 5        OUS	:X  a0  [
        R                  " TR                  5       S
-  5      I S h  vN   OYUS:X  d   e[        U R                   SU R                   SU R                  R                  5        35        TR                  U 5        g M   N`7f)N)deliverdropdupedelay)gffffff?皙?r]   r]   )weightsr   r+   z: rZ   r[   r\      rY   z: delivered )choicesr,   sourcedestinationsend_packetr   sleeprandompayloadhexdeliver_packet)r4   opfnrs     r"   route_packet:test_handshake_over_terrible_network.<locals>.route_packet   s     < 4 #  B V]]O40B0B/C2bTJKV|vv.w"jja8882  "Y.%}}oT&2D2D1E F  & 2 2 457 ))&1U  9s   BC5C3A!C5c                L   >  TR                  TU 5        g ! [         a     g f = fN)
start_soonRuntimeError)r4   rB   rl   s    r"   route_packet_wrapperBtest_handshake_over_terrible_network.<locals>.route_packet_wrapper   s,    &&|V<#  s    
##zP################################################################################zclient starting do_handshakezclient finished do_handshake
   r4   r   r7   r8   )re   Randomr   enableautojump_thresholdrC   r   r:   rl   ranger,   r#   rH   rI   r0   strencodemove_on_afterr1   rN   cancelled_caught)autojump_clock
HANDSHAKES_rQ   rr   irR   clientmsgcscoperj   rB   rk   rl   s             @@@@r"   $test_handshake_over_terrible_networkr   x   s     JaA	BIIK(-N%!!\a$$&&'+ +Z  3BO:&hhhZ?,44WjIF89 --///89a&--/C !//3v"(++c"222)/)9#9S#@@#@ 4  &66!   Z	 's '& "!!&@ 0 3#9 43  Z{ '&&& "!!!s   AH&F>H&H.G/H2AG05G	;G<?G	;G
GG
(G)
G
4G	G0H(G.)H-H&8H
9H&HG	G
G


GG	
G+%	G0.H0H	6G97H	H
H&H#HH#H&c                 ~  #    [        5        IS h  vN u  p[        5        nUR                  U[        5      nUR	                  S5      I S h  vN   UR                  5       I S h  vN S:X  d   e S S S 5        S S S 5      IS h  vN   g  Nx N> N(! , (       d  f       N%= f N! , IS h  vN  (       d  f       g = f7f)N   xyz)rC   r#   rH   rI   r1   rN   r   rQ   rR   r   s       r"   test_implicit_handshaker      s     !!\aZ?$,,WjAF ++f%%%))V333  "!!
 &) Z "!!!s   B=B
B=B#+BBB%B&
B1B#9B=B!B=BB
B	B#!B=#B:)B,*B:6B=c            
     x  #    [        5        n [        5        nU R                  R                  S5      I S h  vN   [        R                  " 5        IS h  vN nSS jnUR                  U R                  [        U5      I S h  vN   UR                  U R                  R                  5       [        5      n[        R                  " 5        IS h  vN nUR                  UR                  S5        UR                  UR                  5        S S S 5      IS h  vN   UR                  R                  5         S S S 5      IS h  vN   S S S 5        S S S 5        g  GN GN N N NI! , IS h  vN  (       d  f       N^= f N;! , IS h  vN  (       d  f       NP= f! , (       d  f       NY= f! , (       d  f       g = f7f)Nr)   r   c                  #    [         R                  " 5        IS h  vN nUR                  U R                  S5        UR                  U R                  5        S S S 5      IS h  vN   g  NL N! , IS h  vN  (       d  f       g = f7f)Ns   from server)r   r:   rp   r1   rN   )channelrB   s     r"   handler!test_full_duplex.<locals>.handler   sP     ,,..'&&w||^D&&w7 /.....sD   BA)B8A-B#A+$B+B-B3A64B Bs   from clientr   r
   r7   r8   )r#   r   r9   r   r:   r;   r<   r=   rH   r-   rI   rp   r1   rN   r>   r?   )rP   rR   server_nurseryr   r   rB   s         r"   test_full_duplexr      s&     

o$$))*:;;;$$&&.8
 !&&'<'<j'RRR$,,&&224F ((**g""6;;?""6>>2 +* ''..0# '& )3;& S +*** '&&& )3
s   F:F)FEFE
F*E>E
AE>EE>8E"	E>E 
E>5F E<FF)	F:FFE>E> E>"E9(E+)E95E><F>FFFF
F&	"F))
F73F:c                   #    [        5        IS h  vN u  p[        5        nUR                  U[        5      nUR	                  5       I S h  vN   UR                  5         [        R                  " [        R                  5         UR                  S5      I S h  vN   S S S 5        [        R                  " [        R                  5         UR                  5       I S h  vN   S S S 5        UR                  5         UR                  5       I S h  vN   S S S 5        S S S 5      IS h  vN   g  GN N N! , (       d  f       N= f Ne! , (       d  f       Ni= f NH! , (       d  f       NL= f NC! , IS h  vN  (       d  f       g = f7f)N   abc)rC   r#   rH   rI   r0   closerJ   rK   r   ClosedResourceErrorr1   rN   acloser   s       r"   test_channel_closingr      s     !!\aZ?$,,WjAF%%'''LLNt778kk&))) 9t778nn&&& 9 LLN--/!!  "!! ( * 98 ' 98 " Z "!!!s   FD-FE-*ED08ED4D2
D4,EEE
 E$+EEEE-F'E+(F0E2D44
E>EE
EE
E(	$E-+F-F3E64F Fc                    #    [        SS9 IS h  vN u  pU R                  5         S S S 5      IS h  vN   W R                  5         g  N7 N! , IS h  vN  (       d  f       N,= f7f)NF)r%   )rC   r   )rP   rQ   s     r"   !test_serve_exits_cleanly_on_closer     sE     5115Oo 21 	 2111sA   A&AA&AA&A
A&
A&A#AA#A&c            
     V  #    [        5        IS h  vN u  p[        5        IS h  vN u  p[        5        nUR                  U[        5      nUR                  U[        5      nUR	                  S5      I S h  vN   UR	                  S5      I S h  vN   UR                  5       I S h  vN S:X  d   eUR                  5       I S h  vN S:X  d   eUR                  5         [        R                  " [        R                  5         UR	                  S5      I S h  vN   S S S 5        [        R                  " [        R                  5         UR                  5       I S h  vN   S S S 5        [        R                  " [        R                  5         UR                  U[        5        S S S 5        SS jn[        R                  " 5        IS h  vN n[        R                  " [        R                  5         UR                  UR                  [        U5      I S h  vN   S S S 5        S S S 5      IS h  vN   S S S 5        S S S 5      IS h  vN   S S S 5      IS h  vN   g  GNQ GN? GN GN GN GN GNY! , (       d  f       GN^= f GN)! , (       d  f       GN.= f! , (       d  f       N= f N N! , (       d  f       N= f N! , IS h  vN  (       d  f       N= f! , (       d  f       N= f N! , IS h  vN  (       d  f       N= f N! , IS h  vN  (       d  f       g = f7f)Nr   r      xxxc                   #    g 7fro    r   s    r"   null_handler+test_client_multiplex.<locals>.null_handler"  s        r   objectr7   r8   )rC   r#   rH   rI   r1   rN   r   rJ   rK   r   r   r:   r;   r<   r=   )r   address1address2rR   client1client2r   rB   s           r"   test_client_multiplexr     s    !!]a4D4F4F-1Z?%--h
CG%--h
CG,,v&&&,,v&&& **f444 **f444!!#t778ll6*** 9t778oo''' 9t778''*= 9 ((**g]]4#;#;<!--(=(=z<XXX = +*+  5G4F!!!4F
 '&**
 + 98 ( 9888 +X =< +***+ Z 5G4F4F4F!!!!s  L)I"L)LI%LK3AK 8I(
9K I+
K )I.
*K I1
>K I7	I4I7	 ,K J	 J	!J	%,K J	(&K J/K %K	7%J3J1J3!K	)K 4K
5K 9K3LK1LL)LL)%L(K +K .K 1K 4I7	7
JK 	J	
JK 
J,(K 1J33
K=K	K KKKK  
K.*K31L3L
	9K<:L
	LL)L&LL&"L)c                    #    [         R                  R                  5        n [        R                  " [        SS9   [        U 5        S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f7f)Nz#^DTLS requires a SOCK_DGRAM socket$rF   )r   r   rJ   rK   rO   r   )ss    r"   test_dtls_over_dgram_onlyr   *  sJ     				]]:-RSO T 
	SS 
	s3   A:A)AA)	A:
A&	"A))
A73A:c                   #    SS jn [        5        nUR                  R                  S5      I S h  vN   [        R                  " 5        IS h  vN nUR                  UR                  [        U 5      I S h  vN   [        R                  " [        R                  5         UR                  UR                  [        U 5      I S h  vN   S S S 5        UR                  R                  5         S S S 5      IS h  vN   [        R                  " 5        IS h  vN nUR                  UR                  [        U 5      I S h  vN   UR                  R                  5         S S S 5      IS h  vN   S S S 5        g  GNF GN+ GN N! , (       d  f       N= f N! , IS h  vN  (       d  f       N= f N Nq NI! , IS h  vN  (       d  f       N^= f! , (       d  f       g = f7f)Nc                   #    g 7fro   r   r   s    r"   r   'test_double_serve.<locals>.null_handler1  s     r   r   r   )r#   r   r9   r   r:   r;   r<   r=   rJ   rK   BusyResourceErrorr>   r?   )r   rP   rB   s      r"   test_double_server   0  s<     
$$))*:;;;$$&&'-- 5 5z<PPPt556mmO$9$9:|TTT 7   '') '& $$&&'-- 5 5z<PPP  '') '& 
;&PT 76 '&&& 'P '&&& 
s  G GE7GE:G%F8E=9(F!%FF 
F"F-G8F9GF/G%F5?F1 F5G)F3*G.	G 7G:G=F F
FFGF,	FF,	(G1F53G5G	;F><G	G
GG c                2  #    [        5       nUR                  5         [        5        n[        5        nUR                  R	                  S5      I S h  vN   [
        R                  " S5       nUR                  UR                  R                  5       [        5      nUR                  5       I S h  vN   S S S 5        WR                  (       d   e S S S 5        S S S 5        g  N N3! , (       d  f       N7= f! , (       d  f       N,= f! , (       d  f       g = f7f)Nr   rW   )r   rw   r#   r   r9   r   r|   rH   r-   rI   r0   r}   )r~   rj   r   r   r   r   s         r"   test_connect_to_non_serverr   B  s     	BIIK	w
gnn!!"2333$oognn&@&@&BJOG&&((( % &&&& !+3 ) %$ !+
sp   %DDC5C C5,AC$.C"
/C$3C5D	D C5"C$$
C2.C55
D	?D
DDc           	       #    [        5       nUR                  5         S GHg  n[        5        IS h  vN u  p4[        US9 nUR                  U:X  d   eUR                  U[        5      n[        US-   5       HQ  nUR                  [        U5      R                  5       5      I S h  vN   [        R                  " S5      I S h  vN   MS     UR                  5       nUR                  S:X  d   e[        U5       H8  nUR                  5       I S h  vN [        U5      R                  5       :X  a  M8   e   UR                  S5      I S h  vN   UR                  5       I S h  vN S:X  d   e S S S 5        S S S 5      IS h  vN   GMj     g  GN[ N N N NJ N4! , (       d  f       N1= f N(! , IS h  vN  (       d  f       GM  = f7f)N)rt      )incoming_packets_buffer      s   buffer clear now)r   rw   rC   r#   r   rH   rI   ry   r1   rz   r{   r   rd   
statistics incoming_packets_dropped_in_triorN   )	r~   rj   buffer_sizer   rQ   rR   r   r   statss	            r"   test_incoming_buffer_overflowr   N  s[    	BIIK#%%!+>/&>>+MMM(00*E{R/0A ++c!fmmo666**Q-'' 1 ))+==CCC{+A!'!11SV]]_DDD ,kk"5666#^^--1DDDD ? &%%  %
 7' 26- ?> &%%%s   /GFGF,A%F&F'FFAFFF2F
F
F"F
#
F.F,6GF*GFFFFF
F'#F,*G,G	2F53G	?	Gc                  #    [        5       nUR                  5         SSKJnJnJnJnJnJnJ	n  U" U" UR                  UR                  SU" U" UR                  SSSS[        S5      S95      S95      n	U	S-   n
U	S S nU	S S n[        U	5      nS	US
'   U" U" UR                  UR                  SU" U" UR                  SSSS[        S5      S95      S95      nU" U" UR                  UR                  SU" U" UR                  SSSS[        S5      S95      S-   S95      nU" U" UR                  UR                  SSS95      nU" U" UR                  UR                  S[        S5      S-   S95      n[        5        IS h  vN u  nn[         R"                  R#                  [         R"                  R$                  S9 nSSU
UUUUUUU4
 H;  nUR'                  UU5      I S h  vN   [         R(                  " S5      I S h  vN   M=     S S S 5        S S S 5      IS h  vN   g  N NA N%! , (       d  f       N%= f N! , IS h  vN  (       d  f       g = f7f)Nr   )ContentTypeHandshakeFragmentHandshakeTypeProtocolVersionRecordencode_handshake_fragmentencode_recordrt   )msg_typemsg_lenmsg_seqfrag_offsetfrag_lenfrag)content_typeversionepoch_seqnorf                r   r$   #      r   r   r   )r   rw   
trio._dtlsr   r   r   r   r   r   r   	handshakeDTLS10client_hellobytes	bytearrayrC   r   r   r   sendtord   )r~   rj   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   rQ   r!   
bad_packets                         r"   *test_server_socket_doesnt_crash_on_garbager   a  s     
BIIK   !$..#**-!*77 !r			
L$ )72%cr* ,Sb 1&/&=#*.#B'+$..#**-!*77 !r			
$ ,9$..#**-!*77 !r	 
		
,(& $$..#**		
O (5$..#***%/		
($  !!\a[[T[[%;%;<%")/'40
 kk*g666jjm## = "!! 7# =< "!!!s   E>I H"I9H;=%H("H$
#H( H&
H(	H;IH9I$H(&H((
H6	2H;9I;IIIIc                ,  ^^^^	^
#    [        5       m	T	R                  5         SSKJmJm  [
        R                  " 5        m[        S5      m
SUUUU	U
4S jjnUT	l        [        5        IS h  vN u  p# [        5        nUR                  U[        5      nUR                  5       I S h  vN   S S S 5        MC   NJ N! , (       d  f       N= f! , IS h  vN  (       d  f       O= fS S S 5        O! , (       d  f       O= fTR                  (       d   eg 7f)Nr   )	BadPacketdecode_client_hello_untrustedr   c                d  >  T" U R                   5      u  pn[        U5      S:w  am  [        U R                   5      n[        T	5      nU[        U5      :  a  [        U5      S-
  nTR	                  5         X4==   S-  ss'   [
        R                  " XS9n TR                  U 5        g ! T a     Nf = f)Nr   r   )rf   )rf   lenr   nextr?   attrsevolverh   )
r4   r   cookierf   offsetr   r   r   rj   offset_to_corrupts
        r"   rl   2test_invalid_cookie_rejected.<locals>.route_packet  s    C<V^^L1 v;!# (7G!"34FW- "%W!1Ot+O"\\&BFf%!  s   B& &B/.B/ru   )r   rw   r   r   r   r   CancelScoper   rl   rC   r#   rH   rI   r0   r}   )r~   rl   r   rQ   r   r   r   r   r   rj   r   s         @@@@@r"   test_invalid_cookie_rejectedr     s     	BIIKC				v ""I	& 	&* '#%%!Z6$nnWjAG!..000    & 1  Z &%%9 
		B """"sv   8D-C/,B7-C/0C>*B;(B9
)B;-
C7C/9B;;
C	CC#	CC#	C/&	D/
C=9Dc           	     x  ^^#    [        5       nUR                  5         [        5        n[        5        nUR                  R	                  S5      I S h  vN   [
        R                  " 5        IS h  vN nSmSUU4S jjnUR                  UR                  [        U5      I S h  vN   [        S5        [
        R                  " 5        mUR                  UR                  R                  5       [        5      nUR                  5       I S h  vN   S S S 5        TR                   (       d   e[        S5        UR                  UR                  R                  5       [        5      nUR#                  5       I S h  vN S:X  d   e[
        R$                  " S5      I S h  vN   UR&                  R)                  5         S S S 5      IS h  vN   S S S 5        S S S 5        g  GN GNn GN= N! , (       d  f       N= f N N] N5! , IS h  vN  (       d  f       NJ= f! , (       d  f       NS= f! , (       d  f       g = f7f)	Nr   Tc                  >#    T(       a  Sm[        S5        TR                  5         [        R                  " S5      I S h  vN   [        S5        [        R
                  " [        R                  5         U R                  5       I S h  vN   S S S 5        g [        S5        U R                  S5      I S h  vN   g  Nz N4! , (       d  f       g = f N7f)NFz'handler: first time, cancelling connectg      ?z"handler: handshake should fail nowz&handler: not first time, sending hellorE   )	r,   r?   r   rd   rJ   rK   r2   r0   r1   )r   connect_cscope
first_times    r"   r   Atest_client_cancels_handshake_and_starts_new_one.<locals>.handler  s     !&JCD"))+**S/))>?t'?'?@%22444 A@ BC!,,x000 * 5 A@ 1sG   >CB<3C5C 	B>
C (C6C7C>C  
C
Czclient: starting first connectzclient: starting second connectrE   rt   r   )r   rw   r#   r   r9   r   r:   r;   r<   r=   r,   r   rH   r-   rI   r0   r}   rN   rd   r>   r?   )	r~   rj   r@   r   rB   r   r   r   r   s	          @@r"   0test_client_cancels_handshake_and_starts_new_oner     s     
BIIK	vxzVmm  !1222$$&&'J1 1 --j'BBB23!!#~ ..)B)B)DjQ**,,, $ "222234nnV]]%>%>%@*MG **h666 **R.    '')? '&  *2&" C
 - $# + != '&&&  *zs   %H:H)HGH1G
2H50G>%G"
&$G>
AG'	G%G'	A'G>8G8
9#G>G:
G>;HG<HH)	H:HH"G>%G'	'
G51G>:G><H>HHHH
H&	"H))
H73H:c            	     \  ^#    [        5        n [        5        nU R                  R                  S5      I S h  vN   UR                  R                  S5      I S h  vN   SS jmSU4S jjn[        R                  " 5        IS h  vN nUR                  U R                  [        U5      I S h  vN   UR                  UR                  [        T5      I S h  vN   UR                  U R                  R                  5       [        5      nUR                  S5      I S h  vN   UR                  5       I S h  vN S:X  d   eU R                  UR                  R                  5       [        5      nUR                  5       I S h  vN   [        R                  " [        R                   5         UR                  S5      I S h  vN   S S S 5        UR                  S5      I S h  vN   UR                  5       I S h  vN S:X  d   eUR"                  R%                  5         S S S 5      IS h  vN   S S S 5        S S S 5        g  GN GN GN GN GNt GN0 GN N N! , (       d  f       N= f N Nq NC! , IS h  vN  (       d  f       NX= f! , (       d  f       Na= f! , (       d  f       g = f7f)Nr   c                b   #    U   S h  vN nU R                  U5      I S h  vN   M$   N N
 g 7fro   )r1   )r   r4   s     r"   r5   -test_swap_client_server.<locals>.echo_handler/  s.      ' +fll6***+* !(s(   /-)-/+/-//c                   >#    [         R                  " [        R                  5         T" U 5      I S h  vN   S S S 5        g  N! , (       d  f       g = f7fro   )rJ   rK   r   r2   )r   r5   s    r"   crashing_echo_handler6test_swap_client_server.<locals>.crashing_echo_handler3  s9     t778"7+++ 98+ 98s+   %AAAA	AA
AAs   b as clients   association brokens   a as clientr   )r#   r   r9   r   r:   r;   r<   r=   rH   r-   rI   r1   rN   r0   rJ   rK   r2   r>   r?   )abr   rB   b_to_aa_to_br5   s         @r"   test_swap_client_serverr  *  s    	q(*hhmm,---hhmm,---	+	, $$&&'--5JKKK--\BBBYYqxx335zBF++n---))^;;;YYqxx335zBF%%'''t778kk"7888 9++n---))^;;;  '') '& %-- 'KB .) (8 98-) '&&& %*sA  J,JJ
I "J
I*J
I
J

%I0/I	
0(I0I
AI0I
 I07I
8AI0I
(I0,I	II	I0"I*
#I0:I,
;$I0J
*I.+J
/J7	J, J
J
J
	I0I0I0I0I0I	
I'#I0,I0.J
0J6I97JJ


J	J
J)%J,c            	       ^^^^#    [        5       mTR                  5         SmSUU4S jjn U Tl        [        5        IS h  vN u  nm[	        5        m[
        R                  " 5        IS h  vN nSUU4S jjnUR                  U5        [
        R                  " S5      I S h  vN   SmUR                  R                  STR                  R                  5       5      I S h  vN   S S S 5      IS h  vN   S S S 5        S S S 5      IS h  vN   g  N N No N3 N%! , IS h  vN  (       d  f       N:= f! , (       d  f       NC= f N:! , IS h  vN  (       d  f       g = f7f)	NTc                h   > T(       a  [        SU 5        g [        SU 5        TR                  U 5        g )Nzdropped packetzdelivered packet)r,   rh   r4   
blackholedrj   s    r"   rl   @test_openssl_retransmit_doesnt_break_stuff.<locals>.route_packetS  s/    "F+ &) 	&!r$   c                    >#    TR                  T[        5      n U R                  SS9I S h  vN   U R                  S5      I S h  vN   U R	                  5       I S h  vN S:X  d   eg  N< N% N7f)Ng      ?initial_retransmit_timeout   hi)rH   rI   r0   r1   rN   )r   rQ   rR   s    r"   	connecter=test_openssl_retransmit_doesnt_break_stuff.<locals>.connecterg  se     ,44WjIF ---MMM ++e,,,!'!11U::: N,1s3   )A/A)A/A+A/A-A/+A/-A/g?Fr   ru   r7   r8   )r   rw   rl   rC   r#   r   r:   rp   rd   r   r   r-   )rl   rP   rB   r  rQ   r
  rR   rj   s       @@@@r"   *test_openssl_retransmit_doesnt_break_stuffr  I  s	    
 
BIIKJ" " #BO!!%?owZ?((**g; ; ""9- jjo%% #
%,,33#**668  ! +*  "!!* &! +*** Z "!!!s   ;E"DE"ED5-D
.D514D%D
&=D#D
$D(D53D4D58E E"EE"D5DDD5D2!D$"D2.D55
E	?EE"EEEE"c                  ^	^
#    [        5       m
T
R                  5         Sm	SU	U
4S jjnUT
l        [        5        IS h  vN u  p#S Hz  n[	        5        n[
        R                  " 5       nSm	UR                  U[        5      nUR                  US9I S h  vN   [
        R                  " 5       nX-
  U:X  d   e S S S 5        M|     S S S 5      IS h  vN   g  N NC! , (       d  f       M  = f N! , IS h  vN  (       d  f       g = f7f)NTc                <   > T(       a  Smg TR                  U 5        g )NF)rh   r	  s    r"   rl   Ctest_initial_retransmit_timeout_configuration.<locals>.route_packet  s    Jf%r$   )r   r      r  ru   )
r   rw   rl   rC   r#   r   current_timerH   rI   r0   )r~   rl   r   rQ   tr   beforer   afterr
  rj   s            @@r"   -test_initial_retransmit_timeout_configurationr  ~  s      
BIIKJ& & #BO!!\aAv**,!
 ..*=**a*HHH))+~***   "!! I	  "!!!sq   ;D	C D	C/A CC
#C:C/D	C-D	C
C*%C/-D	/D5C86DD	c                 .  ^^#    Sm[        5       mTR                  5         SUU4S jjn U Tl        [        TS9 IS h  vN u  p[	        5        nUR                  U[        5      nUR                  T5        UR                  5       I S h  vN   UR                  S5      I S h  vN   UR                  5       I S h  vN S:X  d   e S S S 5        S S S 5      IS h  vN   g  N NW N@ N*! , (       d  f       N'= f N! , IS h  vN  (       d  f       g = f7f)Ni,  c                   > [        SU  35        [        S[        U R                  5       35        [        U R                  5      T::  d   eTR                  U 5        g )Ndelivering zpayload size: )r,   r   rf   rh   )r4   MTUrj   s    r"   rl   9test_explicit_tiny_mtu_is_respected.<locals>.route_packet  sP    F8$%s6>>23456>>"c)))
&!r$   )r&   r  ru   )r   rw   rl   rC   r#   rH   rI   r/   r0   r1   rN   )rl   r@   rQ   r   r   r   rj   s        @@r"   #test_explicit_tiny_mtu_is_respectedr"    s      C	BIIK" " #BOC((,=VZ6nnWj9G&&s+&&(((,,u%%% **e333  )(( )%* Z )(((s   :DC DC;;C(
C"C(#C$$C(;C&<
C(C;DC9D"C($C(&C((
C6	2C;9D;DDDDc                6  ^^#    [        5       mTR                  5         U (       a  SOSmSUU4S jjnUTl        [        U S9 IS h  vN u  p4[	        U S9 nUR                  U[        5      nUR                  S5        UR                  S5      I S h  vN   UR                  5       I S h  vN S:X  d   eUR                  5       S:  d   e S S S 5        S S S 5      IS h  vN   g  N NT N>! , (       d  f       N%= f N! , IS h  vN  (       d  f       g = f7f)	Ni  i$  c                   > [        U R                  5      T:  a  [        SU  35        g [        SU  35        TR                  U 5        g )Nz	dropping r  )r   rf   r,   rh   )r4   rj   r&   s    r"   rl   @test_handshake_handles_minimum_network_mtu.<locals>.route_packet  s@    v~~$IfX&'Kx()f%r$   r(   i'  r   i(#  ru   )r   rw   rl   rC   r#   rH   rI   r/   r1   rN   rM   )	r   r~   rl   r   rQ   rR   r   rj   r&   s	          @@r"   *test_handshake_handles_minimum_network_mtur&    s      
BIIK)C& & #BO
  T**lq4 O$,,WjAF %%d+++f%%%))V333++-444 ! +** &) !  +***s   ADC&DC?<C,C(C,+C*, C,C?D C=!D(C,*C,,
C:	6C?=D?DDDDz$always:unclosed DTLS:ResourceWarningc                   #    [         R                  R                  5       R                  n SS jn[        R
                  " [        5         U" 5       I S h  vN n[         R                  R                  5       I S h  vN   [        5         S S S 5        [         R                  R                  5       I S h  vN   [         R                  R                  5       R                  nU W:  d   eX:X  d   eg  N Nv! , (       d  f       Np= f NQ7f)Nc                   #    [        5       n [        R                  R                  [        R                  R                  S9 nUR	                  S5      I S h  vN   U R                  UR                  5       [        5      n[        R                  " 5        IS h  vN nUR                  UR                  5        [        R                  R                  5       I S h  vN   UR                  R                  5         S S S 5      IS h  vN   S S S 5        [        R                  R!                  5       R"                  nU$  N N Nd N<! , IS h  vN  (       d  f       NQ= f! , (       d  f       NZ= f7f)Nr   r   )r#   r   r   r   r9   rH   r-   rI   r:   rp   r0   testingwait_all_tasks_blockedr>   r?   lowlevelcurrent_statisticstasks_living)er   crB   during_taskss        r"   start_and_forget_endpointDtest_system_task_cleaned_up_on_gc.<locals>.start_and_forget_endpoint  s     J [[T[[%;%;<&&)***		!--/:6A((**g""1>>2ll99;;;$$++- +* = }}779FF +*; +*** =<s   A E.ED;AED=E=ED?E9EEE	2E.;E=E?EEE		E
E	E
E+'E.)r7   int)
r   r+  r,  r-  rJ   warnsResourceWarningr)  r*  r   )before_tasksr1  r0  after_taskss       r"   !test_system_task_cleaned_up_on_gcr8    s     ==335BBL  
o	&688ll11333 
'
 ,,
-
-
///--224AAK,&&&&&& 93 
'	&
 0sN   AD
C4C0%C4;C2<C4
)D3D4<D0C42C44
D>Dc                    #    [        5       n [        R                  " [        5         A [	        5         S S S 5        [
        R                  R                  5       I S h  vN   g ! , (       d  f       N5= f N7fro   )r#   rJ   r4  r5  r   r   r)  r*  r.  s    r"   !test_gc_before_system_task_startsr;    sL     
A	o	& 
' ,,
-
-
///	 
'	& 0s'   %A5A")A5A3A5"
A0,A5c                   #    [        5       n U R                  5         [        5       nUR                  R	                  S5      I S h  vN   UR                  5         [        R                  R                  5       I S h  vN   [        R                  R                  [        R                  R                  S9 nUR                  SUR                  R                  5       5      I S h  vN   S S S 5        [        R                  " [        5         A[        5         S S S 5        g  N N N?! , (       d  f       NC= f! , (       d  f       g = f7f)Nr   r   r   )r   rw   r#   r   r9   _ensure_receive_loopr   r)  r*  r   r   r-   rJ   r4  r5  r   )rj   r.  r   s      r"   test_gc_as_packet_receivedr>    s     	BIIK
A
((--(
)))
,,
-
-
///			!7!7		8Ahhvqxx335666 
9
 
o	& 
'	& * 0 	7 
9	8
 
'	&sf   AED5E;D!<9E5.D%#D#$D%("E
D6
E!E#D%%
D3/E6
E Ec                     SS jn [         R                  " U 5      n[        R                  " [        5         A[        5         S S S 5        g ! , (       d  f       g = f)Nc                 R   #    [        5       n U R                  5         [        5       $ 7fro   )r   rw   r#   )rj   s    r"   main&test_gc_after_trio_exits.<locals>.main  s     
 Y
		zs   %')r7   r   )r   runrJ   r4  r5  r   )rA  r.  s     r"   test_gc_after_trio_exitsrD    s7     	A	o	& 
'	&	&s   A
Ac                    #    [        5        n U R                  R                  5         [        R                  R                  5       I S h  vN   S S S 5        g  N! , (       d  f       g = f7fro   )r#   r   r   r   r)  r*  r:  s    r"   'test_already_closed_socket_doesnt_crashrF  +  sE     	q 	
ll11333 

 	4 
s.   A*<A	A
A	A*A
A'#A*c                  ^^#    [        5       mTR                  5         [        5        IS h  vN u  mnSUU4S jjnUTl        [	        5        n[
        R                  " S5         UR                  U[        5      nUR                  5       I S h  vN   S S S 5        S S S 5        S S S 5      IS h  vN   g  N N'! , (       d  f       N+= f! , (       d  f       N4= f N+! , IS h  vN  (       d  f       g = f7f)Nc                \   > TR                  U 5        TR                  R                  5         g ro   )rh   r   r   )r4   rj   r@   s    r"   rl   Etest_socket_closed_while_processing_clienthello.<locals>.route_packet>  s!    f%MM!r$   rt   ru   )
r   rw   rC   rl   r#   r   r|   rH   rI   r0   )r~   rQ   rl   rR   r   rj   r@   s        @@r"   /test_socket_closed_while_processing_clienthellorJ  4  s      
BIIK  !!%6fg	" 	" 'Z?##B'(00*E))+++ (  "!! , (' Z "!!!s   )C8B6C8CC&*B:B8
B:CC%C80C1C88B::
CC
C	CC8C5$C'%C51C8c           	       ^#    [        5       nUR                  5         SS jnX!l        [        5        IS h  vN u  p4[	        5        nUR                  U[        5      m[        R                  " 5        IS h  vN nSU4S jjnUR                  U5        [        R                  " S5      I S h  vN   UR                  U[        5        S S S 5      IS h  vN   S S S 5        S S S 5      IS h  vN   g  N N| NG N#! , IS h  vN  (       d  f       N8= f! , (       d  f       NA= f N8! , IS h  vN  (       d  f       g = f7f)Nc                    g ro   r   r4   s    r"   rl   Gtest_association_replaced_while_handshake_running.<locals>.route_packetP  s    r$   c                    >#    [         R                  " [        R                  5         T R	                  5       I S h  vN   S S S 5        g  N! , (       d  f       g = f7fro   )rJ   rK   r   r2   r0   )c1s   r"   doomed_handshakeKtest_association_replaced_while_handshake_running.<locals>.doomed_handshakeZ  s=     t'?'?@ oo/// A@/ A@s,   %AAA
A	A
A
AArt   ru   r  )r   rw   rl   rC   r#   rH   rI   r   r:   rp   rd   )	r~   rj   rl   r   rQ   rR   rB   rQ  rP  s	           @r"   1test_association_replaced_while_handshake_runningrS  J  s      
BIIK #O!!\aZ? ((*=B((**g0 ""#34jjn$$''< +*  "!! + % +*** Z "!!!s   4EC3ED(0D8C5
9D<3C;/C7
0C;
DC9DD("E-D&.E5D7C;9D;DDDD
D#	D(&E(D?.D1/D?;Ec                 ,  #    [        5       n U R                  5         SS jnXl        [        5        IS h  vN u  p#[	        5        nUR                  U[        5      nUR                  U[        5        [        R                  " [        R                  5         UR                  5       I S h  vN   S S S 5        S S S 5        S S S 5      IS h  vN   g  N N'! , (       d  f       N+= f! , (       d  f       N4= f N+! , IS h  vN  (       d  f       g = f7f)Nc                    [        5       ero   )AssertionErrorrM  s    r"   rl   Gtest_association_replaced_before_handshake_starts.<locals>.route_packetj  s    r$   )r4   r   r7   r   )r   rw   rl   rC   r#   rH   rI   rJ   rK   r   r2   r0   )rj   rl   r   rQ   rR   rP  s         r"   1test_association_replaced_before_handshake_startsrX  e  s     	BIIK #O!!\aZ? ((*=B##GZ8t778oo''' 9  "!!
 ( 98 Z "!!!s   4DCDC:AC'C,C
-C1C'9C:DC8DC
C$ C''
C5	1C:8D:D DDDc            	       #    [        5        IS h  vN u  p[        5        n[        R                  " 5        IS h  vN n[	        SS5       H6  nUR                  SU4[        5      nUR                  UR                  5        M8     UR                  U[        5      nUR                  S5      I S h  vN   UR                  5       I S h  vN S:X  d   eUR                  R                  5         S S S 5      IS h  vN   S S S 5        S S S 5      IS h  vN   g  GN N Nj NT N&! , IS h  vN  (       d  f       N;= f! , (       d  f       ND= f N;! , IS h  vN  (       d  f       g = f7f)Nr   rt   r)   r   )rC   r#   r   r:   ry   rH   rI   rp   r0   r1   rN   r>   r?   )r   rQ   rR   rB   r   r   s         r"   test_send_to_closed_local_portrZ  w  s       !!\aZ?((**gq"A-55{A6F
SG&&w';';< & *11':Fll6***$__..&888$$++- +*  "!!*
 +. +*** Z "!!!s   E)DE)ED<D
D< A1D"1D
2D"	D

$D".D<9D :D<>EE)EE)D<D"D" D<"D9(D+)D95D<<
E
	EE)E&EE&"E))r    z
int | boolr7   r   )r%   boolr&   z
int | Noner   r[  r7   z:AsyncGenerator[tuple[DTLSEndpoint, tuple[str, int]], None])r   r[  r7   r8   )r~   ztrio.testing.MockClockr7   r8   r  )r~   trio.abc.Clockr7   r8   )r   r[  r~   r\  r7   r8   )M
__future__r   re   
contextlibr   	itertoolsr   typingr   r   r   rJ   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_certrI   configure_trustmarkparametrizeparamparametrize_ipv6r#   rC   rU   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r"  r&  filterwarningsr8  r;  r>  rD  rF  rJ  rS  rX  rZ  r   r$   r"   <module>rw     s   "  *  *   A'
   * 5 D D.ZZ\mmM*[[)
   : &[[)
   :  ;;**

FLLZ01	 +  (  	".". 
". 	".
 @". ".J L L6 U"*U"	U" U"p412"$Y8*$	'E&o$"o$	o$d'#T**"**	**Z*> . .h+"+	+842 5
5"5 
5 5D BC ' D 'F BC0 D0 BC D( BC D 4,",	,,="=	=6($.O  '&&'s   
I$ $I=*I88I=