o
    D“húŠ  ã                   @   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'd8d9„ Z(d:d;„ Z)dS )<é    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ƒrJ ‚t tddddgdƒr&J ‚t tddg ddƒr2J ‚t td	g d
ƒs<J ‚t td	dgd
ƒrGJ ‚t td	dgd
ƒrRJ ‚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!   úT/var/www/html/env_mimamsha/lib/python3.10/site-packages/h11/tests/test_connection.pyÚtest__keep_alive
   s4   ÿýÿýÿÿÿr#   c                     sX  dd„ ‰ d‡ fdd„	} d‡ fdd„	}i d	d
iddid
ddœfD ].}d| di |¤Žfd| dddi|¤Žfd| dddi|¤ŽffD ]\}}t ||ƒdksLJ ‚q?qddid
ddœfD ]"}d |di |¤Žfd| di |¤ŽffD ]\}}t ||ƒdksxJ ‚qkqWd |d
dfd| d
dffD ]\}}t ||ƒdks•J ‚qˆt d |ƒ ƒdks J ‚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)NFr!   )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w   Y  tƒ } | jt jtu s&J ‚| jt jt	u s0J ‚| jt	 jt	u s:J ‚| jt	 jtu sDJ ‚|  
ttddddgd¡}|dksWJ ‚| jD ]}|jttt	tiksgJ ‚qZ| jt jtu srJ ‚| jt jtu s|J ‚| jt	 jtu s†J ‚| jt	 jtu sJ ‚| jt jd u sšJ ‚| jt	 jdks¤J ‚|  
t	td	g d
¡}|dks´J ‚|  
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sJ ‚| j
ttƒ g d}|dks!J ‚| jD ]}|jttt	tiks2J ‚q$|  
t	tdd¡}|dksDJ ‚| j
t	tddtddtƒ gd}|dks\J ‚| j
t	tƒ g d}|dkslJ ‚| jD ]}|jttt	tiks}J ‚qod 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$   Ú11s%   HTTP/1.1 200 
content-length: 11

ó   12345©Údataó   67890©Úexpectó    ó
   1234567890ó   1)ÚpytestÚraisesÚ
ValueErrorr   r   Úconnr9   Úour_roleÚ
their_roleÚSERVERÚsendr   ÚconnsÚstatesÚ	SEND_BODYÚSEND_RESPONSEÚ	our_stateÚtheir_stateÚtheir_http_versionÚInformationalResponser    ÚDataÚEndOfMessageÚDONE©Úpr@   rJ   r!   r!   r"   Ú)test_Connection_basics_and_content_lengthP   sl   
ÿýþÿ

ÿ
"
ÿr\   c                  C   s  t ƒ } |  ttddddgd¡ |  ttdddd¡}|d	ks!J ‚|  ttd
ddd¡}|dks2J ‚| jttddg d}|dksCJ ‚|  ttdgd¡}|dksSJ ‚|  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   rE   T©r@   Úchunk_startÚ	chunk_ends   a
1234567890
s   abcdes
   5
abcde
rD   r?   rB   )ÚhelloÚtherer+   s   0
hello: there

r   r   s   54321r>   )r   rN   r9   r   rW   rX   rM   r    rO   rP   rY   rZ   r!   r!   r"   Útest_chunked“   s4   ýþÿ
ÿrb   c                  C   s4  t td} d}|  |¡ |  ¡ tddddgdksJ ‚|  ¡ tu s#J ‚|  d¡ |  ¡ td	d
d
dks5J ‚|  d¡ |  ¡ tdd
ddksGJ ‚|  d¡ |  ¡ tddddksYJ ‚|  d¡ |  ¡ tddd
dkskJ ‚|  d¡ |  ¡ td	d
d
dks}J ‚|  d¡ |  ¡ tksŠJ ‚|  d¡ |  ¡ tƒ ks˜J ‚d S )N©rK   óB   POST / HTTP/1.1
Host: example.com
Transfer-Encoding: chunked

ÚPOSTr   r-   r%   r   s
   5
