
    *Gj:1                     v   d Z ddlZddlZddlZddlmZmZmZmZm	Z	m
Z
mZmZ ddlmZ ddlmZ ddlmZ ddlmZ dd	lmZ dd
lmZ dZej        dk    rddlmZ nddlmZ eeeddf         ZdZ dej        cxk    odk     nc Z!ej        dk     Z"e!pe"Z# G d de          Z$ e$dd          Z% e$dd          Z&eeeged         f                  Z'eedged         f                  Z( G d de          Z) ej*        d          Z+de,de,fdZ-de,dddefd Z.e.Z/	 ddl0m1Z1 e1j/        Z2ese2Z/dS dS # e3$ r Y dS w xY w)!z"Http related parsers and protocol.    N)TYPE_CHECKINGAny	AwaitableCallableIterableList
NamedTupleOptional)CIMultiDict   )AbstractStreamWriter)BaseProtocol)ClientConnectionResetError)ZLibCompressor)NO_EXTENSIONS)StreamWriterHttpVersionHttpVersion10HttpVersion11)      )Buffer)Unionzmemoryview[int]zmemoryview[bytes]i   )r      r   )r   r      )r   r   	   c                   $    e Zd ZU eed<   eed<   dS )r   majorminorN)__name__
__module____qualname__int__annotations__     [/home/rurouni/.hermes/hermes-agent/venv/lib/python3.11/site-packages/aiohttp/http_writer.pyr   r   .   s"         JJJJJJJJr&   r   CIMultiDict[str]c                      e Zd ZU dZedz  ed<   dZeed<   dZeed<   dZ	e
dz  ed<   	 	 d*dedej        d	ed
eddf
dZedej        dz  fd            Zedefd            Zd+dZ	 d,dededz  ddfdZdeddfdZdee         ddfdZdeddfdZdededdfdZddddedededdfd Zd!ed"d#ddfd$Zd+d%Z d+d&Z!d-de"ddfd(Z#d+d)Z$dS ).r   NlengthFchunked_eof	_compressprotocolloopon_chunk_senton_headers_sentreturnc                 Z    || _         || _        || _        || _        d | _        d| _        d S )NF)	_protocolr/   _on_chunk_sent_on_headers_sent_headers_buf_headers_written)selfr.   r/   r0   r1   s        r'   __init__zStreamWriter.__init__B   s8     "	.;2A*.&+r&   c                     | j         j        S N)r4   	transportr9   s    r'   r=   zStreamWriter.transportP   s    ~''r&   c                     | j         S r<   )r4   r>   s    r'   r.   zStreamWriter.protocolT   s
    ~r&   c                     d| _         d S )NT)r+   r>   s    r'   enable_chunkingzStreamWriter.enable_chunkingX   s    r&   deflateencodingstrategyc                 2    t          ||          | _        d S )N)rC   rD   )r   r-   )r9   rC   rD   s      r'   enable_compressionzStreamWriter.enable_compression[   s     (HMMMr&   chunkc                     t          |          }| xj        |z  c_        | xj        |z  c_        | j        j        }||                                rt          d          |                    |           d S )N!Cannot write to closing transport)lenbuffer_sizeoutput_sizer4   r=   
is_closingr   write)r9   rG   sizer=   s       r'   _writezStreamWriter._write`   s}    5zzD D N,		 4 4 6 6,-PQQQr&   chunksc                 |   d}|D ]}|t          |          z  }| xj        |z  c_        | xj        |z  c_        | j        j        }||                                rt          d          t          s|t          k     r*|	                    d
                    |                     d S |                    |           d S )Nr   rI   r&   )rJ   rK   rL   r4   r=   rM   r   SKIP_WRITELINESMIN_PAYLOAD_FOR_WRITELINESrN   join
