
    7i5                        d dl Z d dlZ d dl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 d dlmZ dd	lmZ dd
lmZ 	 	 	 	 ddZ G d d      Z G d dej.                        Z G d de      Z eed      r G d de      ZeZy)    N)trigger)Adjustments)HTTPChannel)IPPROTO_IPV6IPV6_V6ONLY)ThreadedTaskDispatcher)cleanup_unix_socket   )	wasyncore)proxy_headers_middlewarec                 |   | t        d      t        di |}|i }|}|%t               }|j                  |j                         |j
                  rDt        t        d      r4t        j                  t        j                  ddf}t        | ||||||      S g }	d}
|j                  sJ|j                  D ];  }t        | ||||||      }
|	j                  |
j                  |
j                   f       = |j                  D ]  }|j"                  |j$                  |j&                  |j)                         f}|j"                  t        j*                  k(  s|j"                  t        j,                  k(  r;t        | |||||d|      }
|	j                  |
j                  |
j                   f       t        t        d      s|j"                  t        j                  k(  st        | |||||d|      }
|	j                  |
j                  |
j                   f        t/        |	      dk(  r|
S |
j0                  }t3        |||	||      S )	z]
    if __name__ == '__main__':
        server = create_server(app)
        server.run()
    NzmThe "app" passed to ``create_server`` was ``None``.  You forgot to return a WSGI app within your application.AF_UNIX)
dispatcheradjsockinfoF)r   r   bind_socketr   r
    )
ValueErrorr   r   set_thread_countthreadsunix_sockethasattrsocketr   SOCK_STREAMUnixWSGIServersocketslistenTcpWSGIServerappendeffective_hosteffective_portfamilytypeprotogetsocknameAF_INETAF_INET6lenlog_infoMultiSocketServer)applicationmap_start_sock_dispatcherkwr   r   r   effective_listen	last_servsockr)   s                B/var/www/html/venv/lib/python3.12/site-packages/waitress/server.pycreate_serverr5      sF    <
 	
 

C
{J+-
##CKK0
7695NNF$6$6dC!
 	
 I;;

 	H &%!I ##))9+C+CD	"  KKDJJ8H8H8JK;;&..(DKK6??,J%%!!	I ##))9+C+CD VY'DKK6>>,I&%!!	I ##))9+C+CD7B !!!H S#'7XNN    c                   4    e Zd ZeZ	 	 	 	 	 ddZd Zd Zd Zy)r*   Nc                 J    || _         || _        || _        || _        || _        y N)r   r,   r1   task_dispatcherr)   )selfr,   r   r1   r   r)   s         r4   __init__zMultiSocketServer.__init__   s)      0) r6   c                     | j                   D ]>  }t        |      }d|d   v rd|d    d|d<   | j                   |j                  |        @ y )N:r   [])r1   listr)   format)r;   
format_strls      r4   print_listenzMultiSocketServer.print_listen   sZ    && 	1AQAad{1Q4&{!MM+*++Q/0	1r6   c                     	 | j                   j                  | j                  j                  | j                  | j                  j
                         y # t        t        f$ r | j                          Y y w xY wN)timeoutr,   use_poll)	asyncoreloopr   asyncore_loop_timeoutr,   asyncore_use_poll
SystemExitKeyboardInterruptcloser;   s    r4   runzMultiSocketServer.run   s_    	MM66HH33  
 -. 	JJL	s   AA A54A5c                 v    | j                   j                          t        j                  | j                         y r9   )r:   shutdownr   	close_allr,   rQ   s    r4   rP   zMultiSocketServer.close   s&    %%'DHH%r6   )NNNNN)	__name__
__module____qualname__r   rJ   r<   rE   rR   rP   r   r6   r4   r*   r*      s,    H !1&r6   r*   c                       e Zd ZeZdZeZeZ	dZ
	 	 	 	 	 	 	 d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y)BaseWSGIServerr   FNc	           	         |t        di |	}|j                  s|j                  rNt        ||j                  |j                  |j
                  |j                  |j                  | j                        }|i }||j                  d   }|| _	        |d   | _
        |d   | _        || _        || _        t        j                  |      | _        |/t               }|j!                  | j                  j"                         || _        | j&                  j(                  j+                  | ||       |h| j-                  | j                  | j                         | j                  t.        j0                  k(  r%| j.                  j3                  t4        t6        d       | j9                          |r| j;                          | j=                         \  | _        | _         |jB                  | _!        i | _"        |r| jG                          y y )N)trusted_proxytrusted_proxy_counttrusted_proxy_headersclear_untrustedlog_untrustedloggerr   r
   r,   r   )$r   r\   clear_untrusted_proxy_headersr   r]   r^   log_untrusted_proxy_headersra   r   r   r"   socktyper+   r   r   r   r   r   r:   rJ   r   r<   create_socketr   r'   
