
    *Gjr                        U d dl Z d dlZd dlZd dlZd dlZd dlmZ d dlmZ d dlm	Z	 d dl
mZmZmZmZmZmZmZmZ d dlmZmZmZ d dlmZ dd	lmZ dd
lmZ ddlmZmZm Z m!Z!m"Z" ddl#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+ ddl,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5 ddl6m7Z7m8Z8m9Z9 ddl:m;Z;m<Z< ddl=m>Z> erddl?m@Z@ dZAed         ZB eCejD                  ZEeeCeF                  eGd<    ejH        d          ZIeeF         eGd<    ejJ        deI d          ZKee	eF                  eGd<    ejJ        dejL                  ZMee	eF                  eGd<    ejJ        dejL                  ZNee	eF                  eGd<    ejJ        d          ZOee	eP                  eGd<    ejJ        d           ZQee	eF                  eGd!<    eRh d"          ZSeeReF                  eGd#<    G d$ d%e          ZT G d& d'e          ZU ed(eTeU          ZV G d) d*e          ZW G d+ d,e          ZX G d- d.e          ZY G d/ d0          ZZd1eeF         d2e[fd3Z\ G d4 d5e j]        eeV                   Z^ G d6 d7e^eT                   Z_ G d8 d9e^eU                   Z` G d: d;          Za G d< d=          Zbe_Zce`ZdeTZeeUZf	 e)sdd>lgm_Z_m`Z`mTZTmUZU e_Zhe`ZieTZjeUZkdS dS # el$ r Y dS w xY w)?    N)suppress)IntEnum)Pattern)TYPE_CHECKINGAnyClassVarFinalGenericLiteral
NamedTupleTypeVar)CIMultiDictCIMultiDictProxyistr)URL   )hdrs)BaseProtocol)
HAS_BROTLIHAS_ZSTDBrotliDecompressorZLibDecompressorZSTDDecompressor)_EXC_SENTINELDEBUGDEFAULT_CHUNK_SIZEEMPTY_BODY_METHODSEMPTY_BODY_STATUS_CODESNO_EXTENSIONSBaseTimerContextset_exception)	BadHttpMessageBadHttpMethodBadStatusLineContentEncodingErrorContentLengthErrorInvalidHeaderInvalidURLErrorLineTooLongTransferEncodingError)HttpVersionHttpVersion10HttpVersion11)EMPTY_PAYLOADStreamReader)
RawHeaders)ResponseHandler)HeadersParser
HttpParserHttpRequestParserHttpResponseParserRawRequestMessageRawResponseMessage)   
   
ASCIISETz!#$%&'*+-.^_`|~_TCHAR_SPECIALSz
[0-9A-Za-zz]+TOKENREzHTTP/(\d)\.(\d)VERSREz\d+DIGITSs   [0-9a-fA-F]+	HEXDIGITSz[\x00-\x08\x0a-\x1f\x7f]_FIELD_VALUE_FORBIDDEN_CTL_RE>
   
user-agentcontent-typemax-forwardscontent-rangecontent-lengthcontent-locationtransfer-encodingetaghostserverSINGLETON_HEADERSc                   z    e Zd ZU eed<   eed<   eed<   ded<   eed<   eed<   edz  ed	<   eed
<   eed<   eed<   dS )r6   methodpathversionCIMultiDictProxy[str]headersraw_headersshould_closeNcompressionupgradechunkedurl)	__name__
__module____qualname__str__annotations__r+   r0   boolr        [/home/rurouni/.hermes/hermes-agent/venv/lib/python3.11/site-packages/aiohttp/http_parser.pyr6   r6   o   s}         KKK
III$$$$tMMMMMM	HHHHHr_   r6   c                   |    e Zd ZU eed<   eed<   eed<   ee         ed<   eed<   e	ed<   edz  ed<   e	ed	<   e	ed
<   dS )r7   rO   codereasonrQ   rR   rS   NrT   rU   rV   )
rX   rY   rZ   r+   r\   intr[   r   r0   r]   r^   r_   r`   r7   r7   |   sy         
IIIKKKc""""tMMMMMMMMr_   r7   _MsgTc                       e Zd ZdZdZdZdS )PayloadStater   r      N)rX   rY   rZ   PAYLOAD_COMPLETEPAYLOAD_NEEDS_INPUTPAYLOAD_HAS_PENDING_INPUTr^   r_   r`   rg   rg      s"         !r_   rg   c                       e Zd ZdZdZdZdZdS )
ParseStater   r   rh      N)rX   rY   rZ   
PARSE_NONEPARSE_LENGTHPARSE_CHUNKEDPARSE_UNTIL_EOFr^   r_   r`   rm   rm      s"        JLMOOOr_   rm   c                   "    e Zd ZdZdZdZdZdZdS )
ChunkStater   r   rh   rn      N)rX   rY   rZ   PARSE_CHUNKED_SIZEPARSE_CHUNKED_CHUNKPARSE_CHUNKED_CHUNK_EOFPARSE_MAYBE_TRAILERSPARSE_TRAILERSr^   r_   r`   rt   rt      s+        NNNr_   rt   c                   `    e Zd Z	 	 	 	 ddededededd	f
d
Zdee         dede	f         fdZ
d	S )r2        Fmax_line_sizemax_headersmax_field_sizelaxreturnNc                 >    || _         || _        || _        || _        d S N)r~   r   r   _lax)selfr~   r   r   r   s        r`   __init__zHeadersParser.__init__   s'     +&,			r_   linesrP   c                    t                      }g }d}||         }t          |          }|r	 |                    dd          \  }}n# t          $ r t	          |          d w xY wt          |          dk    rt	          |          |d         |d         hddhz  rt	          |          |                    d          }|                    dd	          }	t                              |	          st	          |          |dz  }||         }| j	        o|o	|d         d
v }
|
rt          |          }|g}|
r|t          |          z  }|| j
        k    r;|dz   d                    |          z   }t          |d d         dz   | j
                  |                    |           |dz  }||k     r||         }|r
