Viewing File: /opt/alt/python35/lib64/python3.5/site-packages/aiohttp/__pycache__/http_parser.cpython-35.pyc



Z_@sddlZddlZddlZddlZddlmZddlmZddlm	Z	ddl
mZddlm
Z
ddlmZmZmZmZmZmZdd	lmZmZdd
lmZddlmZmZyddlZdZWnek
rd
ZYnXdddddfZ e!ej"Z#ej$dZ%ej$dZ&ej$dZ'ej(dddddddddddg
Z)ej(ddd d!ddddddg	Z*Gd"d#d#eZ+Gd$d%d%eZ,Gd&ddZ-Gd'd(d(e-Z.Gd)d*d*e-Z/Gd+d,d,Z0Gd-d.d.Z1e.Z2e/Z3y-dd/l4m5Z5m6Z6e
re5Z2e6Z3Wnek
rYnXdS)0N)IntEnum)CIMultiDict)URL)hdrs)
NO_EXTENSIONS)
BadStatusLineContentEncodingErrorContentLengthError
InvalidHeaderLineTooLongTransferEncodingError)HttpVersion
HttpVersion10)internal_logger)
EMPTY_PAYLOADStreamReaderTF
HttpParserHttpRequestParserHttpResponseParserRawRequestMessageRawResponseMessagez
[A-Z0-9$-_.]+zHTTP/(\d+).(\d+)s'[\x00-\x1F\x7F()<>@,;:\[\]={} \t\\\\\"]methodpathversionheadersraw_headersZshould_closecompressionupgradechunkedZurlcodereasonc@s(eZdZdZdZdZdZdS)
ParseStaterrN)__name__
__module____qualname__
PARSE_NONEPARSE_LENGTH
PARSE_CHUNKEDPARSE_UNTIL_EOFr,r,/http_parser.pyr"/sr"c@s.eZdZdZdZdZdZdZdS)
ChunkStaterrr#r$N)r%r&r'PARSE_CHUNKED_SIZEPARSE_CHUNKED_CHUNKPARSE_CHUNKED_CHUNK_EOFPARSE_MAYBE_TRAILERSPARSE_TRAILERSr,r,r,r-r.7s
r.c@seZdZddddddddddddddd
Zdd	Zd
dejejejdd
Z	ddZ
dS)rNiiFTcCs||_||_||_||_||_||_||_||_|	|_|
|_	||_
||_g|_d|_
d|_d|_d|_|
|_dS)NF)protocolloop
max_line_sizemax_headersmax_field_sizetimerr rreadallpayload_exceptionresponse_with_bodyread_until_eof_lines_tail	_upgradedZ_payload_payload_parser_auto_decompress)selfr6r7r8r9r:r;r rr<r=r>r?auto_decompressr,r,r-__init__As$																	zHttpParser.__init__cCs|jdk	r(|jjd|_nu|jrD|jj|j|jr|jddkrp|jjdy|j|jSWntk
rdSYnXdS)Nrz
)rCfeed_eofrAr@append
parse_message	Exception)rEr,r,r-rJ[s
		
zHttpParser.feed_eofs
r5c"Csg}|jr&|j|d}|_t|}d}	|j}
xx|	|kr|jdkr|jr|j||	}||	kr|jr|d}	qD||	kr|jj||	||d}	|jd|krz|j|j}Wd|jj	X|j
j|}
|
dk	royt|
}
Wnt
k
rVt|YnX|
dkrot|||j
krt||j|_t|d|j}|
dk	r|
dks|jrW|jrWt|jd|jd|
}t|d|
d	|jd|d
|jd|jd|jd
|jd|j}|jsn||_n||krt|jd|jd|
}d|_t|d|jd
|jddd|j|_nt|dddkrh|
dkrh|jrht|jd|jd|
}t|d|
d	|jd|d
|jd|jddd
|jd|j}|jsn||_nt}|j||fq||	d|_|}PqD|jdkr|jr|jstPqD|r|	|kr|jsty&|jj ||	d\}}Wnxt!k
r}zX|j"dk	r^|jj#j$|j"t%|n|jj#j$|d}d}WYdd}~XnX|rd}	t|}d|_qDqDPqDW|r|	|kr||	d}n|}||j|fS)Nr5rr#rrr;r7lengthrrr r<r>rFTdrI)&rAlenr7rCrBfindr@rKrLclearrgetint
ValueErrorrrgetattrrrrr6r;HttpPayloadParserrr r<r>rDdoner?rAssertionError	feed_data
BaseExceptionr=payload
set_exceptionstr)rEdataSEPZEMPTYCONTENT_LENGTHMETH_CONNECTSEC_WEBSOCKET_KEY1ZmessagesZdata_lenZ	start_posr7posmsgrNrr]Zpayload_parsereofexcr,r,r-r[ls		


									zHttpParser.feed_datac
Cs"t}g}d}|d}t|}x|r!t|}y|jdd\}}	Wn!tk
rt|dYnX|jd}tj|rt||d7}||}|o|ddk}
|
r|	g}	x|
r|t|7}||jkr2t	dj
|jd	d
|j|	j||d7}||krx||}|r|ddk}
qd}PqWdj
|	}	n6||jkrt	dj
|jd	d
|j|	j}	|jdd
}|	jdd
}|j|||j||	fq.Wd}
d}d}d}t|}|jtj}|r|j}|dkrd}
n'|dkrd}
n|dkrd}|jtj}|r|j}|dkr|}|jtj}|rd|jkrd}|||
|||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.
        r:Ns 	r 	zrequest header field {}utf8xmlcharrefreplacer5zutf-8surrogateescapeFcloseTz
