
    iȌ              	         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                  S:S j5       r%S:S jr&\RH                  S:S j5       r'\RP                  RS                  SS\RT                  " S\S9/SS/S9r+S;S jr,\SSSS.         S<S jj5       r-\+        S=S j5       r.\      S>S j5       r/      S?S jr0S?S jr1      S?S jr2S@S jr3S@S  jr4SAS! jr5S@S" jr6      SBS# jr7\RP                  RS                  S$S%S&/5                SCS' j5       r8      SDS( jr9        SES) jr:      SDS* jr;S@S+ jr<\      S?S, j5       r=      SDS- jr>      S?S. jr?\+          SFS/ j5       r@\RP                  R                  S05      SGS1 j5       rB\RP                  R                  S05      SAS2 j5       rC\RP                  R                  S05      SAS3 j5       rD\RP                  R                  S05      SAS4 j5       rESAS5 jrF        SES6 jrG      SDS7 jrH    S@S8 jrIS@S9 jrJg! \ a  r\" \5         SrCGNSrCff = f)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.comc                 x    [         R                  " [         R                  5      n [        R	                  U 5        U $ N)r	   ContextDTLS_METHODserver_certconfigure_certctxs    BC:\des-py\RoboSAPF\venv\Lib\site-packages\trio/_tests/test_dtls.py
server_ctxr   "   s'    
++coo
&Cs#J    c                 x    [         R                  " [         R                  5      n [        R	                  U 5        U $ r   )r	   r   r   caconfigure_trustr   s    r   client_ctx_fnr!   )   s'    
++coo
&CsJr   c                     [        5       $ r   )r!    r   r   
client_ctxr$   /   s
    ?r   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       r   endpointr4   ;   sb    ::fe$D%)T[[!!t{{/B/BF;;4;;#9#9&ID'''r   )
autocancelmtur%   c               *  ^#    [        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                  X5      I S h  vN   XDR                  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)
printr4   r.   getsocknamepeer_addressset_ciphertext_mtudo_handshakesendr-   BrokenResourceError)dtls_channelpacketr6   s     r   echo_handler&dtls_echo_server.<locals>.echo_handlerO   s     *33::FFHK L*77:<
 ? 33C8
989&3355589 )5 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)rC   r
   returnNone)
r4   r.   bindr-   open_nurserystartserver=   cancel_scopecancel)r   r5   r6   r%   server	localhostnurseryrE   s     `     r   dtls_echo_serverrR   B   s      
t	!E{	mm  )Q000$$&&'9( --jGGG--33555$$++-7 '& 
	0&, H- '&&& 
	s   
D,DC DC"D(C(C$AC(DC&D	D D"D$C(&D(C?	.C1/C?	;D
DDc                >  #    [        XS9 IS h  vN u  nn[        U S9 nUR                  XB5      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)
Nr%   r   r8      hellos   goodbyez4^openssl doesn't support sending empty DTLS packets$matchr   i  i  )rR   r4   connectpytestraisesr-   NeedHandshakeErrorget_cleartext_mtur@   rA   receive
ValueErrorr?   )r%   r   r$   _server_endpointaddressclient_endpointclient_channelcleartext_mtu_1234s           r   
test_smokerd   k   s      TAA F4 O,44WINt667002 8 !--/// %%h///'//11X=== %%j111'//11Z???M %))#...	 --d3!/!A!A!C--d3!3358JJJJ--d3!3359KKKK- !	 BAA 87 0/111 /	  ! 	 BAAAs   HF:HH6G0F=(G0GG0GG04G5G0GG0+G,#G0G$G
%G)A7G0!H)H4H5H=
G	G0G0G0G0G0G
G-)G00
G>	:HHH	H
HHc           
     V  ^^^^#    Sn[         R                  " S5      m[        5       mTR                  5         SU l        [        US9 IS h  vN u  p4[        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       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Nt GNW N Nu N_! , (       d  f       N\= f! , (       d  f       GMX  = 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?r   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?皙?rm   rm   )weightsr   r;   z: rj   rk   rl      ri   z: delivered )choicesr<   sourcedestinationsend_packetr-   sleeprandompayloadhexdeliver_packet)rD   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r   )
start_soonRuntimeError)rD   rQ   r|   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
   rD   r   rG   rH   )ru   Randomr   enableautojump_thresholdrR   r-   rJ   r|   ranger<   r4   rX   r!   r@   strencodemove_on_afterrA   r]   cancelled_caught)autojump_clockr   
HANDSHAKES_r`   r   ira   clientmsgcscoperz   rQ   r{   r|   s              @@@@r   $test_handshake_over_terrible_networkr      s    
 JaA	BIIK(-N%:66,1$$&&'+ +Z  3BO:&hhhZ?,44WmoNF89 --///89a&--/C !//3v"(++c"222)/)9#9S#@@#@ 4  &66!   Z	 's '& 766&@ 0 3#9 43  Z{ '&&& 7666s   AH)GH)H-G.H1AG39G	>G??G	>GG	G+G,
