o
    �õ±jŽ!  ã                   @   s\  U d dl Z d dlmZmZmZmZmZmZmZm	Z	m
Z
 ddlmZmZmZmZ ddlmZmZmZmZmZ ddlmZ ddlmZmZmZmZmZmZmZm Z  ddl!m"Z"m#Z#m$Z$m%Z% d	gZ&e  'e (d
¡¡Z)e  'd¡Z*dee+ dee+ fdd„Z,dee+ deee+e+f  fdd„Z-e  'e (d
¡¡Z.dedee fdd„Z/e  'e (d
¡¡Z0dede
eedf fdd„Z1G dd„ dƒZ2e  'e (d
¡¡Z3G dd„ dƒZ4G dd„ dƒZ5deddfdd„Z6ee
e	e$ ee	e$ e	e$ f f e
edef ee7edef f f f Z8eefe/e efe1e efe1eefe6eefe6eefe6e efe6e efe6e efe6ee4e2e5d œi
Z9e8e:d	< dS )!é    N)	ÚAnyÚCallableÚDictÚIterableÚNoReturnÚOptionalÚTupleÚTypeÚUnioné   )Úchunk_headerÚheader_fieldÚrequest_lineÚstatus_line)ÚDataÚEndOfMessageÚInformationalResponseÚRequestÚResponse)ÚReceiveBuffer)ÚCLIENTÚCLOSEDÚDONEÚIDLEÚ
MUST_CLOSEÚ	SEND_BODYÚSEND_RESPONSEÚSERVER)ÚLocalProtocolErrorÚRemoteProtocolErrorÚSentinelÚvalidateÚREADERSÚasciis   [ \t]+ÚlinesÚreturnc                 c   sŽ   � t | ƒ}d }|D ]2}t |¡}|r2|d u rtdƒ‚t|tƒs#t|ƒ}|d7 }||| ¡ d … 7 }q	|d ur9|V  |}q	|d urE|V  d S d S )Nz%continuation line at start of headersó    )ÚiterÚobs_fold_reÚmatchr   Ú
isinstanceÚ	bytearrayÚend)r$   ÚitÚlastÚliner)   © r0   ú/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/h11/_readers.pyÚ_obsolete_line_fold+   s$   €


ÿr2   c                 c   s4   � t | ƒD ]}tt|d|ƒ}|d |d fV  qd S )Nzillegal header line: {!r}Ú
field_nameÚfield_value)r2   r!   Úheader_field_re)r$   r/   Úmatchesr0   r0   r1   Ú_decode_header_lines@   s
   €þr7   Úbufc                 C   sj   |   ¡ }|d u r|  ¡ rtdƒ‚d S |stdƒ‚tt|d d|d ƒ}tdtt|dd … ƒƒddœ|¤ŽS )	Núillegal request linezno request line receivedr   zillegal request line: {!r}r   T)ÚheadersÚ_parsedr0   )Úmaybe_extract_linesÚ+is_next_line_obviously_invalid_request_liner   r!   Úrequest_line_rer   Úlistr7   )r8   r$   r6   r0   r0   r1   Úmaybe_read_from_IDLE_clientK   s   ÿÿÿr@   c                 C   s´   |   ¡ }|d u r|  ¡ rtdƒ‚d S |stdƒ‚tt|d d|d ƒ}|d d u r+dn|d }|d d u r7dn|d }t|d	 ƒ}|d
k rGtnt}|tt	|dd … ƒƒd|||d�S )Nr9   zno response line receivedr   zillegal status line: {!r}Úhttp_versions   1.1Úreasonó    Ústatus_codeéÈ   r   T)r:   r;   rD   rB   rA   )
r<   r=   r   r!   Ústatus_line_reÚintr   r   r?   r7   )r8   r$   r6   rA   rB   rD   Úclass_r0   r0   r1   Ú$maybe_read_from_SEND_RESPONSE_server^   s*   ÿÿûrI   c                   @   sH   e Zd Zdeddfdd„Zdedeeedf fdd„Z	de
fd	d
„ZdS )ÚContentLengthReaderÚlengthr%   Nc                 C   s   || _ || _d S ©N)Ú_lengthÚ
_remaining)ÚselfrK   r0   r0   r1   Ú__init__{   s   
zContentLengthReader.__init__r8   c                 C   sD   | j dkrtƒ S | | j ¡}|d u rd S |  j t|ƒ8  _ t|d�S )Nr   ©Údata)rN   r   Úmaybe_extract_at_mostÚlenr   ©rO   r8   rR   r0   r0   r1   Ú__call__   s   

