Ë
    ¥2Úi¶.  ã                   ó,  — d dl Z d dlZd dlZd dl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 d dlmZ d dlmZmZ dZdZdZ ej4                  d	«      Z ej4                  d
«      Z ej4                  d«      Z G d„ de«      Z G d„ de«      Z y)é    N)ÚChunkedReaderÚLengthReaderÚ	EOFReaderÚBody)ÚInvalidHeaderÚInvalidHeaderNameÚ
NoMoreDataÚInvalidRequestLineÚInvalidRequestMethodÚInvalidHTTPVersionÚLimitRequestLineÚLimitRequestHeaders)ÚInvalidProxyLineÚForbiddenProxyRequest)ÚInvalidSchemeHeaders)Úbytes_to_strÚsplit_request_uriiþ  i €  z%[\x00-\x1F\x7F()<>@,;:\[\]={} \t\\\"]z[A-Z0-9$-_.]{3,20}zHTTP/(\d+)\.(\d+)c                   ó*   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zy)ÚMessagec                 óX  — || _         || _        || _        || _        d | _        g | _        g | _        d | _        |j                  rdnd| _	        |j                  | _
        | j                  dk  s| j                  t        kD  rt        | _
        |j                  | _        | j                  dk  rt        | _        | j                  xs t        }| j                  |dz   z  dz   | _        | j                  | j                  «      }| j                  j!                  |«       | j#                  «        y )NÚhttpsÚhttpr   é   é   )ÚcfgÚunreaderÚ	peer_addrÚremote_addrÚversionÚheadersÚtrailersÚbodyÚis_sslÚschemeÚ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         úL/var/www/html/acx/venv/lib/python3.12/site-packages/gunicorn/http/message.pyÚ__init__zMessage.__init__   s  € ØˆŒØ ˆŒØ"ˆŒØ$ˆÔØˆŒØˆŒØˆŒØˆŒ	Ø!$§¢‘g°ˆŒð %(×$<Ñ$<ˆÔ!Ø×%Ñ%¨Ò*Ø×,Ñ,¬{Ò:Ü(3ˆDÔ%Ø(+×(DÑ(DˆÔ%Ø×(Ñ(¨1Ò,Ü,HˆDÔ)ð !%× =Ñ =Ò ]ÔA]ÐØ"&×";Ñ";Ø" QÑ&ñ#(Ø*+ñ#,ˆÔð —‘˜DŸM™MÓ*ˆØ�‰×Ñ˜VÔ$Ø×ÑÕó    c                 ó   — t        «       ‚©N)ÚNotImplementedError)r-   r   s     r0   r*   zMessage.parse;   s   € Ü!Ó#Ð#r2   c                 óR  — | j                   }g }|j                  d«      D �cg c]  }t        |«      dz   ‘Œ }}d}i }d|j                  v s5t	        | j
                  t        «      r| j
                  d   |j                  v r|j                  }|�rt        |«      | j                  k\  rt        d«      ‚|j                  d«      }t        |«      }	|j                  d«      dk  rt        |j                  «       «      ‚|j                  dd«      \  }
}| j                   j                  r |
j!                  d	«      j#                  «       }
n|
j#                  «       }
t$        j'                  |
«      rt)        |
«      ‚|
j                  «       |j+                  «       g}}
|r||d   j-                  d
«      rh|j                  d«      }|	t        |«      z  }	|	| j.                  cxkD  rdkD  rt        d«      ‚ |j1                  |«       |r|d   j-                  d
«      rŒhdj3                  |«      j!                  «       }|	| j.                  cxkD  rdkD  rt        d«      ‚ |
|v r2|||
   k(  }|rdnd}|r|| j4                  k7  rt7        «       ‚d}|| _        |j1                  |
