a
    þ
þdŽ  ã                   @   s`  d dl Z ddlmZmZmZmZmZ ddlT ddlT ddl	m
Z
mZ ddlmZmZmZ dd	„ Zd
d„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd d!„ Zd"d#„ Zd$d%„ Zd&d'„ Zd(d)„ Z d*d+„ Z!d,d-„ Z"d.d/„ Z#d0d1„ Z$d2d3„ Z%d4d5„ Z&d6d7„ Z'e j( )d8g d9¢¡d:d;„ ƒZ*e j( )d8g d<¢¡d=d>„ ƒZ+d?d@„ Z,dAdB„ Z-dS )Cé    Né   )Ú_body_framingÚ_keep_aliveÚ
ConnectionÚ	NEED_DATAÚPAUSED)Ú*)ÚLocalProtocolErrorÚRemoteProtocolErroré   )ÚConnectionPairÚget_all_eventsÚreceive_and_getc                   C   s¾   t tdddgdƒsJ ‚t tddddgdƒr2J ‚t tddddgdƒrLJ ‚t tddg ddƒrdJ ‚t td	g d
ƒsxJ ‚t td	dgd
ƒrŽJ ‚t td	dgd
ƒr¤J ‚t td	g ddƒrºJ ‚d S )NÚGETú/)ÚHostzExample.com©ÚmethodÚtargetÚheaders©r   Úclose)r   za, b, cLOse, fooú1.0©r   r   r   Úhttp_versionéÈ   ©Ústatus_coder   ©r   r   r   )r   ÚRequestÚResponse© r!   r!   úb/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/h11/tests/test_connection.pyÚtest__keep_alive
   s4    ÿýÿýÿÿÿr#   c                     s`  dd„ ‰ d‡ fdd„	} d‡ fdd„	}i d	d
iddid
ddœfD ]\}d| f i |¤Žfd| f ddi|¤Žfd| f ddi|¤ŽffD ]\}}t ||ƒdks~J ‚q~q>ddid
ddœfD ]D}d |f i |¤Žfd| f i |¤ŽffD ]\}}t ||ƒdksÖJ ‚qÖq®d |d
dfd| d
dffD ]\}}t ||ƒdksJ ‚qt d |ƒ ƒdksFJ ‚t d| ƒ ƒdks\J ‚d S )Nc                 S   s0   g }| d ur|  dt| ƒf¡ |r,|  d¡ |S )NúContent-Length©zTransfer-EncodingÚchunked)ÚappendÚstr)ÚclÚter   r!   r!   r"   r   )   s    
z#test__body_framing.<locals>.headersr   Fc                    s   t | ˆ ||ƒdS )Nr   )r    )r   r)   r*   ©r   r!   r"   Úresp1   s    z test__body_framing.<locals>.respc                    s"   ˆ | |ƒ}|dg7 }t dd|dS )N©r   zexample.comr   r   r   )r   )r)   r*   Úhr+   r!   r"   Úreq4   s    

ztest__body_framing.<locals>.reqr)   éd   r*   T)r)   r*   ó   HEADó   GETr   éÌ   i0  )úcontent-length)r   )r&   r!   )r)   )r4   )r0   )zhttp/1.0r!   )r   NF)NF)r   )r,   r/   ÚkwargsÚmethÚrr!   r+   r"   Útest__body_framing(   s     ý,$r8   c                  C   s  t  t¡ tdƒ W d   ƒ n1 s(0    Y  tƒ } | jt jtu sLJ ‚| jt jt	u s`J ‚| jt	 jt	u stJ ‚| jt	 jtu sˆJ ‚|  
ttddddgd¡}|dks®J ‚| jD ]}|jttt	tiks´J ‚q´| jt jtu säJ ‚| jt jtu søJ ‚| jt	 jtu sJ ‚| jt	 jtu s$J ‚| jt jd u s:J ‚| jt	 jdksPJ ‚|  
t	td	g d
¡}|dksrJ ‚|  
t	tddgd
¡}|dks–J ‚| jD ]}|jttt	tiksœJ ‚qœ| jt jdksÒJ ‚| jt	 jdksèJ ‚|  
ttdd¡}|dksJ ‚| j
ttddtddtƒ gd}|dks8J ‚| j
ttƒ g d}|dksXJ ‚| jD ]}|jttt	tiks^J ‚q^|  
t	tdd¡}|dksžJ ‚| j
t	tddtddtƒ gd}|dksÎJ ‚| j
t	tƒ g d}|dksîJ ‚| jD ]}|jttt	tiksôJ ‚qôd S )NÚCLIENTr   r   r-   ©r$   Ú10r   s9   GET / HTTP/1.1
Host: example.com
Content-Length: 10

