
    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Jr  S SKJrJrJrJrJr   " S S\5      r " S S\5      r " S S	\5      rg)
    N)NullContext)QUIC_MAX_DATAGRAMAsyncQuicConnectionAsyncQuicManager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$ )TrioQuicStream   c                 X   > [         TU ]  X5        [        R                  " 5       U l        g N)super__init__trio	Condition_wake_up)self
connection	stream_id	__class__s      G/home/matz/Project1/venv/lib/python3.13/site-packages/dns/quic/_trio.pyr   TrioQuicStream.__init__   s    /(    c                 :  #     U R                   R                  U5      (       a  g Xl        U R                   IS h  vN   U R                  R	                  5       I S h  vN   S S S 5      IS h  vN   SU l        Mw   N? N N! , IS h  vN  (       d  f       N&= f7f)Nr   )_bufferhave
_expectingr   wait)r   amounts     r   wait_forTrioQuicStream.wait_for   sj     ||  (($O}}}mm((*** %}DO  %* %}}}sV   9BA;BBA=B"B-A?.B=B?BBB
BBc                   #     U R                   R                  5       (       a  g U R                   IS h  vN   U R                  R                  5       I S h  vN   S S S 5      IS h  vN   Mi   N8 N N
! , IS h  vN  (       d  f       N= f7fr   )r   seen_endr   r   r   s    r   wait_for_endTrioQuicStream.wait_for_end'   s\     ||$$&&}}}mm((*** %}  %* %}}}sV   2BA-BA3A/A3B&A1'B/A31B3B
9A<:B
Bc                 ~  #    Uc  [        S 5      nO[        R                  " U5      nU   U R                  R	                  5       (       a;  U R                  5       I S h  vN   U R                  R                  5       sS S S 5        $ U R                  S5      I S h  vN   [        R                  " SU R                  R                  S5      5      u  nU R                  U5      I S h  vN   U R                  R                  U5      sS S S 5        $  N Nu N,! , (       d  f       [        R                  R                  e= f7f)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   receiveTrioQuicStream.receive.   s     ?!$'G((1G%%'''')))||++- W
 mmA&&& --dll.>.>q.ABmmD)))||''- W) ') W mm###s_   (D=3DDD;
D=DDA
D$D%D
D=DDD
D: D=c                    #    U R                  U5      nU R                  R                  U R                  X25      I S h  vN   g  N7fr   )_encapsulater*   write
_stream_id)r   datagramis_enddatas       r   sendTrioQuicStream.send>   s5       *$$T__dCCCs   ;AAAc                    #    U R                  X5      (       a@  U R                   IS h  vN   U R                  R                  5         S S S 5      IS h  vN   g g  N0 N! , IS h  vN  (       d  f       g = f7fr   )_common_add_inputr   notify)r   r>   r=   s      r   
_add_inputTrioQuicStream._add_inputB   sF     !!$//}}}$$& %}} 0$}}}sD   'A8AA8AA8AA8A8A5$A'%A51A8c                 ,   #    U R                  5         g 7fr   )_closer$   s    r   closeTrioQuicStream.closeG   s     s   c                    #    U $ 7fr    r$   s    r   
__aenter__TrioQuicStream.__aenter__L   
        c                    #    U R                  5       I S h  vN   U R                   IS h  vN   U R                  R                  5         S S S 5      IS h  vN   g ND N1 N	! , IS h  vN  (       d  f       g= f7fNF)rH   r   rC   )r   exc_typeexc_valexc_tbs       r   	__aexit__TrioQuicStream.__aexit__O   sH     jjl===MM  " != 	 ===sT   A;AA;AA;A!
A;AA;A;A;!A8'A*(A84A;)r   r   r   F)__name__
__module____qualname____firstlineno__r   r    r%   r6   r?   rD   rH   rL   rU   __static_attributes____classcell__r   s   @r   r
   r
      s6    ) +$ D'

 r   r
   c                   X   ^  \ rS rSrS
