
    h1                       S SK Jr  S SKrS SKrS SKrS SKrS SKrS SKrS SK	rS SK
rSSKJr  SSKJr  SSKJrJr  SSKJr  SSKJr  \r\R.                  " S	5      r\R2                  " \5      r\R8                  " S
5      r\R8                  " S5      rSS jrSS jr  " S S\RB                  \   5      r" " S S\5      r# " S S\5      r$g)    )annotationsN   )
_TYPE_BODY)HTTPHeaderDict)HTTPSConnection_get_default_user_agent)ConnectionError)BaseHTTPResponseTs   ^[!#$%&'*+\-.^_`|~0-9a-z]+$s*   [\0\x00\x0a\x0d\r\n]|^[ \r\n\t]|[ \r\n\t]$c                >    [        [        R                  U 5      5      $ )a  
"An implementation that validates fields according to the definitions in Sections
5.1 and 5.5 of [HTTP] only needs an additional check that field names do not
include uppercase characters." (https://httpwg.org/specs/rfc9113.html#n-field-validity)

`http.client._is_legal_header_name` does not validate the field name according to the
HTTP 1.1 spec, so we do that here, in addition to checking for uppercase characters.

This does not allow for the `:` character in the header name, so should not
be used to validate pseudo-headers.
)boolRE_IS_LEGAL_HEADER_NAMEmatch)names    J/var/www/html/env/lib/python3.13/site-packages/urllib3/http2/connection.py_is_legal_header_namer      s     '--d344    c                >    [        [        R                  U 5      5      $ )a7  
"A field value MUST NOT contain the zero value (ASCII NUL, 0x00), line feed
(ASCII LF, 0x0a), or carriage return (ASCII CR, 0x0d) at any position. A field
value MUST NOT start or end with an ASCII whitespace character (ASCII SP or HTAB,
0x20 or 0x09)." (https://httpwg.org/specs/rfc9113.html#n-field-validity)
)r   RE_IS_ILLEGAL_HEADER_VALUEsearch)values    r   _is_illegal_header_valuer   ,   s     *11%899r   c                  J    \ rS rSrSrSrS	S jrS
S jr        SS jrSr	g)_LockedObject6   a@  
A wrapper class that hides a specific object behind a lock.
The goal here is to provide a simple way to protect access to an object
that cannot safely be simultaneously accessed from multiple threads. The
intended use of this class is simple: take hold of it with a context
manager, which returns the protected object.
)lock_objc                D    [         R                  " 5       U l        Xl        g N)	threadingRLockr   r   )selfobjs     r   __init___LockedObject.__init__D   s    OO%		r   c                N    U R                   R                  5         U R                  $ r   )r   acquirer   r"   s    r   	__enter___LockedObject.__enter__H   s    		yyr   c                8    U R                   R                  5         g r   )r   release)r"   exc_typeexc_valexc_tbs       r   __exit___LockedObject.__exit__L   s     			r   )r   r   N)r#   r   )returnr   )r-   ztype[BaseException] | Noner.   zBaseException | Noner/   ztypes.TracebackType | Noner2   None)
__name__
__module____qualname____firstlineno____doc__	__slots__r$   r)   r0   __static_attributes__ r   r   r   r   6   sC    I
, & +	
 
r   r   c                    ^  \ rS rSr S       SU 4S jjjrSS jrSU 4S jjr        SS jrSS jrSSS jjr	SS jr
   S         SS	 jjr  SS
 jr  SSSSS.                 SS jjjrSU 4S jjrSrU =r$ )HTTP2ConnectionU   c                   > U R                  5       U l        S U l        / U l        SU;   d  SU;   a  [	        S5      e[
        TU ]  " X40 UD6  U R                  b  [	        S5      eg )Nproxyproxy_configz$Proxies aren't supported with HTTP/2z%Tunneling isn't supported with HTTP/2)_new_h2_conn_h2_conn
_h2_stream_headersNotImplementedErrorsuperr$   _tunnel_host)r"   hostportkwargs	__class__s       r   r$   HTTP2Connection.__init__V   sm     ))+&*35f& 8%&LMM.v.(%&MNN )r   c                    [         R                  R                  SS9n[        [         R                  R                  US95      $ )NT)client_side)config)h2rP   H2Configurationr   
connectionH2Connection)r"   rP   s     r   rB   HTTP2Connection._new_h2_conne   s6    **t*<R]]77v7FGGr   c                   > [         TU ]  5         U R                   nUR                  5         UR	                  5       =n(       a  U R
                  R                  U5        S S S 5        g ! , (       d  f       g = fr   )rG   connectrC   initiate_connectiondata_to_sendsocksendall)r"   connrY   rL   s      r   rW   HTTP2Connection.connecti   sR    ]]d$$&#0022|2		!!,/ ]]s   AA((