ó   1.1r0   r   s   HTTP/1.1 100 

r   )r$   Z11s%   HTTP/1.1 200 
Content-Length: 11

ó   12345©Údataó   67890©Úexpectó    ó
   1234567890ó   1)ÚpytestÚraisesÚ
ValueErrorr   r   Úconnr9   Úour_roleZ
their_roleÚSERVERÚsendr   ÚconnsÚstatesÚ	SEND_BODYÚSEND_RESPONSEÚ	our_stateÚtheir_stateZtheir_http_versionÚInformationalResponser    ÚDataÚEndOfMessageÚDONE©Úpr?   rI   r!   r!   r"   Ú)test_Connection_basics_and_content_lengthP   sh    &ýþÿ

ÿ
"
rY   c                  C   s  t ƒ } |  ttddddgd¡ |  ttdddd¡}|d	ksBJ ‚|  ttd
ddd¡}|dksdJ ‚| jttddg d}|dks†J ‚|  ttdgd¡}|dks¦J ‚|  ttddgd¡ |  ttdddd¡ |  ttdddd¡ |  ttƒ ¡ | jD ]}|j	tt
tt
iksüJ ‚qüd S )Nr   r   r-   r%   r   rD   T©r?   Zchunk_startZ	chunk_ends   a
1234567890
s   abcdes
   5
abcde
rC   r>   rA   )ZhelloZtherer+   s   0
hello: there

r   r   s   54321r=   )r   rL   r9   r   rT   rU   rK   r    rM   rN   rV   rW   r!   r!   r"   Útest_chunked“   s2    ýþÿ
r[   c                  C   s8  t td} d}|  |¡ |  ¡ tddddgdks6J ‚|  ¡ tu sFJ ‚|  d¡ |  ¡ td	d
d
dksjJ ‚|  d¡ |  ¡ tdd
ddksŽJ ‚|  d¡ |  ¡ tddddks²J ‚|  d¡ |  ¡ tddd
dksÖJ ‚|  d¡ |  ¡ td	d
d
dksúJ ‚|  d¡ |  ¡ tksJ ‚|  d¡ |  ¡ tƒ ks4J ‚d S )N©rJ   óB   POST / HTTP/1.1
Host: example.com
Transfer-Encoding: chunked

ÚPOSTr   r-   r%   r   s
   5
hello
s   helloTrZ   s   5
hels   helFó   ls   o
ó   os   5
helloó   
s   0

)r   rK   Úreceive_dataÚ
next_eventr   r   rT   rU   )rI   Úrequestr!   r!   r"   Útest_chunk_boundaries²   s0    
ÿ
ý






re   c                  C   sÆ   t tƒ} |  tdddgd¡ |  tƒ ¡ | jtu s8J ‚t| dƒtdg ddd	gksXJ ‚| jt	u sfJ ‚t| d
ƒt
d
dgks€J ‚t| dƒt
ddgksšJ ‚t| dƒtƒ tƒ gks´J ‚| jtu sÂJ ‚d S )Nr   r   r-   r   s   HTTP/1.0 200 OK

r   r   s   OK)r   r   r   Úreasonr=   r>   r@   rC   )r   r9   rL   r   rU   rQ   rV   r   r    Ú
MUST_CLOSErT   ÚConnectionClosedrR   ÚCLOSED©Úcr!   r!   r"   Ú$test_client_talking_to_http10_serverÙ   s    ÿ
rl   c                  C   s  t tƒ} t| dƒtddg ddtƒ gks,J ‚| jtu s:J ‚|  tdg d¡dksTJ ‚|  t	d	d
¡d	kslJ ‚|  tƒ ¡dks€J ‚| j
tu sŽJ ‚t tƒ} t| dƒtdddgddt	dd
gksÀJ ‚t| dƒt	dd
tƒ gksÞJ ‚| jtu sìJ ‚t| dƒtƒ gksJ ‚d S )Nó   GET / HTTP/1.0

