
    RPf                         d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z
d dlZ
d dlZ
d dlmZmZmZmZmZ  G d de      Z G d de      Z G d de      Zy)	    N)QUIC_MAX_DATAGRAMAsyncQuicConnectionAsyncQuicManagerBaseQuicStreamUnexpectedEOFc                   R     e Zd Z fdZd Zd Zd
dZddZd Zd Z	d Z
d	 Z xZS )AsyncioQuicStreamc                 X    t         |   ||       t        j                         | _        y N)super__init__asyncio	Condition_wake_up)self
connection	stream_id	__class__s      K/var/www/fastapitest/venv/lib/python3.12/site-packages/dns/quic/_asyncio.pyr   zAsyncioQuicStream.__init__   s"    Y/))+    c                    K   | j                   4 d {    | j                   j                          d {    d d d       d {    y 7 77 7 	# 1 d {  7  sw Y   y xY wwr   )r   waitr   s    r   _wait_for_wake_upz#AsyncioQuicStream._wait_for_wake_up   sV     == 	' 	'--$$&&&	' 	' 	'&	' 	' 	' 	'S   A&AA&AAAA&AA&AA&A#AA#A&c                 0  K   	 | j                  |      }| j                  j                  |      ry || _        	 t	        j
                  | j                         |       d {    d| _        i7 # t        $ r t        j                  j                  w xY ww)Nr   )_timeout_from_expiration_bufferhave
_expectingr   wait_forr   TimeoutErrordns	exceptionTimeout)r   amount
expirationtimeouts       r   r!   zAsyncioQuicStream.wait_for"   s     33J?G||  ($DO,&&t'='='?III  DO  J ,mm+++,s.   6B'A/  A-!A/ %B-A/ /$BBc                 4  K   | j                  |      }| j                  d|       d {    t        j                  d| j                  j                  d            \  }| j                  ||       d {    | j                  j                  |      S 7 j7 !w)N   z!H)_expiration_from_timeoutr!   structunpackr   get)r   r(   r'   sizes       r   receivezAsyncioQuicStream.receive.   s}     227;
mmAz***--dll&6&6q&9:mmD*---||%% 	+-s"   'BBA
B4B5 BBc                    K   | j                  |      }| j                  j                  | j                  ||       d {    y 7 wr   )_encapsulate_connectionwrite
_stream_id)r   datagramis_enddatas       r   sendzAsyncioQuicStream.send5   s8       *$$T__dFCCCs   <AAAc                    K   | j                  ||      r@| j                  4 d {    | j                  j                          d d d       d {    y y 7 07 # 1 d {  7  sw Y   y xY wwr   )_common_add_inputr   notify)r   r8   r7   s      r   
_add_inputzAsyncioQuicStream._add_input9   sf     !!$/}} ' '$$&' ' ' 0' ' ' ' 'sD   #A/AA/AA/AA/A/A, A#!A,(A/c                 ,   K   | j                          y wr   )_closer   s    r   closezAsyncioQuicStream.close>   s     s   c                    K   | S wr    r   s    r   
__aenter__zAsyncioQuicStream.__aenter__C           c                    K   | j                          d {    | j                  4 d {    | j                  j                          d d d       d {    y7 D7 17 	# 1 d {  7  sw Y   yxY wwNF)r@   r   r<   )r   exc_typeexc_valexc_tbs       r   	__aexit__zAsyncioQuicStream.__aexit__F   sg     jjl== 	# 	#MM  "	# 	# 		# 	# 	# 	# 	#sT   A6AA6AA6A!
A6AA6A6A6!A3'A*(A3/A6r   F)__name__
__module____qualname__r   r   r!   r0   r9   r=   r@   rC   rK   __classcell__r   s   @r   r	   r	      s1    ,'
 &D'

r   r	   c                   T     e Zd Zd
 fd	Zd Zd Zd Zd ZddZd Z	d
dZ
d	 Z xZS )AsyncioQuicConnectionc                     t         |   ||||||       d | _        t        j                         | _        t        j                         | _        t        j                         | _        d | _	        d | _
        y r   )r   r   _socketr   Event_handshake_complete_socket_createdr   _wake_timer_receiver_task_sender_task)r   r   addressportsourcesource_portmanagerr   s          r   r   zAsyncioQuicConnection.__init__N   s^    WdFKQ#*==? &}}",,." r   c           	        K   	 t         j                  j                  | j                        }t         j                  j                  d      }|j                  |t        j                  d| j                  | j                  d   | j                  d   f       d {   | _        | j                  j                          | j                  4 d {    | j                  s| j                  j                  t         d        d {   \  }}|d   | j                  d   k7  s|d   | j                  d   k7  rb| j"                  j%                  ||t'        j&                                | j(                  4 d {    | j(                  j+                          d d d       d {    | j                  sd d d       d {    d| _        | j(                  4 d {    | j(                  j+                          d d d       d {    | j.                  j                          y 7 7 V7 %7 7 # 1 d {  7  sw Y   xY w7 # 1 d {  7  sw Y   xY w# t,        $ r Y w xY w7 7 i# 1 d {  7  sw Y   yxY w# d| _        | j(                  4 d {  7   | j(                  j+                          d d d       d {  7   n# 1 d {  7  sw Y   nxY w| j.                  j                          w xY ww)Nr   r      T)r#   inetaf_for_address_addressasyncbackendget_backendmake_socketsocket
