o
    i¹«j°  ã                   @   s`   d dl Z d dlZd dlmZmZmZ G dd„ dƒZG dd„ dƒZG dd„ dƒZG d	d
„ d
ƒZ	dS )é    N)Ú
NoMoreDataÚChunkMissingTerminatorÚInvalidChunkSizec                   @   s>   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zdd
d„Zdd„ Zd	S )ÚChunkedReaderc                 C   s    || _ |  |¡| _t ¡ | _d S ©N)ÚreqÚparse_chunkedÚparserÚioÚBytesIOÚbuf)Úselfr   Úunreader© r   úR/var/www/html/laksyashrimp/venv/lib/python3.10/site-packages/gunicorn/http/body.pyÚ__init__   s   zChunkedReader.__init__c                 C   s¾   t |tƒs	tdƒ‚|dk rtdƒ‚|dkrdS | jr@| j ¡ |k r@z| j t| jƒ¡ W n t	y8   d | _Y nw | j ¡ |k s!| j 
¡ }|d |… ||d … }}t ¡ | _| j |¡ |S )Nzsize must be an integer typer   úSize must be positive.ó    )Ú
isinstanceÚintÚ	TypeErrorÚ
ValueErrorr	   r   ÚtellÚwriteÚnextÚStopIterationÚgetvaluer
   r   ©r   ÚsizeÚdataÚretÚrestr   r   r   Úread   s(   
þý

zChunkedReader.readc                 C   sÖ   t  ¡ }| |¡ | ¡  d¡}| ¡ d d… dk}|dk r=|s=|  ||¡ | ¡  d¡}| ¡ d d… dk}|dk r=|r |rL| | ¡ dd … ¡ dS | jj| ¡ d |… dd�| j_	| | ¡ |d d … ¡ d S )	Ns   

é   ó   
r   r   T)Úfrom_traileré   )
r
   r   r   r   ÚfindÚget_dataÚunreadr   Úparse_headersÚtrailers)r   r   r   r   ÚidxÚdoner   r   r   Úparse_trailers(   s   
ý zChunkedReader.parse_trailersc                 c   sæ   � |   |¡\}}|dkrq|t|ƒkr*|t|ƒ8 }|V  | ¡ }|s$tƒ ‚|t|ƒks|d |… V  ||d … }t|ƒdk rN| ¡ }|sDn
||7 }t|ƒdk s=|d d… dkr^t|d d… ƒ‚| j ||dd … d�\}}|dksd S d S )Nr   r#   r$   )r   )Úparse_chunk_sizeÚlenr"   r   r   )r   r   r   r!   Únew_datar   r   r   r   8   s,   €ûüïzChunkedReader.parse_chunkedNc           	      C   s  t  ¡ }|d ur| |¡ | ¡  d¡}|dk r)|  ||¡ | ¡  d¡}|dk s| ¡ }|d |… ||d d … }}| dd¡^}}|rK| d¡}tdd„ |D ƒƒrXt	|ƒ‚t
|ƒdkrbt	|ƒ‚t|d	ƒ}|dkrz	|  ||¡ W d
S  ty~   Y d
S w ||fS )Nr$   r   r#   ó   ;é   s    	c                 s   s   � | ]}|d vV  qdS )s   0123456789abcdefABCDEFNr   )Ú.0Únr   r   r   Ú	<genexpr>^   s   € z1ChunkedReader.parse_chunk_size.<locals>.<genexpr>é   )r   N)r
   r   r   r   r'   r(   ÚsplitÚrstripÚanyr   r0   r   r.   r   )	r   r   r   r   r,   ÚlineÚ
rest_chunkÚ
chunk_sizeÚ	chunk_extr   r   r   r/   M   s6   
þ

þþzChunkedReader.parse_chunk_sizec                 C   s    |  ¡ }|s	tƒ ‚| |¡ d S r   )r"   r   r   )r   r   r   r   r   r   r   r(   l   s   zChunkedReader.get_datar   )	Ú__name__Ú
__module__Ú__qualname__r   r"   r.   r   r/   r(   r   r   r   r   r      s    
r   c                   @   ó   e Zd Zdd„ Zdd„ ZdS )ÚLengthReaderc                 C   s   || _ || _d S r   )r   Úlength)r   r   rD   r   r   r   r   t   s   
zLengthReader.__init__c                 C   s¶   t |tƒs	tdƒ‚t| j|ƒ}|dk rtdƒ‚|dkrdS t ¡ }| j 	¡ }|r;| 
|¡ | ¡ |kr4n| j 	¡ }|s(| ¡ }|d |… ||d … }}| j |¡ |  j|8  _|S )Núsize must be an integral typer   r   r   )r   r   r   ÚminrD   r   r
   r   r   r"   r   r   r   r)   )r   r   r   r   r    r!   r   r   r   r"   x   s(   



üzLengthReader.readN©r?   r@   rA   r   r"   r   r   r   r   rC   s   s    rC   c                   @   rB   )Ú	EOFReaderc                 C   s   || _ t ¡ | _d| _d S )NF)r   r
   r   r   Úfinished)r   r   r   r   r   r   ’   s   

zEOFReader.__init__c                 C   sò   t |tƒs	tdƒ‚|dk rtdƒ‚|dkrdS | jr9| j ¡ }|d |… ||d … }}t ¡ | _| j 	|¡ |S | j
 ¡ }|rU| j 	|¡ | j ¡ |krNn| j
 ¡ }|s@|sZd| _| j ¡ }|d |… ||d … }}t ¡ | _| j 	|¡ |S )NrE   r   r   r   T)r   r   r   r   rI   r   r   r
   r   r   r   r"   r   r   r   r   r   r"   —   s4   




ü

zEOFReader.readNrG   r   r   r   r   rH   ‘   s    rH   c                   @   sN   e Zd Zdd„ Zdd„ Zdd„ ZeZdd„ Zdd
d„Zddd„Z	ddd„Z
d	S )ÚBodyc                 C   s   || _ t ¡ | _d S r   )Úreaderr
   r   r   )r   rK   r   r   r   r   ¸   s   zBody.__init__c                 C   s   | S r   r   )r   r   r   r   Ú__iter__¼   s   zBody.__iter__c                 C   s   |   ¡ }|s	tƒ ‚|S r   )Úreadliner   )r   r    r   r   r   Ú__next__¿   s   zBody.__next__c                 C   s2   |d u rt jS t|tƒstdƒ‚|dk rt jS |S )NrE   r   )ÚsysÚmaxsizer   r   r   )r   r   r   r   r   ÚgetsizeÇ   s   
zBody.getsizeNc                 C   sÚ   |   |¡}|dkrdS || j ¡ k r1| j ¡ }|d |… ||d … }}t ¡ | _| j |¡ |S || j ¡ krN| j d¡}|sAn| j |¡ || j ¡ ks8| j ¡ }|d |… ||d … }}t ¡ | _| j |¡ |S )Nr   r   é   )	rQ   r   r   r   r
   r   r   rK   r"   r   r   r   r   r"   Ð   s(   


ü

z	Body.readc                 C   sÈ   |   |¡}|dkrdS | j ¡ }t ¡ | _g }	 | dd|¡}|dkr'|d n	t|ƒ|kr/|nd}|rG| |d |… ¡ | j ||d … ¡ n| |¡ |t|ƒ8 }| j	 
td|ƒ¡}|s^nqd |¡S )Nr   r   r3   ó   
rR   )rQ   r   r   r
   r   r'   r0   Úappendr   rK   r"   rF   Újoin)r   r   r   r    r,   r   r   r   rM   è   s(   


$
ô
zBody.readlinec                 C   sf   g }|   ¡ }|r1| d¡}|dk r| |¡ d}n|d |d … ||d d … }}| |¡ |s|S )NrS   r   r   r3   )r"   r'   rT   )r   r   r    r   Úposr;   r   r   r   Ú	readlines  s   

"
ùzBody.readlinesr   )r?   r@   rA   r   rL   rN   r   rQ   r"   rM   rW   r   r   r   r   rJ   ·   s    
	
rJ   )
r
   rO   Úgunicorn.http.errorsr   r   r   r   rC   rH   rJ   r   r   r   r   Ú<module>   s   g&