r   r   r   r   r   r   ó$   HTTP/1.1 200 
Connection: close

r=   r>   rC   s(   POST / HTTP/1.0
Content-Length: 10

1r^   r:   rE   s	   234567890)r   rK   r   r   rU   rR   rg   rL   r    rT   rQ   rh   rj   r!   r!   r"   Ú$test_server_talking_to_http10_clienté   s4    þ
ÿÿüù
	ro   c               	   C   s¤   dgg ddgfD ]Ž} t ƒ }| ttdddgdtƒ g¡ |jttd| dtddgdd	 ttƒ}t|d
ƒ | td| d¡dks†J ‚| t	dd¡dksJ ‚qd S )Nr%   ©r$   Z100r   r   r-   r   r   r   rA   rm   rn   r=   r>   )
r   rL   r9   r   rU   rK   r    r   r   rT   )Zuser_headersrX   rk   r!   r!   r"   Ú,test_automatic_transfer_encoding_in_response  s2    ûþþ	
ÿý

ÿÿrq   c                  C   s˜   t ƒ } |  ttddddgdtƒ g¡ | jD ]}|jt tu s,J ‚q,| jtt	dg dtƒ gt	ddgdtƒ gd	 | jD ]}|jttttiksxJ ‚qxd S )
Nr   r   r-   r   r   r3   r   )Ú
connectionr   rA   )
r   rL   r9   r   rU   rM   rN   rg   rK   r    ©rX   rI   r!   r!   r"   Ú(test_automagic_connection_close_handling7  s,    ýúþ
þû

rt   c                  C   sº   dd„ } | ƒ }|  ttdg d¡ |jD ]}|jr6J ‚|jr(J ‚q(| ƒ }|  ttddgd¡ |jD ]}|jrrJ ‚|jrdJ ‚qd| ƒ }|  ttdd¡ |jD ]}|jrªJ ‚|jrœJ ‚qœd S )	Nc                  S   sZ   t ƒ } |  ttddg d¢d¡ | jD ]}|js&J ‚q&| jt jrFJ ‚| jt jsVJ ‚| S )Nr   r   )r-   rp   )ZExpectz100-continuer   )	r   rL   r9   r   rM   Ú"client_is_waiting_for_100_continuerI   Ú!they_are_waiting_for_100_continuerK   rs   r!   r!   r"   ÚsetupX  s    ýþ
z test_100_continue.<locals>.setupr0   r   r   r%   r=   r>   )	rL   rK   rS   rM   ru   rv   r    r9   rT   ©rw   rX   rI   r!   r!   r"   Útest_100_continueW  s$    

ÿ



ry   c                  C   sF  t tƒ} |  d¡ |  ¡ tu s"J ‚t t¡$ |  d¡ |  ¡  q.W d   ƒ n1 sV0    Y  t tdd} |  d¡ |  d¡ |  d¡ t| ƒt	dd	d
dgdt
ƒ gks®J ‚t tdd} |  d¡ |  d¡ t t¡ |  ¡  W d   ƒ n1 sö0    Y  t tdd} |  d¡ |  ddd  ¡ t| ƒt	dd	d
dgdtdd dt
ƒ gksZJ ‚t tdd} |  d¡ t| ƒt	dddgdt
ƒ gks”J ‚|  d¡ |  tdg d¡ |  t
ƒ ¡ |  ¡  t| ƒt	dddgdt
ƒ gksèJ ‚|  tdg d¡ |  t
ƒ ¡ |  ¡  t t¡ |  ¡  W d   ƒ n1 s80    Y  d S )Ns   GET / HTTP/1.0
Endless: s   aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiˆ  )Zmax_incomplete_event_sizes   GET / HTTP/1.0
Big: s   aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaas   

r   r   r   )ÚbigA   aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa)r   r   r   r   i   s%   GET / HTTP/1.0
Content-Length: 10000ó   ai'  )r$   Z10000r>   r0   s   GET /1 HTTP/1.1
Host: a