zContentLengthReader.__call__c                 C   s   t d | j| j | j¡ƒ‚)Nz]peer closed connection without sending complete message body (received {} bytes, expected {}))r   ÚformatrM   rN   ©rO   r0   r0   r1   Úread_eofˆ   s   ÿþzContentLengthReader.read_eof)Ú__name__Ú
__module__Ú__qualname__rG   rP   r   r
   r   r   rV   r   rY   r0   r0   r0   r1   rJ   z   s    	rJ   c                   @   s@   e Zd Zd
dd„Zdedeeedf fdd„Zde	fdd	„Z
dS )ÚChunkedReaderr%   Nc                 C   s   d| _ d| _d| _d S )Nr   rC   F)Ú_bytes_in_chunkÚ_bytes_to_discardÚ_reading_trailerrX   r0   r0   r1   rP   •   s   
zChunkedReader.__init__r8   c                 C   sh  | j r| ¡ }|d u rd S ttt|ƒƒd�S | jrM| t| jƒ¡}|d u r'd S || jd t|ƒ… kr>td|›d| j›d�ƒ‚| jt|ƒd … | _| jrMd S | jdksTJ ‚| j	dkr‚| 
¡ }|d u rcd S tt|d|ƒ}t|d d	d
�| _	| j	dkrd| _ | |ƒS d}nd}| j	dks‹J ‚| | j	¡}|d u r—d S |  j	t|ƒ8  _	| j	dkr«d| _d}nd}t|||d�S )N)r:   zmalformed chunk footer: z (expected ú)rC   r   zillegal chunk header: {!r}Ú
chunk_sizeé   )ÚbaseTFs   
)rR   Úchunk_startÚ	chunk_end)r`   r<   r   r?   r7   r_   rS   rT   r   r^   Úmaybe_extract_next_liner!   Úchunk_header_rerG   r   )rO   r8   r$   rR   r   r6   re   rf   r0   r0   r1   rV   œ   sV   ÿ
ü

zChunkedReader.__call__c                 C   s   t dƒ‚)NzVpeer closed connection without sending complete message body (incomplete chunked read))r   rX   r0   r0   r1   rY   Î   s   ÿzChunkedReader.read_eof)r%   N)rZ   r[   r\   rP   r   r
   r   r   rV   r   rY   r0   r0   r0   r1   r]   ”   s    
2r]   c                   @   s0   e Zd Zdedee fdd„Zdefdd„ZdS )ÚHttp10Readerr8   r%   c                 C   s    |  d¡}|d u rd S t|d�S )NiÿÉš;rQ   )rS   r   rU   r0   r0   r1   rV   Ö   s   

zHttp10Reader.__call__c                 C   s   t ƒ S rL   )r   rX   r0   r0   r1   rY   Ü   s   zHttp10Reader.read_eofN)	rZ   r[   r\   r   r   r   rV   r   rY   r0   r0   r0   r1   ri   Õ   s    ri   c                 C   s   | rt dƒ‚d S )NzGot data when expecting EOF)r   )r8   r0   r0   r1   Úexpect_nothingà   s   rj   .)Úchunkedzcontent-lengthzhttp/1.0);ÚreÚtypingr   r   r   r   r   r   r   r	   r
   Ú_abnfr   r   r   r   Ú_eventsr   r   r   r   r   Ú_receivebufferr   Ú_stater   r   r   r   r   r   r   r   Ú_utilr   r   r    r!   Ú__all__ÚcompileÚencoder5   r(   Úbytesr2   r7   r>   r@   rF   rI   rJ   rh   r]   ri   rj   ÚstrÚReadersTyper"   Ú__annotations__r0   r0   r0   r1   Ú<module>   sb   
,(

ÿ
þÿ
þA"ÿÿýö