
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
U
    'â7`=x  ã                   @   sl  d dl Z 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	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 dd
lmZmZmZm Z m!Z!m"Z" ddl#m$Z$m%Z% ddl&m'Z' ddl(m)Z)m*Z* ddl+m,Z, zd dl-Z-dZ.W n e/k
�r&   dZ.Y nX dZ0e1ej2ƒZ3e 4d¡Z5e 4d¡Z6e 4d¡Z7e 8dddddddddddg
¡Z9e 8d dd!d"ddddddg	¡Z:G d#d$„ d$eƒZ;G d%d&„ d&eƒZ<G d'd(„ d(ƒZ=G d)d*„ d*e j>ƒZ?G d+d,„ d,e?ƒZ@G d-d.„ d.e?ƒZAG d/d0„ d0ƒZBG d1d2„ d2ƒZCe@ZDeAZEe9ZFe:ZGz2e�sNdd3lHm@Z@mAZAm9Z9m:Z: e@ZIeAZJe9ZKe:ZLW n e/k
�rf   Y nX dS )4é    N)ÚIntEnum)ÚAnyÚListÚOptionalÚTupleÚTypeÚUnion)ÚCIMultiDictÚCIMultiDictProxyÚistr)ÚURLé   )Úhdrs)ÚBaseProtocol)ÚNO_EXTENSIONSÚBaseTimerContext)ÚBadStatusLineÚContentEncodingErrorÚContentLengthErrorÚInvalidHeaderÚLineTooLongÚTransferEncodingError)ÚHttpVersionÚHttpVersion10)Úinternal_logger)ÚEMPTY_PAYLOADÚStreamReader)Ú
RawHeadersTF)ÚHeadersParserÚ
HttpParserÚHttpRequestParserÚHttpResponseParserÚRawRequestMessageÚRawResponseMessagez[!#$%&'*+\-.^_`|~0-9A-Za-z]+zHTTP/(\d+).(\d+)s'   [\x00-\x1F\x7F()<>@,;:\[\]={} \t\\\\\"]r"   ÚmethodÚpathÚversionÚheadersÚraw_headersZshould_closeÚcompressionÚupgradeÚchunkedZurlr#   ÚcodeÚreasonc                   @   s   e Zd ZdZdZdZdZdS )Ú
ParseStater   r   é   é   N)Ú__name__Ú
__module__Ú__qualname__Ú
PARSE_NONEÚPARSE_LENGTHÚPARSE_CHUNKEDÚPARSE_UNTIL_EOF© r8   r8   úF/opt/alt/python38/lib64/python3.8/site-packages/aiohttp/http_parser.pyr.   [   s   r.   c                   @   s    e Zd ZdZdZdZdZdZdS )Ú
ChunkStater   r   r/   r0   é   N)r1   r2   r3   ÚPARSE_CHUNKED_SIZEÚPARSE_CHUNKED_CHUNKÚPARSE_CHUNKED_CHUNK_EOFÚPARSE_MAYBE_TRAILERSÚPARSE_TRAILERSr8   r8   r8   r9   r:   c   s
   r:   c                   @   s>   e Zd Zdeeeddœdd„Zee edef dœd	d
