o
    sZh                     @   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   A/var/www/auris/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)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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!   Z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   r.   r   r,   r   )	r   r   r   r   r*   lineZ
rest_chunk
chunk_sizeZ	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   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	 }|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"   x   s(   



zLengthReader.readNr:   r;   r<   r   r"   r   r   r   r   r>   s   s    r>   c                   @   r=   )	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   rD   r   r   r
   r   r   r   r"   r   r   r   r   r   r"      s4   






zEOFReader.readNrB   r   r   r   r   rC      s    rC   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   rF   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      )	rL   r   r   r   r
   r   r   rF   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      
rM   )rL   r   r   r
   r   r&   r.   appendr   rF   r"   rA   join)r   r   r   r    r*   r   r   r   rH      s(   


$

zBody.readlinec                 C   sf   g }|   }|r1|d}|dk r|| d}n|d |d  ||d d  }}|| |s|S )NrN   r   r   r0   )r"   r&   rO   )r   r   r    r   posr8   r   r   r   	readlines  s   

"
zBody.readlinesr   )r:   r;   r<   r   rG   rI   r   rL   r"   rH   rR   r   r   r   r   rE      s    
	
rE   )
r
   rJ   Zgunicorn.http.errorsr   r   r   r   r>   rC   rE   r   r   r   r   <module>   s   g&