
    <fhȌ                    D   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                  d:d       Z%d:dZ&ejH                  d:d       Z'ejP                  jS                  dd ejT                  de      gddg      Z+d;dZ,edddd	 	 	 	 	 	 	 	 	 d<d       Z-e+	 	 	 	 	 	 	 	 d=d       Z.e	 	 	 	 	 	 d>d       Z/	 	 	 	 	 	 d?dZ0d?dZ1	 	 	 	 	 	 d?dZ2d@dZ3d@d Z4dAd!Z5d@d"Z6	 	 	 	 	 	 dBd#Z7ejP                  jS                  d$d%d&g      	 	 	 	 	 	 	 	 	 	 dCd'       Z8	 	 	 	 	 	 dDd(Z9	 	 	 	 	 	 	 	 dEd)Z:	 	 	 	 	 	 dDd*Z;d@d+Z<e	 	 	 	 	 	 d?d,       Z=	 	 	 	 	 	 dDd-Z>	 	 	 	 	 	 d?d.Z?e+	 	 	 	 	 	 	 	 	 	 dFd/       Z@ejP                  j                  d0      dGd1       ZBejP                  j                  d0      dAd2       ZCejP                  j                  d0      dAd3       ZDejP                  j                  d0      dAd4       ZEdAd5ZF	 	 	 	 	 	 	 	 dEd6ZG	 	 	 	 	 	 dDd7ZH	 	 	 	 d@d8ZId@d9ZJy# e$ rZ ee       Y dZ[bdZ[ww xY w)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                 v    t        j                  t         j                        } t        j	                  |        | S N)r	   ContextDTLS_METHODserver_certconfigure_certctxs    H/var/www/zara/venv/lib/python3.12/site-packages/trio/_tests/test_dtls.py
server_ctxr   "   s'    
++coo
&Cs#J    c                 v    t        j                  t         j                        } t        j	                  |        | S r   )r	   r   r   caconfigure_trustr   s    r   client_ctx_fnr!   )   s'    
++coo
&CsJr   c                     t               S r   )r!    r   r   
client_ctxr$   /   s
    ?r   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       r   endpointr4   ;   sb    ::fe$D%)T[[!!t{{/B/BF;;4;;#9#9&ID'''r   )
autocancelmtur%   c                 K   t        |      5 }|rdnd}|j                  j                  |df       d {    t        j                         4 d {   }dfd}|j                  |j                  | |       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)
printr4   r.   getsocknamepeer_addressset_ciphertext_mtudo_handshakesendr-   BrokenResourceError)dtls_channelpacketr6   s     r   echo_handlerz&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 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/)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_serverrQ   B   s      
t	 .!E{	mm  )Q000$$& 	. 	.'9( --j,GGG&--33555$$++-7	. 	.. .0	., H-	. 	. 	. 	.. .s   D'C5CC5CC5'C ?C ?C ?C5
CC5	DC5C5C C5 C2	&C)'C2	.C55C>:Dc                  K   t        | |      4 d {   \  }}t        |       5 }|j                  ||      }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)
Nr%   r   r8      hellos   goodbyez4^openssl doesn't support sending empty DTLS packets$matchr   i  i  )rQ   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_smokerc   k   s      TjA L L F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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F?HG86G*G/G*
GG*#G$G*;G<G*GG*1G2$G*G+G
,G0A5G*&G8.H9G6:HG	G*G*G*G*G*GG'#G**G3	/G86H8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 e7 H7 7 l7 V# 1 sw Y   OxY w# 1 sw Y   Bx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?r   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?皙?rl   rl   )weightsr   r;   z: ri   rj   rk      rh   z: delivered )choicesr<   sourcedestinationsend_packetr-   sleeprandompayloadhexdeliver_packet)rD   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r   )
start_soonRuntimeError)rD   rP   r{   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
   rD   r   rF   rG   )rt   Randomr   enableautojump_thresholdrQ   r-   rI   r{   ranger<   r4   rW   r!   r@   strencodemove_on_afterrA   r\   cancelled_caught)autojump_clockr   