„Z	dS )r   éþ  é €  N)Úmax_line_sizeÚmax_headersÚmax_field_sizeÚreturnc                 C   s   || _ || _|| _d S ©N)rC   rD   rE   )ÚselfrC   rD   rE   r8   r8   r9   Ú__init__l   s    zHeadersParser.__init__úCIMultiDictProxy[str]©ÚlinesrF   c                 C   sò  t ƒ }g }d}|d }t|ƒ}|�râz| dd¡\}}W n tk
rV   t|ƒd ‚Y nX | d¡}| ¡ }t |¡r|t|ƒ‚t|ƒ| j	kr²t
d | dd¡¡t| j	ƒtt|ƒƒƒ‚t|ƒ}	|d7 }|| }|oØ|d dk}
|
�rv|g}|
�rj|	t|ƒ7 }	|	| j	k�r(t
d	 | dd¡¡t| j	ƒt|	ƒƒ‚| |¡ |d7 }||k �r`|| }|�rh|d dk}
qæd
}�qjqæd
 |¡}n0|	| j	k�r¦t
d	 | dd¡¡t| j	ƒt|	ƒƒ‚| ¡ }| dd¡}| dd¡}| ||¡ | ||f¡ qt|ƒt|ƒfS )Nr   ó   :s    	zrequest header name {}Úutf8Úxmlcharrefreplacer   )é    é	   zrequest header field {}ó    úutf-8Úsurrogateescape)r	   ÚlenÚsplitÚ
ValueErrorr   ÚstripÚlstripÚHDRREÚsearchrE   r   ÚformatÚdecodeÚstrÚappendÚjoinÚaddr
   Útuple)rH   rL   r'   r(   Z	lines_idxÚlineZ
line_countZbnameZbvalueZheader_lengthZcontinuationZ
bvalue_lstÚnameÚvaluer8   r8   r9   Úparse_headersv   sz    


ÿ
û
ÿû


ÿûzHeadersParser.parse_headers)rA   rB   rA   )
r1   r2   r3   ÚintrI   r   Úbytesr   r   rf   r8   r8   r8   r9   r   k   s      üû
þr   c                   @   sô   e Zd Zdee eej eeeeee ee ee	 e
eee  e
e
e
ddœdd	„Zejee ed
œdd„ƒZedœdd„Zddejejejfeeeee	eeee e
ef dœdd„Zee edeee
 ee	 e
e
f d
œdd„Ze
ddœdd„ZdS )r   Né   rA   rB   FT)ÚprotocolÚloopÚlimitrC   rD   rE   Útimerr,   r$   ÚreadallÚpayload_exceptionÚresponse_with_bodyÚread_until_eofÚauto_decompressrF   c                 C   s„   || _ || _|| _|| _|| _|| _|| _|	| _|
| _|| _	|| _
|| _g | _d| _d| _d | _d | _|| _|| _t|||ƒ| _d S )NrR   F)rj   rk   rC   rD   rE   rm   r,   r$   rn   ro   rp   rq   Ú_linesÚ_tailÚ	_upgradedZ_payloadÚ_payload_parserÚ_auto_decompressÚ_limitr   Ú_headers_parser)rH   rj   rk   rl   rC   rD   rE   rm   r,   r$   rn   ro   rp   rq   rr   r8   r8   r9   rI   Ê   s(    zHttpParser.__init__rK   c                 C   s   d S rG   r8   )rH   rL   r8   r8   r9   Úparse_messageñ   s    zHttpParser.parse_message©rF   c                 C   sz   | j d k	r| j  ¡  d | _ nZ| jr0| j | j¡ | jrv| jd dkrP| j d¡ z|  | j¡W S  tk
rt   Y d S X d S )Néÿÿÿÿz
rR   )rv   Úfeed_eofrt   rs   r_   rz   Ú	Exception©rH   r8   r8   r9   r}   õ   s    

zHttpParser.feed_eofó   
rR   )ÚdataÚSEPÚEMPTYÚCONTENT_LENGTHÚMETH_CONNECTÚSEC_WEBSOCKET_KEY1rF   c                 C   s¾  g }| j r| j | d }| _ t|ƒ}d}	| j}
|	|k �r�| jd k�rž| j�sž| ||	¡}||	krp| jsp|d }	q.||	k�r†| j ||	|… ¡ |d }	| jd |k�rœz|  	| j¡}W 5 | j ¡  X |j
 |¡}|d k	�rzt|ƒ}W n tk
�r   t|ƒ‚Y nX |dk �rt|ƒ‚||j
k�r,t|ƒ‚|j| _t|d| jƒ}| jd k	�sRt‚|d k	�rf|dk�sv|j�rÂ|j�sÂt| j| j|
| jd�}t|||j||j| j| j| j| jd�	}|j�sv|| _n´||k�rt| j| j|
| jd�}d| _t||j|jd| jd	�| _nrt|d
dƒdk�rr|d k�rr| j�rrt| j| j|
| jd�}t|||j||j| jd| j| jd�	}|j�sv|| _nt }| ||f¡ n||	d … | _ |}�q�q.| jd k�rÄ| j�rÄ| j�r�t‚�q�q.|�r�|	|k �r�| j�ràt‚| jd k	�sðt‚z| j !||	d … ¡\}}W n` t"k
�rl } z@| j#d k	�rF| jj$ %|  #t&|ƒ¡¡ n| jj$ %|¡ d}d}W 5 d }~X Y nX |�rŽd}	t|ƒ}d | _q.q.�q�q.|�r®|	|k �r®||	d … }n|}|| j|fS )NrR   r   r/   r|   r$   )rm   rk   rl   )Úlengthr+   r$   r)   r,   rn   rp   rr   T)r$   r)   rn   rr   r,   éd   éÇ   )'rt   rU   rk   rv   ru   Úfindrs   r_   Úclearrz   r'   Úgetrg   rW   r   r*   Úgetattrr$   rj   ÚAssertionErrorr+   r   rm   rx   ÚHttpPayloadParserr)   r,   rn   rp   rw   Údonerq   r   Ú	feed_dataÚBaseExceptionro   ÚpayloadÚset_exceptionr^   )rH   r�   r‚   rƒ   r„   r…   r†   ZmessagesZdata_lenZ	start_posrk   ÚposÚmsgr‡   r$   r“   Zpayload_parserÚeofÚexcr8   r8   r9   r‘     s   




