§
    K" hÛ<  ã                   ó  — d Z ddlmZ ddlZddlmZ ddlmZ ddlm	Z	 ddl
mZmZ ddlmZmZ dd	lmZmZmZmZmZ d
„ Z G d„ de¦  «        Z G d„ de¦  «        Z G d„ d¦  «        Zd„ Zd„ Z ej        d¦  «        Zd„ ZdS )zwHTTP Request Parser

This server uses asyncore to accept connections and do initial
processing but threads to do work.
é    )ÚBytesION)Úparse)Úunquote_to_bytes)ÚOverflowableBuffer)ÚChunkedReceiverÚFixedStreamReceiver)ÚHEADER_FIELD_REÚONLY_DIGIT_RE)Ú
BadRequestÚRequestEntityTooLargeÚRequestHeaderFieldsTooLargeÚServerNotImplementedÚfind_double_newlinec                 óF   — t          | ¦  «                             d¦  «        S )Núlatin-1)r   Údecode)Ú
bytestrings    úIc:\xampp_lite_8_4\www\timesheet\venv\Lib\site-packages\waitress/parser.pyÚunquote_bytes_to_wsgir   $   s   € Ý˜JÑ'Ô'×.Ò.¨yÑ9Ô9Ð9ó    c                   ó   — e Zd ZdS )ÚParsingErrorN©Ú__name__Ú
__module__Ú__qualname__© r   r   r   r   (   ó   € € € € € Ø€Dr   r   c                   ó   — e Zd ZdS )ÚTransferEncodingNotImplementedNr   r   r   r   r    r    ,   r   r   r    c                   ód   — e Zd ZdZdZdZdZdZdZdZ	dZ
dZdZdZdZdZdZd„ Zd„ Zd	„ Zd
„ Zd„ ZdS )ÚHTTPRequestParserzŒA structure that collects the HTTP request.

    Once the stream is completed, the instance is passed to
    a server task constructor.
    Fr   r   Nú1.0c                 ó"   — i | _         || _        dS )z/
        adj is an Adjustments object.
        N)ÚheadersÚadj)Úselfr&   s     r   Ú__init__zHTTPRequestParser.__init__H   s   € ð ˆŒØˆŒˆˆr   c                 ó.  — | j         rdS t          |¦  «        }| j        }|�€¾| j        j        }| j        |z   }t          |¦  «        }d}|dk    r|| _        |t          |¦  «        |z
  z
  }n| xj        |z  c_        |}| j        |k    r5|                      d¦  «         t          d|z  ¦  «        | _
        d| _         |S |dk    �r|d|…         }|                     ¦   «         }|sd| _        d| _         nÚ	 |                      |¦  «         | j        €d| _         | j        dk    r5| j        j        }	| j        |	k    rt          d|	z  ¦  «        | _
        d| _         nu# t           $ r0}
t#          |
j        d         ¦  «        | _
        d| _         Y d}
~
n@d}
~
wt&          $ r0}
t)          |
j        d         ¦  «        | _
        d| _         Y d}
~
nd}
~
ww xY wd| _        |S || _        |S |                     |¦  «        }| xj        |z  c_        | j        j        }	| j        |	k    rt          d|	z  ¦  «        | _
        d| _         nY|j
        r|j
        | _
        d| _         n>|j         r7d| _         | j        r)t3          |                     ¦   «         ¦  «        | j        d<   |S )zÁ
        Receives the HTTP stream for one request.  Returns the number of
        bytes consumed.  Sets the completed flag once both the header and the
        body have been received.
        r   Ns   GET / HTTP/1.0
