
    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 ej        Z G d de          Z G d de          Z G d de          ZdS )	    N)QUIC_MAX_DATAGRAMBaseQuicConnectionBaseQuicManager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 )SyncQuicStreamc                     t                                          ||           t          j                    | _        t          j                    | _        d S N)super__init__	threading	Condition_wake_upLock_lock)self
connection	stream_id	__class__s      @/var/www/html/env/lib/python3.11/site-packages/dns/quic/_sync.pyr   zSyncQuicStream.__init__   s@    Y///!+--^%%


    c                 p   	 |                      |          }| j        5  | j                            |          r	 d d d            d S || _        d d d            n# 1 swxY w Y   | j        5  | j                            |          st          j        j	        	 d d d            n# 1 swxY w Y   d| _        )NTr   )
_timeout_from_expirationr   _bufferhave
_expectingr   waitdns	exceptionTimeout)r   amount
expirationtimeouts       r   wait_forzSyncQuicStream.wait_for#   sX   		 33J??G ) )<$$V,, ) ) ) ) ) ) ) ) #)) ) ) ) ) ) ) ) ) ) ) ) ) ) )  0 0}))'22 0-//00 0 0 0 0 0 0 0 0 0 0 0 0 0 0  DO		 s)   AAA!A,,B%%B),B)c                 T   	 |                      |          }| j        5  | j                                        r	 d d d            d S 	 d d d            n# 1 swxY w Y   | j        5  | j                            |          st          j        j        	 d d d            n# 1 swxY w Y   r   )	r   r   r   seen_endr   r   r   r    r!   )r   r#   r$   s      r   wait_for_endzSyncQuicStream.wait_for_end/   sI   	033J??G  <((**                        0 0}))'22 0-//00 0 0 0 0 0 0 0 0 0 0 0 0 0 0	0s#   AAA%,BB"%B"Nc                 f   |                      |          }| j                                        rO|                     |           | j        5  | j                                        cd d d            S # 1 swxY w Y   d S |                     d|           | j        5  t          j	        d| j        
                    d                    \  }d d d            n# 1 swxY w Y   |                     ||           | j        5  | j        
                    |          cd d d            S # 1 swxY w Y   d S )N   z!H)_expiration_from_timeout_connectionis_h3r(   r   r   get_allr%   structunpackget)r   r$   r#   sizes       r   receivezSyncQuicStream.receive9   s   227;;
!!## 
	.j))) . .|++--. . . . . . . . . . . . . . . . . . MM!Z((( C C -dl.>.>q.A.ABBC C C C C C C C C C C C C C CMM$
+++ . .|''--. . . . . . . . . . . . . . . . . .s6   A11A58A50CCC?D&&D*-D*Fc                 r    |                      |          }| j                            | j        ||           d S r   )_encapsulater,   write
_stream_id)r   datagramis_enddatas       r   sendzSyncQuicStream.sendG   s8      **tf=====r   c                     |                      ||          r;| j        5  | j                                         d d d            d S # 1 swxY w Y   d S d S r   )_common_add_inputr   notify)r   r:   r9   s      r   
_add_inputzSyncQuicStream._add_inputK   s    !!$// 	' ' '$$&&&' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '	' 	's   AA	A	c                 n    | j         5  |                                  d d d            d S # 1 swxY w Y   d S r   )r   _closer   s    r   closezSyncQuicStream.closeP   s{    Z 	 	KKMMM	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   *..c                     | S r    rB   s    r   	__enter__zSyncQuicStream.__enter__T       r   c                     |                                   | j        5  | j                                         d d d            n# 1 swxY w Y   dS NF)rC   r   r>   )r   exc_typeexc_valexc_tbs       r   __exit__zSyncQuicStream.__exit__W   s    

] 	# 	#M  """	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	#us   AA	Ar   F)__name__
__module____qualname__r   r%   r(   r3   r;   r?   rC   rF   rM   __classcell__r   s   @r   r	   r	      s        & & & & &

  
  
 0 0 0. . . .> > > >' ' '
          r   r	   c                   t     e Zd Z fdZd Zd Zd Zd ZddZd fd	Z	d fd		Z
d
 ZddZ fdZd Z xZS )SyncQuicConnectionc                    t                                          ||||||           t          | j        t          j        d          | _        | j        l	 | j                            t          j
                            | j        | j                             n(# t          $ r | j                                          w xY w| j                            | j                   t	          j                    \  | _        | _        | j                            d           | j                            d           t)          j                    | _        d | _        t)          j                    | _        d S )Nr   F)r   r   socket_factory_afsocket
SOCK_DGRAM_socket_sourcebindr   inetlow_level_address_tuple	ExceptionrC   connect_peer
socketpair_send_wakeup_receive_wakeupsetblockingr   Event_handshake_complete_worker_threadr   r   )r   r   addressportsourcesource_portmanagerr   s          r   r   zSyncQuicConnection.__init___   sA   WdFKQQQ%dh0A1EE<#!!H44T\48LL       ""$$$ 	TZ(((4:4E4G4G1	D0((///  '''#,?#4#4 "^%%