hello
s   helloTr]   s   5
hels   helFó   ls   o
ó   os   5
helloó   
s   0

)r   rM   Úreceive_dataÚ
next_eventr   r   rW   rX   )rJ   Úrequestr!   r!   r"   Útest_chunk_boundaries²   s0   
ÿ
ý






rl   c                  C   sÆ   t tƒ} |  tdddgd¡ |  tƒ ¡ | jtu sJ ‚t| dƒtdg ddd	gks,J ‚| jt	u s3J ‚t| d
ƒt
d
dgks@J ‚t| dƒt
ddgksMJ ‚t| dƒtƒ tƒ gksZJ ‚| jtu saJ ‚d S )Nr   r   r-   r   s   HTTP/1.0 200 OK

r   r   s   OK)r   r   r   Úreasonr>   r?   rA   rD   )r   r9   rN   r   rX   rS   rY   r   r    Ú
MUST_CLOSErW   ÚConnectionClosedrT   ÚCLOSED©Úcr!   r!   r"   Ú$test_client_talking_to_http10_serverÙ   s   
ÿrs   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s*J ‚|  t	d	d
¡d	ks6J ‚|  tƒ ¡dks@J ‚| j
tu sGJ ‚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soJ ‚| jtu svJ ‚t| dƒtƒ gksJ ‚d S )Nó   GET / HTTP/1.0

r   r   r   r   r   r   ó$   HTTP/1.1 200 
connection: close

r>   r?   rD   s(   POST / HTTP/1.0
Content-Length: 10

1re   r:   rF   s	   234567890)r   rM   r   r   rX   rT   rn   rN   r    rW   rS   ro   rq   r!   r!   r"   Ú$test_server_talking_to_http10_clienté   s2   
þÿü
ù	rv   c               	   C   s¤   dgg ddgfD ]G} 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sCJ ‚| t	dd¡dksOJ ‚qd S )Nr%   ©r$   Ú100r   r   r-   r   r   r   rB   rt   ru   r>   r?   )
r   rN   r9   r   rX   rM   r    r   r   rW   )Úuser_headersr[   rr   r!   r!   r"   Ú,test_automatic_transfer_encoding_in_response  s2   ûþþ	
ÿý

ÿßrz   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sIJ ‚q<d S )
Nr   r   r-   r   r   r3   r   )Ú
connectionr   rB   )
r   rN   r9   r   rX   rO   rP   rn   rM   r    ©r[   rJ   r!   r!   r"   Ú(test_automagic_connection_close_handling7  s.   ýúþ
þû

ÿr}   c                  C   sº   dd„ } | ƒ }|  ttdg d¡ |jD ]}|jrJ ‚|jr J ‚q| ƒ }|  ttddgd¡ |jD ]}|jr9J ‚|jr>J ‚q2| ƒ }|  ttdd¡ |jD ]}|jrUJ ‚|jrZJ ‚qNd S )	Nc                  S   sZ   t ƒ } |  ttddg d¢d¡ | jD ]}|jsJ ‚q| jt jr#J ‚| jt js+J ‚| S )Nr   r   )r-   rw   )ÚExpectz100-continuer   )	r   rN   r9   r   rO   Ú"client_is_waiting_for_100_continuerJ   Ú!they_are_waiting_for_100_continuerM   r|   r!   r!   r"   ÚsetupX  s   ýþ
z test_100_continue.<locals>.setupr0   r   r   r%   r>   r?   )	rN   rM   rV   rO   r   r€   r    r9   rW   ©r   r[   rJ   r!   r!   r"   Útest_100_continueW  s&   

ÿ



þrƒ   c                  C   s6  t tƒ} |  d¡ |  ¡ tu sJ ‚t t¡ 	 |  d¡ |  ¡  q1 s%w   Y  t tdd} |  d¡ |  d¡ |  d¡ t| ƒt	d	d
ddgdt
ƒ gksQJ ‚t tdd} |  d¡ |  d¡ t t¡ |  ¡  W d   ƒ n1 suw   Y  t tdd} |  d¡ |  ddd  ¡ t| ƒt	d	d
ddgdtdd dt
ƒ gks¦J ‚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   ƒ d S 1 sw   Y  d S )Ns   GET / HTTP/1.0
Endless: Ts   aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiˆ  )Úmax_incomplete_event_sizes   GET / HTTP/1.0
Big: s   aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaas   