|d         d
v }
nd}n|
d                    |          }|                    d          }|                    dd	          }| j	        rd|v sd|v sd|v rt	          |          n)t                              |          rt	          |          | j	        s2|	|v r.|	                                t$          v rt'          d|	 d          |                    |	|           |                    ||f           |t+          |          t-          |          fS )Nr      :r       	   s    	utf-8surrogateescape)r   r   s   : r_   d      ...
 zDuplicate 'z' header found.)r   lensplit
ValueErrorr'   lstripdecoder<   	fullmatchr   r   joinr)   appendstripr@   searchlowerrK   r"   addr   tuple)r   r   rQ   rR   	lines_idxline
line_countbnamebvaluenamecontinuationheader_length
bvalue_lstheader_linevalues                  r`   parse_headerszHeadersParser.parse_headers   sQ    %0MM	YZZ
 ?	04 $

4 3 3vv 4 4 4#D))t34 5zzQ#E*** a%)$Aw. *#D)))]]6**F<<):;;D$$T** +#E*** NI#D  9DD$q'W2DL  . #F$X
" !SYY.M$t':::&+emchhz6J6J&J)'-68K   %%d+++ NI :--$Y/ >+/7g+=L"# # $ *--\\&))FMM'+<==E y ,5==DEMMVu__'/// 6E.55e<< ,#F+++9 JTZZ\\EV5V5V$%H4%H%H%HIIIKKe$$$v///  ?	0B !))5+=+=>>s   A A#)r|   r}   r|   F)rX   rY   rZ   rd   r]   r   listbytesr   r0   r   r^   r_   r`   r2   r2      s         " "
 

 
 	

 
 

 
 
 
L?%[L?	&
2	3L? L? L? L? L? L?r_   r2   rQ   r   c                     |                      t          j        d          }|                                o|                                dv S )z)Check if the upgrade header is supported. >   tcp	websocket)getr   UPGRADEisasciir   )rQ   us     r`   _is_supported_upgrader      s8    DL"%%A99;;<17799(<<<r_   c                      e Zd ZU dZee         ed<   	 	 	 	 	 	 	 	 	 	 	 	 	 	 d-d	edz  d
ej	        dz  de
de
de
de
dedz  de
dz  dedz  dee         dz  dededede
ddfdZej        dee         defd            Zej        dedefd            Zd.dZd.dZdedz  fdZd d!ej        ej        ej        fd"ed#ed$ed%ed&ed'ede ee ee!f                  eef         fd(Z"dee         de d)e#edz  edz  eef         fd*Z$d+eddfd,Z%dS )/r3   Fr   N   r|      Tr   protocollooplimitr~   r   r   timerrb   rM   payload_exceptionresponse_with_bodyread_until_eofauto_decompressmax_msg_queue_sizer   c                 r   || _         || _        || _        || _        || _        || _        || _        || _        |	| _        |
| _        || _	        || _
        g | _        d| _        d| _        d | _        d | _        d| _        || _        || _        t'          |||| j                  | _        || _        d| _        d S )Nr_   Fr   )r   r   r~   r   r   r   rb   rM   r   r   r   _lines_tail	_upgraded_payload_payload_parser_payload_has_more_data_auto_decompress_limitr2   r   _headers_parser_max_msg_queue_size_msg_in_flight)r   r   r   r   r~   r   r   r   rb   rM   r   r   r   r   r   s                  r`   r   zHttpParser.__init__  s    " !	*&,&
	!2"4,#%
