
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!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ÚchunkedÚ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© r9   r9   ú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   r0   r1   é   N)r2   r3   r4   ÚPARSE_CHUNKED_SIZEÚPARSE_CHUNKED_CHUNKÚPARSE_CHUNKED_CHUNK_EOFÚPARSE_MAYBE_TRAILERSÚPARSE_TRAILERSr9   r9   r9   r:   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)rD   rE   rF   )ÚselfrD   rE   rF   r9   r9   r:   Ú__init__l   s    zHeadersParser.__init__úCIMultiDictProxy[str]©ÚlinesrG   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ÚsearchrF   r   ÚformatÚdecodeÚstrÚappendÚjoinÚaddr
   Útuple)rI   rM   r'   r(   Z	lines_idxÚlineZ
line_countZbnameZbvalueÚheader_lengthZcontinuationZ
bvalue_lstÚnameÚvaluer9   r9   r:   Úparse_headersv   sz    


ÿ
û
ÿû


ÿûzHeadersParser.parse_headers)rB   rC   rB   )
r2   r3   r4   ÚintrJ   r   Úbytesr   r   rh   r9   r9   r9   r:   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é   rB   rC   FT)ÚprotocolÚloopÚlimitrD   rE   rF   Útimerr-   r$   ÚreadallÚpayload_exceptionÚresponse_with_bodyÚread_until_eofÚauto_decompressrG   c                 C   s„   || _ || _|| _|| _|| _|| _|| _|	| _|
| _|| _	|| _
|| _g | _d| _d| _d | _d | _|| _|| _t|||ƒ| _d S )NrS   F)rl   rm   rD   rE   rF   ro   r-   r$   rp   rq   rr   rs   Ú_linesÚ_tailÚ	_upgradedÚ_payloadÚ_payload_parserÚ_auto_decompressÚ_limitr   Ú_headers_parser)rI   rl   rm   rn   rD   rE   rF   ro   r-   r$   rp   rq   rr   rs   rt   r9   r9   r:   rJ   Ê   s(    zHttpParser.__init__rL   c                 C   s   d S rH   r9   )rI   rM   r9   r9   r:   Úparse_messageñ   s    zHttpParser.parse_message©rG   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
rS   )ry   Úfeed_eofrv   ru   r`   r}   Ú	Exception©rI   r9   r9   r:   r€   õ   s    

zHttpParser.feed_eofó   
rS   )ÚdataÚSEPÚEMPTYÚCONTENT_LENGTHÚMETH_CONNECTÚSEC_WEBSOCKET_KEY1rG   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 )NrS   r   r0   r   r$   )ro   rm   rn   )Úlengthr+   r$   r)   r-   rp   rr   rt   T)r$   r)   rp   rt   r-   éd   éÇ   )'rv   rV   rm   ry   rw   Úfindru   r`   Úclearr}   r'   Úgetri   rX   r   r*   Úgetattrr$   rl   ÚAssertionErrorr+   r   ro   r{   ÚHttpPayloadParserr)   r-   rp   rr   rz   Údoners   r   Ú	feed_dataÚBaseExceptionrq   ÚpayloadÚset_exceptionr_   )rI   r„   r…   r†   r‡   rˆ   r‰   ÚmessagesZdata_lenZ	start_posrm   ÚposÚmsgrŠ   r$   r–   Zpayload_parserÚeofÚexcr9   r9   r:   r”     s   




ÿÿþýü÷
üû
	ÿþýü÷ÿzHttpParser.feed_datarK   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+   )r|   rh   r�   r   Z
CONNECTIONÚlowerZCONTENT_ENCODINGZTRANSFER_ENCODING)rI   rM   r'   r(   Z
close_connÚencodingr*   r+   ZconnÚvÚencÚter9   r9   r:   rh   ²  s.    
zHttpParser.parse_headers)ÚvalrG   c                 C   s
   || _ dS )zYSet connection upgraded (to websocket) mode.
        :param bool val: new state.
        N)rw   )rI   r¦   r9   r9   r:   Úset_upgradedÛ  s    zHttpParser.set_upgraded)NNrk   rB   rC   rB   NNNFNTFT)r2   r3   r4   r   r   ÚasyncioZAbstractEventLoopri   r   r_   Úboolr   r•   rJ   ÚabcÚabstractmethodr   rj   r   r}   r€   r   r‡   rˆ   r‰   r   r   r”   r   rh   r§   r9   r9   r9   r:   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.
    rL   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   rT   rU   r0   úStatus line is too longú#ú?zHTTP/é   Ú.r   TF)r%   Zquery_stringÚfragmentÚencoded)r^   rW   rX   r   rV   rD   r   r_   Ú	partitionÚMETHREÚmatchÚ