|f«       |r�Œ|S c c}w )Nó   
z
FÚ*r   zlimit request headers fieldsú:é   z 	)ú ú	z!limit request headers fields sizeÚ r   r   T)r   Úsplitr   Úforwarded_allow_ipsÚ
isinstancer   ÚtupleÚsecure_scheme_headersÚlenr%   r   ÚpopÚfindr   ÚstripÚstrip_header_spacesÚrstripÚupperÚ	HEADER_REÚsearchr   ÚlstripÚ
startswithr'   ÚappendÚjoinr$   r   )r-   Údatar   r    ÚlineÚlinesÚscheme_headerrB   ÚcurrÚheader_lengthÚnameÚvalueÚsecurer$   s                 r0   Úparse_headerszMessage.parse_headers>   s~  € Ø�h‰hˆØˆð :>¿¹ÀGÓ9LÖM°”˜dÓ# fÓ,ÐMˆÐMð ˆØ "ÐØ�3×*Ñ*Ñ*Ü˜4Ÿ>™>¬5Ô1Ø—>‘> !Ñ$¨×(?Ñ(?Ñ?Ø$'×$=Ñ$=Ð!ò Ü�7‹|˜t×8Ñ8Ò8Ü)Ð*HÓIÐIð —9‘9˜Q“<ˆDÜ ›IˆMØ�y‰y˜‹~ Ò!Ü# D§J¡J£LÓ1Ð1ØŸ*™* S¨!Ó,‰KˆD�%Ø�x‰x×+Ò+Ø—{‘{ 5Ó)×/Ñ/Ó1‘à—z‘z“|�Ü×Ñ Ô%Ü'¨Ó-Ð-àŸ*™*›,¨¯©«Ð(8�%ˆDñ ˜E !™H×/Ñ/°Ô<Ø—y‘y “|�Ø¤ T£Ñ*�Ø  4×#@Ñ#@ÔDÀ1ÒDÜ-ð /<ó =ð =ð Eð —‘˜TÔ"ñ ˜E !™H×/Ñ/°Õ<ð —G‘G˜E“N×)Ñ)Ó+ˆEà˜t×<Ñ<Ô@¸qÒ@Ü)Ð*MÓNÐNð Að Ð,Ñ,ØÐ"7¸Ñ"=Ñ=�Ù$*™°�Ù Ø §¡Ò,Ü2Ó4Ð4à$(�MØ"(�D”Kà�N‰N˜D %˜=Ô)óU ðX ˆùòq Ns   ¢J$c                 ó<  — d}d }| j                   D ]8  \  }}|dk(  r|�t        d| ¬«      ‚|}Œ|dk(  sŒ#|j                  «       dk(  sŒ7d}Œ: |r%t        t	        | | j
                  «      «      | _        y |�k	 t        |«      j                  «       rt        |«      }nt        d| ¬«      ‚	 |dk  rt        d| ¬«      ‚t        t        | j
                  |«      «      | _        y t        t        | j
                  «      «      | _        y # t        $ r t        d| ¬«      ‚w xY w)NFzCONTENT-LENGTH)ÚreqzTRANSFER-ENCODINGÚchunkedTr   )r    r   Úlowerr   r   r   r"   ÚstrÚ	isnumericÚintÚ
