
    ,h&                         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                   X     e Zd Z fdZ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      S/var/www/html/Resume-Scraper/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     == 	' 	'--$$&&&	' 	' 	'&	' 	' 	' 	'sS   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                   K   	 | j                  |      }| j                  j                         ry 	 t        j                  | j                         |       d {    Z7 # t        $ r t        j                  j                  w xY wwr   )
r   r   seen_endr   r    r   r!   r"   r#   r$   )r   r&   r'   s      r   wait_for_endzAsyncioQuicStream.wait_for_end.   sy     33J?G||$$&,&&t'='='?III 
 J ,mm+++,s.   .B'A  AA  BA   $BBc                   K   | j                  |      }| j                  j                         r3| j                  |       d {    | j                  j                         S | j                  d|       d {    t        j                  d| j                  j                  d            \  }| j                  ||       d {    | j                  j                  |      S 7 7 l7 #w)N   z!H)
_expiration_from_timeout_connectionis_h3r*   r   get_allr    structunpackget)r   r'   r&   sizes       r   receivezAsyncioQuicStream.receive8   s     227;
!!###J///<<''))--:...mmD$,,*:*:1*=>GT--j111<<##D)) 0 /1s7   A C'C!3C'6C#7A
C'C% C'#C'%C'c                    K   | j                  |      }| j                  j                  | j                  ||       d {    y 7 wr   )_encapsulater.   write
_stream_id)r   datagramis_enddatas       r   sendzAsyncioQuicStream.sendC   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   r<   r;   s      r   
_add_inputzAsyncioQuicStream._add_inputG   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.closeL   s     s   c                    K   | S wr    r   s    r   
__aenter__zAsyncioQuicStream.__aenter__Q           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)rD   r   r@   )r   exc_typeexc_valexc_tbs       r   	__aexit__zAsyncioQuicStream.__aexit__T   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    r*   r5   r=   rA   rD   rG   rO   __classcell__r   s   @r   r	   r	      s6    ,'
 ,	*D'

r   r	   c                   Z     e Zd Zd fd	Z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 | _
        d| _        y rK   )r   r   _socketr   Event_handshake_complete_socket_createdr   _wake_timer_receiver_task_sender_task_wake_pending)r   r   addressportsourcesource_portmanagerr   s          r   r   zAsyncioQuicConnection.__init__\   sf    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)                          d {    | j                  sd d d       d {    d| _        | j)                          d {    | j,                  j                          y 7 97 7 7 c7 H# 1 d {  7  sw Y   XxY w# t*        $ r Y fw xY w7 O# d| _        | j)                          d {  7   | 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_peerrY   r\   set_donerecvfromr   r.   receive_datagramtime_wakeup	Exceptionr[   )r   afbackendr:   ra   s        r   	_receiverzAsyncioQuicConnection._receiverf   s    	+((7B&&229=G ")!4!4F%%q$,,A

ST8V" DL   $$&|| 
) 
)**040E0E)41 +'Xw qzTZZ]2gajDJJqM6Q $$55hU ,,.(( **
) 
) DJ,,.  $$((*)
)+ )
) 
) 
) 
)  		 ! DJ,,.  $$((*s   IBG2 G3G2 GG2 0G GA4G5G6GG2 GG2 I1H2IG2 G2 GGG2 G/#G&$G/+G2 2	G>;H =G>>H IH?H! H??Ic                    K   d| _         | j                  4 d {    | j                  j                          d d d       d {    y 7 /7 # 1 d {  7  sw Y   y xY ww)NT)r`   r]   
notify_allr   s    r   rw   zAsyncioQuicConnection._wakeup   sX     !## 	* 	*'')	* 	* 	* 	* 	* 	* 	*sC   A#A
A#AA#AA#A#A AA A#c                   K   | j                   4 d {    | j                  s"| j                   j                          d {    d d d       d {    d| _        y 7 J7 7 # 1 d {  7  sw Y   d| _        y xY wwrK   )r]   r`   r   r   s    r   _wait_for_wake_timerz*AsyncioQuicConnection._wait_for_wake_timer   sw     ## 	. 	.%%&&++---	. 	. #	.-	. 	. 	. 	. #sV   B AB *A$A A$B A"B  A$"B $A=*A-+A=2B 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   )r\   r   rs   r.   datagrams_to_sendrv   rq   rY   sendto_get_timer_valuesr   r    r   rx   _handle_timer_handle_events)r   	datagramsr:   ra   r&   intervals         r   _senderzAsyncioQuicConnection._sender   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                        r| j                         re| j                  j                  |      }|D ]B  }t        |t        j                  j
                  j                        r| j                  j                  |j                        }|sZ|j                  |j                   |_        n|j"                  |j                   |_        |j$                  s|j'                  dd       d {    t        |t        j                  j
                  j(                        s| j                  j                  |j                        }|s|j'                  |j*                  |j$                         d {    E n`| j                  j                  |j                        }|r8|j'                  |j*                  |j,                         d {    nt        |t        j                  j
                  j.                        r| j0                  j3                          nt        |t        j                  j
                  j4                        r"d| _        | j8                  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 {    M7 7 7 @7 87 w)Nr   Tr   rg   
   )!r.   
next_event
isinstanceaioquicquiceventsStreamDataReceivedr/   _h3_connhandle_eventh3HeadersReceived_streamsr3   r   _headersheaders	_trailersstream_endedrA   DataReceivedr<   
end_streamHandshakeCompletedr[   rr   ConnectionTerminatedrs   r^   cancelStreamResetr   sleep)r   countevent	h3_eventsh3_eventstreams         r   r   z$AsyncioQuicConnection._handle_events   s    $$//1E}%!4!4!G!GH::< $ : :5 AI$- "%h

0A0A0Q0QR%)]]%6%6u%GF%#)??#:6>6F6FFO%+%5%5%=7?7G7GF$4#+#8#8*0*;*;C*F$F$F''**2C2C2P2PQ%)]]%6%6u%GF%&,&7&7$,MM83H3H'" !" !""" "]]..u?F$//