G7G	G3 H+G1,H0H);H<H)HG		GG
GG	
G.(	G31H3H
	9G<:H
	HH)H&HH&"H)c                r  #    [        U S9 IS h  vN u  p#[        5        nUR                  X15      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  Ns N> N(! , (       d  f       N%= f N! , IS h  vN  (       d  f       g = f7f)Nrg      xyz)rR   r4   rX   rA   r]   r   r$   r   r`   ra   r   s         r   test_implicit_handshaker      s       :66,1Z?$,,WAF ++f%%%))V333  766
 &) Z 7666s   B7BB7B&B
BB
B 
B
+B3B7>B?B7B
B


B	BB7B4#B&$B40B7c           
     d  #    [        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                  X5      I S h  vN   UR                  UR                  R                  5       U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 N N N NH! , IS h  vN  (       d  f       N]= f N:! , IS h  vN  (       d  f       NO= f! , (       d  f       NX= f! , (       d  f       g = f7f)Nr9   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-   rJ   r   rA   r]   )channelrQ   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
   rG   rH   )r4   r.   rI   r-   rJ   rK   rL   rX   r=   r   rA   r]   rM   rN   )r   r$   server_endpointra   server_nurseryr   r   rQ   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   F0FFEFE
F%E4>E
?AE4EE4
8E	E4E
E4,F7E28F<F	F0FFE4E4E4E/E!E/+E42F4F:E=;FF
F	F
F-)F0c                  #    [        U S9 IS h  vN u  p#[        5        nUR                  X15      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)Nrg      abc)rR   r4   rX   r@   closerY   rZ   r-   ClosedResourceErrorrA   r]   acloser   s         r   test_channel_closingr     s       :66,1Z?$,,WAF%%'''LLNt778kk&))) 9t778nn&&& 9 LLN--/!!  766 ( * 98 ' 98 " Z 7666s   FD'FE'%ED*8E?D.D,
D.,EED?
E+E	E
EE'F!E%"F*E,D..
D<8E?E
EE
E"	E'%F'E>-E0.E>:Fc                   #    [        SU S9 IS h  vN u  nnUR                  5         S S S 5      IS h  vN   WR                  5         g  N8 N! , IS h  vN  (       d  f       N,= f7f)NF)r5   r   )rR   r   )r   r   _addresss      r   !test_serve_exits_cleanly_on_closer     sP     5ZHH M	 IH  IHHHsA   A(A
A(AA(AA(A(A%AA%!A(c           
     `  #    [        U S9 IS h  vN u  p[        U S9 IS h  vN u  p[        5        nUR                  U[        5       5      nUR                  U[        5       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       5        S S S 5        SS jn[        R                  " 5        IS h  vN n[        R                  " [        R                  5         UR                  UR                  X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NW GNF GN GN GN GN GNX! , (       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)Nrg   r   r      xxxc                   #    g 7fr   r#   r   s    r   null_handler+test_client_multiplex.<locals>.null_handlerA  s        r   objectrG   rH   )rR   r4   rX   r!   rA   r]   r   rY   rZ   r-   r   rJ   rK   rL   )	r   r   address1address2ra   client1client2r   rQ   s	            r   test_client_multiplexr   *  s    J//=AJ//=AZ?%--hHG%--hHG,,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''-/B 9 ((**g]]4#;#;<!--(=(=zXXX = +*+  	0/ 	0/// '&**
 + 98 ( 9888 +X =< +***+ Z 	0/// 	0///s  L.I'L.LI*LK8A	K%>I-
?K%I0
K%/I3
0K%I6
>K%I<	!I9"I<	&,K%J	&J'J	+,K%J#	2&K%J4K%%K	 J8!J6"J8&K	.K%9K	
:K%>K8LK6LL.!L"L.*L-K%0K%3K%6K%9I<	<
JK%J	
J K%#
J1-K%6J88
KK		K%K"KK"K%%
K3/K86L8L	>L?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$rV   )r-   r.   rY   rZ   r^   r   )ss    r   test_dtls_over_dgram_onlyr   I  sJ     				]]:-STO U 
	TT 
	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                  X5      I S h  vN   [        R                  " [        R                  5         UR                  UR                  X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                  X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N7 GN N N! , (       d  f       N= f N! , IS h  vN  (       d  f       N= f N Np NH! , IS h  vN  (       d  f       N]= f! , (       d  f       g = f7f)Nc                   #    g 7fr   r#   r   s    r   r   'test_double_serve.<locals>.null_handlerP  s     r   r   r   )r4   r.   rI   r-   rJ   rK   rL   rY   rZ   BusyResourceErrorrM   rN   )r   r   r   rQ   s       r   test_double_server   O  s6     
$$))*:;;;$$&&'-- 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F?E(F?E+F? F3E.4(F E2<E0
=E2"F#F?.F/F?FF? F%0F!1F%F?F#F?	G(F?+F?.F0E22
F <FF?F	FF	F?!F%#F?%F<	+F.,F<	8F??
G	Gc                *  #    [        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       U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   rf   )r   r   r4   r.   rI   r-   r   rX   r=   r@   r   )r   r$   rz   r   r   r   r   s          r   test_connect_to_non_serverr   a  s      
BIIK	w
gnn!!"2333$oognn&@&@&BJOG&&((( % &&&& !+3 ) %$ !+
so   %DDC1CC1,>C *C
+C /C1D	DC1C  
C.*C11
C?	;D
DDbuffer_sizer      c                n  #    [        5       nUR                  5         [        US9 IS h  vN u  pV[        US9 nUR                  U:X  d   eUR                  Xb5      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  GNQ N N N} NE N/! , (       d  f       N,= f N#! , IS h  vN  (       d  f       g = f7f)Nrg   )incoming_packets_buffer      s   buffer clear now)r   r   rR   r4   r   rX   r   rA   r   r   r-   rt   
statistics incoming_packets_dropped_in_trior]   )r   r   r$   r   rz   r   r`   ra   r   r   statss              r   test_incoming_buffer_overflowr   o  sP     
BIIK:66,1k:o"::kIII$,,WAF;+,kk#a&--/222jjm## - %%'E99R???;'#^^--Q@@@ (++1222))-@@@@ ; 766
 3# .2) ;: 7666s   (F5E;F5FA FE>
F8F 
9AFF
F&F>F?FF
F"F*F55F6F5>F FFFF
F	FF5F2!F$"F2.F5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[        US9 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_recordr   )msg_typemsg_lenmsg_seqfrag_offsetfrag_lenfrag)content_typeversionepoch_seqnorv                r   r   #      rg   r*   r   r   )r   r   
trio._dtlsr   r   r   r   r   r   r   	handshakeDTLS10client_hellobytes	bytearrayrR   r-   r.   r1   sendtort   )r   r   rz   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   r`   r3   
bad_packets                          r   *test_server_socket_doesnt_crash_on_garbager     s     
BIIK   !$..#**-!*77 !r			
L$ )72%cr* ,Sb 1&/&=#*.#B'+$..#**-!*77 !r			
$ ,9$..#**-!*77 !r	 
		
,(& $$..#**		
O (5$..#***%/		
($  :66,1g[[T[[%;%;<%")/'40
 kk*g666jjm## = 766 7# =< 7666s   E=I?H! I9H:<%H'!H#
"H'?H%
 H'H:IH8I#H'%H''
H5	1H:8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        [        US9 IS h  vN u  pE [        5        nUR                  XR5      nUR                  5       I S h  vN   S S S 5        M>   NE 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   )rv   )rv   lenr   nextrN   attrsevolverx   )
rD   r   cookierv   offsetr   r   r   rz   offset_to_corrupts
        r   r|   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/rg   r   )r   r   r   r   r   r-   CancelScoper   r|   rR   r4   rX   r@   r   )r   r   r$   r|   r   r`   r   r   r   r   r   rz   r  s           @@@@@r   test_invalid_cookie_rejectedr    s      
BIIKC				v ""I	& 	&* '#z::lqZ6$nnWAG!..000    ; 1  Z ;::9 
		B """"sv   8D,C)+B1,C)/C=%B5"B3
#B5'
C1C)3B55
C?CC	CC	C) 	D)
C73Dc           	     ~  ^^	#    [        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                  X5      I S h  vN   [        S5        [
        R                  " 5        mUR                  UR                  R                  5       [        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       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Nq GNE 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 hellorU   )	r<   rN   r-   rt   rY   rZ   rB   r@   rA   )r   connect_cscope
first_times    r   r   Atest_client_cancels_handshake_and_starts_new_one.<locals>.handler3  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 connectrU   r   r   )r   r   r4   r.   rI   r-   rJ   rK   rL   r<   r  rX   r=   r!   r@   r   r]   rt   rM   rN   )
r   r   rz   rO   r   rQ   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)DmoV**,,, $ "222234nnV]]%>%>%@-/RG **h666 **R.    '')? '&  *2&" C
 - $# + != '&&&  *zs   %H=H,HGH1G"
2H5+H G%
!$HAG*	G(G*	A+H;G;
<#HG=
 H>H	G?
HH,	H=H"H%H(G*	*
G84H=H?HHH
HH
H)	%H,,
H:6H=c           	     Z  ^#    [        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                  X5      I S h  vN   UR                  UR                  U T5      I S h  vN   UR                  UR                  R                  5       [        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       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N| GN4 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r   )rA   )r   rD   s     r   rE   -test_swap_client_server.<locals>.echo_handlerW  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r   )rY   rZ   r-   rB   )r   rE   s    r   crashing_echo_handler6test_swap_client_server.<locals>.crashing_echo_handler[  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   )r4   r.   rI   r-   rJ   rK   rL   rX   r=   r!   rA   r]   r@   rY   rZ   rB   rM   rN   )r   abr  rQ   b_to_aa_to_brE   s          @r   test_swap_client_serverr  R  s    	q(*hhmm,---hhmm,---	+	, $$&&'--KKK--\BBBYYqxx335}GF++n---))^;;;YYqxx335}GF%%'''t778kk"7888 9++n---))^;;;  '') '& %-- 'KB .) (8 98-) '&&& %*sA  J+JJ	H?"J	I*J	I
J	
 I/*I
+$I/I
A
I/I
I/2I
3AI/I
(I/+I	 II	I/!I)
"I/9I+
:$I/J	)I-*J	.J6	J+?J	J	J	I/I/I/I/I/I	
I&"I/+I/-J	/J5I86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        [        U S9 IS h  vN u  nm[	        5        m[
        R                  " 5        IS h  vN nS	U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<   rx   rD   
blackholedrz   s    r   r|   @test_openssl_retransmit_doesnt_break_stuff.<locals>.route_packet}  s/    "F+ &) 	&!r   rg   c                    >#    TR                  T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)rX   r@   rA   r]   )r   r`   r$   ra   s    r   	connecter=test_openssl_retransmit_doesnt_break_stuff.<locals>.connecter  se     ,44WjIF ---MMM ++e,,,!'!11U::: N,1s3   %A+A%A+A'A+A)A+'A+)A+g?Fr   r   rG   rH   )r   r   r|   rR   r4   r-   rJ   r   rt   r.   r   r=   )
r   r$   r|   r   rQ   r   r`   r  ra   rz   s
    `    @@@@r   *test_openssl_retransmit_doesnt_break_stuffr#  q  s     
BIIKJ" " #BO:66:T?GZ?((**g; ; ""9- jjo%% #
%,,33#**668  ! +*  766* &! +*** Z 7666s   :E#DE#E	D6-D
.D615D&D
'=D$D
%D)D64D5D69E	E#EE#D6DDD6D3"D%#D3/D66
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        [        US9 IS h  vN u  p4S H~  n[	        5        n[
        R                  " 5       nSm
UR                  U[        5       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)rx   r  s    r   r|   Ctest_initial_retransmit_timeout_configuration.<locals>.route_packet  s    Jf%r   rg   )r   r      r  r   )
r   r   r|   rR   r4   r-   current_timerX   r!   r@   )r   r   r|   r   r`   tr   beforer   afterr  rz   s             @@r   -test_initial_retransmit_timeout_configurationr,    s      
BIIKJ& & #BO:66,1Av**,!
 ..-/B**a*HHH))+~***   766 I	  7666sp   :DCDC2ACC
#C=C2	DC0DC
C-(C20D2D	8C;9D	Dc                &  ^^#    Sm[        5       mTR                  5         SUU4S jjnUTl        [        TU S9 IS h  vN u  p4[	        5        nUR                  XA5      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   rv   rx   )rD   MTUrz   s    r   r|   9test_explicit_tiny_mtu_is_respected.<locals>.route_packet  sP    F8$%s6>>23456>>"c)))
&!r   )r6   r   r  r   )
r   r   r|   rR   r4   rX   r?   r@   rA   r]   )	r   r$   r|   _serverr`   r   r   r0  rz   s	          @@r   #test_explicit_tiny_mtu_is_respectedr3    s     
 C	BIIK" " #BOCJ??CUGZ6nnW9G&&s+&&(((,,u%%% **e333  @?? )%* Z @???s   ;DC DC76C$CC$C  C$7C"8
C$C7DC5DC$ C$"C$$
C2	.C75D7D=D >D
Dc                ,  ^	^
#    [        5       m	T	R                  5         U (       a  SOSm
S	U	U
4S jjnUT	l        [        XS9 IS h  vN u  pV[	        U S9 nUR                  Xc5      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   rv   r<   rx   )rD   rz   r6   s    r   r|   @test_handshake_handles_minimum_network_mtu.<locals>.route_packet  s@    v~~$IfX&'Kx()f%r   rT   r8   i'  r   i(#  r   )
r   r   r|   rR   r4   rX   r?   rA   r]   r\   )r%   r   r   r$   r|   r   r`   ra   r   rz   r6   s            @@r   *test_handshake_handles_minimum_network_mtur7    s      
BIIK)C& & #BO
  TAA\a4 O$,,WAF %%d+++f%%%))V333++-444 ! BAA &) !  BAAAs   ADC!DC:7C'C#C'&C%' C'C:DC8D#C'%C''
C5	1C:8D:D DDDz$always:unclosed DTLS:ResourceWarningc                  ^ #    [         R                  R                  5       R                  nSU 4S j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       T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   )r4   r-   r.   r1   rI   rX   r=   rJ   r   r@   testingwait_all_tasks_blockedrM   rN   lowlevelcurrent_statisticstasks_living)er   crQ   during_tasksr$   s        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D8=ED:E=E D<E 6ED>E2E+8E:E<E >E E	E	E	E
E($E+)rG   int)
r-   r<  r=  r>  rY   warnsResourceWarningr:  r;  r   )r$   before_tasksrB  rA  after_taskss   `    r   !test_system_task_cleaned_up_on_gcrI    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C8C4%C8?C6 C8)D7D	8<D4C86C88
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r   )r4   rY   rE  rF  r   r-   r:  r;  r?  s    r   !test_gc_before_system_task_startsrL  (  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   r   r4   r.   rI   _ensure_receive_loopr-   r:  r;  r1   r   r=   rY   rE  rF  r   )rz   r?  r   s      r   test_gc_as_packet_receivedrO  3  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r   )r   r   r4   )rz   s    r   main&test_gc_after_trio_exits.<locals>.mainJ  s     
 Y
		zs   %')rG   r   )r-   runrY   rE  rF  r   )rR  r?  s     r   test_gc_after_trio_exitsrU  H  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r   )r4   r.   r   r-   r:  r;  rK  s    r   'test_already_closed_socket_doesnt_crashrW  Y  sE     	q 	
ll11333 

 	4 
s.   A*<A	A
A	A*A
A'#A*c                  ^^#    [        5       mTR                  5         [        US9 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                  X25      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)Nrg   c                \   > TR                  U 5        TR                  R                  5         g r   )rx   r.   r   )rD   rz   rO   s    r   r|   Etest_socket_closed_while_processing_clienthello.<locals>.route_packetl  s!    f%MM!r   r   r   )	r   r   rR   r|   r4   r-   r   rX   r@   )	r   r   r$   r`   r|   ra   r   rz   rO   s	          @@r   /test_socket_closed_while_processing_clienthellor[  b  s      
BIIK  :66:K67	" 	" 'Z?##B'(00E))+++ (  766 , (' Z 7666s   (C2B0C2CC%%B4
B2
B4CCC2*C+C22B44
C>C
C	CC2C/C!C/+C2c           	       ^	#    [        5       nUR                  5         SS jnX2l        [        US9 IS h  vN u  pE[	        5        nUR                  U[        5       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       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 NK 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 r   r#   rD   s    r   r|   Gtest_association_replaced_while_handshake_running.<locals>.route_packet~  s    r   rg   c                    >#    [         R                  " [        R                  5         T R	                  5       I S h  vN   S S S 5        g  N! , (       d  f       g = f7fr   )rY   rZ   r-   rB   r@   )c1s   r   doomed_handshakeKtest_association_replaced_while_handshake_running.<locals>.doomed_handshake  s=     t'?'?@ oo/// A@/ A@s,   %AAA
A	A
A
AAr   r   r"  )r   r   r|   rR   r4   rX   r!   r-   rJ   r   rt   )
r   r   rz   r|   r   r`   ra   rQ   rb  ra  s
            @r   1test_association_replaced_while_handshake_runningrd  x  s      
BIIK #O:66,1Z? ((-/BB((**g0 ""#34jjn$$''A +*  766 + % +*** Z 7666s   3E	C:E	D/4D;C<
<D?3D2C>
3DDD D!D/)E	4D-5E	<D>D DDD	DD
D*	&D/-E	/E5D86EE	c                :  #    [        5       nUR                  5         SS jnX!l        [        U S9 IS h  vN u  p4[	        5        nUR                  U[        5       5      nUR                  U[        5       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r   )AssertionErrorr^  s    r   r|   Gtest_association_replaced_before_handshake_starts.<locals>.route_packet  s    r   rg   )rD   r   rG   r   )r   r   r|   rR   r4   rX   r!   rY   rZ   r-   rB   r@   )r   rz   r|   r   r`   ra   ra  s          r   1test_association_replaced_before_handshake_startsri    s      
BIIK #O:66,1Z? ((-/BB##G]_=t778oo''' 9	  766 ( 98	 Z 7666s   3DCDDAC.C3C
4C8C. DDC?DC
C+'C..
C<	8D?DDD
DDc           	       #    [        U S9 IS h  vN u  p[        5        n[        R                  " 5        IS h  vN n[	        SS5       H:  nUR                  SU4[        5       5      nUR                  UR                  5        M<     UR                  U[        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                  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)Nrg   r   r   r9   r   )rR   r4   r-   rJ   r   rX   r!   r   r@   rA   r]   rM   rN   )r   r   r`   ra   rQ   r   r   s          r   test_send_to_closed_local_portrk    s      :66,1Z?((**gq"A-55{A6FXG&&w';';< & *11'=?Kll6***$__..&888$$++- +*  766*
 +. +*** Z 7666s   E0DE0EED!
EA9D)8D#
9D)D%
$D)5E D'EEE0EE0!E#D)%D)'E)E /D20E <E
E	EE0E-EE-)E0)rG   SSL.Context)r2   z
int | boolrG   r   )
r   rl  r5   boolr6   z
int | Noner%   rm  rG   z:AsyncGenerator[tuple[DTLSEndpoint, tuple[str, int]], None])r%   rm  r   rl  r$   rl  rG   rH   )r   ztrio.testing.MockClockr   rl  rG   rH   )r   rl  r$   rl  rG   rH   )r   rl  rG   rH   r"  )r   trio.abc.Clockr$   rl  rG   rH   )
r   rn  r   rl  r$   rl  r   rD  rG   rH   )r   rn  r   rl  rG   rH   )r   rn  r   rl  r$   rl  rG   rH   )
r%   rm  r   rn  r   rl  r$   rl  rG   rH   )r$   rl  rG   rH   )K
__future__r   ru   
contextlibr   	itertoolsr   typingr   r   r   rY   trio._tests.pytest_pluginr   trustmeOpenSSLr	   ImportErrorerrorr-   trio.testingr
   r   trio.testing._fake_netr   r   _core._tests.tutilr   r   r   collections.abcr   CAr   
issue_certr   fixturer   r!   r$   markparametrizeparamparametrize_ipv6r4   rR   rd   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r#  r,  r3  r7  filterwarningsrI  rL  rO  rU  rW  r[  rd  ri  rk  r#   r   r   <module>r     s   "  *  *   A'
   * 5 D D.ZZ\mmM*     ;;**

FLLZ01	 +  (  %.%. %. 
	%.
 %. @%. %.P L
L'L5@L	L L@ V"*V"V" 
V" V"r	4	4)4	4		412"")4"	"(Y>*$'"'0;'	' R1A"AA A 	A
 
A 2A.o$"o$0;o$	o$d)#")#0;)#IT)#	)#X**"**0;**	**Z*> 00)40	0 0l+"+0;+	+844)44	46 !5
!5"!5 !5 	!5
 
!5 !5H BC ' D 'F BC0 D0 BC D( BC D 4,",0;,IT,	,,B"B0;B	B8((	(*.s  '&&'s   
J( (K.J<<K