r   r   r   )ÚbigÁ   aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa)r   r   r   r   i   s%   GET / HTTP/1.0
Content-Length: 10000ó   ai'  )r$   Ú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   rM   ri   rj   r   rG   rH   r
   r   r   rX   rW   rN   r    Ústart_next_cyclerq   r!   r!   r"   Ú-test_max_incomplete_event_size_countermeasure„  sx   

þÿ



ÿ
ü


ÿ
ü
øÿ
þ

þ
$ÿ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 ‚| 
¡  q"|  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   rN   r9   r   rX   rM   r    rO   rP   rY   rŽ   r|   r!   r!   r"   Útest_reuse_simpleÐ  s    þ

þþr”   c                  C   s$  t tƒ} |  ¡ tu sJ ‚|  d¡ t| ƒtddddgdtddtƒ gks'J ‚| j	t
u s.J ‚| jtu s5J ‚|  ¡ tu s=J ‚|  td	g d
¡ |  tƒ ¡ | j	t
u sSJ ‚| jt
u sZJ ‚|  ¡  t| ƒtddddgdtddtƒ gkstJ ‚|  ¡ tu s|J ‚|  td	g d
¡ |  tƒ ¡ |  ¡  t| ƒtdddgdtƒ gks J ‚|  ¡ tu s¨J ‚|  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   ƒ d S 1 sw   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Œ   rA   z/3ó   SADF)r—   FrD   )r—   Ts   FDSA)r   rM   rj   r   ri   r   r   rW   rX   rT   rY   rS   rR   r   rN   r    rŽ   Útrailing_datarG   rH   ÚRuntimeErrorrq   r!   r!   r"   Útest_pipeliningå  sl   ÿý
ù	ý
ù	
þ


$ÿrš   c               	      s^  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suJ ‚qh| tt
ƒ ¡ |jD ]}| ¡  q€|ƒ }| t|¡ |jD ].}|jttttiks J ‚| 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 sJ ‚|jdks%J ‚| t|¡ | ¡ tu s4J ‚|ƒ }|jt }| d¡g k | ¡ tu sLJ ‚| | ¡ | ¡ tƒ ks[J ‚|ƒ }t t¡ |jt  t d	d
dgd¡ W d   ƒ n	1 s}w   Y  |ƒ }| t|¡ t t¡ |jt  tdd¡ W d   ƒ n	1 s§w   Y  qPd S )NÚCONNECTzexample.com:443©r   Ú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 s2J ‚q'| j	t
  ¡ tu s>J ‚| S )NrF   r?   )r   rN   r9   rO   rP   rQ   rW   rX   ÚMIGHT_SWITCH_PROTOCOLrJ   rM   rj   r   r|   ©r/   r!   r"   r   W  s   

z#test_protocol_switch.<locals>.setupó   123s   456)s   123456Frt   )rt   Fr   r   rD   )rD   Tr   r?   )r   r    rV   rN   rM   rO   rP   r9   rY   rQ   rX   rŽ   ÚSWITCHED_PROTOCOLri   rj   r   r˜   rJ   r   ro   rG   rH   r	   rW   )ÚdenyÚacceptr   r[   rJ   Úscr!   r£   r"   Útest_protocol_switch-  s²   ý

ù
ý
ù
ý

øý
øã)








þ




ÿÿÿ€ˆr©   c               	      sT  t tftt ffD ]Ÿ\‰ ‰‡ ‡fdd„} | ƒ }|jˆ  ¡ tƒ ks"J ‚|jˆ  ¡ tƒ ks.J ‚|jˆ  d¡ |jˆ  ¡ tƒ ksBJ ‚| ƒ }| ˆtƒ ¡ |jD ]}|jt	u sXJ ‚|j
t	u s_J ‚qO| ƒ }t t¡ |jˆ  d¡ W d   ƒ n1 s{w   Y  | ƒ }|jˆ   d¡ t t¡ |jˆ   ¡  W d   ƒ n1 s¢w   Y  qd S )Nc                     s:   t ƒ } |  ˆ tƒ ¡ | jD ]}|jˆ tˆtiksJ ‚q| S ©N)r   rN   ro   rO   rP   rp   rn   r|   ©Úwho_shot_firstÚwho_shot_secondr!   r"   r   ¯  s   
þz test_close_simple.<locals>.setuprD   r¤   r2   )r9   rM   rJ   rj   ro   ri   rN   rO   rS   rp   rT   rG   rH   r™   r
   r‚   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s.J ‚q!tƒ }| t| ¡ | ttƒ ¡ |jD ]}|jtt	t
