
    df                         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      G/home/api-vastappli/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
                  j                  | j                         t        j                         \  | _	        | _
        | j                  j                  d       | j
                  j                  d       | j                  N	 | j
                  j                  t        j                  j!                  | j                  | j                               t'        j(                         | _        d | _        t'        j.                         | _        y # t"        $ r | j
                  j%                           w xY w)Nr   F)r   r   socket_af
SOCK_DGRAM_socketconnect_peer
socketpair_send_wakeup_receive_wakeupsetblocking_sourcebindr    inetlow_level_address_tuple	Exceptionr?   r   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TZZ(4:4E4E4G1	D0((/  '<<#!!HH44T\\488L $-??#4 "^^%
  ""$s   AE %E?c                 B   d}|dk  r}|dz  }	 | j                   j                  t              }| j                  5  | j
                  j                  || j                  d   t        j                                d d d        |dk  r|y y # t        $ r Y y w xY w# 1 sw Y    xY w)Nr   
      )	rV   recvr   BlockingIOErrorr   r1   receive_datagramrX   time)r   countr4   s      r   _readzSyncQuicConnection._reade   s    bjQJE<<,,->?  X  11(DJJqM499;WX bj # X X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                  |       | j                  j                  t!        j                                }d d d        D ]!  \  }}	 | j                  j#                  |       # | j'                          | j                  s| j                  5  d| _        d d d        | j(                  j+                          y # 1 sw Y   xY w# t$        $ r Y w xY w# 1 sw Y   ?x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_timerr1   datagrams_to_sendrp   r7   rn   _handle_eventsrc   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 P&&z2 $ 0 0 B B499; OIP $- KHa))(3 ##% jj   "!
" $$((*P P + 
" " "!
" " " $$((*sl   CF5 ?FF5 F8F5 #F)FF5 	F&#F5 %F&&F5 )F25G:G
	G:G"G:c                 \   	 | j                   5  | j                  j                         }d d d        y t        |t        j
                  j                  j                        rc| j                   5  | j                  j                  |j                        }d d d        r|j                  |j                  |j                         nt        |t        j
                  j                  j                        r| j                  j!                          nxt        |t        j
                  j                  j"                        s.t        |t        j
                  j                  j$                        r| j                   5  d| _        d d d        # 1 sw Y   axY w# 1 sw Y   xY w# 1 sw Y   %xY w)NT)r   r1   
next_event
isinstanceaioquicquiceventsStreamDataReceived_streamsr,   r   r;   r6   
end_streamHandshakeCompletedrc   r   ConnectionTerminatedStreamResetr{   )r   eventstreams      r   r   z!SyncQuicConnection._handle_events   s7    6((3356}%!4!4!G!GHZZ @!]]..u?F@%%ejj%2B2BCE7<<#6#6#I#IJ((,,.w||**??E7<<#6#6#B#BCZZ &!%DJ& 6 6
@ @& &s#   F.&F6F"FF"F+c                     | j                   5  | j                  j                  |||       d d d        | j                  j	                  d       y # 1 sw Y   %xY w)N   )r   r1   send_stream_datarZ   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closedrX   r1   r?   rZ   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    &&	X+4&&(
$	,#r   rQ   c                   X     e Zd Zdej                  df fd	Zd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   r   r   s          r   rW   zSyncQuicManager.connect   sG    ZZ 	"&--v{"S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                     | 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   )rK   rL   rM   sslCERT_REQUIREDr   rW   r   rB   rI   rN   rO   s   @r   r   r      s)     c.?.?T &*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u#+ u#po r   