HANDSHAKES_r_   r   ir`   clientmsgcscopery   rP   rz   r{   s              @@@@r   $test_handshake_over_terrible_networkr      s    
 JaA	BIIK(-N%:6 K" K",1g$$& J	" J	"'+Z 3BO:& "hhhZ "?,44WmoNF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F4HG2/F70G23AG9G	;F:<>G	:G F<G 'F>(	G 2G		
GG2GG2#H.G0/H7G2:G	<G >G  G	G	GGG2G-	!G$"G-	)G20H2H8G;9H Hc                f  K   t        |       4 d {   \  }}t               5 }|j                  ||      }|j                  d       d {    |j	                          d {   dk(  sJ 	 d d d        d d d       d {    y 7 t7 =7 '# 1 sw Y    xY w7 # 1 d {  7  sw Y   y xY ww)Nrf      xyz)rQ   r4   rW   rA   r\   r   r$   r   r_   r`   r   s         r   test_implicit_handshaker      s       :6 4 4,1gZ 	4?$,,WjAF ++f%%%))V333	44 4 4
 &)	4 	44 4 4 4s   B1BB1B'BB
B$B%	B/B7B1BB1
BBB	BB1B."B%#B.*B1c           
     8  K   t               5 }t               5 }|j                  j                  d       d {    t        j                         4 d {   }dd}|j                  |j                  | |       d {    |j                  |j                  j                         |      }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 H# 1 d {  7  sw Y   XxY w7 5# 1 d {  7  sw Y   ExY w# 1 sw Y   IxY w# 1 sw Y   y xY ww)Nr9   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-   rI   r}   rA   r\   )channelrP   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
   rF   rG   )r4   r.   rH   r-   rI   rJ   rK   rW   r=   r}   rA   r\   rL   rM   )r   r$   server_endpointr`   server_nurseryr   r   rP   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%E-=E
>AE-EE-8E	 E-E
E-*F5E+6F:F	FFFE-E-E-E(EE($E-+F-E?3E64E?;FF	FFFc                  K   t        |       4 d {   \  }}t               5 }|j                  ||      }|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)Nrf      abc)rQ   r4   rW   r@   closerX   rY   r-   ClosedResourceErrorrA   r\   acloser   s         r   test_channel_closingr     s0      :6 " ",1gZ 	"?$,,WjAF%%'''LLNt778 *kk&)))*t778 'nn&&&' LLN--/!!	"" " " ( ** * '' ' "	" 	"" " " "s   E0D*E0E&ED-7ED1D/
D1+ED?D=
D?!+EEEEE0$E%E0-E/D11D:6E=D??EEE	EE0E-!E$"E-)E0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)r5   r   )rQ   r   )r   r   _addresss      r   !test_serve_exits_cleanly_on_closer     se     5ZH     M	             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                  | |       d {    d d d        d d d       d {    d d d        d d d       d {    d d d       d {    y 7 U7 @7 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)Nrf   r   r      xxxc                   K   y wr   r#   r   s    r   null_handlerz+test_client_multiplex.<locals>.null_handlerA  s	        r   objectrF   rG   )rQ   r4   rW   r!   rA   r\   r   rX   rY   r-   r   rI   rJ   rK   )	r   r   address1address2r`   client1client2r   rP   s	            r   test_client_multiplexr   *  s    J/Y Y3@AxJ/Y Y3@AxZ 	Y?%--hHG%--hHG,,v&&&,,v&&& **f444 **f444!!#t778 +ll6***+t778 (oo'''(t778 C''-/BC ((* Y Yg]]4#;#;< Y!--(=(=z<XXXYY Y+	Y	Y Y Y Y Y Y '&**
 ++ + (( (C CYXY YY Y Y Y+	Y 	Y	Y Y Y Y Y Y Y Ys  LI(LK2I+K2KA	KI.
KI1
 K7I4
8KI7
<KI=	&I:'I=	++KJ	*J
+J	/+KJ	5$KJ&K$J8	!J*"J(#J*'J8	/K:J6
;K?KK2KK2L"K0#L+K2.K1K4K7K:I=	=JK
J	JKJ#K(J**J3/J8	6K8K
>K?K
KKKK2K-	!K$"K-	)K20L2L8K;9L L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$rU   )r-   r.   rX   rY   r]   r   )ss    r   test_dtls_over_dgram_onlyr   I  s\     				 ]]:-ST 	O	 	 	 s3   A2A&A	A&	A2A#	A&&A/+A2c                z  K   dd}t               5 }|j                  j                  d       d {    t        j                         4 d {   }|j                  |j                  | |       d {    t        j                  t        j                        5  |j                  |j                  | |       d {    d d d        |j                  j                          d d d       d {    t        j                         4 d {   }|j                  |j                  | |       d {    |j                  j                          d d d       d {    d d d        y 7 77 7 7 # 1 sw Y   xY w7 # 1 d {  7  sw Y   xY w7 7 f7 ># 1 d {  7  sw Y   NxY w# 1 sw Y   y xY ww)Nc                   K   y wr   r#   r   s    r   r   z'test_double_serve.<locals>.null_handlerP  s	     r   r   r   )r4   r.   rH   r-   rI   rJ   rK   rX   rY   BusyResourceErrorrL   rM   )r   r   r   rP   s       r   test_double_server   O  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  F;F/E'F/E*F/!E?2E-3'E?!E1;E/
<E1 "E?"F/-E=.F/
FF/!F/F0FF/FF/	F;'F/*F/-E?/E11E:6E?=F/?F	FF	F/FF/F,	 F#!F,	(F//F84F;c                   K   t               }|j                          t               5 }t               5 }|j                  j	                  d       d {    t        j                  d      5 }|j                  |j                  j                         |      }|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   re   )r   r   r4   r.   rH   r-   r   rW   r=   r@   r   )r   r$   ry   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   %C>C2C&CC&+>C)C
*C.C&C2	C>C&CC#C&&C/	+C22C;7C>buffer_sizer      c                X  K   t               }|j                          t        |      4 d {   \  }}t        |      5 }|j                  |k(  sJ |j                  ||      }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 {    y 7 M7 7 7 y7 D7 .# 1 sw Y   'xY w7 # 1 d {  7  sw Y   y xY ww)Nrf   )incoming_packets_buffer      s   buffer clear now)r   r   rQ   r4   r   rW   r   rA   r   r   r-   rs   
statistics incoming_packets_dropped_in_trior\   )r   r   r$   r   ry   r   r_   r`   r   r   statss              r   test_incoming_buffer_overflowr   o  s     
BIIK:6 A A,1gk: 	Ao"::kIII$,,WjAF;+, $kk#a&--/222jjm##$ %%'E99R???;' A#^^--Q@@@A++1222))-@@@@	AA A A
 3# .2)	A 	AA A A As   +F*E:F*FA F!E=
"F>E?
?AFF
F'F>F?FF	F!F)F*4F5F*=F?FFFFF	FF*F'FF'#F*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_recordr   )msg_typemsg_lenmsg_seqfrag_offsetfrag_lenfrag)content_typeversionepoch_seqnoru                r   r   #      rf   r*   r   r   )r   r   
trio._dtlsr   r   r   r   r   r   r   	handshakeDTLS10client_hellobytes	bytearrayrQ   r-   r.   r1   sendtors   )r   r   ry   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 $ $,1g[[T[[%;%;< 	$%")/'40 $
 kk*g666jjm##$	$$ $ $ 7#	$ 	$$ $ $ $s   FI&H=I&<I%I?H?
 II
I$I,I&7I8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                  ||      }|j                          d {    d d d        >7 F7 # 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   )ru   )ru   lenr   nextrM   attrsevolverw   )
rD   r   cookieru   offsetr   r   r   ry   offset_to_corrupts
        r   r{   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rf   r   )r   r   r   r   r   r-   CancelScoper   r{   rQ   r4   rW   r@   r   )r   r   r$   r{   r   r_   r   r   r   r   r   ry   r   s           @@@@@r   test_invalid_cookie_rejectedr     s      
BIIKC				  1v ""I	& 	&* '#z: 	1 	1lq'Z 16$nnWjAG!..0001 	1 11 1	1 	1 	1 	19 1  1  1B """"sv   7C<-C!+B2,C!/C>&B6$B4
%B6)	C2C!4B66B?;CC	C	C	C!	C<!C*&C<c           	     B  	K   t               }|j                          t               5 }t               5 }|j                  j	                  d       d {    t        j                         4 d {   }d	d	fd}|j                  |j                  ||       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 h7 =7 # 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 hellorT   )	r<   rM   r-   rs   rX   rY   rB   r@   rA   )r   connect_cscope
first_times    r   r   zAtest_client_cancels_handshake_and_starts_new_one.<locals>.handler3  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 connectrT   r   r   )r   r   r4   r.   rH   r-   rI   rJ   rK   r<   r   rW   r=   r!   r@   r   r\   rs   rL   rM   )
r   r   ry   rN   r   rP   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)DmoV**,,,- "222234nnV]]%>%>%@-/RG **h666 **R.    '')?	* 	*!* !* !*2	*" C
 -- - + !=	* 	* 	* 	*!* !* !* !*s   %HHHGH0G
1H4*G2G
#G2AG 	G	G 	A&G23G,
4!G2G.
G24H?G0 HH	HHHG2G 	 G)%G2.G20H2H8G;9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                  | |       d {    |j                  |j                  |        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 y7 17 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r   )rA   )r   rD   s     r   rE   z-test_swap_client_server.<locals>.echo_handlerW  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r   )rX   rY   r-   rB   )r   rE   s    r   crashing_echo_handlerz6test_swap_client_server.<locals>.crashing_echo_handler[  sD     t778 ,"7+++, ,+, ,s+   $AAAA	AAAAs   b as clients   association brokens   a as clientr   )r4   r.   rH   r-   rI   rJ   rK   rW   r=   r!   rA   r\   r@   rX   rY   rB   rL   rM   )r   abr  rP   b_to_aa_to_brE   s          @r   test_swap_client_serverr  R  s    	 *q(* *hhmm,---hhmm,---	+	, $$& 	* 	*'--5JKKK--\BBBYYqxx335}GF++n---))^;;;YYqxx335}GF%%'''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$/I
0A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<   rw   rD   
blackholedry   s    r   r{   z@test_openssl_retransmit_doesnt_break_stuff.<locals>.route_packet}  s/    "F+ &) 	&!r   rf   c                    K   j                        } | j                  d       d {    | j                  d       d {    | j                          d {   dk(  sJ y 7 ;7 $7 w)Ng      ?initial_retransmit_timeout   hi)rW   r@   rA   r\   )r   r_   r$   r`   s    r   	connecterz=test_openssl_retransmit_doesnt_break_stuff.<locals>.connecter  sh     ,44WjIF ---MMM ++e,,,!'!11U::: N,1s3   (A-A'A-A)A-A+A-)A-+A-g?Fr   r   rF   rG   )r   r   r{   rQ   r4   r-   rI   r}   rs   r.   r   r=   )
r   r$   r{   r   rP   r  r_   r  r`   ry   s
    `    @@@@r   *test_openssl_retransmit_doesnt_break_stuffr  q  s2     
BIIKJ" #BO:6  :T?GZ 	?((*  g; ""9- jjo%% #
%,,33#**668  ! 	   &!   	 	   s   ;EDED<D.-D
.D.12D#D
$=D!D
"D&D.1D2D.6D<>E	D:
ED.DDD.D+D" D+'D..D7	3D<:E<EEE
Ec                  
K   t               j                          d
d
fd}|_        t        |      4 d {   \  }}dD ]~  }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)rw   r  s    r   r{   zCtest_initial_retransmit_timeout_configuration.<locals>.route_packet  s    Jf%r   rf   )r   r      r  r   )
r   r   r{   rQ   r4   r-   current_timerW   r!   r@   )r   r   r{   r   r_   tr   beforer   afterr  ry   s             @@r   -test_initial_retransmit_timeout_configurationr    s      
BIIKJ& #BO:6 + +,1g 	+A +v**,!
 ..-/B**a*HHH))+v~***+ +	++ + + I	+ ++ + + +sq   ;DC DC-ACC
