
    D_	h5                     $   S SK r S SKr S SKrS SKrS SKJr  S SKJr  S SKJ	r	  S SK
JrJr  S SKJr  S SKJr  SS	KJr  SS
KJr      SS jr " S S5      r " S S\R.                  5      r " S S\5      r\" \S5      (       a   " S S\5      r\rg)    N)trigger)Adjustments)HTTPChannel)IPPROTO_IPV6IPV6_V6ONLY)ThreadedTaskDispatcher)cleanup_unix_socket   )	wasyncore)proxy_headers_middlewarec                    U c  [        S5      e[        S0 UD6nUc  0 nUnUc%  [        5       nUR                  UR                  5        UR
                  (       aF  [        [        S5      (       a1  [        R                  [        R                  SS4n[        U UUUUUUS9$ / n	Sn
UR                  (       dI  UR                   H9  n[        U UUUUUUS9n
U	R                  U
R                  U
R                   45        M;     UR                   GH  nUR"                  UR$                  UR&                  UR)                  5       4nUR"                  [        R*                  :X  d  UR"                  [        R,                  :X  a9  [        U UUUUUSUS9n
U	R                  U
R                  U
R                   45        M  [        [        S5      (       d  M  UR"                  [        R                  :X  d  M  [        U UUUUUSUS9n
U	R                  U
R                  U
R                   45        GM     [/        U	5      S:X  a  U
$ U
R0                  n[3        XXU5      $ )	zM
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                M/var/www/html/fileupload/venv/lib/python3.13/site-packages/waitress/server.pycreate_serverr5      s>    <
 	
 

C
{J+-
##CKK0
7695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'7XNN    c                   >    \ rS rSr\r     SS jrS rS rS r	Sr
g)	r*      Nc                 @    X l         Xl        X0l        X@l        XPl        g N)r   r,   r1   task_dispatcherr)   )selfr,   r   r1   r   r)   s         r4   __init__MultiSocketServer.__init__   s      0) r6   c                     U R                    HA  n[        U5      nSUS   ;   a  SUS    S3US'   U R                  UR                  " U6 5        MC     g )N:r   [])r1   listr)   format)r<   
format_strls      r4   print_listenMultiSocketServer.print_listen   sR    &&AQAad{1Q4&{!MM*++Q/0 'r6   c                      U R                   R                  U R                  R                  U R                  U R                  R
                  S9  g ! [        [        4 a    U R                  5          g f = fN)timeoutr,   use_poll)	asyncoreloopr   asyncore_loop_timeoutr,   asyncore_use_poll
SystemExitKeyboardInterruptcloser<   s    r4   runMultiSocketServer.run   s_    	MM66HH33  
 -. 	JJL	s   AA  A32A3c                 x    U R                   R                  5         [        R                  " U R                  5        g r:   )r;   shutdownr   	close_allr,   rT   s    r4   rS   MultiSocketServer.close   s&    %%'DHH%r6   )r   r1   r)   r,   r;   )NNNNN)__name__
__module____qualname____firstlineno__r   rM   r=   rG   rU   rS   __static_attributes__r   r6   r4   r*   r*      s,    H !1&r6   r*   c                       \ rS rSr\rSr\r\	r
Sr       SS jrS rS rS rS	 rS
 rS rS rS rS rS rS rS rS rS rS rS rSrg)BaseWSGIServer   r   FNc	           
      "   Uc  [        S0 U	D6nUR                  (       d  UR                  (       aK  [        UUR                  UR                  UR
                  UR                  UR                  U R                  S9nUc  0 nUc  UR                  S   nXpl	        US   U l
        US   U l        Xl        X`l        [        R                  " U5      U l        Uc/  [        5       nUR!                  U R                  R"                  5        XPl        U R&                  R(                  R+                  XUS9  Uci  U R-                  U R                  U R                  5        U R                  [.        R0                  :X  a%  U R.                  R3                  [4        [6        S5        U R9                  5         U(       a  U R;                  5         U R=                  5       u  U l        U l         URB                  U l!        0 U l"        U(       a  U RG                  5         g g )N)trusted_proxytrusted_proxy_counttrusted_proxy_headersclear_untrustedlog_untrustedloggerr   r
   r,   r   )$r   rd   clear_untrusted_proxy_headersr   re   rf   log_untrusted_proxy_headersri   r   r   r"   socktyper+   r   r   r   r   r   r;   rM   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=   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                     [         er:   NotImplementedErrorrT   s    r4   rq   !BaseWSGIServer.bind_server_socket       !!r6   c                     [         er:   rw   rT   s    r4   r%   BaseWSGIServer.getsockname   rz   r6   c                 p    SU l         U R                  R                  U R                  R                  5        g )NT)	acceptingr   r   r   backlogrT   s    r4   rt   !BaseWSGIServer.accept_connections  s%    488++,r6   c                 :    U R                   R                  U5        g r:   )r;   add_task)r<   tasks     r4   r   BaseWSGIServer.add_task  s    %%d+r6   c                 n   [         R                   " 5       nXR                  :  a.  XR                  R                  -   U l        U R	                  U5        U R
                  (       a  U R                  (       dP  [        U R                  5      U R                  R                  :  a#  SU l        U R                  R                  S5        O`U R                  (       aO  [        U R                  5      U R                  R                  :  a"  SU l        U R                  R                  S5        U R                  (       + $ g)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maintenancer~   in_connection_overflowr(   _mapconnection_limitri   warninginfo)r<   nows     r4   readableBaseWSGIServer.readable  s    iik+++(+hh.G.G(GD%S!>>//		Ndhh&?&??.2+##:
 ++		NTXX%>%>>.3+  & 2222r6   c                     g)NFr   rT   s    r4   writableBaseWSGIServer.writable$  s    r6   c                     g r:   r   rT   s    r4   handle_readBaseWSGIServer.handle_read'      r6   c                     g r:   r   rT   s    r4   handle_connectBaseWSGIServer.handle_connect*  r   r6   c                 N    U R                  5       nUc  g Uu  p#U R                  U5        U R                  U5      nU R                  XX0R                  U R                  S9  g ! [         a8    U R                  R                  (       a  U R
                  R                  SSS9   g f = f)Nz"server accept() threw an exceptionT)exc_inforj   )
acceptset_socket_optionsOSErrorr   log_socket_errorsri   r   fix_addrchannel_classr   )r<   vconnaddrs       r4   handle_acceptBaseWSGIServer.handle_accept-  s    	AyJD##D) }}T"4tXX499E  	 xx))##$HSW#X	s   A" A" "?B$#B$c                      U R                   R                  U R                  R                  U R                  U R                  R
                  S9  g ! [        [        4 a    U R                  R                  5          g f = frJ   )
rM   rN   r   rO   r   rP   rQ   rR   r;   rX   rT   s    r4   rU   BaseWSGIServer.runC  sh    	,MM66II33  
 -. 	,  ))+	,s   AA *A=<A=c                 8    U R                   R                  5         g r:   )r   pull_triggerrT   s    r4   r   BaseWSGIServer.pull_triggerM  s    !!#r6   c                     g r:   r   )r<   r   s     r4   r   !BaseWSGIServer.set_socket_optionsP  r   r6   c                     U$ r:   r   r<   r   s     r4   r   BaseWSGIServer.fix_addrS  s    r6   c                     XR                   R                  -
  nU R                  R                  5        H/  nUR                  (       a  M  UR
                  U:  d  M(  SUl        M1     g)z~
Closes channels that have not had any activity in a while.

The timeout is configured through adj.channel_timeout (seconds).
TN)r   channel_timeoutrs   valuesrequestslast_activity
will_close)r<   r   cutoffchannels       r4   r   BaseWSGIServer.maintenanceV  sP     xx///++224G$$$'*?*?&*H%)" 5r6   c                 n    U R                  UR                  U R                  U R                  5      5        g r:   )r)   rD   r    r!   )r<   rE   s     r4   rG   BaseWSGIServer.print_listena  s'    j''(;(;T=P=PQRr6   c                 t    U R                   R                  5         [        R                  R                  U 5      $ r:   )r   rS   r   r   rT   s    r4   rS   BaseWSGIServer.closed  s)    ##))$//r6   )r~   rs   r   r+   r    r!   r"   r   r   rr   r   rm   r;   r   )NTNNNNT)r[   r\   r]   r^   r   r   r   r   	socketmodr   rM   r   r=   rq   r%   rt   r   r   r   r   r   r   rU   r   r   r   r   rG   rS   r_   r   r6   r4   ra   ra      s    MIH"
 ?&B""-,8F,,$	*S0r6   ra   c                   &    \ rS rSrS rS rS rSrg)r   ii  c                 F    U R                   u      pU R                  U5        g r:   )r   bind)r<   _sockaddrs      r4   rq    TcpWSGIServer.bind_server_socketj  s    "mmAq		(r6   c                     U R                   R                  U R                  R                  5       U R                   R                  U R                   R
                  -  5      $ r:   )r   getnameinfor   r%   NI_NUMERICHOSTNI_NUMERICSERVrT   s    r4   r%   TcpWSGIServer.getsocknamen  sE    ~~))KK##%NN))DNN,I,II
 	
r6   c                 h    U R                   R                   H  u  p#nUR                  X#U5        M     g r:   )r   socket_optionsro   )r<   r   leveloptnamevalues        r4   r    TcpWSGIServer.set_socket_optionsu  s)    %)XX%<%<!EEOOEE2 &=r6   r   N)r[   r\   r]   r^   rq   r%   r   r_   r   r6   r4   r   r   i  s    
3r6   r   r   c                   J   ^  \ rS rSr      SU 4S jjrS rS rS rSrU =r	$ )r   i|  c           
         > Uc"  [         R                  [         R                  S S 4n[        T	U ]  " U4UUUUUUS.UD6  g )N)r,   r-   r.   r   r   r   )r   r   r   superr=   )
