a
    `g                     @   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/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6 ddl7m8Z8m9Z9 ddl:m;Z;m<Z< ddl=m>Z> dZ?ed Z@eAejBZCeeeD  eEd< eFdZGeeD eEd< eHdeG dZIeeeD  eEd< eHdejJZKeeeD  eEd< eHdejJZLeeeD  eEd< eHdZMeeeN  eEd< G dd deZOG d d! d!eZPed"eOePZQG d#d$ d$eZRG d%d& d&eZSG d'd( d(ZTeeD eUd)d*d+ZVG d,d- d-e jWeeQ ZXG d.d/ d/eXeO ZYG d0d1 d1eXeP ZZG d2d3 d3Z[G d4d5 d5Z\eYZ]eZZ^eOZ_ePZ`z2e*s dd6lamYZYmZZZmOZOmPZP eYZbeZZceOZdePZeW n ef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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 )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   a/var/www/html/cobodadashboardai.evdpl.com/venv/lib/python3.9/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                   @   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 )r1        FN)max_line_sizemax_headersmax_field_sizelaxreturnc                 C   s   || _ || _|| _|| _d S N)rf   rg   rh   _lax)selfrf   rg   rh   ri   rP   rP   rQ   __init__~   s    zHeadersParser.__init__rB   linesrj   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)rs   rt   zrequest header field {}    
 )r   lensplit
ValueErrorr(   lstriprh   r*   formatdecoderM   r;   	fullmatchrl   appendjoinstripaddr   tuple)rm   rp   rC   rD   Z	lines_idxline
line_countZbnameZbvaluenameheader_lengthZcontinuationZ
bvalue_lstvaluerP   rP   rQ   parse_headers   s    








z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. >   ZtcpZ	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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j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 ) r2   Fri   N   rd   re   T)protocollooplimitrf   rg   rh   timerrR   r?   payload_exceptionresponse_with_bodyread_until_eofauto_decompressrj   c                 C   s   || _ || _|| _|| _|| _|| _|| _|	| _|
| _|| _	|| _
g | _d| _d| _d | _d | _|| _|| _t|||| j| _d S )Nry   F)r   r   rf   rg   rh   r   rR   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   rP   rP   rQ   rn      s*    
zHttpParser.__init__ro   c                 C   s   d S rk   rP   )rm   rp   rP   rP   rQ   parse_message  s    zHttpParser.parse_messageterj   c                 C   s   d S rk   rP   rm   r   rP   rP   rQ   _is_chunked_te  s    zHttpParser._is_chunked_terj   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 )Nrr   z
ry   )r   feed_eofr   r   r   r   	Exceptionr   rm   rP   rP   rQ   r     s    


*zHttpParser.feed_eofr7   ry   )dataSEPEMPTYCONTENT_LENGTHMETH_CONNECTSEC_WEBSOCKET_KEY1rj   c                    s  g }| j r| j | d }| _ t|}d}	| j}
d}|	|k r| jd u r| js|||	}||	krx| jsx|t| }	q2||	kr|rtd||	| }|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slJ |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!d	}|j"s|| _n||krRt#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 j'}n||	d  | _ |}qq2| jd u r| jr| jrJ qq2|r|	|k r| jr*J | jd us:J z| j(||	d  |\}}W n\ t)y } zB|}| j*d ur| *t+|}t,| jj-|| d}d}W Y d }~n
d }~0 0 |rd}	t|}d | _q2q2qq2|r|	|k r||	d  }n|}|| j|fS )Nry   r   FzData after `Connection: close`r8      rr   r   c                     s2   j  } | d u rd S t| s*t t| S rk   )rC   r   r=   r   r(   rT   )Z
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   ri   T)r?   rF   r   ri   ).r   r}   r   r   r   findr   r#   rstripr   r   clearr   rT   rC   r(   rG   r   getattrr?   r   r   rO   r   rH   r/   r   r   HttpPayloadParserrF   rR   r   r   ri   done
isinstancer5   r   r.   rE   	feed_dataBaseExceptionr   rM   r"   payload)rm   r   r   r   r   r   r   messagesdata_len	start_posr   rE   posr   r   r   r?   rR   Z
empty_bodyr   Zpayload_parsereofZunderlying_excZreraised_excrP   r   rQ   r   .  s   






zHttpParser.feed_datarB   c              
      s6  | 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r&| |rd}tj v r&t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}   Zgetall).0hr   rP   rQ   	<genexpr>
  ry   z+HttpParser.parse_headers.<locals>.<genexpr>zDuplicate 'z' header found.closeTz
keep-aliverG   )gzipdeflatebrz6Transfer-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_ENCODINGr   )rm   rp   rD   Z
close_connencodingrG   rH   Z
singletonsZbad_hdrconnvencr   rP   r   rQ   r     sT    

zHttpParser.parse_headers)valrj   c                 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   NNNNTFT)%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   r   _SEPr   r   r/   r   r0   r   r   rP   rP   rP   rQ   r2      sp   
             
