
    hJ(                         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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      O/var/www/html/eduruby.in/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_end0   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.receive:   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.sendE   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_inputI   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.closeN   s     s   c                    K   | S wr    r   s    r   
__aenter__zAsyncioQuicStream.__aenter__S           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__V   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._receiverh   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                   K   | j                   j                          d {    | j                  s| j                  j	                  t        j
                               }|D ]S  \  }}|| j                  k(  sJ | j                  J | j                  j                  || j                  d        d {    U | j                         \  }}	 t        j                  | j                         |       d {    | j                  |       | j                          d {    | j                  sy y 7 7 7 A# t        $ r Y Jw 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   ED.BE/D10E
'D5 1D32D5 6$EEE,E1E3D5 5	E>E EEc                   K   d}	 | j                   j                         }|y t        |t        j                  j
                  j                        r| j                         rs| j                  J | 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 nl| j                  j                  |j                        }|rD|j'                  |j*                  |j,                         d {    nt        |t        j                  j
                  j.                        r| j0                  j3                          nt        |t        j                  j
                  j4                        r.d| _        | j8                  | 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 {    g7 (7 7 L7 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::<==444 $ : :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!
&&2''..0E7<<#6#6#B#BC**5??; ++C666QJErzmmA&&&W " %G!" N 7 'su   C%M:(AM:0M:M-3M::'M:#)M:M0AM:'M3(DM:=M6>(M:&M8'M:0M:3M:6M:8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                   K   | j                   s| j                  6| j                  j                  | j                  d   | j                  d          d| _         | j                  j                          | j                  j                          | j                          d {    	 | j                  | j                   d {    	 | j                  | j                   d {    | j                  #| j                  j                          d {    y y y 7 w7 X# t        j                  $ r Y kw xY w7 R# t        j                  $ r Y ew 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&    ||}}($$TZZ]DJJqMBDL""$  $$&,,.  &&2----$$0++++ ||'ll((*** (%  ! .))  ,))  +s   BE D!E&D DD D7 "D5#D7 ')EEED D2/E1D22E5D7 7E
EEEr   rP   )rQ   rR   rS   r   r{   rw   r   r   r   r8   r   r   rD   rT   rU   s   @r   rW   rW   ]   s6    #+8*
#( -'^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.h3.connectionr   aioquic.h3.eventsaioquic.quic.configuration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      sb      
     !      ? ?D[+/ [+|) r   