ÿÿþýü÷
üû
	ÿþýü÷ÿzHttpParser.feed_datarJ   c                 C   s´   | j  |¡\}}d}d}d}d}| tj¡}|r`| ¡ }	|	dkrFd}n|	dkrTd}n|	dkr`d}| tj¡}
|
r„|
 ¡ }
|
dkr„|
}| tj¡}|r¤d| ¡ kr¤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.
        NFÚcloseTz
keep-aliver*   )ÚgzipÚdeflateÚbrr+   )ry   rf   rŒ   r   Z
CONNECTIONÚlowerZCONTENT_ENCODINGZTRANSFER_ENCODING)rH   rL   r'   r(   Z
close_connÚencodingr*   r+   ZconnÚvÚencZter8   r8   r9   rf   ²  s.    
zHttpParser.parse_headers)ÚvalrF   c                 C   s
   || _ dS )zYSet connection upgraded (to websocket) mode.
        :param bool val: new state.
        N)ru   )rH   r¡   r8   r8   r9   Úset_upgradedÛ  s    zHttpParser.set_upgraded)NNri   rA   rB   rA   NNNFNTFT)r1   r2   r3   r   r   ÚasyncioZAbstractEventLooprg   r   r^   Úboolr   r’   rI   ÚabcÚabstractmethodr   rh   r   rz   r}   r   r„   r…   r†   r   r   r‘   r   rf   r¢   r8   r8   r8   r9   r   É   sn                 ñ
ð'ùø .ÿþ)r   c                   @   s$   e Zd ZdZee edœdd„ZdS )r    z Read request status line. Exception .http_exceptions.BadStatusLine
    could be raised in case of any errors in status line.
    Returns RawRequestMessage.
    rK   c                 C   s\  |d   dd¡}z| d d¡\}}}W n tk
rD   t|ƒd ‚Y nX t|ƒ| jkrntdt| jƒtt|ƒƒƒ‚| d¡\}}}| d¡\}}	}
t	 
|¡s t|ƒ‚zB| d¡rØ|d	d …  d
d¡\}}tt|ƒt|ƒƒ}nt|ƒ‚W n tk
rþ   t|ƒ‚Y nX |  |¡\}}}}}}|d k�r4|tk�r0d}nd}t|||||||||tj||
|dd�ƒ
S )Nr   rS   rT   r/   úStatus line is too longú#ú?zHTTP/é   Ú.r   TF)r%   Zquery_stringZfragmentZencoded)r]   rV   rW   r   rU   rC   r   r^   Ú	partitionÚMETHREÚmatchÚ
startswithr   rg   r~   rf   r   r"   r   Zbuild)rH   rL   rc   r$   r%   r&   Z	path_partZ_hash_separatorZurl_fragmentZ_question_mark_separatorZqs_partZn1Zn2Ú	version_or'   r(   r™   r)   r*   r+   r8   r8   r9   rz   è  sf      
ÿ


ù

üòzHttpRequestParser.parse_messageN©r1   r2   r3   Ú__doc__r   rh   r   rz   r8   r8   r8   r9   r    â  s   r    c                   @   s$   e Zd ZdZee edœdd„ZdS )r!   zŽRead response status line and headers.

    BadStatusLine could be raised in case of any errors in status line.
    Returns RawResponseMessagerK   c              
   C   sT  |d   dd¡}z| d d¡\}}W n tk