GET /2 HTTP/1.1
Host: b

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXú/1)ÚhostÚar   sè  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXr   r   ú/2)r}   Úb)r   rK   rb   rc   r   rF   rG   r
   r   r   rU   rT   rL   r    Ústart_next_cyclerj   r!   r!   r"   Ú-test_max_incomplete_event_size_countermeasure„  sn    

(



ÿü


&
üøÿþ
þr‚   c                  C   s¤   t ƒ } |  ttdddgdtƒ g¡ |  ttdg dtƒ g¡ | jD ]"}|jtt	tt	iks^J ‚| 
¡  qD|  ttdddgdtƒ g¡ |  ttd	g dtƒ g¡ d S )
Nr   r   ©r   r~   r   r   r   ÚDELETEú/fooé”  )r   rL   r9   r   rU   rK   r    rM   rN   rV   r   rs   r!   r!   r"   Útest_reuse_simpleÐ  s     þ

þþr‡   c                  C   s2  t tƒ} |  ¡ tu sJ ‚|  d¡ t| ƒtddddgdtddtƒ gksNJ ‚| j	t
u s\J ‚| jtu sjJ ‚|  ¡ tu szJ ‚|  td	g d
¡ |  tƒ ¡ | j	t
u s¦J ‚| jt
u s´J ‚|  ¡  t| ƒtddddgdtddtƒ gksèJ ‚|  ¡ tu søJ ‚|  td	g d
¡ |  tƒ ¡ |  ¡  t| ƒtdddgdtƒ gksBJ ‚|  ¡ tu sTJ ‚|  td	g d
¡ |  tƒ ¡ |  ¡ tu s„J ‚|  d¡ |  ¡ tu s J ‚| jdks°J ‚|  d¡ | jdksÊJ ‚|  ¡ tu sÜJ ‚|  d¡ |  ¡ tu søJ ‚t t¡ |  d¡ W d   ƒ n1 s$0    Y  d S )Ns   GET /1 HTTP/1.1
Host: a.com
Content-Length: 5

12345GET /2 HTTP/1.1
Host: a.com
Content-Length: 5

67890GET /3 HTTP/1.1
Host: a.com

r   r|   )r   úa.com)r$   Ú5r   r=   r>   r   r   r   r@   z/3ó   SADF)rŠ   FrC   )rŠ   Ts   FDSA)r   rK   rc   r   rb   r   r   rT   rU   rR   rV   rQ   rP   r   rL   r    r   Útrailing_datarF   rG   ÚRuntimeErrorrj   r!   r!   r"   Útest_pipeliningå  sj    ÿýù
	ýù
	þ


r   c               	      sp  t ddddgdtdg dtdg dft d	d
g d¢dtdg dtddgdft ddg d¢dtdg dtdg dft ddg d¢dtdg dtddgdffD ]È\‰ } }‡ fdd„}|ƒ }| t| ¡ |jD ]}|jtttt	iksÐJ ‚qÐ| tt
ƒ ¡ |jD ]}| ¡  q |ƒ }| t|¡ |jD ]f}|jttttiksDJ ‚| d¡ | ¡ tu s`J ‚| d¡ | ¡ tu s|J ‚|jdks(J ‚q(|ƒ }|jt }| d¡ | ¡ tu s¼J ‚|jdksÌJ ‚| | ¡ | ¡ tu sèJ ‚| t
ƒ ¡ | ¡  t|ƒt d	d
g ddt
ƒ gks J ‚|ƒ }|jt }| d¡ | ¡ tu sLJ ‚|jdks\J ‚| t|¡ | ¡ tu szJ ‚|ƒ }|jt }| d¡g k | ¡ tu sªJ ‚| | ¡ | ¡ tƒ ksÈJ ‚|ƒ }t t¡, |jt  t d	d
dgd¡ W d   ƒ n1 s0    Y  |ƒ }| t|¡ t t¡& |jt  tdd¡ W d   ƒ q 1 s`0    Y  q d S )NÚCONNECTzexample.com:443©r   Zfoo©r$   Ú1r   r†   r   r   r   r   )r   r   )ÚUpgradeza, bée   )r’   r~   )r’   r€   c                     s€   t ƒ } |  tˆ ¡ | jD ]}|jt tu sJ ‚q|  ttddtƒ g¡ | jD ]}|jt tu sNJ ‚qN| j	t
  ¡ tu s|J ‚| S )NrE   r>   )r   rL   r9   rM   rN   rO   rT   rU   ZMIGHT_SWITCH_PROTOCOLrI   rK   rc   r   rs   ©r/   r!   r"   rw   W  s    

