
    g(                         S SK r S SKrS SKrS SKrS SKrS SKrS SKrS SKrS SK	rS SK
rS SKrS SKJrJrJrJrJr  \R                  r " S S\5      r " S S\5      r " S S\5      rg)	    N)QUIC_MAX_DATAGRAMBaseQuicConnectionBaseQuicManagerBaseQuicStreamUnexpectedEOFc                   `   ^  \ rS rSrU 4S jrS rS rSS jrSS jrS r	S r
S	 rS
 rSrU =r$ )SyncQuicStream   c                    > [         TU ]  X5        [        R                  " 5       U l        [        R
                  " 5       U l        g N)super__init__	threading	Condition_wake_upLock_lock)self
connection	stream_id	__class__s      G/home/matz/Project1/venv/lib/python3.13/site-packages/dns/quic/_sync.pyr   SyncQuicStream.__init__   s.    /!++-^^%
    c                     U R                  U5      nU R                     U R                  R                  U5      (       a
   S S S 5        g Xl        S S S 5        U R
                     U R
                  R                  U5      (       d  [        R                  R                  e S S S 5        SU l        M  ! , (       d  f       Ng= f! , (       d  f       N(= f)Nr   )
_timeout_from_expirationr   _bufferhave
_expectingr   waitdns	exceptionTimeout)r   amount
expirationtimeouts       r   wait_forSyncQuicStream.wait_for#   s    33J?G<<$$V,,  #)  }}))'22--/// 3   DO  s   "B1
B1$;C1
B?
Cc                     U R                  U5      nU R                     U R                  R                  5       (       a
   S S S 5        g  S S S 5        U R                     U R                  R                  U5      (       d  [        R                  R                  e S S S 5        M  ! , (       d  f       N`= f! , (       d  f       N!= fr   )	r   r   r   seen_endr   r    r!   r"   r#   )r   r%   r&   s      r   wait_for_endSyncQuicStream.wait_for_end/   s    33J?G<<((** *  }}))'22--/// 3   s   !B$;B5$
B25
Cc                    U R                  U5      nU R                  R                  5       (       aA  U R                  U5        U R                     U R
                  R                  5       sS S S 5        $ U R                  SU5        U R                     [        R                  " SU R
                  R                  S5      5      u  nS S S 5        U R                  WU5        U R                     U R
                  R                  U5      sS S S 5        $ ! , (       d  f       g = f! , (       d  f       Nb= f! , (       d  f       g = f)N   z!H)_expiration_from_timeout_connectionis_h3r+   r   r   get_allr'   structunpackget)r   r&   r%   sizes       r   receiveSyncQuicStream.receive9   s    227;
!!##j)||++-  MM!Z( --dll.>.>q.AB MM$
+||''-    s$   D3D)D0
D
D-0
D>c                 r    U R                  U5      nU R                  R                  U R                  X25        g r   )_encapsulater0   write
_stream_id)r   datagramis_enddatas       r   sendSyncQuicStream.sendG   s,      *t=r   c                     U R                  X5      (       a0  U R                     U R                  R                  5         S S S 5        g g ! , (       d  f       g = fr   )_common_add_inputr   notify)r   r?   r>   s      r   
_add_inputSyncQuicStream._add_inputK   s<    !!$//$$&  0s   A
Ac                 p    U R                      U R                  5         S S S 5        g ! , (       d  f       g = fr   )r   _closer   s    r   closeSyncQuicStream.closeP   s    ZZKKM ZZs   '
5c                     U $ r    rI   s    r   	__enter__SyncQuicStream.__enter__T       r   c                     U R                  5         U R                     U R                  R                  5         S S S 5        g! , (       d  f       g= fNF)rJ   r   rD   )r   exc_typeexc_valexc_tbs       r   __exit__SyncQuicStream.__exit__W   s5    

]]MM  "  ]s   A
A)r   r   r   r   F)__name__
__module____qualname____firstlineno__r   r'   r+   r7   r@   rE   rJ   rN   rV   __static_attributes____classcell__r   s   @r   r	   r	      s5    &

 0.>'
 r   r	   c                      ^  \ rS rSrU 4S jrS rS rS rS rSS jr	SU 4S jjr
SU 4S	 jjrS
 rSS jrU 4S jrS rSrU =r$ )SyncQuicConnection^   c                   > [         TU ]  XX4XV5        [        U R                  [        R
                  S5      U l        U R                  bN   U R                  R                  [        R                  R                  U R                  U R                  5      5        U R                  R                  U R                  5        [        R                   " 5       u  U l        U l        U R$                  R'                  S5        U R                  R'                  S5        [(        R*                  " 5       U l        S U l        [(        R0                  " 5       U l        g ! [         a    U R                  R                  5         e f = f)Nr   F)r   r   socket_factory_afsocket
SOCK_DGRAM_socket_sourcebindr!   inetlow_level_address_tuple	ExceptionrJ   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   SyncQuicConnection.__init___   s   dKQ%dhh0A0A1E<<#!!HH44T\\488L 	TZZ(4:4E4E4G1	D0((/  '#,??#4 "^^%
  ""$s   AE &E7c                 N   SnUS:  a|  US-  n U R                   R                  [        5      nU R                     U R
                  R                  X R                  [        R                  " 5       5        S S S 5        US:  a  M{  g g ! [         a     g f = f! , (       d  f       N(= f)Nr   
      )	rh   recvr   BlockingIOErrorr   r0   receive_datagramro   time)r   countr=   s      r   _readSyncQuicConnection._readr   s    bjQJE<<,,->?   11(JJ		T  bj # s   B :B
BB
B$c                 `      U R                   R                  S5        M  ! [         a     g f = f)N    )rr   r   r   rI   s    r   _drain_wakeup SyncQuicConnection._drain_wakeup}   s7    $$))"-  # s     
--c                      [         R                  " 5       nUR                  U R                  [         R                  U R
                  5        UR                  U R                  [         R                  U R                  5        U R                  (       d  U R                  S5      u  p#UR                  U5      nU H  u  pVUR                  5         M     U R                     U R                  U5        S S S 5        U R                  5         U R                     U R                  R!                  ["        R"                  " 5       5      nS S S 5        W H!  u  p U R                  R%                  U5        M#     U R                  (       d  M  U R                     SU l        S S S 5        U R                  R)                  5         U R*                  R-                  5         g ! , (       d  f       N= f! , (       d  f       N= f! [&         a     M  f = f! , (       d  f       Nv= f! U R                     SU l        S S S 5        O! , (       d  f       O= fU R                  R)                  5         U R*                  R-                  5         f = f)NFT)	selectorsDefaultSelectorregisterrh   
EVENT_READr   rr   r   _done_get_timer_valuesselectr?   r   _handle_timer_handle_eventsr0   datagrams_to_sendr   r@   r   rJ   ru   set)	r   selr%   intervalitemskey_	datagramsr=   s	            r   _workerSyncQuicConnection._worker   s   	+++-CLLy';';TZZHLL--y/C/CTEWEWXjj)-)?)?)F&

8,#FCHHJ $ZZ&&z2  ##%ZZ $ 0 0 B B499; OI  #,KH))(3 $- jjj" !
 LL $$((*!  Z  Z
 +  !
 LL $$((*s   CH G/$H /G&H G7-H H
G#H &
G40H 7
HH HH 
HI=&H7.	I=7
I<I=c                 6    U R                      U R                  R                  5       nS S S 5        Wc  g [        U[        R
                  R                  R                  5      (       Ga!  U R                  5       (       Ga  U R                  R                  U5      nU GH~  n[        U[        R                  R                  R                  5      (       a  U R                      U R                  R                  UR                  5      nS S S 5        W(       ad  UR                   c  UR"                  Ul        OUR$                  c  UR"                  Ul        UR&                  (       a  UR)                  SS5        M  M  M  [        U[        R                  R                  R*                  5      (       d  GM  U R                      U R                  R                  UR                  5      nS S S 5        W(       d  GMX  UR)                  UR,                  UR&                  5        GM     GOU R                      U R                  R                  UR                  5      nS S S 5        W(       a&  UR)                  UR,                  UR.                  5        GO$[        U[        R
                  R                  R0                  5      (       a  U R2                  R5                  5         O[        U[        R
                  R                  R6                  5      (       a  U R                      SU l        S S S 5        O[        U[        R
                  R                  R:                  5      (       aS  U R                      U R                  R                  UR                  5      nS S S 5        W(       a  UR)                  SS5        GM  ! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       NY= f! , (       d  f       N= f)NTr   )r   r0   
next_event
isinstanceaioquicquiceventsStreamDataReceivedr1   _h3_connhandle_eventh3HeadersReceived_streamsr5   r   _headersheaders	_trailersstream_endedrE   DataReceivedr?   
end_streamHandshakeCompletedru   r   ConnectionTerminatedr   StreamReset)r   event	h3_eventsh3_eventstreams        r   r   !SyncQuicConnection._handle_events   s   ((335 }%!4!4!G!GHH::<< $ : :5 AI$-%h

0A0A0Q0QRR!%)-):):5??)K ",%#)??#:6>6F6FFO%+%5%5%=7?7G7GF$4#+#8#8$*$5$5c4$@ $9  & ('**2C2C2P2PQQ!%)-):):5??)K ",%v & 1 1(--AVAV W %." !%!2!25??!C $))%**e6F6FGE7<<#6#6#I#IJJ((,,.E7<<#6#6#K#KLLZZ!%DJ  ZE7<<#6#6#B#BCCZZ!]]..u?F  %%c40M  ", ",
 $  Z  ZsG   N1&O<&O-&O'O9'&P
1
O 
O	
O$	'
O69
P

Pc                     U R                      U R                  R                  XU5        S S S 5        U R                  R	                  S5        g ! , (       d  f       N*= fN   )r   r0   send_stream_datarq   r@   )r   r   r?   r>   s       r   r;   SyncQuicConnection.write   s@    ZZ--fFC w' Zs   A
Ac                    > U R                      [        TU ]	  XU5        S S S 5        U(       a  U R                  R	                  S5        g g ! , (       d  f       N2= fr   )r   r   send_headersrq   r@   )r   r   r   r>   r   s       r   r   SyncQuicConnection.send_headers   sB    ZZG V< ""7+  Z   A
Ac                    > U R                      [        TU ]	  XU5        S S S 5        U(       a  U R                  R	                  S5        g g ! , (       d  f       N2= fr   )r   r   	send_datarq   r@   )r   r   r?   r>   r   s       r   r   SyncQuicConnection.send_data   sB    ZZGiv6 ""7+  Zr   c                     U R                   (       a  g [        R                  " U R                  S9U l        U R                  R                  5         g )N)target)_closedr   Threadr   rv   startrI   s    r   runSyncQuicConnection.run   s5    <<'..dllC!!#r   c                 ^   U R                   R                  U5      (       d  [        R                  R                  eU R
                     U R                  (       a  [        eU R                  R                  S5      n[        X5      nX0R                  U'   S S S 5        U$ ! , (       d  f       W$ = frR   )ru   r    r!   r"   r#   r   r   r   r0   get_next_available_stream_idr	   r   )r   r&   r   r   s       r   make_streamSyncQuicConnection.make_stream   s    '',,W55--'''ZZzz##((EEeLI#D4F'-MM)$   Z s   AB
B,c                 p   > U R                      [        TU ]	  U5        S S S 5        g ! , (       d  f       g = fr   )r   r   close_stream)r   r   r   s     r   r   SyncQuicConnection.close_stream   s!    ZZG + ZZ   '
5c                    U R                      U R                  (       a
   S S S 5        g U R                  R                  U R                  S   U R                  S   5        SU l        U R
                  R                  5         U R                  R                  S5        S S S 5        U R                  R                  5         g ! , (       d  f       N)= f)Nr   r   Tr   )r   r   _managerclosedro   r0   rJ   rq   r@   rv   joinrI   s    r   rJ   SyncQuicConnection.close   s    ZZ|| Z MM  A

1>DL""$""7+  	  " Zs   B>A2B>>
C)r   r   ru   r   rr   rq   rh   rv   rX   r   )rY   rZ   r[   r\   r   r   r   r   r   r;   r   r   r   r   r   rJ   r]   r^   r_   s   @r   ra   ra   ^   sF    &&	U+8'1R(
,,$	,# #r   ra   c                      ^  \ rS rSrS\R
                  SS4U 4S jjr     SS jrU 4S jrU 4S jr	U 4S jr
S	 rS
 rSrU =r$ )SyncQuicManager   NFc                 d   > [         TU ]  X[        X45        [        R                  " 5       U l        g r   )r   r   ra   r   r   r   )r   confverify_modeserver_namer   r   s        r   r   SyncQuicManager.__init__   s%     	,>P^^%
r   c           	          U R                      U R                  XX4XV5      u  pxU(       a  UR                  5         UsS S S 5        $ ! , (       d  f       g = fr   )r   _connectr   )	r   rw   rx   ry   rz   want_session_ticket
want_tokenr   r   s	            r   rn   SyncQuicManager.connect  s@     ZZ"&--v4G#Z   ZZs   .A
Ac                 p   > U R                      [        TU ]	  X5        S S S 5        g ! , (       d  f       g = fr   )r   r   r   )r   rw   rx   r   s      r   r   SyncQuicManager.closed  s     ZZGN7) ZZr   c                 r   > U R                      [        TU ]	  XU5        S S S 5        g ! , (       d  f       g = fr   )r   r   save_session_ticket)r   rw   rx   ticketr   s       r   r   #SyncQuicManager.save_session_ticket  s#    ZZG'v> ZZ   (
6c                 r   > U R                      [        TU ]	  XU5        S S S 5        g ! , (       d  f       g = fr   )r   r   
save_token)r   rw   rx   tokenr   s       r   r   SyncQuicManager.save_token  s#    ZZGwe4 ZZr   c                     U $ r   rM   rI   s    r   rN   SyncQuicManager.__enter__  rP   r   c                 |    [        U R                  R                  5       5      nU H  nUR                  5         M     grR   )list_connectionsvaluesrJ   )r   rS   rT   rU   connectionsr   s         r   rV   SyncQuicManager.__exit__!  s6     4,,3356%J &r   )r   )iU  Nr   TT)rY   rZ   r[   r\   sslCERT_REQUIREDr   rn   r   r   r   rN   rV   r]   r^   r_   s   @r   r   r      sK    S%6%6DU&  "*?5 r   r   )r   rf   r   r3   r   r   aioquic.quic.configurationr   aioquic.quic.connectionaioquic.quic.eventsdns.exceptionr!   dns.inetdns.quic._commonr   r   r   r   r   rd   r	   ra   r   rM   r   r   <module>r     sf      
    !      >^ >BY#+ Y#x-o -r   