
    ,h	                       d dl mZ d dlZd dlmZ d dlmZ d dlmZm	Z	 d dl
Z
d dlZd dlmZ 	 d dlZd dlmZ d dlZd dlZd dlmZmZ d d	lmZmZ d
dlmZmZmZ erd dlmZ  ej@                         Z!e!jE                  d      Z# ejH                  ejJ                        Z&e#jO                  e&        ejH                  ejJ                        Z(e!jS                  e(       ejT                  jW                  dd ejX                  de      gddg      Z-d4dZ.edddd	 	 	 	 	 	 	 d5d       Z/e-d6d       Z0e	 	 	 	 d7d       Z1d8dZ2d8dZ3d8dZ4d8dZ5d8dZ6d8dZ7d8dZ8d9d Z9d9d!Z:	 	 	 	 d9d"Z;d9d#Z<	 	 	 	 d9d$Z=d8d%Z>ed8d&       Z?	 	 	 	 d9d'Z@d8d(ZAe-	 	 	 	 	 	 d:d)       ZBejT                  j                  d*      d8d+       ZDejT                  j                  d*      d8d,       ZEejT                  j                  d*      d8d-       ZFejT                  j                  d*      d8d.       ZGd8d/ZH	 	 	 	 d9d0ZI	 	 	 	 d9d1ZJd8d2ZKd8d3ZLy# e$ rZ ee       Y dZ[!dZ[ww xY w);    )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                    | j                  dd      }|rt        j                  j                  nt        j                  j                  }t        j                  j                  t        j                  j
                  |      }t        |fi | S )Nr   F)typefamily)poptriosocketAF_INET6AF_INET
SOCK_DGRAMr   )kwargsr   r   socks       W/var/www/html/Resume-Scraper/venv/lib/python3.12/site-packages/trio/_tests/test_dtls.pyendpointr#   /   sb    ::fe$D%)T[[!!t{{/B/BF;;4;;#9#9&ID'''    )
autocancelmtur   c                 K   t        |      5 }|rdnd}|j                  j                  |df       d {    t        j                         4 d {   }dfd}|j                  |j                  t        |       d {    ||j                  j                         f | r|j                  j                          d d d       d {    d d d        y 7 7 7 \7 # 1 d {  7  sw Y   #xY w# 1 sw Y   y xY ww)Nr   z::1	127.0.0.1r   c                  K   t        d| j                  j                  j                         d| j                         | j                         	 t        d       | j                          d {    t        d       | 2 3 d {   }t        d|d| j                         | j                  |       d {    >7 O7 ;7 	6 y # t        j                  $ r t        d       Y y w xY ww)Nzecho handler started: server z client zserver starting do_handshakezserver finished do_handshakezechoing  -> zecho handler channel broken)
printr#   r   getsocknamepeer_addressset_ciphertext_mtudo_handshakesendr   BrokenResourceError)dtls_channelpacketr&   s     r"   echo_handlerz&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 )5 8 8f
$|7P7P6STU*//777 687 )5 // 9789sl   AC/C 3C4C C		C
C	0C =C>C C	C 	C 
C/C,)C/+C,,C/)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_serverrB   6   s      
t	 .!E{	mm  )Q000$$& 	. 	.'9( --j,GGG&--33555$$++-7	. 	.. .0	., H-	. 	. 	. 	.. .s   D'C9CC9CC9+C$C ?C$C9C"C9	DC9C9 C$"C9$C6	*C-+C6	2C99D>Dc                $  K   t        |       4 d {   \  }}t        |       5 }|j                  |t              }t	        j
                  t        j                        5  |j                          d d d        |j                          d {    |j                  d       d {    |j                          d {   dk(  sJ |j                  d       d {    |j                          d {   dk(  sJ t	        j
                  t        d      5  |j                  d       d {    d d d        |j                  d       |j                         }|j                  d       |j                         |kD  sJ |j                  d       |j                         |k(  sJ 	 d d d        d d d       d {    y 7 # 1 sw Y   UxY w7 E7 /7 7 7 7 # 1 sw Y   xY w# 1 sw Y   ExY w7 <# 1 d {  7  sw Y   y xY ww)	Nr(      hellos   goodbyez4^openssl doesn't support sending empty DTLS packets$matchr$   i  i  )rB   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_smokerT   ^   s    T* L L.I/?4  	LO,44WjINt667 30023 !--/// %%h///'//11X== %%j111'//11Z??M / %))#...	/ --d3!/!A!A!C--d3!3358JJJ--d3!3359KKKK-	LL L L3 3 0/111 /	/ /	L 	LL L L Ls   HGHG;:G-!G2G-GG-&G'G->G?G-GG-4G5$G-G!.G
/G!3A5G-)G;1H<G9=HG
	G-G-G-G-G-G!!G*&G--G6	2G;9H;HHH	Hc           
       
K   d}t        j                  d      t               

j                          d| _        t               4 d {   \  }}t        j                         4 d {   d

fdd
fd}|
_        t        |      D ]  }t        d       t        d       t        d       t               5 }|j                  |t              }t        d       |j                          d {    t        d       t        |      j!                         }	 t        j"                  d	      5 }	|j%                  |       d {    |j'                          d {   |k(  sJ 	 d d d        	j(                  snc	 d d d         d d d       d {    d d d       d {    y 7 a7 D7 7 l7 V# 1 sw Y   OxY w# 1 sw Y   >xY w7 :# 1 d {  7  sw Y   JxY w7 A# 1 d {  7  sw Y   y xY ww)Nd   r   gMbP?c                  K   	 j                  g dg d      d   }t        | j                   d| j                   d|        |dk(  ry |dk(  rj	                  |        n|d	k(  r/t        j                  j                         d
z         d {    nX|dk(  sJ t        | j                   d| j                   d| j                  j                                 j                  |        y 7 ^w)N)deliverdropdupedelay)gffffff?皙?r\   r\   )weightsr   r+   z: rY   rZ   r[      rX   z: delivered )choicesr,   sourcedestinationsend_packetr   sleeprandompayloadhexdeliver_packet)r4   opfnrs     r"   route_packetz: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C2C0AC2c                J    	 j                  |        y # t        $ r Y y w xY wN)
start_soonRuntimeError)r4   rA   rk   s    r"   route_packet_wrapperzBtest_handshake_over_terrible_network.<locals>.route_packet_wrapper   s,    &&|V<#  s    	""zP################################################################################zclient starting do_handshakezclient finished do_handshake
   r4   r   r6   r7   )rd   Randomr   enableautojump_thresholdrB   r   r9   rk   ranger,   r#   rG   rH   r0   strencodemove_on_afterr1   rM   cancelled_caught)autojump_clock
