
    hO+                        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y)    N)Anyi         c                       e Zd Zy)UnexpectedEOFN)__name__
__module____qualname__     N/var/www/html/eduruby.in/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   s;    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    )r/   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        )maxr9   )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-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   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+   rC   r   structpack)r   rT   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   r3   r5   r7   r<   r?   rX   r]   r_   rb   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                 L   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_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==?#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    )rp   r   s    r   rC   zBaseQuicConnection.is_h3   s    }}D((r   c                     | j                   |= y r    )rl   )r   r1   s     r   ra   zBaseQuicConnection.close_stream   s    MM)$r   c                 Z    | j                   J | j                   j                  |||       y r    )rp   rQ   )r   r1   r5   r   s       r   rQ   zBaseQuicConnection.send_headers   s(    }}(((""9gv>r   c                 Z    | j                   J | j                   j                  |||       y r    )rp   rR   )r   r1   r   r   s       r   rR   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?)r9   r+   	get_timerr>   rj   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    )r9   r+   handle_timer)r   r;   r   s      r   _handle_timerz BaseQuicConnection._handle_timer   s.    iik))#. r   )Nr   N)Frc   )
r   r	   r
   r   rC   ra   rQ   rR   r   r   r   r   r   re   re      s1       D)%?9&/r   re   c                   $    e Zd Zddedz  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
   floatr   r   r   r   r   r   r      s      r   r   c                   @    e Zd Z	 ddZ	 	 	 	 	 d	dZd Zd Zd Zd Zy)
BaseQuicManagerNc                 b   i | _         || _        i | _        i | _        || _        |d }t        |t              r|}d}|rdg}nddg}t        j                  j                  j                  |||      }|5t        j                  j                  |      \  }}	|j                  ||	       || _        y )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+)""&"'!3<<--??-'' @ D
 &!$!R!R" **&*H
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_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?;
!&&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.closed6  s+    	!!7D/2 		s    	c                     | j                   S r    )r   r   s    r   rC   zBaseQuicManager.is_h3<  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_tokenJ  sg     ##!$,,"3"3"56q9KLN% &LL%&(-gt_%r   )NF)U  Nr   TT)	r   r	   r
   r   r   r   rC   r   r   r   r   r   r   r      s6    JO@  6"p	8	.r   r   c                       e Zd ZddZy)AsyncQuicManagerNc                     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$lA/ A/H, 
s. s.l" "r   