ValueErrorr   r   )r-   r\   Úcontent_lengthrV   rW   s        r0   r,   zMessage.set_body_reader}   s  € ØˆØˆà!Ÿ\™\ò 	#‰MˆT�5ØÐ'Ò'Ø!Ð-Ü'Ð(8¸dÔCÐCØ!&‘ØÐ,Ó,Ø—;‘;“= IÓ-Ø"‘Gð	#ñ Üœ]¨4°·±Ó?Ó@ˆD�IØÐ'ð@Ü�~Ó&×0Ñ0Ô2Ü%(¨Ó%8‘Nä'Ð(8¸dÔCÐCð #ð  Ò!Ü#Ð$4¸$Ô?Ð?äœ\¨$¯-©-¸ÓHÓIˆD�IäœY t§}¡}Ó5Ó6ˆD�Iøô ò @Ü#Ð$4¸$Ô?Ð?ð@ús   Á62D ÄDc                 ó®   — | j                   D ]8  \  }}|dk(  sŒ|j                  «       j                  «       }|dk(  r y|dk(  r y n | j                  dk  S )NÚ
CONNECTIONÚcloseTz
keep-aliveF)r:   r   )r    r]   rF   r   )r-   ÚhÚvs      r0   Úshould_closezMessage.should_closeœ   s\   € Ø—l‘lò 	‰FˆQ�Ø�LÓ Ø—G‘G“I—O‘OÓ%�Ø˜’<ÙØ˜,Ò&Ù Ùð	ð �|‰|˜vÑ%Ð%r2   N)Ú__name__Ú
__module__Ú__qualname__r1   r*   rY   r,   rh   © r2   r0   r   r      s   „ òò:$ò=ò~7ó>	&r2   r   c                   óX   ‡ — e Zd Zd
ˆ fd„	Zdd„Zd„ Zdd„Zd„ Zd„ Zd„ Z	d„ Z
ˆ fd	„Zˆ xZS )ÚRequestc                 ó  •— d | _         d | _        d | _        d | _        d | _        |j
                  | _        | j
                  dk  s| j
                  t        k\  rt        | _        || _        d | _        t        ‰| �)  |||«       y ©Nr   )ÚmethodÚuriÚpathÚqueryÚfragmentÚlimit_request_lineÚMAX_REQUEST_LINEÚ
req_numberÚproxy_protocol_infoÚsuperr1   )r-   r   r   r   rx   Ú	__class__s        €r0   r1   zRequest.__init__©   s{   ø€ ØˆŒØˆŒØˆŒ	ØˆŒ
ØˆŒð #&×"8Ñ"8ˆÔØ×#Ñ# aÒ'Ø×*Ñ*Ô.>Ò>Ü&6ˆDÔ#à$ˆŒØ#'ˆÔ Ü‰Ñ˜˜h¨	Õ2r2   c                 ó”   — |j                  «       }|s%|r
t        «       ‚t        |j                  «       «      ‚|j	                  |«       y r4   )ÚreadÚStopIterationr	   ÚgetvalueÚwrite)r-   r   ÚbufÚstoprP   s        r0   Úget_datazRequest.get_dataº   s7   € Ø�}‰}‹ˆÙÙÜ#“oÐ%Ü˜SŸ\™\›^Ó,Ð,Ø�	‰	�$�r2   c                 ój  — t        j                  «       }| j                  ||d¬«       | j                  ||| j                  «      \  }}| j                  t        |«      «      rEt        j                  «       }|j                  |«       | j                  ||| j                  «      \  }}| j                  |«       t        j                  «       }|j                  |«       |j                  «       }|j                  d«      }|d d dk(  }	 |j                  d«      }|d d dk(  }|dk  rG|sE| j                  ||«       |j                  «       }t        |«      | j                  kD  rt        d«      ‚nŒg|r| j                  j                  |dd  «       y| j!                  |d | «      | _        ||d	z   d  }d }|S )
NT)r‚   s   

