id-dZddlZddlZddlmZmZmZmZmZm Z ddl m Z ddl m Z ddlmZddlmZd ZGd d eZeddZeddZeeegedfZeed gedfZGd de ZdedefdZdedd defdZeZ ddlmZejZ ese ZdSdS#e!$rYdSwxYw)z"Http related parsers and protocol.N)Any AwaitableCallable NamedTupleOptionalUnion) CIMultiDict)AbstractStreamWriter) BaseProtocol) NO_EXTENSIONS) StreamWriter HttpVersion HttpVersion10 HttpVersion11c$eZdZUeed<eed<dS)rmajorminorN)__name__ __module__ __qualname__int__annotations__H/opt/cloudlinux/venv/lib/python3.11/site-packages/aiohttp/http_writer.pyrrs" JJJ JJJJJrrCIMultiDict[str]c eZdZ ddedejdededdf dZe de ej fdZ e defd Z dd Zd ejfd ed eddfdZdeddfdZddddedededdfdZdeddddfdZd deddfdZddZdS)!rNprotocolloop on_chunk_senton_headers_sentreturnc||_||_d|_d|_d|_d|_d|_d|_d|_||_ ||_ dS)NFr) _protocolr lengthchunked buffer_size output_size_eof _compress _drain_waiter_on_chunk_sent_on_headers_sent)selfrr r!r"s r__init__zStreamWriter.__init__s\"    "!.;2Arc|jjSN)r% transportr/s rr3zStreamWriter.transport4s ~''rc|jSr2)r%r4s rrzStreamWriter.protocol8s ~rcd|_dS)NT)r'r4s renable_chunkingzStreamWriter.enable_chunking<s  rdeflateencodingstrategyc~|dkrdtjzn tj}tj|||_dS)Ngzip)wbitsr:)zlib MAX_WBITS compressobjr+)r/r9r: zlib_modes renable_compressionzStreamWriter.enable_compression?s<,4v+=+=B''4> ) HMMMrchunkct|}|xj|z c_|xj|z c_|j}|jjr||rtd||dS)Nz!Cannot write to closing transport) lenr(r)r3r% connected is_closingConnectionResetErrorwrite)r/rDsizer3s r_writezStreamWriter._writeEs5zz D  D N ~' L9+< @T@T@V@V+<&'JKK KrTi)drainLIMITrMrNcK|j||d{Vt|tr-|jt |kr|d}|j|j|}|sdS|jDt |}|j|kr|j|z |_n|d|j}d|_|sdS|ry|j r-dt |z d}||zdz}| ||j |kr'|r'd|_ | d{VdSdSdSdS)zWrites chunk of data to a stream. write_eof() indicates end of stream. writer can't be used after write_eof() method being called. write() return drain future. Ncr%x asciis )r- isinstance memoryviewnbytesrFcastr+compressr&r'encoderLr(rM)r/rDrMrN chunk_len chunk_len_pres rrJzStreamWriter.writeNs   *%%e,, , , , , , , , eZ ( ( (|s5zz)) 3 > %N++E22E  ; "E I{i''"kI5 m m, F  #| 8!)CJJ!6 > >w G G %-7 KK   %''E'#$ jjll""""""""" # #('''r status_lineheadersrcK|j||d{Vt||}||dS)z*Write request/response status and headers.N)r._serialize_headersrL)r/r[r\bufs r write_headerszStreamWriter.write_headersys`  ,''00 0 0 0 0 0 0 0!g66 Crrc2K|jrdS|r"|j||d{V|jro|r|j|}||jz}|r4|jr-dt |zd}||zdz}n9|jr2|r.dt |zd}||zdz}nd}|r||| d{Vd|_dS)NrQrRs 0 s0 T) r*r-r+rWflushr'rFrXrLrM)r/rDrYs r write_eofzStreamWriter.write_eofsV 9  F  -T(4%%e,, , , , , , , , > ) 7//66DN00222E = =%E 2::7CC !E),<<| ))!)CJJ!6 > >w G GI%-0@@EE(E   KK   jjll rcdK|jj!|jd{VdSdS)zFlush the write buffer. The intended use is to write await w.write(data) await w.drain() N)r%r3 _drain_helperr4s rrMzStreamWriter.drainsG > # /...00 0 0 0 0 0 0 0 0 0 0 /r)NN)r#N)r)rrrr asyncioAbstractEventLoop_T_OnChunkSent_T_OnHeadersSentr0propertyr Transportr3rr7r?Z_DEFAULT_STRATEGYstrrrCbytesrLboolrJr`rcrMrrrrrs )-,0 BBB'B& B * B  BBBB,(8G$56(((X(,X(9PNNN36N NNNN Ed.2)#)#)#)#&*)#:=)# )#)#)#)#V  );      UT< 1 1 1 1 1 1rrstringr#c4d|vsd|vrtd|S)N  zRNewline or carriage return detected in headers. Potential header injection attack.) ValueError)rps r _safe_headerrus1 v~~ 1    Mrr[r\cd|D}|dzd|zdz}|dS)Nc3`K|])\}}t|dzt|zV*dS)z: N)ru).0kvs r z(_py_serialize_headers..s<XX1<??T)LOO;XXXXXXrz z zutf-8)itemsjoinrX)r[r\ headers_genlines r_py_serialize_headersrsOXX XXXK  &++k":": :Z GD ;;w  r)"__doc__rfr?typingrrrrrr multidictr abcr base_protocolr helpersr __all__rrrrnrhrirrmrurr^aiohttp._http_writer _http_writer_c_serialize_headers ImportErrorrrrrs (( HHHHHHHHHHHHHHHH!!!!!!%%%%%%''''''"""""" K*  Aq!!  Aq!! (E7IdO#;<=H&8%99T?%JKLN1N1N1N1N1'N1N1N1b s 5G E    + //////': 2122   DD s,CC  C