o
    mi                     @   sj  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&m'Z' ddl(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/ ddl0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z: ddl;m<Z<m=Z= ddl>m?Z?m@Z@ ddlAmBZB dZCed ZDeEejFZGeeeH  eId< eJdZKeeH eId< eLdeK dZMeeeH  eId< eLdZNeeeH  eId< eLdejOZPeeeH  eId< eLdejOZQeeeH  eId< eLdZReeeS  eId< eTh d ZUeeTeH  eId!< G d"d# d#eZVG d$d% d%eZWed&eVeWZXG d'd( d(eZYG d)d* d*eZZG d+d, d,Z[d-eeH d.e\fd/d0Z]G d1d2 d2e j^eeX Z_G d3d4 d4e_eV Z`G d5d6 d6e_eW ZaG d7d8 d8ZbG d9d: d:Zce`ZdeaZeeVZfeWZgze-sdd;lhm`Z`maZamVZVmWZW e`ZieaZjeVZkeWZlW dS W dS  emy   Y dS w )<    N)suppress)IntEnum)AnyClassVarFinalGenericListLiteral
NamedTupleOptionalPatternSetTupleTypeTypeVarUnion)CIMultiDictCIMultiDictProxyistr)URL   )hdrs)BaseProtocol)DEFAULT_MAX_DECOMPRESS_SIZE
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DecompressSizeErrorInvalidHeaderInvalidURLErrorLineTooLongTransferEncodingError)HttpVersionHttpVersion10)EMPTY_PAYLOADStreamReader)
RawHeaders)HeadersParser
HttpParserHttpRequestParserHttpResponseParserRawRequestMessageRawResponseMessage)   
   
ASCIISETz!#$%&'*+-.^_`|~_TCHAR_SPECIALSz
[0-9A-Za-zz]+TOKENREz[\x00-\x08\x0a-\x1f\x7f]_FIELD_VALUE_FORBIDDEN_CTL_REzHTTP/(\d)\.(\d)VERSREz\d+DIGITSs   [0-9a-fA-F]+	HEXDIGITS>
   
user-agentcontent-typemax-forwardscontent-rangecontent-lengthcontent-locationtransfer-encodingetaghostserverSINGLETON_HEADERSc                   @   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 )r9   methodpathversionCIMultiDictProxy[str]headersraw_headersshould_closecompressionupgradechunkedurlN)
__name__
__module____qualname__str__annotations__r0   r4   boolr   r    r`   r`   Q/home/ubuntu/SoloSpeech/.venv/lib/python3.10/site-packages/aiohttp/http_parser.pyr9   q   s   
 r9   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 )r:   rQ   codereasonrS   rT   rU   rV   rW   rX   N)rZ   r[   r\   r0   r^   intr]   r   r4   r_   r   r`   r`   r`   ra   r:   ~   s   
 r:   _MsgTc                   @   s   e Zd ZdZdZdZdZdS )
ParseStater   r         N)rZ   r[   r\   
PARSE_NONEPARSE_LENGTHPARSE_CHUNKEDPARSE_UNTIL_EOFr`   r`   r`   ra   rf      s
    rf   c                   @   s    e Zd ZdZdZdZdZdZdS )
ChunkStater   r   rg   rh      N)rZ   r[   r\   PARSE_CHUNKED_SIZEPARSE_CHUNKED_CHUNKPARSE_CHUNKED_CHUNK_EOFPARSE_MAYBE_TRAILERSPARSE_TRAILERSr`   r`   r`   ra   rm      s    rm   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 )r5        Fmax_line_sizemax_headersmax_field_sizelaxreturnNc                 C   s   || _ || _|| _|| _d S N)rv   rw   rx   _lax)selfrv   rw   rx   ry   r`   r`   ra   __init__   s   
zHeadersParser.__init__linesrR   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}|dd	}	t|	sWt||d7 }|| }| j	oi|oi|d d
v }
|
rt|}|g}|
r|t|7 }|| j
kr|d d| }t|d d d | j
|| |d7 }||k r|| }|r|d d
v }
nd}n|
sud|}|d}|dd	}| j	rd|v sd|v sd|v rt|n	t|rt|| j	s|	|v r|	 tv rtd|	 d||	| |||f |st|t|fS )Nr      :r       	   s    	utf-8surrogateescape)r   r   s   :     d      ...
 zDuplicate 'z' header found.)r   lensplit
ValueErrorr,   lstripdecoder?   	fullmatchr|   rx   joinr.   appendstripr@   searchlowerrN   r&   addr   tuple)r}   r   rS   rT   	lines_idxline
line_countbnamebvaluenamecontinuationheader_length
bvalue_lstheader_linevaluer`   r`   ra   parse_headers   sr   







AzHeadersParser.parse_headers)rt   ru   rt   F)rZ   r[   r\   rd   r_   r~   r   bytesr   r4   r   r`   r`   r`   ra   r5      s*    

r5   rS   rz   c                 C   s"   |  tjd}| o| dv S )z)Check if the upgrade header is supported. >   tcp	websocket)getr   UPGRADEisasciir   )rS   ur`   r`   ra   _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 )1r6   Fry   N   rt      Tprotocollooplimitrv   rw   rx   timerrb   rO   payload_exceptionresponse_with_bodyread_until_eofauto_decompressrz   c                 C   s   || _ || _|| _|| _|| _|| _|| _|| _|	| _|
| _|| _	|| _
g | _d| _d| _d | _d | _|| _|| _t|||| j| _d S )Nr   F)r   r   rv   rw   rx   r   rb   rO   r   r   r   _lines_tail	_upgraded_payload_payload_parser_auto_decompress_limitr5   ry   _headers_parser)r}   r   r   r   rv   rw   rx   r   rb   rO   r   r   r   r   r`   r`   ra   r~     s,   

