
    RPf                         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e d      re j(                  Zne j,                  Z G d de      Z G d de      Z G d d	e      Zy)
    N)QUIC_MAX_DATAGRAMBaseQuicConnectionBaseQuicManagerBaseQuicStreamUnexpectedEOFPollSelectorc                   L     e Zd Z f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
                         | _        y N)super__init__	threading	Condition_wake_upLock_lock)self
connection	stream_id	__class__s      H/var/www/fastapitest/venv/lib/python3.12/site-packages/dns/quic/_sync.pyr   zSyncQuicStream.__init__    s0    Y/!++-^^%
    c                 ~   	 | j                  |      }| j                  5  | j                  j                  |      r
	 d d d        y || _        d d d        | j
                  5  | j
                  j                  |      st        j                  j                  	 d d d        d| _        # 1 sw Y   \xY w# 1 sw Y   xY w)Nr   )
_timeout_from_expirationr   _bufferhave
_expectingr   waitdns	exceptionTimeout)r   amount
expirationtimeouts       r   wait_forzSyncQuicStream.wait_for%   s    33J?G )<<$$V,) ) #))  0}}))'2--/// 30  DO ) )0 0s   B'B' 6B3'B03B<c                    | j                  |      }| j                  d|       | j                  5  t        j                  d| j
                  j                  d            \  }d d d        | j                  |       | j                  5  | j
                  j                  |      cd d d        S # 1 sw Y   LxY w# 1 sw Y   y xY w)N   z!H)_expiration_from_timeoutr&   r   structunpackr   get)r   r%   r$   sizes       r   receivezSyncQuicStream.receive1   s    227;
a$ZZ 	?mmD$,,*:*:1*=>GT	?dJ'ZZ 	*<<##D)	* 	*	? 	?	* 	*s   2B-B9-B69Cc                 t    | j                  |      }| j                  j                  | j                  ||       y r   )_encapsulate_connectionwrite
_stream_id)r   datagramis_enddatas       r   sendzSyncQuicStream.send:   s.      *tf=r   c                     | j                  ||      r0| j                  5  | j                  j                          d d d        y y # 1 sw Y   y xY wr   )_common_add_inputr   notify)r   r6   r5   s      r   
_add_inputzSyncQuicStream._add_input>   sH    !!$/ '$$&' ' 0' 's   AAc                 f    | j                   5  | j                          d d d        y # 1 sw Y   y xY wr   )r   _closer   s    r   closezSyncQuicStream.closeC   s'    ZZ 	KKM	 	 	s   '0c                     | S r    r>   s    r   	__enter__zSyncQuicStream.__enter__G       r   c                     | j                          | j                  5  | j                  j                          d d d        y# 1 sw Y   yxY wNF)r?   r   r:   )r   exc_typeexc_valexc_tbs       r   __exit__zSyncQuicStream.__exit__J   s8    

]] 	#MM  "	#	#s   AA
r   F)__name__
__module____qualname__r   r&   r.   r7   r;   r?   rB   rI   __classcell__r   s   @r   r
   r
      s+    &

 *>'
r   r
   c                   \     e Zd Z fdZd Zd Zd Zd ZddZd Z	ddZ
 fd	Zd
 Z xZS )SyncQuicConnectionc                    t         |   ||||||       t        j                  | j                  t        j                  d      | _        | j                  N	 | j
                  j                  t        j                  j                  | j                  | j                               | j
                  j                  | j                         t        j                         \  | _        | _        | j"                  j%                  d       | j
                  j%                  d       t'        j(                         | _        d | _        t'        j.                         | _        y # t        $ r | j
                  j                           w xY w)Nr   F)r   r   socket_af
