
    7iE                         d Z ddlZddlZddlZddlmZmZ ddlmZ  e	d      Z
 e	d eD              Zd Zd	 Zd
 Zd Zd Zd Zd Zd Z G d de      Z G d de      Z G d d      Zy)z$Adjustments are tunable parameters.
    N   )HAS_IPV6WIN)PROXY_HEADERS)ttrueyyeson1c              #   \   K   | ]$  }|j                         j                  d d       & yw)_-N)lowerreplace).0headers     G/var/www/html/venv/lib/python3.12/site-packages/waitress/adjustments.py	<genexpr>r      s(       )/FLLN3$ s   *,c                     | yt        | t              r| S t        |       j                         } | j	                         t
        v S )aG  Return the boolean value ``True`` if the case-lowered value of string
    input ``s`` is any of ``t``, ``true``, ``y``, ``on``, or ``1``, otherwise
    return the boolean value ``False``.  If ``s`` is the value ``None``,
    return ``False``.  If ``s`` is already one of the boolean values ``True``
    or ``False``, return it.F)
isinstanceboolstrstripr   truthyss    r   asboolr      s;     	y!TAA779    c                     t        | d      S )z3Convert the given octal string to an actual number.   )intr   s    r   asoctalr#   ,   s    q!9r   c                     t        | t              r6t        d | j                         D cg c]  }|j	                          c}      } t        |       S c c}w N)r   r   filter
splitlinesr   list)valuexs     r   aslist_cronlyr+   1   sB    %t1A1A1CDAaggiDE; Es   A
c                 p    t        |       }g }|D ]#  } | j                         }|j                  |       % |S )zReturn a list of strings, separating the input based on newlines
    and, if flatten=True (the default), also split on spaces within
    each line.)r+   splitextend)r)   valuesresult	subvaluess       r   aslistr2   7   s@     5!FF !KKM	i ! Mr   c                 *    t        t        |             S r%   )setr2   )r)   s    r   assetr5   C   s    ve}r   c                 p    | j                         } | r#d| j                  d      j                  d      z   } | S )N/)r   lstriprstripr   s    r   slash_fixed_strr:   G   s4    		A !((3-&&s++Hr   c                      | rt        |       S d S r%   )r   r   s    r   str_iftruthyr<   P   s    3q6 D r   c                 b    | D cg c]  }t        |t        j                        s|! c}S c c}w )zRChecks if the elements in the list are of type socket and
    removes them if not.)r   socket)socketssocks     r   as_socket_listrA   T   s%     %HT
4(GDHHHs   ,,c                       e Zd Zy)_str_markerN__name__
__module____qualname__ r   r   rC   rC   Z       r   rC   c                       e Zd Zy)_int_markerNrD   rH   r   r   rK   rK   ^   rI   r   rK   c                   F   e Zd ZdZg defdefdefdefdefdefdefd	efd
e	fdefdefdefde
fdefdefdefdefdefdefdefdefdefdefdefdefdefdefdefdefdefd efd!efd"efd#efZ ee      Z ed$      Z ed%      Ze d&e gZd'Zd(Zd(Z e       Zd)Zd*Zd+Zd,Zd-Zd.Zd/Z d0Z!d1Z"d2Z#d3Z$d4Z%d5Z&d6Z'd*Z(d7Z)d8Z*d)Z+d(Z,d9Z-e.j^                  e.j`                  d0fgZ1d0Z2d)Z3d*Z4d*Z5g Z6d:Z7d;Z8d< Z9e:d=        Z;e:d>        Z<y()?Adjustmentsz'This class contains tunable parameters.hostportipv4ipv6listenthreadstrusted_proxytrusted_proxy_counttrusted_proxy_headerslog_untrusted_proxy_headersclear_untrusted_proxy_headers
url_scheme
url_prefixbacklog
recv_bytes
send_bytesoutbuf_overflowoutbuf_high_watermarkinbuf_overflowconnection_limitcleanup_intervalchannel_timeoutlog_socket_errorsmax_request_header_sizemax_request_body_sizeexpose_tracebacksidentasyncore_loop_timeoutasyncore_use_pollunix_socketunix_socket_permsr?   channel_request_lookaheadserver_namez0.0.0.0i  :   NFThttp waitressi   i    r   i   i   i   d      x   i   i   @i  r   zwaitress.invalidc           	      b	   d|v rd|v sd|v rt        d      d|v rd|v rt        d      d|v rd|v sd|v rt        d      d|v rd|v rt        d	      d|v rd|v sd|v rt        d
      d|v rd|v rt        d      d|v rt        j                  dt               |j	                         D ]A  \  }}|| j
                  vrt        d|z        t        | | | j
                  |   |             C t        | j                  t              rt        | j                  t              s!| j                   d| j                   g| _        t        j                  }| j                  st         st        d      | j                  r| j"                  st        j$                  }| j                  s"| j"                  rt         rt        j&                  }g }g }| j                  D ]K  }d|v r1|j)                  dd      \  }}	d|	v r/|t+        | j                        }	}n|t+        | j                        }	}t,        r	 t/        |	      }		 d|v r$d|v r |j3                  d      j5                  d      }|dk(  rd }t        j6                  ||	|t        j8                  t        j:                  t        j<                        D ]s  }
