Viewing File: /opt/alt/python38/lib64/python3.8/site-packages/aiohttp/__pycache__/http_parser.cpython-38.pyc

U

'7`=x
@slddlZddlZddlZddlZddlZddlZddlmZddlm	Z	m
Z
mZmZm
Z
mZddlmZmZmZddlmZddlmZddlmZdd	lmZmZdd
lmZmZmZm Z m!Z!m"Z"ddl#m$Z$m%Z%ddl&m'Z'dd
l(m)Z)m*Z*ddl+m,Z,zddl-Z-dZ.Wne/k
r&dZ.YnXdZ0e1ej2Z3e4dZ5e4dZ6e4dZ7e8dddddddddddg
Z9e8d dd!d"ddddddg	Z:Gd#d$d$eZ;Gd%d&d&eZ<Gd'd(d(Z=Gd)d*d*ej>Z?Gd+d,d,e?Z@Gd-d.d.e?ZAGd/d0d0ZBGd1d2d2ZCe@ZDeAZEe9ZFe:ZGz2esNdd3lHm@Z@mAZAm9Z9m:Z:e@ZIeAZJe9ZKe:ZLWne/k
rfYnXdS)4N)IntEnum)AnyListOptionalTupleTypeUnion)CIMultiDictCIMultiDictProxyistr)URL)hdrs)BaseProtocol)
NO_EXTENSIONSBaseTimerContext)
BadStatusLineContentEncodingErrorContentLengthError
InvalidHeaderLineTooLongTransferEncodingError)HttpVersion
HttpVersion10)internal_logger)
EMPTY_PAYLOADStreamReader)
RawHeadersTF)
HeadersParser
HttpParserHttpRequestParserHttpResponseParserRawRequestMessageRawResponseMessagez[!#$%&'*+\-.^_`|~0-9A-Za-z]+zHTTP/(\d+).(\d+)s'[\x00-\x1F\x7F()<>@,;:\[\]={} \t\\\\\"]r"methodpathversionheadersraw_headersZshould_closecompressionupgradechunkedZurlr#codereasonc@seZdZdZdZdZdZdS)
ParseStaterr
N)__name__
__module____qualname__
PARSE_NONEPARSE_LENGTH
PARSE_CHUNKEDPARSE_UNTIL_EOFr8r8F/opt/alt/python38/lib64/python3.8/site-packages/aiohttp/http_parser.pyr.[sr.c@s eZdZdZdZdZdZdZdS)
ChunkStaterr
r/r0N)r1r2r3PARSE_CHUNKED_SIZEPARSE_CHUNKED_CHUNKPARSE_CHUNKED_CHUNK_EOFPARSE_MAYBE_TRAILERSPARSE_TRAILERSr8r8r8r9r:cs
r:c@s>eZdZdeeeddddZeeedefdd	d
Z	dS)rN)
max_line_sizemax_headersmax_field_sizereturncCs||_||_||_dSN)rCrDrE)selfrCrDrEr8r8r9__init__lszHeadersParser.__init__CIMultiDictProxy[str]linesrFcCst}g}d}|d}t|}|rz|dd\}}Wntk
rVt|dYnX|d}|}t|r|t|t||j	krt
d|ddt
|j	t
t|t|}	|d7}||}|o|ddk}
|
rv|g}|
rj|	t|7}	|	|j	kr(t
d	|ddt
|j	t
|	|||d7}||kr`||}|rh|ddk}
qd
}qjqd
|}n0|	|j	krt
d	|ddt
|j	t
|	|}|dd}|dd}
|||
|||fqt|t|fS)
Nr
:s 	zrequest header name {}utf8xmlcharrefreplacer) 	zrequest header field {}utf-8surrogateescape)r	lensplit
ValueErrorrstriplstripHDRREsearchrErformatdecodestrappendjoinaddr
tuple)rHrLr'r(Z	lines_idxlineZ
line_countZbnameZbvalueZ
header_lengthZcontinuationZ
bvalue_lstnamevaluer8r8r9
parse_headersvsz







zHeadersParser.parse_headers)rArBrA)
r1r2r3intrIrbytesrrrfr8r8r8r9rks
rc@seZdZdeeeejeeeeeeeeee	e
eeee
e
e
dddd	Z
ejeeed
ddZed
ddZddejejejfeeeee	eeeee
efdddZeeedeee
ee	e
e
fd
ddZe
ddddZdS)rNrArBFT)protocollooplimitrCrDrEtimerr,r$readallpayload_exceptionresponse_with_bodyread_until_eofauto_decompressrFcCs||_||_||_||_||_||_||_|	|_|
|_||_	||_
|
|_g|_d|_
d|_d|_d|_||_||_t||||_dS)NrRF)rjrkrCrDrErmr,r$rnrorprq_lines_tail	_upgradedZ_payload_payload_parser_auto_decompress_limitr_headers_parser)rHrjrkrlrCrDrErmr,r$rnrorprqrrr8r8r9rIs(zHttpParser.__init__rKcCsdSrGr8)rHrLr8r8r9
parse_messageszHttpParser.parse_messagerFcCsz|jdk	r|jd|_nZ|jr0|j|j|jrv|jddkrP|jdz||jWStk
rtYdSXdS)Nz
rR)rvfeed_eofrtrsr_rz	ExceptionrHr8r8r9r}s

zHttpParser.feed_eof
rR)dataSEPEMPTYCONTENT_LENGTHMETH_CONNECTSEC_WEBSOCKET_KEY1rFcCsg}|jr|j|d}|_t|}d}	|j}
|	|kr|jdkr|js|||	}||	krp|jsp|d}	q.||	kr|j||	||d}	|jd|krz|	|j}W5|jX|j
|}
|
dk	rzt|
}
Wnt
k
rt|YnX|
dkrt|||j
kr,t||j|_t|d|j}|jdk	sRt|
dk	rf|
dksv|jr|jst|j|j|
|jd}t||
|j||j|j|j|j|jd	}|jsv||_n||krt|j|j|
|jd}d|_t||j|jd|jd	|_nrt|d
ddkrr|
dkrr|jrrt|j|j|
|jd}t||
|j||j|jd|j|jd	}|jsv||_nt }|||fn||	d|_|}qq.|jdkr|jr|jrtqq.|r|	|kr|jrt|jdk	stz|j!||	d\}}Wn`t"k
rl}z@|j#dk	rF|jj$%|#t&|n|jj$%|d}d}W5d}~XYnX|rd}	t|}d|_q.q.qq.|r|	|kr||	d}n|}||j|fS)
NrRrr/r|r$)rmrkrl)lengthr+r$r)r,rnrprrT)r$r)rnrrr,d)'rtrUrkrvrufindrsr_clearrzr'getrgrWrr*getattrr$rjAssertionErrorr+rrmrxHttpPayloadParserr)r,rnrprwdonerqr	feed_data
BaseExceptionropayload
set_exceptionr^)rHrrrrrrZmessagesZdata_lenZ	start_posrkposmsgrr$rZpayload_parsereofexcr8r8r9rs






	zHttpParser.feed_datarJcCs|j|\}}d}d}d}d}|tj}|r`|}	|	dkrFd}n|	dkrTd}n|	dkr`d}|tj}
