a
    RfՋ                     @   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:m;Z; ddl<m=Z= dZ>ed Z?e@ejAZBeeeC  eDd< eEdZFeeC eDd< eGdeF dZHeeeC  eDd< eGdejIZJeeeC  eDd< eGdejIZKeeeC  eDd< eGdZLeeeM  eDd< G dd deZNG d d! d!eZOed"eNeOZPG d#d$ d$eZQG d%d& d&eZRG d'd( d(ZSeeC eTd)d*d+ZUG d,d- d-e jVeeP ZWG d.d/ d/eWeN ZXG d0d1 d1eWeO ZYG d2d3 d3ZZG d4d5 d5Z[eXZ\eYZ]eNZ^eOZ_z2e(sdd6l`mXZXmYZYmNZNmOZO eXZaeYZbeNZceOZdW n eey   Y n0 dS )7    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)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 )r4   methodpathversionCIMultiDictProxy[str]headersraw_headersshould_closecompressionupgradechunkedurlN)
__name__
__module____qualname__str__annotations__r+   r/   boolr   r    rO   rO   L/var/www/ai-form-bot/venv/lib/python3.9/site-packages/aiohttp/http_parser.pyr4   P   s   
r4   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 )r5   r@   codereasonrB   rC   rD   rE   rF   rG   N)rI   rJ   rK   r+   rM   intrL   r   r/   rN   r   rO   rO   rO   rP   r5   ]   s   
r5   _MsgTc                   @   s   e Zd ZdZdZdZdZdS )
ParseStater   r         N)rI   rJ   rK   
PARSE_NONEPARSE_LENGTHPARSE_CHUNKEDPARSE_UNTIL_EOFrO   rO   rO   rP   rU   l   s   rU   c                   @   s    e Zd ZdZdZdZdZdZdS )
ChunkStater   r   rV   rW      N)rI   rJ   rK   PARSE_CHUNKED_SIZEPARSE_CHUNKED_CHUNKPARSE_CHUNKED_CHUNK_EOFPARSE_MAYBE_TRAILERSPARSE_TRAILERSrO   rO   rO   rP   r\   t   s
   r\   c                   @   s@   e Zd ZdeeeeddddZee ede	f d	d
dZ
dS )r0        FN)max_line_sizemax_headersmax_field_sizelaxreturnc                 C   s   || _ || _|| _|| _d S N)re   rf   rg   _lax)selfre   rf   rg   rh   rO   rO   rP   __init__}   s    zHeadersParser.__init__rA   linesri   c                 C   sP  t  }g }d}|d }t|}|r@z|dd\}}W n tyT   t|d Y n0 t|dkrjt||d |d hddh@ rt||d}t|| jkrtd|	d	d
t
| jt
t||	dd}	t|	st|t|}
|d7 }|| }| jo|o|d dv }|r|g}|r|
t|7 }
|
| jkrhtd|	d	d
t
| jt
|
|| |d7 }||k r|| }|r|d dv }nd}qq&d|}n0|
| jkrtd|	d	d
t
| jt
|
|d}|	dd}d|v sd|v sd|v r$t|||	| |||f q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'   lstriprg   r)   formatdecoderL   r:   	fullmatchrk   appendjoinstripaddr   tuple)rl   ro   rB   rC   Z	lines_idxline
line_countZbnameZbvaluenameheader_lengthZcontinuationZ
bvalue_lstvaluerO   rO   rP   parse_headers   s    








zHeadersParser.parse_headers)rc   rd   rc   F)rI   rJ   rK   rS   rN   rm   r   bytesr   r/   r   rO   rO   rO   rP   r0   |   s       
r0   )rB   ri   c                 C   s   |  tjd dv S )z)Check if the upgrade header is supported. >   Z	websocketZtcp)getr   UPGRADElowerrB   rO   rO   rP   _is_supported_upgrade   s    r   c                   @   s  e Zd ZU dZee ed< dee ee	j
 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 )r1   Frh   N   rc   rd   T)protocollooplimitre   rf   rg   timerrQ   r>   payload_exceptionresponse_with_bodyread_until_eofauto_decompressri   c                 C   s   || _ || _|| _|| _|| _|| _|| _|	| _|
