
    7i              
       R   d Z ddlZddlZddlZddlZddlZddlZddlZddlm	Z	m
Z
  ej                  d      Z ej                  d      Zd Zd Zd.d
Zd Zg dZg dZ e eed            Z e eed            Zi Z ed      D ]  Zeeee   <   eeee   <     ed ed      gz  d      Zg dZi Z ed      D ]  Zedz   eee   <     e eed            Z e eed       ed      e ed      edgd	      Z ej<                  e      Zd Z  e eed       e ed      e ed      gd      edgd	      Z! ej<                  e!      Z"d Z#g dZ$g dZ%d Z&d Z'd  Z(d! Z) G d" d#      Z* G d$ d%e*      Z+ G d& d'e+      Z, G d( d)e+      Z- G d* d+e*      Z. G d, d-e*      Z/y)/zUtility functions
    N   )QUOTED_PAIR_REQUOTED_STRING_REwaitresszwaitress.queuec                 <    | j                  d      }|dk\  r|dz  }|S )zEReturns the position just after a double newline in the given string.s   

r      )find)sposs     E/var/www/html/venv/lib/python3.12/site-packages/waitress/utilities.pyfind_double_newliner      s%    
&&
C
axqJ    c                  $    dj                  |       S )N join)argss    r   concatr   )   s    774=r    c                 $    |j                  |       S Nr   )seqfields     r   r   r   -   s    ::c?r   c                     d| z   dz   S )N() )r
   s    r   groupr   1   s    7S=r   )sunmontuewedthufrisat)sundaymondaytuesday	wednesdaythursdayfridaysaturday|      z
[0-9][0-9]:)janfebmaraprmayjunjulaugsepoctnovdec   ,z[0-9][0-9]?z[0-9]+gmtc           
          | j                   }t         |d            t         |d         t         |d            t         |d            t         |d            t         |d            dddf	S )Nr   r/            r.   r   )r   intmonmap)mgs     r   unpack_rfc822rH   v   sb    	A 	AaD	qtAaD	AaD	AaD	AaD				
 
r   -c           
      
   | j                   } |d      }t        |      dk(  rd|z   }t        |      t         |d         t         |d            t         |d            t         |d            t         |d            dddf	S )	Nr   rA   19r/   rB   rC   r.   r   )r   lenrD   rE   )rF   rG   yrs      r   unpack_rfc850rN      s{    	A	
1B
2w!|BY 	BqtAaD	AaD	AaD	AaD				
 
r   )MonTueWedThuFriSatSun)NJanFebMarAprMayJunJulAugSepOctNovDecc           	      t    t        j                  |       \	  }}}}}}}}}	dt        |   |t        |   ||||fz  S )Nz#%s, %02d %3s %4d %02d:%02d:%02d GMT)timegmtimeweekdayname	monthname)
whenyearmonthdayhhmmsswdyzs
             r   build_http_daterq      sS    -1[[->*D%b"b"a0B%


4  r   c                    | j                         } t        j                  |       }|rE|j                         t	        |       k(  r)t        t        j                  t        |                  }|S t        j                  |       }|rE|j                         t	        |       k(  r)t        t        j                  t        |                  }|S y)Nr   )lower
rfc850_regmatchendrL   rD   calendartimegmrN   
rfc822_regrH   )drF   retvals      r   parse_http_dater|      s    		AAQUUWAX__]1%567 M QCF"q)9:;F M r   c                 D   | j                  d      ra| j                  d      rPt        j                  |       }|r]|j	                         t        |       k(  rA| dd } t        j                  d|       } | S | j                  d      s| j                  d      s| S t        d      )N"r   z\1zInvalid quoting in value)	
startswithendswithr   ru   rv   rL   r   sub
ValueError)valuematchess     r   undquoter      s    !4"((/w{{}E
2!BKE #&&ue4ELc"5>>#+>
/
00r   c                 "   	 t        j                  |       }t        j                  |j                        r	 t        j                  |        y y # t
        $ r Y y w xY w# t
        $ r(}|j                  t        j                  k7  r Y d }~y d }~ww xY wr   )osstatS_ISSOCKst_moderemoveOSErrorerrnoENOENT)pathstexcs      r   cleanup_unix_socketr      sx    WWT]
 ==$		$ %    99$ %s(   A A 	AA	B&B		Bc                   (    e Zd ZdZdZd ZddZd Zy)Error  Internal Server Errorc                     || _         y r   )body)selfr   s     r   __init__zError.__init__  s	    	r   Nc                     | j                    d| j                   }| j                   d| j                   }|r|nd}d| d}||z   j                  d      }dg}|||fS )Nr   z

serverz

(generated by r   zutf-8)zContent-Typeztext/plain; charset=utf-8)codereasonr   encode)r   identstatusr   tagheaderss         r   to_responsezError.to_response  sr    II;a}-++htyyk2H&ugQ/s
""7+@Aw$$r   c              #   N   K   | j                         \  }}} |||       | y wr   )r   )r   environstart_responser   r   r   s         r   wsgi_responsezError.wsgi_response  s*      $ 0 0 2vw'
s   #%r   )__name__
__module____qualname__r   r   r   r   r   r   r   r   r   r      s    D$F%r   r   c                       e Zd ZdZdZy)
BadRequesti  zBad RequestNr   r   r   r   r   r   r   r   r   r     s    DFr   r   c                       e Zd ZdZdZy)RequestHeaderFieldsTooLargei  zRequest Header Fields Too LargeNr   r   r   r   r   r     s    D.Fr   r   c                       e Zd ZdZdZy)RequestEntityTooLargei  zRequest Entity Too LargeNr   r   r   r   r   r   !  s    D'Fr   r   c                       e Zd ZdZdZy)InternalServerErrorr   r   Nr   r   r   r   r   r   &  s    D$Fr   r   c                       e Zd ZdZdZy)ServerNotImplementedi  zNot ImplementedNr   r   r   r   r   r   +  s    DFr   r   )r   )0__doc__rw   r   loggingr   rer   rc   rfc7230r   r   	getLoggerloggerqueue_loggerr   r   r   r   
short_days	long_daysshort_day_reglong_day_regdaymaprangeihms_regmonthsrE   
months_regrfc822_datecompilery   rH   rfc850_datert   rN   re   rf   rq   r|   r   r   r   r   r   r   r   r   r   r   r   <module>r      s3      	 	   5			:	& w  !12 ?
	 d:s+,T)S)*		q AF:a=F9Q< qE,'((#
.
 
	r AAF6!9 4$%
 }c"mh 
 RZZ$
" |S!eM"Jh@#F	  RZZ$
. @	""1( . 
/* /
(J (
%% %
5 r   