writelines)r9   rQ   rO   rG   r=   s        r'   _writelineszStreamWriter._writelinesi   s     	 	ECJJDDD D N,		 4 4 6 6,-PQQQ 	)d%???OOCHHV,,-----  (((((r&   c                     t          |          dd                    d          }|                     ||df           dS )z+Write a chunk with proper chunked encoding.x
ascii   
N)rJ   encoderW   )r9   rG   chunk_len_pres      r'   _write_chunked_payloadz#StreamWriter._write_chunked_payloadw   sH    u::----44W==-899999r&   is_eofc                    d| _         | j        }d| _        t          r|J | j        s1|r|                     ||f           n|                     |           dS |r^t          |          dd                    d          }|r|                     |||df           dS |                     |||df           dS |r|                     |df           dS |                     |           dS )	zASend buffered headers with payload, coalescing into single write.TNrY   rZ   r[      
0

r\      0

)r8   r7   r   r+   rW   rP   rJ   r]   )r9   rG   r`   headers_bufr^   s        r'   _send_headers_with_payloadz'StreamWriter._send_headers_with_payload|   s5    !%'  	+ ***| 	 )  +u!56666K(((F  		%"5zz111188AAM O  +}eEU!VWWWWW  +}eW!MNNNNN 	%k<899999KK$$$$$r&   Ti   )drainLIMITrf   rg   c                6  K   | j         |                      |           d{V  t          |t                    r-|j        t	          |          k    r|                    d          }| j        $| j                            |           d{V }|sdS | j        Dt	          |          }| j        |k    r| j        |z
  | _        n|d| j                 }d| _        |sdS | j	        rM| j
        sF|                     |d           |r,| j        |k    r!d| _        |                                  d{V  dS |rb| j        r|                     |           n|                     |           |r0| j        |k    r'd| _        |                                  d{V  dS dS dS dS )z
        Writes chunk of data to a stream.

        write_eof() indicates end of stream.
        writer can't be used after write_eof() method being called.
        write() return drain future.
        Ncr   F)r5   
isinstance
memoryviewnbytesrJ   castr-   compressr*   r7   r8   re   rK   rf   r+   r_   rP   )r9   rG   rf   rg   	chunk_lens        r'   rN   zStreamWriter.write   s      *%%e,,,,,,,,,eZ(( 	(|s5zz))

3>%.11%88888888E ;"E

I{i''"kI5mm, F  	T%: 	++E5999 #)E11#$ jjll"""""""F 	#| #++E2222E""" #)E11#$ jjll"""""""""	# 	## #11r&   status_lineheadersr(   c                    K   | j         |                      |           d{V  t          ||          }d| _        || _        dS )zWrite headers to the stream.NF)r6   _serialize_headersr8   r7   )r9   rp   rq   bufs       r'   write_headerszStreamWriter.write_headers   s\        ,''000000000 g66 %r&   c                     | j         r| j        rdS d| _        | j         }d| _         t          r|J |                     |           dS )z3Force sending buffered headers if not already sent.NT)r7   r8   r   rP   r9   rd   s     r'   send_headerszStreamWriter.send_headers   s`      	D$9 	F $'  	+***K     r&   c                 2   | j         rdS | j        r\| j        sUd| _        | j        }d| _        t          r|J | j        r|                     |df           n9|                     |           n#| j        r| j        r|                     d           d| _         dS )z&Indicate that the message is complete.NTrc   )r,   r7   r8   r   r+   rW   rP   rw   s     r'   set_eofzStreamWriter.set_eof   s    9 	F  	&T%: 	&$(D!+K $D /"... | )  +|!<====K((((\ 	&d3 	&KK%%%			r&   r&   c                   K   | j         rd S |r"| j        |                     |           d {V  | j        rg }d}|rF| j                            |           d {V x}r$t	          |          }|                    |           | j                                        }|t	          |          z  }|                    |           |sJ | j        r| j        sd| _        | j        }d | _        | j	        r6|dd
                    d          }|                     ||g|dR            n|                     |g|R            |                                  d {V  d| _         d S | j	        r5|dd
                    d          }|                     |g|dR            nDt	          |          dk    r|                     |           n|                     |d                    |                                  d {V  d| _         d S | j        r@| j        s9|                     |d           |                                  d {V  d| _         d S | j	        rw|r=|                     t	          |          dd
                    d          |df           n|                     d           |                                  d {V  d| _         d S |r/|                     |           |                                  d {V  d| _         d S )	Nr   TrY   rZ   r[   rb   r   rc   )r,   r5   r-   rn   rJ   appendflushr7   r8   r+   r]   rW   rf   rP   re   )r9   rG   rQ   
chunks_lencompressed_chunkflush_chunkrd   r^   s           r'   	write_eofzStreamWriter.write_eof  s     9 	F 	-T(4%%e,,,,,,,,, > )	"$FJ 0DN4K4KE4R4R.R.R.R.R.R.RR* 0 !122
.///...00K#k***JMM+&&&:   )> (,%"/$(!< ='1$9$9$9$9$@$@$I$IM$$$mOfO>NOO   
 $$k%;F%;%;<<<jjll""""""" 	 | '#- 5 5 5 5 < <W E E  -!K&!K:J!K!KLLLLVq  ((((F1I&&&**,,DIF  	T%: 	++E4888**,,DIF < 
	 *  E

****11'::ECST    L)))**,,DIF 	KK**,,			r&   c                 p   K   | j         }|j        #|j        r|                                 d{V  dS dS dS )zFlush the write buffer.

        The intended use is to write

          await w.write(data)
          await w.drain()
        N)r4   r=   _paused_drain_helper)r9   r.   s     r'   rf   zStreamWriter.drainR  sX       >)h.>)((*********** *)))r&   )NN)r2   N)rB   N)r&   )%r    r!   r"   r*   r#   r$   r+   boolr,   r-   r   r   asyncioAbstractEventLoop_T_OnChunkSent_T_OnHeadersSentr:   property	Transportr=   r.   rA   strrF   r   rP   r   rW   r_   re   rN   ru   rx   rz   bytesr   rf   r%   r&   r'   r   r   ;   s        FC$JGTD$'+I~$+++ )-,0, ,, ', &	,
 *, 
