o
    Š©Zh€  ã                   @   sh   d dl Z d dlZd dlmZmZmZ G dd„ deƒZG dd„ deƒZG dd„ deƒZ	G d	d
„ d
eƒ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   úI/var/www/html/lang_env/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 | ¡ d |… ¡| j_	| | ¡ |d d … ¡ d S )Ns   

é   ó   
r   r   é   )
r
   r   r   r   ÚfindÚget_dataÚunreadr   Úparse_headersZtrailers)r   r   r   r   ÚidxÚdoner   r   r   Úparse_trailers)   s   
ýzChunkedReader.parse_trailersc                 c   sÜ    |   |¡\}}|dkrl|t|ƒkr*|t|ƒ8 }|V  | ¡ }|s$tƒ ‚|t|ƒks|d |… V  ||d … }t|ƒdk rI|| ¡ 7 }t|ƒdk s=|d d… dkrYt|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!   r   r   r   r   9   s&   €ûÿòzChunkedReader.parse_chunkedNc                 C   sê   t  ¡ }|d ur| |¡ | ¡  d¡}|dk r)|  ||¡ | ¡  d¡}|dk s| ¡ }|d |… ||d d … }}| dd¡d  ¡ }zt|dƒ}W n t	yX   t
|ƒ‚w |dkrqz	|  ||¡ W dS  typ   Y dS w ||fS )Nr$   r   r#   ó   ;é   é   )r   N)r
   r   r   r   r&   r'   ÚsplitÚstripr   r   r   r,   r   )r   r   r   r   r*   ÚlineZ
rest_chunkÚ
chunk_sizer   r   r   r-   K   s2   
þÿþþzChunkedReader.parse_chunk_sizec                 C   s    |  ¡ }|s	tƒ ‚| |¡ d S r   )r"   r   r   )r   r   r   r   r   r   r   r'   f   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   r;   r   r   r   r   n   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   Úminr;   r   r
   r   r   r"   r   r   r   r(   )r   r   r   r   r    r!   r   r   r   r"   r   s(   



üzLengthReader.readN©r6   r7   r8   r   r"   r   r   r   r   r:   m   s    r:   c                   @   r9   )Ú	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 )Nr<   r   r   r   T)r   r   r   r   r@   r   r   r
   r   r   r   r"   r   r   r   r   r   r"   ‘   s4   




ü

zEOFReader.readNr>   r   r   r   r   r?   ‹   s    r?   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   rB   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 )Nr<   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   é   )	rH   r   r   r   r
   r   r   rB   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   r0   ó   
rI   )rH   r   r   r
   r   r&   r.   Úappendr   rB   r"   r=   Újoin)r   r   r   r    r*   r   r   r   rD   â   s(   


$
ô
zBody.readlinec                 C   sf   g }|   ¡ }|r1| d¡}|dk r| |¡ d}n|d |d … ||d d … }}| |¡ |s|S )NrJ   r   r   r0   )r"   r&   rK   )r   r   r    r   Úposr4   r   r   r   Ú	readlinesû   s   

"
ùzBody.readlinesr   )r6   r7   r8   r   rC   rE   r   rH   r"   rD   rN   r   r   r   r   rA   ±   s    
	
rA   )r
   rF   Zgunicorn.http.errorsr   r   r   Úobjectr   r:   r?   rA   r   r   r   r   Ú<module>   s   `&