SOCK_DGRAM_socket_sourcebindr    inetlow_level_address_tuple	Exceptionr?   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__R   s   WdFKQ}}TXXv/@/@!D<<#!!HH44T\\488L 	TZZ(4:4E4E4G1	D0((/  '#,??#4 "^^%
  ""$s   AE %E?c                 <   d}|dk  rz|dz  }	 | j                   j                  t              }| j                  5  | j
                  j                  || j                  t        j                                d d d        |dk  ryy y # t        $ r Y y w xY w# 1 sw Y    xY w)Nr   
      )	rV   recvr   BlockingIOErrorr   r1   receive_datagramr]   time)r   countr4   s      r   _readzSyncQuicConnection._reade   s    bjQJE<<,,->?  U  11(DJJ		TU bj # U Us   B :B	BBBc                 \    	 	 | j                   j                  d       # t        $ r Y y w xY w)N    )r`   rm   rn   r>   s    r   _drain_wakeupz SyncQuicConnection._drain_wakeupp   s7    $$))"-  # s    	++c                 <   	 t               }|j                  | j                  t        j                  | j
                         |j                  | j                  t        j                  | j                         | j                  s| j                  d      \  }}|j                  |      }|D ]  \  }}|j                           | j                  5  | j                  |       d d d        | j                          | j                  5  | j                  j!                  t#        j"                               }d d d        D ]!  \  }}	 | j                  j%                  |       # | j                  s| j                  5  d| _        d d d        | j(                  j+                          y # 1 sw Y   xY w# 1 sw Y   xY w# t&        $ r Y w xY w# 1 sw Y   KxY w# | j                  5  d| _        d d d        n# 1 sw Y   nxY w| j(                  j+                          w xY w)NFT)_selector_classregisterrV   	selectors
