a
     ÑOcD�  ã                   @   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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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*m+Z+ ddl,m-Z-m.Z. ddl/m0Z0 ddl1m2Z2m3Z3 ddl4m5Z5m6Z6 zd dl7Z7dZ8W n e9�yR   dZ8Y n0 dZ:e;ej<ƒZ=e5ee>  e?d< e @d¡ZAe5ee>  e?d< e @d¡ZBe5ee>  e?d< e @d¡ZCe5eeD  e?d< G dd„ deƒZEe Fdg d¢¡ZGedeEeGƒZHG dd „ d e	ƒZIG d!d"„ d"e	ƒZJG d#d$„ d$ƒZKG d%d&„ d&e jLeeH ƒZMG d'd(„ d(eMeE ƒZNG d)d*„ d*eMeG ƒZOG d+d,„ d,ƒZPG d-d.„ d.ƒZQeNZReOZSeEZTeGZUz2e"�s¶dd/lVmNZNmOZOmEZEmGZG eNZWeOZXeEZYeGZZW n e9�yÌ   Y n0 dS )0é    N)Úsuppress)ÚIntEnum)ÚAnyÚGenericÚListÚ
NamedTupleÚOptionalÚPatternÚSetÚTupleÚTypeÚTypeVarÚUnionÚcast)ÚCIMultiDictÚCIMultiDictProxyÚistr)ÚURLé   )Úhdrs)ÚBaseProtocol)ÚNO_EXTENSIONSÚBaseTimerContext)ÚBadHttpMessageÚBadStatusLineÚContentEncodingErrorÚContentLengthErrorÚInvalidHeaderÚLineTooLongÚTransferEncodingError)ÚHttpVersionÚHttpVersion10)Úinternal_logger)ÚEMPTY_PAYLOADÚStreamReader)ÚFinalÚ
RawHeadersTF)ÚHeadersParserÚ
HttpParserÚHttpRequestParserÚHttpResponseParserÚRawRequestMessageÚRawResponseMessageÚASCIISETz[!#$%&'*+\-.^_`|~0-9A-Za-z]+ÚMETHREzHTTP/(\d+).(\d+)ÚVERSREs'   [\x00-\x1F\x7F()<>@,;:\[\]={} \t\\\\\"]ÚHDRREc                   @   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e ed< eed	< eed
< e	ed< dS )r+   ÚmethodÚpathÚversionúCIMultiDictProxy[str]ÚheadersÚraw_headersÚshould_closeÚcompressionÚupgradeÚchunkedÚurlN)
Ú__name__Ú
__module__Ú__qualname__ÚstrÚ__annotations__r    r&   Úboolr   r   © rB   rB   úJ/var/www/html/gsl.tools/lib/python3.9/site-packages/aiohttp/http_parser.pyr+   K   s   
r+   r,   )	r3   ÚcodeÚreasonr5   r6   r7   r8   r9   r:   Ú_MsgTc                   @   s   e Zd ZdZdZdZdZdS )Ú
ParseStater   r   é   é   N)r<   r=   r>   Ú
PARSE_NONEÚPARSE_LENGTHÚPARSE_CHUNKEDÚPARSE_UNTIL_EOFrB   rB   rB   rC   rG   k   s   rG   c                   @   s    e Zd ZdZdZdZdZdZdS )Ú
ChunkStater   r   rH   rI   é   N)r<   r=   r>   ÚPARSE_CHUNKED_SIZEÚPARSE_CHUNKED_CHUNKÚPARSE_CHUNKED_CHUNK_EOFÚPARSE_MAYBE_TRAILERSÚPARSE_TRAILERSrB   rB   rB   rC   rN   s   s
   rN   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)rW   rX   rY   )ÚselfrW   rX   rY   rB   rB   rC   Ú__init__|   s    zHeadersParser.__init__r4   ©ÚlinesrZ   c                 C   sð  t ƒ }g }d}|d }t|ƒ}|�ràz| dd¡\}}W n tyT   t|ƒd ‚Y n0 | d¡}| ¡ }t |¡rzt|ƒ‚t|ƒ| j	kr°t