r   r7   r   zmax buffer headersr2   r   )ÚioÚBytesIOrƒ   Ú	read_linerv   Úproxy_protocolr   r€   Úparse_request_liner   rE   rC   r)   r   r   r+   rY   r    )	r-   r   r�   rQ   ÚrbufrP   ÚidxÚdoneÚrets	            r0   r*   zRequest.parseÂ   s�  € Ü�j‰j‹lˆØ�‰�h ¨$ˆÔ/ð —^‘^ H¨c°4×3JÑ3JÓK‰
ˆˆdð ×Ñœ|¨DÓ1Ô2ä—*‘*“,ˆCØ�I‰I�dŒOØŸ™¨°#°t×7NÑ7NÓO‰JˆD�$à×Ñ Ô%Ü�j‰j‹lˆØ�	‰	�$Œð �|‰|‹~ˆØ�i‰i˜Ó$ˆà�B�Qˆx˜7Ñ"ˆØØ—)‘)˜KÓ(ˆCØ˜˜�8˜wÑ&ˆDà�QŠw™tØ—‘˜h¨Ô,Ø—|‘|“~�Ü�t“9˜t×6Ñ6Ò6Ü-Ð.BÓCÐCàð ñ Ø�M‰M× Ñ   a b Ô*Øà×)Ñ)¨$¨t°¨*Ó5ˆŒà�3˜‘7�8ˆnˆØˆØˆ
r2   c                 óD  — |j                  «       }	 |j                  d«      }|dk\  r||cxkD  rdkD  rn nt        ||«      ‚nRt        |«      dz
  |cxkD  rdkD  rn nt        t        |«      |«      ‚| j	                  ||«       |j                  «       }Œƒ|d | ||dz   d  fS )Nr7   r   r   )r   rE   r   rC   rƒ   )r-   r   r�   ÚlimitrP   r‹   s         r0   r‡   zRequest.read_lineï   s¦   € Ø�|‰|‹~ˆàØ—)‘)˜GÓ$ˆCØ�aŠxà˜”? •?Ü*¨3°Ó6Ð6ØÜ�4‹y˜1‰}˜uÔ( qÕ(Ü&¤s¨4£y°%Ó8Ð8Ø�M‰M˜( CÔ(Ø—<‘<“>ˆDð ð �T�c�
Ø�S˜1‘W�X�ð ð 	 r2   c                 ó¸   — | j                   j                  sy| j                  dk7  ry|j                  d«      sy| j	                  «        | j                  |«       y)z¬        Detect, check and parse proxy protocol.

        :raises: ForbiddenProxyRequest, InvalidProxyLine.
        :return: True for proxy protocol line else False
        Fr:   ÚPROXYT)r   rˆ   rx   rM   Úproxy_protocol_access_checkÚparse_proxy_protocol)r-   rQ   s     r0   rˆ   zRequest.proxy_protocol  sO   € ð �x‰x×&Ò&Øà�?‰?˜aÒØà�‰˜wÔ'Øà×(Ñ(Ô*Ø×!Ñ! $Ô'àr2   c                 óæ   — d| j                   j                  vrYt        | j                  t        «      r>| j                  d   | j                   j                  vrt        | j                  d   «      ‚y y y )Nr8   r   )r   Úproxy_allow_ipsr@   r   rA   r   )r-   s    r0   r’   z#Request.proxy_protocol_access_check  sa   € à�t—x‘x×/Ñ/Ñ/Ü�t—~‘~¤uÔ-Ø—‘˜qÑ!¨¯©×)AÑ)AÑAÜ'¨¯©°qÑ(9Ó:Ð:ð Bð .ð 0r2   c                 ó6  — |j                  «       }t        |«      dk7  rt        |«      ‚|d   }|d   }|d   }|dvrt        d|z  «      ‚|dk(  rJ	 t        j                  t        j
                  |«       t        j                  t        j
                  |«       nN|dk(  rI	 t        j                  t        j                  |«       t        j                  t        j                  |«       	 t        |d	   «      }t        |d
   «      }d|cxk  rdk  rn nd|cxk  rdk  sn t        d|z  «      ‚|||||dœ| _
        y # t        j                  $ r t        |«      ‚w xY w# t        j                  $ r t        |«      ‚w xY w# t        $ r t        d|z  «      ‚w xY w)Né   r:   r   é   )ÚTCP4ÚTCP6zprotocol '%s' not supportedr™   rš   r   é   zinvalid port %sr   iÿÿ  )rˆ   Úclient_addrÚclient_portÚ
