
    ,hi*                        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y)    N)AnyOptionali         c                       e Zd Zy)UnexpectedEOFN)__name__
__module____qualname__     R/var/www/html/Resume-Scraper/venv/lib/python3.12/site-packages/dns/quic/_common.pyr   r      s    r   r   c                   0    e Zd 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_end1       ~~r   c                 r    | j                  |      sJ | j                  d | }| j                  |d  | _        |S r!   )r   r   )r   r   r   s      r   getz
Buffer.get4   s8    yy  ||GV$||FG,r   c                 P    | j                         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      s     "r   r   c                   J    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y)BaseQuicStreamc                 h    || _         || _        t               | _        d| _        d | _        d | _        y Nr   )_connection
_stream_idr   r   
_expecting_headers	_trailers)r   
connection	stream_ids      r   r   zBaseQuicStream.__init__B   s/    %#x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   }|S d }|S r!   )time)r   timeout
expirations      r   _expiration_from_timeoutz'BaseQuicStream._expiration_from_timeoutS   s-    w.J  Jr   c                 T    |#t        |t        j                         z
  d      }|S d }|S )Ng        )maxr:   )r   r<   r;   s      r   _timeout_from_expirationz'BaseQuicStream._timeout_from_expirationZ   s2    !*tyy{2C8G  Gr   c           	         | j                   j                         st        d      t        j                  j                  |      }|j                  j                         }|rd}n,d}|dt        j                  |      j                  d      z   z  }d|fd|j                  j                         fd|j                  j                         fd	|fd
g}|r5|j                  ddt        t        |            j                         fg       | j                   j!                  | j"                  ||        |r(| j                   j%                  | j"                  |d       y y )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   s7   %%'EFFLL))#.	~~$$&FFHv77AHHNNND ))0023I,,3356t3
 NNA&CM(:(A(A(CD 	%%doowDI&&t$G r   c                     | j                   j                         r|S t        |      }t        j                  d|      |z   S )Nz!H)r,   rD   r   structpack)r   rU   ls      r   _encapsulatezBaseQuicStream._encapsulate   s8    !!#OM{{4#h..r   c                     | j                   j                  ||       	 | j                  dkD  xr% | j                   j                  | j                        xs | j                   j                  S # t
        $ r Y yw xY w)Nr   T)r   r   r.   r   r"   r   r   s      r   _common_add_inputz BaseQuicStream._common_add_input   sj    v&	!#J(9(9$//(J'&&'  		s   AA, ,	A87A8c                     | j                   j                  | j                         | j                  j	                  dd       y )Nr   T)r,   close_streamr-   r   r   r   s    r   _closezBaseQuicStream._close   s.    %%doo6d#r   NT)r	   r
   r   r   r4   r6   r8   r=   r@   rY   r^   r`   rc   r   r   r   r)   r)   A   s5    H8/$r   r)   c                   D    e Zd Z	 	 	 d	dZd Zd Zd
dZd
dZddZd Z	y)BaseQuicConnectionNc                 H   d| _         || _        || _        || _        d| _        || _        i | _        |j                         r0t        j                  j                  j                  |d      | _        nd | _        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_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     
%
==?#JJ11>>z5QDM DM88**73XX55woF
>kQ.xx6>>)"V__,))"K0DLDLr   c                     | j                   d uS r!   )rq   r   s    r   rD   zBaseQuicConnection.is_h3   s    }}D((r   c                     | j                   |= y r!   )rm   )r   r2   s     r   rb   zBaseQuicConnection.close_stream   s    MM)$r   c                 >    | j                   j                  |||       y r!   )rq   rR   )r   r2   r6   r   s       r   rR   zBaseQuicConnection.send_headers   s    ""9gv>r   c                 >    | j                   j                  |||       y r!   )rq   rS   )r   r2   r   r   s       r   rS   zBaseQuicConnection.send_data   s    	48r   c                     t        j                          }| 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   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   r<   r   s      r   _handle_timerz BaseQuicConnection._handle_timer   s.    iik))#. r   )Nr   N)Frd   )
r	   r
   r   r   rD   rb   rR   rS   r   r   r   r   r   rf   rf      s1       D)%?9&/r   rf   c                   $    e Zd Zddee   defdZy)AsyncQuicConnectionNr;   returnc                    K   y wr!   r   )r   r;   s     r   make_streamzAsyncQuicConnection.make_stream   s	     s   r!   )r	   r
   r   r   floatr   r   r   r   r   r   r      s    % C r   r   c                   @    e Zd Z	 ddZ	 	 	 	 	 d	dZd Zd Zd Zd Zy)
BaseQuicManagerNc                    i | _         || _        i | _        i | _        || _        |_d }t        |t              r|}d}|rdg}nddg}t        j                  j                  j                  |||      }||j                  |       || _        y )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+)""&"'!3<<--??-'' @ D
 &**;7
r   c                 V   | j                   j                  ||f      }||dfS | j                  }|r\	 | j                  j	                  ||f      }	t        j
                  |      }|	|_        t        j                  | j                  ||      }
nd }
|r\	 | j                  j	                  ||f      }t        j
                  |      }||_        t        j                  | j                  ||      }nd }t        j                  j                   j#                  ||
|      }t$        j&                  j)                  ||f      }|j+                  |t-        j,                                | j/                  ||||||       }|| j                   ||f<   |dfS # t        $ r Y ,w xY w# t        $ r Y w xY w)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?;
!&&zz!%!6!6!:!:GT?!Kyy&4# &/%6%6(('4&" &*"(('49yy"

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

 .87D/*D!!G     s#   9F 9F 	FF	F('F(c                 B    	 | j                   ||f= y # t        $ r Y y w xY wr!   )r   r   )r   r}   r~   s      r   closedzBaseQuicManager.closed1  s+    	!!7D/2 		s    	c                     | j                   S r!   )r   r   s    r   rD   zBaseQuicManager.is_h37  s    xxr   c                     t        | j                        }|t        k\  r>t        | j                  j	                               dt
         }|D ]  }| j                  |=  || j                  ||f<   y 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:  so     %%&##!$"7"7"<"<">?BTUN% /))#./17wo.r   c                     t        | j                        }|t        k\  r>t        | j                  j	                               dt
         }|D ]  }| j                  |=  || j                  ||f<   y r+   )r   r   r   r   r   r   )r   r}   r~   r   r]   r   r   s          r   r   zBaseQuicManager.save_tokenE  sg     ##!$,,"3"3"56q9KLN% &LL%&(-gt_%r   )NF)U  Nr   TT)	r	   r
   r   r   r   r   rD   r   r   r   r   r   r   r      s5    JO:  6"p	8	.r   r   c                       e Zd ZddZy)AsyncQuicManagerNc                     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$l?/ ?/D, 
p. p.f" "r   