HANDSHAKES_rP   rp   irQ   clientmsgcscoperi   rA   rj   rk   s             @@@@r"   $test_handshake_over_terrible_networkr   z   s     JaA	BIIK(-N%! K" K"\a$$& J	" J	"'+Z 3BO:& "hhhZ "?,44WjIF89 --///89a&--/C !//3 Av"(++c"222)/)9#9S#@@#@A  &66! 
 "" "	"sJ	" J	"K" K" K"J	"@ 0 3#9A A" "{J	" J	" J	" J	"K" K" K" K"s   AHF.HG,-F1.G,1AG 5G	5F46>G	4F:	F6
F:!F8"	F:,G	
GG,GG,H(G*)H1G,4G	6F:8F::G?G	GGG,G'	GG'	#G,*H,G>2G53G>:Hc                 j  K   t               4 d {   \  } }t               5 }|j                  |t              }|j	                  d       d {    |j                          d {   dk(  sJ 	 d d d        d d d       d {    y 7 x7 =7 '# 1 sw Y    xY w7 # 1 d {  7  sw Y   y xY ww)N   xyz)rB   r#   rG   rH   r1   rM   r}   rP   rQ   r   s       r"   test_implicit_handshaker      s     ! 4 4\aZ 	4?$,,WjAF ++f%%%))V333	44 4 4
 &)	4 	44 4 4 4s   B3B
B3B+BBB&B'	B1B9B3BB3BBB	BB3B0$B'%B0,B3c            
     J  K   t               5 } t               5 }| j                  j                  d       d {    t        j                         4 d {   }dd}|j                  | j                  t        |       d {    |j                  | j                  j                         t              }t        j                         4 d {   }|j                  |j                  d       |j                  |j                         d d d       d {    |j                  j                          d d d       d {    d d d        d d d        y 7 7 7 7 7 I# 1 d {  7  sw Y   YxY w7 6# 1 d {  7  sw Y   FxY w# 1 sw Y   JxY w# 1 sw Y   y xY ww)Nr)   r   c                  K   t        j                         4 d {   }|j                  | j                  d       |j                  | j                         d d d       d {    y 7 L7 # 1 d {  7  sw Y   y xY ww)Ns   from server)r   r9   rn   r1   rM   )channelrA   s     r"   handlerz!test_full_duplex.<locals>.handler   si     ,,. 8 8'&&w||^D&&w78 8 8 8 8 8 8sD   BA(B8A,B"A*#B*B,A>2A53A>:Bs   from clientr   r
   r6   r7   )r#   r   r8   r   r9   r:   r;   r<   rG   r-   rH   rn   r1   rM   r=   r>   )server_endpointrQ   server_nurseryr   r   rA   s         r"   test_full_duplexr      sk     
 1
 1o$$))*:;;;$$& 	1 	1.8
 !&&'<'<j'RRR$,,&&224F ((* 3 3g""6;;?""6>>23 3 ''..0#	1 	11 1 1;	1 S3 3 3 3 3	1 	1 	1 	11 1 1 1s   F#FFEFE