zHttpParser.__init__r   c                 C      d S r{   r`   )r}   r   r`   r`   ra   parse_message+     zHttpParser.parse_messagetec                 C   r   r{   r`   r}   r   r`   r`   ra   _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 )Nr   z
r   )r   feed_eofr   r   r   r   	Exceptionr   r}   r`   r`   ra   r   1  s   



 zHttpParser.feed_eofr;   r   dataSEPEMPTYCONTENT_LENGTHMETH_CONNECTSEC_WEBSOCKET_KEY1c                    s  g }| j r| j | d}| _ t|}d}	| j}
| j}d}|	|k rB| jd u r| js|||	}||	kr?| js?|t| }	q||	kr|rJtd||	| }|dkrY|	d}t||krjt
|d d d || j| | j}t| j| jkrtd	|t| }	| jd
 |kr| jt| j }z| | 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s*t| j| j|
| jd}t ||j|j!| j"| j#| j$| j%| j&| j| j|d}|j's)|| _nl||kr[t(t)s7J t| j| j|
| jd}d| _t |jj!| j$| j%| j&| j| j|d	| _n;|s|d u r| j*rt| j| j|
| jd}t ||j|j!| j"| j#| j$| j%| j&| j| j|d}|j's|| _nt+}||f j,}n||	d  | _ t| j | jkrt
| j d d d | j|}n| jd u r| jr| jrJ np|r=|	|k r=| jrJ | jd usJ z| j-||	d  |\}}W n7 t.y. } z*|}| j/d ur| /t0|}t1| jj2|| d}d}t(|tt3fr$ W Y d }~nd }~ww |r<d}	t|}d | _qnn|	|k s!|rQ|	|k rQ||	d  }n|}|| j|fS )Nr   r   FzData after `Connection: close`r<      r   r   zToo many headers receivedr   rz   c                     s2   j  } | d u rd S t| st t| S r{   )rS   r   rB   r   r,   rd   )
length_hdrr   msgr`   ra   get_content_length}  s   
z0HttpParser.feed_data.<locals>.get_content_lengthrO   rb   )r   r   r   )lengthrX   rO   rV   rb   r   r   ry   headers_parserrv   rx   max_trailersT)rO   rV   r   ry   r   rv   rx   r   )4r   r   r   rv   r   r   findr   r&   rstripr.   r   rx   rw   r   clearr   rd   rS   r,   rW   r   getattrrO   r   r"   r_   r!   rX   r3   r   r   HttpPayloadParserrV   rb   r   r   ry   r   done
isinstancer9   r   r2   rU   	feed_dataBaseExceptionr   r]   r%   payloadr/   )r}   r   r   r   r   r   r   messagesdata_len	start_posr   max_line_lengthrU   posr   r   r   r   rO   rb   
empty_bodyr   payload_parsereofunderlying_excreraised_excr`   r   ra   r   A  sN  








  @zHttpParser.feed_datarR   c                 C   s   | j |\}}d}d}d}d}|tjd}|r9dd |D }	d|	v r'd}nd|	v r-d}d	|	v r9|tjr9d}|tjd
}
|
 rL|
	 dv rL|
}|tj
}|durf| |r]d}tj|v rft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.
        NFr`   c                 S   s:   h | ]}d d | dD D ]}|r| r| qqS )c                 s   s    | ]}| d V  qdS ) 	N)r   ).0partr`   r`   ra   	<genexpr>3  s    z5HttpParser.parse_headers.<locals>.<setcomp>.<genexpr>,)r   r   r   )r   
conn_valuetokenr`   r`   ra   	<setcomp>0  s    z+HttpParser.parse_headers.<locals>.<setcomp>closeTz
keep-aliverW   r   >   brgzipzstddeflatez6Transfer-Encoding can't be present with Content-Length)r   r   getallr   
CONNECTIONr   r   CONTENT_ENCODINGr   r   TRANSFER_ENCODINGr   r   r&   )r}   r   rS   rT   
close_connencodingrW   rX   conn_valuesconn_tokensencr   r`   r`   ra   r     s8   


zHttpParser.parse_headersvalc                 C   s
   || _ dS )zZSet connection upgraded (to websocket) mode.

        :param bool val: new state.
        N)r   )r}   r  r`   r`   ra   set_upgradedR  s   
zHttpParser.set_upgraded)NNr   rt   r   rt   NNNNTFT)%rZ   r[   r\   ry   r   r_   r^   r   r   asyncioAbstractEventLooprd   r$   r]   r   r   r~   abcabstractmethodr   r   re   r   r   r   r   r   r   r   _SEPr   r   r3   r   r4   r   r  r`   r`   r`   ra   r6      s   
 	


