o
    sZŽh$  ã                   @   sž   d dl m Z  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 G dd	„ d	eƒZG d
d„ dejƒZdS )é    )ÚdatetimeN)Úhttp)Úwsgi)Úsock)Úutil)Úbasec                   @   s   e Zd ZdZdS )ÚStopWaitingz3 exception raised to stop waiting for a connection N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__© r   r   úD/var/www/auris/lib/python3.10/site-packages/gunicorn/workers/sync.pyr      s    r   c                   @   sL   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dS )Ú
SyncWorkerc                 C   s2   |  ¡ \}}| d¡ t |¡ |  |||¡ d S )Né   )ÚacceptÚsetblockingr   Zclose_on_execÚhandle)ÚselfÚlistenerÚclientÚaddrr   r   r   r      s   

zSyncWorker.acceptc              
   C   sÄ   z+|   ¡  t | jg g |¡}|d r)| jd |d v r$t | jd d¡ |d W S W d S  tya } z*|jd tj	krD| j
W  Y d }~S |jd tjkr\| jdk rZ| j
W  Y d }~S t‚‚ d }~ww )Nr   r   )ÚnotifyÚselectZwait_fdsÚPIPEÚosÚreadÚOSErrorÚargsÚerrnoZEINTRÚsocketsÚEBADFÚnrr   )r   ÚtimeoutÚretÚer   r   r   Úwait!   s$   
ý
€øzSyncWorker.waitc                 C   s$   | j t ¡ kr| j d| ¡ dS dS )Nz!Parent changed, shutting down: %sFT)Zppidr   ÚgetppidÚlogÚinfo)r   r   r   r   Úis_parent_alive4   s   zSyncWorker.is_parent_alivec              
   C   s¢   | j d }| jrO|  ¡  z|  |¡ W q ty1 } z|jtjtjtjfvr'‚ W Y d }~nd }~ww |  	¡ s8d S z|  
|¡ W n
 tyI   Y d S w | jsd S d S ©Nr   )r    Úaliver   r   r   r   ÚEAGAINÚECONNABORTEDÚEWOULDBLOCKr*   r&   r   )r   r#   r   r%   r   r   r   Úrun_for_one;   s,   

ÿþ€ÿÿèzSyncWorker.run_for_onec                 C   s¸   | j rZ|  ¡  z|  |¡}W n
 ty   Y d S w |d urO|D ]/}|| jd kr)qz|  |¡ W q tyN } z|jtjtj	tj
fvrD‚ W Y d }~qd }~ww |  ¡ sUd S | j sd S d S r+   )r,   r   r&   r   r   r   r   r   r-   r.   r/   r*   )r   r#   Úreadyr   r%   r   r   r   Úrun_for_multipleX   s0   ÿÿþ€ÿëzSyncWorker.run_for_multiplec                 C   sJ   | j pd}| jD ]}| d¡ qt| jƒdkr|  |¡ d S |  |¡ d S )Ng      à?r   r   )r#   r    r   Úlenr2   r0   )r   r#   Úsr   r   r   Úrunp   s   

zSyncWorker.runc              
   C   s<  d }zz!| j jrt || j ¡}t | j ||¡}t|ƒ}|  ||||¡ W nÂ tjj	y@ } z| j
 d|¡ W Y d }~n´d }~w tyX } z| j
 d|¡ W Y d }~n¤d }~w tjy‹ } z'|jd tjkrs| j
 d¡ | ¡  n| j
 d¡ |  ||||¡ W Y d }~nyd }~w tyÎ } z8|jtjtjtjfvr¤| j
 d¡ n |jtjkr±| j
 d¡ n|jtjkr¾| j
 d¡ n| j
 d	¡ W Y d }~n>d }~w tyç } z|  ||||¡ W Y d }~n-d }~ww W t |¡ d S W t |¡ d S W t |¡ d S W t |¡ d S W t |¡ d S W t |¡ d S t |¡ w )
Nz*Ignored premature client disconnection. %szClosing connection. %sr   zssl connection closedzError processing SSL request.z Socket error processing request.zIgnoring connection resetzIgnoring socket not connectedzIgnoring EPIPE)ÚcfgZis_sslr   Ússl_wrap_socketr   ZRequestParserÚnextÚhandle_requestÚerrorsZ
NoMoreDatar(   ÚdebugÚStopIterationÚsslÚSSLErrorr   ÚSSL_ERROR_EOFÚcloseÚhandle_errorr   r   ÚEPIPEÚ
ECONNRESETÚENOTCONNÚ	exceptionÚBaseExceptionr   )r   r   r   r   ÚreqÚparserr%   r   r   r   r      sZ   €€
€€€ÿêéë€ € þzSyncWorker.handlec                 C   s  i }d }zçzŒ| j  | |¡ t ¡ }t |||| ¡ | j ¡\}}| ¡  |  jd7  _| j| j	kr9| j
 d¡ d| _|  ||j¡}z5t||d ƒrN| |¡ n
|D ]}	| |	¡ qP| ¡  W t ¡ | }
| j
 ||||
¡ t|dƒru| ¡  nt ¡ | }
| j
 ||||
¡ t|dƒr| ¡  w w W n< ty¡   tjt ¡ Ž  Y n- tyÍ   |rÌ|jrÌ| j
 d¡ z| tj¡ | ¡  W tƒ ‚ tyË   Y tƒ ‚w ‚ w W z| j   | |||¡ W d S  tyë   | j
 d¡ Y d S w z| j   | |||¡ W w  ty   | j
 d¡ Y w w )Nr   z,Autorestarting worker after current request.Fzwsgi.file_wrapperr@   zError handling requestzException in post_request hook)!r6   Zpre_requestr   Únowr   ÚcreateÚgetsocknameZforce_closer"   Zmax_requestsr(   r)   r,   Zstart_responseÚ
isinstanceÚ
write_fileÚwriter@   ÚaccessÚhasattrr   r   ÚreraiseÚsysÚexc_infoÚ	ExceptionZheaders_sentrE   ÚshutdownÚsocketÚ	SHUT_RDWRr<   Zpost_request)r   r   rG   r   r   ÚenvironÚrespZrequest_startZrespiterÚitemZrequest_timer   r   r   r9   ¡   sr   

ÿ

€ý

ÿ€

þþõ€ÿþÿzSyncWorker.handle_requestN)r	   r
   r   r   r&   r*   r0   r2   r5   r   r9   r   r   r   r   r      s    "r   )r   r   r   r   rV   r=   rR   Zgunicornr   Zgunicorn.httpr   r   r   Zgunicorn.workersr   rT   r   ZWorkerr   r   r   r   r   Ú<module>   s   