keep-alivergzipdeflatebrr)rjrk)rjrk)rprqrr)rrQsplitrVrstripHDRREsearchr:rformatdecoderKjoinaddtuplerTrZ
CONNECTIONlowerZCONTENT_ENCODINGZTRANSFER_ENCODING)rElinesrrZ	lines_idxlineZ
line_countZ
header_lengthZbnameZbvalueZcontinuationnamevalueZ
close_connencodingrrconnvencZter,r,r-
parse_headerss	
	


		


		zHttpParser.parse_headers)r%r&r'rGrJrrbrcrdr[rr,r,r,r-r?s	c@s"eZdZdZddZdS)HttpRequestParserPyzRead request status line. Exception .http_exceptions.BadStatusLine
    could be raised in case of any errors in status line.
    Returns RawRequestMessage.
    cCst|d|jkr+td|j|djdd}y|jdd\}}}Wn!tk
rt|dYnX|j}tj	|st|y_|j
dr|ddjdd	\}}tt|t|}nt|Wnt
k
r*t|YnX|j|\}}	}
}}}
|
dkrs|tkrmd
}
nd}
t|||||	|
|||
t|
S)NrzStatus line is too longzutf-8rnr#zHTTP/.rTF)rQr8rrxrsrVrupperMETHREmatch
startswithrrUrMrrrr)rEr}r~rrrZn1Zn2rrrorrrr,r,r-rL_s4
"
!	z!HttpRequestParserPy.parse_messageN)r%r&r'__doc__rLr,r,r,r-rYsrc@s"eZdZdZddZdS)HttpResponseParserPyzRead response status line and headers.

    BadStatusLine could be raised in case of any errors in status line.
    Returns RawResponseMessagec
"Cst|d|jkr+td|j|djdd}y|jdd\}}Wn!tk
rt|dYn8Xy|jdd\}}Wntk
rd}YnXtj|}|dkrt|t	t
|jdt
|jd}yt
|}Wn!tk
r?t|dYnX|dkrXt||j|\}}}	}
}}|	dkr|t
k}	t|||j|||	|
||	S)	NrzStatus line is too longzutf-8rnrrHr#i)rQr8rrxrsrVrVERSRErrrUgrouprrrrt)
rEr}r~rstatusr!rrrrorrrr,r,r-rLs8

-
!z"HttpResponseParserPy.parse_messageN)r%r&r'rrLr,r,r,r-rsrc
@sReZdZddddddddddZddZdd	d
dZdS)rXNFTc