z#test_protocol_switch.<locals>.setupó   123s   456)s   123456Frm   )rm   Fr   r   rC   )rC   Trƒ   r>   )r   r    rS   rL   rK   rM   rN   r9   rV   rO   rU   r   ZSWITCHED_PROTOCOLrb   rc   r   r‹   rI   r   rh   rF   rG   r	   rT   )ZdenyÚacceptrw   rX   rI   Zscr!   r”   r"   Útest_protocol_switch-  sª    ý

ù
ý
ù
ý

øý
øã)







þ




ÿ$r—   c               	      sX  t tftt ffD ]@\‰ ‰‡ ‡fdd„} | ƒ }|jˆ  ¡ tƒ ksFJ ‚|jˆ  ¡ tƒ ks^J ‚|jˆ  d¡ |jˆ  ¡ tƒ ks†J ‚| ƒ }| ˆtƒ ¡ |jD ] }|jt	u s²J ‚|j
t	u s J ‚q | ƒ }t t¡  |jˆ  d¡ W d   ƒ n1 sø0    Y  | ƒ }|jˆ   d¡ t t¡ |jˆ   ¡  W d   ƒ q1 sH0    Y  qd S )Nc                     s:   t ƒ } |  ˆ tƒ ¡ | jD ]}|jˆ tˆtiksJ ‚q| S ©N)r   rL   rh   rM   rN   ri   rg   rs   ©Zwho_shot_firstZwho_shot_secondr!   r"   rw   ¯  s    
þz test_close_simple.<locals>.setuprC   r•   r2   )r9   rK   rI   rc   rh   rb   rL   rM   rQ   ri   rR   rF   rG   rŒ   r
   rx   r!   r™   r"   Útest_close_simpleª  s&    
.rš   c                  C   sŒ  t dddgdtƒ g} tdg dtƒ g}tƒ }| ttƒ ¡ |jD ]}|jtt	t
tiksBJ ‚qBtƒ }| t| ¡ | ttƒ ¡ |jD ]}|jtt	t
tiks„J ‚q„tƒ }| t| ¡ t t¡" |jt
  tƒ ¡ W d   ƒ n1 sä0    Y  |jt  d¡ t t¡ |jt  ¡  W d   ƒ n1 s.0    Y  tƒ }| t| ¡ | t
|¡ | t
tƒ ¡ |jD ]}|jttt
t	iksjJ ‚qjtƒ }| t| ¡ | t
|¡ | ttƒ ¡ | t
tƒ ¡ | ttƒ ¡ | t
tƒ ¡ tƒ }| tt dddd	gd¡ t t¡" |jt  tƒ ¡ W d   ƒ n1 s40    Y  |jt
  d¡ t t¡ |jt
  ¡  W d   ƒ n1 s~0    Y  d S )
Nr   r…   rƒ   r   r   r   rC   r   r:   )r   rU   r    r   rL   r9   rh   rM   rN   ri   rK   rg   rP   rF   rG   r	   rI   rb   r
   rc   )r/   r,   rX   rI   r!   r!   r"   Útest_close_different_statesÓ  sZ    þ

0.

ÿþ2r›   c                  C   s6  t tƒ} |  d¡ |  d¡ t| ƒtddddgdtdd	tƒ gksHJ ‚| jt t	u sZJ ‚|  
td
g d¡ |  
tƒ ¡ | jt t	u sŠJ ‚|  ¡  t| ƒtddddgdtdd	tƒ tƒ gksÂJ ‚| jttttiksØJ ‚|  
td
g d¡ |  
tƒ ¡ | jttttiksJ ‚|  
tƒ ¡ | jttttiks2J ‚d S )Nsp   GET /1 HTTP/1.1
Host: a.com
Content-Length: 5