E<L<LMMM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&&&S   %G!" N 7 'su   CM AM "M 7M83M ,'M )M >M?AM MD	M #M$(M MM M M M M c                 z   K   | j                   j                  |||       | j                          d {    y 7 wr   )r.   send_stream_datarw   )r   r   r<   r;   s       r   r8   zAsyncioQuicConnection.write   s-     ))&$?llns   1;9;c                     | j                   ry t        j                  | j                               | _        t        j                  | j                               | _        y r   )_closedr   Taskr{   r^   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rK   )r   r    r[   r   r!   r"   r#   r$   rs   r   r.   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                 D  K   | j                   s| j                  j                  | j                  d   | j                  d          d| _         | j                  j                          | j                  j                          | j                          d {    	 | j                   d {    	 | j                   d {    | j                  j                          d {    y y 7 R7 ?# t        j                  $ r Y Rw xY w7 E# t        j                  $ r Y Xw xY w7 >w)Nr   rg   T)r   _managerclosedrq   r.   rD   r\   rr   rw   r^   r   CancelledErrorr_   rY   r   s    r   rD   zAsyncioQuicConnection.close   s     ||MM  A

1>DL""$  $$&,,.  ))))'''' ,,$$&&&  !)))  ()) &s   BD C&D C* (C()C* .D =D>D D D D (C* *D =D ?D  D D DD DD r   rP   )rQ   rR   rS   r   r{   rw   r   r   r   r8   r   r   rD   rT   rU   s   @r   rW   rW   [   s6    #+8*
#(+'Z9
'r   rW   c                   R     e Zd Zdej                  ddf fd	Z	 ddZd Zd Z xZ	S )AsyncioQuicManagerNFc                 4    t         |   ||t        ||       y r   )r   r   rW   )r   confverify_modeserver_namer   r   s        r   r   zAsyncioQuicManager.__init__   s     	{,A;PRSr   c                 Z    | j                  |||||      \  }}|r|j                          |S r   )_connectr   )r   ra   rb   rc   rd   want_session_ticketr   starts           r   connectzAsyncioQuicManager.connect   s8     #mmT6;0C
U NNr   c                    K   | S wr   rF   r   s    r   rG   zAsyncioQuicManager.__aenter__  rH   rI   c                    K   t        | j                  j                               }|D ]  }|j                          d {     y7 wrK   )list_connectionsvaluesrD   )r   rL   rM   rN   connectionsr   s         r   rO   zAsyncioQuicManager.__aexit__  sJ      4,,3356% 	%J""$$$	% %s   <AAA)iU  Nr   T)
rQ   rR   rS   sslCERT_REQUIREDr   r   rG   rO   rT   rU   s   @r   r   r      s.    S%6%6DUT RVr   r   )r   rn   r   r1   rv   aioquic.quic.configurationr   aioquic.quic.connectionaioquic.quic.eventsdns.asyncbackendr"   dns.exceptiondns.inetdns.quic._commonr   r   r   r   r   r	   rW   r   rF   r   r   <module>r      s\      
   !      ? ?DT'/ T'n) r   