
    +h                         d dl Z d dlZd dlmZmZmZ  G d de      Z G d de      Z G d de      Z	 G d	 d
e      Z
y)    N)
NoMoreDataChunkMissingTerminatorInvalidChunkSizec                   2    e Zd Zd Zd Zd Zd ZddZd Zy)	ChunkedReaderc                 p    || _         | j                  |      | _        t        j                         | _        y N)reqparse_chunkedparserioBytesIObuf)selfr
   unreaders      E/var/www/html/venv/lib/python3.12/site-packages/gunicorn/http/body.py__init__zChunkedReader.__init__   s(    ((2::<    c                 0   t        |t              st        d      |dk  rt        d      |dk(  ry| j                  rj| j
                  j                         |k  rM	 | j
                  j                  t        | j                               | j
                  j                         |k  rM| j
                  j                         }|d | ||d  }}t        j                         | _        | j
                  j                  |       |S # t        $ r
 d | _        Y lw xY w)Nzsize must be an integer typer   Size must be positive.r   )
isinstanceint	TypeError
ValueErrorr   r   tellwritenextStopIterationgetvaluer   r   r   sizedataretrests        r   readzChunkedReader.read   s    $$:;;!856619;;((--/D(HHNN4#45 ((--/D( xx  "$KdeT::<t
 % "&DKs   .D DDc                 n   t        j                         }|j                  |       |j                         j	                  d      }|j                         d d dk(  }|dk  rQ|sO| j                  ||       |j                         j	                  d      }|j                         d d dk(  }|dk  r|sO|r#|j                  |j                         dd         y| j                  j                  |j                         d |       | j                  _	        |j                  |j                         |dz   d         y )Ns   

      
r   r      )
r   r   r   r   findget_dataunreadr
   parse_headerstrailers)r   r   r"   r   idxdones         r   parse_trailerszChunkedReader.parse_trailers)   s    jjl		$lln!!+.||~bq!W,AgdMM(C(,,.%%k2C<<>"1%0D Agd OOCLLN12./ HH223<<>$33GHsQwx01r   c              #     K   | j                  |      \  }}|dkD  r|t        |      kD  r=|t        |      z  }| |j                         }|s
t               |t        |      kD  r=|d |  ||d  }t        |      dk  r"||j                         z  }t        |      dk  r"|d d dk7  rt	        |d d       | j                  ||dd        \  }}|dkD  ry y w)Nr   r'   r(   )r"   )parse_chunk_sizelenr%   r   r   )r   r   r!   r$   s       r   r   zChunkedReader.parse_chunked9   s     ,,X6tQhT"D	!
}}$,& T" u+;Dd)a-' d)a-BQx7",T"1X6600QR0ILT4 Qhs   A$C';C#4CCNc                 (   t        j                         }||j                  |       |j                         j	                  d      }|dk  r7| j                  ||       |j                         j	                  d      }|dk  r7|j                         }|d | ||dz   d  }}|j                  dd      d   j                         }	 t        |d      }|dk(  r	 | j                  ||       y||fS # t        $ r t        |      w xY w# t        $ r Y yw xY w)Nr(   r   r'      ;      )r   N)r   r   r   r   r*   r+   splitstripr   r   r   r1   r   )r   r   r"   r   r/   line
rest_chunk
chunk_sizes           r   r3   zChunkedReader.parse_chunk_sizeK   s   jjlIIdOlln!!'*AgMM(C(,,.%%g.C Ag ||~:tC!GH~jZZa(+113
	/Z,J ?##Hj9 J''  	/":..	/  s   C- D -D	DDc                 ^    |j                         }|s