(
 \
6r6   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 )
r7   zRead request status line.

    Exception .http_exceptions.BadStatusLine
    could be raised in case of any errors in status line.
    Returns RawRequestMessage.
    r   rz   c                 C   s~  |d  dd}z|jddd\}}}W n ty    t|d w t|s*t|t|}|d u r7t|tt	|
dt	|
d}|dkrRtj|d	d
}nD|drq|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   r   r    rg   maxsplitr   CONNECTT)	authorityencoded/#?)rP   query_stringfragmentr  *OPTIONS)r  r   )errorslatin1F)r   r   r   r'   r?   r   rA   r(   r0   rd   groupr   build
startswith	partitionschemer-   encoder   r1   r9   )r}   r   r   rO   rP   rQ   match	version_orY   	path_part_hash_separatorurl_fragment_question_mark_separatorqs_partrS   rT   r   rV   rW   rX   r`   r`   ra   r   b  sl   




zHttpRequestParser.parse_messager   c                 C   s8   |j dddd d}| r| dkrdS td)	Nr   r   r	  r   r   rX   Tz'Request has invalid `Transfer-Encoding`)rsplitr   r   r   r&   r   r`   r`   ra   r     s   z HttpRequestParser._is_chunked_teN)rZ   r[   r\   __doc__r   r   r9   r   r]   r_   r   r`   r`   r`   ra   r7   Z  s    Pr7   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 )r8   zRead response status line and headers.

    BadStatusLine could be raised in case of any errors in status line.
    Returns RawResponseMessage.
    Nr   r   argskwargsrz   c                    s0   |d u r
t rdnd}t j||g|R i |S )Nr;   r<   )r    superr   )r}   r   r   r&  r'  	__class__r`   ra   r     s   zHttpResponseParser.feed_datar   c              
   C   sb  |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|}|d u rFt|tt|	dt|	d}t
