o
    hO+                     @   s   d dl Z d dlZ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	 d dl
Zd dl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)Anyi         c                   @   s   e Zd ZdS )UnexpectedEOFN)__name__
__module____qualname__ r	   r	   R/var/www/html/pro-man-master/venv/lib/python3.10/site-packages/dns/quic/_common.pyr      s    r   c                   @   s<   e Zd Zd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 d S )NT)r   r   r   data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      | j S N)r   r   r	   r	   r
   seen_end1      zBuffer.seen_endc                 C   s0   |  |sJ | jd | }| j|d  | _|S r   )r   r   )r   r   r   r	   r	   r
   get4   s   z
Buffer.getc                 C   s   |   sJ | j}d| _|S )Nr   )r   r   )r   r   r	   r	   r
   get_all:   s   zBuffer.get_allN)	r   r   r   r   r   r   r   r   r   r	   r	   r	   r
   r      s    r   c                   @   s^   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd ZdddZ	dd Z
dd Zdd ZdS )BaseQuicStreamc                 C   s*   || _ || _t | _d| _d | _d | _d S Nr   )_connection
_stream_idr   r   
_expecting_headers	_trailers)r   
connection	stream_idr	   r	   r
   r   B   s   
zBaseQuicStream.__init__c                 C   r   r   )r"   r   r	   r	   r
   idJ   r   zBaseQuicStream.idc                 C   r   r   )r$   r   r	   r	   r
   headersM   r   zBaseQuicStream.headersc                 C   r   r   )r%   r   r	   r	   r
   trailersP   r   zBaseQuicStream.trailersc                 C   s    |d urt   | }|S d }|S r   )time)r   timeout
expirationr	   r	   r
   _expiration_from_timeoutS   s
   z'BaseQuicStream._expiration_from_timeoutc                 C   s&   |d urt |t  d}|S d }|S )Ng        )maxr+   )r   r-   r,   r	   r	   r
   _timeout_from_expirationZ   s
   z'BaseQuicStream._timeout_from_expirationTc                 C   s   | j  s	tdtj|}|j }|rd}nd}|dt	|
d 7 }d|fd|j fd|j fd	|fd
g}|rM|ddtt| fg | j | j||  |rd| j | j|d d S d S )Nz%cannot send H3 to a non-H3 connections   POSTs   GETs   ?dns=   =s   :methods   :schemes
   :authoritys   :path)s   accept   application/dns-message)s   content-typer2   s   content-lengthT)r!   is_h3SyntaxErrorurllibparseurlparsepathencodebase64urlsafe_b64encoderstripschemenetlocextendstrr   send_headersr"   	send_data)r   urldatagrampost	url_partsr8   methodr)   r	   r	   r
   send_h3g   s0   

zBaseQuicStream.send_h3c                 C   s&   | j  r|S t|}td|| S )Nz!H)r!   r3   r   structpack)r   rD   lr	   r	   r
   _encapsulate   s   
zBaseQuicStream._encapsulatec                 C   sF   | j || z| jdko| j | jp| j jW S  ty"   Y dS w )Nr   T)r   r   r#   r   r   r   r   r	   r	   r
   _common_add_input   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T)r   r   r   r   r(   r)   r*   r.   r0   rH   rL   rM   rO   r	   r	   r	   r
   r   A   s    
	r   c                   @   sR   e Zd Z			dddZdd Zdd Zdd
dZdddZdddZdd Z	dS )BaseQuicConnectionNr   c                 C   s   d| _ || _|| _|| _d| _|| _i | _|d ur'| r'tj	j
|d| _nd | _tj|| _tj||f| _|d u rV|dkrV| jtjkrKd}n| jtjkrTd}nt|r_||f| _d S d | _d S )NFr   z0.0.0.0z::)_doner!   _address_port_closed_manager_streamsr3   aioquich3r&   H3Connection_h3_conn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managerr	   r	   r
   r      s*   	
zBaseQuicConnection.__init__c                 C   s
   | j d uS r   )r[   r   r	   r	   r
   r3      s   
zBaseQuicConnection.is_h3c                 C   s   | j |= d S r   )rW   )r   r'   r	   r	   r
   rN      s   zBaseQuicConnection.close_streamFc                 C   "   | j d usJ | j ||| d S r   )r[   rA   )r   r'   r)   r   r	   r	   r
   rA         zBaseQuicConnection.send_headersc                 C   rl   r   )r[   rB   )r   r'   r   r   r	   r	   r
   rB      rm   zBaseQuicConnection.send_dataTc                 C   sL   t   }| j }|d u r|d }t|| d}| jr"|r"t|d}||fS )Ni  r   g?)r+   r!   	get_timerr/   rU   min)r   closed_is_specialnowr-   intervalr	   r	   r
   _get_timer_values   s   