F)E6E
A
E6EE68E	E6E
E62F=E4>FF
	F#FFE6E6E6E1%E(&E1-E64F6F<E?=FFF	FF F#c                   K   t               4 d {   \  } }t               5 }|j                  |t              }|j	                          d {    |j                          t        j                  t        j                        5  |j                  d       d {    d d d        t        j                  t        j                        5  |j                          d {    d d d        |j                          |j                          d {    d d d        d d d       d {    y 7 7 7 # 1 sw Y   xY w7 `# 1 sw Y   _xY w7 ># 1 sw Y   =xY w7 4# 1 d {  7  sw Y   y xY ww)N   abc)rB   r#   rG   rH   r0   closerI   rJ   r   ClosedResourceErrorr1   rM   acloser   s       r"   test_channel_closingr      s,    ! " "\aZ 	"?$,,WjAF%%'''LLNt778 *kk&)))*t778 'nn&&&' LLN--/!!	"" " " ( ** * '' ' "	" 	"" " " "s   E2D,E2E*ED/7ED3D1
D3+E
ED?
E#+EEEEE2&E'E2/E1D33D<8E?EE
EE	EE2E/#E&$E/+E2c                    K   t        d      4 d {   \  } }| j                          d d d       d {     j                          y 7 87 # 1 d {  7  sw Y   'xY ww)NF)r%   )rB   r   )r   _addresss     r"   !test_serve_exits_cleanly_on_closer     s^     51    5Pox    	         sA   A%AA%AA%AA%A%A"AA"A%c            
       K   t               4 d {   \  } }t               4 d {   \  } }t               5 }|j                  |t              }|j                  |t              }|j	                  d       d {    |j	                  d       d {    |j                          d {   dk(  sJ |j                          d {   dk(  sJ |j                          t        j                  t        j                        5  |j	                  d       d {    d d d        t        j                  t        j                        5  |j                          d {    d d d        t        j                  t        j                        5  |j                  |t               d d d        dd}t        j                         4 d {   }t        j                  t        j                        5  |j                  |j                  t        |       d {    d d d        d d d       d {    d d d        d d d       d {    d d d       d {    y 7 K7 87 7 7 7 7 T# 1 sw Y   TxY w7  # 1 sw Y    xY w# 1 sw Y   xY w7 7 # 1 sw Y   xY w7 {# 1 d {  7  sw Y   xY w# 1 sw Y   xY w7 # 1 d {  7  sw Y   xY w7 # 1 d {  7  sw Y   y xY ww)Nr   r      xxxc                   K   y wrm    r}   s    r"   null_handlerz+test_client_multiplex.<locals>.null_handler$  s	        r}   objectr6   r7   )rB   r#   rG   rH   r1   rM   r   rI   rJ   r   r   r9   r:   r;   r<   )r}   address1address2rQ   client1client2r   rA   s           r"   test_client_multiplexr     s    ! Y Y]a4D4F Y Y-1hZ 	Y?%--h
CG%--h
CG,,v&&&,,v&&& **f44 **f44!!#t778 +ll6***+t778 (oo'''(t778 >''*=> ((* Y Yg]]4#;#;< Y!--(=(=z<XXXYY Y+	YY Y Y Y Y Y
 '&**
 ++ + (( (> >YXY YY Y Y Y+	Y 	YY Y Y Y Y Y Y Ys  K;IK;K&IK&KAK:I"
;KI%
K+I(
,KI+
	<KI1	I.I1	+K
J	I>J	#+KJ	%$K	J
K$J,	1%JJJJ,	#K.J*
/K3K;K&KK&K;K$K;K&"K%K(K+K.I1	1I;6K>J	JKJKJJ'#J,	*K,J>2J53J>:KK
KK&K!	KK!	K&$K;&K8,K/-K84K;c                    K   t         j                  j                         5 } t        j                  t        d      5  t        |        d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY ww)Nz#^DTLS requires a SOCK_DGRAM socket$rE   )r   r   rI   rJ   rN   r   )ss    r"   test_dtls_over_dgram_onlyr   ,  s\     				 ]]:-ST 	O	 	 	 s3   A2A&A	A&	A2A#	A&&A/+A2c                   K   dd} t               5 }|j                  j                  d       d {    t        j                         4 d {   }|j                  |j                  t        |        d {    t        j                  t        j                        5  |j                  |j                  t        |        d {    d d d        |j                  j                          d d d       d {    t        j                         4 d {   }|j                  |j                  t        |        d {    |j                  j                          d d d       d {    d d d        y 7 C7 )7 7 # 1 sw Y   xY w7 # 1 d {  7  sw Y   xY w7 7 g7 ?# 1 d {  7  sw Y   OxY w# 1 sw Y   y xY ww)Nc                   K   y wrm   r   r   s    r"   r   z'test_double_serve.<locals>.null_handler3  s	     r   r   r   )r#   r   r8   r   r9   r:   r;   r<   rI   rJ   BusyResourceErrorr=   r>   )r   r   rA   s      r"   test_double_server   2  s{     
 *$$))*:;;;$$& 	* 	*'-- 5 5z<PPPt556 UmmO$9$9:|TTTU   '')	* 	* $$& 	* 	*'-- 5 5z<PPP  '')	* 	** *;	*PTU U	* 	* 	* 	*	*P	* 	* 	* 	** *s  GF<E3F<E6F<%F6E97'F%E>E<
E>"F*F<5F
6F<F!F<%F';F#<F'F<%F%&F<*	G3F<6F<9F<E>>FF
F<F	FF	F<#F'%F<'F9	-F0.F9	5F<<GGc                  K   t               }|j                          t               5 }t               5 }|j                  j	                  d       d {    t        j                  d      5 }|j                  |j                  j                         t              }|j                          d {    d d d        j                  sJ 	 d d d        d d d        y 7 7 .# 1 sw Y   -xY w# 1 sw Y   "xY w# 1 sw Y   y xY ww)Nr   rV   )r   rt   r#   r   r8   r   ry   rG   r-   rH   r0   rz   )r{   ri   r   r   r   r   s         r"   test_connect_to_non_serverr   D  s     	BIIK	 'w
 'gnn!!"2333$ 	)oognn&@&@&BJOG&&(((	) &&&&' ' '3 )	) 	)' ' ' 'sp   %DC6C*CC*+AC-C
.C2C*	C6	DC*CC'#C**C3	/C66C?;Dc           	     p  K   t               }|j                          dD ]a  }t               4 d {   \  }}t        |      5 }|j                  |k(  sJ |j                  |t              }t        |dz         D ]O  }|j                  t        |      j                                d {    t        j                  d       d {    Q |j                         }|j                  dk(  sJ t        |      D ]6  }|j                          d {   t        |      j                         k(  r6J  |j                  d       d {    |j                          d {   dk(  sJ 	 d d d        d d d       d {    d y 7 T7 7 7 |7 G7 1# 1 sw Y   *xY w7 !# 1 d {  7  sw Y   xY ww)N)rq      )incoming_packets_buffer      s   buffer clear now)r   rt   rB   r#   r   rG   rH   rv   r1   rw   rx   r   rc   
statistics incoming_packets_dropped_in_triorM   )	r{   ri   buffer_sizer}   rP   rQ   r   r~   statss	            r"   test_incoming_buffer_overflowr   P  s    	BIIK E#% 	E 	E!W+> E/&>>+MM(00*E{R/0 (A ++c!fmmo666**Q-''( ))+==CC{+ EA!'!11SV]]_DDEkk"5666#^^--1DDDDE	E 	E 	EE	E
 7' 26-E E	E 	E 	E 	Es   /F6FF6F A$F)F*FF
AFFF/FF
FF
	F)F 1F6<F=	F6F
FFFFFF F6 F3	&F)'F3	.F6c                  K   t               }|j                          ddlm}m}m}m}m}m}m	}  | ||j                  |j                  d | ||j                  ddddt        d                              }	|	dz   }
|	d d }|	d d }t        |	      }d	|d
<    | ||j                  |j                  d | ||j                  ddddt        d                              } | ||j                  |j                  d | ||j                  ddddt        d                  dz               } | ||j                  |j                  dd            } | ||j                  |j                  dt        d      dz               }t               4 d {   \  }}t         j"                  j#                  t         j"                  j$                        5 }dd|
|||||||f
D ]9  }|j'                  ||       d {    t!        j(                  d       d {    ; 	 d d d        d d d       d {    y 7 7 ?7 $# 1 sw Y    xY w7 # 1 d {  7  sw Y   y xY ww)Nr   )ContentTypeHandshakeFragmentHandshakeTypeProtocolVersionRecordencode_handshake_fragmentencode_recordrq   )msg_typemsg_lenmsg_seqfrag_offsetfrag_lenfrag)content_typeversionepoch_seqnore                r   r$   #      r   r   r   )r   rt   
trio._dtlsr   r   r   r   r   r   r   	handshakeDTLS10client_hellobytes	bytearrayrB   r   r   r   sendtorc   )r{   ri   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}   rP   r!   
bad_packets                         r"   *test_server_socket_doesnt_crash_on_garbager   c  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   FI$H;I$<I%I=H=
>IH?
I"I*I$5I6I$=I?II
	II$I!II!I$c                   	
