a
    &h^                     @   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* ddl+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3 ddl4m5Z5m6Z6 ddl7m8Z8 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eeC  eDd< eEdZGeeeC  eDd< eEdZHeeeI  eDd< eEdZJG dd deZKG dd deZLedeKeLZMG d d! d!eZNG d"d# d#eZOG d$d% d%ZPG d&d' d'e jQeeM ZRG d(d) d)eReK ZSG d*d+ d+eReL ZTG d,d- d-ZUG d.d/ d/ZVeSZWeTZXeKZYeLZZz2e'sdd0l[mSZSmTZTmKZKmLZL eSZ\eTZ]eKZ^eLZ_W n e`y   Y n0 dS )1    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)DEBUGNO_EXTENSIONSBaseTimerContextmethod_must_be_empty_body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[!#$%&'*+\-.^_`|~0-9A-Za-z]+METHREzHTTP/(\d).(\d)VERSREs*   [\x00-\x1F\x7F-\xFF()<>@,;:\[\]={} \t\"\\]HDRREs   [0-9a-fA-F]+c                   @   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 )r3   methodpathversionCIMultiDictProxy[str]headersraw_headersshould_closecompressionupgradechunkedurlN)
__name__
__module____qualname__str__annotations__r)   r.   boolr   r    rL   rL   X/var/www/html/swiplay.fr/scambot/venv/lib/python3.9/site-packages/aiohttp/http_parser.pyr3   P   s   
r3   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 )r4   r=   codereasonr?   r@   rA   rB   rC   rD   N)rF   rG   rH   r)   rJ   intrI   r   r.   rK   r   rL   rL   rL   rM   r4   ]   s   
r4   _MsgTc                   @   s   e Zd ZdZdZdZdZdS )
ParseStater   r         N)rF   rG   rH   
PARSE_NONEPARSE_LENGTHPARSE_CHUNKEDPARSE_UNTIL_EOFrL   rL   rL   rM   rR   l   s   rR   c                   @   s    e Zd ZdZdZdZdZdZdS )
ChunkStater   r   rS   rT      N)rF   rG   rH   PARSE_CHUNKED_SIZEPARSE_CHUNKED_CHUNKPARSE_CHUNKED_CHUNK_EOFPARSE_MAYBE_TRAILERSPARSE_TRAILERSrL   rL   rL   rM   rY   t   s
   rY   c                   @   s>   e Zd ZdeeeddddZee edef dd	d
Z	dS )r/        N)max_line_sizemax_headersmax_field_sizereturnc                 C   s   || _ || _|| _d S N)rb   rc   rd   )selfrb   rc   rd   rL   rL   rM   __init__}   s    zHeadersParser.__init__r>   linesre   c                 C   s0  t  }g }d}|d }t|}|r z|dd\}}W n tyT   t|d Y n0 |d |d hddh@ rvt||d}t|rt|t|| jkrt	d
|d	d
t| jtt|t|}	|d7 }|| }|o|d dv }
|
r|g}|
r|	t|7 }	|	| jkr>t	d
|d	d
t| jt|	|| |d7 }||k rv|| }|r~|d dv }
qd}qqd|}n0|	| jkrt	d
|d	d
t| jt|	|d}|dd}|dd}d|v sd|v sd|v rt|||| |||f qt|t|fS )Nr      :r       	   s    	zrequest header name {}utf8backslashreplace)rm   rn   zrequest header field {}    utf-8surrogateescape
 )r   lensplit
ValueErrorr%   lstripr:   searchrd   r'   formatdecoderI   appendjoinstripaddr   tuple)rg   rj   r?   r@   Z	lines_idxlineZ
line_countZbnameZbvalueZheader_lengthZcontinuationZ
bvalue_lstnamevaluerL   rL   rM   parse_headers   s    








