o
    çûõj³Â  ã                   @   s²  U 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mZ d dlm	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mZmZ d dlmZ dd	lmZ dd
lmZ ddlmZmZm Z m!Z!m"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-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5 ddl6m7Z7m8Z8m9Z9 ddl:m;Z;m<Z< ddl=m>Z> er¯ddl?m@Z@ dZAed ZBeCejDƒZEeeCeF  eGd< e Hd¡ZIeeF eGd< e JdeI› d�¡ZKee	eF  eGd< e JdejL¡ZMee	eF  eGd< e JdejL¡ZNee	eF  eGd< e Jd¡ZOee	eP  eGd< e Jd ¡ZQee	eF  eGd!< e Jd"¡ZRee	eF  eGd#< d$eFd%eSfd&d'„ZTeUh d(£ƒZVeeUeF  eGd)< G d*d+„ d+eƒZWG d,d-„ d-eƒZXed.eWeXƒZYG d/d0„ d0eƒZZG d1d2„ d2eƒZ[G d3d4„ d4eƒZ\G d5d6„ d6ƒZ]d7eeF d%eSfd8d9„Z^G d:d;„ d;e j_eeY ƒZ`G d<d=„ d=e`eW ƒZaG d>d?„ d?e`eX ƒZbG d@dA„ dAƒZcG dBdC„ dCƒZdeaZeebZfeWZgeXZhze)�sËddDlimaZambZbmWZWmXZX eaZjebZkeWZleXZmW dS W dS  en�yØ   Y dS w )Eé    N)Úsuppress)ÚIntEnum)ÚPattern)ÚTYPE_CHECKINGÚAnyÚClassVarÚFinalÚGenericÚLiteralÚ
NamedTupleÚTypeVar)ÚCIMultiDictÚCIMultiDictProxyÚistr)ÚURLé   )Úhdrs)ÚBaseProtocol)Ú
HAS_BROTLIÚHAS_ZSTDÚBrotliDecompressorÚZLibDecompressorÚZSTDDecompressor)Ú_EXC_SENTINELÚDEBUGÚDEFAULT_CHUNK_SIZEÚEMPTY_BODY_METHODSÚEMPTY_BODY_STATUS_CODESÚNO_EXTENSIONSÚBaseTimerContextÚset_exception)	ÚBadHttpMessageÚBadHttpMethodÚBadStatusLineÚContentEncodingErrorÚContentLengthErrorÚInvalidHeaderÚInvalidURLErrorÚLineTooLongÚTransferEncodingError)ÚHttpVersionÚHttpVersion10ÚHttpVersion11)ÚEMPTY_PAYLOADÚStreamReader)Ú
RawHeaders)ÚResponseHandler)ÚHeadersParserÚ
HttpParserÚHttpRequestParserÚHttpResponseParserÚRawRequestMessageÚRawResponseMessage)ó   
ó   
ÚASCIISETz!#$%&'*+-.^_`|~Ú_TCHAR_SPECIALSz
[0-9A-Za-zz]+ÚTOKENREzHTTP/(\d)\.(\d)ÚVERSREz\d+ÚDIGITSs   [0-9a-fA-F]+Ú	HEXDIGITSz[\x00-\x08\x0a-\x1f\x7f]Ú_FIELD_VALUE_FORBIDDEN_CTL_REz[\x00-\x1f\x7f]Ú_TARGET_FORBIDDEN_CTL_REÚtargetÚreturnc                 C   s.   |   d¡d }|dd… dko|dd… dvS )a  Tell if an absolute-form request target has "//" and a non-empty authority.

    RFC 9110 section 4.2 requires a host for http and https. yarl's default
    WHATWG mode reads a host from "http:host/p" or "http:///host/p", so the
    target is checked before it is parsed.
    ú:é   Nz//é   )Ú ú/ú?ú#)Ú	partition)rA   Úrest© rL   úF/opt/steambot/venv/lib/python3.10/site-packages/aiohttp/http_parser.pyÚ_has_authority\   s    rN   >
   ú