Cs[||_d|_tj|_tj|_d|_d|_	|	|_
d|_|rr|rr|j
rrt||}|stj|_|j
d|_n|rtj|_n|dk	rtj|_||_|jdkrN|j
d|_nY|r|dkrtj|_n8|d	krNtjdtj|_|j
d|_||_dS)
Nrr5FTPUTPOSTz6Content-Length or Transfer-Encoding header is required)rr)r]_lengthr"r(_typer.r0_chunk_chunk_size_chunk_tailrDrY
DeflateBufferrJr*r)r+rwarning)
rEr]rNrrr rr<r>rFr,r,r-rGs>						
	

	zHttpPayloadParser.__init__cCse|jtjkr"|jjn?|jtjkrCtdn|jtjkratddS)Nz2Not enough data for satisfy content length header.z3Not enough data for satisfy transfer length header.)	rr"r+r]rJr)r
r*r
)rEr,r,r-rJszHttpPayloadParser.feed_eofs
;c
Cs|jtjkr|j}t|}||krv|||_|jj|||jdkr|jjdSqd|_|jj|d|||jjd||dfSnG|jtjkr|j	r|j	|}d|_	x|r|j
tjkr)|j
|}|dkr|j
|d|}|dkr[|d|}n|d|}ytt|d}WnAtk
rt|d|}	|jj|	|	dYnX||dd}|dkrtj|_
q)tj|_
||_|jjn
||_	dS|j
tjkr|j}t|}||kr|||_|jj||d	Sd|_|jj|d||||d}tj|_
|jj|j
tjkr#|dd|kr|dd}tj|_
n
||_	d
S|j
tjkrx|dd|krl|jjd|ddfStj|_
|j
tjkr|j
|}|dkr||dd}tj|_
q||_	dSqWn+|jtjkr|jj|t|dS)
NrTr5r#F)Tr5)FN)FN)FN)FN)FN)rr"r)rrQr]r[rJr*rrr.r0rRrUbytesrVr
r^r3r1rbegin_http_chunk_receivingr2end_http_chunk_receivingr4r+)
rEchunkraZ	CHUNK_EXTZrequiredZ	chunk_lenreisizerhr,r,r-r[s	

	
	
		
			
	
	
	zHttpPayloadParser.feed_data)r%r&r'rGrJr[r,r,r,r-rXs
	*
rXc@s^eZdZdZddZddZddZdd	Zd
dZdd
Z	dS)rzDDeflateStream decompress stream and feed data into specified stream.cCs||_d|_||_d|_|dkrTtsBtdtj|_n8|dkrmdt	j
nt	j
}t	jd||_dS)NrFrrzGCan not decode content-encoding: brotli (br). Please install `brotlipy`rprZwbits)outrr_started_decoding
HAS_BROTLIr	brotliZDecompressordecompressorzlib	MAX_WBITS
decompressobj)rErrZ	zlib_moder,r,r-rGas					#zDeflateBuffer.__init__cCs|jj|dS)N)rr^)rErhr,r,r-r^rszDeflateBuffer.set_exceptioncCs|j|7_y|jj|}Wntk
r|jr|jdkrtj|_y|jj|}Wqtk
rtd|jYqXntd|jYnX|rd|_|j	j
|t|dS)Nrqz#Can not decode content-encoding: %sT)rr
decompressrMrrrrr	rr[rQ)rErrr,r,r-r[us 

	zDeflateBuffer.feed_datacCsv|jj}|s$|jdkre|jj|t||jdkre|jjretd|jj	dS)Nrrrrq)
rflushrrr[rQrrgr	rJ)rErr,r,r-rJszDeflateBuffer.feed_eofcCs|jjdS)N)rr)rEr,r,r-rsz(DeflateBuffer.begin_http_chunk_receivingcCs|jjdS)N)rr)rEr,r,r-rsz&DeflateBuffer.end_http_chunk_receivingN)
r%r&r'rrGr^r[rJrrr,r,r,r-r^s
r)HttpRequestParserCHttpResponseParserC)7collectionsrestringrenumrZ	multidictrZyarlrrHrZhelpersrZhttp_exceptionsrr	r
rrr
Zhttp_writerrrlogrZstreamsrrrrImportError__all__set	printableZASCIISETcompilerrru
namedtuplerrr"r.rrrrXrrrZ_http_parserrrr,r,r,r-<module>s`.

	01<


Back to Directory File Manager