o
    +if                     @   s,  U 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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$ ddl%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z, ddl-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5 ddl6m7Z7m8Z8 ddl9m:Z: ddl;m<Z<m=Z= ddl>m?Z? dZ@ed ZAeBejCZDeeeE  eFd< eGdZHeeE eFd< eIdeH dZJeeeE  eFd< eIdejKZLeeeE  eFd< eIdejKZMeeeE  eFd< eIdZNeeeO  eFd< G dd  d eZPG d!d" d"eZQed#ePeQZRG d$d% d%eZSG d&d' d'eZTG d(d) d)ZUd*eeE d+eVfd,d-ZWG d.d/ d/e jXeeR ZYG d0d1 d1eYeP ZZG d2d3 d3eYeQ Z[G d4d5 d5Z\G d6d7 d7Z]eZZ^e[Z_ePZ`eQZaze(sdd8lbmZZZm[Z[mPZPmQZQ eZZce[ZdePZeeQZfW dS W dS  egy   Y dS w )9    N)suppress)IntEnum)AnyClassVarFinalGenericListLiteral
NamedTupleOptionalPatternSetTupleTypeTypeVarUnion)CIMultiDictCIMultiDictProxyistr)URL   )hdrs)BaseProtocol)
HAS_BROTLIBrotliDecompressorZLibDecompressor)_EXC_SENTINELDEBUGNO_EXTENSIONSBaseTimerContextmethod_must_be_empty_bodyset_exceptionstatus_code_must_be_empty_body)BadHttpMessageBadStatusLineContentEncodingErrorContentLengthErrorInvalidHeaderInvalidURLErrorLineTooLongTransferEncodingError)HttpVersionHttpVersion10)internal_logger)EMPTY_PAYLOADStreamReader)
RawHeaders)HeadersParser
HttpParserHttpRequestParserHttpResponseParserRawRequestMessageRawResponseMessage)   
   
ASCIISETz!#$%&'*+-.^_`|~_TCHAR_SPECIALSz
[0-9A-Za-zz]+TOKENREzHTTP/(\d)\.(\d)VERSREz\d+DIGITSs   [0-9a-fA-F]+	HEXDIGITSc                   @   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 )r5   methodpathversionCIMultiDictProxy[str]headersraw_headersshould_closecompressionupgradechunkedurlN)
__name__
__module____qualname__str__annotations__r+   r0   boolr   r    rP   rP   L/var/www/html/corbot_env/lib/python3.10/site-packages/aiohttp/http_parser.pyr5   Q   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
e ed< e	ed< e	ed	< d
S )r6   rA   codereasonrC   rD   rE   rF   rG   rH   N)rJ   rK   rL   r+   rN   intrM   r   r0   rO   r   rP   rP   rP   rQ   r6   ^   s   
 r6   _MsgTc                   @   s   e Zd ZdZdZdZdZdS )
ParseStater   r         N)rJ   rK   rL   
PARSE_NONEPARSE_LENGTHPARSE_CHUNKEDPARSE_UNTIL_EOFrP   rP   rP   rQ   rV   m   s
    rV   c                   @   s    e Zd ZdZdZdZdZdZdS )
ChunkStater   r   rW   rX      N)rJ   rK   rL   PARSE_CHUNKED_SIZEPARSE_CHUNKED_CHUNKPARSE_CHUNKED_CHUNK_EOFPARSE_MAYBE_TRAILERSPARSE_TRAILERSrP   rP   rP   rQ   r]   u   s    r]   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laxreturnNc                 C   s   || _ || _|| _|| _d S N)rf   rg   rh   _lax)selfrf   rg   rh   ri   rP   rP   rQ   __init__~   s   
zHeadersParser.__init__linesrB   c                 C   s<  t  }g }d}|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}t|| jkrctd|	d	d
t
| jt
t||	dd}	t|	srt|t|}
|d7 }|| }| jo|o|d dv }|r|g}|r|
t|7 }
|
| jkrtd|	d	d
t
| jt
|
|| |d7 }||k r|| }|r|d dv }nd}n|sd|}n|
| jkrtd|	d	d
t
| jt
|
|d}|	dd}d|v sd|v sd|v rt|||	| |||f |st|t|fS )Nr      :r       	   s    	zrequest header name {}utf8backslashreplaceutf-8surrogateescape)rr   rs   zrequest header field {}    
 )r   lensplit