|
r|
}
|
dkr|
}|tj}|rd|krd}||||||fS)	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.
        NFcloseTz
keep-aliver*)gzipdeflatebrr+)ryrfrrZ
CONNECTIONlowerZCONTENT_ENCODINGZTRANSFER_ENCODING)rHrLr'r(Z
close_connencodingr*r+ZconnvencZter8r8r9rfs.
zHttpParser.parse_headers)valrFcCs
||_dS)zYSet connection upgraded (to websocket) mode.
        :param bool val: new state.
        N)ru)rHrr8r8r9set_upgradedszHttpParser.set_upgraded)NNrirArBrANNNFNTFT)r1r2r3rrasyncioZAbstractEventLooprgrr^boolrrrIabcabstractmethodrrhrrzr}rrrrrrrrrfrr8r8r8r9rsn
'.)rc@s$eZdZdZeeedddZdS)r zRead request status line. Exception .http_exceptions.BadStatusLine
    could be raised in case of any errors in status line.
    Returns RawRequestMessage.
    rKcCs\|ddd}z|dd\}}}Wntk
rDt|dYnXt||jkrntdt|jtt||d\}}}|d\}}	}
t	
|st|zB|dr|d	dd
d\}}tt
|t
|}
nt|Wntk
rt|YnX||\}}}}}}|dkr4|
tkr0d}nd
}t|||
||||||tj||
|dd
S)NrrSrTr/Status line is too long#?zHTTP/.r
TF)r%Zquery_stringZfragmentZencoded)r]rVrWrrUrCrr^	partitionMETHREmatch
startswithrrgr~rfrr"rZbuild)rHrLrcr$r%r&Z	path_partZ_hash_separatorZurl_fragmentZ_question_mark_separatorZqs_partZn1Zn2	version_or'r(rr)r*r+r8r8r9rzsf





zHttpRequestParser.parse_messageNr1r2r3__doc__rrhrrzr8r8r8r9r sr c@s$eZdZdZeeedddZdS)r!zRead response status line and headers.

    BadStatusLine could be raised in case of any errors in status line.
    Returns RawResponseMessagerKc
CsT|ddd}z|dd\}}Wntk
rBt|dYnXz|dd\}}Wntk
rpd}YnXt||jkrtdt|jtt|t	|}|dkrt|t
t|dt|d}zt|}Wntk
rt|dYnX|dkrt||
|\}	}
}}}
}|dkr8|tk}t||||	|
|||
|	S)	NrrSrTr
rr/i)r]rVrWrrUrCrr^VERSRErrrggrouprfrr#rX)rHrLrcr&Zstatusr-rrZstatus_ir'r(rr)r*r+r8r8r9rz3s\





