U
    h	                     @   sD   d Z ddlmZmZ ddlmZmZ G dd dZG dd dZdS )	zData Chunk Receiver
    )CHUNK_EXT_REONLY_HEXDIG_RE)
BadRequestfind_double_newlinec                   @   s<   e Zd ZdZdZdd Zdd Zdd Zd	d
 Zdd Z	dS )FixedStreamReceiverFNc                 C   s   || _ || _d S N)remainbuf)selfclr	    r   C/var/www/html/venv/lib/python3.8/site-packages/waitress/receiver.py__init__   s    zFixedStreamReceiver.__init__c                 C   s
   | j  S r   r	   __len__r
   r   r   r   r      s    zFixedStreamReceiver.__len__c                 C   sn   | j }|dk rd| _dS t|}||krL| j|d|  d| _ d| _|S | j| |  j |8  _ |S dS )zSee IStreamConsumer   Tr   N)r   	completedlenr	   append)r
   datarmZdatalenr   r   r   received!   s    zFixedStreamReceiver.receivedc                 C   s
   | j  S r   r	   getfiler   r   r   r   r   7   s    zFixedStreamReceiver.getfilec                 C   s   | j S r   r	   r   r   r   r   getbuf:   s    zFixedStreamReceiver.getbuf)
__name__
__module____qualname__r   errorr   r   r   r   r   r   r   r   r   r      s   r   c                   @   sT   e Zd ZdZdZdZdZdZdZdZ	dZ
dd Zdd Zd	d
 Zdd Zdd ZdS )ChunkedReceiverr   F    Nc                 C   s
   || _ d S r   r   )r
   r	   r   r   r   r   K   s    zChunkedReceiver.__init__c                 C   s
   | j  S r   r   r   r   r   r   r   N   s    zChunkedReceiver.__len__c                 C   sB  | j r
dS t|}|r>| j}|dkrr|d | }| j| t|}||d  }|  j|8  _| jdkrpd| _q| jr| j| }|d}|dk rt|dk r|| _d}n2d| _|dkr|dd  }ntd| _	d| _
d| _q| j
s| j| }|d}|dk r|| _d}n|d | }||d d  }d| _|r<|d}|dkr||d  }	t|	}
|
s~td	| _	d| _
q>|d | }t|std
| _	d| _
q>t|d}|dkr|| _nd| _
q| j| }|drd| _ |t|d  S t|}|dk r|| _d}qd| _ |d | | _|t||  S q|S )Nr   Ts   
   r"   zChunk not properly terminatedF   ;zInvalid chunk extensionzInvalid chunk size   )r   r   chunk_remainderr	   r   validate_chunk_end	chunk_endfindr   r    all_chunks_receivedcontrol_liner   matchr   inttrailer
startswithr   )r
   sZ	orig_sizer   Zto_writeZwrittenposlinesemiZextinfoZvalid_ext_infoszr.   r   r   r   r   Q   s    















zChunkedReceiver.receivedc                 C   s
   | j  S r   r   r   r   r   r   r      s    zChunkedReceiver.getfilec                 C   s   | j S r   r   r   r   r   r   r      s    zChunkedReceiver.getbuf)r   r   r   r&   r'   r+   r(   r*   r.   r   r    r   r   r   r   r   r   r   r   r   r!   >   s   qr!   N)	__doc__Zwaitress.rfc7230r   r   Zwaitress.utilitiesr   r   r   r!   r   r   r   r   <module>   s   )