proxy_addrÚ
proxy_port)r>   rC   r   ÚsocketÚ	inet_ptonÚAF_INETÚerrorÚAF_INET6r`   ra   ry   )r-   rQ   ÚbitsÚprotoÚs_addrÚd_addrÚs_portÚd_ports           r0   r“   zRequest.parse_proxy_protocol  sŒ  € Ø�z‰z‹|ˆäˆt‹9˜Š>Ü" 4Ó(Ð(ð �Q‘ˆØ�a‘ˆØ�a‘ˆð Ð(Ñ(Ü"Ð#@À5Ñ#HÓIÐIØ�FŠ?ð-Ü× Ñ ¤§¡°Ô8Ü× Ñ ¤§¡°Õ8ð �fŠ_ð-Ü× Ñ ¤§¡°&Ô9Ü× Ñ ¤§¡°&Ô9ð	=Ü˜˜a™“\ˆFÜ˜˜a™“\ˆFð �fÔ% Õ%¨A°Ô,@¸5Ô,@Ü"Ð#4°tÑ#;Ó<Ð<ð $Ø!Ø!Ø Ø ñ$
ˆÕ øô' —<‘<ò -Ü& tÓ,Ð,ð-ûô —<‘<ò -Ü& tÓ,Ð,ð-ûô ò 	=Ü"Ð#4°tÑ#;Ó<Ð<ð	=ús&   ÁAD< Â AE Ã)F  Ä<EÅE=Æ Fc                 óà  — |j                  d d«      D �cg c]  }t        |«      ‘Œ }}t        |«      dk7  rt        t        |«      «      ‚t        j                  |d   «      st        |d   «      ‚|d   j                  «       | _        |d   | _	        	 t        | j                  «      }|j                  xs d| _        |j                  xs d| _        |j                  xs d| _        t        j                  |d   «      }|€t!        |d   «      ‚t#        |j%                  d«      «      t#        |j%                  d«      «      f| _        y c c}w # t        $ r t        t        |«      «      ‚w xY w)Nr   r˜   r   r:   r=   )r>   r   rC   r
   ÚMETH_REÚmatchr   rI   rq   rr   r   ra   rs   rt   ru   Ú
VERSION_REr   r`   Úgroupr   )r-   Ú
line_bytesÚbitr¥   Úpartsr­   s         r0   r‰   zRequest.parse_request_lineJ  s=  € Ø-7×-=Ñ-=¸dÀAÓ-FÖG c”˜SÕ!ÐGˆÐGÜˆt‹9˜Š>Ü$¤\°*Ó%=Ó>Ð>ô �}‰}˜T !™WÔ%Ü& t¨A¡wÓ/Ð/Ø˜1‘g—m‘m“oˆŒð ˜‘7ˆŒð	?Ü% d§h¡hÓ/ˆEð —J‘JÒ$ "ˆŒ	Ø—[‘[Ò& BˆŒ
ØŸ™Ò,¨"ˆŒô × Ñ   a¡Ó)ˆØˆ=Ü$ T¨!¡WÓ-Ð-Ü˜EŸK™K¨›NÓ+¬S°·±¸Q³Ó-@ÐAˆ�ùò1 Høô ò 	?Ü$¤\°*Ó%=Ó>Ð>ð	?ús   •E
ÂE ÅE-c                 ó´   •— t         ‰| �  «        t        | j                  j                  t
        «      r%t        t        | j                  d«      «      | _        y y rp   )	rz   r,   r@   r"   Úreaderr   r   r   r   )r-   r{   s    €r0   r,   zRequest.set_body_readere  s>   ø€ Ü‰ÑÔ!Ü�d—i‘i×&Ñ&¬	Ô2Üœ\¨$¯-©-¸Ó;Ó<ˆD�Ið 3r2   )r:   )F)r   )ri   rj   rk   r1   rƒ   r*   r‡   rˆ   r’   r“   r‰   r,   Ú__classcell__)r{   s   @r0   rn   rn   ¨   s8   ø„ õ3ó"ò+óZ ò$ò*;ò+
òZB÷6=ð =r2   rn   )!r…   Úrer    Úgunicorn.http.bodyr   r   r   r   Úgunicorn.http.errorsr   r   r	   r
   r   r   r   r   r   r   r   Úgunicorn.utilr   r   rw   r&   r(   ÚcompilerJ   r¬   r®   Úobjectr   rn   rl   r2   r0   ú<module>r¼      s’   ðó 
Û 	Û ç KÓ K÷÷ ó ÷
 IÝ 5ß 9àÐ Ø€Ø#Ð àˆB�J‰JÐ?Ó@€	Ø
ˆ"�*‰*Ð*Ó
+€ØˆR�Z‰ZÐ,Ó-€
ôH&ˆfô H&ôV@=ˆgõ @=r2   