, , , , (7,t3 ( ( ( X( ,    X    AEN NN36:N	N N N N
F t    )(6"2 )t ) ) ) ):F :t : : : :
% % % % % % %B /31# 1# 1#1#'+1#;>1#	1# 1# 1# 1#f	 	 );	 		  	  	  	 ! ! ! !   6L LU LT L L L L\
+ 
+ 
+ 
+ 
+ 
+r&   r   z[\x00-\x08\x0a-\x1f\x7f]stringr2   c                 X    t                               |           t          d          | S )NzSForbidden control character detected in headers. Potential header injection attack.)_FORBIDDEN_HEADER_CHARS_REsearch
ValueError)r   s    r'   _safe_headerr   d  s4    !((00<1
 
 	
 Mr&   rp   rq   c                     t          |            d |                                D             }| dz   d                    |          z   dz   }|                    d          S )Nc              3   `   K   | ])\  }}t          |          d z   t          |          z   V  *dS )z: N)r   ).0kvs      r'   	<genexpr>z(_py_serialize_headers.<locals>.<genexpr>o  s<      XX1<??T)LOO;XXXXXXr&   rZ   z

zutf-8)r   itemsrU   r]   )rp   rq   headers_genlines       r'   _py_serialize_headersr   m  s]    XXXXXK&++k":"::ZGD;;wr&   )4__doc__r   resystypingr   r   r   r   r   r   r	   r
   	multidictr   abcr   base_protocolr   client_exceptionsr   compression_utilsr   helpersr   __all__version_infocollections.abcr   r   r   	bytearrayrT   IS_PY313_BEFORE_313_2IS_PY_BEFORE_312_9rS   r   r   r   r   r   r   compiler   r   r   r   rs   aiohttp._http_writer_http_writer_c_serialize_headersImportErrorr%   r&   r'   <module>r      s   ( (  				 



	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 " ! ! ! ! ! % % % % % % ' ' ' ' ' ' 9 9 9 9 9 9 - - - - - - " " " " " "
Kw&&&&&&&5)%68KKLF " "c&6CCCCCCCC %
2 '=+=    *   
 Aq!!Aq!! (F8Yt_#<=>H&8%99T?%JKL a+ a+ a+ a+ a+' a+ a+ a+L	 (RZ(CDD       s  5G  E         + 	//////': 212 2 	 	 	DD	s   D/ /D87D8