| _|| _	|| _
g | _d| _d| _d | _d | _|| _|| _t|||| j| _d S )Nrx   F)r   r   re   rf   rg   r   rQ   r>   r   r   r   _lines_tail	_upgraded_payload_payload_parser_auto_decompress_limitr0   rh   _headers_parser)rl   r   r   r   re   rf   rg   r   rQ   r>   r   r   r   r   rO   rO   rP   rm      s*    
zHttpParser.__init__rn   c                 C   s   d S rj   rO   )rl   ro   rO   rO   rP   parse_message  s    zHttpParser.parse_messageri   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 )Nrq   z
rx   )r   feed_eofr   r   r   r   	Exceptionr   rl   rO   rO   rP   r     s    


*zHttpParser.feed_eofr6   rx   )dataSEPEMPTYCONTENT_LENGTHMETH_CONNECTSEC_WEBSOCKET_KEY1ri   c                    s  g }| j r| j | d }| _ t|}d}	| j}
|	|k r| jd u r| js|||	}||	krt| jst|t| }	q.||	kr||	| }|dkr|d}| j| |t| }	| jd |krz| 	| jW | j
  n| j
  0 tt d fdd}| }|jv rt|jo.tj| _td	| j}td
d}| jd us\J t|pvt|ott|}|s|d ur|dksjr| jst| j| j|
| jd}t||j|j| j| j| j| j d	}|j!s|| _n||krBt"t#sJ t| j| j|
| jd}d| _t|jj| j| j d| _nh|s|d u r| j$rt| j| j|
| jd}t||j|j| j| j| j| j d	}|j!s|| _nt%}||f n||	d  | _ |}qq.| jd u r| jr| jrJ qq.|r|	|k r| jrJ | jd us$J z| j&||	d  |\}}W n\ t'y } zB|}| j(d urr| (t)|}t*| jj+|| d}d}W Y d }~n
d }~0 0 |rd}	t|}d | _q.q.qq.|r|	|k r||	d  }n|}|| j|fS )Nrx   r   r7      rq   r   c                     s2   j  } | d u rd S t| s*t t| S rj   )rB   r   r<   r   r'   rS   )Z
length_hdrr   msgrO   rP   get_content_lengthX  s    
z0HttpParser.feed_data.<locals>.get_content_lengthr>   rQ   )r   r   r   )lengthrG   r>   rE   rQ   r   r   rh   T)r>   rE   r   rh   ),r   r|   r   r   r   findr   rstripr   r   clearr   rS   rB   r'   rF   r   getattrr>   r   r"   rN   r    rG   r.   r   r   HttpPayloadParserrE   rQ   r   r   rh   done
isinstancer4   r   r-   	feed_dataBaseExceptionr   rL   r!   payload)rl   r   r   r   r   r   r   messagesZdata_len	start_posr   posr   r   r   r>   rQ   Z
empty_bodyr   Zpayload_parsereofZunderlying_excZreraised_excrO   r   rP   r   +  s
   






zHttpParser.feed_datarA   c              
      sB  | 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}	|	r|	 }
|
dkrd}n&|
d	krd}n|
d
krȈ tjrd} tj}|r| }|dv r|} tj}|dur2d| krd}ntdtj v r2t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 )rO   r   N)r|   Zgetall).0hr   rO   rP   	<genexpr>  rx   z+HttpParser.parse_headers.<locals>.<genexpr>zDuplicate 'z' header found.closeTz
keep-aliverF   )gzipdeflatebrrG   z'Request has invalid `Transfer-Encoding`z6Transfer-Encoding can't be present with Content-Length)r   r   r   r   ZCONTENT_LOCATIONZCONTENT_RANGEZCONTENT_TYPEZETAGZHOSTZMAX_FORWARDSZSERVERTRANSFER_ENCODINGZ
USER_AGENTnextr#   r   Z
CONNECTIONr   r   ZCONTENT_ENCODING)rl   ro   rC   Z
close_connencodingrF   rG   Z
singletonsZbad_hdrconnvencterO   r   rP   r     sV    