K   t               		j                          ddlmm t        j                         5 t        d      
d	
fd}|	_        t               4 d {   \  }}	 t               5 }|j                  |t              }|j                          d {    d d d        B7 J7 # 1 sw Y   xY w# 1 d {  7  sw Y   nxY w	 d d d        n# 1 sw Y   nxY wj                  sJ y w)Nr   )	BadPacketdecode_client_hello_untrustedr   c                j   	  | j                         \  }}}t        |      dk7  rqt        | j                         }t        	      }|t        |      k\  rt        |      dz
  }j	                          ||xx   dz  cc<   t        j                  | |      } 	 j                  |        y # $ r Y w xY w)Nr   r   )re   )re   lenr   nextr>   attrsevolverg   )
r4   r}   cookiere   offsetr   r   r   ri   offset_to_corrupts
        r"   rk   z2test_invalid_cookie_rejected.<locals>.route_packet  s    C<V^^L61 v;!# (7G!"34FW- "%W!1FOt+O"\\&'BFf%!  s   B* *B21B2rr   )r   rt   r   r   r   r   CancelScoper   rk   rB   r#   rG   rH   r0   rz   )r{   rk   r}   rP   r   r   r   r   r   ri   r   s         @@@@@r"   test_invalid_cookie_rejectedr     s     	BIIKC				  1v ""I	& 	&* '#% 	1 	1!WZ 16$nnWjAG!..0001 	1 11 1	1 	1 	1 	19 1  1  1B """"sv   7C>+C#)B4*C#-C<*B8&B6
