
    $g#&                         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 d dlmZ d dl	m
Z
 d dlmZ d dlmZmZmZmZmZmZmZmZmZmZmZmZmZ d dlmZmZ d dlmZ d d	l m!Z!  G d
 d          Z"dS )    N)datetime)randint)SSLError)util)ForbiddenProxyRequestInvalidHeaderInvalidHeaderNameInvalidHTTPVersionInvalidProxyLineInvalidRequestLineInvalidRequestMethodInvalidSchemeHeadersLimitRequestHeadersLimitRequestLineUnsupportedTransferCodingConfigurationProblemObsoleteFolding)Responsedefault_environ)reloader_engines)	WorkerTmpc                       e Zd Zd d                                D             Zg 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 )Workerc                 >    g | ]}t          t          d |z            S )zSIG%s)getattrsignal).0xs     U/var/www/html/netbox-4.1.3/venv/lib/python3.11/site-packages/gunicorn/workers/base.py
<listcomp>zWorker.<listcomp>    s2       wvw{++       z+ABRT HUP QUIT INT TERM USR1 USR2 WINCH CHLDc                 f   || _         d| _        || _        || _        || _        || _        || _        d| _        d| _        d| _	        d| _
        |j        dk    r%t          d|j                  }|j        |z   | _        nt          j        | _        d| _        || _        t%          |          | _        dS )z        This is called pre-fork so it shouldn't do anything to the
        current process. If there's a need to make process wide
        changes you'll want to do that in ``self.init_process()``.
        z	[booting]FNr   T)agepidppidsocketsapptimeoutcfgbootedabortedreloadernrmax_requestsr   max_requests_jittersysmaxsizealivelogr   tmp)	selfr#   r%   r&   r'   r(   r)   r3   jitters	            r   __init__zWorker.__init__&   s     	aQ 788F # 06 9D #D
S>>r!   c                     d| j         z  S )Nz<Worker %s>)r$   r5   s    r   __str__zWorker.__str__C   s    tx''r!   c                 8    | j                                          dS )z        Your worker subclass must arrange to have this method called
        once every ``self.timeout`` seconds. If you fail in accomplishing
        this task, the master process will murder your workers.
        N)r4   notifyr9   s    r   r<   zWorker.notifyF   s     	r!   c                     t                      )z        This is the mainloop of a worker process. You should override
        this method in a subclass to provide the intended behaviour
        for your particular evil schemes.
        )NotImplementedErrorr9   s    r   runz
Worker.runN   s     "###r!   c                 &     j         j        r3 j         j                                        D ]\  }}|t          j        |<   t          j         j         j         j         j         j         j	                   t          j
                     t          j                     _         j        D ]*}t          j        |           t          j        |           + j        D ]}t          j        |           t          j         j                                                    j         j        d         gz    _         j                                                                            j         j        r8 fd}t,           j         j                 } | j         j        |           _                                           j        r j                                          j                                         d _                                          dS )z        If you override this method in a subclass, the last statement
        in the function should be to call this method with
        super().init_process() so that the ``run()`` loop is initiated.
        )