9=&+# /,; 
  
 $6 r_   r   c                     d S r   r^   )r   r   s     r`   parse_messagezHttpParser.parse_message4  s    :=#r_   tec                     d S r   r^   r   r   s     r`   _is_chunked_tezHttpParser._is_chunked_te7  s    /2sr_   c                 J    | j         J | j                                          d S r   )r   pause_readingr   s    r`   r   zHttpParser.pause_reading:  s,    #///**,,,,,r_   c                 @    | j         dk    r| xj         dz  c_         dS dS )z;Protocol drained a queued message; free a slot for parsing.r   r   N)r   r   s    r`   message_consumedzHttpParser.message_consumed>  s2    ""1$ #"r_   c                    | j         -| j                                          | j         j        rd | _         n| j        r| j                            | j                   | j        rq| j        d         dk    r| j                            d           t          t                    5  |                     | j                  cd d d            S # 1 swxY w Y   d S )Nr   z
r_   )	r   feed_eofdoner   r   r   r   	Exceptionr   r   s    r`   r   zHttpParser.feed_eofC  s   + ))+++#( ,'+$ z /""4:...{ ;;r?f,,K&&s+++i(( ; ;--dk::; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;ts   !CCCr8   r_   dataSEPEMPTYCONTENT_LENGTHMETH_CONNECTSEC_WEBSOCKET_KEY1c                 f   g }| j         r| j         |z   dc}| _         t          |          }d}	| j        }
| j        }d}|	|k     s| j        r| j        | j        s| j        r!| j        | j        k    r||	d          | _         n|	                    ||	          }||	k    r| j
        s|t          |          z   }	|||	k    r|rt          d          ||	|         }|dk    r|                    d          }t          |          |k    rt          |d d         dz   |          | j
                            |           | j        }t          | j
                  | j        k    rt          d	          |t          |          z   }	| j
        d
         |k    r | j        t          | j
                  z
  }	 |                     | j
                  | j
                                         n# | j
                                         w xY wdt&          d z  ffd} |            }|j        v rt+          |          j        ot/          j                  | _        t1          d| j                  }t1          dd          }| j        J |t6          v pt9          |o|t:          v           }|s||dk    sj        r| j        st?          | j        | j         |
| j!                  }tE          ||j        |j#        | j$        | j%        | j&        | j'        | j(        | j        | j        || j!                  }|j)        s|| _        n||k    rtU          tV                    sJ t?          | j        | j         |
| j!                  }d| _        tE          |j        j#        | j&        | j'        | j(        | j        | j        || j!        
  
        | _        n|s|| j,        rt?          | j        | j         |
| j!                  }tE          ||j        |j#        | j$        | j%        | j&        | j'        | j(        | j        | j        || j!                  }|j)        s|| _        ntZ          }|                    |f           | j        r| xj        dz  c_        j.        }nl||	d          | _         t          | j                   | j        k    r%t          | j         d d         dz   | j                  |}n&| j        | j        r| j
        rJ n| j
        rJ | j        J 	 | j        /                    ||	d          |          \  }}n# t`          $ r{}|}| j1        "| 1                    te          |                    }tg          | j        j4        ||           tj          j6        }d}tU          |t*          tn          f          r Y d }~nd }~ww xY w|tj          j8        k    | _        |tj          j6        urn'd}	t          |          }d | _        |	|k     | j        |r|	|k     r||	d          }n|}|| j        |fS )Nr_   r   FzData after `Connection: close`r9      r   r   zToo many headers receivedr   r   c                      j                                       } | d S t                              |           st	                    t          |           S r   )rQ   r   r>   r   r'   rd   )