SOCK_DGRAM_source_peerrU   rX   set_donerecvfromr   r3   receive_datagramtimerY   
notify_all	ExceptionrW   )r   afbackendr6   r\   s        r   	_receiverzAsyncioQuicConnection._receiverW   sq    	+((7B&&229=G ")!4!4F%%q$,,A

ST8V" DL   $$&|| 6 6**040E0E)41 +'Xw qzTZZ]2gajDJJqM6Q $$55hU  $// 6 6((3356 6 **6 6 DJ'' . .  ++-. .$$((*-6+6 6 6 6 66 6 6 6  		. . . . . DJ'' . .  ++-. . . . .$$((*sn  K=BI H3I H"I 0I H%A1I2H(3I6H,IH*I.I 9I:I >K=I'K=I+4K=?I) K=I "I %I(I*I,H>	2H53H>	:II I	I
II 	I$!J  #I$$J  'K=)K=+I=1I42I=9K= K:J
K:K
8K:KK:
KKK"K::K=c                    K   | j                   4 d {    | j                   j                          d {    d d d       d {    y 7 77 7 	# 1 d {  7  sw Y   y xY wwr   )rY   r   r   s    r   _wait_for_wake_timerz*AsyncioQuicConnection._wait_for_wake_timeru   sZ     ## 	* 	*""'')))	* 	* 	*)	* 	* 	* 	*r   c                 r  K   | j                   j                          d {    | j                  s| j                  j	                  t        j
                               }|D ]E  \  }}|| j                  k(  sJ | j                  j                  || j                  d        d {    G | j                         \  }}	 t        j                  | j                         |       d {    | j                  |       | j                          d {    | j                  sy y 7 7 7 @# t        $ r Y Iw xY w7 (wr   )rX   r   rn   r3   datagrams_to_sendrq   rl   rU   sendto_get_timer_valuesr   r!   rx   rs   _handle_timer_handle_events)r   	datagramsr6   r\   r'   intervals         r   _senderzAsyncioQuicConnection._sendery   s    ""'')))**((::499;GI%. F!'$**,,,ll))(DJJEEEF &*%;%;%="Z&&t'@'@'BHMMM z*%%''' ** 	*
 F N  (sj   D7D B D7!D""D7<'D& #D$$D& ($D7D5D7D7"D7$D& &	D2/D71D22D7c                   K   d}	 | j                   j                         }|y t        |t        j                  j
                  j                        rX| j                  j                  |j                        }|r8|j                  |j                  |j                         d {    nt        |t        j                  j
                  j                        r| j                  j                          nt        |t        j                  j
                  j                         r"d| _        | j$                  j'                          not        |t        j                  j
                  j(                        rA| j                  j                  |j                        }|r|j                  dd       d {    |dz  }|dkD  rd}t+        j,                  d       d {    7 :7 27 w)Nr   Tr   rb   
   )r3   
next_event
isinstanceaioquicquiceventsStreamDataReceived_streamsr.   r   r=   r8   
end_streamHandshakeCompletedrW   rm   ConnectionTerminatedrn   rZ   cancelStreamResetr   sleep)r   counteventstreams       r   r~   z$AsyncioQuicConnection._handle_events   sg    $$//1E}%!4!4!G!GH**5??; ++EJJ8H8HIIIE7<<#6#6#I#IJ((,,.E7<<#6#6#K#KL!
##**,E7<<#6#6#B#BC**5??; ++C666QJErzmmA&&&-  J 7 's7   B G#"G#D	G#,G-(G#G!G#G#!G#c                    K   | j                   j                  |||       | j                  4 d {    | j                  j                          d d d       d {    y 7 /7 # 1 d {  7  sw Y   y xY wwr   )r3   send_stream_datarY   rr   )r   r   r8   r7   s       r   r4   zAsyncioQuicConnection.write   sh     ))&$?## 	* 	*'')	* 	* 	* 	* 	* 	* 	*sD   .A9A A9A$A9A"A9"A9$A6*A-+A62A9c                     | j                   ry t        j                  | j                               | _        t        j                  | j                               | _        y r   )_closedr   Taskrv   rZ   r   r[   r   s    r   runzAsyncioQuicConnection.run   s;    <<%ll4>>+;<#LL8r   c                 ^  K   	 t        j                  | j                  j                         |       d {    | j                  rt        | j                  j                  d      }t        | |      }|| j                  |<   |S 7 N# t        $ r t
        j                  j                  w xY wwrG   )r   r!   rW   r   r"   r#   r$   r%   rn   r   r3   get_next_available_stream_idr	   r   )r   r(   r   r   s       r   make_streamz!AsyncioQuicConnection.make_stream   s     	(""4#;#;#@#@#BGLLL ::$$AA%H	"43#)i  M 	(--'''	(s,   B-1B BB A
