o
    LDi                     @   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$m%Z%m&Z& ddl'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z. ddl/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8 ddl9m:Z:m;Z; ddl<m=Z=m>Z> ddl?m@Z@ dZAed ZBeCejDZEeeeF  eGd< eHdZIeeF eGd< eJdeI dZKeeeF  eGd< eJdejLZMeeeF  eGd< eJdejLZNeeeF  eGd< eJdZOeeeP  eGd< G dd deZQG d d! d!eZRed"eQeRZSG d#d$ d$eZTG d%d& d&eZUG d'd( d(ZVd)eeF d*eWfd+d,ZXG d-d. d.e jYeeS ZZG d/d0 d0eZeQ Z[G d1d2 d2eZeR Z\G d3d4 d4Z]G d5d6 d6Z^e[Z_e\Z`eQZaeRZbze,sdd7lcm[Z[m\Z\mQZQmRZR e[Zde\ZeeQZfeRZgW dS W dS  ehy   Y dS w )8    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HAS_ZSTDBrotliDecompressorZLibDecompressorZSTDDecompressor)_EXC_SENTINELDEBUGEMPTY_BODY_METHODSEMPTY_BODY_STATUS_CODESNO_EXTENSIONSBaseTimerContextset_exception)	BadHttpMessageBadHttpMethod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 )r7   methodpathversionCIMultiDictProxy[str]headersraw_headersshould_closecompressionupgradechunkedurlN)
__name__
__module____qualname__str__annotations__r.   r2   boolr   r    rR   rR   _/var/www/www-root/data/www/77.83.87.30/venv/lib/python3.10/site-packages/aiohttp/http_parser.pyr7   W   s   
 r7   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 )r8   rC   codereasonrE   rF   rG   rH   rI   rJ   N)rL   rM   rN   r.   rP   intrO   r   r2   rQ   r   rR   rR   rR   rS   r8   d   s   
 r8   _MsgTc                   @   s   e Zd ZdZdZdZdZdS )
ParseStater   r         N)rL   rM   rN   
PARSE_NONEPARSE_LENGTHPARSE_CHUNKEDPARSE_UNTIL_EOFrR   rR   rR   rS   rX   s   s
    rX   c                   @   s    e Zd ZdZdZdZdZdZdS )
ChunkStater   r   rY   rZ      N)rL   rM   rN   PARSE_CHUNKED_SIZEPARSE_CHUNKED_CHUNKPARSE_CHUNKED_CHUNK_EOFPARSE_MAYBE_TRAILERSPARSE_TRAILERSrR   rR   rR   rS   r_   {   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 )r3        Fmax_line_sizemax_headersmax_field_sizelaxreturnNc                 C   s   || _ || _|| _|| _d S N)rh   ri   rj   _lax)selfrh   ri   rj   rk   rR   rR   rS   __init__   s   
zHeadersParser.__init__linesrD   c                 C   s<  t  }g }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)rt   ru   zrequest header field {}    
 )r   lensplit
ValueErrorr*   lstriprj   r,   formatdecoderO   r=   	fullmatchrn   appendjoinstripaddr   tuple)ro   rq   rE   rF   	lines_idxline
line_countbnamebvaluenameheader_lengthcontinuation
bvalue_lstvaluerR   rR   rS   parse_headers   s   










QzHeadersParser.parse_headers)rf   rg   rf   F)rL   rM   rN   rV   rQ   rp   r   bytesr   r2   r   rR   rR   rR   rS   r3      s*    

r3   rE   rl   c                 C   s   |  tjd dv S )z)Check if the upgrade header is supported. >   tcp	websocket)getr   UPGRADElowerrE   rR   rR   rS   _is_supported_upgrade   s   r   c                   @   sn  e Zd ZU dZee ed< 													d0d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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ejd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 )1r4   Frk   N   rf   rg   Tprotocollooplimitrh   ri   rj   timerrT   rA   payload_exceptionresponse_with_bodyread_until_eofauto_decompressrl   c                 C   s   || _ || _|| _|| _|| _|| _|| _|	| _|
| _|| _	|| _
g | _d| _d| _d | _d | _|| _|| _t|||| j| _d S )Nrz   F)r   r   rh   ri   rj   r   rT   rA   r   r   r   _lines_tail	_upgraded_payload_payload_parser_auto_decompress_limitr3   rk   _headers_parser)ro   r   r   r   rh   ri   rj   r   rT   rA   r   r   r   r   rR   rR   rS   rp      s*   

zHttpParser.__init__rq   c                 C      d S rm   rR   )ro   rq   rR   rR   rS   parse_message     zHttpParser.parse_messagetec                 C   r   rm   rR   ro   r   rR   rR   rS   _is_chunked_te!  r   zHttpParser._is_chunked_tec                 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 )Nrs   z
rz   )r   feed_eofr   r   r   r   	Exceptionr   ro   rR   rR   rS   r   $  s   



 zHttpParser.feed_eofr9   rz   dataSEPEMPTYCONTENT_LENGTHMETH_CONNECTSEC_WEBSOCKET_KEY1c                    s
  g }| j r| j | d}| _ t|}d}	| j}
d}|	|k r| jd u rm| jsm|||	}||	kr<| js<|t| }	q||	krc|rGtd||	| }|dkrV|d}| j	| |t| }	| jd |krbz| 
| 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v pt|o|tv }|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|| _nb||kr"t$t%sJ t| j| j|
| jd}d| _t|jj| j | j!| j"d| _n6|sV|d u rV| j&rVt| j| j|
| jd}t||j|j| j| j| j | j!| j"d
}|j#sU|| _nt'}|	|f j(}n||	d  | _ |}n| jd u r~| jr~| jr}J np|r|	|k r| jrJ | jd usJ z| j)||	d  |\}}W n7 t*y } z*|}| j+d ur| +t,|}t-| jj.|| d}d}t$|tt/frЂ W Y d }~nd }~ww |rd}	t|}d | _qnn|	|k s|r|	|k r||	d  }n|}|| j|fS )Nrz   r   FzData after `Connection: close`r:      rs   rl   c                     s2   j  } | d u rd S t| st t| S rm   )rE   r   r?   r   r*   rV   )
length_hdrr   msgrR   rS   get_content_lengthe  s   
z0HttpParser.feed_data.<locals>.get_content_lengthrA   rT   )r   r   r   )	lengthrJ   rA   rH   rT   r   r   rk   headers_parserT)rA   rH   r   rk   r   )0r   r~   r   r   r   findr   r%   rstripr   r   clearr   rV   rE   r*   rI   r   getattrrA   r   r!   rQ   r    rJ   r1   r   r   HttpPayloadParserrH   rT   r   r   rk   r   done
isinstancer7   r   r0   rG   	feed_dataBaseExceptionr   rO   r$   payloadr-   )ro   r   r   r   r   r   r   messagesdata_len	start_posr   rG   posr   r   r   rA   rT   
empty_bodyr   payload_parsereofunderlying_excreraised_excrR   r   rS   r   4  s*  








  +zHttpParser.feed_datarD   c              
      s0  | 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r| |rd}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 )rR   r   N)r~   getall).0hr   rR   rS   	<genexpr>  s   & z+HttpParser.parse_headers.<locals>.<genexpr>zDuplicate 'z' header found.closeTz
keep-aliverI   )gzipdeflatebrzstdz6Transfer-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_ENCODINGr   )ro   rq   rF   
close_connencodingrI   rJ   
singletonsbad_hdrconnvencr   rR   r   rS   r     sT   


zHttpParser.parse_headersvalc                 C   s
   || _ dS )zZSet connection upgraded (to websocket) mode.

        :param bool val: new state.
        N)r   )ro   r   rR   rR   rS   set_upgraded;  s   
zHttpParser.set_upgraded)NNr   rf   rg   rf   NNNNTFT)%rL   rM   rN   rk   r   rQ   rP   r   r   asyncioAbstractEventLooprV   r#   rO   r   r   rp   abcabstractmethodr   r   rW   r   r   r   r   r   r   r   _SEPr   r   r1   r   r2   r   r   rR   rR   rR   rS   r4      s   
 	


'
 F
Br4   c                   @   s8   e Zd ZdZdee defddZdede	fddZ
d	S )
r5   zRead request status line.

    Exception .http_exceptions.BadStatusLine
    could be raised in case of any errors in status line.
    Returns RawRequestMessage.
    rq   rl   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d  \}}}}}}|d u r|tkrd
}nd}t||||||||||
S )Nr   rx   ry    rY   maxsplitStatus line is too longr   CONNECTT)	authorityencoded/#?)rB   query_stringfragmentr  *OPTIONS)r  r   )errorslatin1F)r   r   r   r&   r~   rh   r,   rO   r=   r   r>   r'   r.   rV   groupr   build
startswith	partitionschemer+   encoder   r/   r7   )ro   rq   r   rA   rB   rC   match	version_orK   	path_part_hash_separatorurl_fragment_question_mark_separatorqs_partrE   rF   r   rH   rI   rJ   rR   rR   rS   r   K  st   




zHttpRequestParser.parse_messager   c                 C   s,   |j dddd d dkrdS td)	N,r   r   rs    	rJ   Tz'Request has invalid `Transfer-Encoding`)rsplitr   r   r%   r   rR   rR   rS   r     s    z HttpRequestParser._is_chunked_teN)rL   rM   rN   __doc__r   r   r7   r   rO   rQ   r   rR   rR   rR   rS   r5   C  s    Ur5   c                       s   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dedefddZ  ZS )r6   zRead response status line and headers.

    BadStatusLine could be raised in case of any errors in status line.
    Returns RawResponseMessage.
    Nr   r   argskwargsrl   c                    s0   |d u r
t rdnd}t j||g|R i |S )Nr9   r:   )r   superr   )ro   r   r   r  r  	__class__rR   rS   r     s   zHttpResponseParser.feed_datarq   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d  \}	}
}}}}|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   rx   ry   r   r   r   r   rY   rZ   Td      >   0     F)r   r   r   r'   r   r~   rh   r,   rO   r>   r   r.   rV   r  r?   r   r/   r   r   r   r8   )ro   rq   r   rC   statusrU   r  r  status_irE   rF   r   rH   rI   rJ   rR   rR   rS   r     sd   


z HttpResponseParser.parse_messager   c                 C   s    |j dddd d dkS )Nr  r   r   rs   r  rJ   )r  r   r   r   rR   rR   rS   r     s    z!HttpResponseParser._is_chunked_term   )rL   rM   rN   r  r   rk   r   r   r   r   r   r   r8   r1   rQ   r   r   rO   r   __classcell__rR   rR   r  rS   r6     s"    ?r6   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   rJ   rH   rT   rA   r   r   rk   r   rl   c
                C   s   d| _ tj| _tj| _d| _d| _|| _	|	| _
|
| _g | _d| _|r-|r-| j	r-t||}n|}|s=tj| _|  d| _n|rDtj| _n|d ur[tj| _|| _ | j dkr[|  d| _|| _d S )Nr   rz   FT)_lengthrX   r^   _typer_   ra   _chunk_chunk_size_chunk_tailr   rn   r   _trailer_linesr   DeflateBufferr[   r   r]   r\   r   )ro   r   r   rJ   rH   rT   rA   r   r   rk   r   real_payloadrR   rR   rS   rp     s8   


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 )Nz1Not enough data to satisfy content length header.z2Not enough data to satisfy transfer length header.)	r)  rX   r^   r   r   r\   r)   r]   r-   r   rR   rR   rS   r   3  s   zHttpPayloadParser.feed_eofr9      ;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 | }d|||  }	v rtd|	}
t| j|
 |
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r4| j}t|}||kr|| | _| j|| dS d| _| j|d | | ||d  }tj| _
| j  | j
tjkrh| jrK|d
rK|dd  }|d t| |krc|t|d  }tj| _
n|| _	dS | j
tjkr||}|dk r~|| _	dS |d | }||t| d  }|dkr|d
}| j !| | j d dkrz| j"#| j \}}W | j $  n| j $  w | j  d|fS |s[dS | j tj%kr| j|t| dS )Nr   )Trz   Trz   r:   z"Unexpected LF in chunk-extension: asciiry      r   r   )Frz   rs   )&r)  rX   r\   r(  r~   r   r   r   r]   r,  r*  r_   ra   r   r-   r$   rn   r   rer   r@   r   rV   r   re   r  rb   r+  begin_http_chunk_receivingrc   end_http_chunk_receivingr   r-  r   r   r   r   r^   )ro   r1  r   r2  required	chunk_lenr   isize_bextexcsizer   trailersraw_trailersrR   rR   rS   r   ?  s   


p












czHttpPayloadParser.feed_data)NFNNNTTFrl   N)r9   r0  )rL   rM   rN   r1   r   rV   rQ   rO   r3   rp   r   r   r   r   r   rR   rR   rR   rS   r      sV    	


2
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   rl   Nc                 C   st   || _ d| _| j|_|| _d| _|  |dkr"tstdt | _d S |dkr2t	s,tdt
 | _d S t|d| _d S )Nr   Fr   zECan not decode content-encoding: brotli (br). Please install `Brotli`r   zRCan not decode content-encoding: zstandard (zstd). Please install `backports.zstd`)r   )rC  r>  total_compressed_bytesr   _started_decodingr   r(   r   rB  r   r   r   )ro   rC  r   rR   rR   rS   rp     s&   zDeflateBuffer.__init__r=  	exc_causec                 C   s   t | j|| d S rm   )r$   rC  )ro   r=  rF  rR   rR   rS   r$     s   zDeflateBuffer.set_exceptionr1  r>  c                 C   s   |sd S |  j |7  _ | j | j_| js(| jdkr(|d d@ dkr(t| jdd| _z| j|}W n ty>   t	d| j w d| _|rO| j
|t| d S d S )Nr   r         T)r   suppress_deflate_headerz#Can not decode content-encoding: %s)r>  rC  rD  rE  r   r   rB  decompress_syncr   r(   r   r~   )ro   r1  r>  rR   rR   rS   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   )
rB  flushr>  rC  r   r~   r   r   r(   r   )ro   r1  rR   rR   rS   r     s   
zDeflateBuffer.feed_eofc                 C      | j   d S rm   )rC  r6  r   rR   rR   rS   r6       z(DeflateBuffer.begin_http_chunk_receivingc                 C   rL  rm   )rC  r7  r   rR   rR   rS   r7    rM  z&DeflateBuffer.end_http_chunk_receivingrA  )rL   rM   rN   r  r   rP   r1   r   rO   rp   r   r   r$   r   rV   r   r   r6  r7  rR   rR   rR   rS   r.    s    
 

!

r.  )r5   r6   r7   r8   )ir   r   r5  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   r   r   helpersr   r   r    r!   r"   r#   r$   http_exceptionsr%   r&   r'   r(   r)   r*   r+   r,   r-   http_writerr.   r/   streamsr0   r1   typedefsr2   __all__r   set	printabler;   rO   rP   escaper<   compiler=   ASCIIr>   r?   r@   r   r7   r8   rW   rX   r_   r3   rQ   r   ABCr4   r5   r6   r   r.  HttpRequestParserPyHttpResponseParserPyRawRequestMessagePyRawResponseMessagePy_http_parserHttpRequestParserCHttpResponseParserCRawRequestMessageCRawResponseMessageCImportErrorrR   rR   rR   rS   <module>   sn   
 @$,			"l  QdY @W