length_hdrr   msgs    r`   get_content_lengthz0HttpParser.feed_data.<locals>.get_content_length  sT    ),)H)HJ)1'+t
 $*#3#3J#?#? D&3N&C&C C#&z??2r_   rM   rb   )r   r   r   )lengthrV   rM   rT   rb   r   r   r   headers_parserr~   r   max_trailersr   T)	rM   rT   r   r   r   r~   r   r   r   r   )9r   r   r   r~   r   r   r   r   r   findr   r"   rstripr)   r   r   r   r   clearrd   rQ   r'   rU   r   getattrrM   r   r   r]   r   rV   r/   r   r   HttpPayloadParserrT   rb   r   r   r   r   r   
isinstancer6   r   r.   rS   	feed_datar   r   r[   r!   payloadrg   ri   r*   rk   )r   r   r   r   r   r   r   messagesdata_len	start_posr   max_line_lengthrS   posr   r   r   r   rM   rb   
empty_bodyr   payload_parserpayload_stateunderlying_excreraised_excr   s       `                     @r`   r   zHttpParser.feed_dataT  sO    : 	6#zD0#D$*t99	y,(""d&A" #+DN+,+t/GGG
 "&ijj!1DJiiY//)##DK# #c#hhI)### O,-MNNN  	#.De||#{{5114yy?22)$tt*v*=OOOK&&t,,,&*&9O4;''$*:::,-HIII #c#hhI {2%//'+'7#dk:J:J'J0)-););DK)H)HC K--////DK--////3C$J 3 3 3 3 3 3 3 "4!3!5!5-<<"/0B"C"CC), *9NK: : ")h!D!D&sFA66#}888%)-D%D &"Cv1C'CI I
  * K4$0VaZZCKZ$(N 6@ '3 $&*j%)&*k	' ' 'G .? ''-(+'-,/O%)Y373J040E$(H/3/C.2.@/3/B-9&*k. . .N  $2#6 F7E 4#|33#-c3D#E#EEE#E&2 $&*j%)&*k	' ' 'G .2DN3D ''*z,/O040E$(H/3/C.2.@/3/B-9&*k4 4 4D00 ", 44CV&2 $&*j%)&*k	' ' 'G .? ''-(+'-,/O%)Y373J040E$(H/3/C.2.@/3/B-9&*k. . .N  $2#6 F7E 4&3G g7773 5 //14//'*'7!%ijj!1DJ4:);;;)$*TcT*:V*CTEWXXX D %-$.-;&&  ;&&+777*.*>*H*HYZZ(#+ +'M44 !   2@L-9'+'='=c.>Q>Q'R'R!,4$&   %1$AMD!&8M(N       & "\%KK + !(EEE 	t99'+$c (""d&A"f  	I((	

#DDD--s%   4G( (H&U 
WA1WWrP   c                 ^   | j                             |          \  }}d}d}d}d}|                    t          j        d          }|r>d |D             }	d|	v rd}nd|	v rd}d|	v r!|                    t          j                  rd}|                    t          j        d	          }
|
                                r|
	                                d
v r|
}|                    t          j
                  }|4|                     |          rd}t          j        |v rt          d          ||||||fS )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.
        NFr^   c                     h | ]N}d  |                     d          D             D ],}||                                |                                -OS )c              3   @   K   | ]}|                     d           V  dS ) 	N)r   ).0parts     r`   	<genexpr>z5HttpParser.parse_headers.<locals>.<setcomp>.<genexpr>Z  s.      RRDdjj//RRRRRRr_   ,)r   r   r   )r  
conn_valuetokens      r`   	<setcomp>z+HttpParser.parse_headers.<locals>.<setcomp>W  s{       RRJ<L<LS<Q<QRRR  	 #]]__	   r_   closeTz
keep-aliverU   r   >   brgzipzstddeflatez6Transfer-Encoding can't be present with Content-Length)r   r   getallr   
CONNECTIONr   r   CONTENT_ENCODINGr   r   TRANSFER_ENCODINGr   r   r"   )r   r   rQ   rR   
close_connencodingrU   rV   conn_valuesconn_tokensencr   s               r`   r   zHttpParser.parse_headersC  sg     $3AA%HH
 nnT_b99 	 "-  K +%%!

,,"
 K''GKK,E,E' kk$/44;;== 	SYY[[,MMMH [[/00>""2&& "g--$L   j(GWMMr_   valc                     || _         dS )zZSet connection upgraded (to websocket) mode.

        :param bool val: new state.
        N)r   )r   r  s     r`   set_upgradedzHttpParser.set_upgradedy  s    
 r_   )NNr   r|   r   r|   NNNNTFTr   r   N)&rX   rY   rZ   r   r   r]   r\   r   asyncioAbstractEventLooprd   r    r[   typeBaseExceptionr   abcabstractmethodr   r   re   r   r   r   r   r   r   r   r   r   _SEPr   r   r/   r   r0   r   r  r^   r_   r`   r3   r3     s        C$ )-15!")-!8<#'$ $"#+  + %+  '$.+  	+ 
 +  +  +   $&+  Dj+  d