d | dd¡¡t| j	ƒtt|ƒƒƒ‚t|ƒ}	|d7 }|| }|oÖ|d dv }
|
�rt|g}|
�rh|	t|ƒ7 }	|	| j	k�r&t
d	 | dd¡¡t| j	ƒt|	ƒƒ‚| |¡ |d7 }||k �r^|| }|�rf|d dv }
qäd
}�qhqä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Úlstripr0   ÚsearchrY   r   ÚformatÚdecoder?   ÚappendÚjoinÚaddr   Útuple)r\   r_   r5   r6   Z	lines_idxÚlineÚ
line_countZbnameZbvalueÚheader_lengthZcontinuationZ
bvalue_lstÚnameÚvaluerB   rB   rC   Úparse_headers†   sz    


ÿ
û
ÿû


ÿûzHeadersParser.parse_headers)rU   rV   rU   )
r<   r=   r>   Úintr]   r   Úbytesr   r&   ry   rB   rB   rB   rC   r'   {   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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  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é   rU   rV   FT)ÚprotocolÚloopÚlimitrW   rX   rY   ÚtimerrD   r1   ÚreadallÚpayload_exceptionÚresponse_with_bodyÚread_until_eofÚauto_decompressrZ   c                 C   s„   || _ || _|| _|| _|| _|| _|| _|	| _|
| _|| _	|| _
|| _g | _d| _d| _d | _d | _|| _|| _t|||ƒ| _d S )Nre   F)r}   r~   rW   rX   rY   r€   rD   r1   r�   r‚   rƒ   r„   Ú_linesÚ_tailÚ	_upgradedÚ_payloadÚ_payload_parserÚ_auto_decompressÚ_limitr'   Ú_headers_parser)r\   r}   r~   r   rW   rX   rY   r€   rD   r1   r�   r‚   rƒ   r„   r…   rB   rB   rC   r]   Ú   s(    zHttpParser.__init__r^   c                 C   s   d S r[   rB   )r\   r_   rB   rB   rC   Úparse_message  s    zHttpParser.parse_message©rZ   c                 C   sˆ   | j d ur| j  ¡  d | _ nh| jr0| j | j¡ | jr„| jd dkrP| j d¡ ttƒ� |  | j¡W  d   ƒ S 1 sz0    Y  d S )Néÿÿÿÿz
re   )rŠ   Úfeed_eofr‡   r†   rp   r   Ú	ExceptionrŽ   ©r\   rB   rB   rC   r‘     s    


*zHttpParser.feed_eofó   
re   )ÚdataÚSEPÚEMPTYÚCONTENT_LENGTHÚMETH_CONNECTÚSEC_WEBSOCKET_KEY1rZ   c                    s¤  g }| j r| j | d }| _ t|ƒ}d}	| j}
|	|k �rv| jd u �r‚| j�s‚| ||	¡}||	krp| jsp|d }	q.||	k�rj| j ||	|… ¡ |d }	| jd |k�r€z|  | j¡‰W | j 	¡  n| j 	¡  0 t
t dœ‡ ‡fdd„}|ƒ }|ˆjv �r t|ƒ‚ˆj| _tˆd| jƒ}| jd u�s&J ‚|d u�r:|dk�sJˆj�r–ˆj�s–t| j| j|
| jd	�}t||ˆj|ˆj| j| j| j| jd
�	}|j�sZ|| _nÄ||k�rètˆtƒ�s°J ‚t| j| j|
| jd	�}d| _t|ˆjˆjd| jd�| _nrtˆddƒdk�rV|d u �rV| j�rVt| j| j|
| jd	�}t||ˆj|ˆj| jd| j| jd
�	}|j�sZ|| _nt }| ˆ|f¡ n||	d … | _ |}�qvq.| jd u �r¨| j�r¨| j�rvJ ‚�qvq.|�rv|	|k �rv| j�rÄJ ‚| jd u�sÔJ ‚z| j !||	d … ¡\}}W nb t"�yR } zH| j#d u�r(| jj$ %|  #t&|ƒ¡¡ n| jj$ %|¡ d}d}W Y d }~n
d }~0 0 |�rtd}	t|ƒ}d | _q.q.�qvq.|�r”|	|k �r”||	d … }n|}|| j|fS )Nre   r   rH   r�   r�   c                     sT   ˆj  ˆ ¡} | d u rd S zt| ƒ}W n ty>   tˆ ƒ‚Y n0 |dk rPtˆ ƒ‚|S )Nr   )r5   Úgetrz   rj   r   )Z
length_hdrÚlength©r˜   ÚmsgrB   rC   Úget_content_length?  s    z0HttpParser.feed_data.<locals>.get_content_lengthr1   )r€   r~   r   )rœ   r:   r1   r8   rD   r�   rƒ   r…   T)r1   r8   r�   r…   rD   éd   éÇ   )'r‡   rh   r~   rŠ   rˆ   Úfindr†   rp   rŽ   Úclearr   rz   r5   r   r9   Úgetattrr1   r}   r:   r$   r€   rŒ   ÚHttpPayloadParserr8   rD   r�   rƒ   r‹   ÚdoneÚ
isinstancer+   r„   r#   Ú	feed_dataÚBaseExceptionr‚   ÚpayloadÚset_exceptionr?   )r\   r•   r–   r—   r˜   r™   rš   ÚmessagesZdata_lenZ	start_posr~   ÚposrŸ   rœ   r1   rª   Zpayload_parserÚeofÚexcrB   r�   rC   r¨     sú    


