
    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m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)NullContext)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 )TrioQuicStreamc                 |    t                                          ||           t          j                    | _        d S N)super__init__trio	Condition_wake_up)self
connection	stream_id	__class__s      @/var/www/html/env/lib/python3.11/site-packages/dns/quic/_trio.pyr   zTrioQuicStream.__init__   s0    Y///((    c                    K   	 | j                             |          rd S || _        | j        4 d {V  | j                                         d {V  d d d           d {V  n# 1 d {V swxY w Y   d| _        {)NTr   )_bufferhave
_expectingr   wait)r   amounts     r   wait_forzTrioQuicStream.wait_for   s     	 |  (( $DO} + + + + + + + +m((*********+ + + + + + + + + + + + + + + + + + + + + + + + + + +DO	 s    A&&
A03A0c                    K   	 | j                                         rd S | j        4 d {V  | j                                         d {V  d d d           d {V  n# 1 d {V swxY w Y   lr   )r   seen_endr   r   r   s    r   wait_for_endzTrioQuicStream.wait_for_end'   s     	+|$$&& } + + + + + + + +m((*********+ + + + + + + + + + + + + + + + + + + + + + + + + + +	+s    A
A(+A(Nc                 V  K   |t          d           }nt          j        |          }|5  | j                                        r?|                                  d {V  | j                                        cd d d            S |                     d           d {V  t          j
        d| j                            d                    \  }|                     |           d {V  | j                            |          cd d d            S # 1 swxY w Y   t          j        j        )N   z!H)r   r   move_on_after_connectionis_h3r"   r   get_allr   structunpackgetdns	exceptionTimeout)r   timeoutcontextsizes       r   receivezTrioQuicStream.receive.   s     ?!$''GG(11G 	. 	.%%'' .'')))))))))|++--	. 	. 	. 	. 	. 	. 	. 	.
 mmA&&&&&&&&& -dl.>.>q.A.ABBmmD)))))))))|''--	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. m##s   ADA>DDDFc                    K   |                      |          }| j                            | j        ||           d {V  d S r   )_encapsulater&   write
_stream_id)r   datagramis_enddatas       r   sendzTrioQuicStream.send>   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   r9   r8   s      r   
_add_inputzTrioQuicStream._add_inputB   s     !!$// 	'} ' ' ' ' ' ' ' '$$&&&' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '	' 	's   A
A Ac                 2   K   |                                   d S r   )_closer!   s    r   closezTrioQuicStream.closeG   s      r   c                 
   K   | S r    r!   s    r   
__aenter__zTrioQuicStream.__aenter__L         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)rA   r   r=   )r   exc_typeexc_valexc_tbs       r   	__aexit__zTrioQuicStream.__aexit__O   s      jjll= 	# 	# 	# 	# 	# 	# 	# 	#M  """	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	#us   A
A #A r   F)__name__
__module____qualname__r   r   r"   r2   r:   r>   rA   rD   rK   __classcell__r   s   @r   r
   r
      s        ) ) ) ) )     + + +$ $ $ $ D D D D' ' '
  
        r   r
   c                   H     e Zd Zd
 fd	Zd Zd ZddZd Zd
dZd	 Z	 xZ
S )TrioQuicConnectionNc                 :   t                                          ||||||           t          j                            | j        t          j        d          | _        t          j                    | _        t          j                    | _	        d | _
        d| _        d S )Nr   F)r   r   r   socket_af
SOCK_DGRAM_socketEvent_handshake_complete	_run_done_worker_scope_send_pending)r   r   addressportsourcesource_portmanagerr   s          r   r   zTrioQuicConnection.__init__W   sv    WdFKQQQ{))$(F4EqII#':<< !"r   c                   K   	 | j         rH| j                            t          j                            | j         | j                             d {V  | j                            | j                   d {V  | j	        sV| 
                    d          \  }}| j        rd}t          j        t          j                    |z             5 | _        | j                            t"                     d {V }| j                            || j        t)          j                               d d d            n# 1 swxY w Y   d | _        |                     |           |                                  d {V  d| _        | j                            t)          j                              }|D ]%\  }}| j                            |           d {V  &| j	        Vd| _	        | j                                         | j                                         d S # d| _	        | j                                         | j                                         w xY w)NFg        )deadlineT)_sourcerX   bindr,   inetlow_level_address_tuplerV   connect_peer_done_get_timer_valuesr]   r   CancelScopecurrent_timer\   recvr   r&   receive_datagramtime_handle_timer_handle_eventsdatagrams_to_sendr:   rA   rZ   set)r   