user-agentúcontent-typeúmax-forwardsúcontent-rangeúcontent-lengthúcontent-locationútransfer-encodingÚetagÚhostÚserverÚSINGLETON_HEADERSc                   @   sb   e Zd ZU eed< eed< eed< ded< eed< eed< edB ed	< eed
< eed< eed< dS )r5   ÚmethodÚpathÚversionúCIMultiDictProxy[str]ÚheadersÚraw_headersÚshould_closeNÚcompressionÚupgradeÚchunkedÚurl)	Ú__name__Ú
__module__Ú__qualname__ÚstrÚ__annotations__r*   r/   Úboolr   rL   rL   rL   rM   r5   |   s   
 r5   c                   @   s^   e Zd ZU eed< eed< eed< ee ed< eed< e	ed< edB ed< e	ed	< e	ed
< dS )r6   r\   ÚcodeÚreasonr^   r_   r`   Nra   rb   rc   )
re   rf   rg   r*   ri   Úintrh   r   r/   rj   rL   rL   rL   rM   r6   ‰   s   
 r6   Ú_MsgTc                   @   s   e Zd ZdZdZdZdS )ÚPayloadStater   r   rD   N)re   rf   rg   ÚPAYLOAD_COMPLETEÚPAYLOAD_NEEDS_INPUTÚPAYLOAD_HAS_PENDING_INPUTrL   rL   rL   rM   ro   ˜   s    ro   c                   @   s   e Zd ZdZdZdZdZdS )Ú
ParseStater   r   rD   rE   N)re   rf   rg   Ú
PARSE_NONEÚPARSE_LENGTHÚPARSE_CHUNKEDÚPARSE_UNTIL_EOFrL   rL   rL   rM   rs   ž   s
    rs   c                   @   s    e Zd ZdZdZdZdZdZdS )Ú
ChunkStater   r   rD   rE   é   N)re   rf   rg   ÚPARSE_CHUNKED_SIZEÚPARSE_CHUNKED_CHUNKÚPARSE_CHUNKED_CHUNK_EOFÚPARSE_MAYBE_TRAILERSÚPARSE_TRAILERSrL   rL   rL   rM   rx   ¦   s    rx   c                   @   sR   e Zd Z				ddededededd	f
d
d„Zdee dede	f fdd„Z
d	S )r1   éþ  é €  FÚmax_line_sizeÚmax_headersÚmax_field_sizeÚlaxrB   Nc                 C   s   || _ || _|| _|| _d S ©N)r�   r‚   rƒ   Ú_lax)Úselfr�   r‚   rƒ   r„   rL   rL   rM   Ú__init__¯   s   
zHeadersParser.__init__Úlinesr]   c                 C   s  t ƒ }g }d}|| }t|ƒ}|�rz
| dd¡\}}W n ty(   t|ƒd ‚w t|ƒdkr3t|ƒ‚|d |d hddh@ rCt|ƒ‚| d¡}| dd	¡}	t |	¡sWt|ƒ‚|d7 }|| }| j	oi|oi|d d
v }
|
r¹t|ƒ}|g}|
r´|t|ƒ7 }|| j
kr•|d d |¡ }t|d d… d | j
ƒ‚| |¡ |d7 }||k r¯|| }|r®|d d
v }
nd}n|
sud |¡}| d¡}| dd	¡}| j	rØd|v sÓd|v sÓd|v r×t|ƒ‚n	t |¡rát|ƒ‚| j	sö|	|v rö|	 ¡ tv rötd|	› d�ƒ‚| |	|¡ | ||f¡ |st|ƒt|ƒfS )Nr   ó   :r   éÿÿÿÿé    é	   s    	úutf-8Úsurrogateescape)rŒ   r�   s   : ó    éd   ó   ...Ú
úú zDuplicate 'z' header found.)r   ÚlenÚsplitÚ
ValueErrorr&   ÚlstripÚdecoder;   Ú	fullmatchr†   rƒ   Újoinr(   ÚappendÚstripr?   ÚsearchÚlowerrY   r!   Úaddr   Útuple)r‡   r‰   r^   r_   Ú	lines_idxÚlineÚ
line_countÚbnameÚbvalueÚnameÚcontinuationÚheader_lengthÚ
bvalue_lstÚheader_lineÚvaluerL   rL   rM   Úparse_headers»   sr   
ÿ


ÿ
€ï

ÿ
ÁAzHeadersParser.parse_headers)r   r€   r   F)re   rf   rg   rm   rj   rˆ   ÚlistÚbytesr¢   r/   r®   rL   rL   rL   rM   r1   ®   s*    ûþýüû
úÿ
þr1   r^   c                 C   s"   |   tjd¡}| ¡ o| ¡ dv S )z)Check if the upgrade header is supported.rF   >   ÚtcpÚ	websocket)Úgetr   ÚUPGRADEÚisasciir    )r^   ÚurL   rL   rM   Ú_is_supported_upgrade
  s   r·   c                   @   sˆ  e Zd ZU dZee ed< 														d6d	edB d
ej	dB de
de
de
de
dedB de
dB dedB dee dB dededede
ddfdd„Zejdee defdd„ƒZejdedefdd„ƒZd7d d!„Zd7d"d#„ZdedB fd$d%„Zd&d'ejejejfd(ed)ed*ed+ed,ed-ede ee ee!f  eef fd.d/„Z"dee de d0e#edB edB eef fd1d2„Z$d3eddfd4d5„Z%dS )8r2   Fr„   Né   r   é€   Tr   ÚprotocolÚloopÚlimitr�   r‚   rƒ   Útimerrk   rZ   Úpayload_exceptionÚresponse_with_bodyÚread_until_eofÚauto_decompressÚmax_msg_queue_sizerB   c                 C   s    || _ || _|| _|| _|| _|| _|| _|| _|	| _|
| _|| _	|| _
g | _d| _d| _d| _d | _d | _d| _|| _|| _t|||| jƒ| _|| _d| _d S )Nr�   Fr   )rº   r»   r�   r‚   rƒ   r½   rk   rZ   r¾   r¿   rÀ   Ú_linesÚ_tailÚ	_upgradedÚ_pending_upgradeÚ_payloadÚ_payload_parserÚ_payload_has_more_dataÚ_auto_decompressÚ_limitr1   r„   Ú_headers_parserÚ_max_msg_queue_sizeÚ_msg_in_flight)r‡   rº   r»   r¼   r�   r‚   rƒ   r½   rk   rZ   r¾   r¿   rÀ   rÁ   rÂ   rL   rL   rM   rˆ     s4   
ÿ
zHttpParser.__init__r‰   c                 C   ó   d S r…   rL   )r‡   r‰   rL   rL   rM   Úparse_messageB  ó   zHttpParser.parse_messageÚtec                 C   rÏ   r…   rL   ©r‡   rÒ   rL   rL   rM   Ú_is_chunked_teE  rÑ   zHttpParser._is_chunked_tec                 C   s   | j d usJ ‚| j  ¡  d S r…   )rÈ   Úpause_reading©r‡   rL   rL   rM   rÕ   H  s   zHttpParser.pause_readingc                 C   s    | j dkr|  j d8  _ dS dS )z;Protocol drained a queued message; free a slot for parsing.r   r   N)rÎ   rÖ   rL   rL   rM   Úmessage_consumedL  s   
ÿzHttpParser.message_consumedc                 C   s’   | j d ur| j  ¡  | j jrd | _ d S | jr| j | j¡ | jrG| jd dkr-| j d¡ ttƒ� |  | j¡W  d   ƒ S 1 sBw   Y  d S )Nr‹   z
r�   )	rÈ   Úfeed_eofÚdonerÄ   rÃ   r�   r   Ú	ExceptionrÐ   rÖ   rL   rL   rM   rØ   Q  s   

ø

 ÿzHttpParser.feed_eofr7   r�   ÚdataÚSEPÚEMPTYÚCONTENT_LENGTHÚMETH_CONNECTÚSEC_WEBSOCKET_KEY1c                    sJ  g }| j r| j | d}| _ t|ƒ}d}	| j}
| j}d}|	|k s$| j�rŽ| jd u �r | j�s | jrB| j| jkrB||	d … | _ |}�nL| 	||	¡}||	krV| j
sV|t|ƒ }	q||	k�rÖ|ratdƒ‚||	|… }|dkrp| d¡}t|ƒ|kr�t|d d… d |ƒ‚| j
 |¡ | j}t| j
ƒ| jkr–td	ƒ‚|t|ƒ }	| j
d
 |k�rÕ| jt| j
ƒ }z|  | j
¡‰W | j
 ¡  n| j
 ¡  w dtd B f‡ ‡fdd„}|ƒ }|ˆjv rØt|ƒ‚ˆjoßtˆjƒ}tˆd| jƒ}tˆddƒ}| jd usôJ ‚|tv �pt| j�o| jtv ƒ}|�sG|d u�r|dk�sˆj�rGt| j| j |
| j!d�}t"||ˆj|ˆj#| j$| j%| j&| j'| j(| j| j|| j!d�}|j)�sF|| _|| _*ny||k�rzt+ˆt,ƒ�sTJ ‚t| j| j |
| j!d�}d| _t"|ˆjˆj#| j&| j'| j(| j| j|| j!d�
| _nF|�sµ|d u �rµ| j-�rµt| j| j |
| j!d�}t"||ˆj|ˆj#| j$| j%| j&| j'| j(| j| j|| j!d�}|j)�s´|| _n|�r¾d| _t.}nt.}| ˆ|f¡ | j�rÒ|  jd7  _ˆj/}n±||	d … | _ d| j v �rçtdƒ‚t| j ƒ| jk�rýt| j d d… d | jƒ‚|}nŽ| jd u �r| j�r| j
�rJ ‚n}| j
�rJ ‚| jd u�sJ ‚z| j 0||	d … |¡\}}W n8 t1�yf } z+|}| j2d u�rF|  2t3|ƒ¡}t4| jj5||ƒ t6j7}d}t+|tt8fƒ�r\‚ W Y d }~nd }~ww |t6j9k| _|t6j7u�rtnd}	t|ƒ}d | _| j*�r‡d| _d| _*|	|k s$| js$|�r�|	|k �r�||	d … }n|}|| j|fS )Nr�   r   FzData after `Connection: close`r8   ó   r‘   r’   zToo many headers receivedr‹   rB   c                     s2   ˆj  ˆ ¡} | d u rd S t | ¡stˆ ƒ‚t| ƒS r…   )r^   r³   r=   r›   r&   rm   )Ú
length_hdr©rÞ   ÚmsgrL   rM   Úget_content_length¨  s   
z0HttpParser.feed_data.<locals>.get_content_lengthrZ   rk   )r½   r»   r¼   )Úlengthrc   rZ   ra   rk   r¿   rÁ   r„   Úheaders_parserr�   rƒ   Úmax_trailersr¼   T)	rZ   ra   rÁ   r„   rç   r�   rƒ   rè   r¼   r   zBad line ending, expected CRLF):rÄ   r–   r»   r�   rÉ   rÈ   rÅ   rÍ   rÎ   ÚfindrÃ   r!   Úrstripr(   r�   rƒ   r‚   rÐ   Úclearrm   r^   r&   rb   r·   ÚgetattrrZ   rº   r   rj   r   rc   r.   r½   rË   ÚHttpPayloadParserra   rk   r¿   rÊ   r„   rÌ   rÙ   rÆ   Ú
isinstancer5   rÀ   r-   r`   Ú	feed_datarÚ   r¾   rh   r    Úpayloadro   rp   r)   rr   )r‡   rÛ   rÜ   rÝ   rÞ   rß   rà   ÚmessagesÚdata_lenÚ	start_posr»   Úmax_line_lengthr`   Úposr¤   rè   rå   ræ   ÚupgradedrZ   rk   Ú
empty_bodyrð   Úpayload_parserÚpayload_stateÚunderlying_excÚreraised_excrL   rã   rM   rï   b  sp  
ÿ


ÿüò€
ü
öüò€€ÿýÿý€óÿ �˜ jzHttpParser.feed_datar]   c                 C   sà   | j  |¡\}}d}d}d}d}| tjd¡}|r9dd„ |D ƒ}	d|	v r'd}nd|	v r-d}d	|	v r9| tj¡r9d}| tjd
¡}
|
 ¡ rN|
 	¡ }
|
dv rN|
}| tj
¡}|durh|  |¡r_d}tj|v rhtdƒ‚||||||fS )z­Parses RFC 5322 headers from a stream.

        Line continuations are supported. Returns list of header name
        and value pairs. Header name is in upper case.
        NFrL   c                 S   s:   h | ]}d d„ |  d¡D ƒD ]}|r| ¡ r| ¡ ’qqS )c                 s   s   � | ]}|  d ¡V  qdS )ú 	N)rž   )Ú.0ÚpartrL   rL   rM   Ú	<genexpr>~  s   € z5HttpParser.parse_headers.<locals>.<setcomp>.<genexpr>ú,)r—   rµ   r    )rý   Ú
conn_valueÚtokenrL   rL   rM   Ú	<setcomp>{  s    ýüüÿz+HttpParser.parse_headers.<locals>.<setcomp>ÚcloseTz
keep-aliverb   rF   >   ÚbrÚgzipÚzstdÚdeflatez6Transfer-Encoding can't be present with Content-Length)rÌ   r®   Úgetallr   Ú
CONNECTIONr³   r´   ÚCONTENT_ENCODINGrµ   r    ÚTRANSFER_ENCODINGrÔ   rÞ   r!   )r‡   r‰   r^   r_   Ú
close_connÚencodingrb   rc   Úconn_valuesÚconn_tokensÚencrÒ   rL   rL   rM   r®   g  s<   
þ

ÿzHttpParser.parse_headersÚvalc                 C   s
   || _ dS )zZSet connection upgraded (to websocket) mode.

        :param bool val: new state.
        N)rÅ   )r‡   r  rL   rL   rM   Úset_upgradedŸ  s   
zHttpParser.set_upgraded)NNr¸   r   r¹   r   NNNNTFTr   ©rB   N)&re   rf   rg   r„   r   rj   ri   r   ÚasyncioÚAbstractEventLooprm   r   rh   ÚtypeÚBaseExceptionrˆ   ÚabcÚabstractmethodr¯   r°   rn   rÐ   rÔ   rÕ   r×   rØ   r   rÞ   rß   rà   Ú_SEPr   r¢   r.   rï   r/   r®   r  rL   rL   rL   rM   r2     s¨   
 ñþýüûúùø	÷
ö
õôóòñ
ð.

ùþýüûúù
ø  ÿÿ
þ8r2   c                   @   s8   e Zd ZdZdee defdd„Zdede	fdd„Z
d	S )
r3   z¥Read request status line.

    Exception .http_exceptions.BadStatusLine
    could be raised in case of any errors in status line.
    Returns RawRequestMessage.
    r‰   rB   c                 C   sb  |d   dd¡}z|jddd�\}}}W n ty    t|ƒd ‚w t |¡s*t|ƒ‚| ¡ }t |¡r>t	|j
dd�  d¡ƒ‚t |¡}|d u rKt|ƒ‚tt| d	¡ƒt| d¡ƒƒ}|d
kr�ztj|dd�}|j}	W n ty|   t	|j
dd�  d¡ƒ‚w |	d u rŒt	|j
dd�  d¡ƒ‚nj| d¡r¬| d¡\}
}}|
 d¡\}
}}tj|
||dd�}nK|dkr»|dkr»t|dd�}n<t|ƒsÊt	|j
dd�  d¡ƒ‚zt|dd�}|j}	W n tyç   t	|j
dd�  d¡ƒ‚w |	d u r÷t	|j
dd�  d¡ƒ‚|  |d	d … ¡\}}}}}}|tk�rtj|v�rtdƒ‚|d u �r$|tk�r"d}nd}t||||||||||ƒ
S )Nr   rŽ   r�   ú rD   ©Úmaxsplit)ÚerrorsÚlatin1r   ÚCONNECTT)Ú	authorityÚencodedrG   rI   rH   )r[   Úquery_stringÚfragmentr#  Ú*ÚOPTIONS)r#  z!Missing 'Host' header in request.F)rš   r—   r˜   r"   r;   r›   Úupperr@   rŸ   r'   Úencoder<   r#   r*   rm   Úgroupr   ÚbuildÚraw_hostÚ
startswithrJ   rN   r®   r,   r   ÚHOSTr!   r+   r5   )r‡   r‰   r¤   rZ   r[   r\   ÚmatchÚ	version_ord   rW   Ú	path_partÚ_hash_separatorÚurl_fragmentÚ_question_mark_separatorÚqs_partr^   r_   r  ra   rb   rc   rL   rL   rM   rÐ   ¯  s¨   
ÿ

ÿ

ÿþÿÿ
üÿ
ÿþÿù

özHttpRequestParser.parse_messagerÒ   c                 C   s8   |j ddd�d  d¡}| ¡ r| ¡ dkrdS tdƒ‚)	Nr   r   r  r‹   rü   rc   Tz'Request has invalid `Transfer-Encoding`)Úrsplitrž   rµ   r    r!   rÓ   rL   rL   rM   rÔ     s   z HttpRequestParser._is_chunked_teN)re   rf   rg   Ú__doc__r¯   r°   r5   rÐ   rh   rj   rÔ   rL   rL   rL   rM   r3   §  s    pr3   c                       sŒ   e Zd ZU dZded< e Z	ddededB de	de	d	e
ee
eef  eef f
‡ fd
d„Zdee d	efdd„Zded	efdd„Z‡  ZS )r4   z”Read response status line and headers.

    BadStatusLine could be raised in case of any errors in status line.
    Returns RawResponseMessage.
    r0   rº   NrÛ   rÜ   ÚargsÚkwargsrB   c                    s0   |d u r
t rdnd}tƒ j||g|¢R i |¤ŽS )Nr7   r8   )r   Úsuperrï   )r‡   rÛ   rÜ   r8  r9  ©Ú	__class__rL   rM   rï   4  s   zHttpResponseParser.feed_datar‰   c              
   C   sb  |d   dd¡}z
|jdd�\}}W n ty   t|ƒd ‚w z
|jdd�\}}W n ty8   | ¡ }d}Y nw t |¡}|d u rFt|ƒ‚tt| 	d¡ƒt| 	d¡ƒƒ}t
|ƒdks`t |¡sdt|ƒ‚t|ƒ}|  |dd … ¡\}	}
}}}}|d u r£|tkr‚d	}n!d
|  krŒdk s‘n |dv r”d}ntj|	v sžtj|	v r¡d}nd	}t||| ¡ |	|
||||ƒ	S )Nr   rŽ   r�   r   r  rF   rD   rE   Tr‘   éÈ   >   é0  éÌ   F)rš   r—   r˜   r#   rž   r<   r›   r*   rm   r*  r–   r=   r®   r+   r   rÞ   r  r6   )r‡   r‰   r¤   r\   Ústatusrl   r/  r0  Ústatus_ir^   r_   r  ra   rb   rc   rL   rL   rM   rÐ   ?  s\   
ÿþ