ÿÿþýü÷
üû
	ÿþýü÷ÿzHttpParser.feed_datar4   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v r„|
}| tj¡}|durÄd| ¡ krªd}ntd	ƒ‚tj	|v rÄt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-aliver9   )ÚgzipÚdeflateÚbrr:   z'Request has invalid `Transfer-Encoding`z6Content-Length can't be present with Transfer-Encoding)
r�   ry   r›   r   Z
CONNECTIONÚlowerZCONTENT_ENCODINGZTRANSFER_ENCODINGr   r˜   )r\   r_   r5   r6   Z
close_connÚencodingr9   r:   ÚconnÚvÚencÚterB   rB   rC   ry   É  s:    

ÿzHttpParser.parse_headers)ÚvalrZ   c                 C   s
   || _ dS )zZSet connection upgraded (to websocket) mode.

        :param bool val: new state.
        N)rˆ   )r\   rº   rB   rB   rC   Úset_upgradedú  s    zHttpParser.set_upgraded)NNr|   rU   rV   rU   NNNFNTFT) r<   r=   r>   r   r   ÚasyncioZAbstractEventLooprz   r   r?   rA   r   r©   r]   ÚabcÚabstractmethodr   r{   rF   rŽ   r‘   r   r˜   r™   rš   r   r   r$   r¨   r&   ry   r»   rB   rB   rB   rC   r(   Ù   sn                 ñ
ð'ùø 6ÿþ1r(   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.
    r^   c                 C   sŽ  |d   dd¡}z| d d¡\}}}W n tyB   t|ƒd ‚Y n0 t|ƒ| jkrltdt| jƒtt|ƒƒƒ‚t 	|¡s~t|ƒ‚zB| 
d¡r¶|dd …  dd	¡\}}tt|ƒt|ƒƒ}nt|ƒ‚W n tyÚ   t|ƒ‚Y n0 |d
krôtj|dd�}	nL| 
d¡�r4| d¡\}
}}|
 d¡\}
}}tj|
||dd�}	nt|dd�}	|  |¡\}}}}}}|d u �rt|tk�rpd}nd}t||||||||||	ƒ
S )Nr   rf   rg   rH   úStatus line is too longzHTTP/é   Ú.r   ZCONNECTT)Ú	authorityÚencodedú/ú#ú?)r2   Zquery_stringÚfragmentrÃ   )rÃ   F)ro   ri   rj   r   rh   rW   r   r?   r.   ÚmatchÚ
startswithr    rz   r’   r   ÚbuildÚ	partitionry   r!   r+   )r\   r_   rt   r1   r2   r3   Zn1Zn2Ú	version_or;   Z	path_partZ_hash_separatorZurl_fragmentZ_question_mark_separatorZqs_partr5   r6   r°   r8   r9   r:   rB   rB   rC   rŽ   
  sl    ÿ