+   .5+  !+  +  +   +   
!+  +  +  + Z 	=4;=5=== =22222 2- - - -% % % %
%$,    ( #2 -#'#:m. m.m. m. 	m.
 m. m. !m. 
tE%-./u<	=m. m. m. m.^4N%[4N	TD[#*dDP
4N 4N 4N 4Nl       r_   r3   c                   >    e Zd ZdZdee         defdZdede	fdZ
dS )r4   zRead request status line.

    Exception .http_exceptions.BadStatusLine
    could be raised in case of any errors in status line.
    Returns RawRequestMessage.
    r   r   c                    |d                              dd          }	 |                    dd          \  }}}n# t          $ r t          |          d w xY wt                              |          st          |          t                              |          }|t          |          t          t          |
                    d                    t          |
                    d                              }|dk    rt          j        |d	
          }n|                    d          rK|                    d          \  }	}
}|	                    d          \  }	}}t          j        |	||d	          }np|dk    r|dk    rt          |d	          }nRt          |d	          }|j        dk    r6t!          |                    d                               d                    |                     |dd                    \  }}}}}}|t&          k    rt(          j        |vrt-          d          ||t.          k    rd	}nd}t1          ||||||||||
  
        S )Nr   r   r    rh   maxsplitr   CONNECTT)	authorityencoded/#?)rN   query_stringfragmentr,  *OPTIONS)r,  r   )errorslatin1z!Missing 'Host' header in request.F)r   r   r   r#   r<   r   r=   r$   r+   rd   groupr   build
startswith	partitionschemer(   encoder   r-   r   HOSTr"   r,   r6   )r   r   r   rM   rN   rO   match	version_orW   	path_part_hash_separatorurl_fragment_question_mark_separatorqs_partrQ   rR   r  rT   rU   rV   s                       r`   r   zHttpRequestParser.parse_message  s   Qxw(9::	0$(JJsQJ$?$?!FD'' 	0 	0 	0%%4/	0   (( 	('''   ))=%%%EKKNN 3 3SQ5H5HII	Y )dD999CC__S!! 	 8<~~c7J7J4I;D;N;Ns;S;S8I/ )$%	  CC S[[Vy00dD)))CC dD)))CzR%KK'8K99@@JJ   uQRRy))	
 %%$)7*B*B !DEEE=M)) 
 
 	
s	   : Ar   c                     |                     dd          d                             d          }|                                r|                                dk    rdS t	          d          )	Nr  r   r(  r   r  rV   Tz'Request has invalid `Transfer-Encoding`)rsplitr   r   r   r"   r   s     r`   r   z HttpRequestParser._is_chunked_te  s`    YYsQY''+11%88::<< 	BHHJJ)334FGGGr_   N)rX   rY   rZ   __doc__r   r   r6   r   r[   r]   r   r^   r_   r`   r4   r4     sv         Q
4; Q
3D Q
 Q
 Q
 Q
fH H H H H H H Hr_   r4   c                        e Zd ZU dZded<   e Z	 ddededz  de	de	d	e
ee
eef                  eef         f
 fd
Zdee         d	efdZded	efdZ xZS )r5   zRead response status line and headers.

    BadStatusLine could be raised in case of any errors in status line.
    Returns RawResponseMessage.
    r1   r   Nr   r   argskwargsr   c                 Z    |t           rdnd} t                      j        ||g|R i |S )Nr8   r9   )r   superr   )r   r   r   rH  rI  	__class__s        r`   r   zHttpResponseParser.feed_data  sA     ;"-''C uww s<T<<<V<<<r_   r   c                    |d                              dd          }	 |                    d          \  }}n# t          $ r t          |          d w xY w	 |                    d          \  }}n&# t          $ r |                                }d}Y nw xY wt
                              |          }|t          |          t          t          |	                    d                    t          |	                    d                              }t          |          dk    st                              |          st          |          t          |          }|                     |dd                    \  }	}
}}}}|E|t          k    rd	}n7d
|cxk    rdk     sn |dv rd}n!t          j        |	v st          j        |	v rd}nd	}t#          |||                                |	|
||||	  	        S )Nr   r   r   r   r(  r   rh   rn   Tr      >   0     F)r   r   r   r$   r   r=   r   r+   rd   r6  r   r>   r   r,   r   r   r  r7   )r   r   r   rO   statusrc   r=  r>  status_irQ   rR   r  rT   rU   rV   s                  r`   r   z HttpResponseParser.parse_message  s%   Qxw(9::	0"jj!j44OGVV 	0 	0 	0%%4/	0	#\\1\55NFFF 	 	 	\\^^FFFF	
   ))=%%%EKKNN 3 3SQ5H5HII	 v;;!6#3#3F#;#;%%%v;; uQRRy))	
 =M))&&&&3&&&&(j*@*@$//43IW3T3T !LLNN

 

 
	
s   8 AA1 1 BBr   c                     |                     dd          d                             d                                          dk    S )Nr  r   r(  r   r  rV   )rE  r   r   r   s     r`   r   z!HttpResponseParser._is_chunked_te6  s<    yyqy))"-33E::@@BBiOOr_   r   )rX   rY   rZ   rF  r\   r   r   r   r$  r   r   r   r7   r/   r]   r   r   r[   r   __classcell__)rL  s   @r`   r5   r5     s            )C
  	= 	=	= D[	= 		=
 	= 
tE,l:;<dEI	J	= 	= 	= 	= 	= 	=8
4; 8
3E 8
 8
 8
 8
tP P P P P P P P P Pr_   r5   c                        e Zd Z	 	 	 	 	 	 	 	 ddddeddededz  d	ed
edz  dedz  dedz  dededededededededdfdZ	d dZ
d dZ	 d!dedededeeef         fdZdS )"r   NFTr|   r   )r~   r   r   r   r   r   rV   rT   rb   rM   r   r   r   r   r~   r   r   r   r   c
                p   d| _         d| _        t          j        | _        t
          j        | _        d| _        d| _	        || _
        |	| _        |