ValueErrorr'   lstriprh   r)   formatdecoderM   r;   	fullmatchrl   appendjoinstripaddr   tuple)rm   ro   rC   rD   	lines_idxline
line_countbnamebvaluenameheader_lengthcontinuation
bvalue_lstvaluerP   rP   rQ   parse_headers   s   










QzHeadersParser.parse_headers)rd   re   rd   F)rJ   rK   rL   rT   rO   rn   r   bytesr   r0   r   rP   rP   rP   rQ   r1   }   s*    

r1   rC   rj   c                 C   s   |  tjd dv S )z)Check if the upgrade header is supported. >   tcp	websocket)getr   UPGRADElowerrC   rP   rP   rQ   _is_supported_upgrade   s   r   c                   @   s\  e Zd ZU dZee ed< 														d.dee d	ee	j
 d
ededededee dee dee dedeee  dedededdfddZejdee defddZdee 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d(e!ee ee eef fd)d*Z"d+eddfd,d-Z#dS )/r2   Fri   N   rd   re   Tprotocollooplimitrf   rg   rh   timerrR   r?   readallpayload_exceptionresponse_with_bodyread_until_eofauto_decompressrj   c                 C   s   || _ || _|| _|| _|| _|| _|| _|	| _|
| _|| _	|| _
|| _g | _d| _d| _d | _d | _|| _|| _t|||| j| _d S )Nrx   F)r   r   rf   rg   rh   r   rR   r?   r   r   r   r   _lines_tail	_upgraded_payload_payload_parser_auto_decompress_limitr1   ri   _headers_parser)rm   r   r   r   rf   rg   rh   r   rR   r?   r   r   r   r   r   rP   rP   rQ   rn      s,   

zHttpParser.__init__ro   c                 C   s   d S rk   rP   )rm   ro   rP   rP   rQ   parse_message  s   zHttpParser.parse_messagec                 C   s   | j d ur| j   d | _ d S | jr| j| j | jrC| jd dkr)| jd tt | | jW  d    S 1 s>w   Y  d S )Nrq   z
rx   )r   feed_eofr   r   r   r   	Exceptionr   rm   rP   rP   rQ   r     s   



 zHttpParser.feed_eofr7   rx   dataSEPEMPTYCONTENT_LENGTHMETH_CONNECTSEC_WEBSOCKET_KEY1c                    s  g }| j r| j | d}| _ t|}d}	| j}
|	|k r| jd u r_| js_|||	}||	kr:| js:|t| }	q||	krU||	| }|dkrN|d}| j| |t| }	| jd |krTz| 	| jW | j
  n| j
  w dtt f fdd}| }|jv rt|jotj| _td	| j}td