U 4S jjrS rS rSS jrS rS
S jr	S r
S	rU =r$ )TrioQuicConnectionV   c                 (  > [         TU ]  XX4XV5        [        R                  R                  U R                  [        R
                  S5      U l        [        R                  " 5       U l        [        R                  " 5       U l	        S U l
        SU l        g )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   TrioQuicConnection.__init__W   sc    dKQ{{))$((F4E4EqI#'::< !"r   c                 T  #     U R                   (       aU  U R                  R                  [        R                  R                  U R                   U R                  5      5      I S h  vN   U R                  R                  U R                  5      I S h  vN   U R                  (       Gde  U R                  S5      u  pU R                  (       a  Sn[        R                  " [        R                  " 5       U-   S9 U l        U R                  R!                  ["        5      I S h  vN nU R$                  R'                  X0R                  [(        R(                  " 5       5        S S S 5        S U l        U R+                  U5        U R-                  5       I S h  vN   SU l        U R$                  R/                  [(        R(                  " 5       5      nU H(  u  p5U R                  R1                  U5      I S h  vN   M*     U R                  (       d  GMe  SU l	        U R                  R3                  5         U R4                  R7                  5         g  GN GN GN/! , (       d  f       N= f N Nt! SU l	        U R                  R3                  5         U R4                  R7                  5         f = f7f)NFg        )deadlineT)_sourcerf   bindr0   inetlow_level_address_tuplerd   connect_peer_done_get_timer_valuesrk   r   CancelScopecurrent_timerj   recvr   r*   receive_datagramtime_handle_timer_handle_eventsdatagrams_to_sendr?   rH   rh   set)r   
expirationintervalr<   	datagrams_s         r   _workerTrioQuicConnection._worker_   s    "	+||ll''HH44T\\488L   ,,&&tzz222jjj)-)?)?)F&%%  #H%%!..08;'%)\\%6%67H%IIH$$55h

DIIKX	
 &*""":.))+++ &+" ,,>>tyy{K	#,KH,,++H555 $-/ jjj4 DJLL $$((*A 3  J  , 6DJLL $$((*s   J(A!I( %I
&,I( IA&I( 9(I!I"=I3I( I$AI( 1I&2I( <J(
I( I( I
I!I( &I( (=J%%J(c                 V  #    Sn U R                   R                  5       nUc  g [        U[        R                  R
                  R                  5      (       Ga  U R                  5       (       Ga  U R                  R                  U5      nU GHd  n[        U[        R                  R
                  R                  5      (       a  U R                  R                  UR                  5      nU(       al  UR                  c  UR                   Ul        OUR"                  c  UR                   Ul        UR$                  (       a  UR'                  SS5      I S h  vN   M  M  M  [        U[        R                  R
                  R(                  5      (       d  GM  U R                  R                  UR                  5      nU(       d  GM6  UR'                  UR*                  UR$                  5      I S h  vN   GMg     GOxU R                  R                  UR                  5      nU(       a.  UR'                  UR*                  UR,                  5      I S h  vN   GO[        U[        R                  R
                  R.                  5      (       a  U R0                  R3                  5         O[        U[        R                  R
                  R4                  5      (       a"  SU l        U R8                  R;                  5         Oy[        U[        R                  R
                  R<                  5      (       aF  U R                  R                  UR                  5      nU(       a  UR'                  SS5      I S h  vN   US-  nUS:  a   Sn[>        R@                  " S5      I S h  vN   GM   GNK GN GNW N; N7f)Nr   Tr      
   )!r*   
next_event
isinstanceaioquicquiceventsStreamDataReceivedr+   _h3_connhandle_eventh3HeadersReceived_streamsr/   r   _headersheaders	_trailersstream_endedrD   DataReceivedr>   
end_streamHandshakeCompletedrh   r   ConnectionTerminatedrz   rf   rH   StreamResetr   sleep)r   countevent	h3_eventsh3_eventstreams         r   r   !TrioQuicConnection._handle_events   s    $$//1E}%!4!4!G!GHH::<< $ : :5 AI$-%h

0A0A0Q0QRR%)]]%6%6u%GF%#)??#:6>6F6FFO%+%5%5%=7?7G7GF$4#+#8#8*0*;*;C*F$F$F $9  & ('**2C2C2P2PQQ%)]]%6%6u%GF%v&,&7&7$,MM83H3H'" !" !" %." "]]..u?F$//

E<L<LMMME7<<#6#6#I#IJJ((,,.E7<<#6#6#K#KLL!
""$E7<<#6#6#B#BCC**5??; ++C666QJErzjjm##Q   %G!" N 7
 $sh   EN)N;N)*N))N)*N+A N)N"DN))N%**N)N'N)N)"N)%N)'N)c                    #    U R                   R                  XU5        SU l        U R                  b  U R                  R	                  5         g g 7f)NT)r*   send_stream_datark   rj   cancel)r   r   r>   r=   s       r   r:   TrioQuicConnection.write   sF     ))&?!)%%' *s   AAc                 2  #    U R                   (       a  g [        R                  " 5        IS h  vN nUR                  U R                  5        S S S 5      IS h  vN   U R
                  R                  5         g  NJ N!! , IS h  vN  (       d  f       N6= f7fr   )_closedr   open_nursery
start_soonr   ri   r   )r   nurserys     r   runTrioQuicConnection.run   sX     <<$$&&'t||, '& '&&&sD   ,BA9BA=BA; B;B=BBBBc                   #    Uc  [        S 5      nO[        R                  " U5      nU   U R                  R	                  5       I S h  vN   U R
                  (       a  [        eU R                  R                  S5      n[        X5      nX@R                  U'   UsS S S 5        $  NZ! , (       d  f       [        R                  R                  e= f7frQ   )r   r   r)   rh   r   rz   r   r*   get_next_available_stream_idr
   r   r0   r1   r2   )r   r3   r4   r   r   s        r   make_streamTrioQuicConnection.make_stream   s     ?!$'G((1G**//111zz##((EEeLI#D4F'-MM)$ W1 W mm###s/   (CB%B#	AB%
C#B%%
C/ Cc                   #    U R                   (       d  U R                  R                  U R                  S   U R                  S   5        SU l         U R                  R                  5         SU l        U R                  b  U R                  R                  5         U R                  R                  5       I S h  vN   g g  N7f)Nr   r   T)r   _managerclosedry   r*   rH   rk   rj   r   ri   r   r$   s    r   rH   TrioQuicConnection.close   s     ||MM  A

1>DL""$!%D!!-""))+..%%'''  (s   B4B?6B=7B?)r   rz   rh   ri   rk   rf   rj   r   rW   )rX   rY   rZ   r[   r   r   r   r:   r   r   rH   r\   r]   r^   s   @r   r`   r`   V   s-    ##+J*$X($( (r   r`   c                   `   ^  \ rS rSrS\R
                  SS4U 4S jjr S	S jrS rS r	Sr
U =r$ )
TrioQuicManager   NFc                 <   > [         TU ]  X#[        XE5        Xl        g r   )r   r   r`   _nursery)r   r   confverify_modeserver_namer   r   s         r   r   TrioQuicManager.__init__   s     	,>Pr   c                     U R                  XX4U5      u  pgU(       a%  U R                  R                  UR                  5        U$ r   )_connectr   r   r   )r   rl   rm   rn   ro   want_session_ticketr   starts           r   rx   TrioQuicManager.connect   s>     #mm60C
 MM$$Z^^4r   c                    #    U $ 7fr   rK   r$   s    r   rL   TrioQuicManager.__aenter__   rN   rO   c                    #    [        U R                  R                  5       5      nU H  nUR                  5       I S h  vN   M     g N	7frQ   )list_connectionsvaluesrH   )r   rR   rS   rT   connectionsr   s         r   rU   TrioQuicManager.__aexit__   sD      4,,3356%J""$$$ & %s   <A
A
A
)r   )iU  Nr   T)rX   rY   rZ   r[   sslCERT_REQUIREDr   rx   rL   rU   r\   r]   r^   s   @r   r   r      s7     %%	  RV r   r   )rc   r   r-   r   aioquic.quic.configurationr   aioquic.quic.connectionaioquic.quic.eventsr   dns.exceptionr0   dns.inetdns._asyncbackendr   dns.quic._commonr   r   r   r   r   r
   r`   r   rK   r   r   <module>r      s\     
   !      ) :^ :z~(, ~(B& r   