|
\  }}}}}|d   dk(  s |d   j?                  dd      d   |d   f|vs3|jA                  ||||f       |jA                  |d   j?                  dd      d   |d   f       u N | jB                  | jD                  t        d      | jB                  d| _!        | jF                  r| jD                  t        d      | jF                  r| jF                  D ch c]  }|jI                          c}| _#        | jF                  tJ        z
  }|r3t        ddjM                  |      ddjM                  tJ                    d| jF                  v rI| jF                  dhz
  r9t        d      | jD                  "t        j                  d t               d!h| _#        || _        | jO                  | jP                         y # t0        $ r t        d      w xY w# t0        $ r t        d      w xY wc c}w )"NrR   rN   rO   z-host or port may not be set if listen is set.r?   z'socket may not be set if listen is set.z.host or port may not be set if sockets is set.rk   z,unix_socket may not be set if sockets is setz1unix_socket may not be set if host or port is setz+unix_socket may not be set if listen is setr]   z.send_bytes will be removed in a future releasezUnknown adjustment %rro   zGIPv4 is disabled but IPv6 is not available. Cowardly refusing to start.r   ]z>Windows does not support service names instead of port numbers[*r   %zInvalid host/port specified.z@trusted_proxy_count has no meaning without setting trusted_proxyzBtrusted_proxy_headers has no meaning without setting trusted_proxyz.Received unknown trusted_proxy_headers value (z, z) expected one of 	forwardedzyThe Forwarded proxy header and the X-Forwarded-{By,Host,Proto,Port,For} headers are mutually exclusive. Can't trust both!zNo proxy headers were marked as trusted, but trusted_proxy was set. Implicitly trusting X-Forwarded-Proto for backwards compatibility. This will be removed in future versions of waitress.zx-forwarded-proto))
