
    Eqg&                         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dS )	    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                 |    t                                          ||           t          j                    | _        d S N)super__init__asyncio	Condition_wake_up)self
connection	stream_id	__class__s      C/var/www/html/env/lib/python3.11/site-packages/dns/quic/_asyncio.pyr   zAsyncioQuicStream.__init__   s1    Y///)++    c                    K   | j         4 d {V  | j                                          d {V  d d d           d {V  d S # 1 d {V swxY w Y   d S r   )r   waitr   s    r   _wait_for_wake_upz#AsyncioQuicStream._wait_for_wake_up   s      = 	' 	' 	' 	' 	' 	' 	' 	'-$$&&&&&&&&&	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	's    A
AAc                 $  K   	 |                      |          }| j                            |          rd S || _        	 t	          j        |                                 |           d {V  n# t          $ r t          j	        j
        w xY wd| _        )NTr   )_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IIIIIII , , ,m++,DO		 s   -A+ +Bc                   K   	 |                      |          }| j                                        rd S 	 t          j        |                                 |           d {V  n# t          $ r t          j        j	        w xY wr   )
r   r   seen_endr   r    r   r!   r"   r#   r$   )r   r&   r'   s      r   wait_for_endzAsyncioQuicStream.wait_for_end.   s      	,33J??G|$$&& ,&t'='='?'?IIIIIIIIII , , ,m++,	,s   -A# #A?Nc                   K   |                      |          }| j                                        r4|                     |           d {V  | j                                        S |                     d|           d {V  t          j        d| j        	                    d                    \  }|                     ||           d {V  | j        	                    |          S )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/////////<'')))--:.........mD$,*:*:1*=*=>>GT--j111111111<##D)))r   Fc                    K   |                      |          }| j                            | j        ||           d {V  d S r   )_encapsulater.   write
_stream_id)r   datagramis_enddatas       r   sendzAsyncioQuicStream.sendC   sN        **$$T_dFCCCCCCCCCCCr   c                    K   |                      ||          rM| j        4 d {V  | j                                         d d d           d {V  d S # 1 d {V swxY w Y   d S d S r   )_common_add_inputr   notify)r   r<   r;   s      r   
_add_inputzAsyncioQuicStream._add_inputG   s     !!$// 	'} ' ' ' ' ' ' ' '$$&&&' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '	' 	's   A
A Ac                 2   K   |                                   d S r   )_closer   s    r   closezAsyncioQuicStream.closeL   s      r   c                 
   K   | S r    r   s    r   
__aenter__zAsyncioQuicStream.__aenter__Q         r   c                    K   |                                   d {V  | j        4 d {V  | j                                         d d d           d {V  n# 1 d {V swxY w Y   dS NF)rD   r   r@   )r   exc_typeexc_valexc_tbs       r   	__aexit__zAsyncioQuicStream.__aexit__T   s      jjll= 	# 	# 	# 	# 	# 	# 	# 	#M  """	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	#us   A
A #A r   F)__name__
__module____qualname__r   r   r    r*   r5   r=   rA   rD   rG   rN   __classcell__r   s   @r   r	   r	      s        , , , , ,' ' '
  
  
 , , ,	* 	* 	* 	*D D D 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 )AsyncioQuicConnectionNc                    t                                          ||||||           d | _        t          j                    | _        t          j                    | _        t          j                    | _        d | _	        d | _
        d| _        d S rJ   )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__\   sw    WdFKQQQ#*=?? &}",.." "r   c           	      ,  K   	 t           j                            | j                  }t           j                            d          }|                    |t          j        d| j	        | j
        d         | j
        d         f           d {V | _        | j                                         | j        4 d {V  | j        s| j                            t           d            d {V \  }}|d         | j
        d         k    s|d         | j
        d         k    r_| j                            ||t'          j                               |                                  d {V  | j        	 d d d           d {V  n# 1 d {V swxY w Y   n# t*          $ r Y nw xY wd| _        |                                  d {V  | j                                         d S # d| _        |                                  d {V  | j                                         w xY w)Nr   r      T)r"   inetaf_for_address_addressasyncbackendget_backendmake_socketsocket
SOCK_DGRAM_source_peerrX   r[   set_donerecvfromr   r.   receive_datagramtime_wakeup	ExceptionrZ   )r   afbackendr:   r`   s        r   	_receiverzAsyncioQuicConnection._receiverf   s     	+((77B&229==G ")!4!4F%q$,A
ST8V" "      DL  $$&&&| 
) 
) 
) 
) 
) 
) 
) 
)* 	)040E0E)41 1 + + + + + +'Xw qzTZ]22gajDJqM6Q6Q $55hUUU ,,..((((((( * 	) 	)
) 
) 
) 
) 
) 
) 
) 
) 
) 
) 
) 
) 
) 
) 
) 
) 
) 
) 
) 
) 
) 
) 
) 
) 
) 
) 
)  	 	 	D	 DJ,,..       $((***** DJ,,..       $((****sO   B4F 8B.E9'F 9
FF FF 
G 
FG FG <Hc                    K   d| _         | j        4 d {V  | j                                         d d d           d {V  d S # 1 d {V swxY w Y   d S )NT)r_   r\   
notify_allr   s    r   rv   zAsyncioQuicConnection._wakeup   s      !# 	* 	* 	* 	* 	* 	* 	* 	*'')))	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	*s   A
AAc                    K   | j         4 d {V  | j        s| j                                          d {V  d d d           d {V  n# 1 d {V swxY w Y   d| _        d S rJ   )r\   r_   r   r   s    r   _wait_for_wake_timerz*AsyncioQuicConnection._wait_for_wake_timer   s      # 	. 	. 	. 	. 	. 	. 	. 	.% .&++---------	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. #s   'A		
AAc                 @  K   | j                                          d {V  | j        s| j                            t          j                              }|D ]9\  }}|| j        k    sJ | j                            || j        d            d {V  :| 	                                \  }}	 t          j        |                                 |           d {V  n# t          $ r Y nw xY w|                     |           |                                  d {V  | j        d S d S r   )r[   r   rr   r.   datagrams_to_sendru   rp   rX   sendto_get_timer_valuesr   r    r~   rw   _handle_timer_handle_events)r   	datagramsr:   r`   r&   intervals         r   _senderzAsyncioQuicConnection._sender   st     "'')))))))))* 	((::49;;GGI%. F F!'$*,,,,l))(DJEEEEEEEEEE%)%;%;%=%="Z&t'@'@'B'BHMMMMMMMMMM   z***%%''''''''' * 	( 	( 	( 	( 	(s   (-C 
C#"C#c                   K   d}	 | j                                         }|d S t          |t          j        j        j                  ry|                                 r| j        	                    |          }|D ]}t          |t          j
        j        j                  rl| j                            |j                  }|rJ|j        |j        |_        n|j        |j        |_        |j        r|                    dd           d {V  t          |t          j
        j        j                  rG| j                            |j                  }|r&|                    |j        |j                   d {V  n,| j                            |j                  }|r&|                    |j        |j                   d {V  nt          |t          j        j        j                  r| j                                         nt          |t          j        j        j                  r!d| _        | j                                         nat          |t          j        j        j                  r=| j                            |j                  }|r|                    dd           d {V  |dz  }|dk    rd}t?          j         d           d {V  )Nr   Tr   rf   
   )!r.   
next_event
isinstanceaioquicquiceventsStreamDataReceivedr/   _h3_connhandle_eventh3HeadersReceived_streamsr3   r   _headersheaders	_trailersstream_endedrA   DataReceivedr<   
end_streamHandshakeCompletedrZ   rq   ConnectionTerminatedrr   r]   cancelStreamResetr   sleep)r   countevent	h3_eventsh3_eventstreams         r   r   z$AsyncioQuicConnection._handle_events   s     )	'$//11E}%!4!GHH 7::<< N $ : :5 A AI$- " "%h
0A0QRR "%)]%6%6u%G%GF% G#)?#:6>6FFOO%+%5%=7?7GF$4#+#8 !G*0*;*;C*F*F$F$F$F$F$F$F$F''*2C2PQQ "%)]%6%6u%G%GF% "&,&7&7$,M83H'" '" !" !" !" !" !" !" !""" "]..u??F N$//
E<LMMMMMMMMME7<#6#IJJ 7(,,....E7<#6#KLL 7!
#**,,,,E7<#6#BCC 7**5?;; 7 ++C666666666QJErzzmA&&&&&&&&&S)	'r   Fc                 v   K   | j                             |||           |                                  d {V  d S r   )r.   send_stream_datarv   )r   r   r<   r;   s       r   r8   zAsyncioQuicConnection.write   sG      ))&$???llnnr   c                     | j         rd S t          j        |                                           | _        t          j        |                                           | _        d S r   )_closedr   Taskrz   r]   r   r^   r   s    r   runzAsyncioQuicConnection.run   sM    < 	F%l4>>+;+;<<#L88r   c                 4  K   	 t          j        | j                                        |           d {V  n# t          $ r t
          j        j        w xY w| j        rt          | j
                            d          }t          | |          }|| j        |<   |S rJ   )r   r    rZ   r   r!   r"   r#   r$   rr   r   r.   get_next_available_stream_idr	   r   )r   r'   r   r   s       r   make_streamz!AsyncioQuicConnection.make_stream   s      	("4#;#@#@#B#BGLLLLLLLLLL 	( 	( 	(-''	(: 	 $AA%HH	"433#)i s	   27 Ac                   K   | j         s| j                            | j        d         | j        d                    d| _         | j                                         | j                                         |                                  d {V  	 | j	         d {V  n# t          j        $ r Y nw xY w	 | j         d {V  n# t          j        $ r Y nw xY w| j                                         d {V  d S d S )Nr   rf   T)r   _managerclosedrp   r.   rD   r[   rq   rv   r]   r   CancelledErrorr^   rX   r   s    r   rD   zAsyncioQuicConnection.close   sG     | 	'M  A
1>>>DL""$$$ $$&&&,,..       ))))))))))   ''''''''')   ,$$&&&&&&&&&&&	' 	's$   B B/.B/3C CCr   rO   )rP   rQ   rR   r   rz   rv   r~   r   r   r8   r   r   rD   rS   rT   s   @r   rV   rV   [   s        # # # # # #+ + +8* * *
# # #( ( (+' +' +'Z   9 9 9
 
 
 
' ' ' ' ' ' 'r   rV   c                   H     e Zd Zdej        ddf fd	Z	 d
dZd Zd	 Z xZ	S )AsyncioQuicManagerNFc                 \    t                                          ||t          ||           d S r   )r   r   rV   )r   confverify_modeserver_namer   r   s        r   r   zAsyncioQuicManager.__init__   s-     	{,A;PRSSSSSr   U  r   Tc                 j    |                      |||||          \  }}|r|                                 |S r   )_connectr   )r   r`   ra   rb   rc   want_session_ticketr   starts           r   connectzAsyncioQuicManager.connect   sH     #mmT6;0C
 
U  	NNr   c                 
   K   | S r   rF   r   s    r   rG   zAsyncioQuicManager.__aenter__  rH   r   c                    K   t          | j                                                  }|D ]}|                                 d {V  dS rJ   )list_connectionsvaluesrD   )r   rK   rL   rM   connectionsr   s         r   rN   zAsyncioQuicManager.__aexit__  s_       4,335566% 	% 	%J""$$$$$$$$$$ur   )r   Nr   T)
rP   rQ   rR   sslCERT_REQUIREDr   r   rG   rN   rS   rT   s   @r   r   r      s        S%6DUT T T T T T RV           r   r   )r   rm   r   r1   ru   aioquic.quic.configurationr   aioquic.quic.connectionaioquic.quic.eventsdns.asyncbackendr"   dns.exceptiondns.inetdns.quic._commonr   r   r   r   r   r	   rV   r   rF   r   r   <module>r      sS     



   ! ! ! !                              ? ? ? ? ? ? ? ?DT' T' T' T' T'/ T' T' T'n    )     r   