zHttpParser.parse_headers)valri   c                 C   s
   || _ dS )zZSet connection upgraded (to websocket) mode.

        :param bool val: new state.
        N)r   )rl   r   rO   rO   rP   set_upgraded(  s    zHttpParser.set_upgraded)NNr   rc   rd   rc   NNNNTFT)$rI   rJ   rK   rh   r   rN   rM   r   r   asyncioZAbstractEventLooprS   r   rL   r   r   rm   abcabstractmethodr   r   rT   r   r   r   r   r   r   _SEPr   r   r.   r   r/   r   r   rO   rO   rO   rP   r1      sl   
             
' ;Dr1   c                   @   s$   e Zd ZdZee edddZdS )r2   zRead request status line.

    Exception .http_exceptions.BadStatusLine
    could be raised in case of any errors in status line.
    Returns RawRequestMessage.
    rn   c                 C   s  |d  dd}z|jddd\}}}W n tyD   t|d Y n0 t|| jkrntdt| jtt|t	|st|t
	|}|d u rt|tt|dt|d}|d	krtj|d
d}n|dr|d\}	}
}|	d\}	}}tj|	||d
d}nP|dkr2|dkr2t|d
d}n.t|d
d}|jdkr`t|jdd d| |\}}}}}}|d u r|tkrd
}nd}t||||||||||
S )Nr   rv   rw    rV   maxsplitStatus line is too longr   ZCONNECTT)	authorityencoded/#?)r?   Zquery_stringfragmentr   *OPTIONS)r   r   )errorslatin1F)r   r}   r~   r$   r|   re   r)   rL   r:   r   r;   r+   rS   groupr   build
startswith	partitionschemer(   encoder   r,   r4   )rl   ro   r   r>   r?   r@   match	version_orH   Z	path_partZ_hash_separatorZurl_fragmentZ_question_mark_separatorZqs_partrB   rC   r   rE   rF   rG   rO   rO   rP   r   8  sr    



zHttpRequestParser.parse_messageN)rI   rJ   rK   __doc__r   r   r4   r   rO   rO   rO   rP   r2   0  s   r2   c                
       sd   e Zd ZdZe Zd	eee e	e	e
ee
eef  eef d fddZee edddZ  ZS )
r3   zRead response status line and headers.

    BadStatusLine could be raised in case of any errors in status line.
    Returns RawResponseMessage.
    N)r   r   argskwargsri   c                    s0   |d u rt rdnd}t j||g|R i |S )Nr6   r7   )r   superr   )rl   r   r   r   r   	__class__rO   rP   r     s    zHttpResponseParser.feed_datarn   c              
   C   s  |d  dd}z|jdd\}}W n ty@   t|d Y n0 z|jdd\}}W n tyt   | }d}Y n0 t|| jkrtdt| jtt|t	
|}|d u rt|tt|dt|d}t|d	kst
|st|t|}| |\}	}
}}}}|d u rx|tkr,d
}nLd|  krDdk sPn |dv rVd}n"tj|	v sntj|	v rtd}nd
}t||| |	|
||||	S )Nr   rv   rw   r   r   r   r   rV   rW   Td      >   i0     F)r   r}   r~   r$   r   r|   re   r)   rL   r;   r   r+   rS   r   r<   r   r,   r   r   r   r5   )rl   ro   r   r@   statusrR   r   r   Zstatus_irB   rC   r   rE   rF   rG   rO   rO   rP   r     s`    




$z HttpResponseParser.parse_message)N)rI   rJ   rK   r   r   rh   r   r   r   r   r   r   r5   r.   rN   r   r   __classcell__rO   rO   r   rP   r3     s    r3   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   rG   rE   rQ   r>   r   r   rh   ri   c
                 C   s   d| _ tj| _tj| _d| _d| _|| _	|	| _
d| _|rN|rN| j	rNt||}
n|}
|sntj| _|
  d| _n<|r|tj| _n.|d urtj| _|| _ | j dkr|
  d| _|