ù÷z HttpResponseParser.parse_messagerÒ   c                 C   s    |j ddd�d  d¡ ¡ dkS )Nr   r   r  r‹   rü   rc   )r6  rž   r    rÓ   rL   rL   rM   rÔ   y  s    z!HttpResponseParser._is_chunked_ter…   )re   rf   rg   r7  ri   r   r„   r°   r  r   r¢   r¯   r6   r.   rj   rï   rÐ   rh   rÔ   Ú__classcell__rL   rL   r;  rM   r4   (  s$   
 ýþýüûú:r4   c                    @   sº   e Zd Z								d#dddedœdededB d	ed
edB dedB dedB dededededededededdfdd„Z	d$dd„Z
d$dd„Z	d%deded edeeef fd!d"„ZdS )&rí   NFTr   r¹   )r�   rƒ   rè   r¼   rð   ræ   rc   ra   rk   rZ   r¿   rÁ   r„   rç   r�   rƒ   rè   r¼   rB   c
                C   sî   d| _ d| _tj| _tj| _d| _d| _	|| _
|	| _|
| _|| _|| _|| _d| _g | _d| _d| _|rA|rA| j
rAt|||d�}n|}|sQtj| _| ¡  d| _n!|rXtj| _n|d urrtj| _|| _ || _| j dkrr| ¡  d| _|| _d S )Nr   Fr�   )Úmax_decompress_sizeT)Ú_lengthÚ_pausedrs   rw   Ú_typerx   rz   Ú_chunkÚ_chunk_sizeÚ_chunk_tailrÊ   r†   rÌ   Ú_max_line_sizeÚ_max_field_sizeÚ_max_trailersÚ_more_data_availableÚ_trailer_linesrÙ   Ú_eof_pendingÚDeflateBufferrt   rØ   rv   ru   Ú_length_expectedrð   )r‡   rð   ræ   rc   ra   rk   rZ   r¿   rÁ   r„   rç   r�   rƒ   rè   r¼   Úreal_payloadrL   rL   rM   rˆ     sF   ÿ