EVENT_READrr   r`   ru   _done_get_timer_valuesselectr6   r   _handle_timer_handle_eventsr1   datagrams_to_sendrp   r7   rn   rc   set)	r   selr$   intervalitemskey_	datagramsr4   s	            r   _workerzSyncQuicConnection._workerw   s   	+!#CLLy';';TZZHLL--y/C/CTEWEWXjj)-)?)?)F&X

8,# FCHHJZZ 3&&z23##%ZZ P $ 0 0 B B499; OIP#, KHa))(3 jj"  "!
" $$((*3 3P P
 + " " "!
" " " $$((*s   CG F#$G .F/1G F;G 8G
#F,(G /F84G ;	GG GG 
GH#G4+	H4G=9"Hc                    	 | j                   5  | j                  j                         }d d d        y t        |t        j
                  j                  j                        re| j                   5  | j                  j                  |j                        }d d d        r8|j                  |j                  |j                         nt        |t        j
                  j                  j                        r| j                  j!                          nt        |t        j
                  j                  j"                        r| j                   5  d| _        d d d        n|t        |t        j
                  j                  j&                        rN| j                   5  | j                  j                  |j                        }d d d        r|j                  dd       # 1 sw Y   xY w# 1 sw Y   TxY w# 1 sw Y   %xY w# 1 sw Y   ExY w)NTr   )r   r1   
next_event
isinstanceaioquicquiceventsStreamDataReceived_streamsr,   r   r;   r6   
end_streamHandshakeCompletedrc   r   ConnectionTerminatedr{   StreamReset)r   eventstreams      r   r   z!SyncQuicConnection._handle_events   s    6((3356}%!4!4!G!GHZZ @!]]..u?F@%%ejj%2B2BCE7<<#6#6#I#IJ((,,.E7<<#6#6#K#KLZZ &!%DJ& &E7<<#6#6#B#BCZZ @!]]..u?F@%%c40' 6 6
@ @& &@ @s/   G.&G&
G3&G?G#&G03G<?Hc                     | j                   5  | j                  j                  |||       d d d        | j                  j	                  d       y # 1 sw Y   %xY w)N   )r   r1   send_stream_datar_   r7   )r   r   r6   r5   s       r   r2   zSyncQuicConnection.write   sN    ZZ 	D--fdFC	Dw'	D 	Ds   AAc                     | j                   ry t        j                  | j                        | _        | j                  j                          y )N)target)_closedr   Threadr   rd   startr>   s    r   runzSyncQuicConnection.run   s5    <<'..dllC!!#r   c                 D   | j                   j                  |      st        j                  j                  | j
                  5  | j                  rt        | j                  j                  d      }t        | |      }|| j                  |<   d d d        |S # 1 sw Y   S xY wrE   )rc   r   r    r!   r"   r   r{   r   r1   get_next_available_stream_idr
   r   )r   r%   r   r   s       r   make_streamzSyncQuicConnection.make_stream   s    '',,W5--'''ZZ 	.zz##((EEeLI#D)4F'-DMM)$	. 	. s   A	BBc                 f    | j                   5  t        | 	  |       d d d        y # 1 sw Y   y xY wr   )r   r   close_stream)r   r   r   s     r   r   zSyncQuicConnection.close_stream   s,    ZZ 	,G +	, 	, 	,s   '0c                    | j                   5  | j                  r
	 d d d        y | j                  j                  | j                  d   | j                  d          d| _        | j
                  j                          | j                  j                  d       d d d        | j                  j                          y # 1 sw Y   $xY w)Nr   rl   Tr   )r   r   _managerclosedr]   r1   r?   r_   r7   rd   joinr>   s    r   r?   zSyncQuicConnection.close   s    ZZ 	,||	, 	, MM  A

1>DL""$""7+	, 	  "	, 	,s   B9A2B99CrJ   r   )rK   rL   rM   r   rr   ru   r   r   r2   r   r   r   r?   rN   rO   s   @r   rQ   rQ   Q   s6    &&	U+61,(
$	,#r   rQ   c                   d     e Zd Zdej                  df fd	Z	 ddZ fdZ fdZd Z	d Z
 xZS )	SyncQuicManagerNc                 d    t         |   ||t        |       t        j                         | _        y r   )r   r   rQ   r   r   r   )r   confverify_modeserver_namer   s       r   r   zSyncQuicManager.__init__   s%    {,>L^^%
r   c                     | j                   5  | j                  |||||      \  }}|r|j                          |cd d d        S # 1 sw Y   y xY wr   )r   _connectr   )r   re   rf   rg   rh   want_session_ticketr   r   s           r   r\   zSyncQuicManager.connect   sQ     ZZ 	"&--v{4G#Z  	 	 	s   ,AAc                 h    | j                   5  t        | 	  ||       d d d        y # 1 sw Y   y xY wr   )r   r   r   )r   re   rf   r   s      r   r   zSyncQuicManager.closed   s-    ZZ 	*GN7D)	* 	* 	*s   (1c                 j    | j                   5  t        | 	  |||       d d d        y # 1 sw Y   y xY wr   )r   r   save_session_ticket)r   re   rf   ticketr   s       r   r   z#SyncQuicManager.save_session_ticket   s0    ZZ 	?G'v>	? 	? 	?s   )2c                     | S r   rA   r>   s    r   rB   zSyncQuicManager.__enter__   rC   r   c                 x    t        | j                  j                               }|D ]  }|j                           yrE   )list_connectionsvaluesr?   )r   rF   rG   rH   connectionsr   s         r   rI   zSyncQuicManager.__exit__   s;     4,,3356% 	J	r   )iU  Nr   T)rK   rL   rM   sslCERT_REQUIREDr   r\   r   r   rB   rI   rN   rO   s   @r   r   r      s5     c.?.?T &
 RV	*?r   r   )ry   rS   r   r*   r   rp   aioquic.quic.configurationr   aioquic.quic.connectionaioquic.quic.eventsdns.exceptionr    dns.inetdns.quic._commonr   r   r   r   r   hasattrr   rw   SelectSelectorr
   rQ   r   rA   r   r   <module>r      s}      
    !      9n%,,O..O/^ /dy#+ y#x!o !r   