initgroupsr   c                    j                             d|            d_        t          j        j        d         d           j                                       t          j	        d           t          j        d           d S )NzWorker reloading: %s modifiedF      1皙?r   )r3   infor2   oswritePIPEr)   
worker_inttimesleepr0   exit)fnamer5   s    r   changedz$Worker.init_process.<locals>.changed{   sm    =uEEE"
1t,,,##D)))
3r!   )extra_filescallbackTN)r)   envitemsrG   environr   set_owner_processuidgidrA   seedpiperI   set_non_blockingclose_on_execr&   r4   filenowait_fdsr3   init_signalsreloadr   reload_enginereload_extra_filesr,   	load_wsgistartpost_worker_initr*   r?   )r5   kvpsrO   reloader_clss   `      r   init_processzWorker.init_processV   s    8< 	"**,, " "1 !
1tx|TX\*.(*=	? 	? 	? 	? 		 GII	 	" 	"A!!$$$q!!!!  	" 	"Aq!!!!48??,,---	!~5    8? 	;     ,DH,BCL(LTX5P29; ; ;DM 	= 	"M!!!!!$''' 




r!   c                    	 | j                                         | _        d S # t          $ r}| j        j        s | j                            |           	 t          j                    \  }}}| j	        
                    |j                   t          j                    }t          j        ||           t!          j        |                                          | _        ~n# ~w xY wY d }~d S d }~ww xY w)N)file)r'   wsgiSyntaxErrorr)   r_   r3   	exceptionr0   exc_infor,   add_extra_filefilenameioStringIO	tracebackprint_tbr   make_fail_appgetvalue)r5   e_exc_valexc_tb	tb_strings         r   rb   zWorker.load_wsgi   s    	DIII 	 	 	8? Hq!!!%(\^^"7F,,W-=>>>KMM	"6	:::: .y/A/A/C/CDD	FF



FFFFFF%	s-   " 
C1'C,B
C C, C##C,,C1c                    | j         D ]!}t          j        |t          j                   "t          j        t          j        | j                   t          j        t          j        | j                   t          j        t          j        | j                   t          j        t          j        | j	                   t          j        t          j
        | j                   t          j        t          j        | j                   t          j        t          j        d           t          j        t          j
        d           t          t          d          r!t          j        | j        d                    d S d S )NFset_wakeup_fdrC   )SIGNALSr   SIG_DFLSIGQUIThandle_quitSIGTERMhandle_exitSIGINTSIGWINCHhandle_winchSIGUSR1handle_usr1SIGABRThandle_abortsiginterrupthasattrr   rI   )r5   rh   s     r   r^   zWorker.init_signals   s    	- 	-AM!V^,,,,fnd&6777fnd&6777fmT%5666fot'8999fnd&6777fnd&7888 	FNE222FNE2226?++ 	/ 1.....	/ 	/r!   c                 8    | j                                          d S )N)r3   reopen_filesr5   sigframes      r   r   zWorker.handle_usr1   s    r!   c                     d| _         d S )NF)r2   r   s      r   r   zWorker.handle_exit   s    


r!   c                     d| _         | j                            |            t          j        d           t          j        d           d S )NFrE   r   )r2   r)   rJ   rK   rL   r0   rM   r   s      r   r   zWorker.handle_quit   s=    
D!!!
3r!   c                 p    d| _         | j                            |            t          j        d           d S )NFrC   )r2   r)   worker_abortr0   rM   r   s      r   r   zWorker.handle_abort   s0    
d###r!   c                 Z   t          j                    }|pd}t          |t          t          t
          t          t          t          t          t          t          t          t          t          t          t           f          rvd}d}t          |t                    rdt#          |          z  }nt          |t                    rdt#          |          z  }nt          |t
                    rdt#          |          z  }nt          |t                    rdt#          |          z  }d}nt          |t                    rdt#          |          z  }d	}n\t          |t                    rdt#          |          z  }n3t          |t          t          f          r,dt#          |          z  }|st%          |d
          r|j        }nt          |t                    rdt#          |          z  }nt          |t                    rd}dt#          |          z  }d}nt          |t                    rdt#          |          z  }not          |t                    rd}d}d}nSt          |t                    rdt#          |          z  }n+t          |t                     rd}dt#          |          z  }d}d}	| j                            |	                    |d         t#          |                               nQt%          |d          r!| j                            d|j                   n| j                            d           d	}d}d}|t          j                    |z
  }
t3          ||| j                  }|d         |d<   t#          |d                   |d<   t7          ||| j                  }|d||_        t;          |          |_        | j                            ||||
           	 tA          j!        ||||           d S # tD          $ r | j        #                    d           Y d S w xY w)N) i  zBad RequestzInvalid Request Line '%s'zInvalid Method '%s'zInvalid HTTP Version '%s'z%si  i  reqzRequest Header Fields Too LargezError parsing headers: '%s'i  z'%s'	ForbiddenzRequest forbiddeni  z%Invalid request from ip={ip}: {error}r   )iperrorurizError handling request %sz$Error handling request (no URI read)zInternal Server Errorr   REMOTE_ADDRrC   REMOTE_PORT zFailed to send error message.)$r   now
isinstancer   r   r
   r   r	   r   r   r   r   r   r   r   r   r   strr   r   r3   warningformatro   r   r   r)   r   statuslenresponse_lengthaccessr   write_error	Exceptiondebug)r5   r   clientaddrexcrequest_start
status_intreasonmesgmsgrequest_timerT   resps                r   handle_errorzWorker.handle_error   s    xc 4/@13 "; /
   ;	 J"F#122 #!2SXX=C!566 !!,s3xx7C!344 !2SXX=C!:;; !c#hh 

C!566 !c#hh 

C11 !c#hhC"3]!DEE !c#hh "wsE22 "'CC!122 !c#hhC!455 !:4s3xx? 

C!122 !C(C!677 	!$* 

C!566 !c#hhC** !$C( 
9CHSZZ47#c((ZCCDDDDsE"" K""#>HHHH""#IJJJJ,FD?#<>>M9L%c648<<G%)!WGM"%(a\\GM"C22D%/ZZ8DK#&t99D HOOD#w===	<VZ>>>>> 	< 	< 	<HNN:;;;;;;	<s   )P $P*)P*c                 :    | j                             d           d S )Nzworker: SIGWINCH ignored.)r3   r   )r5   r   rN   s      r   r   zWorker.handle_winch  s    233333r!   N)__name__
__module____qualname__splitr   rI   r7   r:   r<   r?   rj   rb   r^   r   r   r   r   r   r    r!   r   r   r      s        5;;==  G D" " ":( ( (  $ $ $9 9 9v  ./ / /(           
M< M< M<^4 4 4 4 4r!   r   )#rs   rG   r   r0   rK   ru   r   randomr   sslr   gunicornr   gunicorn.http.errorsr   r   r	   r
   r   r   r   r   r   r   r   r   r   gunicorn.http.wsgir   r   gunicorn.reloaderr   gunicorn.workers.workertmpr   r   r   r!   r   <module>r      s  
 
			 				  



                                                           9 8 8 8 8 8 8 8 . . . . . . 0 0 0 0 0 0A4 A4 A4 A4 A4 A4 A4 A4 A4 A4r!   