
    RPfr                         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 d dlZ	d dl
Z	d dlZdZdZedz  Z G d de      Z G d d	      Z G d
 d      Z G d d      Z G d de      Z G d d      Z G d de      Zy)    N)AnyOptionali         c                       e Zd Zy)UnexpectedEOFN)__name__
__module____qualname__     J/var/www/fastapitest/venv/lib/python3.12/site-packages/dns/quic/_common.pyr   r      s    r   r   c                   *    e Zd Zd Zd Zd Zd Zd Zy)Bufferc                      d| _         d| _        y )Nr   F)_buffer	_seen_endselfs    r   __init__zBuffer.__init__   s    r   c                 \    | j                   ry | xj                  |z  c_        |rd| _         y y )NT)r   r   r   datais_ends      r   putz
Buffer.put   s)    >>!DN r   c                 Z    t        | j                        |k\  ry| j                  rt        y)NTF)lenr   r   r   )r   amounts     r   havezBuffer.have&   s&    t||&>>r   c                     | j                   S N)r   r   s    r   seen_endzBuffer.seen_end-   s    ~~r   c                 r    | j                  |      sJ | j                  d | }| j                  |d  | _        |S r!   )r   r   )r   r   r   s      r   getz
Buffer.get0   s;    yy   ||GV$||FG,r   N)r	   r
   r   r   r   r   r"   r$   r   r   r   r   r      s    "r   r   c                   6    e Zd Zd Zd Zd Zd Zd Zd Zd Z	y)	BaseQuicStreamc                 L    || _         || _        t               | _        d| _        y Nr   )_connection
_stream_idr   r   
_expecting)r   
connection	stream_ids      r   r   zBaseQuicStream.__init__8   s!    %#xr   c                     | j                   S r!   )r*   r   s    r   idzBaseQuicStream.id>   s    r   c                 @    |t        j                          |z   }|S d }|S r!   )time)r   timeout
expirations      r   _expiration_from_timeoutz'BaseQuicStream._expiration_from_timeoutA   s-    w.J  Jr   c                 T    |#t        |t        j                         z
  d      }|S d }|S )Ng        )maxr1   )r   r3   r2   s      r   _timeout_from_expirationz'BaseQuicStream._timeout_from_expirationH   s2    !*tyy{2C8G  Gr   c                 J    t        |      }t        j                  d|      |z   S )Nz!H)r   structpack)r   datagramls      r   _encapsulatezBaseQuicStream._encapsulateR   s!    M{{4#h..r   c                     | j                   j                  ||       	 | j                  dkD  xr% | j                   j                  | j                        S # t        $ r Y yw xY w)Nr   T)r   r   r+   r   r   r   s      r   _common_add_inputz BaseQuicStream._common_add_inputV   sT    v&	??Q&M4<<+<+<T__+MM 		s   5A 	A A c                     | j                   j                  | j                         | j                  j	                  dd       y )Nr   T)r)   close_streamr*   r   r   r   s    r   _closezBaseQuicStream._close]   s.    %%doo6d#r   N)
r	   r
   r   r   r/   r4   r7   r=   r?   rB   r   r   r   r&   r&   7   s%    /$r   r&   c                   *    e Zd Z	 ddZd ZddZd Zy)BaseQuicConnectionNc                    d| _         || _        || _        || _        d| _        || _        i | _        t        j                  j                  |      | _
        t        j                  j                  ||f      | _        |K|dk7  rF| j                  t        j                  k(  rd}n&| j                  t        j                  k(  rd}nt         |r
||f| _        y d | _        y )NFr   z0.0.0.0z::)_doner)   _address_port_closed_manager_streamsdnsinetaf_for_address_aflow_level_address_tuple_peersocketAF_INETAF_INET6NotImplementedError_source)r   r,   addressportsourcesource_portmanagers          r   r   zBaseQuicConnection.__init__c   s     
%
88**73XX55woF
>kQ.xx6>>)"V__,))"K0DLDLr   c                     | j                   |= y r!   )rK   )r   r-   s     r   rA   zBaseQuicConnection.close_stream{   s    MM)$r   c                     t        j                          }| j                  j                         }||dz   }t        ||z
  d      }| j                  r|rt        |d      }||fS )Ni  r   g?)r1   r)   	get_timerr6   rI   min)r   closed_is_specialnowr3   intervals        r   _get_timer_valuesz$BaseQuicConnection._get_timer_values~   sd    iik%%//1
