o
    zsgw                     @   sP  d 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G d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 deZde de fddZ!de dddefddZ"e"Z#zddl$m%Z% e%j#Z&ese&Z#W dS W dS  e'y   Y dS w )z"Http related parsers and protocol.    N)Any	AwaitableCallableIterableList
NamedTupleOptionalUnion)CIMultiDict   )AbstractStreamWriter)BaseProtocol)ClientConnectionResetError)ZLibCompressor)NO_EXTENSIONS)StreamWriterHttpVersionHttpVersion10HttpVersion11c                   @   s   e Zd ZU eed< eed< dS )r   majorminorN)__name__
__module____qualname__int__annotations__ r   r   O/var/www/html/minecraft/env/lib/python3.10/site-packages/aiohttp/http_writer.pyr      s   
 r   CIMultiDict[str]c                   @   sZ  e Zd ZU dZee ed< dZeed< dZ	eed< dZ
ee ed< 		d2dedejd	ed
eddf
ddZedeej fddZedefddZd3ddZdejfdededdfddZdeeeef ddfddZde e ddfddZ!dd d!deeeef d"ed#eddfd$d%Z"d&ed'd(ddfd)d*Z#d3d+d,Z$d4deddfd.d/Z%d3d0d1Z&dS )5r   NlengthFchunked_eof	_compressprotocolloopon_chunk_senton_headers_sentreturnc                 C   s   || _ || _|| _|| _d S N)	_protocolr$   _on_chunk_sent_on_headers_sent)selfr#   r$   r%   r&   r   r   r   __init__/   s   
zStreamWriter.__init__c                 C   s   | j jS r(   )r)   	transportr,   r   r   r   r.   ;   s   zStreamWriter.transportc                 C   s   | j S r(   )r)   r/   r   r   r   r#   ?   s   zStreamWriter.protocolc                 C   s
   d| _ d S )NT)r    r/   r   r   r   enable_chunkingC   s   
zStreamWriter.enable_chunkingdeflateencodingstrategyc                 C   s   t ||d| _d S )N)r2   r3   )r   r"   )r,   r2   r3   r   r   r   enable_compressionF   s   zStreamWriter.enable_compressionchunkc                 C   sR   t |}|  j|7  _|  j|7  _| jj}|d u s| r"td|| d S )N!Cannot write to closing transport)lenbuffer_sizeoutput_sizer)   r.   
is_closingr   write)r,   r5   sizer.   r   r   r   _writeK   s   zStreamWriter._writechunksc                 C   sj   d}|D ]}|t |7 }q|  j|7  _|  j|7  _| jj}|d u s'| r+td|d| d S )Nr   r6       )	r7   r8   r9   r)   r.   r:   r   r;   join)r,   r>   r<   r5   r.   r   r   r   _writelinesT   s   zStreamWriter._writelinesTi   )drainLIMITrB   rC   c                   s  | j dur|  |I dH  t|tr|jt|kr|d}| jdur1| j|I dH }|s1dS | jdurTt|}| j|krF| j| | _n|d| j }d| _|sTdS |r| j	rk| 
t|ddd|df n| | | j|kr|rd| _|  I dH  dS dS dS dS )zWrites 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   x
asciis   
)r*   
isinstance
memoryviewnbytesr7   castr"   compressr   r    rA   encoder=   r8   rB   )r,   r5   rB   rC   	chunk_lenr   r   r   r;   _   s:   






zStreamWriter.writestatus_lineheadersr   c                    s4   | j dur|  |I dH  t||}| | dS )z*Write request/response status and headers.N)r+   _serialize_headersr=   )r,   rO   rP   bufr   r   r   write_headers   s
   

zStreamWriter.write_headersc                 C   s
   d| _ dS )z&Indicate that the message is complete.TN)r!   r/   r   r   r   set_eof   s   
zStreamWriter.set_eofr?   c                    sH  | j rd S |r| jd ur| |I d H  | jrrg }d}|r2| j|I d H  }r2t|}|| | j }|t|7 }|| |sFJ | jr^|ddd}| 	|g|dR  n:t|dkrj| 	| n.| 
|d  n&| jr|rt|ddd}| 	||df n| 
d n|r| 
| |  I d H  d| _ d S )	Nr   rE   rF   rG   s   
0

r   s   0

T)r!   r*   r"   rL   r7   appendflushr    rM   rA   r=   rB   )r,   r5   r>   
chunks_lencompressed_chunkflush_chunkchunk_len_prer   r   r   	write_eof   s<   




zStreamWriter.write_eofc                    s2   | j }|jdur|jr| I dH  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)r)   r.   _paused_drain_helper)r,   r#   r   r   r   rB      s
   zStreamWriter.drain)NN)r'   N)r?   )'r   r   r   r   r   r   r   r    boolr!   r"   r   r   asyncioAbstractEventLoop_T_OnChunkSent_T_OnHeadersSentr-   property	Transportr.   r#   r0   zlibZ_DEFAULT_STRATEGYstrr4   r	   bytes	bytearrayrI   r=   r   rA   r;   rS   rT   r[   rB   r   r   r   r   r   (   sl   
 


	
0

'r   stringr'   c                 C   s   d| v sd| v rt d| S )N
zRNewline or carriage return detected in headers. Potential header injection attack.)
ValueError)rj   r   r   r   _safe_header   s
   rn   rO   rP   c                 C   s2   dd |  D }| d d| d }|dS )Nc                 s   s(    | ]\}}t |d  t | V  qdS )z: N)rn   ).0kvr   r   r   	<genexpr>   s   & z(_py_serialize_headers.<locals>.<genexpr>rF   z

zutf-8)itemsr@   rM   )rO   rP   headers_genliner   r   r   _py_serialize_headers   s   
rv   )(__doc__r_   re   typingr   r   r   r   r   r   r   r	   	multidictr
   abcr   base_protocolr   client_exceptionsr   compression_utilsr   helpersr   __all__r   r   r   rh   ra   rb   r   rg   rn   rv   rQ   aiohttp._http_writer_http_writer_c_serialize_headersImportErrorr   r   r   r   <module>   s<    (

 +	
