
    F/j:1                     Z   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j4                  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j4                  cxk  xr dk  nc Z!ej4                  dk  Z"e!xs 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jT                  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/yy# e3$ r Y y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<   y)r   majorminorN)__name__
__module____qualname__int__annotations__     Q/var/www/html/maxservice/venv/lib/python3.12/site-packages/aiohttp/http_writer.pyr   r   .   s    JJr&   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$y),r   NlengthFchunked_eof	_compressprotocolloopon_chunk_senton_headers_sentreturnc                 X    || _         || _        || _        || _        d | _        d| _        y )NF)	_protocolr/   _on_chunk_sent_on_headers_sent_headers_buf_headers_written)selfr.   r/   r0   r1   s        r'   __init__zStreamWriter.__init__B   s2     "	.;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| _         y )NT)r+   r>   s    r'   enable_chunkingzStreamWriter.enable_chunkingX   s	    r&   encodingstrategyc                 (    t        ||      | _        y )N)rB   rC   )r   r-   )r9   rB   rC   s      r'   enable_compressionzStreamWriter.enable_compression[   s     (HMr&   chunkc                     t        |      }| xj                  |z  c_        | xj                  |z  c_        | j                  j                  }||j                         rt        d      |j                  |       y )N!Cannot write to closing transport)lenbuffer_sizeoutput_sizer4   r=   
is_closingr   write)r9   rF   sizer=   s       r'   _writezStreamWriter._write`   se    5zD D NN,,		 4 4 6,-PQQr&   chunksc                 n   d}|D ]  }|t        |      z  } | xj                  |z  c_        | xj                  |z  c_        | j                  j                  }||j                         rt        d      t        s	|t        k  r!|j                  dj                  |             y |j                  |       y )Nr   rH   r&   )rI   rJ   rK   r4   r=   rL   r   SKIP_WRITELINESMIN_PAYLOAD_FOR_WRITELINESrM   join
writelines)r9   rP   rN   rF   r=   s        r'   _writelineszStreamWriter._writelinesi   s     	ECJD	D D NN,,		 4 4 6,-PQQd%??OOCHHV,-  (r&   c                 h    t        |      ddj                  d      }| j                  ||df       y)z+Write a chunk with proper chunked encoding.x
ascii   
N)rI   encoderV   )r9   rF   chunk_len_pres      r'   _write_chunked_payloadz#StreamWriter._write_chunked_payloadw   s4    u:a.-44W=-89r&   is_eofc                    d| _         | j                  }d| _        t        r|J | j                  s(|r| j	                  ||f       y| j                  |       y|rLt        |      ddj                  d      }|r| j	                  |||df       y| j	                  |||df       y|r| j	                  |df       y| j                  |       y)	zASend buffered headers with payload, coalescing into single write.TNrX   rY   rZ      
0

r[      0

)r8   r7   r   r+   rV   rO   rI   r\   )r9   rF   r_   headers_bufr]   s        r'   _send_headers_with_payloadz'StreamWriter._send_headers_with_payload|   s     !%''  ***||  +u!56  K( "5z!nD188AM  +}eEU!VW  +}eW!MNk<89KK$r&   Ti   )drainLIMITre   rf   c                f  K   | j                   | j                  |       d{    t        |t              r)|j                  t	        |      k7  r|j                  d      }| j                  &| j                  j                  |       d{   }|sy| j                  Ht	        |      }| j                  |k\  r| j                  |z
  | _        n|d| j                   }d| _        |sy| j                  rO| j                  sC| j                  |d       |r.| j                  |kD  rd| _        | j                          d{    y|rb| j                  r| j                  |       n| j!                  |       |r0| j                  |kD  r d| _        | j                          d{    yyyy7 7 7 p7 w)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nbytesrI   castr-   compressr*   r7   r8   rd   rJ   re   r+   r^   rO   )r9   rF   re   rf   	chunk_lens        r'   rM   zStreamWriter.write   s}     *%%e,,,eZ(||s5z)

