
    TfJ$                         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 d dlmZmZ d dlmZ d d	lmZ  G d
 de          Z dS )    N)datetime)randint)SSLError)util)
ForbiddenProxyRequestInvalidHeaderInvalidHeaderNameInvalidHTTPVersionInvalidProxyLineInvalidRequestLineInvalidRequestMethodInvalidSchemeHeadersLimitRequestHeadersLimitRequestLine)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     G/var/www/html/env/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&   r0   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!   r2   s    r   __str__zWorker.__str__B   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)r1   notifyr6   s    r   r9   zWorker.notifyE   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.
        )NotImplementedErrorr6   s    r   runz
Worker.runM   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   )r0   infor/   oswritePIPEr&   
worker_inttimesleepr-   exit)fnamer2   s    r   changedz$Worker.init_process.<locals>.changedz   sm    =uEEE"
1t,,,##D)))
3r   )extra_filescallbackTN)r&   envitemsrD   environr   set_owner_processuidgidr>   seedpiperF   set_non_blockingclose_on_execr#   r1   filenowait_fdsr0   init_signalsreloadr   reload_enginereload_extra_filesr)   	load_wsgistartpost_worker_initr'   r<   )r2   kvpsrL   reloader_clss   `      r   init_processzWorker.init_processU   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\   r0   	exceptionr-   exc_infor)   add_extra_filefilenameioStringIO	tracebackprint_tbr   make_fail_appgetvalue)r2   e_exc_valexc_tb	tb_strings         r   r_   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_fdr@   )SIGNALSr   SIG_DFLSIGQUIThandle_quitSIGTERMhandle_exitSIGINTSIGWINCHhandle_winchSIGUSR1handle_usr1SIGABRThandle_abortsiginterrupthasattrr|   rF   )r2   re   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)r0   reopen_filesr2   sigframes      r   r   zWorker.handle_usr1   s    r   c                     d| _         d S )NF)r/   r   s      r   r   zWorker.handle_exit   s    


r   c                     d| _         | j                            |            t          j        d           t          j        d           d S )NFrB   r   )r/   r&   rG   rH   rI   r-   rJ   r   s      r   r   zWorker.handle_quit   s=    
D!!!
3r   c                 p    d| _         | j                            |            t          j        d           d S )NFr@   )r/   r&   worker_abortr-   rJ   r   s      r   r   zWorker.handle_abort   s0    
d###r   c                 8   t          j                    }|pd}t          |t          t          t
          t          t          t          t          t          t          t          t          f          rd}d}t          |t                    rdt          |          z  }nt          |t                    rdt          |          z  }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
  }
t-          ||| j                  }|d         |d<   t          |d                   |d<   t1          ||| j                  }|d||_        t5          |          |_        | j                            ||||
           	 t;          j        ||||           d S # t>          $ 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%s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)i  zInternal Server Errorr   REMOTE_ADDRr@   REMOTE_PORT zFailed to send error message.)!r   now
isinstancer   r   r
   r   r	   r   r   r   r   r   r   strr   r   r0   warningformatrl   r   r   r&   r   statuslenresponse_lengthaccessr   write_error	Exceptiondebug)r2   r   clientaddrexcrequest_start
status_intreasonmesgmsgrequest_timerQ   resps                r   handle_errorzWorker.handle_error   s    xc 4/@13 
   2	 J"F#122 !2SXX=C!566 !,s3xx7C!344 !2SXX=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   M1 1$NNc                 :    | j                             d           d S )Nzworker: SIGWINCH ignored.)r0   r   )r2   r   rK   s      r   r   zWorker.handle_winch  s    233333r   N)__name__
__module____qualname__splitr}   rF   r4   r7   r9   r<   rg   r_   r[   r   r   r   r   r   r    r   r   r   r      s        5;;==  G D" " ":( ( (  $ $ $9 9 9v  ./ / /(           
D< D< D<L4 4 4 4 4r   r   )!rp   rD   r   r-   rH   rr   r   randomr   sslr   gunicornr   gunicorn.http.errorsr   r   r	   r
   r   r   r   r   r   r   gunicorn.http.wsgir   r   gunicorn.reloaderr   gunicorn.workers.workertmpr   objectr   r   r   r   <module>r      s|   
			 				  



                                                     9 8 8 8 8 8 8 8 . . . . . . 0 0 0 0 0 0x4 x4 x4 x4 x4V x4 x4 x4 x4 x4r   