
    h@                        S SK JrJrJrJr  S SKrSSKJrJrJ	r	J
r
JrJrJr  SSKJrJr  SSKJrJrJrJrJr  SSKJr  SSKJrJrJrJrJrJrJ r J!r!J"r"J#r#  SS	K$J%r%  SS
K&J'r'J(r(J)r)J*r*J+r+J,r,J-r-  SSK.J/r/  \\4\" SSSS/S9S4\"\!4\" SS/SS9S4\"\!4\" S/ SS9S4\"\!4\" SS/SS9S4\"\!4\" S/ SS9S4/r0S\S   S\S \14S! jr2S\S\S"\S S4S# jr3S$\1S \4S% jr4S&\S$\1S"\S S4S' jr5S@S( jr6S@S) jr7S@S* jr8S@S+ jr9S@S, jr:S&\S-\1S.\;S \\SS4   4S/ jr<S0\S \\
   4S1 jr=SAS2\S$\1S"\S.\;S S4
S3 jjr>S@S4 jr?S@S5 jr@S@S6 jrAS@S7 jrBS@S8 jrCS@S9 jrDS@S: jrES@S; jrFS@S< jrGS@S= jrHS@S> jrIS@S? jrJg)B    )AnyCallable	GeneratorListN   )ConnectionClosedDataEndOfMessageEventInformationalResponseRequestResponse)Headersnormalize_and_validate)_obsolete_line_foldChunkedReaderContentLengthReaderHttp10ReaderREADERSReceiveBuffer)
CLIENTCLOSEDDONEIDLEMIGHT_SWITCH_PROTOCOL
MUST_CLOSE	SEND_BODYSEND_RESPONSESERVERSWITCHED_PROTOCOL)LocalProtocolError)ChunkedWriterContentLengthWriterHttp10Writerwrite_any_responsewrite_headerswrite_requestWRITERS   )normalize_data_eventsGETz/aHostfoo
Connectionclosemethodtargetheaderss1   GET /a HTTP/1.1
Host: foo
Connection: close

      OK)status_coder6   reasons&   HTTP/1.1 200 OK
Connection: close

s   HTTP/1.1 200 OK

e   )Upgrade	websockets   Upgrades,   HTTP/1.1 101 Upgrade
Upgrade: websocket

s   HTTP/1.1 101 Upgrade