s   AB %B=c                 6   d}|dk     r|dz  }	 | j                             t                    }n# t          $ r Y d S w xY w| j        5  | j                            || j        t          j                               d d d            n# 1 swxY w Y   |dk     d S d S )Nr   
      )	r[   recvr   BlockingIOErrorr   r,   receive_datagramrb   time)r   countr8   s      r   _readzSyncQuicConnection._readr   s    bjjQJE<,,->??"    U U 11(DJ	TTTU U U U U U U U U U U U U U U bjjjjjjs   / 
==3BB
B
c                 `    	 	 | j                             d           n# t          $ r Y d S w xY w.)NT    )re   rr   rs   rB   s    r   _drain_wakeupz SyncQuicConnection._drain_wakeup}   sM    	$))"----"   	s    
,,c                    	 t          j                    }|                    | j        t           j        | j                   |                    | j        t           j        | j                   | j        s| 	                    d          \  }}|
                    |          }|D ]\  }}|                                 | j        5  |                     |           d d d            n# 1 swxY w Y   |                                  | j        5  | j                            t#          j                              }d d d            n# 1 swxY w Y   |D ]0\  }}	 | j                            |           !# t&          $ r Y -w xY w| j        | j        5  d| _        d d d            n# 1 swxY w Y   | j                                         | j                                         d S # | j        5  d| _        d d d            n# 1 swxY w Y   | j                                         | j                                         w xY w)NFT)	selectorsDefaultSelectorregisterr[   
EVENT_READrw   re   rz   _done_get_timer_valuesselectr:   r   _handle_timer_handle_eventsr,   datagrams_to_sendru   r;   rs   rC   rh   set)	r   selr#   intervalitemskey_	datagramsr8   s	            r   _workerzSyncQuicConnection._worker   s;   	++--CLLy';TZHHHLL-y/CTEWXXXj )-)?)?)F)F&X

8,,#  FCHHJJJJZ 3 3&&z2223 3 3 3 3 3 3 3 3 3 3 3 3 3 3##%%%Z P P $ 0 B B49;; O OIP P P P P P P P P P P P P P P#,  KHa))(3333*    j "  " "!
" " " " " " " " " " " " " " "L   $((*****	  " "!
" " " " " " " " " " " " " " "L   $((****s   CG# C%G# %C))G# ,C)-G# ,E7G# EG# 
E
G# E10G# 1
E>;G# =E>>G# F$$F(+F(#H=+G?3H=?HH=H6H=c                 ^   	 | j         5  | j                                        }d d d            n# 1 swxY w Y   |d S t          |t          j        j        j                  r|                                 rP| j	        
                    |          }|D ]0}t          |t          j        j        j                  r| j         5  | j                            |j                  }d d d            n# 1 swxY w Y   |rD|j        |j        |_        n|j        |j        |_        |j        r|                    dd           t          |t          j        j        j                  r`| j         5  | j                            |j                  }d d d            n# 1 swxY w Y   |r |                    |j        |j                   2ne| j         5  | j                            |j                  }d d d            n# 1 swxY w Y   |r |                    |j        |j                   nt          |t          j        j        j                  r| j                                         nt          |t          j        j        j                  r'| j         5  d| _        d d d            n# 1 swxY w Y   nzt          |t          j        j        j                  rV| j         5  | j                            |j                  }d d d            n# 1 swxY w Y   |r|                    dd           -)NTr   )r   r,   
next_event
isinstanceaioquicquiceventsStreamDataReceivedr-   _h3_connhandle_eventh3HeadersReceived_streamsr1   r   _headersheaders	_trailersstream_endedr?   DataReceivedr:   
end_streamHandshakeCompletedrh   r   ConnectionTerminatedr   StreamReset)r   event	h3_eventsh3_eventstreams        r   r   z!SyncQuicConnection._handle_events   s   &	1 6 6(33556 6 6 6 6 6 6 6 6 6 6 6 6 6 6}%!4!GHH !1::<< H $ : :5 A AI$- X X%h
0A0QRR X!% L L)-):):5?)K)KL L L L L L L L L L L L L L L% A#)?#:6>6FFOO%+%5%=7?7GF$4#+#8 !A$*$5$5c4$@$@$@''*2C2PQQ X!% L L)-):):5?)K)KL L L L L L L L L L L L L L L% X & 1 1(-AV W W WX"  D D!%!2!25?!C!CD D D D D D D D D D D D D D D H))%*e6FGGGE7<#6#IJJ 	1(,,....E7<#6#KLL 1Z & &!%DJ& & & & & & & & & & & & & & &E7<#6#BCC 1Z @ @!]..u??F@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ 1%%c4000M&	1sf   /33 C..C2	5C2	+ FF	F	 G;;G?G?J''J+.J+ L