z HttpResponseParser.parse_messageNrr8r8r8r9r!-sr!c@sjeZdZdeeeeeeeeeeeeedd
ddZdddd	Z	de
e
e
eee
fdd
dZdS)rNFT)
rrr+r)r,r$rnrprrrFc
Csd|_tj|_tj|_d|_d|_|	|_	d|_
|rH|rH|j	rHt||}
n|}
|shtj|_|
d|_
n||rvtj
|_nn|dk	rtj|_||_|jdkr|
d|_
n>|r|dkrtj|_n(|dkrtdtj|_|
d|_
|
|_dS)NrrRFT)ZPUTZPOSTz6Content-Length or Transfer-Encoding header is required)_lengthr.r4_typer:r<_chunk_chunk_size_chunk_tailrwr
DeflateBufferr}r6r5r7rZwarningr)rHrrr+r)r,r$rnrprrZreal_payloadr8r8r9rInsF


zHttpPayloadParser.__init__r{cCsF|jtjkr|jn*|jtjkr.tdn|jtjkrBtddS)Nz2Not enough data for satisfy content length header.z3Not enough data for satisfy transfer length header.)	rr.r7rr}r5rr6rrr8r8r9r}szHttpPayloadParser.feed_eofr;)chunkr	CHUNK_EXTrFcCs:|jtjkr|j}t|}||krT|||_|j|||jdkr|jdSn6d|_|j|d|||jd||dfSn|jtjkr|j	r|j	|}d|_	|r6|j
tjkr|
|}|dkr|
|d|}|dkr|d|}n|d|}ztt|d}	Wn@tk
r\t|d|dd}
|j|
|
dYnX||dd}|	dkrtj|_
ntj|_
|	|_|jn
||_	d	S|j
tjkr"|j}t|}||kr|||_|j||d	Sd|_|j|d||||d}tj|_
|j|j
tjkrb|dd|krX|dd}tj|_
n
||_	d	S|j
tjkr|dd}||kr|jd|ddfS|sd	S||dd
kr||_	d	Stj|_
|j
tjkr|
|}|dkr||dd}tj|_
q||_	d	Sqn |jtjkr6|j|t|d	S)Nr)TrRTrRasciirTr/)FrRr
)rr.r5rrUrrr}r6rrr:r<rrgrhrWrr]rr?r=rbegin_http_chunk_receivingr>end_http_chunk_receivingr@r7)rHrrrZrequiredZ	chunk_lenriZsize_bsizerheadr8r8r9rs

















zHttpPayloadParser.feed_data)NFNNNFTT)rr)
r1r2r3rrrgrr^rIr}rhrrr8r8r8r9rms:8

rc@sreZdZdZeeeddddZeddddZ	e
edd	d
dZddd
dZ
ddddZddddZdS)rzDDeflateStream decompress stream and feed data into specified stream.N)outrrFcCsb||_d|_||_d|_|dkr8ts,tdt|_n&|dkrJdt	j
nt	j
}t	j|d|_dS)NrFrzGCan not decode content-encoding: brotli (br). Please install `brotlipy`rrZwbits)rrr_started_decoding
HAS_BROTLIrbrotliZDecompressordecompressorzlib	MAX_WBITS
decompressobj)rHrrZ	zlib_moder8r8r9rI/szDeflateBuffer.__init__)rrFcCs|j|dSrG)rr)rHrr8r8r9r@szDeflateBuffer.set_exception)rrrFcCs|sdS|j|7_|jsH|jdkrH|dd@dkrHtjtjd|_z|j|}Wn"tk
rzt	d|jYnXd|_|r|j
|t|dS)Nrrrz#Can not decode content-encoding: %sT)
rrrrrrr
decompressr~rrrrU)rHrrr8r8r9rCs&
zDeflateBuffer.feed_datar{cCsR|j}|s|jdkrD|j|t||jdkrD|jjsDtd|j	dS)Nrr)
rflushrrrrUrrrr})rHrr8r8r9r}as
zDeflateBuffer.feed_eofcCs|jdSrG)rrrr8r8r9rksz(DeflateBuffer.begin_http_chunk_receivingcCs|jdSrG)rrrr8r8r9rnsz&DeflateBuffer.end_http_chunk_receiving)r1r2r3rrrr^rIrrrhrgrr}rrr8r8r8r9r,s
r)r r!r"r#)MrrcollectionsrestringrenumrtypingrrrrrrZ	multidictr	r
rZyarlrrrZ
base_protocolrZhelpersrrZhttp_exceptionsrrrrrrZhttp_writerrrlogrZstreamsrrZtypedefsrrrImportError__all__setZ	printableZASCIISETcompilerrrZ
namedtupler"r#r.r:rABCrr r!rrZHttpRequestParserPyZHttpResponseParserPyZRawRequestMessagePyZRawResponseMessagePyZ_http_parserZHttpRequestParserCZHttpResponseParserCZRawRequestMessageCZRawResponseMessageCr8r8r8r9<module>s  
	
	


^K@@F
Back to Directory File Manager