3>>%..11%88E;;"E
I{{i'"kkI5m, T%:%:++E59))E1#$ jjl""||++E2E"))E1#$ jjl"" 2u = - 9& # #sH   !F1F'A'F1F*B0F1<F-=A!F1F/	F1*F1-F1/F1status_lineheadersr(   c                    K   | j                   | j                  |       d{    t        ||      }d| _        || _        y7 w)zWrite headers to the stream.NF)r6   _serialize_headersr8   r7   )r9   ro   rp   bufs       r'   write_headerszStreamWriter.write_headers   sI        ,''000 g6 %	 1s   !AA Ac                     | j                   r| j                  ryd| _        | j                   }d| _         t        r|J | j                  |       y)z3Force sending buffered headers if not already sent.NT)r7   r8   r   rO   r9   rc   s     r'   send_headerszStreamWriter.send_headers   sL      D$9$9 $'' ***K r&   c                 v   | j                   ry| j                  rp| j                  sdd| _        | j                  }d| _        t        r|J | j                  r| j                  |df       d| _         y| j                  |       d| _         y| j                  r| j                  r| j                  d       d| _         y)z&Indicate that the message is complete.NTrb   )r,   r7   r8   r   r+   rV   rO   rv   s     r'   set_eofzStreamWriter.set_eof   s    99 T%:%:$(D!++K $D"... ||  +|!<= 	 K(
 		 \\d33KK%	r&   c                   K   | j                   ry |r%| j                  | j                  |       d {    | j                  rg }d}|rA| j                  j                  |       d {   x}rt	        |      }|j                  |       | j                  j                         }|t	        |      z  }|j                  |       |sJ | j                  r| j                  sd| _        | j                  }d | _        | j                  r.|ddj                  d      }| j                  ||g|d       n| j                  |g|       | j                          d {    d| _         y | j                  r-|ddj                  d      }| j                  |g|d       n4t	        |      dkD  r| j                  |       n| j                  |d          | j                          d {    d| _         y | j                  r>| j                  s2| j                  |d       | j                          d {    d| _         y | j                  rd|r1| j                  t	        |      ddj                  d      |df       n| j                  d       | j                          d {    d| _         y |r)| j                  |       | j                          d {    d| _         y 7 7 ~7 7 7 7 M7 w)	Nr   TrX   rY   rZ   ra   r   rb   )r,   r5   r-   rm   rI   appendflushr7   r8   r+   r\   rV   re   rO   rd   )r9   rF   rP   
chunks_lencompressed_chunkflush_chunkrc   r]   s           r'   	write_eofzStreamWriter.write_eof  s    99T((4%%e,,, >>"$FJDNN4K4KE4R.RR*R !12
./....0K#k**JMM+&:   )>)>(,%"//$(!<<'1!nD$9$@$@$IM$$$mOfO>NO
 $$k%;F%;<jjl"" 	 ||#-a. 5 < <W E  -!K&!K:J!KLVq  (F1I&**,DI T%:%:++E48**,DI <<  E
1~T*11':ECST L)**,DIKK**,	O - /S0 #    s   0K5K#5K5(K&)C3K5K)BK5)K,*A	K53K/4A/K5#K1$2K5K3K5&K5)K5,K5/K51K53K5c                    K   | j                   }|j                  &|j                  r|j                          d{    yyy7 w)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'   re   zStreamWriter.drainR  sB      >>)h.>.>((*** /?)*s   8AAA)NN)r2   N)deflateN)r&   )%r    r!   r"   r*   r#   r$   r+   boolr,   r-   r   r   asyncioAbstractEventLoop_T_OnChunkSent_T_OnHeadersSentr:   property	Transportr=   r.   rA   strrE   r   rO   r   rV   r^   rd   rM   rt   rw   ry   bytesr   re   r%   r&   r'   r   r   ;   s   FC$JGTD$'+I~$+ )-,0,, '', &	,
 *, 
, (7,,t3 ( ( ,   AENN36:N	N
F t )(6"2 )t ):F :t :
% % % %B /31#1#'+1#;>1#	1#f	 	 );	 		 !6LU LT L\
+r&   r   z[\x00-\x08\x0a-\x1f\x7f]stringr2   c                 F    t         j                  |       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  s,    !((0<1
 	
 Mr&   ro   rp   c                     t        |        d |j                         D        }| dz   dj                  |      z   dz   }|j                  d      S )Nc              3   V   K   | ]!  \  }}t        |      d z   t        |      z    # yw)z: N)r   ).0kvs      r'   	<genexpr>z(_py_serialize_headers.<locals>.<genexpr>o  s&     X1<?T)LO;Xs   ')rY   z

zutf-8)r   itemsrT   r\   )ro   rp   headers_genlines       r'   _py_serialize_headersr   m  sF    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   	bytearrayrS   IS_PY313_BEFORE_313_2IS_PY_BEFORE_312_9rR   r   r   r   r   r   r   compiler   r   r   r   rr   aiohttp._http_writer_http_writer_c_serialize_headersImportErrorr%   r&   r'   <module>r      s   (  	 
	 	 	 " % ' 9 - "
Kw&5)%68KKLF " "c&6&6CC %%
2 '=+=* 
 Aq!Aq! (F8Yt_#<=>H&8%99T?%JKL a+' a+L	 (RZZ(CD    s  5G  E   + 	/'::1  		s   
D" "D*)D*