zexceeds max_header of %sTzexceeds max_body of %sÚCONTENT_LENGTH)Ú	completedÚlenÚbody_rcvr&   Úmax_request_header_sizeÚheader_plusr   Úheader_bytes_receivedÚparse_headerr   ÚerrorÚlstripÚemptyÚcontent_lengthÚmax_request_body_sizer   r   r   Úargsr    r   Úheaders_finishedÚreceivedÚbody_bytes_receivedÚchunkedÚstrÚ__len__r%   )r'   ÚdataÚdatalenÚbrÚ
max_headerÚsÚindexÚconsumedr/   Úmax_bodyÚes              r   r9   zHTTPRequestParser.receivedQ   sõ  € ð Œ>ð 	Ø�1å�d‘)”)ˆØŒ]ˆà‰:àœÔ9ˆJàÔ  4Ñ'ˆAÝ'¨Ñ*Ô*ˆEØˆHà˜Šzˆzð .3�Ô*Ø"¥c¨!¡f¤f¨u¡nÑ5��àÐ*Ô*¨gÑ5Ð*Ô*Ø"�ð Ô)¨ZÒ7Ð7Ø×!Ò!Ð"7Ñ8Ô8Ð8Ý8Ø.°Ñ;ñô �”
ð "&�”à�à˜Šz‰zà   œi�ð *×0Ò0Ñ2Ô2�à"ð 6Ø!%�D”JØ%)�D”N�Nð6Ø×)Ò)¨+Ñ6Ô6Ð6ð  œ=Ð0ð .2˜DœNàÔ.°Ò2Ð2Ø'+¤xÔ'E˜Hð  $Ô2°hÒ>Ð>Ý-BØ$<¸xÑ$Gñ."ô ." ¤
ð 26 ¤øøõ+ (ð .ð .ð .Ý%/°´°q´	Ñ%:Ô%:˜œ
Ø)-˜œ˜˜˜˜˜øøøøÝ9ð .ð .ð .Ý%9¸!¼&À¼)Ñ%DÔ%D˜œ
Ø)-˜œ˜˜˜˜˜øøøøð.øøøð& )-�Ô%à�ð  !ˆDÔàˆNð —{’{ 4Ñ(Ô(ˆHØÐ$Ô$¨Ñ0Ð$Ô$Ø”xÔ5ˆHàÔ'¨8Ò3Ð3å2Ð3KÈhÑ3VÑWÔW�”
Ø!%�”�Ø”ð GàœX�”
Ø!%�”�Ø”ð Gà!%�”à”<ð Gõ 69¸¿º¹¼Ñ5FÔ5F�D”LÐ!1Ñ2àˆOs$   Ã6E Å
GÅ$&FÆGÆ&GÇGc                 ó"  — |                      d¦  «        }|dk    r*|d|…                              ¦   «         }||dz   d…         }nt          d¦  «        ‚d|v sd|v rt          d¦  «        ‚|| _        t	          |¦  «        }| j        }|D ]ä}t          j        |¦  «        }|st          d	¦  «        ‚|                     d
d¦  «        \  }}	d|v rŒE|	 	                    d¦  «        }	| 
                    ¦   «                              dd¦  «                             d¦  «        }
	 ||
xx         d|	z                        d¦  «        z  cc<   Œ½# t          $ r |	                     d¦  «        ||
<   Y Œáw xY wt          |¦  «        \  }}}||cxk    r|cxk    rdk    rn nt          d¦  «        ‚|                     d¦  «        | _        |                     d¦  «        }|                     d¦  «        }|| _        || _        t%          |¦  «        \  | _        | _        | _        | _        | _        | j        j        | _        |                     dd¦  «        }|dk    r|                     ¦   «         dk    rd| _        |dk    ró|                     dd¦  «        }d„ |                     d¦  «        D ¦   «         }|D ]}|dvrt?          d¦  «        ‚Œ|rA|d         dk    r5d| _         tC          | j        j"        ¦  «        }tG          |¦  «        | _$        n|rt?          d¦  «        ‚|                     d d¦  «                             ¦   «         }|d!k    | _%        |                     ¦   «         d"k    rd| _        | j         s˜|                     d#d$¦  «        }tM          j        | '                    d¦  «        ¦  «        st          d%¦  «        ‚tQ          |¦  «        }|| _)        |dk    r2tC          | j        j"        ¦  «        }tU          ||¦  «        | _$        dS dS dS )&zp
        Parses the header_plus block of text (the headers plus the
        first line of the request).
        ó   
r   Né   zHTTP message header invalidó   ó   
z#Bare CR or LF found in HTTP messagezInvalid headerÚnameÚvalueó   _s    	ó   -r   s   , r   zStart line is invalidÚ
CONNECTIONÚ r#   z
keep-aliveTz1.1ÚTRANSFER_ENCODINGc                 ó`   — g | ]+}|¯|                      d ¦  «                             ¦   «         ‘Œ,S )z 	)ÚstripÚlower)Ú.0Úencodings     r   ú
<listcomp>z2HTTPRequestParser.parse_header.<locals>.<listcomp>   sE   € ð ð ð Ø2:ÈxðØ—’˜uÑ%Ô%×+Ò+Ñ-Ô-ðð ð r   ú,>   r;   z-Transfer-Encoding requested is not supported.éÿÿÿÿr;   ÚEXPECTz100-continueÚcloser*   Ú0zContent-Length is invalid)+ÚfindÚrstripr   Ú
first_lineÚget_header_linesr%   r	   ÚmatchÚgrouprT   ÚupperÚreplacer   ÚKeyErrorÚcrack_first_lineÚrequest_uriÚcommandÚversionÚ	split_uriÚproxy_schemeÚproxy_netlocÚpathÚqueryÚfragmentr&   Ú
url_schemeÚgetrU   Úconnection_closeÚpopÚsplitr    r;   r   Úinbuf_overflowr   r-   Úexpect_continuer
   ÚencodeÚintr5   r   )r'   r/   rC   r`   ÚheaderÚlinesr%   ÚlineÚkeyrM   Úkey1ri   Úurirj   Ú