t               |j                  |       y r	   )r%   r   r   )r   r   r   r"   s       r   r+   zChunkedReader.get_dataf   s#    }},		$r   r	   )	__name__
__module____qualname__r   r%   r1   r   r3   r+    r   r   r   r      s!     
,2 J$(6r   r   c                       e Zd Zd Zd Zy)LengthReaderc                      || _         || _        y r	   )r   length)r   r   rF   s      r   r   zLengthReader.__init__n   s     r   c                    t        |t              st        d      t        | j                  |      }|dk  rt        d      |dk(  ryt        j                         }| j                  j                         }|rB|j                  |       |j                         |k\  rn| j                  j                         }|rB|j                         }|d | ||d  }}| j                  j                  |       | xj                  |z  c_        |S )Nsize must be an integral typer   r   r   )r   r   r   minrF   r   r   r   r   r%   r   r   r   r,   )r   r!   r   r"   r#   r$   s         r   r%   zLengthReader.readr   s    $$;<<4;;%!856619jjl}}!!#IIdOxxzT!==%%'D	  llnJDE
TT"t
r   Nr?   r@   rA   r   r%   rB   r   r   rD   rD   m   s    r   rD   c                       e Zd Zd Zd Zy)	EOFReaderc                 R    || _         t        j                         | _        d| _        y )NF)r   r   r   r   finished)r   r   s     r   r   zEOFReader.__init__   s     ::<r   c                    t        |t              st        d      |dk  rt        d      |dk(  ry| j                  rZ| j
                  j                         }|d | ||d  }}t        j                         | _        | j
                  j                  |       |S | j                  j                         }|rV| j
                  j                  |       | j
                  j                         |kD  rn| j                  j                         }|rV|sd| _        | j
                  j                         }|d | ||d  }}t        j                         | _        | j
                  j                  |       |S )NrH   r   r   r   T)r   r   r   r   rN   r   r   r   r   r   r   r%   r   r    s        r   r%   zEOFReader.read   s+   $$;<<!856619==88$$&DUdT$%[Czz|DHHHNN4 J}}!!#HHNN4 xx}}%==%%'D	   DMxx  "$KdeT::<t
r   NrJ   rB   r   r   rL   rL      s    
r   rL   c                   @    e Zd Zd Zd Zd ZeZd Zd	dZd	dZ	d	dZ
y)
Bodyc                 D    || _         t        j                         | _        y r	   )readerr   r   r   )r   rS   s     r   r   zBody.__init__   s    ::<r   c                     | S r	   rB   )r   s    r   __iter__zBody.__iter__   s    r   c                 >    | j                         }|s
t               |S r	   )readliner   )r   r#   s     r   __next__zBody.__next__   s    mmo/!
r   c                     |t         j                  S t        |t              st	        d      |dk  rt         j                  S |S )NrH   r   )sysmaxsizer   r   r   )r   r!   s     r   getsizezBody.getsize   s=    <;;D#&;<<AX;;r   Nc                    | j                  |      }|dk(  ry|| j                  j                         k  rZ| j                  j                         }|d | ||d  }}t	        j
                         | _        | j                  j                  |       |S || j                  j                         kD  rW| j                  j                  d      }|sn9| j                  j                  |       || j                  j                         kD  rW| j                  j                         }|d | ||d  }}t	        j
                         | _        | j                  j                  |       |S )Nr   r      )	r\   r   r   r   r   r   r   rS   r%   r    s        r   r%   z	Body.read   s   ||D!19$((--/!88$$&DUdT$%[Czz|DHHHNN4 JTXX]]_$;;##D)DHHNN4 	 TXX]]_$ xx  "$KdeT::<t
r   c                    | j                  |      }|dk(  ry| j                  j                         }t        j                         | _        g }	 |j                  dd|      }|dk\  r|dz   nt        |      |k\  r|nd}|r3|j                  |d |        | j                  j                  ||d         nH|j                  |       |t        |      z  }| j                  j                  t        d|            }|sndj                  |      S )Nr   r   r7      
r^   )r\   r   r   r   r   r*   r4   appendr   rS   r%   rI   join)r   r!   r"   r#   r/   s        r   rW   zBody.readline   s    ||D!19xx  "::<))E1d+C AX#'3t93D4!C

4:&tCDz*JJtCID;;##CdO4D  xx}r   c                     g }| j                         }|rN|j                  d      }|dk  r|j                  |       d}n!|d |dz    ||dz   d  }}|j                  |       |rN|S )Nr`   r   r   r7   )r%   r*   ra   )r   r!   r#   r"   posr;   s         r   	readlineszBody.readlines   sp    yy{))E"CQw

4 !(37^T#'(^d

4   
r   r	   )r?   r@   rA   r   rU   rX   r   r\   r%   rW   re   rB   r   r   rQ   rQ      s,      D02r   rQ   )r   rZ   gunicorn.http.errorsr   r   r   objectr   rD   rL   rQ   rB   r   r   <module>rh      sM    
 
4 4]F ]@6 <# #LU6 Ur   