A6c                   SU;   a  [        S5      eSU;   a  [        S5      eU=(       d    SU l        U R                  U5        SU R                  ;   a&  SU R                   SU R                  =(       d    S	 3nO$U R                   SU R                  =(       d    S	 3nU R
                  R                  S
5        U R
                  R                  SUR                  5       45        U R
                  R                  SUR                  5       45        U R
                  R                  SUR                  5       45        U R                   nUR                  5       U l
        SSS5        g! , (       d  f       g= f)zputrequest
This deviates from the HTTPConnection method signature since we never need to override
sending accept-encoding headers or the host header.
	skip_hostz`skip_host` isn't supportedskip_accept_encodingz&`skip_accept_encoding` isn't supported/:[z]:i  )s   :schemes   httpss   :methods
   :authoritys   :pathN)rF   _request_url_validate_pathrI   rJ   rE   appendencoderC   get_next_available_stream_idrD   )r"   methodurlrK   	authorityr\   s         r   
putrequestHTTP2Connection.putrequestp   s     & %&CDD!V+%&NOOJ3C $))DII;b)9c(:;I99+Qtyy'7C&89I34j&--/:;mY-=-=-?@Ah

56]]d"??ADO ]]s   E%%
E3c                   [        U[        5      (       a  UR                  5       OUnUR                  5       n[	        U5      (       d  [        S[        U5       35      eU Hm  n[        U[        5      (       a  UR                  5       OUn[        U5      (       a  [        S[        U5       35      eU R                  R                  X45        Mo     g )NzIllegal header name zIllegal header value )	
isinstancestrrg   lowerr   
ValueErrorr   rE   rf   )r"   headervaluesr   s       r   	putheaderHTTP2Connection.putheader   s    $.vs$;$;$V,,3CK=ABBE&0&<&<ELLN%E'.. #8U!EFFMM  &1	 r   c                @   U R                   c  [        S5      eU R                   nUR                  U R                   U R                  US L S9  UR                  5       =n(       a  U R                  R                  U5        S S S 5        / U l        g ! , (       d  f       N= f)NMust call `putrequest` first.)	stream_idheaders
end_stream)rD   r	   rC   send_headersrE   rY   rZ   r[   )r"   message_bodyr\   rY   s       r   
endheadersHTTP2Connection.endheaders   s    ??"!"ABB]]d//(D0  
  $0022|2		!!,/   ]s   AB
Bc                   U R                   c  [        S5      eU R                   nUR                  5       =n(       a  U R                  R                  U5        [        US5      (       a   UR                  U R                  5      nU(       d  Ot[        U[        5      (       a  UR                  5       nUR                  U R                   USS9  UR                  5       =n(       a  U R                  R                  U5        M  UR                  U R                   5         SSS5        g[        U[        5      (       a  UR                  5       n [        U[        5      (       aN  UR                  U R                   USS9  UR                  5       =n(       a  U R                  R                  U5        OtU HR  nUR                  U R                   USS9  UR                  5       =n(       d  M7  U R                  R                  U5        MT     UR                  U R                   5         SSS5        g! [         a    [        S[!        U5      -  5      ef = f! , (       d  f       g= f)zySend data to the server.
`data` can be: `str`, `bytes`, an iterable, or file-like objects
that support a .read() method.
Nrx   readTF)r{   z6`data` should be str, bytes, iterable, or file. got %r)rD   r	   rC   rY   rZ   r[   hasattrr   	blocksizero   rp   rg   	send_datar{   bytes	TypeErrortype)r"   datar\   rY   chunks        r   sendHTTP2Connection.send   s   
 ??"!"ABB]]d#0022|2		!!,/tV$$ IIdnn5E !%-- %NN4??EeNL'+'8'8'::|:		)),7  0 ]" $$${{}dE**NN4??DTNJ'+'8'8'::|:		)),7!%t%P+/+<+<+>><> II--l; "& OODOO4= ]>  L4j! ? ]s=   C8I&%IA"H,.I/5H,(:H,"I,"II
Ic                    [        S5      e)Nz;HTTP/2 does not support setting up a tunnel through a proxy)rF   )r"   rI   rJ   rz   schemes        r   
set_tunnelHTTP2Connection.set_tunnel   s     "I
 	
r   c           	        S n[        5       nU R                   nSnU(       Gd  U R                  R                  S5      =n(       GaD  UR	                  U5      nU GH,  n[        U[        R                  R                  5      (       ar  [        5       nUR                   HV  u  pU	S:X  a  [        U
R                  5       5      nM&  UR                  U	R                  S5      U
R                  S5      5        MX     M  [        U[        R                  R                  5      (       a6  X'R                  -  nUR!                  UR"                  UR$                  5        M  [        U[        R                  R&                  5      (       d  GM*  SnGM/     UR)                  5       =n(       a  U R                  R+                  U5        U(       d  GM  S S S 5        Uc   e[-        UWU R.                  [1        U5      S9$ ! , (       d  f       N2= f)NFi  s   :statusasciiT)statusrz   request_urlr   )	bytearrayrC   rZ   recvreceive_dataro   rQ   eventsResponseReceivedr   rz   intdecodeaddDataReceivedr   acknowledge_received_dataflow_controlled_lengthry   StreamEndedrY   r[   HTTP2Responserd   r   )r"   r   r   r\   r{   received_datar   eventrz   rs   r   rY   s               r   getresponseHTTP2Connection.getresponse   s    {]]dJ $(IINN5$99=9!..}=F!'%eRYY-G-GHH&4&6G16#)Z#7-0-@F$+KK(.g(>W@U%&	 2? (ryy/E/EFF JJ.D :: % < <eoo (ryy/D/DEE)-J% "(( $(#4#4#66<6II%%l33 !j : !!!))t	
 	
= ]s   E&G3A G33
HT)preload_contentdecode_contentenforce_content_lengthc                  SU;   a   U R                   b%  U R                   R                  U R                  5        U R                  X5        U=(       d    0 nUR	                  5        H2  u  pU	R                  5       S:X  a  U
S:X  a  M!  U R                  X5        M4     S[        U R                  5      ;  a  U R                  S[        5       5        U(       a!  U R                  US9  U R                  U5        gU R                  5         g)zSend an HTTP/2 requestchunkedNztransfer-encodings
   user-agent)r}   )rZ   
settimeouttimeoutrl   itemsrq   ru   dictrE   r   r~   r   )r"   ri   rj   bodyrz   r   r   r   rK   kvs              r   requestHTTP2Connection.request  s      99 II  .$-RMMODAwwy//ANq$	 $ T]] 33NN=*A*CDOOO.IIdOOOr   c                Z  > U R                    n UR                  5         UR                  5       =n(       a  U R                  R	                  U5        S S S 5        U R                  5       U l         S U l        / U l        [        TU ])  5         g ! [
         a     NFf = f! , (       d  f       NP= fr   )rC   close_connectionrY   rZ   r[   	ExceptionrB   rD   rE   rG   close)r"   r\   r   rL   s      r   r   HTTP2Connection.close3  s    ]]d%%',,..4.II%%d+	  ))+   ]s)   BAB
BBBB
B*)rC   rD   rE   rd   r   )rI   rp   rJ   
int | NonerK   
typing.Anyr2   r3   )r2   z)_LockedObject[h2.connection.H2Connection]r2   r3   )ri   rp   rj   rp   rK   r   r2   r3   )rs   str | bytesrt   r   r2   r3   )r}   r   r2   r3   )r   r   r2   r3   )NNhttp)
rI   rp   rJ   r   rz   typing.Mapping[str, str] | Noner   rp   r2   r3   )r2   r   )NN)ri   rp   rj   rp   r   z_TYPE_BODY | Nonerz   r   r   r   r   r   r   r   rK   r   r2   r3   )r4   r5   r6   r7   r$   rB   rW   rl   ru   r~   r   r   r   r   r   r:   __classcell__rL   s   @r   r=   r=   U   sO   ,0OO)O<FO	O OH0BB B 	B
 
B>2+`  37	
	
 	
 1		

 	
 
	
(
	(
\ #'37% !%#'+%% %  	%
 1% % % !%% % 
%N r   r=   c                  p   ^  \ rS rSr S           SU 4S jjjr\S	S j5       rS
S jrS
S jrSr	U =r
$ )r   iD  c           
     F   > [         TU ]  UUSSS UUS9  X@l        SU l        g )N   zHTTP/2)r   rz   versionversion_stringreasonr   r   r   )rG   r$   _datalength_remaining)r"   r   rz   r   r   r   rL   s         r   r$   HTTP2Response.__init__F  s;     	#)# 	 
	
 
 !r   c                    U R                   $ r   )r   r(   s    r   r   HTTP2Response.data\  s    zzr   c                    g r   r;   r(   s    r   get_redirect_location#HTTP2Response.get_redirect_location`  s    r   c                    g r   r;   r(   s    r   r   HTTP2Response.closec  s    r   )r   r   )F)r   r   rz   r   r   rp   r   r   r   r   r2   r3   )r2   r   r   )r4   r5   r6   r7   r$   propertyr   r   r   r:   r   r   s   @r   r   r   D  so      %""  " 	"
 " " 
" ",   r   r   )r   r   r2   r   )r   r   r2   r   )%
__future__r   loggingrer    typestyping	h2.configrQ   h2.connection	h2.events_base_connectionr   _collectionsr   rS   r   r   
exceptionsr	   responser
   orig_HTTPSConnectionTypeVarr   	getLoggerr4   logcompiler   r   r   r   Genericr   r=   r   r;   r   r   <module>r      s    "  	       ) ) A ( '& 
NN3!**%DE ZZ(VW 5:FNN1% >lo l^ $  r   