U
    <{fr                     @   s   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G dd deZG dd	 d	ZG d
d dZG dd dZG dd deZG dd dZG dd deZdS )    N)AnyOptionali         c                   @   s   e Zd ZdS )UnexpectedEOFN)__name__
__module____qualname__ r
   r
   O/var/www/html/Darija-Ai-API/env/lib/python3.8/site-packages/dns/quic/_common.pyr      s   r   c                   @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )Bufferc                 C   s   d| _ d| _d S )N    F)_buffer	_seen_endselfr
   r
   r   __init__   s    zBuffer.__init__c                 C   s&   | j r
d S |  j|7  _|r"d| _ d S )NT)r   r   r   dataZis_endr
   r
   r   put   s
    z
Buffer.putc                 C   s    t | j|krdS | jrtdS )NTF)lenr   r   r   )r   amountr
   r
   r   have&   s
    zBuffer.havec                 C   s   | j S N)r   r   r
   r
   r   seen_end-   s    zBuffer.seen_endc                 C   s0   |  |st| jd | }| j|d  | _|S r   )r   AssertionErrorr   )r   r   r   r
   r
   r   get0   s    z
Buffer.getN)r   r   r	   r   r   r   r   r   r
   r
   r
   r   r      s
   r   c                   @   sD   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dS )BaseQuicStreamc                 C   s   || _ || _t | _d| _d S Nr   )_connection
_stream_idr   r   
_expecting)r   
connection	stream_idr
   r
   r   r   8   s    zBaseQuicStream.__init__c                 C   s   | j S r   )r    r   r
   r
   r   id>   s    zBaseQuicStream.idc                 C   s   |d k	rt   | }nd }|S r   )time)r   timeout
expirationr
   r
   r   _expiration_from_timeoutA   s    z'BaseQuicStream._expiration_from_timeoutc                 C   s$   |d k	rt |t  d}nd }|S )Ng        )maxr%   )r   r'   r&   r
   r
   r   _timeout_from_expirationH   s    z'BaseQuicStream._timeout_from_expirationc                 C   s   t |}td|| S )Nz!H)r   structpack)r   Zdatagramlr
   r
   r   _encapsulateR   s    zBaseQuicStream._encapsulatec                 C   sD   | j || z| jdko&| j | jW S  tk
r>   Y dS X d S )Nr   T)r   r   r!   r   r   r   r
   r
   r   _common_add_inputV   s
    z BaseQuicStream._common_add_inputc                 C   s    | j | j | jdd d S )Nr   T)r   close_streamr    r   r   r   r
   r
   r   _close]   s    zBaseQuicStream._closeN)
r   r   r	   r   r$   r(   r*   r.   r/   r1   r
   r
   r
   r   r   7   s   
r   c                   @   s0   e Zd ZdddZdd Zddd	Zd
d ZdS )BaseQuicConnectionNr   c                 C   s   d| _ || _|| _|| _d| _|| _i | _tj	|| _
tj||f| _|d kr|dkr| j
tjkrld}n| j
tjkr~d}nt|r||f| _nd | _d S )NFr   z0.0.0.0z::)_doner   _addressZ_port_closed_manager_streamsdnsinetZaf_for_addressZ_aflow_level_address_tupleZ_peersocketAF_INETAF_INET6NotImplementedError_source)r   r"   addressportsourcesource_portmanagerr
   r
   r   r   c   s$    zBaseQuicConnection.__init__c                 C   s   | j |= d S r   )r7   )r   r#   r
   r
   r   r0   {   s    zBaseQuicConnection.close_streamTc                 C   sL   t   }| j }|d kr"|d }t|| d}| jrD|rDt|d}||fS )Ni  r   g?)r%   r   Z	get_timerr)   r5   min)r   Zclosed_is_specialnowr'   intervalr
   r
   r   _get_timer_values~   s    


z$BaseQuicConnection._get_timer_valuesc                 C   s    t   }||kr| j| d S r   )r%   r   Zhandle_timer)r   r'   rF   r
   r
   r   _handle_timer   s    z BaseQuicConnection._handle_timer)Nr   N)T)r   r   r	   r   r0   rH   rI   r
   r
   r
   r   r2   b   s        

r2   c                   @   s"   e Zd Zdee edddZdS )AsyncQuicConnectionN)r&   returnc                    s   d S r   r
   )r   r&   r
   r
   r   make_stream   s    zAsyncQuicConnection.make_stream)N)r   r   r	   r   floatr   rL   r
   r
   r
   r   rJ      s   rJ   c                   @   s0   e Zd ZdddZdddZd	d
 Zdd ZdS )BaseQuicManagerNc                 C   sd   i | _ || _i | _|d krZd }t|tr0|}d}tjjjddg||d}|d k	rZ|	| || _
d S )NTZdoqzdoq-i03)alpn_protocolsverify_modeserver_name)_connections_connection_factory_session_tickets
isinstancestraioquicquicconfigurationZQuicConfigurationload_verify_locations_conf)r   confrP   connection_factoryrQ   Zverify_pathr
   r
   r   r      s     

zBaseQuicManager.__init__U  r   Tc                 C   s   | j ||f}|d k	r |dfS | j}|rvz$| j||f}t|}||_W n tk
rb   Y nX t	| j
||}	nd }	tjjj||	d}
tj||f}|
|t  | |
||||| }|| j ||f< |dfS )NF)rY   session_ticket_handlerT)rR   r   r[   rT   popcopysession_ticketKeyError	functoolspartialsave_session_ticketrW   rX   r"   ZQuicConnectionr8   r9   r:   connectr%   rS   )r   r@   rA   rB   rC   Zwant_session_ticketr"   r\   rb   r_   ZqconnZ	lladdressr
   r
   r   _connect   sB    

       zBaseQuicManager._connectc                 C   s*   z| j ||f= W n tk
r$   Y nX d S r   )rR   rc   )r   r@   rA   r
   r
   r   closed   s    zBaseQuicManager.closedc                 C   sL   t | j}|tkr:t| j dt }|D ]}| j|= q,|| j||f< d S r   )r   rT   MAX_SESSION_TICKETSlistkeysSESSIONS_TO_DELETE)r   r@   rA   ticketr-   Zkeys_to_deletekeyr
   r
   r   rf      s    

z#BaseQuicManager.save_session_ticket)N)r^   Nr   T)r   r   r	   r   rh   ri   rf   r
   r
   r
   r   rN      s   
       
#rN   c                   @   s   e Zd ZdddZdS )AsyncQuicManagerr^   Nr   c                 C   s   t d S r   )r>   )r   r@   rA   rB   rC   r
   r
   r   rg      s    zAsyncQuicManager.connect)r^   Nr   )r   r   r	   rg   r
   r
   r
   r   rp      s   rp   )ra   rd   r;   r+   r%   typingr   r   Zaioquic.quic.configurationrW   Zaioquic.quic.connectionZdns.inetr8   ZQUIC_MAX_DATAGRAMrj   rm   	Exceptionr   r   r   r2   rJ   rN   rp   r
   r
   r
   r   <module>   s$   +/H