tiksOJ ‚qBtƒ }| t| ¡ t t¡ |jt
  tƒ ¡ W d   ƒ n1 srw   Y  |jt  d¡ t t¡ |jt  ¡  W d   ƒ n1 s–w   Y  tƒ }| t| ¡ | t
|¡ | t
tƒ ¡ |jD ]}|jttt
t	iksÁJ ‚q´tƒ }| 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 sw   Y  |jt
  d¡ t t¡ |jt
  ¡  W d   ƒ d S 1 s=w   Y  d S )
Nr   r’   r   r   r   r   rD   r   r:   )r   rX   r    r   rN   r9   ro   rO   rP   rp   rM   rn   rR   rG   rH   r	   rJ   ri   r
   rj   )r/   r,   r[   rJ   r!   r!   r"   Útest_close_different_statesÓ  sb   þ

ÿÿ

ÿþÿ$ÿr¯   c                  C   s2  t tƒ} |  d¡ |  d¡ t| ƒtddddgdtdd	tƒ gks$J ‚| jt t	u s-J ‚|  
td
g d¡ |  
tƒ ¡ | jt t	u sEJ ‚|  ¡  t| ƒtddddgdtdd	tƒ tƒ gksaJ ‚| jttttikslJ ‚|  
td
g d¡ |  
tƒ ¡ | jttttiks†J ‚|  
tƒ ¡ | jttttiks—J ‚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

67890rD   r   r‰   )rŠ   r•   )r4   r–   r   r>   r?   r   r   rŒ   rA   )r   rM   ri   r   r   rW   rX   rP   r9   rY   rN   r    rŽ   ro   rp   rR   rn   rq   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 s1J ‚d|| ˆ ¡< d	 |¡d
ksAJ ‚|d dƒ\}}|ˆ gksOJ ‚|jtu sVJ ‚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 }| r| | ¡ | td|d¡ || t	ˆ d¡fS )NzGET / HTTP/{}
Host: a

Úasciir   r   r?   )
r   rM   r   ÚformatÚencoder'   rN   r    Úsend_with_data_passthroughrW   )Úheaderr   rr   r   ©Úplaceholderr!   r"   r   C  s   ÿ
ztest_sendfile.<locals>.setupr:   z1.1r%   s
   xxxxxxxxxxrD   s   a
xxxxxxxxxx
r   )rN   rX   ÚindexÚjoinrS   rQ   )r·   r   rr   r@   Ú_r!   r½   r"   Útest_sendfile<  s   rÂ   c               	   C   s:  t tfD ]c} t| d}| d¡ t t¡ | ¡  W d   ƒ n1 s$w   Y  |jt	u s0J ‚|j
t	us7J ‚t|jjƒ t t¡ | ¡  W d   ƒ n1 sQw   Y  | tu rg| tdg d¡dksgJ ‚qdd„ }t tfD ]ª} | t u rˆtdd	d
gd}tdd	d
gdd}n| tu r™tdg d}tdg dd}|| ƒ}| |¡ |j
t	us©J ‚|| ƒ}t t¡ | |¡ W d   ƒ n1 sÂw   Y  |j
t	u sÎJ ‚|jt	usÕJ ‚t t¡ | |¡ W d   ƒ n1 sêw   Y  || ƒ}| ¡  |j
t	u sþJ ‚|jt	usJ ‚| ¡  |j
t	u sJ ‚|jt	usJ ‚qpd S )Nrc   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 )Nrc   rt   )r   rM   r   rS   rR   ©Úrolerr   r!   r!   r"   rJ   u  s
   