startswithr   ri   r�   rh   r   r"   r   Úbuild)rI   rM   rd   r$   r%   r&   Z	path_partZ_hash_separatorZurl_fragmentZ_question_mark_separatorZqs_partZn1Zn2Ú	version_or'   r(   r�   r)   r*   r+   r9   r9   r:   r}   è  sf      
ÿ


ù

üòzHttpRequestParser.parse_messageN©r2   r3   r4   Ú__doc__r   rj   r   r}   r9   r9   r9   r:   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 RawResponseMessagerL   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   rT   rU   r   Ú r¬   r0   iç  )r^   rW   rX   r   rV   rD   r   r_   ÚVERSRErµ   r   ri   Úgrouprh   r   r#   rY   )rI   rM   rd   r&   Ústatusr.   rµ   r¸   Zstatus_ir'   r(   r�   r)   r*   r+   r9   r9   r:   r}   3  s\    
  
ÿ


ù
÷z HttpResponseParser.parse_messageNr¹   r9   r9   r9   r:   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$   rp   rr   rt   rG   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   rS   FTéÌ   )ZPUTZPOSTz6Content-Length or Transfer-Encoding header is required)Ú_lengthr/   r5   Ú_typer;   r=   Ú_chunkÚ_chunk_sizeÚ_chunk_tailrz   r“   ÚDeflateBufferr€   r7   r6   r8   r   Úwarningr–   )rI   r–   rŠ   r+   r)   r-   r$   rp   rr   rt   Zreal_payloadr9   r9   r:   rJ   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/   r8   r–   r€   r6   r   r7   r   r‚   r9   r9   r:   r€   ¦  s    ÿÿzHttpPayloadParser.feed_eofrƒ   ó   ;)Úchunkr…   Ú	CHUNK_EXTrG   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   )TrS   TrS   é   ÚasciirU   r0   )FrS   r   )rÁ   r/   r6   rÀ   rV   r–   r”   r€   r7   rÄ   rÂ   r;   r=   r�   ri   rj   rX   r   r^   r—   r@   r>   rÃ   Úbegin_http_chunk_receivingr?   Úend_http_chunk_receivingrA   r8   )rI   rÈ   r…   rÉ   ÚrequiredZ	chunk_lenr™   ÚiZsize_bÚsizerœ   Úheadr9   r9   r:   r”   ²  s     






ÿ










zHttpPayloadParser.feed_data)NFNNNFTT)rƒ   rÇ   )r2   r3   r4   r   r   ri   r©   r_   rJ   r€   rj   r   r”   r9   r9   r9   r:   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¢   rG   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)rI   rÒ   r¢   Z	zlib_moder9   r9   r:   rJ   /  s    ÿzDeflateBuffer.__init__)rœ   rG   c                 C   s   | j  |¡ d S rH   )rÒ   r—   )rI   rœ   r9   r9   r:   r—   @  s    zDeflateBuffer.set_exception)rÈ   rÐ   rG   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”   rV   )rI   rÈ   rÐ   r9   r9   r:   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”   rV   r¢   r›   r   r€   )rI   rÈ   r9   r9   r:   r€   a  s    
zDeflateBuffer.feed_eofc                 C   s   | j  ¡  d S rH   )rÒ   rÌ   r‚   r9   r9   r:   rÌ   k  s    z(DeflateBuffer.begin_http_chunk_receivingc                 C   s   | j  ¡  d S rH   )rÒ   rÍ   r‚   r9   r9   r:   rÍ   n  s    z&DeflateBuffer.end_http_chunk_receiving)r2   r3   r4   rº   r   r   r_   rJ   r•   r—   rj   ri   r”   r€   rÌ   rÍ   r9   r9   r9   r:   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¼   r[   Ú
namedtupler"   r#   r/   r;   r   ÚABCr   r    r!   r’   rÅ   ZHttpRequestParserPyZHttpResponseParserPyZRawRequestMessagePyZRawResponseMessagePyZ_http_parserZHttpRequestParserCZHttpResponseParserCZRawRequestMessageCZRawResponseMessageCr9   r9   r9   r:   Ú<module>   sœ     
	
	


öþ÷þ^  K@ @F