tJzC'+<<- 8T*HH%%r   c                 n    t        j                          }||k  r| j                  j                  |       y y r!   )r1   r)   handle_timer)r   r3   ra   s      r   _handle_timerz BaseQuicConnection._handle_timer   s.    iik))#. r   )Nr   N)T)r	   r
   r   r   rA   rc   rf   r   r   r   rD   rD   b   s    MQ 0%&/r   rD   c                   $    e Zd Zddee   defdZy)AsyncQuicConnectionNr2   returnc                    K   y wr!   r   )r   r2   s     r   make_streamzAsyncQuicConnection.make_stream   s	     s   r!   )r	   r
   r   r   floatr   rk   r   r   r   rh   rh      s    % C r   rh   c                   *    e Zd ZddZ	 ddZd Zd Zy)BaseQuicManagerNc                     i | _         || _        i | _        |Wd }t        |t              r|}d}t
        j                  j                  j                  ddg||      }||j                  |       || _
        y )NTdoqzdoq-i03)alpn_protocolsverify_modeserver_name)_connections_connection_factory_session_tickets
isinstancestraioquicquicconfigurationQuicConfigurationload_verify_locations_conf)r   confrr   connection_factoryrs   verify_paths         r   r   zBaseQuicManager.__init__   s    #5  "<K+s+)"<<--?? %y1'' @ D
 &**;7
r   c                 t   | j                   j                  ||f      }||dfS | j                  }|r\	 | j                  j	                  ||f      }t        j
                  |      }||_        t        j                  | j                  ||      }	nd }	t        j                  j                  j                  ||	      }
t        j                   j#                  ||f      }|
j%                  |t'        j&                                | j)                  |
|||||       }|| j                   ||f<   |dfS # t        $ r Y w xY w)NF)r{   session_ticket_handlerT)rt   r$   r~   rv   popcopysession_ticketKeyError	functoolspartialsave_session_ticketry   rz   r,   QuicConnectionrL   rM   rP   connectr1   ru   )r   rW   rX   rY   rZ   want_session_ticketr,   r   r   r   qconn	lladdresss               r   _connectzBaseQuicManager._connect   s<    &&**GT?;
!&&zz!%!6!6!:!:GT?!Kyy&4# &/%6%6(('4&" &*"''66#9 7 
 HH44gt_E	i---7D&+t

 .87D/*D!!)  s   9D+ +	D76D7c                 B    	 | j                   ||f= y # t        $ r Y y w xY wr!   )rt   r   )r   rW   rX   s      r   closedzBaseQuicManager.closed   s+    	!!7D/2 		s    	c                     t        | j                        }|t        k\  r>t        | j                  j	                               dt
         }|D ]  }| j                  |=  || j                  ||f<   y r(   )r   rv   MAX_SESSION_TICKETSlistkeysSESSIONS_TO_DELETE)r   rW   rX   ticketr<   keys_to_deletekeys          r   r   z#BaseQuicManager.save_session_ticket   so     %%&##!$"7"7"<"<">?BTUN% /))#./17wo.r   r!   )U  Nr   T)r	   r
   r   r   r   r   r   r   r   r   rn   rn      s    & RV!"F	8r   rn   c                       e Zd ZddZy)AsyncQuicManagerNc                     t         r!   )rU   )r   rW   rX   rY   rZ   s        r   r   zAsyncQuicManager.connect   s    !!r   )r   Nr   )r	   r
   r   r   r   r   r   r   r      s    "r   r   )r   r   rR   r9   r1   typingr   r   aioquic.quic.configurationry   aioquic.quic.connectiondns.inetrL   QUIC_MAX_DATAGRAMr   r   	Exceptionr   r   r&   rD   rh   rn   r   r   r   r   <module>r      s           !     )A- 	I 	 :($ ($V,/ ,/^, 
E8 E8P" "r   