U '7`=x @slddlZddlZddlZddlZddlZddlZddlmZddlm Z m Z m Z m Z m Z mZddlmZmZmZddlmZddlmZddlmZdd lmZmZdd lmZmZmZm Z m!Z!m"Z"dd l#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&eZZ?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 InvalidHeader LineTooLongTransferEncodingError) HttpVersion HttpVersion10)internal_logger) EMPTY_PAYLOAD StreamReader) RawHeadersTF) HeadersParser HttpParserHttpRequestParserHttpResponseParserRawRequestMessageRawResponseMessagez[!#$%&'*+\-.^_`|~0-9A-Za-z]+zHTTP/(\d+).(\d+)s'[\x00-\x1F\x7F()<>@,;:\[\]={} \t\\\\\"]r"methodpathversionheaders raw_headersZ should_close compressionupgradechunkedZurlr#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>eZdZd eeeddddZeeedefdd d Z dS) rN) max_line_size max_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 | |}| d d } | d d } || | |||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 ee e e e e dddd Z ejeeed d d 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_KEY1rFc Csg}|jr|j|d}|_t|}d} |j} | |krX|jdkr|js||| } | | krp|jsp| d} q.| | krv|j|| | | d} |jd|krz| |j} W5|jX| j |} | dk rz t | } Wnt k rt|YnX| dkrt||| j kr,t|| j|_t| d|j}| dk rV| dksf| jr| jst|j|j| |jd}t|| | j|| j|j|j|j|jd }|jsf||_n||krt|j|j| |jd}d|_t|| j| jd|jd |_nrt| d d d krb| dkrb|jrbt|j|j| |jd}t|| | j|| j|jd|j|jd }|jsf||_nt}|| |fn|| d|_|}qXq.|jdkr|jrqXq.|rX| |krXz|j || d\}}Wn`t!k r4}z@|j"dk r|jj#$|"t%|n|jj#$|d}d}W5d}~XYnX|rVd} t|}d|_q.q.qXq.|rv| |krv|| d}n|}||j|fS) NrRrr/r|r$)rmrkrl)lengthr+r$r)r,rnrprrT)r$r)rnrrr,d)&rtrUrkrvrufindrsr_clearrzr'getrgrWrr*getattrr$r+rrjrmrxHttpPayloadParserr)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}rrrrr rrrrfrr8r8r8r9rsn  ' . )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 e ee 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 t j kr| |}|dkr| |d|}|dkr|d|}n |d|}ztt|d} Wn@tk r\t|d|dd} |j| | dYnX||dd}| dkrt j|_ nt j|_ | |_|jn ||_ d S|j t jkr"|j}t|}||kr|||_|j||d Sd|_|j|d||||d}t j|_ |j|j t jkrb|dd|krX|dd}t j |_ n ||_ d S|j t jkr|dd} | |kr|jd|ddfS| sd S| |dd kr| |_ d St j|_ |j t jkr| |}|dkr||dd}t j|_ 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 e dd d d Z 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@dkrHtjtj d|_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#)Mrr collectionsrestringrenumrtypingrrrrrrZ multidictr r r Zyarlr rrZ base_protocolrZhelpersrrZhttp_exceptionsrrrrrrZ http_writerrrlogrZstreamsrrZtypedefsrrr ImportError__all__setZ printableZASCIISETcompilerrrZ namedtupler"r#r.r:rABCrr r!rrZHttpRequestParserPyZHttpResponseParserPyZRawRequestMessagePyZRawResponseMessagePyZ _http_parserZHttpRequestParserCZHttpResponseParserCZRawRequestMessageCZRawResponseMessageCr8r8r8r9s            ^K@@F