d}| jd usJ t|pt|ot|}|s|d ur|dksĈjr| jst| j| j|
| jd}t||j|j| j| j| j| j | j!d
}|j"s|| _n_||krt#t$sJ t| j| j|
| jd}d| _t|jjd| j | j!d| _n5|sK|d u rK| j%rKt| j| j|
| jd}t||j|j| jd| j| j | j!d
}|j"sJ|| _nt&}||f n~||	d  | _ |}nx| jd u rp| jrp| jroJ ng|r|	|k r| jr~J | jd usJ z| j'||	d  |\}}W n. t(y } z!|}| j)d ur| )t*|}t+| jj,|| d}d}W Y d }~nd }~ww |rd}	t|}d | _qnn|	|k s|r|	|k r||	d  }n|}|| j|fS )Nrx   r   r8      rq   rj   c                     s2   j  } | d u rd S t| st t| S rk   )rC   r   r=   r   r'   rT   )
length_hdrr   msgrP   rQ   get_content_length[  s   
z0HttpParser.feed_data.<locals>.get_content_lengthr?   rR   )r   r   r   )	lengthrH   r?   rF   rR   r   r   r   ri   T)r?   rF   r   r   ri   )-r   r|   r   r   r   findr   rstripr   r   clearr   rT   rC   r'   rG   r   getattrr?   r   r"   rO   r    rH   r/   r   r   HttpPayloadParserrF   rR   r   r   r   ri   done
isinstancer5   r   r.   	feed_dataBaseExceptionr   rM   r!   payload)rm   r   r   r   r   r   r   messagesdata_len	start_posr   posr   r   r   r?   rR   
empty_bodyr   payload_parsereofunderlying_excreraised_excrP   r   rQ   r   .  s  








  #zHttpParser.feed_datarB   c              
      s<  | j |\ }d}d}d}d}tjtjtjtjtjtjtj	tj
tjtjf
}t fdd|D d}|dur>td| d tj}	|	rd|	 }
|
dkrQd}n|
d	krXd}n|
d
krd tjrdd} tj}|rv| }|dv rv|} tj}|durd| krd}ntdtj v rtd |||||fS )zParses RFC 5322 headers from a stream.

        Line continuations are supported. Returns list of header name
        and value pairs. Header name is in upper case.
        NFc                 3   s(    | ]}t  |d dkr|V  qdS )rP   r   N)r|   getall).0hr   rP   rQ   	<genexpr>  s   & z+HttpParser.parse_headers.<locals>.<genexpr>zDuplicate 'z' header found.closeTz
keep-aliverG   )gzipdeflatebrrH   z'Request has invalid `Transfer-Encoding`z6Transfer-Encoding can't be present with Content-Length)r   r   r   r   CONTENT_LOCATIONCONTENT_RANGECONTENT_TYPEETAGHOSTMAX_FORWARDSSERVERTRANSFER_ENCODING
USER_AGENTnextr#   r   
CONNECTIONr   r   CONTENT_ENCODING)rm   ro   rD   
close_connencodingrG   rH   
singletonsbad_hdrconnvencterP   r   rQ   r     sV   

zHttpParser.parse_headersvalc                 C   s
   || _ dS )zZSet connection upgraded (to websocket) mode.

        :param bool val: new state.
        N)r   )rm   r   rP   rP   rQ   set_upgraded.  s   
zHttpParser.set_upgraded)NNr   rd   re   rd   NNNFNTFT)$rJ   rK   rL   ri   r   rO   rN   r   r   asyncioAbstractEventLooprT   r   rM   r   r   rn   abcabstractmethodr   r   rU   r   r   r   r   r   r   _SEPr   r   r/   r   r0   r   r   rP   rP   rP   rQ   r2      s   
 	


)
 =
Dr2   c                   @   s&   e Zd ZdZdee defddZdS )r3   zRead request status line.

    Exception .http_exceptions.BadStatusLine
    could be raised in case of any errors in status line.
    Returns RawRequestMessage.
    ro   rj   c                 C   s  |d  dd}z|jddd\}}}W n ty    t|d w t|| jkr5tdt| jtt|t	|s>t|t
	|}|d u rKt|tt|dt|d}|d	krftj|d
d}nD|dr|d\}	}
}|	d\}	}}tj|	||d
d}n%|dkr|dkrt|d
d}nt|d
d}|jdkrt|jdd d| |\}}}}}}|d u r|tkrd
}nd}t||||||||||
S )Nr   rv   rw    rW   maxsplitStatus line is too longr   CONNECTT)	authorityencoded/#?)r@   query_stringfragmentr   *OPTIONS)r   r   )errorslatin1F)r   r}   r~   r$   r|   rf   r)   rM   r;   r   r<   r+   rT   groupr   build
startswith	partitionschemer(   encoder   r,   r5   )rm   ro   r   r?   r@   rA   match	version_orI   	path_part_hash_separatorurl_fragment_question_mark_separatorqs_partrC   rD   r   rF   rG   rH   rP   rP   rQ   r   >  st   