12345GET /2 HTTP/1.1
Host: a.com
Content-Length: 5

67890rC   r   r|   )r}   rˆ   )r4   r‰   r   r=   r>   r   r   r   r@   )r   rK   rb   r   r   rT   rU   rN   r9   rV   rL   r    r   rh   ri   rP   rg   rj   r!   r!   r"   Útest_pipelined_close  sF    ÿ
ýù
	ýø

rœ   c                     s°   G dd„ dƒ} | ƒ ‰ ‡ fdd„}|ddƒ\}}|ˆ gks<J ‚|  tƒ ¡ |ddƒ\}}ˆ |v sbJ ‚d|| ˆ ¡< d	 |¡d
ks‚J ‚|d dƒ\}}|ˆ gksžJ ‚|jtu s¬J ‚d S )Nc                   @   s   e Zd Zdd„ ZdS )z*test_sendfile.<locals>.SendfilePlaceholderc                 S   s   dS )Né
   r!   )Úselfr!   r!   r"   Ú__len__>  s    z2test_sendfile.<locals>.SendfilePlaceholder.__len__N)Ú__name__Ú
__module__Ú__qualname__rŸ   r!   r!   r!   r"   ÚSendfilePlaceholder=  s   r£   c                    sV   t tƒ}t|d |¡ d¡ƒ g }| r0| | ¡ | td|d¡ || t	ˆ d¡fS )NzGET / HTTP/{}
Host: a

Úasciir   r   r>   )
r   rK   r   ÚformatÚencoder'   rL   r    Zsend_with_data_passthroughrT   )Úheaderr   rk   r   ©Úplaceholderr!   r"   rw   C  s    ÿ
ztest_sendfile.<locals>.setupr:   z1.1r%   s
   xxxxxxxxxxrC   s   a
xxxxxxxxxx
r   )rL   rU   ÚindexÚjoinrQ   rO   )r£   rw   rk   r?   Ú_r!   r¨   r"   Útest_sendfile<  s    r­   c               	   C   sJ  t tfD ]Æ} t| d}| d¡ t t¡ | ¡  W d   ƒ n1 sH0    Y  |jt	u s`J ‚|j
t	usnJ ‚t|jjƒ t t¡ | ¡  W d   ƒ n1 s¢0    Y  | tu r| tdg d¡dksJ ‚qdd„ }t tfD ]b} | t u rtdd	d
gd}tdd	d
gdd}n$| tu r8tdg d}tdg dd}|| ƒ}| |¡ |j
t	usZJ ‚|| ƒ}t t¡ | |¡ W d   ƒ n1 sŽ0    Y  |j
t	u s¨J ‚|jt	us¸J ‚t t¡ | |¡ W d   ƒ n1 sä0    Y  || ƒ}| ¡  |j
t	u sJ ‚|jt	usJ ‚| ¡  |j
t	u s6J ‚|jt	usàJ ‚qàd S )Nr\   s   gibberish

i  r   s$   HTTP/1.1 400 
Connection: close

c                 S   s.   t | d}| tu r*t|dƒ |jtu s*J ‚|S )Nr\   rm   )r   rK   r   rQ   rP   ©Úrolerk   r!   r!   r"   rI   u  s
    

ztest_errors.<locals>.connr   r   r-   r   r   r   r   r   )r9   rK   r   rb   rF   rG   r
   rc   rR   ÚERRORrQ   ÚprintZ_cstaterN   rL   r    r   r	   Zsend_failed)r¯   rk   rI   ZgoodÚbadr!   r!   r"   Útest_errors^  sZ    

&&ÿÿ
ü

**r³   c                  C   s*   t tfD ]} t| ƒ}| ¡ tu sJ ‚qd S r˜   )r9   rK   r   rc   r   r®   r!   r!   r"   Útest_idle_receive_nothing¤  s    r´   c                  C   sb   t tƒ} |  d¡ |  ¡ tu s"J ‚|  d¡ t t¡ |  ¡  W d   ƒ n1 sT0    Y  d S )Ns   GET /rC   )r   rK   rb   rc   r   rF   rG   r
   rj   r!   r!   r"   Útest_connection_drop«  s    