setsockoptr   r   set_reuse_addrbind_server_socketr%   r    r!   server_nameactive_channelsaccept_connections)
r;   r+   r,   r-   r.   r   r   r   r   r0   s
             r4   r<   zBaseWSGIServer.__init__   s    ;##C A A 3!//$'$;$;&)&?&? # A A!=={{K ; Czz!}H qk &s+/1J''(8(89)  ))$3)?=t{{DMM:{{foo-&&|[!D##%373C3C3E0T0??!##% r6   c                     t         r9   NotImplementedErrorrQ   s    r4   ri   z!BaseWSGIServer.bind_server_socket       !!r6   c                     t         r9   rn   rQ   s    r4   r%   zBaseWSGIServer.getsockname   rp   r6   c                 p    d| _         | j                  j                  | j                  j                         y )NT)	acceptingr   r   r   backlogrQ   s    r4   rl   z!BaseWSGIServer.accept_connections  s%    488++,r6   c                 :    | j                   j                  |       y r9   )r:   add_task)r;   tasks     r4   rv   zBaseWSGIServer.add_task  s    %%d+r6   c                 \   t        j                          }|| j                  k\  r/|| j                  j                  z   | _        | j	                  |       | j
                  r| j                  s[t        | j                        | j                  j                  k\  r/d| _        | j                  j                  d       | j                   S | j                  rNt        | j                        | j                  j                  k  r"d| _        | j                  j                  d       | j                   S y)NTzXtotal open connections reached the connection limit, no longer accepting new connectionsFzJtotal open connections dropped below the connection limit, listening again)timenext_channel_cleanupr   cleanup_intervalmaintenancers   in_connection_overflowr(   _mapconnection_limitra   warninginfo)r;   nows     r4   readablezBaseWSGIServer.readable  s    iik$+++(+dhh.G.G(GD%S!>>//		Ndhh&?&??.2+##: 2222 ++		NTXX%>%>>.3+  & 2222r6   c                      y)NFr   rQ   s    r4   writablezBaseWSGIServer.writable$  s    r6   c                      y r9   r   rQ   s    r4   handle_readzBaseWSGIServer.handle_read'      r6   c                      y r9   r   rQ   s    r4   handle_connectzBaseWSGIServer.handle_connect*  r   r6   c                 R   	 | j                         }|y |\  }}| j                  |       | j                  |      }| j                  | ||| j                  | j                         y # t        $ r6 | j                  j                  r| j
                  j                  dd       Y y w xY w)Nz"server accept() threw an exceptionT)exc_inforb   )
acceptset_socket_optionsOSErrorr   log_socket_errorsra   r   fix_addrchannel_classr~   )r;   vconnaddrs       r4   handle_acceptzBaseWSGIServer.handle_accept-  s    	AyJD$##D) }}T"4tTXX499E  	 xx))##$HSW#X	s   A' A' '<B&%B&c                    	 | j                   j                  | j                  j                  | j                  | j                  j
                         y # t        t        f$ r | j                  j                          Y y w xY wrG   )