LLFc                     | j         5  | j                            |||           d d d            n# 1 swxY w Y   | j                            d           d S N   )r   r,   send_stream_datard   r;   )r   r   r:   r9   s       r   r6   zSyncQuicConnection.write   s    Z 	D 	D--fdFCCC	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	Dw'''''s   155c                     | j         5  t                                          |||           d d d            n# 1 swxY w Y   |r| j                            d           d S d S r   )r   r   send_headersrd   r;   )r   r   r   r9   r   s       r   r   zSyncQuicConnection.send_headers   s    Z 	= 	=GG  GV<<<	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	,""7+++++	, 	,   $9= =c                     | j         5  t                                          |||           d d d            n# 1 swxY w Y   |r| j                            d           d S d S r   )r   r   	send_datard   r;   )r   r   r:   r9   r   s       r   r   zSyncQuicConnection.send_data   s    Z 	7 	7GGiv666	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	,""7+++++	, 	,r   c                     | j         rd S t          j        | j                  | _        | j                                         d S )N)target)_closedr   Threadr   ri   startrB   s    r   runzSyncQuicConnection.run   sD    < 	F'.dlCCC!!#####r   Nc                    | j                             |          st          j        j        | j        5  | j        rt          | j        	                    d          }t          | |          }|| j        |<   d d d            n# 1 swxY w Y   |S rI   )rh   r   r   r    r!   r   r   r   r,   get_next_available_stream_idr	   r   )r   r$   r   r   s       r   make_streamzSyncQuicConnection.make_stream   s    ',,W55 	(-''Z 	. 	.z $##(EEeLLI#D)44F'-DM)$	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. s   ABB	Bc                     | j         5  t                                          |           d d d            d S # 1 swxY w Y   d S r   )r   r   close_stream)r   r   r   s     r   r   zSyncQuicConnection.close_stream   s    Z 	, 	,GG  +++	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,s   "8<<c                 v   | j         5  | j        r	 d d d            d S | j                            | j        d         | j        d                    d| _        | j                                         | j                            d           d d d            n# 1 swxY w Y   | j	        
                                 d S )Nr   rq   Tr   )r   r   _managerclosedrb   r,   rC   rd   r;   ri   joinrB   s    r   rC   zSyncQuicConnection.close   s
   Z 	, 	,| 	, 	, 	, 	, 	, 	, 	, 	, M  A
1>>>DL""$$$""7+++	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	  """""s   	BA+BBBrN   r   )rO   rP   rQ   r   rw   rz   r   r   r6   r   r   r   r   r   rC   rR   rS   s   @r   rU   rU   ^   s       & & & & &&	U 	U 	U  + + +8'1 '1 '1R( ( ( (
, , , , , ,, , , , , ,$ $ $	 	 	 	, , , , ,# # # # # # #r   rU   c                   n     e Zd Zdej        ddf fd	Z	 	 	 	 	 ddZ fdZ fd	Z fd
Z	d Z
d Z xZS )SyncQuicManagerNFc                     t                                          ||t          ||           t          j                    | _        d S r   )r   r   rU   r   r   r   )r   confverify_modeserver_namer   r   s        r   r   zSyncQuicManager.__init__   s9     	{,>RPPP^%%


r   U  r   Tc           	          | j         5  |                     ||||||          \  }}|r|                                 |cd d d            S # 1 swxY w Y   d S r   )r   _connectr   )	r   rj   rk   rl   rm   want_session_ticket
want_tokenr   r   s	            r   ra   zSyncQuicManager.connect  s     Z 	 	"&--v{4G# #Z  !   	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   5A

AAc                     | j         5  t                                          ||           d d d            d S # 1 swxY w Y   d S r   )r   r   r   )r   rj   rk   r   s      r   r   zSyncQuicManager.closed  s    Z 	* 	*GGNN7D)))	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	*s   #9= =c                     | j         5  t                                          |||           d d d            d S # 1 swxY w Y   d S r   )r   r   save_session_ticket)r   rj   rk   ticketr   s       r   r   z#SyncQuicManager.save_session_ticket  s    Z 	? 	?GG''v>>>	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	?   $:>>c                     | j         5  t                                          |||           d d d            d S # 1 swxY w Y   d S r   )r   r   
save_token)r   rj   rk   tokenr   s       r   r   zSyncQuicManager.save_token  s    Z 	5 	5GGwe444	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5r   c                     | S r   rE   rB   s    r   rF   zSyncQuicManager.__enter__  rG   r   c                     t          | j                                                  }|D ]}|                                 dS rI   )list_connectionsvaluesrC   )r   rJ   rK   rL   connectionsr   s         r   rM   zSyncQuicManager.__exit__!  sI     4,335566% 	 	Jur   )r   Nr   TT)rO   rP   rQ   sslCERT_REQUIREDr   ra   r   r   r   rF   rM   rR   rS   s   @r   r   r      s        S%6DU& & & & & &     "* * * * *? ? ? ? ?5 5 5 5 5        r   r   )r|   rY   r   r/   r   ru   aioquic.quic.configurationr   aioquic.quic.connectionaioquic.quic.eventsdns.exceptionr   dns.inetdns.quic._commonr   r   r   r   r   rW   r	   rU   r   rE   r   r   <module>r      s^        



       ! ! ! !                           > > > > >^ > > >BY# Y# Y# Y# Y#+ Y# Y# Y#x- - - - -o - - - - -r   