
    nf2                         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m	Z	m
Z
 d dlmZmZ d dlmZ dZ ej        d          Z ej        e          Z G d d	          Z G d
 de j                  Zd Zd Zd Zd Z G d d          ZdS )    N)TOKEN_RE)ConfigurationProblemInvalidHeaderInvalidHeaderName)SERVER_SOFTWARESERVER)utili?z[ \t\x21-\x7e\x80-\xff]*c                       e Zd ZddZd ZdS )FileWrapper    c                 ^    || _         || _        t          |d          r|j        | _        d S d S )Nclose)filelikeblksizehasattrr   )selfr   r   s      Q/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/gunicorn/http/wsgi.py__init__zFileWrapper.__init__   s9     8W%% 	(!DJJJ	( 	(    c                 V    | j                             | j                  }|r|S t          N)r   readr   
IndexError)r   keydatas      r   __getitem__zFileWrapper.__getitem__#   s,    }!!$,// 	Kr   N)r   )__name__
__module____qualname__r   r    r   r   r   r      s7        ( ( ( (    r   r   c                       e Zd Zd Zd ZdS )WSGIErrorsWrapperc                 $   t          j        d          }|j        }g | _        |j        dk    r.| j                            t          j                   |dd          }|D ]1}t          |d          r| j                            |j	                   2d S )Nzgunicorn.error-   stream)
logging	getLoggerhandlersstreamserrorlogappendsysstderrr   r&   )r   cfgr+   r)   hs        r   r   zWSGIErrorsWrapper.__init__,   s     $%566$<3L
+++|H 	. 	.Aq(## .##AH---	. 	.r   c                     | j         D ]e}	 |                    |           n8# t          $ r+ |                    |                    d                     Y nw xY w|                                 fd S )NzUTF-8)r*   writeUnicodeErrorencodeflush)r   r   r&   s      r   r2   zWSGIErrorsWrapper.write<   s    l 	 	F3T"""" 3 3 3T[[11222223LLNNNN	 	s   !2AAN)r   r   r   r   r2   r    r   r   r"   r"   *   s2        . . .     r   r"   c           	      X    t          |           dd| j        dk    dt          dt          dS )Nr%   r   Fr%   T)zwsgi.errorszwsgi.versionzwsgi.multithreadzwsgi.multiprocesszwsgi.run_oncezwsgi.file_wrapperzwsgi.input_terminatedr   )r"   workersr   r   )r/   s    r   base_environr9   E   s7    (--!!kAo(!%*	 	 	r   c                     t          |          }|                    | j        || j        | j        | j        dd                    d | j        D                       z  d           |S )NzHTTP/%s.c                 ,    g | ]}t          |          S r    )str).0vs     r   
<listcomp>z#default_environ.<locals>.<listcomp>Z   s    0M0M0MAQ0M0M0Mr   )z
wsgi.inputzgunicorn.socketREQUEST_METHODQUERY_STRINGRAW_URISERVER_PROTOCOL)r9   updatebodymethodqueryurijoinversion)reqsockr/   envs       r   default_environrO   R   sr    
s

CJJh*	7$sxx0M0M0M0M0M'N'NN     Jr   c                     | j         }|si S |d         |d         t          |d                   |d         t          |d                   dS )Nproxy_protocolclient_addrclient_port
proxy_addr
proxy_port)PROXY_PROTOCOLREMOTE_ADDRREMOTE_PORT
PROXY_ADDR
PROXY_PORT)proxy_protocol_infor=   )rL   infos     r   proxy_environr]   _   sa    "D 	 /0M*4.//<($|,--  r   c                    t          | ||          }t          | ||          }d }t          j                            dd          }| j        D ]\  }	}
|	dk    r.|
                                dk    r|                    d           n*|	dk    r|
}n!|	dk    r|
}n|	dk    r|
|d<   W|	d	k    r|
|d
<   cd|	                    dd          z   }||v r||         d|
}
|
||<   | j	        |d<   t          |t                    r||d<   nPt          |t                    r|                                |d<   n#|d         |d<   t          |d                   |d<   t          |t                    r|                    d          }t          |          dk    r|r|                    d          }t          |          dk    rW| j	        dk    r|                    d           nL| j	        dk    r|                    d           n+|                    d           n|                    d           |d         |d<   t          |d                   |d<   | j        }|rA|                    |          st'          d|d|          |t          |          d          }t)          j        |          |d<   ||d<   |                    t/          |                      ||fS )NSCRIPT_NAME EXPECTz100-continues   HTTP/1.1 100 Continue

