wce^UddlZddlZddlZddlZddlmZddlmZddlm Z m Z m Z m Z m Z mZmZmZmZmZmZmZmZmZddlmZmZmZddlmZddlmZdd lm Z dd l!m"Z"m#Z#m$Z$dd l%m&Z&m'Z'm(Z(m)Z)m*Z*dd l+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3dd l4m5Z5m6Z6ddl7m8Z8ddl9m:Z:m;Z;ddledZ?e@ejZBe eeCeDd<ejdZFe eeCeDd<ejdZGe eeCeDd<ejdZHe eeIeDd<ejdZJGddeZKGddeZLedeKeLZMGd d!eZNGd"d#eZOGd$d%ZPGd&d'eje eMZRGd(d)eReKZSGd*d+eReLZTGd,d-ZUGd.d/ZVeSZWeTZXeKZYeLZZ e'sdd0l[mSZSmTZTmKZKmLZLeSZ\eTZ]eKZ^eLZ_yy#e`$rYywxYw)1N)suppress)IntEnum)AnyClassVarFinalGenericListLiteral NamedTupleOptionalPatternSetTupleTypeTypeVarUnion) CIMultiDictCIMultiDictProxyistr)URL)hdrs) BaseProtocol) HAS_BROTLIBrotliDecompressorZLibDecompressor)DEBUG NO_EXTENSIONSBaseTimerContextmethod_must_be_empty_bodystatus_code_must_be_empty_body)BadHttpMessage BadStatusLineContentEncodingErrorContentLengthError InvalidHeaderInvalidURLError LineTooLongTransferEncodingError) HttpVersion HttpVersion10)internal_logger) EMPTY_PAYLOAD StreamReader) RawHeaders) HeadersParser HttpParserHttpRequestParserHttpResponseParserRawRequestMessageRawResponseMessage)  ASCIISETz[!#$%&'*+\-.^_`|~0-9A-Za-z]+METHREzHTTP/(\d).(\d)VERSREs*[\x00-\x1F\x7F-\xFF()<>@,;:\[\]={} \t\"\\]HDRREs [0-9a-fA-F]+cxeZdZUeed<eed<eed<ded<eed<eed<eeed<eed <eed <e ed <y ) r4methodpathversionCIMultiDictProxy[str]headers raw_headers should_close compressionupgradechunkedurlN) __name__ __module__ __qualname__str__annotations__r*r/boolr r5/usr/lib/python3/dist-packages/aiohttp/http_parser.pyr4r4Ps= K I  $$# M M HrOr4cteZdZUeed<eed<eed<eeed<eed<e ed<e eed<e ed<e ed <y ) r5r?codereasonrArBrCrDrErFN) rHrIrJr*rLintrKrr/rMr rNrOrPr5r5]s=  I K c ""# M MrOr5_MsgTceZdZdZdZdZdZy) ParseStaterrN)rHrIrJ PARSE_NONE PARSE_LENGTH PARSE_CHUNKEDPARSE_UNTIL_EOFrNrOrPrWrWlsJLMOrOrWc eZdZdZdZdZdZdZy) ChunkStaterrrXrYN)rHrIrJPARSE_CHUNKED_SIZEPARSE_CHUNKED_CHUNKPARSE_CHUNKED_CHUNK_EOFPARSE_MAYBE_TRAILERSPARSE_TRAILERSrNrOrPr_r_tsNrOr_c LeZdZ d dedededdfdZdeededeffd Z y) r0 max_line_size max_headersmax_field_sizereturnNc.||_||_||_yN)rgrhri)selfrgrhris rP__init__zHeadersParser.__init__}s +&,rOlinesr@c jt}g}d}|d}t|}|rd |jdd\}}|d|dhddhzr t ||j d}t j|r t |t||jkDrQtdj|jd d t|jtt|t|} |dz }||}|xr|dd v} | r|g} | r| t|z } | |jkDrHtd j|jd d t|jt| | j||dz }||kr||}|r |dd v} nd }n| rd j| }nW| |jkDrHtd j|jd d t|jt| |jd}|jdd} |jdd} d| vsd| vsd| vr t ||j!| | |j||f|rdt#|t%|fS#t$r t |dwxYw)Nr:r s zrequest header name {}utf8backslashreplace)rsrtzrequest header field {}rOutf-8surrogateescape  )rlensplit ValueErrorr&lstripr;searchrir(formatdecoderKappendjoinstripaddrtuple)rmrorArB lines_idxline line_countbnamebvalue header_length continuation bvalue_lstnamevalues rP parse_headerszHeadersParser.parse_headerss%0M  QxZ  4 $ 4 3 v a%)$Aw.#D))]]6*F||E"#E**5zD///!,33 V-?@++,E O  KM NI#D 6DGw$6L$X "!SY.M$t':'::)5<< % V5G H  3 34 . %%d+NI :-$Y/+/7g+=L")#**- 4#6#66%188!LL1CDD//0M* \\&)F<<):;DMM'+<=Eu} 5#F++ KKe $   v /Y\!)5+=>>U 4#D)t3 4s JJ2)r) rHrIrJrTrnr bytesrr/rrNrOrPr0r0|s_" " --- -  -X?%[X? & 2 3X?rOr0ceZdZUdZeeed< d$deedee jde de de d e d ee d ee d ee d edeeededededdfdZej$deedefdZdeefdZddej2ej4ej6fdedededede dedeeeeefeeffdZ deeded e!eeee eeffd!Z"d"eddfd#Z#y)%r1FlaxNprotocollooplimitrgrhritimerrRr=readallpayload_exceptionresponse_with_bodyread_until_eofauto_decompressrjc2||_||_||_||_||_||_||_| |_| |_| |_ | |_ | |_ g|_ d|_ d|_d|_d|_||_||_t'||||_y)NrOF)rrrgrhrirrRr=rrrr_lines_tail _upgraded_payload_payload_parser_auto_decompress_limitr0_headers_parser)rmrrrrgrhrirrRr=rrrrrs rPrnzHttpParser.__init__s"!  *&,    !2"4,#%   <@ / ,]KXrOrocyrlrN)rmros rP parse_messagezHttpParser.parse_message s rOc|j"|jjd|_y|jr%|jj |j|jra|jddk7r|jj dt t 5|j|jcdddSy#1swYyxYw)Nrrz rO)rfeed_eofrrrr Exceptionrrms rPrzHttpParser.feed_eofs    +  ) ) +#'D zz ""4::.{{;;r?f,KK&&s+i(;--dkk:;;;s (CCr6rOdataSEPEMPTYCONTENT_LENGTH METH_CONNECTSEC_WEBSOCKET_KEY1c N g}|jr|j|zdc}|_t|}d} |j} | |kr|j|jss|j || } | | k(r|j s| t|z} R| | k\r.|| | } |dk(r| jd} |j j| | t|z} |j d|k(rj |j|j |j jdttffd } | }|jvr t|j|_t!d|j"}t!d d}|j$Jt'|xst)|xr t+|}|s||dkDsj,rjst/|j$|j0| |j2 }t5||j,|j6|j8|j:|j<|j>|j@ }|jBs;||_n2||k(rtEtFsJt/|j$|j0| |j2 }d |_t5|j"j6d |j>|j@ |_n|s||jHrt/|j$|j0| |j2 }t5||j,|j6|j8d |j<|j>|j@ }|jBs||_ntJ}|j|fn|| d|_|}n|j|jr|j rJnf|r\| |krW|j rJ|jJ |jjM|| d|\}}|rd} t|}d|_n| |kr|r | |kr|| d}n|}||j|fS#|j jwxYw#tN$r}}|jP>|jjRjU|jQtW|n%|jjRjU|d }d}Yd}~d}~wwxYw)NrOrr7 rrrjcjj}|y|jdjs t t |S)Nz )rAgetr isdecimalr&rT) length_hdrrmsgs rPget_content_lengthz0HttpParser.feed_data..get_content_lengthMsL),)HJ)1'+$.#3#3E#:#D#D#F&3N&C C#&z?2rOr=rR)rrr) lengthrFr=rDrRrrrrT)r=rDrrr),rr|rrrfindrrstriprrclearr rTrAr&rEgetattrr=rr!rMr rFr.rrHttpPayloadParserrDrRrrrrdone isinstancer4rr- feed_data BaseExceptionrpayload set_exceptionrK)rmrrrrrrmessagesdata_len start_posrposrrrr=rR empty_bodyrpayload_parsereofexcrs ` @rPrzHttpParser.feed_data s ::#zzD0# D$*t9 yy("##+DNNiiY/)#DKK #c#hI)# #.De|#{{51KK&&t, #c#hI{{2%/0)-););DKK)HC KK--/ 3HSM 3"4!5-<"/0B"CC),!(h !D&sFA6#}}888%CD%I&T"H'@'HN  *#/FQJ"{{$'KK&2 $ &*jj%)&*kk 'G .? ''-(+ '-,/OO%)YY(, 373J3J040E0E$(HH .N$2#6#67E 4#|3#-c3D#EE#E&2 $ &*jj%)&*kk 'G .2DN3D ''*zz,/OO(,040E0E$(HH 4D0",4CVCV&2 $ &*jj%)&*kk 'G .? ''-(+ '-,/OO%)YY(,373J3J040E0E$(HH .N$2#6#67E 4&3G g7!%ij!1DJ D%%-$..;;&)h.;;&++777  $ 4 4 > >tIJ?OQT UIC !I"4yH+/D(w("z I( #DD--U!KK--/d% --9,,44BB 223s8<,,44BB3GCD s%1Q?"R?R T$'A3TT$r@c  |jj|\ }d}d}d}d}tjtjtj tj tjtjtjtjtjtjf }t fd|Dd}|td|d jtj } | rF| j#} | dk(rd}n.| dk(rd}n&| d k(r! jtj$rd} jtj&} | r| j#} | d vr| } jtj} | >d | j#k(rd}n td tj vr td  |||||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. NFc3`K|]%}tj|ddkDs"|'yw)rNrN)r|getall).0hrAs rP z+HttpParser.parse_headers..s(PaW^^Ar5J1Ka1OPs#..z Duplicate 'z' header found.closeTz keep-aliverE)gzipdeflatebrrFz'Request has invalid `Transfer-Encoding`z6Transfer-Encoding can't be present with Content-Length)rrrrCONTENT_LOCATION CONTENT_RANGE CONTENT_TYPEETAGHOST MAX_FORWARDSSERVERTRANSFER_ENCODING USER_AGENTnextr"r CONNECTIONlowerUPGRADECONTENT_ENCODING)rmrorB close_connencodingrErF singletonsbad_hdrconnvencterAs @rPrzHttpParser.parse_headerss $33AA%H      ! !       II II    KK  " " OO  P:PRVW   ;wi!GH H{{4??+  AG|! l"" iGKK $=kk$//0 ))+C//[[// 0 >BHHJ&$%NOO""g-$Lj(GWMMrOvalc||_y)zZSet connection upgraded (to websocket) mode. :param bool val: new state. N)r)rmrs rP set_upgradedzHttpParser.set_upgradeds rO)NNirrrNNNFNTFT)$rHrIrJrrrMrLr rasyncioAbstractEventLooprTrrKrrrnabcabstractmethodr rrUrrrrrr_SEPrrr.rr/rrrNrOrPr1r1s+C$,048! ",0" $;?#'$ $%Y<(%Yw001%Y %Y  %Y  %Y%Y()%Ysm%Y %Y%Y$D$78%Y!%Y%Y%Y !%YN  4; 5  (5/&#22 --#'#:#:u.u.u. u.  u.  u.!u. tE%-./u< =u.nBN%[BN Xd^Xc]DRVV BNHrOr1c&eZdZdZdeedefdZy)r2zRead request status line. Exception .http_exceptions.BadStatusLine could be raised in case of any errors in status line. Returns RawRequestMessage. rorjc 6|djdd} |jdd\}}}t ||j kDr2t dt|j tt |tj|s t|tj|}| t|tt|jdt|jd}|d k(rtj|d }n|j!d rD|j#d \} } } | j#d\} } } tj| | | d }n^|dk(r|dk(rt|d }nFt|d }|j$dk(r*t'|j)djd|j+|\}}}}}}||t,krd }nd}t/|||||||||| S#t$r t|dwxYw)Nrrwrx rXmaxsplitStatus line is too longrCONNECTT) authorityencoded/#?)r> query_stringfragmentr*OPTIONS)r)errorslatin1F)rr}r~r#r|rgr(rKr9 fullmatchr:r*rTgrouprbuild startswith partitionschemer'encoderr+r4)rmrorr=r>r?match version_orG path_part_hash_separator url_fragment_question_mark_separatorqs_partrArBrrDrErFs rPrzHttpRequestParser.parse_message+s+Qxw(9: 0$(JJsQJ$? !FD' t9t)) ))3t/A/A+BCD N  '' '  ) =% %EKKN 3SQ5HI Y ))dD9C __S !8<~~c7J 4I ;D;N;Ns;S 8I/ ))$% C S[Vy0dD)CdD)CzzR%KK'8K9@@J   u %       =M)            G 0%4 / 0s HHN)rHrIrJ__doc__r rr4rrNrOrPr2r2#s"S 4;S 3DS rOr2czeZdZdZe Z d dedeede de de e e e e feeff fd Zde ede fd ZxZS) r3zRead response status line and headers. BadStatusLine could be raised in case of any errors in status line. Returns RawResponseMessage. rrargskwargsrjcD| trdnd}t|||g|i|S)Nr6r7)rsuperr)rmrrrr __class__s rPrzHttpResponseParser.feed_datas/ ;"'Cw s|_ |jtj>k(rE|j|}|dk\r'||t |zd}tj0|_ n||_ y |ry |jtj@k(r%|j j |t |y ) Nr)TrOTrOasciirxrr)FrO)!r,rWr[r+r|rrrr\r/r-r_rarr0rrer HEXDIGITr)rrrTrrdrrbr.begin_http_chunk_receivingrcend_http_chunk_receivingrer]) rmr5rr6required chunk_lenrisize_brsizeheads rPrzHttpPayloadParser.feed_datasG ::00 0||HE I9$')3  &&ui8<<1$LL))+$   &&uYh'7B %%'U89---VQZZ:33 3((50#& ;;*"?"??**S/Cax!JJy!S96%*2AYF%*4C[F99%+\\^F!||Hf="7 %ds 2 27rrs  ":9'OO   4 0  ~ 0 01%C/1)bjj)HIgclI(bjj):;gcl;)rzz2 uWU^ 2::& '      *,>?c?c?L~'%.~B [ #45[ |I $67I XDDNG,G,T()')   /0.0   sGG! G!