| _        || _        || _        || _        d| _        g | _        d| _        d| _        |r|r| j
        rt)          |||          }n|}|s-t          j        | _        |                                 d| _        n[|rt          j        | _        nG|Et          j        | _        || _         || _        | j         dk    r|                                 d| _        || _        d S )Nr   Fr_   )max_decompress_sizeT)_length_pausedrm   rr   _typert   rv   _chunk_chunk_size_chunk_tailr   r   r   _max_line_size_max_field_size_max_trailers_more_data_available_trailer_linesr   _eof_pendingDeflateBufferro   r   rq   rp   _length_expectedr   )r   r   r   rV   rT   rb   rM   r   r   r   r   r~   r   r   r   real_payloads                   r`   r   zHttpPayloadParser.__init__<  sV   $ /
 3 /	-+-)$)!+-	!  	#+ 	#$2G 	#9F%: : :LL #L " 	!#.DJ!!###DII 	!#1DJJ#0DJ!DL$*D!|q  %%''' 	#r_   c                     d| _         d S )NT)rY  r   s    r`   r   zHttpPayloadParser.pause_readingy  s    r_   c                    | j         t          j        k    rnd| _        | j        r7| j        r	d| _        d S | j                            dd          | _        | j        7| j                                         d| _	        d| _        d S | j         t          j
        k    r*| j        | j        z
  }t          d| d| j         d          | j         t          j        k    rt          d          d S )	NTFr_   r   z;Not enough data to satisfy content length header (received z of z bytes).z2Not enough data to satisfy transfer length header.)rZ  rm   rr   rc  ra  rY  r   r   r   r   rp   re  rX  r&   rq   r*   )r   receiveds     r`   r   zHttpPayloadParser.feed_eof|  s   :333 $D+ K< #(DLF,0L,B,B3,J,J)	 + K
 L!!###DI %DZ:222,t|;H$K%K K+/+@K K K   Z:333'D   43r_   r8      ;chunkr   	CHUNK_EXTc                    | j         t          j        k    r| j        r| j        |z   }d| _        | j        }t          |t          |          z
  d          | _        | j                            |d|         |          | _	        | j	        rR| j
        r$d| _
        ||d         | _        t          j        dfS | j                            dd          | _	        | j	        R| j        dk    r/| j                                         t          j        ||d         fS n| j         t          j        k    r| j        r| j        t"          j        k    r[| j        }| j        t"          j        k    r| j        }t          | j                  |k    r t-          | j        dd         dz   |          | j        |z   }d| _        |s| j	        rt| j        t"          j        k    r|                    |          }|dk    r|| j        k    r t-          |dd         dz   | j                  |                    |d|          }|dk    rB|d|         }d|||         x}	v r)t3          d|	          }
t5          | j        |
           |
n
|d|         }| j        r|                                }t;          j        t>          |          sBt3          |d|                              d	d
                    }
t5          | j        |
           |
tC          tE          |          d          }||t          |          z   d         }|dk    r8t"          j        | _        | j        r|#                    d          r
|dd         }nGt"          j        | _        || _$        | j        %                                 n|| _        t          j&        dfS | j        t"          j        k    r| j
        rd| _
        || _        t          j        dfS | j$        }t          |t          |          z
  d          | _$        | j                            |d|         |          | _	        ||d         }| j	        r| j$        rd| _
        t          j&        dfS t"          j'        | _        | j        (                                 | j        t"          j'        k    r| j        r|#                    d          r
|dd         }|dt          |                   |k    r)|t          |          d         }t"          j        | _        nvt          |          t          |          k    s||dt          |                   k    r&t3          d          }
t5          | j        |
           |
|| _        t          j&        dfS | j        t"          j        k    r|                    |          }|dk     r|| _        t          j&        dfS |d|         }||t          |          z   d         }|dk    r|)                    d          }t          |          | j        k    r t-          |dd         dz   | j                  | j*        +                    |           t          | j*                  | j,        k    rt[          d          | j*        d         dk    r	 | j.        /                    | j*                  \  }}| j*        0                                 n# | j*        0                                 w xY w| j                                         t          j        |fS |l| j	        tn| j         t          j1        k    r| j                            |t          |                    | _	        | j	        rC| j
        rd| _
        t          j        dfS | j                            dd          | _	        | j	        C| j2        r5| j                                         d| _3        d| _2        t          j        dfS t          j&        dfS )a  Receive a chunk of data to process.

        Return:
            PayloadState - The current state of payload processing.
                           This function may be called with empty bytes after returning
                           PAYLOAD_HAS_PENDING_INPUT to continue processing after a pause.
            bytes - If payload is complete, this is the unconsumed bytes intended for the
                    next message/payload, b"" otherwise.
        r_   r   NFr   r   r9   z"Unexpected LF in chunk-extension: asciir      r   r   z3Chunk size mismatch: expected CRLF after chunk datazToo many trailers receivedr   T)4rZ  rm   rp   r]  rX  maxr   r   r   ra  rY  rg   rk   r   ri   rq   r[  rt   rw   r^  rz   r_  r)   rv   r   r*   r!   r   r   rer   r?   r   rd   r   r8  r\  begin_http_chunk_receivingrj   rx   end_http_chunk_receivingr   rb  r   r`  r"   r   r   r   rr   rc  r   )r   rk  r   rl  requiredr   r   isize_bextexcsizer   trailersraw_trailerss                  r`   r   zHttpPayloadParser.feed_data  s    :000 '(50#& |Hx#e**4a88DL(,(>(>ixi () )D% + K< G#(DL',XYY'7D$'A3FF,0L,B,B3,J,J) + K |q  %%'''#4eHII6FFF ! Z:333 ';*"@@@&*&9O{j&???*.*>4+,,>>) ,TcT2V;_   (50#&  tD44 tD;*"???**S//Caxx !444"-eDSDkF.BDDW"X"XX!JJy!S9966%*2A2YF$ae)<==&;$P$P$P'" '" !.dlC @ @ @&)	  > &+4C4[F9 4%+\\^^F!|Iv>> &"7 %dsd 2 27<M N N# #C *$,<<<"%I"5=="55 %cCHHn&6&6 7199*4*CDK#y 2U-=-=e-D-D 2(-abb	*4*HDK/3D, LCCEEEE+0(+?DD ;*"@@@| K',+0(+EsJJ#/H'*8c%jj+@!'D'DD$040F0Fixi((1 1D- "()),E0 ! ' E',+?DD","DDKL99;;; ;*"DDDy *U%5%5e%<%< * %abb	Zs3xxZ(C// %c#hhjj 1&0&CUs3xx//5C#e**<M3M3M3Q  &dlC888!	+0(+?DD;*";;;**S//CQww+0(+?DD #;D!#C."2"23Ee||#{{5114yy4#777)$tt*v*=t?STTT'..t4444.//$2DDD,-IJJJ *2.#558595I5W5W $ 36 62Hl !/557777D/557777--///+<eCCi  tD44 tDn Z:555(,(>(>uc%jj(Q(QD%+ K< G#(DL'A3FF,0L,B,B3,J,J)	 + K   :%%''' 	$)!#4c99/44s   ("[$ $[?)NFNNNTTFr  )r8   rj  )rX   rY   rZ   r   r/   rd   r]   r[   r2   r   r   r   r   r$  r   rg   r   r^   r_   r`   r   r   ;  s        ""&!#' $;$ ""'!;$ ;$ ;$;$ d
;$ 	;$
 4Z;$ Dj;$ d
;$ !;$ ;$ ;$ &;$ ;$ ;$ ;$  !;$" 
#;$ ;$ ;$ ;$z      . EIv5 v5v5!%v5<Av5	|U"	#v5 v5 v5 v5 v5 v5r_   r   c            	           e Zd ZU dZeed<   efdededz  de	ddfdZ
efd	ed
eddfdZdede	defdZddZddZddZdS )rd  zDDeflateStream decompress stream and feed data into specified stream.decompressoroutr  NrW  r   c                 R   || _         d| _        | j        |_        || _        d| _        |  |dk    r*t
          st          d          t                      | _        nE|dk    r*t          st          d          t                      | _        nt          |          | _        || _        d S )Nr   Fr  zECan not decode content-encoding: brotli (br). Please install `Brotli`r  zRCan not decode content-encoding: zstandard (zstd). Please install `backports.zstd`)r  )r~  ry  total_compressed_bytesr  _started_decodingr   r%   r   r}  r   r   r   _max_decompress_size)r   r~  r  rW  s       r`   r   zDeflateBuffer.__init__P  s     	%)Y" !&St *.   !3 4 4D *6   !1 2 2D 0( C C CD$7!!!r_   rx  	exc_causec                 2    t          | j        ||           d S r   )r!   r~  )r   rx  r  s      r`   r!   zDeflateBuffer.set_exceptionp  s    
 	dhY/////r_   rk  ry  c                 "   | xj         |z  c_         | j         | j        _        | j        s5| j        dk    r*|d         dz  dk    rt          | j        d          | _        | j        j        }|t          j	        k    rdnt          | j        |          }	 | j                            ||          }n%# t          $ r t          d| j        z            w xY wd| _        |r(| j                            |t!          |                     | j        j        S )	Nr  r         T)r  suppress_deflate_header)