|dks`t|sdt|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   r   r   r   r	  r   rg   rh   Tr      >   0     F)r   r   r   r(   r   rA   r   r0   rd   r  r   rB   r   r1   r   r   r   r:   )r}   r   r   rQ   statusrc   r  r  status_irS   rT   r   rV   rW   rX   r`   r`   ra   r     s\   


z HttpResponseParser.parse_messager   c                 C   s    |j dddd d dkS )Nr   r   r	  r   r   rX   )r$  r   r   r   r`   r`   ra   r   
  s    z!HttpResponseParser._is_chunked_ter{   )rZ   r[   r\   r%  r    ry   r   r   r  r   r   r   r:   r3   r_   r   r   r]   r   __classcell__r`   r`   r)  ra   r8     s"    :r8   c                   @   s   e Zd Z								d ddd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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   NFTrt   r   )rv   rx   r   r   r   rX   rV   rb   rO   r   r   ry   r   rv   rx   r   rz   c
                C   s   d| _ tj| _tj| _d| _d| _|| _	|	| _
|
| _|| _|| _|| _g | _d| _|r6|r6| j	r6t||}n|}|sFtj| _|  d| _n|rMtj| _n|d urdtj| _|| _ | j dkrd|  d| _|| _d S )Nr   r   FT)_lengthrf   rl   _typerm   ro   _chunk_chunk_size_chunk_tailr   r|   r   _max_line_size_max_field_size_max_trailers_trailer_linesr   DeflateBufferri   r   rk   rj   r   )r}   r   r   rX   rV   rb   rO   r   r   ry   r   rv   rx   r   real_payloadr`   r`   ra   r~     s>   


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.)	r2  rf   rl   r   r   rj   r*   rk   r/   r   r`   r`   ra   r   H  s   zHttpPayloadParser.feed_eofr;      ;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r7| j	r| j
tjksXJ | j}| j
tjkrd| j}t| j	|krwt| j	d d d || j	| }d| _	|r5| 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rtj| _
| jr|dr|dd  }ntj| _
|| _| j  n|| _	dS | j
tjkr`| j}t|}||krC|| | _| j|| dS d| _| j|d | | ||d  }tj | _
| j!  | j
tj kr| jrw|drw|dd  }|d t| |kr|t|d  }tj| _
n%t|t|ks||d t| krtd}t| j| ||| _	dS | j
tjkr3||}|dk r|| _	dS |d | }||t| d  }|dkr|"d}t|| jkrt|d d d | j| j#$| t| j#| j%krt&d| j#d dkr3z| j'(| j#\}}W | j#)  n| j#)  w | j  d|fS |sdS | j tj*krG| j|t| dS )Nr   )Tr   Tr   r   r   r<   z"Unexpected LF in chunk-extension: asciir      r   r   )Fr   z3Chunk size mismatch: expected CRLF after chunk datazToo many trailers receivedr   )+r2  rf   rj   r1  r   r   r   r   rk   r5  r3  rm   rp   r6  rs   r7  r.   ro   r   r/   r%   r|   r   rer   rC   r   rd   r   r  r4  begin_http_chunk_receivingrq   end_http_chunk_receivingr   r9  r   r8  r&   r   r   r   rl   )r}   r=  r   r>  required	chunk_lenr   r   isize_bextexcsizer   trailersraw_trailersr`   r`   ra   r   T  s   


  








(





pzHttpPayloadParser.feed_data)NFNNNTTFrz   N)r;   r<  )rZ   r[   r\   r3   r   rd   r_   r]   r5   r~   r   r   r  r   r   r`   r`   r`   ra   r     sj    	


8
r   c                	   @   s   e Zd ZU dZeed< efdedee	 d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   max_decompress_sizerz   Nc                 C   sv   || _ d| _| j|_|| _d| _|  |dkr!tstdt | _n|dkr0t	s+tdt
 | _n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   )rO  rJ  total_compressed_bytesr   _started_decodingr   r)   r   rN  r   r   r   _max_decompress_size)r}   rO  r   rP  r`   r`   ra   r~     s(   


zDeflateBuffer.__init__rI  	exc_causec                 C   s   t | j|| d S r{   )r%   rO  )r}   rI  rT  r`   r`   ra   r%     s   zDeflateBuffer.set_exceptionr=  rJ  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j|| jd d}W n t	yC   t
d	| j w d| _t|| jkrUtd
| j |rb| j|t| d S d S )Nr   r         T)r   suppress_deflate_headerr   )
max_lengthz#Can not decode content-encoding: %sz:Decompressed data exceeds the configured limit of %d bytes)rJ  rO  rQ  rR  r   r   rN  decompress_syncrS  r   r)   r   r+   r   )r}   r=  rJ  r`   r`   ra   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   )
rN  flushrJ  rO  r   r   r   r   r)   r   )r}   r=  r`   r`   ra   r   A  s   
zDeflateBuffer.feed_eofc                 C      | j   d S r{   )rO  rB  r   r`   r`   ra   rB  K     z(DeflateBuffer.begin_http_chunk_receivingc                 C   r[  r{   )rO  rC  r   r`   r`   ra   rC  N  r\  z&DeflateBuffer.end_http_chunk_receivingrM  )rZ   r[   r\   r%  r   r^   r   r3   r   r]   rd   r~   r   r   r%   r   r   r   rB  rC  r`   r`   r`   ra   r:    s2   
 
#

+

r:  )r7   r8   r9   r:   )nr  r  rA  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   r   helpersr   r    r!   r"   r#   r$   r%   http_exceptionsr&   r'   r(   r)   r*   r+   r,   r-   r.   r/   http_writerr0   r1   streamsr2   r3   typedefsr4   __all__r  set	printabler=   r]   r^   escaper>   compiler?   r@   ASCIIrA   rB   rC   r   	frozensetrN   r9   r:   re   rf   rm   r5   r_   r   ABCr6   r7   r8   r   r:  HttpRequestParserPyHttpResponseParserPyRawRequestMessagePyRawResponseMessagePy_http_parserHttpRequestParserCHttpResponseParserCRawRequestMessageCRawResponseMessageCImportErrorr`   r`   r`   ra   <module>   sz   
 @ $0			"\  \aT \h