ztest_errors.<locals>.connr   r   r-   r   r   r   r   r   )r9   rM   r   ri   rG   rH   r
   rj   rT   ÚERRORrS   ÚprintÚ_cstaterP   rN   r    r   r	   Úsend_failed)rÄ   rr   rJ   ÚgoodÚbadr!   r!   r"   Útest_errors^  sd   


ÿ
ÿÿ€ü
ÿÿÜrË   c                  C   s*   t tfD ]} t| ƒ}| ¡ tu sJ ‚qd S rª   )r9   rM   r   rj   r   rÃ   r!   r!   r"   Útest_idle_receive_nothing¤  s   þrÌ   c                  C   sd   t tƒ} |  d¡ |  ¡ tu sJ ‚|  d¡ t t¡ |  ¡  W d   ƒ d S 1 s+w   Y  d S )Ns   GET /rD   )r   rM   ri   rj   r   rG   rH   r
   rq   r!   r!   r"   Útest_connection_drop«  s   


"ÿrÍ   c                  C   s   t ƒ } |  ttdg d¡ d S )Ni˜  r   )r   rN   rM   r    )r[   r!   r!   r"   Útest_408_request_timeout´  s   rÎ   c                  C   sJ   t tƒ} |  d¡ t t¡ |  ¡  W d   ƒ d S 1 sw   Y  d S )Nrh   )r   rM   ri   rG   rH   r
   rj   rq   r!   r!   r"   Útest_empty_request¼  s
   

"ÿrÏ   c                  C   s`   t tƒ} |  tdddgd¡ |  d¡ t t¡ |  ¡  W d   ƒ d S 1 s)w   Y  d S )Nr   r   r   r   rh   )	r   r9   rN   r   ri   rG   rH   r
   rj   rq   r!   r!   r"   Útest_empty_responseÄ  s   

"ÿrÐ   c                  C   s†   dd„ } dD ]:}| |dƒ}|  tdg d¡dksJ ‚| |dƒ}|  tdg d¡d	ks,J ‚| |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 sJ ‚t| ¡ ƒtu s%J ‚|S )Ns    / HTTP/rh   s   Host: example.com

)r   rM   ri   Útyperj   r   rX   )r   r   rr   r!   r!   r"   r   Ñ  s   ÿz(test_HEAD_framing_headers.<locals>.setup)r2   r1   r<   r   r   s-   HTTP/1.1 200 
transfer-encoding: chunked

s   1.0ru   rw   r%   )rN   r    )r   r   rr   r!   r!   r"   Útest_HEAD_framing_headersÐ  s$   	


þþÿ	
÷îrÒ   c                  C   sZ  t tƒ} |  d¡ t|  ¡ ƒtu sJ ‚|  ¡ tu sJ ‚|  d¡ |  ¡ tddks+J ‚|  d¡ t 	t
¡}|  ¡  W d   ƒ n1 sDw   Y  dt|jƒv sRJ ‚dt|jƒv s[J ‚t tƒ} |  d¡ t|  ¡ ƒtu snJ ‚|  ¡ tu svJ ‚|  d¡ |  ¡ jd	ks„J ‚|  d¡ t 	t
¡}|  ¡  W d   ƒ n1 sw   Y  d
t|jƒv s«J ‚d S )Ns;   POST / HTTP/1.1
Host: example.com
Content-Length: 100

r>   r?   rD   zreceived 5 byteszexpected 100rd   s	   8
012345s   012345zincomplete chunked read)r   rM   ri   rÑ   rj   r   r   rW   rG   rH   r
   r(   Úvaluer@   )rr   Úexcinfor!   r!   r"   Ú;test_special_exceptions_for_lost_connection_in_message_bodyú  s6   ÿ


ÿÿ


ÿrÕ   )*rG   Ú_connectionr   r   r   r   r   Ú_eventsÚ_stateÚ_utilr	   r
   Úhelpersr   r   r   r#   r8   r\   rb   rl   rs   rv   rz   r}   rƒ   r   r”   rš   r©   r®   r¯   r°   rÂ   rË   rÌ   rÍ   rÎ   rÏ   rÐ   rÒ   rÕ   r!   r!   r!   r"   Ú<module>   s@    (C'%) -LH})?*"F	*