'B8+	C4C#6B88C=CC	
CC	C#	C>#C,(C>c           	     :  K   t               }|j                          t               5 }t               5 }|j                  j	                  d       d {    t        j                         4 d {   }ddfd}|j                  |j                  t        |       d {    t        d       t        j                         5 |j                  |j                  j                         t              }|j                          d {    d d d        j                   sJ t        d       |j                  |j                  j                         t              }|j#                          d {   dk(  sJ t        j$                  d       d {    |j&                  j)                          d d d       d {    d d d        d d d        y 7 ~7 d7 57 # 1 sw Y   xY w7 x7 X7 0# 1 d {  7  sw Y   @xY w# 1 sw Y   DxY w# 1 sw Y   y xY ww)	Nr   Tc                  K   rdt        d       j                          t        j                  d       d {    t        d       t	        j
                  t        j                        5  | j                          d {    d d d        y t        d       | j                  d       d {    y 7 y7 4# 1 sw Y   y xY w7 w)NFz'handler: first time, cancelling connectg      ?z"handler: handshake should fail nowz&handler: not first time, sending hellorD   )	r,   r>   r   rc   rI   rJ   r2   r0   r1   )r   connect_cscope
first_times    r"   r   zAtest_client_cancels_handshake_and_starts_new_one.<locals>.handler  s     !&JCD"))+**S/))>?t'?'?@ 5%224445 5 BC!,,x000 * 55 5 1sE   8CB52C.B9B7B9(C/C0C7B99C>Czclient: starting first connectzclient: starting second connectrD   rq   r   )r   rt   r#   r   r8   r   r9   r:   r;   r<   r,   r   rG   r-   rH   r0   rz   rM   rc   r=   r>   )	r{   ri   r?   r   rA   r   r   r   r   s	          @@r"   0test_client_cancels_handshake_and_starts_new_oner     s     
BIIK	 !*vxz !*Vmm  !1222$$& 	* 	*'J1 --j'BBB23!!# -~ ..)B)B)DjQ**,,,- "22234nnV]]%>%>%@*MG **h66 **R.    '')?	* 	*!* !* !*2	*" C
 -- - + !=	* 	* 	* 	*!* !* !* !*s   %HHHGH0G