zHttpRequestParser.parse_messageN)rJ   rK   rL   __doc__r   r   r5   r   rP   rP   rP   rQ   r3   6  s    r3   c                       sp   e Zd ZdZe Z	ddedee 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  ZS )r4   zRead response status line and headers.

    BadStatusLine could be raised in case of any errors in status line.
    Returns RawResponseMessage.
    Nr   r   argskwargsrj   c                    s0   |d u r
t rdnd}t j||g|R i |S )Nr7   r8   )r   superr   )rm   r   r   r  r  	__class__rP   rQ   r     s   zHttpResponseParser.feed_dataro   c              
   C   s  |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|| jkrMtdt| jtt|t	
|}|d u rZt|tt|dt|d}t|d	kstt
|sxt|t|}| |\}	}
}}}}|d u r|tkrd
}n!d|  krdk sn |dv rd}ntj|	v stj|	v rd}nd
}t||| |	|
||||	S )Nr   rv   rw   r   r   r   r   rW   rX   Td      >   0     F)r   r}   r~   r$   r   r|   rf   r)   rM   r<   r   r+   rT   r  r=   r   r,   r   r   r   r6   )rm   ro   r   rA   statusrS   r
  r  status_irC   rD   r   rF   rG   rH   rP   rP   rQ   r     sd   


z HttpResponseParser.parse_messagerk   )rJ   rK   rL   r  r   ri   r   r   r   r   r   r   r6   r/   rO   r   r   __classcell__rP   rP   r  rQ   r4     s     r4   c                   @   s   e Zd Z									ddedee dedee dee d	ee d
ededededdf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   rH   rF   rR   r?   r   r   r   ri   rj   c                 C   s   d| _ tj| _tj| _d| _d| _|	| _	|
| _
d| _|r'|r'| j	r't||}n|}|s7tj| _|  d| _n>|r>tj| _n7|d urVtj| _|| _ | j dkrU|  d| _n|ra|dkratj| _n|dv rutd tj| _|  d| _|| _d S )Nr   rx   FTr  )PUTPOSTz6Content-Length or Transfer-Encoding header is required)_lengthrV   rY   _typer]   r_   _chunk_chunk_size_chunk_tailr   rl   r   DeflateBufferr   r[   rZ   r\   r-   warningr   )rm   r   r   rH   rF   rR   r?   r   r   r   ri   real_payloadrP   rP   rQ   rn     sH   



zHttpPayloadParser.__init__c                 C   sF   | j tjkr| j  d S | j tjkrtd| j tjkr!tdd S )Nz2Not enough data for satisfy content length header.z3Not enough data for satisfy transfer length header.)	r!  rV   r\   r   r   rZ   r&   r[   r*   r   rP   rP   rQ   r   $  s   zHttpPayloadParser.feed_eofr7      ;chunkr   	CHUNK_EXTc                 C   s  | j tjkrF| j}t|}||kr+|| | _| j|| | jdkr)| j  dS d
S d| _| j|d | | | j  d||d  fS | j tjkr| j	rX| j	| }d| _	|r| j
tjkr||}|dkr||d|}|dkr||d | }n|d | }| jr| }tt|st|d | dd}	t| j|	 |	tt|d}
||t| d  }|
dkrtj| _
| jr|dr|d	d  }ntj| _
|
| _| j  n|| _	d
S | j
tjkr*| j}t|}||kr|| | _| j|| d
S d| _| j|d | | ||d  }| jr!|dr!|d	d  }tj| _
| j  | j
tjkrN|d t| |krI|t|d  }tj| _
n|| _	d
S | j
tjkr|d t| }||krq| j  d|t|d  fS |svd
S ||d d	 kr|| _	d
S tj| _
| j
tjkr||}|dkr||t| d  }tj| _
n|| _	d
S |s[d
S | j tj kr| j|t| d
S )Nr   )Trx   Trx   asciirw      r   r   )Frx   )!r!  rV   rZ   r   r|   r   r   r   r[   r$  r"  r]   r_   r   rl   r   rer   r>   r*   r   r!   rT   r   rb   r  r`   r#  begin_http_chunk_receivingra   end_http_chunk_receivingrc   r\   )rm   r)  r   r*  required	chunk_lenr   isize_bexcsizeheadrP   rP   rQ   r   0  s   


p










czHttpPayloadParser.feed_data)	NFNNNFTTFrj   N)r7   r(  )rJ   rK   rL   r/   r   rT   rO   rM   rn   r   r   r   r   r   rP   rP   rP   rQ   r     sX    	