r<   r+   r,   r-   r.   r   r   r   r0   	__class__s
            r4   r=   UnixWSGIServer.__init__}  sT     "NNF,>,>dKG	%!	 	r6   c                 |   [        U R                  R                  5        U R                  U R                  R                  5        [        R
                  R                  U R                  R                  5      (       a@  [        R                  " U R                  R                  U R                  R                  5        g g r:   )	r	   r   r   r   ospathexistschmodunix_socket_permsrT   s    r4   rq   !UnixWSGIServer.bind_server_socket  sn     4 45IIdhh**+ww~~dhh2233--txx/I/IJ 4r6   c                 :    SU R                   R                  5       4$ )Nunix)r   r%   rT   s    r4   r%   UnixWSGIServer.getsockname  s    DKK33566r6   c                     g)N)	localhostNr   r   s     r4   r   UnixWSGIServer.fix_addr  s    &r6   r   )NTNNNN)
r[   r\   r]   r^   r=   rq   r%   r   r_   __classcell__)r   s   @r4   r   r   |  s1     	2	K	7	' 	'r6   r   )NTNN)r   os.pathr   r   waitressr   waitress.adjustmentsr   waitress.channelr   waitress.compatr   r   waitress.taskr   waitress.utilitiesr	    r   proxy_headersr   r5   r*   r   ra   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   