
    2BhD                        S SK r S SKrS SKrS SKJrJrJrJr  S SKJ	r	J
r
JrJrJrJrJrJrJrJr  S SKJrJr  S SKJr  S SKJrJr  SrSrSrS	r\R:                  " S
\R<                  " \5      -  5      r\R:                  " S5      r \R:                  " S5      r!\R:                  " S5      r" " S S5      r# " S S\#5      r$g)    N)ChunkedReaderLengthReader	EOFReaderBody)
InvalidHeaderInvalidHeaderName
NoMoreDataInvalidRequestLineInvalidRequestMethodInvalidHTTPVersionLimitRequestLineLimitRequestHeadersUnsupportedTransferCodingObsoleteFolding)InvalidProxyLineForbiddenProxyRequest)InvalidSchemeHeaders)bytes_to_strsplit_request_urii  i   z!#$%&'*+-.^_`|~z[%s0-9a-zA-Z]+z[a-z#]zHTTP/(\d)\.(\d)z[\0\r\n]c                   <    \ rS rSrS rS rS rS
S jrS rS r	Sr
g	)Message!   c                 x   Xl         X l        X0l        X0l        S U l        / U l        / U l        S U l        UR                  (       a  SOSU l	        SU l
        UR                  U l        U R                  S::  d  U R                  [        :  a  [        U l        UR                  U l        U R                  S:  a  [        U l        U R                  =(       d    [        nU R                  US-   -  S-   U l        U R!                  U R                  5      nU R                  R#                  U5        U R%                  5         g )NhttpshttpFr         )cfgunreader	peer_addrremote_addrversionheaderstrailersbodyis_sslscheme
must_closelimit_request_fieldsMAX_HEADERSlimit_request_field_sizeDEFAULT_MAX_HEADERFIELD_SIZEmax_buffer_headersparseunreadset_body_reader)selfr   r   r    max_header_field_sizeunuseds         G/var/www/html/env/lib/python3.13/site-packages/gunicorn/http/message.py__init__Message.__init__"   s
    "$	!$g %($<$<!%%*,,{:(3D%(+(D(D%((1,,HD) !% = = ]A]"&";";"Q&#(*+#, DMM*V$    c                     SU l         g )NT)r(   r1   s    r4   force_closeMessage.force_close@   s	    r7   c                     [        5       eN)NotImplementedError)r1   r   s     r4   r.   Message.parseC   s    !##r7   c                    U R                   n/ nUR                  S5       Vs/ s H  n[        U5      PM     nnSn0 n/ n	U(       a  OdSUR                  ;   d<  [	        U R
                  [        5      (       a  U R
                  S   UR                  ;   a  UR                  nUR                  n	U(       Ga  [        U5      U R                  :  a  [        S5      eUR                  S5      n
[        U
5      [        S5      -   nU
R                  S5      S::  a  [        U
5      eU
R                  SS5      u  pU R                   R                  (       a  UR!                  S	5      n["        R%                  U5      (       d  ['        U5      eUR)                  5       nUR+                  S	5      /nU(       a  US   R-                  S
5      (       a  U R                   R.                  (       d  [1        U5      eUR                  S5      n
U[        U
5      [        S5      -   -  nXR2                  s=:  a  S:  a  O  O[        S5      eUR5                  U
R+                  S5      5        U(       a  US   R-                  S
5      (       a  M  SR7                  U5      n[8        R;                  U5      (       a  [        U5      eXR2                  s=:  a  S:  a  O  O[        S5      eX;   a;  XU   :H  nU(       a  SOSnU(       a  XR<                  :w  a
  [?        5       eOSnXl        SU;   aO  X;   d  SU	;   a  OCU R                   R@                  S:X  a  O(U R                   R@                  S:X  a  GM  ['        U5      eUR5                  X45        U(       a  GM  U$ s  snf )N   
F*r   zlimit request headers fieldsz
:    	) 	z!limit request headers fields sizez	 rF   r   r   T_	dangerousdrop)!r   splitr   forwarded_allow_ips
isinstancer    tuplesecure_scheme_headersforwarder_headerslenr)   r   popfindr   strip_header_spacesrstripTOKEN_RE	fullmatchr   upperstrip
startswithpermit_obsolete_foldingr   r+   appendjoin!RFC9110_5_5_INVALID_AND_DANGEROUSsearchr'   r   
header_map)r1   datafrom_trailerr   r#   linelinesscheme_headerrO   rP   currheader_lengthnamevaluesecurer'   s                   r4   parse_headersMessage.parse_headersF   s   hh 15

70CD0Cd#0CD  " S,,,T^^U33"c&=&==$'$=$=! # 5 5 7|t888)*HII 99Q<DIF3Myy~"#D))**S!,KDxx++{{5)%%d++'-- ::<D[['(E E!H//<<xx77)$//yy|TS[!88 #@#@D1D- /< = =TZZ./ E!H//<< HHUOE077>>#D))<<@q@)*MNN,"==$* ,244 - %)M"(K d{,7H0HXX((K7XX((F2  ,D11NND=)Q eT y Es   N
c                     SnS nU R                    H  u  p4US:X  a  Ub
  [        SU S9eUnM  US:X  d  M$  UR                  S5       Vs/ s H  oUR                  5       PM     nnU H  nUR	                  5       S:X  a  U(       a
  [        SU S9eSnM,  UR	                  5       S:X  a  U(       a
  [        SU S9eMS  UR	                  5       S	;   a#  U(       a
  [        SU S9eU R                  5         M  [        U5      e   M     U(       aK  U R                  S
:  a
  [        SU S9eUb
  [        SU S9e[        [        X R                  5      5      U l        g Ubj   [        U5      R                  5       (       a  [        U5      nO
[        SU S9eUS:  a
  [        SU S9e[        [!        U R                  U5      5      U l        g [        [#        U R                  5      5      U l        g s  snf ! [         a    [        SU S9ef = f)NFzCONTENT-LENGTH)reqzTRANSFER-ENCODING,chunkedTidentity)compressdeflategzip)rD   rD   r   )r#   r   rK   rY   lowerr:   r   r"   r   r   r   r%   str	isnumericint
ValueErrorr   r   )r1   rp   content_lengthrh   ri   vvalsvals           r4   r0   Message.set_body_reader   s   !\\MT''!-'(8dCC!&,, ,1;;s+;<+;a	+;<Cyy{i/""/0C"NN"&
2 #"/0C"NN #(GG""/0C"NN((*7>>#   *8  ||f$#$7TBB) $$4$??]4?@DI'@~&0022%(%8N'(8dCC !#$4$??\$--HIDIYt}}56DI] =L  @#$4$??@s   G#)G(  
G( (G=c                     U R                   (       a  gU R                   H<  u  pUS:X  d  M  UR                  5       R                  S5      nUS:X  a    gUS:X  a    g  O   U R                  S:*  $ )NT
CONNECTIONrE   closez
keep-aliveFrD   r   )r(   r#   ru   rY   r"   )r1   hr{   s      r4   should_closeMessage.should_close   sa    ??llFQL GGIOOE*<,&  # ||v%%r7   )r%   r   r#   r+   r)   r-   r(   r    r!   r'   r$   r   r"   NF)__name__
__module____qualname____firstlineno__r5   r:   r.   rk   r0   r   __static_attributes__ r7   r4   r   r   !   s#    <$aF:7x&r7   r   c                   j   ^  \ rS rSrSU 4S jjrSS jrS rSS jrS rS r	S r
S	 rU 4S
 jrSrU =r$ )Request   c                   > S U l         S U l        S U l        S U l        S U l        UR
                  U l        U R
                  S:  d  U R
                  [        :  a  [        U l        X@l        S U l        [        TU ])  XU5        g Nr   )methoduripathqueryfragmentlimit_request_lineMAX_REQUEST_LINE
req_numberproxy_protocol_infosuperr5   )r1   r   r   r    r   	__class__s        r4   r5   Request.__init__   sw    	
 #&"8"8##a'**.>>&6D#$#' 	2r7   c                     UR                  5       nU(       d*  U(       a
  [        5       e[        UR                  5       5      eUR	                  U5        g r=   )readStopIterationr	   getvaluewrite)r1   r   bufstopra   s        r4   get_dataRequest.get_data  s7    }}#o%S\\^,,		$r7   c                    [         R                  " 5       nU R                  XSS9  U R                  XU R                  5      u  p4U R                  [        U5      5      (       aD  [         R                  " 5       nUR                  U5        U R                  XU R                  5      u  p4U R                  U5        [         R                  " 5       nUR                  U5        UR                  5       nUR                  S5      nUS S S:H  n UR                  S5      nUS S S:H  nUS:  aM  U(       dF  U R                  X5        UR                  5       n[        U5      U R                  :  a  [        S5      eOOMo  U(       a  U R                  R                  USS  5        gU R!                  US U S	S
9U l        XVS-   S  nS nU$ )NT)r   s   

r   rA   r   zmax buffer headersr7   F)rb   r   )ioBytesIOr   	read_liner   proxy_protocolr   r   parse_request_liner   rS   rQ   r-   r   r   r/   rk   r#   )	r1   r   r   rc   rbufra   idxdonerets	            r4   r.   Request.parse  s   jjlh$/ ^^H43J3JK
 |D122**,CIIdOt7N7NOJD%jjl		$ ||~ii$BQx7"))K(C8w&DQwth,||~t9t666-.BCC 7   MM  ab*))$t*5)I78n
r7   c                 H   UR                  5       n UR                  S5      nUS:  a  XSs=:  a  S:  a  O  O[        XS5      eOT[        U5      S-
  Us=:  a  S:  a  O  O[        [        U5      U5      eU R	                  X5        UR                  5       nM  US U XES-   S  4$ )NrA   r   r   )r   rS   r   rQ   r   )r1   r   r   limitra   r   s         r4   r   Request.read_line:  s    ||~))G$Cax??*3664y1}u(q(&s4y%88MM((<<>D  Tc
1WX  	 r7   c                     U R                   R                  (       d  gU R                  S:w  a  gUR                  S5      (       d  gU R	                  5         U R                  U5        g)zDetect, check and parse proxy protocol.

:raises: ForbiddenProxyRequest, InvalidProxyLine.
:return: True for proxy protocol line else False
FrD   PROXYT)r   r   r   rZ   proxy_protocol_access_checkparse_proxy_protocol)r1   rc   s     r4   r   Request.proxy_protocolL  sR     xx&&??aw''((*!!$'r7   c                     SU R                   R                  ;  a`  [        U R                  [        5      (       a@  U R                  S   U R                   R                  ;  a  [        U R                  S   5      eg g g )NrB   r   )r   proxy_allow_ipsrM   r    rN   r   r9   s    r4   r   #Request.proxy_protocol_access_checka  sd    txx///t~~u--q!)A)AA'q(9:: B . 0r7   c                 0   UR                  S5      n[        U5      S:w  a  [        U5      eUS   nUS   nUS   nUS;  a  [        SU-  5      eUS:X  aL   [        R                  " [        R
                  U5        [        R                  " [        R
                  U5        OQUS	:X  aK   [        R                  " [        R                  U5        [        R                  " [        R                  U5         [        US
   5      n[        US   5      nSUs=::  a  S::  a  O  OSUs=::  a  S::  d  O  [        SU-  5      eUUUUUS.U l
        g ! [         a    [        U5      ef = f! [         a    [        U5      ef = f! [         a    [        SU-  5      ef = f)NrF      rD   r      )TCP4TCP6zprotocol '%s' not supportedr   r   r      zinvalid port %sr   i  )r   client_addrclient_port
proxy_addr
proxy_port)rK   rQ   r   socket	inet_ptonAF_INETOSErrorAF_INET6rx   ry   r   )r1   rc   bitsprotos_addrd_addrs_portd_ports           r4   r   Request.parse_proxy_protocolh  s   zz#t9>"4(( Qaa (("#@5#HIIF?-  8  8 f_-  &9  &9	=a\Fa\F f%%A,@5,@"#4t#;<< $!!  $
 '  -&t,,-  -&t,,-  	="#4t#;<<	=s&   A
E
 (A
E# 3E< 
E #E9<Fc                 ~   UR                  SS5       Vs/ s H  n[        U5      PM     nn[        U5      S:w  a  [        [        U5      5      eUS   U l        U R
                  R                  (       di  [        R                  U R                  5      (       a  [        U R                  5      eS[        US   5      s=::  a  S::  d  O  [        U R                  5      e[        R                  U R                  5      (       d  [        U R                  5      eU R
                  R                  (       a  U R                  R                  5       U l        US   U l        [        U R                  5      S:X  a  [        [        U5      5      e [        U R                  5      nUR"                  =(       d    SU l        UR$                  =(       d    SU l        UR&                  =(       d    SU l        [(        R                  US   5      nUc  [+        US   5      e[-        UR/                  S5      5      [-        UR/                  S5      5      4U l        SU R0                  s=::  a  S	:  d3  O  U R
                  R2                  (       d  [+        U R0                  5      eg g s  snf ! [          a    [        [        U5      5      ef = f)
N    r   r   r      rD    r   )r   r   )rK   r   rQ   r
   r   r   !permit_unconventional_http_methodMETHOD_BADCHAR_REr_   r   rV   rW   casefold_http_methodrX   r   r   ry   r   r   r   
VERSION_REr   rx   groupr"   "permit_unconventional_http_version)r1   
line_bytesbitr   partsmatchs         r4   r   Request.parse_request_line  s   -7-=-=dA-FG-FcS!-FGt9>$\*%=>> 1g xx99 ''44*4;;77DG***4;;77!!$++..&t{{33 88((++++-DK 7 txx=A$\*%=>>	?%dhh/E JJ$"	[[&B
," $$T!W-=$T!W--EKKN+SQ-@A..88>>(66 ? /c HL  	?$\*%=>>	?s   JJ J<c                    > [         TU ]  5         [        U R                  R                  [
        5      (       a%  [        [        U R                  S5      5      U l        g g r   )	r   r0   rM   r%   readerr   r   r   r   )r1   r   s    r4   r0   Request.set_body_reader  sA    !dii&&	22\$--;<DI 3r7   )r%   r   r#   r   r   r   r   r   r   r   r"   )rD   r   )r   )r   r   r   r   r5   r   r.   r   r   r   r   r   r0   r   __classcell__)r   s   @r4   r   r      s8    3"+Z $*;+
Z57n= =r7   r   )%r   rer   gunicorn.http.bodyr   r   r   r   gunicorn.http.errorsr   r   r	   r
   r   r   r   r   r   r   r   r   r   gunicorn.utilr   r   r   r*   r,   RFC9110_5_6_2_TOKEN_SPECIALScompileescaperV   r   r   r^   r   r   r   r7   r4   <module>r      s   
 
 	  K K   I 5 9 #   2 ::'2995Q+RSTJJx( ZZ*+
$&JJ{$; !O& O&d\=g \=r7   