connectionÚteÚ	encodingsrW   ÚbufÚexpectÚcls                        r   r1   zHTTPRequestParser.parse_headerÈ   su  € ð
 × Ò  Ñ)Ô)ˆà�AŠ:ˆ:Ø$ V e VÔ,×3Ò3Ñ5Ô5ˆJØ  ¨¡  Ô-ˆFˆFåÐ<Ñ=Ô=Ð=à�JÐÐ %¨:Ð"5Ð"5ÝÐDÑEÔEÐEà$ˆŒå  Ñ(Ô(ˆà”,ˆàð 	8ð 	8ˆDÝ$Ô*¨4Ñ0Ô0ˆFàð 5Ý"Ð#3Ñ4Ô4Ð4àŸš f¨gÑ6Ô6‰JˆC�à�sˆ{ˆ{ð ð —K’K Ñ'Ô'ˆEØ—9’9‘;”;×&Ò& t¨TÑ2Ô2×9Ò9¸)ÑDÔDˆDð
8Ø˜��” %¨%¡-×!7Ò!7¸	Ñ!BÔ!BÑB��‘�øÝð 8ð 8ð 8Ø %§¢¨YÑ 7Ô 7�˜‘��ð8øøøõ !1°Ñ <Ô <Ñˆ��gØ�cÐ+Ð+Ò+Ð+˜WÐ+Ð+Ò+Ð+¨Ò+Ð+Ð+Ð+Ð+ÝÐ6Ñ7Ô7Ð7ð Ÿ:š: iÑ0Ô0ˆÔØ—.’. Ñ+Ô+ˆØ—.’. Ñ+Ô+ˆØˆŒØˆŒõ �c‰NŒNñ	
ØÔØÔØŒIØŒJØŒMàœ(Ô-ˆŒØ—[’[ ¨rÑ2Ô2ˆ
à�eÒÐØ×ÒÑ!Ô! \Ò1Ð1Ø(,�Ô%à�eÒÐð
 —’Ð0°"Ñ5Ô5ˆBðð Ø>@¿hºhÀs¹m¼mðñ ô ˆIð &ð ð �ð  ;Ð.Ð.Ý8ØGñô ð ð /ð
 ð ˜Y rœ]¨iÒ7Ð7Ø#�”Ý(¨¬Ô)@ÑAÔA�Ý /°Ñ 4Ô 4�”�Øð Ý4ØCñô ð ð —[’[ ¨2Ñ.Ô.×4Ò4Ñ6Ô6ˆFØ#)¨^Ò#;ˆDÔ à×ÒÑ!Ô! WÒ,Ð,Ø(,�Ô%àŒ|ð 	=Ø—’Ð-¨sÑ3Ô3ˆBå Ô& r§y¢y°Ñ';Ô';Ñ<Ô<ð @Ý"Ð#>Ñ?Ô?Ð?å�R‘”ˆBØ"$ˆDÔà�AŠvˆvÝ(¨¬Ô)@ÑAÔA�Ý 3°B¸Ñ <Ô <�”��ð	=ð 	=ð ˆvs   Ä!&EÅ"E-Å,E-c                 óX   — | j         }|�|                     ¦   «         S t          ¦   «         S ©N)r-   Úgetfiler   ©r'   r-   s     r   Úget_body_streamz!HTTPRequestParser.get_body_streamN  s+   € Ø”=ˆàÐØ×#Ò#Ñ%Ô%Ð%å‘9”9Ðr   c                 óh   — | j         }|�(|                     ¦   «                              ¦   «          d S d S r‡   )r-   Úgetbufr\   r‰   s     r   r\   zHTTPRequestParser.closeV  s9   € Ø”=ˆàÐØ�OŠOÑÔ×#Ò#Ñ%Ô%Ð%Ð%Ð%ð  Ðr   )r   r   r   Ú__doc__r+   r4   rw   r8   r/   r;   r5   r0   r:   r-   rj   r2   rs   r(   r9   r1   rŠ   r\   r   r   r   r"   r"   0   s¸   € € € € € ðð ð €IØ€EØ€OØÐØ€KØ€GØ€NØÐØÐØ€HØ€GØ€EØÐð
ð ð ðuð uð uðnD=ð D=ð D=ðLð ð ð&ð &ð &ð &ð &r   r"   c                 óÞ  — dx}x}x}x}}| d d…         dk    r=| }d|v r|                      dd¦  «        \  }}d|v r|                      dd¦  «        \  }}n9	 t          j        | ¦  «        \  }}}}}n# t          $ r t	          d¦  «        ‚w xY w|                     d¦  «        |                     d¦  «        t          |¦  «        |                     d¦  «        |                     d¦  «        fS )	Nr   rI   s   //ó   #é   ó   ?zBad URIr   )ru   r   ÚurlsplitÚUnicodeErrorr   r   r   )r   ÚschemeÚnetlocrn   ro   rp   s         r   rk   rk   ]  s  € ð 14Ð3€FÐ3ˆVÐ3�dÐ3˜U Xð ˆ2ˆAˆ2„w�%ÒÐØˆà�4ˆ<ˆ<Ø!ŸZšZ¨¨aÑ0Ô0‰NˆD�(à�4ˆ<ˆ<ØŸ*š* T¨1Ñ-Ô-‰KˆD�%øð	*Ý49´NÀ3Ñ4GÔ4GÑ1ˆF�F˜D %¨¨øÝð 	*ð 	*ð 	*Ý˜yÑ)Ô)Ð)ð	*øøøð 	�Š�iÑ Ô Ø�Š�iÑ Ô Ý˜dÑ#Ô#Ø�Š�YÑÔØ�Š˜	Ñ"Ô"ðð s   ÁA2 Á2Bc                 óN  — g }|                       d¦  «        }|D ]Š}|sŒd|v sd|v r t          dt          |d¦  «        z  ¦  «        ‚|                     d¦  «        r3|s t          dt          |d¦  «        z  ¦  «        ‚|dxx         |z  cc<   Œu|                     |¦  «         Œ‹|S )	zL
    Splits the header into lines, putting multi-line headers together.
    rH   rJ   rK   z'Bare CR or LF found in header line "%s"r   )ó    ó   	zMalformed header line "%s"rZ   )ru   r   r<   Ú
startswithÚappend)rz   Úrr{   r|   s       r   ra   ra   �  sÓ   € ð 	€AØ�LŠL˜Ñ!Ô!€Eàð ð ˆØð 	Øà�Dˆ=ˆ=˜E T˜M˜MÝØ9½CÀÀiÑ<PÔ<PÑPñô ð ð �?Š?˜=Ñ)Ô)ð 	Øð Xå"Ð#?Å#ÀdÈIÑBVÔBVÑ#VÑWÔWÐWØˆbˆEˆEŒE�T‰MˆEˆE‰EˆEà�HŠH�T‰NŒNˆNˆNà€Hr   s‚   (?P<method>[!#$%&'*+\-.^_`|~0-9A-Za-z]+) (?P<uri>(?:[^ :?#]+://[^ ?#/]*(?:[0-9]{1,5})?)?[^ ]+)(?: HTTP/(?P<version>[0-9]\.[0-9]))?c                 óì   — t                                | ¦  «        }|€dS |d         pd}|d         }|d         }||                     ¦   «         k    r t          dt	          |d¦  «        z  ¦  «        ‚|||fS )N)r   r   r   rj   r   Úmethodr   zMalformed HTTP method "%s"r   )Úfirst_line_reÚ	fullmatchrd   r   r<   )r|   Úmrj   r�   r   s        r   rg   rg   £  s   € Ý×Ò Ñ%Ô%€Aà€yØˆ}à�	ŒlÐ!˜c€GØˆxŒ[€FØ
ˆEŒ(€Cð �—’‘”ÒÐÝÐ7½#¸fÀiÑ:PÔ:PÑPÑQÔQÐQà�3˜ÐÐr   ) r�   Úior   ÚreÚurllibr   Úurllib.parser   Úwaitress.buffersr   Úwaitress.receiverr   r   Úwaitress.rfc7230r	   r
   Úwaitress.utilitiesr   r   r   r   r   r   Ú	Exceptionr   r    r"   rk   ra   Úcompilerž   rg   r   r   r   ú<module>r«      s¾  ððð ð
 Ð Ð Ð Ð Ð Ø 	€	€	€	Ø Ð Ð Ð Ð Ð Ø )Ð )Ð )Ð )Ð )Ð )à /Ð /Ð /Ð /Ð /Ð /Ø BÐ BÐ BÐ BÐ BÐ BÐ BÐ BØ ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;ðð ð ð ð ð ð ð ð ð ð ð ð ð ð:ð :ð :ð	ð 	ð 	ð 	ð 	�9ñ 	ô 	ð 	ð	ð 	ð 	ð 	ð 	 Yñ 	ô 	ð 	ðj&ð j&ð j&ð j&ð j&ñ j&ô j&ð j&ðZ	!ð !ð !ðHð ð ð6 �”
ð-ñô €ð ð  ð  ð  ð  r   