
    Eqgi*                     D   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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  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dS )    N)AnyOptionali         c                       e Zd ZdS )UnexpectedEOFN)__name__
__module____qualname__     B/var/www/html/env/lib/python3.11/site-packages/dns/quic/_common.pyr   r      s        Dr   r   c                   2    e Zd Zd Zd Zd Zd Zd Zd ZdS )Bufferc                 "    d| _         d| _        d S )Nr   F)_buffer	_seen_endselfs    r   __init__zBuffer.__init__   s    r   c                 N    | j         rd S | xj        |z  c_        |r	d| _         d S d S )NT)r   r   r   datais_ends      r   putz
Buffer.put#   s>    > 	F 	"!DNNN	" 	"r   c                 V    t          | j                  |k    rdS | j        rt          dS )NTF)lenr   r   r   )r   amounts     r   havezBuffer.have*   s1    t|&&4> 	 ur   c                     | j         S N)r   r   s    r   seen_endzBuffer.seen_end1   
    ~r   c                 z    |                      |          sJ | j        d |         }| j        |d          | _        |S r!   )r   r   )r   r   r   s      r   getz
Buffer.get4   sA    yy     |GVG$|FGG,r   c                 N    |                                  sJ | j        }d| _        |S )Nr   )r"   r   )r   r   s     r   get_allzBuffer.get_all:   s(    }}|r   N)	r	   r
   r   r   r   r   r"   r%   r'   r   r   r   r   r      sn          " " "          r   r   c                   L    e Zd Zd Zd Zd Zd Zd Zd ZddZ	d	 Z
d
 Zd ZdS )BaseQuicStreamc                 r    || _         || _        t                      | _        d| _        d | _        d | _        d S Nr   )_connection
_stream_idr   r   
_expecting_headers	_trailers)r   
connection	stream_ids      r   r   zBaseQuicStream.__init__B   s5    %#xxr   c                     | j         S r!   )r-   r   s    r   idzBaseQuicStream.idJ   s
    r   c                     | j         S r!   )r/   r   s    r   headerszBaseQuicStream.headersM   s
    }r   c                     | j         S r!   )r0   r   s    r   trailerszBaseQuicStream.trailersP   r#   r   c                 <    |t          j                     |z   }nd }|S r!   )time)r   timeout
expirations      r   _expiration_from_timeoutz'BaseQuicStream._expiration_from_timeoutS   s%    w.JJJr   c                 X    |%t          |t          j                    z
  d          }nd }|S )Ng        )maxr:   )r   r<   r;   s      r   _timeout_from_expirationz'BaseQuicStream._timeout_from_expirationZ   s.    !*ty{{2C88GGGr   Tc           	         | j                                         st          d          t          j                            |          }|j                                        }|rd}n/d}|dt          j	        |          
                    d          z   z  }d|fd|j                                        fd|j                                        fd	|fd
g}|rE|                    ddt          t          |                                                    fg           | j                             | j        ||            |r#| 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-typerC   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_partsrI   methodr6   s           r   send_h3zBaseQuicStream.send_h3g   sy   %%'' 	GEFFFL))#..	~$$&& 	OFFFHv7AAHHNNNND )00223I,33556t3
  	NNA&CMM(:(:(A(A(C(CD   	%%dowDIII 	H&&t$GGGGG	H 	Hr   c                     | j                                         r|S t          |          }t          j        d|          |z   S )Nz!H)r,   rD   r   structpack)r   rU   ls      r   _encapsulatezBaseQuicStream._encapsulate   s@    !!## 	OMM{4##h..r   c                     | j                             ||           	 | j        dk    o| j                             | j                  p| j         j        S # t
          $ r Y dS w xY w)Nr   T)r   r   r.   r   r"   r   r   s      r   _common_add_inputz BaseQuicStream._common_add_input   sv    v&&&	!#J(9(9$/(J(J'&'  	 	 	44	s   5A 