"C 
C-
DC+DCC($C-+D-C?3C64C?;Dc                  K   dt               j                          dfd}|_        t        |       4 d {   \  }}t	               5 }|j                  ||      }|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   ru   rw   )rD   MTUry   s    r   r{   z9test_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{   rQ   r4   rW   r?   r@   rA   r\   )	r   r$   r{   _serverr_   r   r   r#  ry   s	          @@r   #test_explicit_tiny_mtu_is_respectedr%    s     
 C	BIIK" #BOCJ? 4 4CUGWZ 	46nnWj9G&&s+&&(((,,u%%% **e333	44 4 4 )%*	4 	44 4 4 4s   <D	 CD	C47C&	C 
C&"C"#C&:C$;	C&C4D	C2D	 C&"C&$C&&C/	+C42D	4D:C=;DD	c                  	
K   t               		j                          | rdnd
d		
fd}|	_        t        | |      4 d {   \  }}t	        |       5 }|j                  ||      }|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   ru   r<   rw   )rD   ry   r6   s    r   r{   z@test_handshake_handles_minimum_network_mtu.<locals>.route_packet  s@    v~~$IfX&'Kx()f%r   rS   r8   i'  r   i(#  r   )
r   r   r{   rQ   r4   rW   r?   rA   r\   r[   )r%   r   r   r$   r{   r   r_   r`   r   ry   r6   s            @@r   *test_handshake_handles_minimum_network_mtur(    s      
BIIK)C& #BO
  TjA 	5 	5\a4  	5O$,,WjAF %%d+++f%%%))V333++-444	5	5 	5 	5 &)	5 	5	5 	5 	5 	5s   A D
C!D
C58C'C#C'(C%)C'C5D
C3D
#C'%C''C0	,C53D
5D;C><DD
z$always:unclosed DTLS:ResourceWarningc                   K   t         j                  j                         j                  }d f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        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   )r4   r-   r.   r1   rH   rW   r=   rI   r}   r@   testingwait_all_tasks_blockedrL   rM   lowlevelcurrent_statisticstasks_living)er   crP   during_tasksr$   s        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:<ED<E=ED>E8EE E2E#:E<E>E EE	E	E	EE E#)rF   int)
r-   r-  r.  r/  rX   warnsResourceWarningr+  r,  r   )r$   before_tasksr3  r2  after_taskss   `    r   !test_system_task_cleaned_up_on_gcr9    s     ==335BBL  
o	& 688ll11333
 ,,
-
-
///--224AAK,&&&;&&& 93 
 0sN   ADC4C0%C4<C2=C4)D4D 5;D0C42C44C=9D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r   )r4   rX   r5  r6  r   r-   r+  r,  r0  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   r   r4   r.   rH   _ensure_receive_loopr-   r+  r,  r1   r   r=   rX   r5  r6  r   )ry   r0  r   s      r   test_gc_as_packet_receivedr?  3  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r   )r   r   r4   )ry   s    r   mainz&test_gc_after_trio_exits.<locals>.mainJ  s      
 Y
		zs   %')rF   r   )r-   runrX   r5  r6  r   )rB  r0  s     r   test_gc_after_trio_exitsrD  H  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r   )r4   r.   r   r-   r+  r,  r;  s    r   'test_already_closed_socket_doesnt_crashrF  Y  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                  ||      }|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)Nrf   c                \    j                  |        j                  j                          y r   )rw   r.   r   )rD   ry   rN   s    r   r{   zEtest_socket_closed_while_processing_clienthello.<locals>.route_packetl  s!    f%MM!r   r   r   )	r   r   rQ   r{   r4   r-   r   rW   r@   )	r   r   r$   r_   r{   r`   r   ry   rN   s	          @@r   /test_socket_closed_while_processing_clienthellorI  b  s      
BIIK  :6 , ,:K67	" 'Z 	,?##B' ,(00*E))+++,	,, , , ,, ,	, 	,, , , ,s   +C$B1C$CC%&B5B3
B5CC C$+C,C$3B55B>:CC
	CC$C!CC!C$c           	     x  	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 }7 K7 ## 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 r   r#   rD   s    r   r{   zGtest_association_replaced_while_handshake_running.<locals>.route_packet~  s    r   rf   c                    K   t        j                  t        j                        5   j	                          d {    d d d        y 7 # 1 sw Y   y xY wwr   )rX   rY   r-   rB   r@   )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r   r   r  )r   r   r{   rQ   r4   rW   r!   r-   rI   r}   rs   )
r   r   ry   r{   r   r_   r`   rP   rO  rN  s
            @r   1test_association_replaced_while_handshake_runningrP  x  s'     
BIIK #BO:6 B B,1gZ 	B? ((-/BB((* 
B 
Bg0 ""#34jjn$$''A
B 
B	BB B B
B %
B 
B 
B 
B	B 	BB B B Bs   6D:C:D:D%3D>C<
?D0D2C>
3DDD D!D%)D:4D#5D:<D>D DDD	DDD 	D%#D:%D7+D.,D73D: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               r   )AssertionErrorrL  s    r   r{   zGtest_association_replaced_before_handshake_starts.<locals>.route_packet  s    r   rf   )rD   r   rF   r   )r   r   r{   rQ   r4   rW   r!   rX   rY   r-   rB   r@   )r   ry   r{   r   r_   r`   rN  s          r   1test_association_replaced_before_handshake_startsrT    s      
BIIK #BO:6 ( (,1gZ 	(? ((-/BB##G]_=t778 (oo'''(		(( ( ( (( (		( 	(( ( ( (s   6DCDC:
AC,"C 6C
7C ;C,C:DC8DC  C)%C,,C5	1C:8D:D DDDc           	       K   t        |       4 d {   \  }}t               5 }t        j                         4 d {   }t	        dd      D ]9  }|j                  d|ft                     }|j                  |j                         ; |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)Nrf   r   r   r9   r   )rQ   r4   r-   rI   r   rW   r!   r}   r@   rA   r\   rL   rM   )r   r   r_   r`   rP   r   r   s          r   test_send_to_closed_local_portrV    s=      :6 	. 	.,1gZ 	.?((* . .gq" =A-55{A6FXG&&w';';<= *11'=?Kll6***$__..&888$$++-. .	.	. 	. 	..
 +.. . . .	. 	.	. 	. 	. 	.s   E!DE!ED>D!
D>A7D)9D#
:D)D%
#D)5D> D'D>EE!E
E!!D>#D)%D)'D>)D;/D20D;7D>>E	E
E!EEEE!)rF   SSL.Context)r2   z
int | boolrF   r   )
r   rW  r5   boolr6   z
int | Noner%   rX  rF   z:AsyncGenerator[tuple[DTLSEndpoint, tuple[str, int]], None])r%   rX  r   rW  r$   rW  rF   rG   )r   ztrio.testing.MockClockr   rW  rF   rG   )r   rW  r$   rW  rF   rG   )r   rW  rF   rG   r  )r   trio.abc.Clockr$   rW  rF   rG   )
r   rY  r   rW  r$   rW  r   r4  rF   rG   )r   rY  r   rW  rF   rG   )r   rY  r   rW  r$   rW  rF   rG   )
r%   rX  r   rY  r   rW  r$   rW  rF   rG   )r$   rW  rF   rG   )K
__future__r   rt   
contextlibr   	itertoolsr   typingr   r   r   rX   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   rQ   rc   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r%  r(  filterwarningsr9  r<  r?  rD  rF  rI  rP  rT  rV  r#   r   r   <module>ro     s   "  *  *   A'
   * 5 D D.WZZ\mmM*     ;;**

LFLL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 JJJ