HOSTzCONTENT-TYPECONTENT_TYPEzCONTENT-LENGTHCONTENT_LENGTHHTTP_r$   _,zwsgi.url_schemerW   r   r%   rX   :httpP   httpsi  SERVER_NAMESERVER_PORTzRequest path z! does not start with SCRIPT_NAME 	PATH_INFO)ResponserO   osenvirongetheaderslowersendreplacescheme
isinstancer=   bytesdecodesplitlenr,   path
startswithr   r	   unquote_to_wsgi_strrE   r]   )rL   rM   clientserverr/   resprq   hostscript_namehdr_name	hdr_valuer   	path_infos                r   creater   n   s7   Cs##D c4--G D*..33K  #{ ! !)x  N22		:;;;DD&&#KK''&/GN#)))(1G$% ((c222'>>#*3<<<;I  "%G &# 0!'	FE	"	" 0!'!'!$VAY &# "c""v;;! "Cv;;!##zV++b))))w..c****b))) b!!!#AYGM ^^GM I 1##K00 	*&&KK)* * * c+..//0	3I>>GK(GM NN=%%&&&=r   c                   ^    e Zd Zd Zd 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S )ro   c                     || _         || _        t          | _        d | _        d| _        d| _        g | _        d| _        d | _	        d| _
        d| _        || _        d S )NFr   )rL   rM   r   rK   statuschunked
must_closers   headers_sentresponse_lengthsentupgrader/   )r   rL   rM   r/   s       r   r   zResponse.__init__   s\    	!#	r   c                     d| _         d S )NT)r   r   s    r   force_closezResponse.force_close   s    r   c                     | j         s| j                                        rdS | j        | j        rdS | j        j        dk    rdS | j        dk     s	| j        dv rdS dS )NTFHEAD      i0  )r   rL   should_closer   r   rG   status_coder   s    r   r   zResponse.should_close   st    ? 	dh3355 	4+t|+58?f$$5c!!T%5%C%C5tr   Nc                    |rA	 | j         r/| j        r(t          j        |d         |d         |d                    d }n# d }w xY w| j         t	          d          || _         	 t          | j                                         d                   | _        n# t          $ r
 d | _        Y nw xY w| 	                    |           | 
                                | _        | j        S )Nr   r%      zResponse headers already set!)r   r   r	   reraiseAssertionErrorintr{   r   
ValueErrorprocess_headers
is_chunkedr   r2   )r   r   rs   exc_infos       r   start_responsezResponse.start_response   s     	B ; H4#4 HL!hqk8A;GGG4[$ !@AAA
	$"4;#4#4#6#6q#9::D 	$ 	$ 	$#D	$ 	W%%%((zs   6= A"1B B('B(c                    |D ]|\  }}t          |t                    st          d|z            t          j        |          st          d|z            t          |t                    st          d|z            t                              |          st          d|z            |                    d          }|	                                }|dk    rt          |          | _        nvt          j        |          rb|dk    r |	                                dk    rd| _        n:|dk    r4|	                                dk    r| j                            ||f           `| j                            ||f           ~d S )	Nz%r is not a stringz%rz 	zcontent-length
connectionr   T	websocket)rx   r=   	TypeErrorr   	fullmatchr   HEADER_VALUE_REr   striprt   r   r   r	   
is_hoppishr   rs   r,   )r   rs   namevaluelnames        r   r   zResponse.process_headers   s   " 	/ 	/KD%dC(( = 4t ;<<<%d++ 5't444eS)) > 4u <===",,U33 2#D5L111 KK&&EJJLLE((('*5zz$$&& 
L(({{}}	11'+i''{{}}33++T5M::: Lu....;	/ 	/r   c                 v    | j         dS | j        j        dk    rdS | j        j        dk    rdS | j        dv rdS dS )NFr7   r   r   T)r   rL   rK   rG   r   r   s    r   r   zResponse.is_chunked  sU     +5X''5X_&&5++ 5tr   c                 ,   | j         rd}n|                                 rd}nd}d| j        j        d         d| j        j        d         d| j        d	d
| j        z  dt          j                    z  d|z  g}| j        r|                    d           |S )Nr   r   z
keep-alivezHTTP/r   r;   r%    
zServer: %s
z
Date: %s
zConnection: %s
zTransfer-Encoding: chunked
)	r   r   rL   rK   r   r	   	http_dater   r,   )r   r   rs   s      r   default_headerszResponse.default_headers/  s    < 	&"JJ   	& JJ%J $(8#3A#6#6#6#'8#3A#6#6#6Et|+T^--- :-
 < 	=NN;<<<r   c                     | j         rd S |                                 }|                    d | j        D                        dd                    |          z  }t          j        | j        t          j        |d                     d| _         d S )Nc                 $    g | ]\  }}|d |dS )z: r   r    )r>   kr?   s      r   r@   z)Response.send_headers.<locals>.<listcomp>G  s)    FFFAqqq!!!,FFFr   z%s