1H4.G."G
##G.AG	G	G	A"G./G(
0!G.G*
G.0H;G,<H H	HHHG.G	G%!G.*G.,H.H 4G75H <HH	HHHc            	     &  K   t               5 } t               5 }| j                  j                  d       d {    |j                  j                  d       d {    dddfd}t        j                         4 d {   }|j                  | j                  t        |       d {    |j                  |j                  t               d {    |j                  | j                  j                         t              }|j                  d       d {    |j                          d {   dk(  sJ | j                  |j                  j                         t              }|j                          d {    t        j                  t        j                         5  |j                  d       d {    d d d        |j                  d       d {    |j                          d {   dk(  sJ |j"                  j%                          d d d       d {    d d d        d d d        y 7 7 7 7 7 q7 -7 7 7 # 1 sw Y   xY w7 7 k7 ># 1 d {  7  sw Y   NxY w# 1 sw Y   RxY w# 1 sw Y   y xY ww)Nr   c                `   K   | 2 3 d {   }| j                  |       d {    #7 7 6 y wrm   )r1   )r   r4   s     r"   r5   z-test_swap_client_server.<locals>.echo_handler1  s6      ' + +fll6***+* !(s(   .,(,.*.,..c                   K   t        j                  t        j                        5   |        d {    d d d        y 7 # 1 sw Y   y xY wwrm   )rI   rJ   r   r2   )r   r5   s    r"   crashing_echo_handlerz6test_swap_client_server.<locals>.crashing_echo_handler5  sD     t778 ,"7+++, ,+, ,s+   $AAAA	AAAAs   b as clients   association brokens   a as clientr   )r#   r   r8   r   r9   r:   r;   r<   rG   r-   rH   r1   rM   r0   rI   rJ   r2   r=   r>   )abr   rA   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 9kk"78889++n---))^;;  '')	* 	** * *--	*KB .) (89 9-)	* 	* 	* 	** * * *sA  JJI9H9"I9H<&I9H?
I9%I$+I
,(I$I
AI$I
I$3I
4A
I$>I
?'I$&I	;I<I	 I$I
I$4I 
5#I$I9#I"$I9(J0	J9I9<I9?I9I$I$I$I$I$I	II$ I$"I9$I6*I-+I62I99J	>JJ
Jc            	       K   t               j                          ddfd} | _        t               4 d {   \  }t	               5 t        j                         4 d {   }dfd}|j                  |       t        j                  d       d {    d|j                  j                  dj                  j                                d {    d d d       d {    d d d        d d d       d {    y 7 7 7 o7 37 %# 1 d {  7  sw Y   5xY w# 1 sw Y   9xY w7 0# 1 d {  7  sw Y   y xY ww)	NTc                ^    rt        d|        y t        d|        j                  |        y )Nzdropped packetzdelivered packet)r,   rg   r4   
blackholedri   s    r"   rk   z@test_openssl_retransmit_doesnt_break_stuff.<locals>.route_packetU  s/    "F+ &) 	&!r$   c                    K   j                  t              } | j                  d       d {    | j                  d       d {    | j	                          d {   dk(  sJ y 7 ;7 $7 w)Ng      ?initial_retransmit_timeout   hi)rG   rH   r0   r1   rM   )r   rP   rQ   s    r"   	connecterz=test_openssl_retransmit_doesnt_break_stuff.<locals>.connecteri  sh     ,44WjIF ---MMM ++e,,,!'!11U::: N,1s3   ,A1A+A1A-	A1 A/!A1-A1/A1g?Fr   rr   r6   r7   )r   rt   rk   rB   r#   r   r9   rn   rc   r   r   r-   )rk   r   rA   r  rP   r  rQ   ri   s       @@@@r"   *test_openssl_retransmit_doesnt_break_stuffr	  K  s0    
 
BIIKJ" #BO!  %?owZ 	?((*  g; ""9- jjo%% #
%,,33#**668  ! 	   &!   	 	   s   9ED ED8D**D
+D*.1DD
 =DD
D"D*-D.D*2D8:ED6ED*DDD*D'DD'#D**D3	/D86E8E
>E?E
Ec                  	
K   t               

j                          d	d	
fd}|
_        t               4 d {   \  }}dD ]z  }t	               5 }t        j                         }d	|j                  |t              }|j                  |       d {    t        j                         }||z
  |k(  sJ 	 d d d        | d d d       d {    y 7 7 @# 1 sw Y   xY w7 # 1 d {  7  sw Y   y xY ww)NTc                2    rdy j                  |        y )NF)rg   r  s    r"   rk   zCtest_initial_retransmit_timeout_configuration.<locals>.route_packet  s    Jf%r$   )r   r      r  rr   )
r   rt   rk   rB   r#   r   current_timerG   rH   r0   )r{   rk   r}   rP   tr   beforer   afterr  ri   s            @@r"   -test_initial_retransmit_timeout_configurationr    s      
BIIKJ& #BO! + +\a 	+A +v**,!
 ..*=**a*HHH))+v~***+ +	++ + + I	+ ++ + + +sp   9C<CC<C'ACC
"C:
C'C<C%C<CC"C'%C<'C9-C0.C95C<c                   K   dt               j                          dfd} | _        t              4 d {   \  }}t	               5 }|j                  |t              }|j                         |j                          d {    |j                  d       d {    |j                          d {   dk(  sJ 	 d d d        d d d       d {    y 7 7 V7 ?7 )# 1 sw Y   "xY w7 # 1 d {  7  sw Y   y xY ww)Ni,  c                    t        d|         t        dt        | j                                t        | j                        k  sJ j                  |        y )Ndelivering zpayload size: )r,   r   re   rg   )r4   MTUri   s    r"   rk   z9test_explicit_tiny_mtu_is_respected.<locals>.route_packet  sM    F8$%s6>>23456>>"c))
&!r$   )r&   r  rr   )r   rt   rk   rB   r#   rG   rH   r/   r0   r1   rM   )rk   _serverrP   r   r   r  ri   s        @@r"   #test_explicit_tiny_mtu_is_respectedr    s      C	BIIK" #BOC( 4 4,>WgZ 	46nnWj9G&&s+&&(((,,u%%% **e333	44 4 4 )%*	4 	44 4 4 4s   ;DC! DC7;C)C#C)%C%&C)=C'>	C)C7DC5D#C)%C)'C))C2	.C75D7D	=D >D	Dc                  K   t               j                          | rdnddfd}|_        t        |       4 d {   \  }}t	        |       5 }|j                  |t              }|j                  d       |j                  d       d {    |j                          d {   dk(  sJ |j                         dkD  sJ 	 d d d        d d d       d {    y 7 7 R7 <# 1 sw Y    xY w7 # 1 d {  7  sw Y   y xY ww)	Ni  i$  c                    t        | j                        kD  rt        d|         y t        d|         j                  |        y )Nz	dropping r  )r   re   r,   rg   )r4   ri   r&   s    r"   rk   z@test_handshake_handles_minimum_network_mtu.<locals>.route_packet  s@    v~~$IfX&'Kx()f%r$   r(   i'  r   i(#  rr   )r   rt   rk   rB   r#   rG   rH   r/   r1   rM   rL   )	r   r{   rk   r}   rP   rQ   r   ri   r&   s	          @@r"   *test_handshake_handles_minimum_network_mtur    s      
BIIK)C& #BO
  T* 	5 	5lq'4  	5O$,,WjAF %%d+++f%%%))V33++-444	5	5 	5 	5 &)	5 	5	5 	5 	5 	5s   ?DC$DC8<C*C&C*+C(,C*C8DC6D&C*(C**C3	/C86D8D
>D?D
Dz$always:unclosed DTLS:ResourceWarningc                   K   t         j                  j                         j                  } dd}t	        j
                  t              5   |        d {   }t         j                  j                          d {    t                d d d        t         j                  j                          d {    t         j                  j                         j                  }| k  sJ | |k(  sJ y 7 7 u# 1 sw Y   jxY w7 Kw)Nc                   K   t               } t        j                  j                  t        j                  j                        5 }|j	                  d       d {    | j                  |j                         t              }t        j                         4 d {   }|j                  |j                         t        j                  j                          d {    |j                  j                          d d d       d {    d d d        t        j                  j!                         j"                  }|S 7 7 7 d7 <# 1 d {  7  sw Y   LxY w# 1 sw Y   PxY ww)Nr   r   )r#   r   r   r   r8   rG   r-   rH   r9   rn   r0   testingwait_all_tasks_blockedr=   r>   lowlevelcurrent_statisticstasks_living)er   crA   during_taskss        r"   start_and_forget_endpointzDtest_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EE;EEE2E&=E?EEEE	EE	EE#E&)r6   int)
r   r  r   r!  rI   warnsResourceWarningr  r  r   )before_tasksr%  r$  after_taskss       r"   !test_system_task_cleaned_up_on_gcr+    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C?C1C-%C19C/:C1)C?1C=2;C?-C1/C11C:6C?c                    K   t               } t        j                  t              5  ~ t	                d d d        t
        j                  j                          d {    y # 1 sw Y   0xY w7 wrm   )r#   rI   r'  r(  r   r   r  r  r"  s    r"   !test_gc_before_system_task_startsr.    sT     
A	o	&  ,,
-
-
///	  0s'   $A/A!)A/A-A/!A*&A/c                   K   t               } | j                          t               }|j                  j	                  d       d {    |j                          t        j                  j                          d {    t        j                  j                  t        j                  j                        5 }|j                  d|j                  j                                d {    d d d        t        j                  t              5  ~t                d d d        y 7 7 7 ># 1 sw Y   =xY w# 1 sw Y   y xY ww)Nr   r   r   )r   rt   r#   r   r8   _ensure_receive_loopr   r  r  r   r   r-   rI   r'  r(  r   )ri   r"  r   s      r"   test_gc_as_packet_receivedr1    s     	BIIK
A
((--(
)))
,,
-
-
///			!7!7		8 7Ahhvqxx3356667
 
o	&   * 0 	77 7
 sf   AD?D!5D?;D#<<D?8.D'&D%'D'+!D?D3
D?#D?%D''D0,D?3D<8D?c                     dd} t        j                  |       }t        j                  t              5  ~t                d d d        y # 1 sw Y   y xY w)Nc                 R   K   t               } | j                          t               S wrm   )r   rt   r#   )ri   s    r"   mainz&test_gc_after_trio_exits.<locals>.main  s      
 Y
		zs   %')r6   r   )r   runrI   r'  r(  r   )r4  r"  s     r"   test_gc_after_trio_exitsr6    s@     	A	o	&   s   AAc                    K   t               5 } | j                  j                          t        j                  j                          d {    d d d        y 7 # 1 sw Y   y xY wwrm   )r#   r   r   r   r  r  r-  s    r"   'test_already_closed_socket_doesnt_crashr8  -  sR     	 4q 	
ll113334 4
 	44 4s.   A%<A	A
A	A%AA"A%c                  K   t               j                          t               4 d {   \  }dfd}|_        t	               5 }t        j                  d      5  |j                  |t              }|j                          d {    d d d        d d d        d d d       d {    y 7 7 '# 1 sw Y   &xY w# 1 sw Y   *xY w7 !# 1 d {  7  sw Y   y xY ww)Nc                \    j                  |        j                  j                          y rm   )rg   r   r   )r4   ri   r?   s    r"   rk   zEtest_socket_closed_while_processing_clienthello.<locals>.route_packet@  s!    f%MM!r$   rq   rr   )
r   rt   rB   rk   r#   r   ry   rG   rH   r0   )r{   rP   rk   rQ   r   ri   r?   s        @@r"   /test_socket_closed_while_processing_clienthellor;  6  s      
BIIK  ! , ,%6fg	" 'Z 	,?##B' ,(00*E))+++,	,, , , ,, ,	, 	,, , , ,s   )C&B3C&CC#*B7B5
B7CC"C&-C.C&5B77C <CC	CC&C#CC#C&c           	     d  K   t               }|j                          dd}||_        t               4 d {   \  }}t	               5 }|j                  |t              t        j                         4 d {   }dfd}|j                  |       t        j                  d       d {    |j                  |t               d d d       d {    d d d        d d d       d {    y 7 7 y7 G7 ## 1 d {  7  sw Y   3xY w# 1 sw Y   7xY w7 .# 1 d {  7  sw Y   y xY ww)Nc                     y rm   r   r4   s    r"   rk   zGtest_association_replaced_while_handshake_running.<locals>.route_packetR  s    r$   c                    K   t        j                  t        j                        5   j	                          d {    d d d        y 7 # 1 sw Y   y xY wwrm   )rI   rJ   r   r2   r0   )c1s   r"   doomed_handshakezKtest_association_replaced_while_handshake_running.<locals>.doomed_handshake\  sF     t'?'?@ 0 oo///0 0/0 0s,   $AAA	A 	A	AAArq   rr   r  )r   rt   rk   rB   r#   rG   rH   r   r9   rn   rc   )	r{   ri   rk   r}   rP   rQ   rA   rA  r@  s	           @r"   1test_association_replaced_while_handshake_runningrB  L  s     
BIIK #BO! = =\aZ 	=? ((*=B((* 
= 
=g0 ""#34jjn$$''<
= 
=	== = =
= %
= 
= 
= 
=	= 	== = = =s   4D0C0D0D	/D8C2
9D<0C8,C4
-C8DC6DDD0*D+D02D4C86D8D
>D?D
DD	DD0D-!D$"D-)D0c                   K   t               } | j                          dd}|| _        t               4 d {   \  }}t	               5 }|j                  |t              }|j                  |t               t        j                  t        j                        5  |j                          d {    d d d        d d d        d d d       d {    y 7 7 '# 1 sw Y   &xY w# 1 sw Y   *xY w7 !# 1 d {  7  sw Y   y xY ww)Nc                    t               rm   )AssertionErrorr>  s    r"   rk   zGtest_association_replaced_before_handshake_starts.<locals>.route_packetl  s    r$   )r4   r   r6   r   )r   rt   rk   rB   r#   rG   rH   rI   rJ   r   r2   r0   )ri   rk   r}   rP   rQ   r@  s         r"   1test_association_replaced_before_handshake_startsrF  g  s     	BIIK #BO! ( (\aZ 	(? ((*=B##GZ8t778 (oo'''(	(( ( (
 (( (	( 	(( ( ( (s   4DCDC0AC"C,C
-C1C"9C0DC.DCCC""C+	'C0.D0D6C97D>Dc            	       K   t               4 d {   \  } }t               5 }t        j                         4 d {   }t	        dd      D ]5  }|j                  d|ft              }|j                  |j                         7 |j                  |t              }|j                  d       d {    |j                          d {   dk(  sJ |j                  j                          d d d       d {    d d d        d d d       d {    y 7 7 7 i7 S7 &# 1 d {  7  sw Y   6xY w# 1 sw Y   :xY w7 1# 1 d {  7  sw Y   y xY ww)Nr   rq   r)   r   )rB   r#   r   r9   rv   rG   rH   rn   r0   r1   rM   r=   r>   )r}   rP   rQ   rA   r~   r   s         r"   test_send_to_closed_local_portrH  y  s4      ! 	. 	.\aZ 	.?((* . .gq" =A-55{A6F
SG&&w';';<= *11':Fll6***$__..&88$$++-. .	.	. 	. 	..
 +.. . . .	. 	.	. 	. 	. 	.s   EDEED4D
D4 A/D/D
0DD
#D+D46D7D4;EEE ED4DDD4D1%D(&D1-D44D=	9E EEE	EE)r    z
int | boolr6   r   )r%   boolr&   z
int | Noner   rI  r6   z:AsyncGenerator[tuple[DTLSEndpoint, tuple[str, int]], None])r   rI  r6   r7   )r{   ztrio.testing.MockClockr6   r7   r  )r{   trio.abc.Clockr6   r7   )r   rI  r{   rJ  r6   r7   )M
__future__r   rd   
contextlibr   	itertoolsr   typingr   r   r   rI   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_certrH   configure_trustmarkparametrizeparamparametrize_ipv6r#   rB   rT   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r	  r  r  r  filterwarningsr+  r.  r1  r6  r8  r;  rB  rF  rH  r   r$   r"   <module>re     s   "  *  *   A'
   * 5 D D.WZZ\mmM*S[[)
   : &S[[)
   :  ;;**

LFLLZ01	 +  (  	$.$. 
$. 	$.
 @$. $.N 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($.S  '&&'s   
I III