zHttpPayloadParser.__init__c                 C   s
   d| _ d S )NT)rE  rÖ   rL   rL   rM   rÕ   ¼  s   
zHttpPayloadParser.pause_readingc                 C   sæ   | j tjkr,d| _| jr| jrd| _d S | j dd¡| _| js| j ¡  d| _	d| _d S | j tj
krg| jrG| j| j }td|› d| j› d�ƒ‚| jr]| jrRd| _d S | j dd¡| _| jsJ| j ¡  d| _	d S | j tjkrqtdƒ‚d S )	NTFr�   r   z;Not enough data to satisfy content length header (received z of z bytes).z2Not enough data to satisfy transfer length header.)rF  rs   rw   rO  rM  rE  rð   rï   rØ   rÙ   ru   rD  rQ  r%   rv   r)   )r‡   ÚreceivedrL   rL   rM   rØ   ¿  sD   ü

ÿÿÿü

ÿÿzHttpPayloadParser.feed_eofr7   ó   ;ÚchunkrÜ   Ú	CHUNK_EXTc                 C   sÐ  | j tjkr_| jr| j| }d| _| j}t|t|ƒ dƒ| _| j |d|… |¡| _	| j	rJ| j
r?d| _
||d… | _tjdfS | j dd¡| _	| j	s-| jdkr]| j ¡  tj||d… fS �n„| j tjk�r¢| jr–| jtjkrŽ| j}| jtjkr{| j}t| jƒ|krŽt| jdd… d |ƒ‚| j| }d| _|sœ| j	�r¡| jtjk�rb| |¡}|dk�rI|| jkr¾t|dd… d | jƒ‚| |d|¡}|dkré|d|… }d|||…  }	v rètd|	›�ƒ}
t| j|
ƒ |
‚n|d|… }| jrö| ¡ }t t|¡�st|d|…   d	d
¡ƒ}
t| j|
ƒ |
‚t!t"|ƒdƒ}||t|ƒ d… }|dk�r<tj| _| j�r;| #d¡�r;|dd… }n&tj| _|| _$| j %¡  nd|v �rZtdƒ}
t| j|
ƒ |
‚|| _tj&dfS | jtjk�r±| j
�rxd| _
|| _tjdfS | j$}t|t|ƒ dƒ| _$| j |d|… |¡| _	||d… }| j	�rœq–| j$�r¨d| _
tj&dfS tj'| _| j (¡  | jtj'k�r| j�rÈ| #d¡�rÈ|dd… }|dt|ƒ… |k�rà|t|ƒd… }tj| _n(t|ƒt|ƒk�sô||dt|ƒ… k�r tdƒ}
t| j|
ƒ |
‚|| _tj&dfS | jtjk�rœ| |¡}|dk �r2d|v �r*tdƒ}
t| j|
ƒ |
‚|| _tj&dfS |d|… }||t|ƒ d… }|dk�rL| )d¡}t|ƒ| jk�r`t|dd… d | jƒ‚| j* +|¡ t| j*ƒ| j,k�rst-dƒ‚| j*d dk�rœz| j. /| j*¡\}}W | j* 0¡  n| j* 0¡  w | j ¡  tj|fS |sœ| j	sœnA| j tj1k�rã| j |t|ƒ¡| _	| j	�rÏ| j
�rÃd| _
tjdfS | j dd¡| _	| j	�s·| j2�rã| j ¡  d| _3d| _2tjdfS tj&dfS )aÇ  Receive a chunk of data to process.

        Return:
            PayloadState - The current state of payload processing.
                           This function may be called with empty bytes after returning
                           PAYLOAD_HAS_PENDING_INPUT to continue processing after a pause.
            bytes - If payload is complete, this is the unconsumed bytes intended for the
                    next message/payload, b"" otherwise.
        r�   r   NFr‘   r’   r8   z"Unexpected LF in chunk-extension: Úasciir�   é   rá   r   z)Bad chunk-size line ending, expected CRLFz3Chunk size mismatch: expected CRLF after chunk dataz&Bad trailer line ending, expected CRLFzToo many trailers receivedr‹   T)4rF  rs   ru   rI  rD  Úmaxr–   rð   rï   rM  rE  ro   rr   rØ   rp   rv   rG  rx   r{   rJ  r~   rK  r(   rz   ré   r)   r    r†   rž   Úrer›   r>   rš   rm   r°   r-  rH  Úbegin_http_chunk_receivingrq   r|   Úend_http_chunk_receivingrê   rN  r�   rL  r!   rÌ   r®   rë   rw   rO  rÙ   )r‡   rU  rÜ   rV  Úrequiredrô   rõ   ÚiÚsize_bÚextÚexcÚsizer¤   ÚtrailersÚraw_trailersrL   rL   rM   rï   Þ  s2  
ÿ
û

þÿ



ÿûÿ
€
ÿ

ÿ


(ÿ



ÿ



ÿ

 �
ÿ€ 
ü


zHttpPayloadParser.feed_data)NFNNNTTFr  )r7   rT  )re   rf   rg   r   r.   rm   rj   rh   r1   rˆ   rÕ   rØ   r°   r  r¢   ro   rï   rL   rL   rL   rM   rí   ~  sr    öðþýüûúùø	÷
öôóòñð
ï
=
 ÿÿÿÿ
þrí   c                	   @   sŠ   e Zd ZU dZeed< efdededB de	ddfdd	„Z
efd
ededdfdd„Zdede	defdd„Zddd„Zddd„Zddd„ZdS )rP  zDDeflateStream decompress stream and feed data into specified stream.ÚdecompressorÚoutr  NrC  rB   c                 C   sv   || _ d| _| j|_|| _d| _|  |dkr!tstdƒ‚tƒ | _n|dkr0t	s+tdƒ‚t
ƒ | _nt|d�| _|| _d S )Nr   Fr  zECan not decode content-encoding: brotli (br). Please install `Brotli`r  zRCan not decode content-encoding: zstandard (zstd). Please install `backports.zstd`)r  )rf  rb  Útotal_compressed_bytesr  Ú_started_decodingr   r$   r   re  r   r   r   Ú_max_decompress_size)r‡   rf  r  rC  rL   rL   rM   rˆ   ¨  s(   ÿ
ÿ

zDeflateBuffer.__init__ra  Ú	exc_causec                 C   s   t | j||ƒ d S r…   )r    rf  )r‡   ra  rj  rL   rL   rM   r    È  s   zDeflateBuffer.set_exceptionrU  rb  c                 C   sÄ   |  j |7  _ | j | j_| js)|r)| jdkr&|d d@ dkr&t| jdd�| _d| _| jj}|tj	kr4dnt
| j|ƒ}z
| jj||d�}W n tyR   td| j ƒ‚w |r^| j |t|ƒ¡ | jjS )	Nr  r   é   é   T)r  Úsuppress_deflate_header)Ú
max_lengthz#Can not decode content-encoding: %s)rb  rf  rg  rh  r  r   re  Ú
_low_waterÚsysÚmaxsizerY  ri  Údecompress_syncrÚ   r$   rï   r–   Údata_available)r‡   rU  rb  Ú	low_waterrn  rL   rL   rM   rï   Ï  s*   

ÿÿÿÿzDeflateBuffer.feed_datac                 C   sD   | j  ¡ }|r	J ‚| jdkr| jdkr| j jstdƒ‚| j ¡  d S )Nr   r  )re  Úflushrb  r  Úeofr$   rf  rØ   )r‡   rU  rL   rL   rM   rØ   ñ  s   

zDeflateBuffer.feed_eofc                 C   ó   | j  ¡  d S r…   )rf  r[  rÖ   rL   rL   rM   r[  þ  ó   z(DeflateBuffer.begin_http_chunk_receivingc                 C   rw  r…   )rf  r\  rÖ   rL   rL   rM   r\    rx  z&DeflateBuffer.end_http_chunk_receivingr  )re   rf   rg   r7  r   ri   r   r.   rh   rm   rˆ   r   r  r    r°   rj   rï   rØ   r[  r\  rL   rL   rL   rM   rP  £  s2   
 üþýü
û#ýþý
ü
"
rP  )r3   r4   r5   r6   )or  r  rZ  Ústringrp  Ú
contextlibr   Úenumr   r   Útypingr   r   r   r   r	   r
   r   r   Ú	multidictr   r   r   Úyarlr   rF   r   Úbase_protocolr   Úcompression_utilsr   r   r   r   r   Úhelpersr   r   r   r   r   r   r   r    Úhttp_exceptionsr!   r"   r#   r$   r%   r&   r'   r(   r)   Úhttp_writerr*   r+   r,   Ústreamsr-   r.   Útypedefsr/   Úclient_protor0   Ú__all__r  ÚsetÚ	printabler9   rh   ri   Úescaper:   Úcompiler;   ÚASCIIr<   r=   r>   r°   r?   r@   rj   rN   Ú	frozensetrY   r5   r6   rn   ro   rs   rx   r1   r·   ÚABCr2   r3   r4   rí   rP  ÚHttpRequestParserPyÚHttpResponseParserPyÚRawRequestMessagePyÚRawResponseMessagePyÚ_http_parserÚHttpRequestParserCÚHttpResponseParserCÚRawRequestMessageCÚRawResponseMessageCÚImportErrorrL   rL   rL   rM   Ú<module>   sŽ   
 ((,
		"ÿÿ\    V  'b
õÿ