rµ   c                  C   s   t ƒ } |  ttdg d¡ d S )Ni˜  r   )r   rL   rK   r    )rX   r!   r!   r"   Útest_408_request_timeout´  s    r¶   c                  C   sH   t tƒ} |  d¡ t t¡ |  ¡  W d   ƒ n1 s:0    Y  d S )Nra   ©r   rK   rb   rF   rG   r
   rc   rj   r!   r!   r"   Útest_empty_request¼  s    
r¸   c                  C   s^   t tƒ} |  tdddgd¡ |  d¡ t t¡ |  ¡  W d   ƒ n1 sP0    Y  d S )Nr   r   rƒ   r   ra   )	r   r9   rL   r   rb   rF   rG   r
   rc   rj   r!   r!   r"   Útest_empty_responseÄ  s
    
r¹   r?   )ó    ó    s    ¥c                 C   sH   t tƒ}| | ¡ t t¡ | ¡  W d   ƒ n1 s:0    Y  d S r˜   r·   ©r?   rk   r!   r!   r"   Ú'test_early_detection_of_invalid_requestÌ  s    	
r½   )rº   r»   s    1c                 C   sH   t tƒ}| | ¡ t t¡ | ¡  W d   ƒ n1 s:0    Y  d S r˜   )r   r9   rb   rF   rG   r
   rc   r¼   r!   r!   r"   Ú(test_early_detection_of_invalid_responseÜ  s    	
r¾   c                  C   s†   dd„ } dD ]t}| |dƒ}|  tdg d¡dks4J ‚| |dƒ}|  tdg d¡d	ksXJ ‚| |dƒ}|  tdd
dgd¡dksJ ‚qd S )Nc                 S   sN   t tƒ}| | d | d d ¡ t| ¡ ƒtu s6J ‚t| ¡ ƒtu sJJ ‚|S )Ns    / HTTP/ra   s   Host: example.com

)r   rK   rb   Útyperc   r   rU   )r   r   rk   r!   r!   r"   rw   ñ  s    ÿz(test_HEAD_framing_headers.<locals>.setup)r2   r1   r<   r   r   s-   HTTP/1.1 200 
Transfer-Encoding: chunked

s   1.0rn   rp   r%   )rL   r    )rw   r   rk   r!   r!   r"   Útest_HEAD_framing_headersð  s(    	
ÿ
ÿ
þþÿ	÷ÿrÀ   c                  C   s`  t tƒ} |  d¡ t|  ¡ ƒtu s&J ‚|  ¡ tu s6J ‚|  d¡ |  ¡ tddksVJ ‚|  d¡ t 	t
¡}|  ¡  W d   ƒ n1 sˆ0    Y  dt|jƒv s¤J ‚dt|jƒv s¶J ‚t tƒ} |  d¡ t|  ¡ ƒtu sÜJ ‚|  ¡ tu sìJ ‚|  d¡ |  ¡ jd	ks
J ‚|  d¡ t 	t
¡}|  ¡  W d   ƒ n1 s>0    Y  d
t|jƒv s\J ‚d S )Ns;   POST / HTTP/1.1
Host: example.com
Content-Length: 100

r=   r>   rC   zreceived 5 byteszexpected 100r]   s	   8
012345s   012345zincomplete chunked read)r   rK   rb   r¿   rc   r   r   rT   rF   rG   r
   r(   Úvaluer?   )rk   Úexcinfor!   r!   r"   Ú;test_special_exceptions_for_lost_connection_in_message_body  s2    ÿ

&ÿ

(rÃ   ).rF   Ú_connectionr   r   r   r   r   Z_eventsÚ_stateZ_utilr	   r
   Zhelpersr   r   r   r#   r8   rY   r[   re   rl   ro   rq   rt   ry   r‚   r‡   r   r—   rš   r›   rœ   r­   r³   r´   rµ   r¶   r¸   r¹   ÚmarkZparametrizer½   r¾   rÀ   rÃ   r!   r!   r!   r"   Ú<module>   sR   (C'%) -LH})?*"F	þ
þ
*