rJ   rK   r   rL   r~   rM   rN   rO   r:   rT   rQ   s    r4   rR   zBaseWSGIServer.runC  sh    	,MM66II33  
 -. 	,  ))+	,s   AA )A?>A?c                 8    | j                   j                          y r9   )r   pull_triggerrQ   s    r4   r   zBaseWSGIServer.pull_triggerM  s    !!#r6   c                      y r9   r   )r;   r   s     r4   r   z!BaseWSGIServer.set_socket_optionsP  r   r6   c                     |S r9   r   r;   r   s     r4   r   zBaseWSGIServer.fix_addrS  s    r6   c                     || j                   j                  z
  }| j                  j                         D ]&  }|j                  r|j
                  |k  s d|_        ( y)z
        Closes channels that have not had any activity in a while.

        The timeout is configured through adj.channel_timeout (seconds).
        TN)r   channel_timeoutrk   valuesrequestslast_activity
will_close)r;   r   cutoffchannels       r4   r|   zBaseWSGIServer.maintenanceV  sT     txx///++224 	*G$$'*?*?&*H%)"	*r6   c                 n    | j                  |j                  | j                  | j                               y r9   )r)   rB   r    r!   )r;   rC   s     r4   rE   zBaseWSGIServer.print_listena  s'    j''(;(;T=P=PQRr6   c                 t    | j                   j                          t        j                  j                  |       S r9   )r   rP   r   r   rQ   s    r4   rP   zBaseWSGIServer.closed  s)    ##))$//r6   )NTNNNNT)rV   rW   rX   r   r   rz   r   	socketmodr   rJ   r}   r<   ri   r%   rl   rv   r   r   r   r   r   rR   r   r   r   r|   rE   rP   r   r6   r4   rZ   rZ      s    MIH"
 ?&B""-,8F,,$	*S0r6   rZ   c                       e Zd Zd Zd Zd Zy)r   c                 H    | j                   \  }}}}| j                  |       y r9   )r   bind)r;   _sockaddrs      r4   ri   z TcpWSGIServer.bind_server_socketj  s     "mmAq(		(r6   c                     | j                   j                  | j                  j                         | j                   j                  | j                   j
                  z        S r9   )r   getnameinfor   r%   NI_NUMERICHOSTNI_NUMERICSERVrQ   s    r4   r%   zTcpWSGIServer.getsocknamen  sE    ~~))KK##%NN))DNN,I,II
 	
r6   c                 h    | j                   j                  D ]  \  }}}|j                  |||        y r9   )r   socket_optionsrg   )r;   r   leveloptnamevalues        r4   r   z TcpWSGIServer.set_socket_optionsu  s2    %)XX%<%< 	3!E7EOOE7E2	3r6   N)rV   rW   rX   ri   r%   r   r   r6   r4   r   r   i  s    
3r6   r   r   c                   >     e Zd Z	 	 	 	 	 	 d fd	Zd Zd Zd Z xZS )r   c           
      |    |"t         j                  t         j                  d d f}t        	|   |f||||||d| y )N)r,   r-   r.   r   r   r   )r   r   r   superr<   )
r;   r+   r,   r-   r.   r   r   r   r0   	__class__s
            r4   r<   zUnixWSGIServer.__init__}  sT     "NNF,>,>dKG	%!	 	r6   c                 p   t        | j                  j                         | j                  | j                  j                         t        j
                  j                  | j                  j                        r?t	        j                  | j                  j                  | j                  j                         y y r9   )	r	   r   r   r   ospathexistschmodunix_socket_permsrQ   s    r4   ri   z!UnixWSGIServer.bind_server_socket  sk     4 45IIdhh**+ww~~dhh223--txx/I/IJ 4r6   c                 :    d| j                   j                         fS )Nunix)r   r%   rQ   s    r4   r%   zUnixWSGIServer.getsockname  s    DKK33566r6   c                      y)N)	localhostNr   r   s     r4   r   zUnixWSGIServer.fix_addr  s    &r6   )NTNNNN)rV   rW   rX   r<   ri   r%   r   __classcell__)r   s   @r4   r   r   |  s,     	2	K	7	'r6   r   )NTNN)r   os.pathr   ry   waitressr   waitress.adjustmentsr   waitress.channelr   waitress.compatr   r   waitress.taskr   waitress.utilitiesr	    r   proxy_headersr   r5   r*   r   rZ   r   r   r   
WSGIServerr   r6   r4   <module>r      s    
     , ( 5 0 2  3
 	
eOV&& &&Rs0Y)) s0l3N 3" 69$' $'P 
r6   