expirationintervalr7   	datagrams_s         r   _workerzTrioQuicConnection._worker_   s     "	+| l''H44T\48LL         ,&&tz222222222j 6)-)?)?)F)F&X% #  #H%!.008;   Y'%)\%6%67H%I%IIIIIIIH$55h
DIKKXXX	Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y
 &*""":...))+++++++++ &+" ,>>ty{{KK	#, 6 6KHa,++H55555555551 j 64 DJL   $((***** DJL   $((****s2   CH 
AD3'H 3D77H :D7;BH ;I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      
   )!r&   
next_event
isinstanceaioquicquiceventsStreamDataReceivedr'   _h3_connhandle_eventh3HeadersReceived_streamsr+   r   _headersheaders	_trailersstream_endedr>   DataReceivedr9   
end_streamHandshakeCompletedrZ   ru   ConnectionTerminatedrk   rX   rA   StreamResetr   sleep)r   countevent	h3_eventsh3_eventstreams         r   rs   z!TrioQuicConnection._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jmm#######Q(	$r   Fc                    K   | j                             |||           d| _        | j        | j                                         d S d S )NT)r&   send_stream_datar]   r\   cancel)r   r   r9   r8   s       r   r5   zTrioQuicConnection.write   sU      ))&$???!)%%''''' *)r   c                    K   | j         rd S t          j                    4 d {V }|                    | j                   d d d           d {V  n# 1 d {V swxY w Y   | j                                         d S r   )_closedr   open_nursery
start_soonrz   r[   ru   )r   nurserys     r   runzTrioQuicConnection.run   s      < 	F$&& 	- 	- 	- 	- 	- 	- 	-'t|,,,	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	-s   A
AAc                 n  K   |t          d           }nt          j        |          }|5  | j                                         d {V  | j        rt          | j                            d          }t          | |          }|| j
        |<   |cd d d            S # 1 swxY w Y   t          j        j        rG   )r   r   r%   rZ   r   rk   r   r&   get_next_available_stream_idr
   r   r,   r-   r.   )r   r/   r0   r   r   s        r   make_streamzTrioQuicConnection.make_stream   s     ?!$''GG(11G 	 	*//111111111z $##(EEeLLI#D)44F'-DM)$	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 m##s   A#BB"Bc                 J  K   | j         s| j                            | j        d         | j        d                    d| _         | j                                         d| _        | j        | j                                         | j	        
                                 d {V  d S d S )Nr   r|   T)r   _managerclosedrj   r&   rA   r]   r\   r   r[   r   r!   s    r   rA   zTrioQuicConnection.close   s      | 	(M  A
1>>>DL""$$$!%D!-"))+++.%%'''''''''''	( 	(r   r   rL   )rM   rN   rO   r   rz   rs   r5   r   r   rA   rP   rQ   s   @r   rS   rS   V   s        # # # # # ##+ #+ #+J*$ *$ *$X( ( ( (  $ $ $ $( ( ( ( ( ( (r   rS   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 )TrioQuicManagerNFc                 j    t                                          ||t          ||           || _        d S r   )r   r   rS   _nursery)r   r   confverify_modeserver_namer   r   s         r   r   zTrioQuicManager.__init__   s1     	{,>RPPPr   U  r   Tc                     |                      |||||          \  }}|r| j                            |j                   |S r   )_connectr   r   r   )r   r^   r_   r`   ra   want_session_ticketr   starts           r   ri   zTrioQuicManager.connect   sP     #mmT6;0C
 
U  	5M$$Z^444r   c                 
   K   | S r   rC   r!   s    r   rD   zTrioQuicManager.__aenter__   rE   r   c                    K   t          | j                                                  }|D ]}|                                 d {V  dS rG   )list_connectionsvaluesrA   )r   rH   rI   rJ   connectionsr   s         r   rK   zTrioQuicManager.__aexit__   s_       4,335566% 	% 	%J""$$$$$$$$$$ur   )r   Nr   T)
rM   rN   rO   sslCERT_REQUIREDr   ri   rD   rK   rP   rQ   s   @r   r   r      s         %	  	  	  	  	  	  RV           r   r   )rU   r   r)   rq   aioquic.quic.configurationr   aioquic.quic.connectionaioquic.quic.eventsr   dns.exceptionr,   dns.inetdns._asyncbackendr   dns.quic._commonr   r   r   r   r   r
   rS   r   rC   r   r   <module>r      sY    



   ! ! ! !               ) ) ) ) ) )             : : : : :^ : : :z~( ~( ~( ~( ~(, ~( ~( ~(B    &     r   