' @Br2   c                   @   s4   e Zd ZdZee edddZee	d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   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   rw   rx    rW   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}   rf   r*   rM   r;   r   r<   r%   r,   rT   groupr   build
startswith	partitionschemer)   encoder   r-   r5   )rm   rp   r   r?   r@   rA   match	version_orI   Z	path_partZ_hash_separatorZurl_fragmentZ_question_mark_separatorZqs_partrC   rD   r   rF   rG   rH   rP   rP   rQ   r   >  sr    



zHttpRequestParser.parse_messager   c                 C   s0   |j dddd d dkr$dS tdd S )	N,r   r   rr    	rH   Tz'Request has invalid `Transfer-Encoding`)rsplitr   r   r#   r   rP   rP   rQ   r     s     z HttpRequestParser._is_chunked_teN)rJ   rK   rL   __doc__r   r   r5   r   rM   rO   r   rP   rP   rP   rQ   r3   6  s   Ur3   c                
       st   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eed	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.
    N)r   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 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   rw   rx   r   r   r   r   rW   rX   Td      >   i0     F)r   r~   r   r%   r   r}   rf   r*   rM   r<   r   r,   rT   r   r=   r   r-   r   r   r   r6   )rm   rp   r   rA   statusrS   r   r   Zstatus_irC   rD   r   rF   rG   rH   rP   rP   rQ   r     s`    




$z HttpResponseParser.parse_messager   c                 C   s    |j dddd d dkS )Nr   r   r   rr   r   rH   )r   r   r   r   rP   rP   rQ   r     s    z!HttpResponseParser._is_chunked_te)N)rJ   rK   rL   r   r   ri   r   r   r   r   r   r   r6   r/   rO   r   r   rM   r   __classcell__rP   rP   r   rQ   r4     s    ?r4   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   rH   rF   rR   r?   r   r   ri   rj   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   ry   FT)_lengthrV   r\   _typer]   r_   _chunk_chunk_size_chunk_tailr   rl   r   DeflateBufferrY   r   r[   rZ   r   )rm   r   r   rH   rF   rR   r?   r   r   ri   Zreal_payloadrP   rP   rQ   rn     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  rV   r\   r   r   rZ   r'   r[   r+   r   rP   rP   rQ   r   "  s    zHttpPayloadParser.feed_eofr7      ;)chunkr   	CHUNK_EXTrj   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 n6| j tjkr| j	r| j	| }d| _	|r| j
tjkr ||}|dkr||d|}|dkr4|d | }d|||  }	v r@td|	}
t| j|
 |
n|d | }| jrP| }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rB|| | _| j|| dS d| _| j|d | | ||d  }tj| _
| j  | j
tjkr| jr|d
r|dd  }|d t| |kr|t|d  }tj| _
n
|| _	dS | j
tjkrX|d t| }||kr*| j  d|t|d  fS |s4dS ||d d krP|| _	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   )Try   Try   r8   z"Unexpected LF in chunk-extension: asciirx      r   r   )Fry   )"r  rV   rZ   r  r}   r   r   r   r[   r  r  r]   r_   r   r#   r"   rl   r   rer   r>   r+   r   rT   r   rb   r   r`   r  begin_http_chunk_receivingra   end_http_chunk_receivingrc   r\   )rm   r	  r   r
  requiredZ	chunk_lenr   iZsize_bextexcsizeheadrP   rP   rQ   r   .  s    

















zHttpPayloadParser.feed_data)NFNNNTTF)r7   r  )rJ   rK   rL   r/   r   rT   rO   rM   rn   r   r   r   r   r   rP   rP   rP   rQ   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   rj   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   )rm   r  r   rP   rP   rQ   rn     s    
zDeflateBuffer.__init__)r  	exc_causerj   c                 C   s   t | j|| d S rk   )r"   r  )rm   r  r  rP   rP   rQ   r"     s    zDeflateBuffer.set_exception)r	  r  rj   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}   )rm   r	  r  rP   rP   rQ   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   )rm   r	  rP   rP   rQ   r     s    
zDeflateBuffer.feed_eofc                 C   s   | j   d S rk   )r  r  r   rP   rP   rQ   r    s    z(DeflateBuffer.begin_http_chunk_receivingc                 C   s   | j   d S rk   )r  r  r   rP   rP   rQ   r    s    z&DeflateBuffer.end_http_chunk_receiving)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   )gr   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   helpersr   r   r   r   r    r!   r"   Zhttp_exceptionsr#   r$   r%   r&   r'   r(   r)   r*   r+   Zhttp_writerr,   r-   streamsr.   r/   Z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  ZHttpRequestParserPyZHttpResponseParserPyZRawRequestMessagePyZRawResponseMessagePyZ_http_parserZHttpRequestParserCZHttpResponseParserCZRawRequestMessageCZRawResponseMessageCImportErrorrP   rP   rP   rQ   <module>   sh   
@$	,		"l  JdY CN