| _d S )Nr   rx   FT)_lengthrU   r[   _typer\   r^   _chunk_chunk_size_chunk_tailr   rk   r   DeflateBufferrX   r   rZ   rY   r   )rl   r   r   rG   rE   rQ   r>   r   r   rh   Zreal_payloadrO   rO   rP   rm     s4    

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   rU   r[   r   r   rY   r&   rZ   r*   r   rO   rO   rP   r     s    zHttpPayloadParser.feed_eofr6      ;)chunkr   	CHUNK_EXTri   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rn| j	r| j	| }d| _	|r| j
tjkr||}|dkr||d|}|dkr|d | }n|d | }| jr| }tt|sPt|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rF| j}t|}||kr|| | _| j|| d
S d| _| j|d | | ||d  }tj| _
| j  | j
tjkr| jrt|drt|d	d  }|d t| |kr|t|d  }tj| _
n
|| _	d
S | j
tjkr"|d t| }||kr| j  d|t|d  fS |sd
S ||d d	 kr|| _	d
S tj| _
| j
tjkr||}|dkr`||t| d  }tj| _
q|| _	d
S qn | j tj kr| j|t| d
S )Nr   )Trx   Trx   asciirw      r   r   )Frx   )!r   rU   rY   r   r|   r   r   r   rZ   r   r   r\   r^   r   rk   r   rer   r=   r*   r   r!   rS   r   ra   r   r_   r   begin_http_chunk_receivingr`   end_http_chunk_receivingrb   r[   )rl   r   r   r  requiredZ	chunk_lenr   iZsize_bexcsizeheadrO   rO   rP   r     s    
















zHttpPayloadParser.feed_data)NFNNNTTF)r6   r   )rI   rJ   rK   r.   r   rS   rN   rL   rm   r   r   r   r   r   rO   rO   rO   rP   r     s4           . 
r   c                   @   s   e Zd ZU dZeed< eee ddddZ	e
fe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   ri   c                 C   sJ   || _ d| _|| _d| _|  |dkr:ts0tdt | _nt|d| _d S )Nr   Fr   zECan not decode content-encoding: brotli (br). Please install `Brotli`)r   )	r  r
  r   _started_decodingr   r%   r   r  r   )rl   r  r   rO   rO   rP   rm     s    
zDeflateBuffer.__init__)r	  	exc_causeri   c                 C   s   t | j|| d S rj   )r!   r  )rl   r	  r  rO   rO   rP   r!     s    zDeflateBuffer.set_exception)r   r
  ri   c                 C   s   |sd S |  j |7  _ | jsF| jdkrF|d d@ dkrFt| jdd| _z| j|}W n  tyv   td| j Y n0 d| _|r| j	|t
| d S )Nr   r         T)r   Zsuppress_deflate_headerz#Can not decode content-encoding: %s)r
  r  r   r   r  Zdecompress_syncr   r%   r  r   r|   )rl   r   r
  rO   rO   rP   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  flushr
  r  r   r|   r   r   r%   r   )rl   r   rO   rO   rP   r     s    
zDeflateBuffer.feed_eofc                 C   s   | j   d S rj   )r  r  r   rO   rO   rP   r    s    z(DeflateBuffer.begin_http_chunk_receivingc                 C   s   | j   d S rj   )r  r  r   rO   rO   rP   r    s    z&DeflateBuffer.end_http_chunk_receiving)rI   rJ   rK   r   r   rM   r.   r   rL   rm   r   r   r!   r   rS   r   r   r  r  rO   rO   rO   rP   r     s   
 
r   )r2   r3   r4   r5   )fr   r   r  string
contextlibr   enumr   typingr   r   r   r   r   r	   r
   r   r   r   r   r   r   r   Z	multidictr   r   r   Zyarlr   r   r   Zbase_protocolr   Zcompression_utilsr   r   r   Zhelpersr   r   r   r   r    r!   r"   Zhttp_exceptionsr#   r$   r%   r&   r'   r(   r)   r*   Zhttp_writerr+   r,   Zstreamsr-   r.   Ztypedefsr/   __all__r   set	printabler8   rL   rM   escaper9   compiler:   ASCIIr;   r<   r=   r   r4   r5   rT   rU   r\   r0   rN   r   ABCr1   r2   r3   r   r   ZHttpRequestParserPyZHttpResponseParserPyZRawRequestMessagePyZRawResponseMessagePyZ_http_parserZHttpRequestParserCZHttpResponseParserCZRawRequestMessageCZRawResponseMessageCImportErrorrO   rO   rO   rP   <module>   sh   
@$	(
		"l  E^U <N