ü	
ù

özHttpRequestParser.parse_messageN)r<   r=   r>   Ú__doc__r   r{   r+   rŽ   rB   rB   rB   rC   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 RawResponseMessage.
    r^   c              
   C   sN  |d   dd¡}z| d d¡\}}W n ty@   t|ƒd ‚Y n0 z| d d¡\}}W n tyl   d}Y n0 t|ƒ| jkr–tdt| jƒtt|ƒƒƒ‚t 	|¡}|d u r°t|ƒ‚t
t| d¡ƒt| d¡ƒƒ}zt|ƒ}W n työ   t|ƒd ‚Y n0 |dk�r
t|ƒ‚|  |¡\}	}
}}}}|d u �r2|tk}t||| ¡ |	|
||||ƒ	S )	Nr   rf   rg   r   Ú r¿   rH   iç  )ro   ri   rj   r   rh   rW   r   r?   r/   rÈ   r    rz   Úgroupry   r!   r,   rk   )r\   r_   rt   r3   ÚstatusrE   rÈ   rÌ   Zstatus_ir5   r6   r°   r8   r9   r:   rB   rB   rC   rŽ   c  sX    
ÿ


ù
÷z HttpResponseParser.parse_messageN)r<   r=   r>   rÍ   r   r{   r,   rŽ   rB   rB   rB   rC   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:   r8   rD   r1   r�   rƒ   r…   rZ   c
                 C   sî   d| _ tj| _tj| _d| _d| _|	| _	d| _
|rH|rH| j	rHt||ƒ}
n|}
|shtj| _|
 ¡  d| _
n||rvtj| _nn|d ur¦tj| _|| _ | j dkrä|
 ¡  d| _
n>|r¼|dkr¼tj| _n(|dv rät d¡ tj| _|
 ¡  d| _
|
| _d S )Nr   re   FTéÌ   )ÚPUTÚPOSTz6Content-Length or Transfer-Encoding header is required)Ú_lengthrG   rJ   Ú_typerN   rP   Ú_chunkÚ_chunk_sizeÚ_chunk_tailr‹   r¦   ÚDeflateBufferr‘   rL   rK   rM   r"   Úwarningrª   )r\   rª   rœ   r:   r8   rD   r1   r�   rƒ   r…   Zreal_payloadrB   rB   rC   r]   ž  sD    ÿ