max_lengthz#Can not decode content-encoding: %s)ry  r~  r  r  r  r   r}  
_low_watersysmaxsizerp  r  decompress_syncr   r%   r   r   data_available)r   rk  ry  	low_waterr  s        r`   r   zDeflateBuffer.feed_dataw  s1   		T		*.)' &		**a3!## !1! ! !D H'	ck))AAs43Li/X/X 		%55e
5SSEE 	 	 	&5E  	
 "& 	2Huc%jj111 //s   B/ /"Cc                     | j                                         }|rJ | j        dk    r&| j        dk    r| j         j        st          d          | j                                         d S )Nr   r  )r}  flushry  r  eofr%   r~  r   )r   rk  s     r`   r   zDeflateBuffer.feed_eof  sn    !'')) y9q==}	))$2C2G)*9555r_   c                 8    | j                                          d S r   )r~  rr  r   s    r`   rr  z(DeflateBuffer.begin_http_chunk_receiving  s    ++-----r_   c                 8    | j                                          d S r   )r~  rs  r   s    r`   rs  z&DeflateBuffer.end_http_chunk_receiving  s    ))+++++r_   r  )rX   rY   rZ   rF  r   r\   r   r/   r[   rd   r   r   r!  r!   r   r]   r   r   rr  rs  r^   r_   r`   rd  rd  K  s        NN $6	8 88 *8 !	8
 
8 8 8 8F $10 00 !0 
	0 0 0 0!0u !0C !0D !0 !0 !0 !0F   . . . ., , , , , ,r_   rd  )r4   r5   r6   r7   )mr"  r  rq  stringr  
contextlibr   enumr   r   typingr   r   r   r	   r
   r   r   r   	multidictr   r   r   yarlr   r   r   base_protocolr   compression_utilsr   r   r   r   r   helpersr   r   r   r   r   r   r    r!   http_exceptionsr"   r#   r$   r%   r&   r'   r(   r)   r*   http_writerr+   r,   r-   streamsr.   r/   typedefsr0   client_protor1   __all__r$  set	printabler:   r[   r\   escaper;   compiler<   ASCIIr=   r>   r?   r   r@   	frozensetrK   r6   r7   re   rg   rm   rt   r2   r]   r   ABCr3   r4   r5   r   rd  HttpRequestParserPyHttpResponseParserPyRawRequestMessagePyRawResponseMessagePy_http_parserHttpRequestParserCHttpResponseParserCRawRequestMessageCRawResponseMessageCImportErrorr^   r_   r`   <module>r     s&   




  				  



                  	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 : 9 9 9 9 9 9 9 9 9             ' ' ' ' ' '             	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 C B B B B B B B B B 0 0 0 0 0 0 0 0             .------ ~C 011%C/ 1 1 1 (bi(9::s : : :)rz*J*J*J*JKKws|	 K K K(bj);RXFFgcl F F F(bj::gcl : : :#-2:.>#?#?	5  ? ? ?5?RZ6 6 uWS\2    ,59  , , 53(    
 
 
 
 

 
 
 
	 	 	 	 	 	 	 	 	*,>??" " " " "7 " " "              Y? Y? Y? Y? Y? Y? Y? Y?x=#3C#8 =T = = = =z z z z z'%. z z zzaH aH aH aH aH
#45 aH aH aHHSP SP SP SP SP$67 SP SP SPlM5 M5 M5 M5 M5 M5 M5 M5``, `, `, `, `, `, `, `,F ( ) ' ) 	 1	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 /0.01 1  	 	 	DD	s   J6 6J?>J?