r`   zlatin-1T)	r   r   extendrs   rJ   r	   r2   rM   to_bytestring)r   tosend
header_strs      r   send_headerszResponse.send_headersC  s     	F%%''FFFFFGGG/

49d0YGGHHH r   c                    |                                   t          |t                    st          d|z            t	          |          }|}| j        ?| j        | j        k    rd S t          | j        | j        z
  |          }||k     r
|d |         }| j        r|dk    rd S | xj        |z  c_        t          j
        | j        || j                   d S )Nz%r is not a byter   )r   rx   ry   r   r|   r   r   minr   r	   r2   rM   )r   argarglenr   s       r   r2   zResponse.writeM  s    #u%% 	6.4555S+yD000-	96BBF'6'l < 	FaKKF		V		
49c4<00000r   c                     | j         j        duS )NF)r/   sendfiler   s    r   can_sendfilezResponse.can_sendfiled  s    x --r   c                 *   | j         j        s|                                 sdS t          j        |j                  sdS |j                                        }	 t          j        |dt          j	                  }| j
        t          j        |          j        }||z
  }n| j
        }n# t          t          j        f$ r Y dS w xY w|                                  |                                 r2d|z  }| j                            |                    d                     |dk    r"| j                            |j        ||           |                                 r| j                            d           t          j        ||t          j                   dS )NFr   z%X
zutf-8)offsetcounts   
T)r/   is_sslr   r	   
has_filenor   filenorp   lseekSEEK_CURr   fstatst_sizeOSErrorioUnsupportedOperationr   r   rM   sendallr4   r   SEEK_SET)r   respiterr   r   filesizenbytes
chunk_sizes          r   r   zResponse.sendfileg  s   8? 	$"3"3"5"5 	5x011 	5"))++	Xfa55F#+8F++3!F*-01 	 	 	55	 	?? 	:!F*JIj//88999A::Ix0vNNN?? 	'Ig&&&
---ts   AB& &C ?C c                 h    |                      |          s|D ]}|                     |           d S d S r   )r   r2   )r   r   items      r   
write_filezResponse.write_file  sN    }}X&& 	!  ! !

4    	! 	!! !r   c                     | j         s|                                  | j        rt          j        | j        d           d S d S )Nr   )r   r   r   r	   write_chunkrM   r   s    r   r   zResponse.close  sN      	 < 	-TY,,,,,	- 	-r   r   )r   r   r   r   r   r   r   r   r   r   r   r2   r   r   r   r   r    r   r   ro   ro      s            	 	 	   0/ / /@  "  (! ! !1 1 1.. . .  B! ! !
- - - - -r   ro   )r   r'   rp   rer-   gunicorn.http.messager   gunicorn.http.errorsr   r   r   gunicornr   r   r	   BLKSIZEcompiler   r(   r   logr   	RawIOBaser"   r9   rO   r]   r   ro   r    r   r   <module>r      s  
 
			  				 				 



 * * * * * * W W W W W W W W W W , , , , , , , ,        "*899g!!              6
 
 

 
 
  W W WtI- I- I- I- I- I- I- I- I- I-r   