:
r   c                   @   s   e Zd ZU dZeed< dedee ddfddZ	e
fd	ed
eddfddZdededdfddZdddZdddZdddZdS )r%  zDDeflateStream decompress stream and feed data into specified stream.decompressoroutr   rj   Nc                 C   sL   || _ d| _|| _d| _|  |dkrtstdt | _d S t|d| _d S )Nr   Fr   zECan not decode content-encoding: brotli (br). Please install `Brotli`)r   )	r9  r5  r   _started_decodingr   r%   r   r8  r   )rm   r9  r   rP   rP   rQ   rn     s   zDeflateBuffer.__init__r4  	exc_causec                 C   s   t | j|| d S rk   )r!   r9  )rm   r4  r;  rP   rP   rQ   r!     s   zDeflateBuffer.set_exceptionr)  r5  c                 C   s   |sd S |  j |7  _ | js#| jdkr#|d d@ dkr#t| jdd| _z| j|}W n ty9   td| j w d| _|rJ| j	|t
| d S d S )Nr   r         T)r   suppress_deflate_headerz#Can not decode content-encoding: %s)r5  r:  r   r   r8  decompress_syncr   r%   r9  r   r|   )rm   r)  r5  rP   rP   rQ   r     s*   
zDeflateBuffer.feed_datac                 C   sR   | j  }|s| jdkr"| j|t| | jdkr"| j js"td| j	  d S )Nr   r   )
r8  flushr5  r9  r   r|   r   r   r%   r   )rm   r)  rP   rP   rQ   r     s   
zDeflateBuffer.feed_eofc                 C      | j   d S rk   )r9  r.  r   rP   rP   rQ   r.       z(DeflateBuffer.begin_http_chunk_receivingc                 C   rA  rk   )r9  r/  r   rP   rP   rQ   r/    rB  z&DeflateBuffer.end_http_chunk_receivingr7  )rJ   rK   rL   r  r   rN   r/   r   rM   rn   r   r   r!   r   rT   r   r   r.  r/  rP   rP   rP   rQ   r%    s    
 

 

r%  )r3   r4   r5   r6   )hr   r   r-  string
contextlibr   enumr   typingr   r   r   r   r   r	   r
   r   r   r   r   r   r   r   	multidictr   r   r   yarlr   r   r   base_protocolr   compression_utilsr   r   r   helpersr   r   r   r   r    r!   r"   http_exceptionsr#   r$   r%   r&   r'   r(   r)   r*   http_writerr+   r,   logr-   streamsr.   r/   typedefsr0   __all__r   set	printabler9   rM   rN   escaper:   compiler;   ASCIIr<   r=   r>   r   r5   r6   rU   rV   r]   r1   rO   r   ABCr2   r3   r4   r   r%  HttpRequestParserPyHttpResponseParserPyRawRequestMessagePyRawResponseMessagePy_http_parserHttpRequestParserCHttpResponseParserCRawRequestMessageCRawResponseMessageCImportErrorrP   rP   rP   rQ   <module>   sp   
 @$(	
		"l  J^U HN