rB   t|ƒd ‚Y nX z| d d¡\}}W n tk
rp   d}Y nX t|ƒ| jkrštdt| jƒtt|ƒƒƒ‚t 	|¡}|d kr´t|ƒ‚t
t| d¡ƒt| d¡ƒƒ}zt|ƒ}W n tk
rü   t|ƒd ‚Y nX |dk�rt|ƒ‚|  |¡\}	}
}}}}|d k�r8|tk}t||| ¡ |	|
||||ƒ	S )	Nr   rS   rT   r   Ú r§   r/   iç  )r]   rV   rW   r   rU   rC   r   r^   ÚVERSREr®   r   rg   Úgrouprf   r   r#   rX   )rH   rL   rc   r&   Ústatusr-   r®   r°   Zstatus_ir'   r(   r™   r)   r*   r+   r8   r8   r9   rz   3  s\    
  
ÿ


ù
÷z HttpResponseParser.parse_messageNr±   r8   r8   r8   r9   r!   -  s   r!   c                   @   sj   e Zd Zdeee eee ee ee eeeddœ
dd„Zddœdd	„Z	de
e
e
eee
f dœdd„ZdS )r�   NFT)
r“   r‡   r+   r)   r,   r$   rn   rp   rr   rF   c
                 C   sî   d| _ tj| _tj| _d| _d| _|	| _	d| _
|rH|rH| j	rHt||ƒ}
n|}
|shtj| _|
 ¡  d| _
n||rvtj| _nn|d k	r¦tj| _|| _ | j dkrä|
 ¡  d| _
n>|r¼|dkr¼tj| _n(|dkrät d¡ tj| _|
 ¡  d| _
|
| _d S )Nr   rR   FTéÌ   )ZPUTZPOSTz6Content-Length or Transfer-Encoding header is required)Ú_lengthr.   r4   Ú_typer:   r<   Ú_chunkÚ_chunk_sizeÚ_chunk_tailrw   r�   ÚDeflateBufferr}   r6   r5   r7   r   Zwarningr“   )rH   r“   r‡   r+   r)   r,   r$   rn   rp   rr   Zreal_payloadr8   r8   r9   rI   n  sF     ÿ


ÿzHttpPayloadParser.__init__r{   c                 C   sF   | j tjkr| j ¡  n*| j tjkr.tdƒ‚n| j tjkrBtdƒ‚d S )Nz2Not enough data for satisfy content length header.z3Not enough data for satisfy transfer length header.)	r¹   r.   r7   r“   r}   r5   r   r6   r   r   r8   r8   r9   r}   ¦  s    ÿÿzHttpPayloadParser.feed_eofr€   ó   ;)Úchunkr‚   Ú	CHUNK_EXTrF   c                 C   s:  | j tjkrŽ| j}t|ƒ}||krT|| | _| j ||¡ | jdkrŠ| j ¡  dS n6d| _| j |d |… |¡ | j ¡  d||d … fS �n¨| j tjk�r| j	r²| j	| }d| _	|�r6| j
tjk�r¦| |¡}|dk�rœ| |d|¡}|dkrþ|d |… }n|d |… }ztt|ƒdƒ}	W n@ tk
�r\   t|d |…  dd¡ƒ}
| j |
¡ |
d ‚Y nX ||d d … }|	dk�r‚tj| _
ntj| _
|	| _| j ¡  n
|| _	d	S | j
tjk�r"| j}t|ƒ}||k�rè|| | _| j ||¡ d	S d| _| j |d |… |¡ ||d … }tj| _
| j ¡  | j
tjk�rb|d d… |k�rX|dd … }tj| _
n
|| _	d	S | j
tjk�rÎ|d d… }||k�r | j ¡  d|dd … fS |�sªd	S ||d d
… k�rÆ|| _	d	S tj| _
| j
tjkr²| |¡}|dk�r||d d … }tj| _
q²|| _	d	S q²n | j tjk�r6| j |t|ƒ¡ d	S )Nr   )TrR   TrR   é   ÚasciirT   r/   )FrR   r   )r¹   r.   r5   r¸   rU   r“   r‘   r}   r6   r¼   rº   r:   r<   rŠ   rg   rh   rW   r   r]   r”   r?   r=   r»   Úbegin_http_chunk_receivingr>   Úend_http_chunk_receivingr@   r7   )rH   r¿   r‚   rÀ   ZrequiredZ	chunk_lenr•   ÚiZsize_bÚsizer˜   Úheadr8   r8   r9   r‘   ²  s     