A! A!c                 z    | j                             | j                   | j                            dd           d S )Nr   T)r,   close_streamr-   r   r   r   s    r   _closezBaseQuicStream._close   s9    %%do666d#####r   NT)r	   r
   r   r   r4   r6   r8   r=   r@   rY   r^   r`   rc   r   r   r   r)   r)   A   s                    H H H H8/ / /  $ $ $ $ $r   r)   c                   F    e Zd Z	 	 	 ddZd Zd ZddZddZdd
Zd Z	dS )BaseQuicConnectionNr   c                 .   d| _         || _        || _        || _        d| _        || _        i | _        |                                r+t          j	        j
                            |d          | _        nd | _        t          j                            |          | _        t          j                            ||f          | _        |=|dk    r7| j        t&          j        k    rd}n| j        t&          j        k    rd}nt,          |r||f| _        d S d | _        d S )NFr   z0.0.0.0z::)_doner,   _address_port_closed_manager_streamsrD   aioquich3r1   H3Connection_h3_conndnsinetaf_for_address_aflow_level_address_tuple_peersocketAF_INETAF_INET6NotImplementedError_source)r   r1   addressportsourcesource_portmanagers          r   r   zBaseQuicConnection.__init__   s    
%
==?? 	!#J1>>z5QQDMM DM8**733X55woFF
>kQ..x6>))"V_,,)) 	 "K0DLLLDLLLr   c                     | j         d uS r!   )rq   r   s    r   rD   zBaseQuicConnection.is_h3   s    }D((r   c                     | j         |= d S r!   )rm   )r   r2   s     r   rb   zBaseQuicConnection.close_stream   s    M)$$$r   Fc                 >    | j                             |||           d S r!   )rq   rR   )r   r2   r6   r   s       r   rR   zBaseQuicConnection.send_headers   s"    ""9gv>>>>>r   c                 >    | j                             |||           d S r!   )rq   rS   )r   r2   r   r   s       r   rS   zBaseQuicConnection.send_data   s"    	488888r   Tc                     t          j                     }| j                                        }||dz   }t          ||z
  d          }| j        r|rt          |d          }||fS )Ni  r   g?)r:   r,   	get_timerr?   rk   min)r   closed_is_specialnowr<   intervals        r   _get_timer_valuesz$BaseQuicConnection._get_timer_values   sr    ikk%//11
tJzC'++< 	+- 	+ 8T**HH%%r   c                 p    t          j                     }||k    r| j                            |           d S d S r!   )r:   r,   handle_timer)r   r<   r   s      r   _handle_timerz BaseQuicConnection._handle_timer   s=    ikk))#..... r   )Nr   N)Frd   )
r	   r
   r   r   rD   rb   rR   rS   r   r   r   r   r   rf   rf      s                    D) ) )% % %? ? ? ?9 9 9 9& & & &/ / / / /r   rf   c                   ,    e Zd Zddee         defdZdS )AsyncQuicConnectionNr;   returnc                 
   K   d S r!   r   )r   r;   s     r   make_streamzAsyncQuicConnection.make_stream   s      r   r!   )r	   r
   r   r   floatr   r   r   r   r   r   r      s?         % C      r   r   c                   B    e Zd Z	 ddZ	 	 	 	 	 ddZd Zd	 Zd
 Zd ZdS )BaseQuicManagerNFc                 $   i | _         || _        i | _        i | _        || _        |cd }t          |t                    r|}d}|rdg}nddg}t          j        j	        
                    |||          }||                    |           || _        d S )NTro   doqzdoq-i03)alpn_protocolsverify_modeserver_name)_connections_connection_factory_session_tickets_tokens_h3
isinstancerQ   rn   quicconfigurationQuicConfigurationload_verify_locations_conf)r   confr   connection_factoryr   ro   verify_pathr   s           r   r   zBaseQuicManager.__init__   s     #5  "<K+s++ #)" 4"&"'!3<-??-'' @  D
 &**;777


r   U  r   Tc                 *   | j                             ||f          }||dfS | j        }|re	 | j                            ||f          }	t          j        |          }|	|_        n# t          $ r Y nw xY wt          j	        | j
        ||          }
nd }
|re	 | j                            ||f          }t          j        |          }||_        n# t          $ r Y nw xY wt          j	        | j        ||          }nd }t          j        j                            ||
|          }t$          j                            ||f          }|                    |t-          j                               |                     ||||||           }|| 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_tokenrn   r   r1   QuicConnectionrr   rs   rv   connectr:   r   )r   r}   r~   r   r   want_session_ticket
want_tokenr1   r   r   r   r   r   qconn	lladdresss                  r   _connectzBaseQuicManager._connect   s    &**GT?;;
!&&z 	*!%!6!:!:GT?!K!Ky&4##   
 &/%6('4& &"" &*" 	!(('499y"

    &-dowMMMM M'66#9' 7 
 

 H44gt_EE	i-----7D&+t
 

 .87D/*D!!s#   7A% %
A21A27C 
CCc                 >    	 | j         ||f= d S # t          $ r Y d S w xY wr!   )r   r   )r   r}   r~   s      r   closedzBaseQuicManager.closed1  s>    	!7D/222 	 	 	DD	s   
 
c                     | j         S r!   )r   r   s    r   rD   zBaseQuicManager.is_h37  s	    xr   c                     t          | j                  }|t          k    r@t          | j                                                  dt
                   }|D ]
}| j        |= || j        ||f<   d S r+   )r   r   MAX_SESSION_TICKETSlistkeysSESSIONS_TO_DELETE)r   r}   r~   ticketr]   keys_to_deletekeys          r   r   z#BaseQuicManager.save_session_ticket:  s{     %&&###!$"7"<"<">">??BT@TUN% / /)#..17wo...r   c                     t          | j                  }|t          k    r@t          | j                                                  dt
                   }|D ]
}| j        |= || j        ||f<   d S r+   )r   r   r   r   r   r   )r   r}   r~   r   r]   r   r   s          r   r   zBaseQuicManager.save_tokenE  sw     ###!$,"3"3"5"566q9K7KLN% & &L%%(-gt_%%%r   )NF)r   Nr   TT)	r	   r
   r   r   r   r   rD   r   r   r   r   r   r   r      s        JO   :  6" 6" 6" 6"p    	8 	8 	8	. 	. 	. 	. 	.r   r   c                       e Zd ZddZdS )AsyncQuicManagerr   Nr   c                     t           r!   )r{   )r   r}   r~   r   r   s        r   r   zAsyncQuicManager.connectR  s    !!r   )r   Nr   )r	   r
   r   r   r   r   r   r   r   Q  s(        " " " " " "r   r   )rK   r   r   rx   r[   r:   rF   typingr   r   aioquic.h3.connectionrn   aioquic.h3.eventsaioquic.quic.configurationaioquic.quic.connectiondns.inetrr   QUIC_MAX_DATAGRAMr   r   	Exceptionr   r   r)   rf   r   r   r   r   r   r   <module>r      s                                     ! ! ! !        )A- 	 	 	 	 	I 	 	 	               FS$ S$ S$ S$ S$ S$ S$ S$l?/ ?/ ?/ ?/ ?/ ?/ ?/ ?/D    ,   
p. p. p. p. p. p. p. p.f" " " " " " " " " "r   