zHeadersParser.parse_headers)r`   ra   r`   )
rF   rG   rH   rP   rh   r   bytesr   r.   r   rL   rL   rL   rM   r/   |   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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 )r0   FlaxN   r`   ra   T)protocollooplimitrb   rc   rd   timerrN   r;   readallpayload_exceptionresponse_with_bodyread_until_eofauto_decompressre   c                 C   s   || _ || _|| _|| _|| _|| _|| _|	| _|
| _|| _	|| _
|| _g | _d| _d| _d | _d | _|| _|| _t|||| _d S )Nrq   F)r   r   rb   rc   rd   r   rN   r;   r   r   r   r   _lines_tail	_upgradedZ_payload_payload_parser_auto_decompress_limitr/   _headers_parser)rg   r   r   r   rb   rc   rd   r   rN   r;   r   r   r   r   r   rL   rL   rM   rh      s(    zHttpParser.__init__ri   c                 C   s   d S rf   rL   )rg   rj   rL   rL   rM   parse_message  s    zHttpParser.parse_messagere   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 )Nrl   z
rq   )r   feed_eofr   r   r~   r   	Exceptionr   rg   rL   rL   rM   r     s    


*zHttpParser.feed_eofr5   rq   )dataSEPEMPTYCONTENT_LENGTHMETH_CONNECTSEC_WEBSOCKET_KEY1re   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| _td	| j}td
d}| jd usPJ t|pjt|oht|}|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#s J t| j| j|
| jd}d| _t|jjd| j| j d| _nj|s|d u r| j$rt| j| j|
| jd}t||j|j| jd| 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 nb t'y } zH| j(d urv| jj)*| (t+| n| 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 )Nrq   r   r6      rl   r   c                     s6   j  } | d u rd S | d s.t t| S )Nz 	)r?   getr   	isdecimalr%   rP   )Z
length_hdrr   msgrL   rM   get_content_lengthM  s    z0HttpParser.feed_data.<locals>.get_content_lengthr;   rN   )r   r   r   )	lengthrD   r;   rB   rN   r   r   r   r   T)r;   rB   r   r   r   ),r   rw   r   r   r   findr   rstripr~   r   clearr   rP   r?   r%   rC   getattrr;   r   r    rK   r   rD   r-   r   r   HttpPayloadParserrB   rN   r   r   r   r   done
isinstancer3   r   r,   	feed_dataBaseExceptionr   payloadset_exceptionrI   )rg   r   r   r   r   r   r   Zmessagesdata_lenZ	start_posr   posr   r   r   r;   rN   Z
empty_bodyr   Zpayload_parsereofexcrL   r   rM   r      s   





zHttpParser.feed_datar>   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 )rL   r   N)rw   getall).0hr?   rL   rM   	<genexpr>  rq   z+HttpParser.parse_headers.<locals>.<genexpr>zDuplicate 'z' header found.closeTz
keep-aliverC   )ZgzipdeflatebrrD   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   
CONNECTIONlowerUPGRADECONTENT_ENCODING)rg   rj   r@   Z
close_connencodingrC   rD   Z
singletonsZbad_hdrconnvencterL   r   rM   r     sV    

zHttpParser.parse_headers)valre   c                 C   s
   || _ dS )zZSet connection upgraded (to websocket) mode.

        :param bool val: new state.
        N)r   )rg   r   rL   rL   rM   set_upgraded  s    zHttpParser.set_upgraded)NNr   r`   ra   r`   NNNFNTFT)$rF   rG   rH   r   r   rK   rJ   r   r   asyncioAbstractEventLooprP   r   rI   r   r   rh   abcabstractmethodr   r   rQ   r   r   r   r   r   r   _SEPr   r   r-   r   r.   r   r   rL   rL   rL   rM   r0      sp   
              
' 9Dr0   c                   @   s$   e Zd ZdZee edddZdS )r1   zRead request status line.

    Exception .http_exceptions.BadStatusLine
    could be raised in case of any errors in status line.
    Returns RawRequestMessage.
    ri   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   rr   rs    rS   maxsplitStatus line is too longr   CONNECTT)	authorityencoded/#?)r<   query_stringfragmentr   *OPTIONS)r    )errorslatin1F)r}   rx   ry   r"   rw   rb   r'   rI   r8   	fullmatchr9   r)   rP   groupr   build
startswith	partitionschemer&   encoder   r*   r3   )rg   rj   r   r;   r<   r=   match	version_orE   Z	path_partZ_hash_separatorZurl_fragmentZ_question_mark_separatorZqs_partr?   r@   r   rB   rC   rD   rL   rL   rM   r   +  sr    



zHttpRequestParser.parse_messageN)rF   rG   rH   __doc__r   r   r3   r   rL   rL   rL   rM   r1   #  s   r1   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 )
r2   zRead response status line and headers.

    BadStatusLine could be raised in case of any errors in status line.
    Returns RawResponseMessage.
    N)r   r   argskwargsre   c                    s0   |d u rt rdnd}t j||g|R i |S )Nr5   r6   )r   superr   )rg   r   r   r   r   	__class__rL   rM   r     s    zHttpResponseParser.feed_datari   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s| st|t|}| |\}	}
}}}}|d u r"|tk}t||| |	|
||||	S )
Nr   rr   rs   r   r   r   r   rS   rT   )r}   rx   ry   r"   r   rw   rb   r'   rI   r9   r   r)   rP   r   r   r   r*   r4   )rg   rj   r   r=   statusrO   r   r   Zstatus_ir?   r@   r   rB   rC   rD   rL   rL   rM   r     sT    



z HttpResponseParser.parse_message)N)rF   rG   rH   r   r   r   r   r   r   r   r   r   r4   r-   rK   r   r   __classcell__rL   rL   r   rM   r2     s    r2   c                   @   sl   e Zd Zde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   rD   rB   rN   r;   r   r   r   r   re   c                 C   s   d| _ tj| _tj| _d| _d| _|	| _	|
| _
d| _|rN|rN| j	rNt||}n|}|sntj| _|  d| _n||r|tj| _nn|d urtj| _|| _ | j dkr|  d| _n>|r|dkrtj| _n(|dv rtd tj| _|  d| _|| _d S )Nr   rq   FT   )PUTPOSTz6Content-Length or Transfer-Encoding header is required)_lengthrR   rU   _typerY   r[   _chunk_chunk_size_chunk_tailr   _laxr   DeflateBufferr   rW   rV   rX   r+   warningr   )rg   r   r   rD   rB   rN   r;   r   r   r   r   Zreal_payloadrL   rL   rM   rh     sF    


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  rR   rX   r   r   rV   r$   rW   r(   r   rL   rL   rM   r     s    zHttpPayloadParser.feed_eofr5      ;)chunkr   	CHUNK_EXTre   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}	| 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  }| jrT|drT|d	d  }tj| _
| j  | j
tjkr|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   )Trq   Trq   asciirs      r   r   )Frq   )!r  rR   rV   r  rw   r   r   r   rW   r  r  rY   r[   r   r  r   rer   HEXDIGITr(   r}   r   rP   r   r^   r   r\   r  begin_http_chunk_receivingr]   end_http_chunk_receivingr_   rX   )rg   r  r   r  ZrequiredZ	chunk_lenr   iZsize_br   sizeheadrL   rL   rM   r     s    
















zHttpPayloadParser.feed_data)	NFNNNFTTF)r5   r
  )rF   rG   rH   r-   r   rP   rK   rI   rh   r   r   r   r   r   rL   rL   rL   rM   r     s8            : 
r   c                   @   s|   e Zd ZU dZeed< eee ddddZ	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   re   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   )rg   r  r   rL   rL   rM   rh     s    
zDeflateBuffer.__init__)r   re   c                 C   s   | j | d S rf   )r  r   )rg   r   rL   rL   rM   r     s    zDeflateBuffer.set_exception)r  r  re   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   rw   )rg   r  r  rL   rL   rM   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   rw   r   r   r#   r   )rg   r  rL   rL   rM   r     s    
zDeflateBuffer.feed_eofc                 C   s   | j   d S rf   )r  r  r   rL   rL   rM   r    s    z(DeflateBuffer.begin_http_chunk_receivingc                 C   s   | j   d S rf   )r  r  r   rL   rL   rM   r    s    z&DeflateBuffer.end_http_chunk_receiving)rF   rG   rH   r   r   rJ   r-   r   rI   rh   r   r   r   rP   r   r   r  r  rL   rL   rL   rM   r    s   
 
r  )r1   r2   r3   r4   )ar   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   Zbase_protocolr   Zcompression_utilsr   r   r   helpersr   r   r   r   r    http_exceptionsr!   r"   r#   r$   r%   r&   r'   r(   http_writerr)   r*   logr+   streamsr,   r-   typedefsr.   __all__r   set	printabler7   rI   rJ   compiler8   r9   r:   r   r  r3   r4   rQ   rR   rY   r/   ABCr0   r1   r2   r   r  ZHttpRequestParserPyZHttpResponseParserPyZRawRequestMessagePyZRawResponseMessagePyZ_http_parserZHttpRequestParserCZHttpResponseParserCZRawRequestMessageCZRawResponseMessageCImportErrorrL   rL   rL   rM   <module>   sj   
@(
		
f  C^L HJ