z$BaseQuicConnection._get_timer_valuesc                 C   s$   t   }||kr| j| d S d S r   )r+   r!   handle_timer)r   r-   rq   r	   r	   r
   _handle_timer   s   z BaseQuicConnection._handle_timer)Nr   N)FrP   )
r   r   r   r   r3   rN   rA   rB   rs   ru   r	   r	   r	   r
   rQ      s    
"


rQ   c                   @   s$   e Zd ZddedB defddZdS )AsyncQuicConnectionNr,   returnc                    s   d S r   r	   )r   r,   r	   r	   r
   make_stream   s   zAsyncQuicConnection.make_streamr   )r   r   r   floatr   rx   r	   r	   r	   r
   rv      s    rv   c                   @   sL   e Zd Z	dddZ					ddd	Zd
d Zdd Zdd Zdd ZdS )BaseQuicManagerNFc           
      C   s   i | _ || _i | _i | _|| _|d u rEd }t|tr|}d}|r$dg}nddg}tjj	j
|||d}|d urEtj|\}}	|j||	d || _d S )NTrY   doqzdoq-i03)alpn_protocolsverify_modeserver_name)cafilecapath)_connections_connection_factory_session_tickets_tokens_h3
isinstancer@   rX   quicconfigurationQuicConfigurationr\   	_tls_util#convert_verify_to_cafile_and_capathload_verify_locations_conf)
r   confr}   connection_factoryr~   rY   verify_pathr|   r   r   r	   r	   r
   r      s0   

zBaseQuicManager.__init__U  r   Tc                 C   s(  | j ||f}|d ur|dfS | j}|r:z| j||f}	t|}|	|_W n	 ty0   Y nw t	| j
||}
nd }
|rcz| j||f}t|}||_W n	 tyY   Y nw t	| j||}nd }tjjj||
|d}tj||f}||t  | |||||| }|| j ||f< |dfS )NF)r   session_ticket_handlertoken_handlerT)r   r   r   r   popcopysession_ticketKeyError	functoolspartialsave_session_ticketr   token
save_tokenrX   r   r&   QuicConnectionr\   r]   r`   connectr+   r   )r   rg   rh   ri   rj   want_session_ticket
want_tokenr&   r   r   r   r   r   qconn	lladdressr	   r	   r
   _connect   sL   	



zBaseQuicManager._connectc                 C   s(   z	| j ||f= W d S  ty   Y d S w r   )r   r   )r   rg   rh   r	   r	   r
   closed6  s
   zBaseQuicManager.closedc                 C   r   r   )r   r   r	   r	   r
   r3   <  r   zBaseQuicManager.is_h3c                 C   L   t | j}|tkrt| j dt }|D ]}| j|= q|| j||f< d S r    )r   r   MAX_SESSION_TICKETSlistkeysSESSIONS_TO_DELETE)r   rg   rh   ticketrK   keys_to_deletekeyr	   r	   r
   r   ?     

z#BaseQuicManager.save_session_ticketc                 C   r   r    )r   r   r   r   r   r   )r   rg   rh   r   rK   r   r   r	   r	   r
   r   J  r   zBaseQuicManager.save_token)NF)r   Nr   TT)	r   r   r   r   r   r   r3   r   r   r	   r	   r	   r
   rz      s    
 
8rz   c                   @   s   e Zd ZdddZdS )AsyncQuicManagerr   Nr   c                 C   s   t r   )re   )r   rg   rh   ri   rj   r	   r	   r
   r   W  s   zAsyncQuicManager.connect)r   Nr   )r   r   r   r   r	   r	   r	   r
   r   V  s    r   )r:   r   r   rb   rI   r+   urllib.parser5   typingr   aioquic.h3.connectionrX   aioquic.quic.configurationaioquic.quic.connectiondns._tls_utilr\   dns.inetQUIC_MAX_DATAGRAMr   r   	Exceptionr   r   r   rQ   rv   rz   r   r	   r	   r	   r
   <module>   s.   #VDv