ÿ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Õ   rG   rM   rª   r‘   rK   r   rL   r   r“   rB   rB   rC   r‘   Ö  s    ÿÿzHttpPayloadParser.feed_eofr”   ó   ;)Úchunkr–   Ú	CHUNK_EXTrZ   c                 C   s8  | 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| _	|�r4| j
tjk�r¤| |¡}|dk�rš| |d|¡}|dkrþ|d |… }n|d |… }ztt|ƒdƒ}	W n> t�yZ   t|d |…  dd¡ƒ}
| j |
¡ |
d ‚Y n0 ||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�r`|d d… |k�rV|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�r4| j |t|ƒ¡ d	S )Nr   )Tre   Tre   é   Úasciirg   rH   )Fre   r   )rÕ   rG   rK   rÔ   rh   rª   r¨   r‘   rL   rØ   rÖ   rN   rP   r¢   rz   r{   rj   r   ro   r«   rS   rQ   r×   Úbegin_http_chunk_receivingrR   Úend_http_chunk_receivingrT   rM   )r\   rÜ   r–   rÝ   ÚrequiredZ	chunk_lenr­   ÚiZsize_bÚsizer¯   ÚheadrB   rB   rC   r¨   â  s     






ÿ










zHttpPayloadParser.feed_data)NFNNNFTT)r”   rÛ   )r<   r=   r>   r$   r   rz   rA   r?   r]   r‘   r{   r   r¨   rB   rB   rB   rC   r¥   �  s4           öõ8 ÿ
þr¥   c                   @   s|   e Zd ZU dZeed< 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.ÚdecompressorN)Úoutrµ   rZ   c                 C   sn   || _ d| _|| _d| _|dkrDts,tdƒ‚G dd„ dƒ}|ƒ | _n&|dkrVdtj ntj}tj	|d	�| _d S )
Nr   Fr³   zECan not decode content-encoding: brotli (br). Please install `Brotli`c                   @   s8   e Zd Zddœdd„Zeedœdd„Zedœdd	„ZdS )
z-DeflateBuffer.__init__.<locals>.BrotliDecoderNr�   c                 S   s   t  ¡ | _d S r[   )ÚbrotliZDecompressorÚ_objr“   rB   rB   rC   r]   r  s    z6DeflateBuffer.__init__.<locals>.BrotliDecoder.__init__)r•   rZ   c                 S   s0   t | jdƒrtt| j |¡ƒS tt| j |¡ƒS )NÚ
decompress)Úhasattrré   r   r{   rê   Úprocess)r\   r•   rB   rB   rC   rê   u  s    z8DeflateBuffer.__init__.<locals>.BrotliDecoder.decompressc                 S   s    t | jdƒrtt| j ¡ ƒS dS )NÚflushre   )rë   ré   r   r{   rí   r“   rB   rB   rC   rí   z  s    z3DeflateBuffer.__init__.<locals>.BrotliDecoder.flush)r<   r=   r>   r]   r{   rê   rí   rB   rB   rB   rC   ÚBrotliDecodern  s   rî   r±   rÞ   ©Úwbits)
rç   rä   rµ   Ú_started_decodingÚ
HAS_BROTLIr   ræ   ÚzlibÚ	MAX_WBITSÚdecompressobj)r\   rç   rµ   rî   Ú	zlib_moderB   rB   rC   r]   a  s    ÿ
zDeflateBuffer.__init__)r¯   rZ   c                 C   s   | j  |¡ d S r[   )rç   r«   )r\   r¯   rB   rB   rC   r«   „  s    zDeflateBuffer.set_exception)rÜ   rä   rZ   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yx   t	d| j ƒ‚Y n0 d| _|r–| j
 |t|ƒ¡ d S )Nr²   r   é   é   rï   z#Can not decode content-encoding: %sT)rä   rñ   rµ   ró   rõ   rô   ræ   rê   r’   r   rç   r¨   rh   )r\   rÜ   rä   rB   rB   rC   r¨   ‡  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æ   rí   rä   rç   r¨   rh   rµ   r®   r   r‘   )r\   rÜ   rB   rB   rC   r‘   ¥  s    
zDeflateBuffer.feed_eofc                 C   s   | j  ¡  d S r[   )rç   rà   r“   rB   rB   rC   rà   ¯  s    z(DeflateBuffer.begin_http_chunk_receivingc                 C   s   | j  ¡  d S r[   )rç   rá   r“   rB   rB   rC   rá   ²  s    z&DeflateBuffer.end_http_chunk_receiving)r<   r=   r>   rÍ   r   r@   r$   r   r?   r]   r©   r«   r{   rz   r¨   r‘   rà   rá   rB   rB   rB   rC   rÙ   \  s   
#
rÙ   )r)   r*   r+   r,   )[r½   r¼   ÚcollectionsÚreÚstringró   Ú
contextlibr   Úenumr   Útypingr   r   r   r   r   r	   r
   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   r   Zhttp_writerr    r!   Úlogr"   Zstreamsr#   r$   Ztypedefsr%   r&   rè   rò   ÚImportErrorÚ__all__ÚsetÚ	printabler-   r?   r@   Úcompiler.   r/   r0   r{   r+   Ú
namedtupler,   rF   rG   rN   r'   ÚABCr(   r)   r*   r¥   rÙ   ZHttpRequestParserPyZHttpResponseParserPyZRawRequestMessagePyZRawResponseMessagePyZ_http_parserZHttpRequestParserCZHttpResponseParserCZRawRequestMessageCZRawResponseMessageCrB   rB   rB   rC   Ú<module>   st   
8$	
		þ^  +ZA @Z