
    I]0iO+                     @   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  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)Anyi         c                       e Zd ZdS )UnexpectedEOFN)__name__
__module____qualname__     C/var/www/html/venv/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    )r/   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        )maxr9   )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-typerB   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_partsrH   methodr5   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+   rC   r   structpack)r   rT   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   r3   r5   r7   r<   r?   rX   r]   r_   rb   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                 2   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_streamsrC   aioquich3r0   H3Connection_h3_conndnsinetaf_for_address_aflow_level_address_tuple_peersocketAF_INETAF_INET6NotImplementedError_source)r   r0   addressportsourcesource_portmanagers          r   r   zBaseQuicConnection.__init__   s    
%
7==??#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    )rp   r   s    r   rC   zBaseQuicConnection.is_h3   s    }D((r   c                     | j         |= d S r    )rl   )r   r1   s     r   ra   zBaseQuicConnection.close_stream   s    M)$$$r   Fc                 P    | j         J | j                             |||           d S r    )rp   rQ   )r   r1   r5   r   s       r   rQ   zBaseQuicConnection.send_headers   s0    }(((""9gv>>>>>r   c                 P    | j         J | j                             |||           d S r    )rp   rR   )r   r1   r   r   s       r   rR   zBaseQuicConnection.send_data   s0    }(((	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?)r9   r+   	get_timerr>   rj   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    )r9   r+   handle_timer)r   r;   r   s      r   _handle_timerz BaseQuicConnection._handle_timer   s=    ikk))#..... r   )Nr   N)Frc   )
r   r	   r
   r   rC   ra   rQ   rR   r   r   r   r   r   re   re      s                    D) ) )% % %? ? ? ?9 9 9 9& & & &/ / / / /r   re   c                   &    e Zd Zddedz  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
   floatr   r   r   r   r   r   r      s?                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                 l   i | _         || _        i | _        i | _        || _        |d }t          |t                    r|}d}|rdg}nddg}t          j        j	        
                    |||          }|9t          j                            |          \  }}	|                    ||	           || _        d S )NTrn   doqzdoq-i03)alpn_protocolsverify_modeserver_name)cafilecapath)_connections_connection_factory_session_tickets_tokens_h3
isinstancerP   rm   quicconfigurationQuicConfigurationrq   	_tls_util#convert_verify_to_cafile_and_capathload_verify_locations_conf)
r   confr   connection_factoryr   rn   verify_pathr   r   r   s
             r   r   zBaseQuicManager.__init__   s     #5  "<K+s++ #)" 4"&"'!3<-??-'' @  D
 &!$!R!R" " **&*HHH


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_tokenrm   r   r0   QuicConnectionrq   rr   ru   connectr9   r   )r   r|   r}   r~   r   want_session_ticket
want_tokenr0   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.closed6  s>    	!7D/222 	 	 	DD	s   
 
c                     | j         S r    )r   r   s    r   rC   zBaseQuicManager.is_h3<  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_tokenJ  sw     ###!$,"3"3"5"566q9K7KLN% & &L%%(-gt_%%%r   )NF)r   Nr   TT)	r   r	   r
   r   r   r   rC   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    )rz   )r   r|   r}   r~   r   s        r   r   zAsyncQuicManager.connectW  s    !!r   )r   Nr   )r   r	   r
   r   r   r   r   r   r   V  s(        " " " " " "r   r   )rJ   r   r   rw   rZ   r9   urllib.parserE   typingr   aioquic.h3.connectionrm   aioquic.quic.configurationaioquic.quic.connectiondns._tls_utilrq   dns.inetQUIC_MAX_DATAGRAMr   r   	Exceptionr   r   r(   re   r   r   r   r   r   r   <module>r      s                          ! ! ! !            )A- 	 	 	 	 	I 	 	 	               FS$ S$ S$ S$ S$ S$ S$ S$lA/ A/ A/ A/ A/ A/ A/ A/H    ,   
s. s. s. s. s. s. s. s.l" " " " " " " " " "r   