
    df                         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 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__     I/home/api-vastappli/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.get*   s8    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__2   s!    %#xr   c                     | j                   S r   )r(   r   s    r   idzBaseQuicStream.id8   s    r   c                 @    |t        j                          |z   }|S d }|S r   )time)r   timeout
expirations      r   _expiration_from_timeoutz'BaseQuicStream._expiration_from_timeout;   s-    w.J  Jr   c                 T    |#t        |t        j                         z
  d      }|S d }|S )Ng        )maxr/   )r   r1   r0   s      r   _timeout_from_expirationz'BaseQuicStream._timeout_from_expirationB   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._encapsulateL   s!    M{{4#h..r   c                     | j                   j                  ||       | j                  dkD  xr% | j                   j                  | j                        S r&   )r   r   r)   r   r   s      r   _common_add_inputz BaseQuicStream._common_add_inputP   s=    v&"It||'8'8'IIr   c                     | j                   j                  | j                         | j                  j	                  dd       y )Nr   T)r'   close_streamr(   r   r   r   s    r   _closezBaseQuicStream._closeT   s.    %%doo6d#r   N)
r   r   r	   r   r-   r2   r5   r;   r=   r@   r
   r   r   r$   r$   1   s&    /J$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__Z   s     
%
88**73XX55woF
>kQ.xx6>>)"V__,))"K0DLDLr   c                     | j                   |= y r   )rI   )r   r+   s     r   r?   zBaseQuicConnection.close_streamr   s    MM)$r   c                     t        j                          }| j                  j                         }||dz   }t        ||z
  d      }| j                  r|rt        |d      }||fS )Ni  r   g?)r/   r'   	get_timerr4   rG   min)r   closed_is_specialnowr1   intervals        r   _get_timer_valuesz$BaseQuicConnection._get_timer_valuesu   sd    iik%%//1
tJzC'+<<- 8T*HH%%r   c                 n    t        j                          }||k  r| j                  j                  |       y y r   )r/   r'   handle_timer)r   r1   r_   s      r   _handle_timerz BaseQuicConnection._handle_timer   s.    iik))#. r   )Nr   N)T)r   r   r	   r   r?   ra   rd   r
   r   r   rB   rB   Y   s    MQ 0%&/r   rB   c                   $    e Zd Zddee   defdZy)AsyncQuicConnectionNr0   returnc                    K   y wr   r
   )r   r0   s     r   make_streamzAsyncQuicConnection.make_stream   s	     s   r   )r   r   r	   r   floatr   ri   r
   r   r   rf   rf      s    % C r   rf   c                   "    e Zd ZddZddZd Zy)BaseQuicManagerNc                     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
isinstancestraioquicquicconfigurationQuicConfigurationload_verify_locations_conf)r   confrp   connection_factoryrq   verify_paths         r   r   zBaseQuicManager.__init__   s{    #5 <K+s+)"<<--?? %y1'' @ D
 &**;7
r   c                 N   | j                   j                  ||f      }||dfS t        j                  j                  j                  | j                        }|j                  |t        j                                | j                  ||||||       }|| j                   ||f<   |dfS )NF)rx   T)
rr   r"   rv   rw   r*   QuicConnectionr{   connectr/   rs   )r   rU   rV   rW   rX   r*   qconns          r   _connectzBaseQuicManager._connect   s    &&**GT?;
!&&''66TZZ6Pgtyy{+--7D&+t

 .87D/*D!!r   c                 B    	 | j                   ||f= y # t        $ r Y y w xY wr   )rr   KeyError)r   rU   rV   s      r   closedzBaseQuicManager.closed   s+    	!!7D/2 		s    	r   iU  Nr   )r   r   r	   r   r   r   r
   r   r   rl   rl      s    "
"r   rl   c                       e Zd ZddZy)AsyncQuicManagerNc                     t         r   )rS   )r   rU   rV   rW   rX   s        r   r   zAsyncQuicManager.connect   s    !!r   r   )r   r   r	   r   r
   r   r   r   r      s    "r   r   )rP   r7   r/   typingr   r   aioquic.quic.configurationrv   aioquic.quic.connectiondns.inetrJ   QUIC_MAX_DATAGRAM	Exceptionr   r   r$   rB   rf   rl   r   r
   r   r   <module>r      sr         !   	I 	 :%$ %$P,/ ,/^, 
" "J" "r   