ValueErrorwarningswarnDeprecationWarningitems
_param_mapsetattrr   rN   rC   rO   rK   rR   r>   	AF_UNSPECrP   r   rQ   AF_INETAF_INET6rsplitr   r   r"   	Exceptionr   r9   getaddrinfoSOCK_STREAMIPPROTO_TCP
AI_PASSIVEr-   appendrU   rT   rV   r   KNOWN_PROXY_HEADERSjoincheck_socketsr?   )selfkwkvenabled_familieswanted_socketshp_pairsirN   rO   r   familysocktypeprotor   sockaddrr   unknown_valuess                     r   __init__zAdjustments.__init__$  s   r>v|v|LMMr>i2oFGG?""MNN?}2KLLBFbLFbLPQQB8r>JKK2MM@BT HHJ 	4DAq' !81!<==D!/T__Q/23	4
 $))[1II{:
 #ii[$))56DK!++yyY  99TYY%~~yyTYY8% 6	AAax xxQ/t $;$%s499~4T !3tyy>tt9D"A$;3$;::c?11#6D3;D++$&&&&%% UA >?:VXua !q($QK--c15a8(1+FhV&--vx.QR !):):3)B1)ExPQ{(ST1U76	Ap ##/D4F4F4NU  %%-'(D$%%$*<*<*DW  %%-1-G-G*#)*D& "77:MMN  yy0$))<O2PR  t999..+> 3  +MMG #	 +>)>D&$4<<(q ! $X L  A !?@@A"*s&   0Q<<B%R"ARR,<RR)c                 X   ddg}| j                   D ]Y  \  }}|j                  dd      }|t        u r&|j                  |       |j                  d|z          F|j                  |dz          [ ddd}t	        j                  |d	|      \  }}|D ]  \  }}|j                  d      j                  dd      }	|	d
k(  r&dj                  |j                  d
d	      |      |d
<   R|	j                  d      r|	dd }	d||	<   n|	dv rd||	<   x| j                  |	   t        u rd||	<   |||	<    ||fS )zPre-parse command line arguments for input into __init__.  Note that
        this does not cast values into adjustment types, it just creates a
        dictionary suitable for passing into __init__, where __init__ does the
        casting.
        helpcallr   r   zno-=F)r   r   rr   rR   z{} {}no_   NfalseTr   )
_paramsr   r   r   getoptr8   formatget
startswithr   )
clsargv	long_optsoptcastr   optsargsr)   params
             r   
parse_argszAdjustments.parse_args  sN    V$	 	,IC++c3'Cv~  %  -  s+	, 

 ]]4Y7
d 	"JCJJsO++C5E &~~bffXr.BEJ8&ab	#5	** 5	&&0"5	!5		"" 4xr   c                    d}d}d}|D ]  }|j                   t        j                  k(  s|j                   t        j                  k(  r |j                  t        j
                  k(  rd}]t        t        d      r=|j                   t        j                  k(  r |j                  t        j
                  k(  rd}d} |r|rt        d      |rt        d      y )NFTAF_UNIXz+Internet and UNIX sockets may not be mixed.z1Only Internet or UNIX stream sockets may be used.)	r   r>   r   r   typer   hasattrr   r}   )r   r?   has_unix_sockethas_inet_sockethas_unsupported_socketr@   s         r   r   zAdjustments.check_sockets  s    !& 	.Dv~~-1O))v111"&	*KK6>>1II!3!33"&)-&	. JKK!PQQ "r   )=rE   rF   rG   __doc__r   r"   r   r2   r<   r5   r:   r#   rA   r   dictr   rC   rN   rK   rO   rR   rS   rT   rU   r4   rV   rW   rX   rY   rZ   rh   r[   r\   r]   r^   r_   r`   ra   rb   rc   rd   re   rf   rg   rk   rl   r>   SOL_TCPTCP_NODELAYsocket_optionsri   rj   rP   rQ   r?   rm   rn   r   classmethodr   r   rH   r   r   rM   rM   b   sz   1#	#	# 
# 
	#
 
6# 
C# 
,'# 
$# 
!%(# 
'/# 
)&1# 
s# 
'# 
C# 
s#  
s!#" 
C ##$ 
!#&%#& 
3'#( 
S!)#* 
S!+#, 
C -#. 
f%/#0 
#C(1#2 
!#&3#4 
f%5#6 
,7#8 
!#&9#: 
f%;#< 
=#> 
g&?#@ 
N#A#B 
%c*C#D 
E#GJ gJ y!D tDavF G M 
  E #( %)! J J E G J J
 O %
 N   O  % '  K  
++Q/N
   D D G !"
 %KX)t & &P R Rr   rM   )r   r   r>   r~   compatr   r   proxy_headersr   	frozensetr   r   r   r#   r+   r2   r5   r:   r<   rA   r   rC   r"   rK   rM   rH   r   r   <module>r      s       ! (	7	8  3@   

	!I	# 		# 	ZR ZRr   