writer).Nobjreturnc                 L    / nU " XR                   5        SR                  U5      $ )N    )appendjoin)r>   r?   got_lists      C/var/www/html/env/lib/python3.13/site-packages/h11/tests/test_io.pydowriterG   R   s"    H
3 88HrB   expectedc                 (    [        X5      nX2:X  d   eg N)rG   )r>   r?   rH   gots       rF   twrL   X   s    
&
C??rB   datac                 "    [        5       nX-  nU$ rJ   r   )rM   bufs     rF   makebufrP   ]   s    
/CKCJrB   readerc                 V  ^ S[         SS 4U4S jjn[        U5      nU" U " U5      5        U(       a   e[        5       n[        [	        U5      5       H  nU " U5      b   eXAXUS-    -  nM     U" U " U5      5        [        U5      nUS-  nU" U " U5      5        [        U5      S:X  d   eg )NrK   r@   c                    > U T:X  d   e[        U S/ 5       H-  u  p[        U5      [        L d   e[        U5      [        L a  M-   e   g )Nr6   )getattrtypebytes)rK   namevaluerH   s      rF   checktr.<locals>.checkd   sJ    h #3	26KD:&&&;%''' 7rB   r*      trailing)r   rP   r   rangelenrV   )rQ   rM   rH   rY   rO   is     `   rF   trr_   c   s    (3 (4 ( $-C	&+N7 /C3t9c{"""AA  
&+ $-C;C	&+:$$$rB   c                  P    [          H  u  u  pp#[        [        X4   X#5        M     g rJ   )SIMPLE_CASESrL   r)   rolestateeventbinarys       rF   test_writers_simplerg      s$    *6&$
74;/ +7rB   c                  P    [          H  u  u  pp#[        [        X4   X25        M     g rJ   )ra   r_   r   rb   s       rF   test_readers_simpleri      s$    *6&$
74;/ +7rB   c                     [        [        [        SS/5      S5        [        [        [        / 5      S5        [        R
                  " [        5         [        [        [        SSSS/S	S
9S 5        S S S 5        [        R
                  " [        5         [        [        [        SS/S	S9S 5        S S S 5        g ! , (       d  f       NM= f! , (       d  f       g = f)Nr/   bar)bazquuxs   foo: bar
baz: quux

s   
r,   /r-   r0   1.0r4   r5   r6   http_versionr7   )r9   r6   rr   )rL   r'   r   r   pytestraisesr"   r(   r   r&   r    rB   rF   test_writers_unusualrv      s    @A(
 }gbk7+ 
)	*
(*AB"	 		
 
+ 
)	*
*A)BQV 	
 
+	* 
+	* 
+	*s   B6C6
C
Cc                     [        [        [        [        4   S[	        SSS/SS95        [        [        [        [        4   S[	        SS/ SS95        [        [        [
        [        4   S[        S	S/SS
S95        [        [        [
        [        4   S[        S	S/SS
S95        [        [        [
        [        4   S[        S	S/SS
S95        [        [        [
        [        4   S[        S	S/SS
S95        [        [        [
        [        4   S[        S	S/SSS95        [        [        [
        [        4   S[        S	S/SSS95        [        [        [
        [        4   S[        S	SS/SSS95        [        [        [
        [        4   S[        S	SS/SSS95        [        [        [        [        4   S[	        SS/ SQS95        [        R                  " [        5         [        [        [        [        4   SS 5        S S S 5        [        R                  " [        5         [        [        [        [        4   S S 5        S S S 5        [        R                  " [        5         [        [        [        [        4   S!S 5        S S S 5        [        R                  " [        5         [        [        [        [        4   S!S 5        S S S 5        [        R                  " [        5         [        [        [        [        4   S"S 5        S S S 5        g ! , (       d  f       GN= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       g = f)#Ns$   HEAD /foo HTTP/1.0
Some: header

HEAD/fooSomeheaderrp   rq   s   HEAD /foo HTTP/1.0

s!   HTTP/1.0 200 OK
Some: header

r7   r8   )r9   r6   rr   r:   s$   HTTP/1.0 200 OK
Foo: a a a a a 

)Fooz	a a a a as   HTTP/1.0 200 OK
Foo:

)r}    s   HTTP/1.0 200 OK
Foo: 	 	 

s   HTTP/1.0 200
Foo: bar

)r}   rl   rB   s#   HTTP/1.1 200 OK
SomeHeader: val

)
SomeHeadervalz1.1OKs5   HTTP/1.1 200 OK
SomeHeader1: val1
SomeHeader2: val2

)SomeHeader1val1)SomeHeader2val2s7   HTTP/1.1 200 OK
SomeHeader1: val1
SomeHeader2: val2

s   HEAD /foo HTTP/1.1
Host: example.com
Some: multi-line
 header
	nonsense
    	   		I guess
Connection: close
More-nonsense: in the
    last header  

)r.   zexample.com)r{   z"multi-line header nonsense I guessr0   )zMore-nonsensezin the last headerr3   s&   HEAD /foo HTTP/1.1
  folded: line

s#   HEAD /foo HTTP/1.1
foo  : line

s"   HEAD /foo HTTP/1.1
foo	: line

s   HEAD /foo HTTP/1.1
: line

)r_   r   r   r   r   r    r   r   rs   rt   r"   ru   rB   rF   test_readers_unusualr      s   5'(		
	 %vfbuM %&2'(		
	 %&9)*		
	 %&.k]u	
 %&5k]u	
 %&/n%5ERU	
 %&3*+		
	 %&D,.EF		
	 %&H,.EF		
	 	% 			
. 
)	*
FDL!?	
 
+ 
)	*
FDL!<	
 
+ 
)	*
FDL!<	
 
+ 
)	*
FDL!<	
 
+ 
)	*
764< "MtT 
+	*3 
+	* 
+	* 
+	* 
+	* 
+	*s<   L L!L."L?#M
L
L+.
L<?
M
Mc                  T    [        [        / SQ5      5      S[        S5      S/:X  d   eg )N)   aaas   bbbs     ccc   dddr   s   bbb cccr   )listr   	bytearrayru   rB   rF   test__obsolete_line_fold_bytesr   H  s6     #$FGH*M   rB   rO   do_eofc              #      #     U " U5      nUc  OUv   [        U5      [        L a  OM%  U(       a  U(       a   eU R                  5       v   g g 7frJ   )rU   r
   read_eof)rQ   rO   r   re   s       rF   _run_reader_iterr   U  sT      s= ;,&  woo s   AAargsc                  :    [        [        U 6 5      n[        U5      $ rJ   )r   r   r+   )r   eventss     rF   _run_readerr   f  s    "D)*F ((rB   thunkc                    [        S5        [        U5      n[        U " 5       XC5      U:X  d   e[        S5        U " 5       n[        5       n/ n[	        [        U5      5       H  nU[        XTS5      -  nXAXwS-    -  nM     U[        XTU5      -  n[        U5      U:X  d   e[        S U 5       5      nU(       a/  U(       d'  [        US-   5      n[        U " 5       US5      U:X  d   eg g g )NzTest 1zTest 2Fr*   c              3   D   #    U  H  n[        U5      [        L v   M     g 7frJ   )rU   r
   ).0re   s     rF   	<genexpr> t_body_reader.<locals>.<genexpr>|  s     Hxed5k\1xs    r[   )printrP   r   r   r\   r]   r+   any)	r   rM   rH   r   rO   rQ   r   r^   is_completes	            rF   t_body_readerr   k  s    	(O
$-Cuw,888 
(OWF
/CF3t9+f511AA  k&v..F (H444HxHHK6d[()57C/8;;; "{rB   c                  p    [        S S[        5       /5        [        S S[        SS9[        5       /5        g )Nc                      [        S5      $ )Nr   r   ru   rB   rF   <lambda>*test_ContentLengthReader.<locals>.<lambda>  s
    -a0rB   rB   c                      [        S5      $ )N
   r   ru   rB   rF   r   r     s
    #B'rB   s
   0123456789rM   )r   r
   r	   ru   rB   rF   test_ContentLengthReaderr     s1    0#7GH'	=	!<>2rB   c                      [        [        S[        5       /SS9  [        [        S[        SS9/SS9  [        [        S[        SS9[        5       /SS9  g )NrB   T)r   s   asdfr   F)r   r   r
   r	   ru   rB   rF   test_Http10Readerr     sH    ,ln%5dC,$G*<)=eLg' 2LNCDrB   c            	         [        [        S[        5       /5        [        [        S[        S/S9/5        [        [        S[        SS9[        S/S9/5        [        [        S[        SS9[        5       /5        [        [        S	[        S
S9[        5       /5        [        R
                  " [        5         [        [        S[        SS9/5        S S S 5        [        R
                  " [        5         [        [        SS 5        S S S 5        [        [        S[        SS9[        5       /5        [        [        S[        SS9[        5       /5        g ! , (       d  f       N= f! , (       d  f       Nd= f)N   0

s   0
Some: header

rz   r6   s3   5
01234
10
0123456789abcdef
0
Some: header

s   012340123456789abcdefr   s%   5
01234
10
0123456789abcdef
0

s   aA
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
0

s   xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxsi   9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
xxxs   xxxs   10 
xxxsG   5; hello=there
xxxxx
0; random="junk"; some=more; canbe=lonnnnngg

s   xxxxxs   5   	 
01234
0

s   01234)r   r   r
   r	   rs   rt   r"   ru   rB   rF   test_ChunkedReaderr     s>   -/?@$	12	34 	"
 ./"4!56	

 H	+	,ln= 8	;	0 
)	* 	m%<t?P>QR 
+ 
)	*m%5t< 
+ 	B 
8	ln- -	8	ln-' 
+	* 
+	*s   5E1E!
E!
E/c                     [        S5      n [        U [        SS95      S:X  d   e[        U [        SS95      S:X  d   e[        U [        5       5      S:X  d   e[        S5      n [        R
                  " [        5         [        U [        SS95        S S S 5        [        S5      n [        U [        SS95        [        R
                  " [        5         [        U [        SS95        S S S 5        [        S5      n [        U [        SS95        [        R
                  " [        5         [        U [        5       5        S S S 5        [        S5      n [        U [        SS95      S:H    [        U [        SS95      S:H    [        R
                  " [        5         [        U [        S/S	95        S S S 5        g ! , (       d  f       GN'= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       g = f)
N   s   123r   s   45rB   s   123456s   456Etagasdfr   )r$   rG   r	   r
   rs   rt   r"   ws    rF   test_ContentLengthWriterr     sw   AA1d'(F2221d&'50001ln%,,,AA	)	*4Y'( 
+ 	AAAt !	)	*4V$% 
+ 	AAAt !	)	*<>" 
+ 	AAAt !V+At E)	)	*<)9(:;< 
+	*! 
+	*
 
+	*
 
+	* 
+	*s0   =F1G%GG%1
G 
G
G"%
G3c                     [        5       n [        U [        SS95      S:X  d   e[        U [        SS95      S:X  d   e[        U [        SS95      S:X  d   e[        U [        5       5      S:X  d   e[        U [        SS	/S
95      S:X  d   eg )Nr   r   s   3
aaa
s   aaaaaaaaaaaaaaaaaaaas   14
aaaaaaaaaaaaaaaaaaaa
rB   r   r   )abr   s   0
Etag: asdf
a: b

)r#   rG   r	   r
   r   s    rF   test_ChunkedWriterr     s    A1d'(O;;;1d	*+/NNNN1dn%,,,1ln%555 	<)9:(FGH-	.	.rB   c                     [        5       n [        U [        SS95      S:X  d   e[        U [        5       5      S:X  d   e[        R
                  " [        5         [        U [        S/S95        S S S 5        g ! , (       d  f       g = f)Ns   1234r   rB   r   r   )r%   rG   r	   r
   rs   rt   r"   r   s    rF   test_Http10Writerr     sf    A1d()W4441ln%,,,	)	*<)9(:;< 
+	*	*s   A66
Bc                      [         R                  " [        5         [        [        [
        [        4   SS 5        S S S 5        g ! , (       d  f       g = f)Ns   HTTP/1.0 200 OK xxxx

)rs   rt   r"   r_   r   r    r   ru   rB   rF   &test_reject_garbage_after_request_liner     s2    	)	*
76=()+MtT 
+	*	*   A
Ac                      [         R                  " [        5         [        [        [
        [        4   SS 5        S S S 5        g ! , (       d  f       g = f)Ns&   HEAD /foo HTTP/1.1 xxxxxx
Host: a

rs   rt   r"   r_   r   r   r   ru   rB   rF   'test_reject_garbage_after_response_liner   	  s5    	)	*
FDL!?	
 
+	*	*r   c                      [         R                  " [        5         [        [        [
        [        4   SS 5        S S S 5        g ! , (       d  f       g = f)Ns%   HEAD /foo HTTP/1.1
Host: foo bar

r   ru   rB   rF   "test_reject_garbage_in_header_liner     s5    	)	*
FDL!A	
 
+	*	*r   c                     S Hq  n [        S5      nUR                  U 5        UR                  S5        [        R                  " [
        5         [        [        [        [        4   US 5        S S S 5        Ms     g ! , (       d  f       M  = f)Ns     s   HEAD /s    HTTP/1.1
Host: foobar

)
r   rC   extendrs   rt   r"   r_   r   r   r   )bad_charmessages     rF   test_reject_non_vchar_in_pathr     sb    'I&x ;<]]-.wvt|$gt4 /.	 ( /.s   A99
B	c            
      V    [        [        [        [        4   S[	        SSSS/S95        g )Ns\   HEAD /foo HTTP/1.1
Host: foo
Set-Cookie: ___utmvafIumyLc=kUdUpAt; path=/; Max-Age=900

rx   ry   r-   )z
Set-Cookiez-___utmvafIumyLc=kUdUpAt; path=/; Max-Age=900r3   )r_   r   r   r   r   ru   rB   rF   "test_allow_some_garbage_in_cookiesr   %  s6    	 	R	
rB   c                  <    [        [        [        SS/5      S5        g )Nrk   r   s   Host: example.com
foo: bar

)rL   r'   r   ru   rB   rF   test_host_comes_firstr   7  s    0GHI0rB   )r@   N)F)Ktypingr   r   r   r   rs   _eventsr   r	   r
   r   r   r   r   _headersr   r   _readersr   r   r   r   r   _receivebufferr   _stater   r   r   r   r   r   r   r   r    r!   _utilr"   _writersr#   r$   r%   r&   r'   r(   r)   helpersr+   ra   rV   rG   rL   rP   r_   rg   ri   rv   r   r   boolr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   ru   rB   rF   <module>r      sO   1 1    7  +   '   + 
$&=>	

 	E 
S+B*CER7 
S"U;" 
&>%?
	
 	> 
#r*M'7 FHY' c e s    
% M %s %% %3 %4 %80
0

>]U@
   %) sD$ ")s )tE{ )
< <E <S <$ <SW <.:z=6=U


5$rB   