ó
ÓEÁ^c           @   s”  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 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 Z d Z e Z e 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 d d „  ƒ  YZ# d „  Z$ d „  Z% d „  Z& d a' d „  Z( d a* d a+ d d d „  ƒ  YZ, e, Z- d „  Z. d „  Z/ e0 d k re/ ƒ  n  d S(   iÿÿÿÿN(   t   StringIOi   i    i   i   i   i   i   i   i   i	   i
   i   s
   fcgi.errorc         C   s.   t  d d ƒ } | j |  d ƒ | j ƒ  d S(   s   Append a string to /tmp/errs   /tmp/errs   a+s   
N(   t   opent   writet   close(   t   msgt   errf(    (    sN   /var/www/vhosts/web2926.cweb01.gamingweb.de/cloud.mctzock.de/test/fcgi/fcgi.pyt   errorV   s    t   recordc           B   s)   e  Z d  Z d „  Z d „  Z d „  Z RS(   s"   Class representing FastCGI recordsc         C   s(   t  |  _ t |  _ t |  _ d |  _ d  S(   Nt    (   t   FCGI_VERSION_1t   versiont   FCGI_UNKNOWN_TYPEt   recTypet   FCGI_NULL_REQUEST_IDt   reqIdt   content(   t   self(    (    sN   /var/www/vhosts/web2926.cweb01.gamingweb.de/cloud.mctzock.de/test/fcgi/fcgi.pyt   __init__`   s    			c         C   s3  t  t | j d ƒ ƒ } | d | d | d |  _ |  _ } | d d >| d | d d >| d |  _ } d	 |  _ xE t |  j ƒ | k  r¾ | j | t |  j ƒ ƒ } |  j | |  _ qz W| d k rÝ | j | ƒ } n  |  j } |  j t k r0t | d ƒ d >t | d ƒ |  _	 t | d ƒ |  _
 nÿ |  j t k rUt | d ƒ |  _ nÚ |  j t k ss|  j t k rÃi  |  _ d } xª | t | ƒ k  r¿t | | ƒ \ }	 }
 } |
 |  j |	 <q…Wnl |  j t k r/t  t | d d !ƒ } | d d
 >| d d >| d d >| d |  _ t | d ƒ |  _ n  d  S(   Ni   i    i   i   i   i   i   i   R   i   i   (   t   mapt   ordt   recvR
   R   R   R   t   lent   FCGI_BEGIN_REQUESTt   rolet   flagsR   t   unknownTypet   FCGI_GET_VALUESt   FCGI_PARAMSt   valuest   readPairt   FCGI_END_REQUESTt	   appStatust   protocolStatus(   R   t   sockt   st   paddingLengtht   contentLengtht   datat   paddingt   ct   post   namet   valuet   b(    (    sN   /var/www/vhosts/web2926.cweb01.gamingweb.de/cloud.mctzock.de/test/fcgi/fcgi.pyt
   readRecordg   s2    &0		%	1c   	      C   sÞ  |  j  } |  j t k rP t |  j d ?ƒ t |  j d @ƒ t |  j ƒ d } nø |  j t k ru t |  j ƒ d } nÓ |  j t k s“ |  j t	 k rÐ d } x¬ |  j
 j ƒ  D]  } | t | |  j
 | ƒ } q© Wnx |  j t k rH|  j } t | d ?d @ƒ t | d ?d @ƒ t | d ?d @ƒ t | d @ƒ } | t |  j ƒ d } n  t | ƒ } | d d @} | | } |  j |  j |  j d ?|  j d @| d ?| d @| d g } t j t t | ƒ d ƒ } | j | | | d ƒ d  S(   Ni   iÿ   i   s    i   R   i   i   i   iÿÿ  i    s        s          s      iøÿ  (   R   R   R   t   chrR   R   R   R   R   R   R   t   keyst	   writePairR   R   R    R   R
   R   t   stringt
   joinfieldsR   t   send(	   R   R!   R   t   it   vt   cLent   eLent   padLent   hdr(    (    sN   /var/www/vhosts/web2926.cweb01.gamingweb.de/cloud.mctzock.de/test/fcgi/fcgi.pyt   writeRecord‡   s4    	8!	F


	(   t   __name__t
   __module__t   __doc__R   R,   R9   (    (    (    sN   /var/www/vhosts/web2926.cweb01.gamingweb.de/cloud.mctzock.de/test/fcgi/fcgi.pyR   ^   s   		 c         C   s%  t  |  | ƒ } | d } | d @ry t t  |  | | d !ƒ } | d } | d @d >| d d >| d d >| d	 } n  t  |  | ƒ } | d } | d @rò t t  |  | | d !ƒ } | d } | d @d >| d d >| d d >| d	 } n  |  | | | !|  | | | | | !| | | f S(
   Ni   i€   i   i   i   i    i   i   i   (   R   R   (   R"   R(   t   nameLenR+   t   valueLen(    (    sN   /var/www/vhosts/web2926.cweb01.gamingweb.de/cloud.mctzock.de/test/fcgi/fcgi.pyR   «   s     

 
1 

 
1$c         C   sö   t  |  ƒ } | d k  r' t | ƒ } nJ t d | d ?d @Bƒ t | d ?d @ƒ t | d ?d @ƒ t | d @ƒ } t  | ƒ } | d k  rœ | t | ƒ } nN | t d | d ?d @Bƒ t | d ?d @ƒ t | d ?d @ƒ t | d @ƒ } | |  | S(   Ni€   i   iÿ   i   i   (   R   R-   (   R)   R*   t   lR"   (    (    sN   /var/www/vhosts/web2926.cweb01.gamingweb.de/cloud.mctzock.de/test/fcgi/fcgi.pyR/   ¹   s     J Nc         C   s   |  j  t k rŒ t |  _  i  } i t d 6t d 6t d 6} x7 |  j j ƒ  D]& } | j | ƒ rI | | | | <qI qI W| |  _ |  j	 | ƒ n  d  S(   Nt   FCGI_MAX_CONNSt   FCGI_MAX_REQSt   FCGI_MPXS_CONNS(
   R   R   t   FCGI_GET_VALUES_RESULTR@   RA   RB   R   R.   t   has_keyR9   (   t   rt   connR4   t   varsR3   (    (    sN   /var/www/vhosts/web2926.cweb01.gamingweb.de/cloud.mctzock.de/test/fcgi/fcgi.pyt   HandleManTypesÆ   s    	

 	c           C   s   t  S(   N(   t   _isFCGI(    (    (    sN   /var/www/vhosts/web2926.cweb01.gamingweb.de/cloud.mctzock.de/test/fcgi/fcgi.pyt   isFCGIØ   s    t   FCGIc           B   s8   e  Z d  „  Z d „  Z d d „ Z d „  Z d „  Z RS(   c   	      C   sn  d |  _  t d  k r t ƒ  n  t ƒ  sk d |  _  t j t j t j t	 j
 f \ |  _ |  _ |  _ |  _ d  St	 j
 j d ƒ r® t j t	 j
 d d ƒ } t t j | ƒ ƒ } n d  } t j ƒ  \ |  _ } d	 \ } } i  |  _ d |  _ d } | d  k r| | k rt d ‚ n  x| rt ƒ  } | j |  j ƒ | j t k rUt | |  j ƒ nŽ | j d k r˜t ƒ  } t | _ | j | _  | j! |  j ƒ qnK | j |  j k r¿| j t" k r¿qn$ | j t" k rã|  j d k rãqn  | j t" k rI| j |  _ | j# t$ k rd } q| j# t% k r.d } q| j# t& k rd } qq| j t' k r¥| j( d k rt| d } qx¤ | j) j* ƒ  D] } | j) | |  j | <q„Wq| j t+ k rà| j( d k rÐ| d } q| | j( } q| j t, k r| j( d k r| d } q| | j( } qqWt- | ƒ |  _ t _ t- ƒ  |  _ t _ t- ƒ  |  _ t _ t- | ƒ |  _. d  S(
   Ni    i   t   FCGI_WEB_SERVER_ADDRSt   ,R   s   Connection from invalid server!i   i   (   R   R   (/   t   haveFinishedt   _initt   Nonet   _startupRJ   t   syst   stdint   stdoutt   stderrt   ost   environt   inpt   outt   errt   envRD   R0   t   splitR   t   stript   _sockt   acceptRF   t	   requestIdR   R   R,   R   t   ManagementTypesRH   R   R   R   R9   R   R   t   FCGI_AUTHORIZERt   FCGI_RESPONDERt   FCGI_FILTERR   R   R   R.   t
   FCGI_STDINt	   FCGI_DATAR    R%   (	   R   t
   good_addrst   addrRS   R%   t	   remainingRE   t   r2R3   (    (    sN   /var/www/vhosts/web2926.cweb01.gamingweb.de/cloud.mctzock.de/test/fcgi/fcgi.pyR   å   st    	
		6				 		 ! 	 	 c         C   s   |  j  ƒ  d  S(   N(   t   Finish(   R   (    (    sN   /var/www/vhosts/web2926.cweb01.gamingweb.de/cloud.mctzock.de/test/fcgi/fcgi.pyt   __del__5  s    i    c         C   s‚  |  j  s~d |  _  |  j j d d ƒ |  j j d d ƒ t ƒ  } t | _ |  j | _ |  j j	 ƒ  } | rÂ x8 | r¥ |  j
 | ƒ \ } } | | _ | j |  j ƒ qn Wd | _ | j |  j ƒ n  t | _ |  j j	 ƒ  } x8 | r|  j
 | ƒ \ } } | | _ | j |  j ƒ qÝ Wd | _ | j |  j ƒ t ƒ  } t | _ |  j | _ | | _ t | _ | j |  j ƒ |  j j ƒ  n  d  S(   Ni   i    R   (   RN   RZ   t   seekRY   R   t   FCGI_STDERRR   R`   R   t   readt   getNextChunkR   R9   RF   t   FCGI_STDOUTR   R   t   FCGI_REQUEST_COMPLETER    R   (   R   t   statusRE   R%   t   chunk(    (    sN   /var/www/vhosts/web2926.cweb01.gamingweb.de/cloud.mctzock.de/test/fcgi/fcgi.pyRk   8  s<    							 				 				c         C   s|   d } |  j  j d ƒ r1 t j |  j  d ƒ } n  | d k rV t j d |  j  d d ƒ St j d |  j d |  j  d d ƒ Sd  S(   Nt   GETt   REQUEST_METHODRW   t   keep_blank_valuesi   t   fp(   R[   RD   R0   t   uppert   cgit   FieldStorageRX   (   R   t   method(    (    sN   /var/www/vhosts/web2926.cweb01.gamingweb.de/cloud.mctzock.de/test/fcgi/fcgi.pyt   getFieldStorage[  s    c         C   s   | d  } | d } | | f S(   Ni    (    (   R   R%   Rt   (    (    sN   /var/www/vhosts/web2926.cweb01.gamingweb.de/cloud.mctzock.de/test/fcgi/fcgi.pyRp   d  s    

(   R:   R;   R   Rl   Rk   R}   Rp   (    (    (    sN   /var/www/vhosts/web2926.cweb01.gamingweb.de/cloud.mctzock.de/test/fcgi/fcgi.pyRK   ä   s
   	P	#		c          C   sz   d a  y2 t j t j j ƒ  t j t j ƒ }  |  j ƒ  Wn5 t j	 k
 ro \ } } | t
 j k rp d a d  Sn X|  a d  S(   Ni   i    (   RO   t   sockett   fromfdRR   RS   t   filenot   AF_INETt   SOCK_STREAMt   getpeernameR   t   errnot   ENOTCONNRI   R^   (   R"   RZ   t   errmsg(    (    sN   /var/www/vhosts/web2926.cweb01.gamingweb.de/cloud.mctzock.de/test/fcgi/fcgi.pyRQ   m  s    c          C   s  d }  yÞ x× t  ƒ  râ t ƒ  } |  d }  y3 | j ƒ  } t j | d j ƒ } d | g } Wn; d g } | j d ƒ | j d |  ƒ | j d ƒ n Xt j | d	 ƒ } | j j	 d
 t
 | ƒ ƒ | j j	 | ƒ | j ƒ  q WWn2 d d  l } t d d ƒ } | j d | ƒ n Xd  S(   Ni    i   t   sizet   *s6   <HTML><HEAD><TITLE>FCGI TestApp</TITLE></HEAD>
<BODY>
s   <H2>FCGI TestApp</H2><P>s   <b>request count</b> = %d<br>s   </BODY></HTML>
R   sH   Content-length: %s
Content-type: text/html
Cache-Control: no-cache

iÿÿÿÿt	   tracebackt   wt   file(   RJ   t   AcceptR}   R0   t   atoiR*   t   appendt   joinRY   R   R   Rk   R‰   R   t	   print_exc(   t   countert   reqt   fsR‡   t   docR‰   t   f(    (    sN   /var/www/vhosts/web2926.cweb01.gamingweb.de/cloud.mctzock.de/test/fcgi/fcgi.pyt   _test€  s.    	
	t   __main__(    (    (1   RV   RR   R0   R~   R„   t	   cStringIOR    Rz   RA   R@   R	   RB   R   t   FCGI_ABORT_REQUESTR   R   Re   Rq   Rn   Rf   R   RC   R   t   FCGI_MAXTYPERa   R   t   FCGI_KEEP_CONNRc   Rb   Rd   Rr   t   FCGI_CANT_MPX_CONNt   FCGI_OVERLOADEDt   FCGI_UNKNOWN_ROLER   R   R   R/   RH   RI   RJ   RP   RO   R^   RK   RŒ   RQ   R–   R:   (    (    (    sN   /var/www/vhosts/web2926.cweb01.gamingweb.de/cloud.mctzock.de/test/fcgi/fcgi.pyt   <module>#   sX   <      	  	M					†		6