ÿ










zHttpPayloadParser.feed_data)NFNNNFTT)r€   r¾   )r1   r2   r3   r   r   rg   r¤   r^   rI   r}   rh   r   r‘   r8   r8   r8   r9   r�   m  s:           öõ8   ÿ  
þr�   c                   @   sr   e Zd ZdZeee ddœdd„Zeddœdd„Z	e
edd	œd
d„Zddœdd„Zddœdd„Zddœdd„ZdS )r½   zDDeflateStream decompress stream and feed data into specified stream.N)Úoutrž   rF   c                 C   sb   || _ d| _|| _d| _|dkr8ts,tdƒ‚t ¡ | _n&|dkrJdt	j
 nt	j
}t	j|d�| _d S )Nr   Frœ   zGCan not decode content-encoding: brotli (br). Please install `brotlipy`rš   rÁ   ©Zwbits)rÈ   rÆ   rž   Ú_started_decodingÚ
HAS_BROTLIr   ÚbrotliZDecompressorÚdecompressorÚzlibÚ	MAX_WBITSÚdecompressobj)rH   rÈ   rž   Z	zlib_moder8   r8   r9   rI   /  s    ÿzDeflateBuffer.__init__)r˜   rF   c                 C   s   | j  |¡ d S rG   )rÈ   r”   )rH   r˜   r8   r8   r9   r”   @  s    zDeflateBuffer.set_exception)r¿   rÆ   rF   c                 C   sœ   |sd S |  j |7  _ | jsH| jdkrH|d d@ dkrHtjtj d�| _z| j |¡}W n" tk
rz   t	d| j ƒ‚Y nX d| _|r˜| j
 |t|ƒ¡ d S )Nr›   r   é   é   rÉ   z#Can not decode content-encoding: %sT)rÆ   rÊ   rž   rÎ   rÐ   rÏ   rÍ   Ú
decompressr~   r   rÈ   r‘   rU   )rH   r¿   rÆ   r8   r8   r9   r‘   C  s&    ÿþýÿ
zDeflateBuffer.feed_datar{   c                 C   sR   | j  ¡ }|s| jdkrD| j |t|ƒ¡ | jdkrD| j jsDtdƒ‚| j 	¡  d S )Nr   r›   )
rÍ   ÚflushrÆ   rÈ   r‘   rU   rž   r—   r   r}   )rH   r¿   r8   r8   r9   r}   a  s    
zDeflateBuffer.feed_eofc                 C   s   | j  ¡  d S rG   )rÈ   rÃ   r   r8   r8   r9   rÃ   k  s    z(DeflateBuffer.begin_http_chunk_receivingc                 C   s   | j  ¡  d S rG   )rÈ   rÄ   r   r8   r8   r9   rÄ   n  s    z&DeflateBuffer.end_http_chunk_receiving)r1   r2   r3   r²   r   r   r^   rI   r’   r”   rh   rg   r‘   r}   rÃ   rÄ   r8   r8   r8   r9   r½   ,  s   
r½   )r    r!   r"   r#   )Mr¥   r£   ÚcollectionsÚreÚstringrÎ   Úenumr   Útypingr   r   r   r   r   r   Z	multidictr	   r
   r   Zyarlr   r³   r   Zbase_protocolr   Zhelpersr   r   Zhttp_exceptionsr   r   r   r   r   r   Zhttp_writerr   r   Úlogr   Zstreamsr   r   Ztypedefsr   rÌ   rË   ÚImportErrorÚ__all__ÚsetÚ	printableZASCIISETÚcompiler­   r´   rZ   Ú
namedtupler"   r#   r.   r:   r   ÚABCr   r    r!   r�   r½   ZHttpRequestParserPyZHttpResponseParserPyZRawRequestMessagePyZRawResponseMessagePyZ_http_parserZHttpRequestParserCZHttpResponseParserCZRawRequestMessageCZRawResponseMessageCr8   r8   r8   r9   Ú<module>   sœ     
	
	


öþ÷þ^  K@ @F