a
    &Úwh°  ã                   @   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   úL/var/www/battlenet.uz/venv/lib/python3.9/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rx| j ¡ |k rxz| j t| jƒ¡ W q4 t	yt   d | _Y qxY q40 q4| 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 rp|sp|  ||¡ | ¡  d¡}| ¡ d d… dk}q4|rŽ| | ¡ dd … ¡ dS | jj| ¡ d |… dd| j_	| | ¡ |d d … ¡ d S )	Ns   

é   ó   
r   r   T)Zfrom_traileré   )
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rÂ|t|ƒkrH|t|ƒ8 }|V  | ¡ }|stƒ ‚q|d |… V  ||d … }t|ƒdk r†| ¡ }|s|q†||7 }qb|d d… dkr¦t|d d… ƒ‚| j ||dd … d\}}qd S )Nr   r#   r$   )r   )Úparse_chunk_sizeÚlenr"   r   r   )r   r   r   r!   Znew_datar   r   r   r   8   s$    
zChunkedReader.parse_chunkedNc           	      C   s   t  ¡ }|d ur| |¡ | ¡  d¡}|dk rL|  ||¡ | ¡  d¡}q(| ¡ }|d |… ||d d …  }}| dd¡^}}|r| d¡}tdd„ |D ƒƒrªt	|ƒ‚t
|ƒdkr¾t	|ƒ‚t|d	ƒ}|dkrøz|  ||¡ W n tyò   Y n0 d
S ||fS )Nr$   r   r#   ó   ;é   s    	c                 s   s   | ]}|d vV  qdS )s   0123456789abcdefABCDEFNr   )Ú.0Únr   r   r   Ú	<genexpr>^   r   z1ChunkedReader.parse_chunk_size.<locals>.<genexpr>é   )r   N)r
   r   r   r   r&   r'   ÚsplitÚrstripÚanyr   r.   r   r,   r   )	r   r   r   r   r*   ÚlineZ
rest_chunkÚ
chunk_sizeZ	chunk_extr   r   r   r-   M   s0    


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_data)N)	Ú__name__Ú
__module__Ú__qualname__r   r"   r,   r   r-   r'   r   r   r   r   r      s   
r   c                   @   s   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   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 	¡ }|rt| 
|¡ | ¡ |krhqt| j 	¡ }qL| ¡ }|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"   x   s&    


zLengthReader.readN©r:   r;   r<   r   r"   r   r   r   r   r=   s   s   r=   c                   @   s   e Zd Zdd„ Zdd„ ZdS )Ú	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rr| j ¡ }|d |… ||d …  }}t ¡ | _| j 	|¡ |S | j
 ¡ }|r¨| j 	|¡ | j ¡ |krœq¨| j
 ¡ }q||s²d| _| j ¡ }|d |… ||d …  }}t ¡ | _| j 	|¡ |S )Nr?   r   r   r   T)r   r   r   r   rC   r   r   r
   r   r   r   r"   r   r   r   r   r   r"   —   s2    





zEOFReader.readNrA   r   r   r   r   rB   ‘   s   rB   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   rE   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   s4   |d u rt jS t|tƒs"tdƒ‚n|dk r0t 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 rb| j ¡ }|d |… ||d …  }}t ¡ | _| j |¡ |S || j ¡ kr| j d¡}|s‚q| j |¡ qb| j ¡ }|d |… ||d …  }}t ¡ | _| j |¡ |S )Nr   r   é   )	rK   r   r   r   r
   r   r   rE   r"   r   r   r   r   r"   Ð   s&    




z	Body.readc                 C   sÆ   |   |¡}|dkrdS | j ¡ }t ¡ | _g }| dd|¡}|dkrL|d nt|ƒ|kr\|nd}|rŒ| |d |… ¡ | j ||d … ¡ q¼| |¡ |t|ƒ8 }| j	 
td|ƒ¡}|s.q¼q.d |¡S )Nr   r   ó   
r0   rL   )rK   r   r   r
   r   r&   r.   Úappendr   rE   r"   r@   Újoin)r   r   r   r    r*   r   r   r   rG   è   s$    


$
zBody.readlinec                 C   sd   g }|   ¡ }|r`| d¡}|dk r2| |¡ d}q|d |d … ||d d …  }}| |¡ q|S )NrM   r   r   r0   )r"   r&   rN   )r   r   r    r   Úposr8   r   r   r   Ú	readlines  s    

"zBody.readlines)N)N)N)r:   r;   r<   r   rF   rH   r   rK   r"   rG   rQ   r   r   r   r   rD   ·   s   	

rD   )
r
   rI   Zgunicorn.http.errorsr   r   r   r   r=   rB   rD   r   r   r   r   Ú<module>   s   g&