B-B $B**B-c                   K   | j                   s| j                  j                  | j                  d   | j                  d          d| _         | j                  j                          | j                  j                          | j                  4 d {    | j                  j                          d d d       d {    	 | j                   d {    	 | j                   d {    | j                  j                          d {    y y 7 |7 T# 1 d {  7  sw Y   dxY w7 V# t        j                  $ r Y iw xY w7 \# t        j                  $ r Y ow xY w7 Uw)Nr   rb   T)r   _managerclosedrl   r3   r@   rX   rm   rY   rr   rZ   r   CancelledErrorr[   rU   r   s    r   r@   zAsyncioQuicConnection.close   s)    ||MM  A

1>DL""$  $$&'' . .  ++-. .))))'''' ,,$$&&&! . . . . . *))  ()) &s   BEDED/E:D;E D( D&D( E $E%E )EEEED#DD#E&D( (D>;E=D>>EE EEEEr   rL   )rM   rN   rO   r   rv   rx   r   r~   r4   r   r   r@   rP   rQ   s   @r   rS   rS   M   s0    !+<*('4*
9
'r   rS   c                   P     e Zd Zdej                  df fd	Z	 ddZd Zd Z xZ	S )AsyncioQuicManagerNc                 2    t         |   ||t        |       y r   )r   r   rS   )r   confverify_modeserver_namer   s       r   r   zAsyncioQuicManager.__init__   s    {,A;Or   c                 Z    | j                  |||||      \  }}|r|j                          |S r   )_connectr   )r   r\   r]   r^   r_   want_session_ticketr   starts           r   connectzAsyncioQuicManager.connect   s8     #mmT6;0C
U NNr   c                    K   | S wr   rB   r   s    r   rC   zAsyncioQuicManager.__aenter__   rD   rE   c                    K   t        | j                  j                               }|D ]  }|j                          d {     y7 wrG   )list_connectionsvaluesr@   )r   rH   rI   rJ   connectionsr   s         r   rK   zAsyncioQuicManager.__aexit__   sJ      4,,3356% 	%J""$$$	% %s   <AAA)iU  Nr   T)
rM   rN   rO   sslCERT_REQUIREDr   r   rC   rK   rP   rQ   s   @r   r   r      s,     c.?.?T P RVr   r   )r   ri   r   r,   rq   aioquic.quic.configurationr   aioquic.quic.connectionaioquic.quic.eventsdns.asyncbackendr#   dns.exceptiondns.inetdns.quic._commonr   r   r   r   r   r	   rS   r   rB   r   r   <module>r      s\      
   !      1 1h}'/ }'@) r   