ó
‚•oTc           @   sŠ   d  d l  Z d  d l Z d  d l Z d  d l m Z d  d l m Z	 d e
 f d „  ƒ  YZ d e
 f d „  ƒ  YZ d e
 f d	 „  ƒ  YZ d S(
   iÿÿÿÿN(   t   _cperror(   t   httpt   VirtualHostc           B   s    e  Z d e d  „ Z d „  Z RS(   c         C   s%   | |  _  | p i  |  _ | |  _ d  S(   N(   t   defaultt   domainst   use_x_forwarded_host(   t   selfR   R   R   (    (    s$   /var/www/SABnzbd/cherrypy/_cpwsgi.pyt   __init__+   s    	c         C   sg   | j  d d ƒ } |  j r0 | j  d | ƒ } n  |  j j  | ƒ } | d  k rZ |  j } n  | | | ƒ S(   Nt	   HTTP_HOSTt    t   HTTP_X_FORWARDED_HOST(   t   getR   R   t   NoneR   (   R   t   environt   start_responset   domaint   nextapp(    (    s$   /var/www/SABnzbd/cherrypy/_cpwsgi.pyt   __call__0   s    	N(   t   __name__t
   __module__R   t   TrueR   R   (    (    (    s$   /var/www/SABnzbd/cherrypy/_cpwsgi.pyR      s    t   AppResponsec           B   s—   e  Z e e f Z d Z e d  „ Z d „  Z	 d „  Z
 d „  Z d „  Z d „  Z d „  Z d „  Z i d d	 6d
 d 6d d 6d d 6d d 6Z d „  Z RS(   c         C   s;   g  |  _  | |  _ | |  _ | |  _ | |  _ |  j ƒ  d  S(   N(   t   redirectionst	   recursiveR   R   t   cpappt   setapp(   R   R   R   R   R   (    (    s$   /var/www/SABnzbd/cherrypy/_cpwsgi.pyR   D   s    					c         C   s–  yL |  j  ƒ  |  _ |  j ƒ  \ } } } t | ƒ |  _ |  j | | ƒ |  _ WnC|  j k
 ro |  j ƒ  ‚  n#t	 j
 k
 r¸ } t	 j j |  j d <|  j ƒ  |  j | j | j ƒ d  St |  j d t ƒ rà |  j ƒ  ‚  n  t j ƒ  } t	 j | d d ƒt |  j d t ƒ sd } n  t j | ƒ \ } } } t | ƒ |  _ y |  j | | t j ƒ  ƒ Wq’t	 j d t d d ƒ |  j ƒ  ‚  q’Xn Xd  S(   Ns   cherrypy.previous_requestt   throw_errorst   severityi(   t   show_tracebacksR	   t	   traceback(   t   get_requestt   requestt   get_responset   itert   iter_responseR   t   writet   throwst   closet	   _cherrypyt   InternalRedirectt   servingR   t	   iredirectt   patht   query_stringt   getattrt   FalseR    t
   format_exct   logR   t
   bare_errort   _syst   exc_info(   R   t   st   ht   bt   irt   tb(    (    s$   /var/www/SABnzbd/cherrypy/_cpwsgi.pyR   L   s:    


	
c         C   s  |  j  } |  j sÂ | j d d ƒ } | } | r= d | } n  | | | |  j k rp t d | | | f ƒ ‚ qÂ | j d d ƒ } | j d d ƒ } | r§ d | } n  |  j j | | | ƒ n  d | d <| | d <| | d <t j ƒ  | d	 <d
 | d <|  j ƒ  d  S(   Nt   SCRIPT_NAMER	   t   ?s;   InternalRedirector visited the same URL twice: %r + %r + %rt	   PATH_INFOt   QUERY_STRINGt   GETt   REQUEST_METHODs
   wsgi.inputt   0t   CONTENT_LENGTH(	   R   R   R   R   t   RuntimeErrort   appendt	   _StringIOt   StringIOR   (   R   R*   R+   t   envt   snt   qst   p(    (    s$   /var/www/SABnzbd/cherrypy/_cpwsgi.pyR)   r   s(    		



c         C   s   |  S(   N(    (   R   (    (    s$   /var/www/SABnzbd/cherrypy/_cpwsgi.pyt   __iter__ž   s    c         C   sž  y8 |  j  j ƒ  } t | t ƒ s3 | j d ƒ } n  | SWn_|  j k
 r[ |  j ƒ  ‚  n?t j k
 r£ } t j	 j
 |  j d <|  j ƒ  |  j | j | j ƒ n÷ t k
 r¶ ‚  nä t |  j
 d t ƒ rÞ |  j ƒ  ‚  n  t j ƒ  } t j | d d ƒt |  j
 d t ƒ sd } n  t j | ƒ \ } } } t g  ƒ |  _  y |  j | | t j ƒ  ƒ Wn* t j d t d d ƒ |  j ƒ  ‚  n Xd j | ƒ SXd  S(	   Ns
   ISO-8859-1s   cherrypy.previous_requestR   R   i(   R   R	   R   (   R"   t   nextt
   isinstancet   strt   encodeR$   R%   R&   R'   R(   R   R   R)   R*   R+   t   StopIterationR,   R-   R    R.   R/   R   R0   R!   R   R1   R2   t   join(   R   t   chunkR6   R7   R3   R4   R5   (    (    s$   /var/www/SABnzbd/cherrypy/_cpwsgi.pyRI   ¡   s>    


	
c         C   s   |  j  j ƒ  d  S(   N(   R   t   release_serving(   R   (    (    s$   /var/www/SABnzbd/cherrypy/_cpwsgi.pyR%   Î   s    c         C   sº   |  j  d } t j |  j  j d d ƒ |  j  j d d ƒ ƒ } |  j  j d d ƒ } |  j  j d ƒ } |  j |  j  ƒ } |  j  d } |  j j | | | | | | ƒ } | j | j | j	 f S(   NR=   R8   R	   R:   R;   t   SERVER_PROTOCOLs
   wsgi.input(
   R   t   _httpt   urljoinR   t   translate_headersR   t   runt   statust   header_listt   body(   R   t   methR*   RF   t   rprotot   headerst   rfilet   response(    (    s$   /var/www/SABnzbd/cherrypy/_cpwsgi.pyR    Ò   s    !c         C   s  |  j  j } t j d t | d d ƒ ƒ | d d ƒ ƒ } t j | d d ƒ t | d d ƒ ƒ | d d ƒ ƒ } | d	 ƒ } | d
 d ƒ } |  j j | | | | ƒ \ } } | d ƒ pÆ | d ƒ pÆ d  | _ |  j  d | _	 |  j  d | _
 |  j  | _ | d d  ƒ | _ | S(   NR	   t   SERVER_PORTiP   t   SERVER_NAMEt   REMOTE_ADDRt   REMOTE_PORTiÿÿÿÿt   REMOTE_HOSTs   wsgi.url_schemet   ACTUAL_SERVER_PROTOCOLs   HTTP/1.1t
   LOGON_USERt   REMOTE_USERs   wsgi.multithreads   wsgi.multiprocesss   cherrypy.previous_request(   R   R   RR   t   Hostt   intR   t   get_servingR   t   logint   multithreadt   multiprocesst   wsgi_environt   prev(   R   RD   t   localt   remotet   schemet   sprotoR   t   resp(    (    s$   /var/www/SABnzbd/cherrypy/_cpwsgi.pyR   Þ   s    !!t   Authorizationt   HTTP_CGI_AUTHORIZATIONs   Content-LengthR?   s   Content-Typet   CONTENT_TYPEs   Remote-HostRb   s   Remote-AddrR`   c         c   su   xn | D]f } | |  j  k r5 |  j  | | | f Vq | d  d k r | d j d d ƒ } | | | f Vq q Wd  S(   Ni   t   HTTP_t   _t   -(   t   headerNamest   replace(   R   R   t   cgiNamet   translatedHeader(    (    s$   /var/www/SABnzbd/cherrypy/_cpwsgi.pyRT   ü   s    N(   R   R   t   KeyboardInterruptt
   SystemExitR$   R   R   R-   R   R   R)   RH   RI   R%   R    R   Ry   RT   (    (    (    s$   /var/www/SABnzbd/cherrypy/_cpwsgi.pyR   ?   s    	&	,		-			

t	   CPWSGIAppc           B   sG   e  Z g  Z d Z i  Z e Z d d  „ Z d „  Z	 d „  Z
 d „  Z RS(   c         C   sE   | |  _  |  j |  _ | r/ |  j j | ƒ n  |  j j ƒ  |  _ d  S(   N(   R   t   pipelinet   extendt   configt   copy(   R   R   R€   (    (    s$   /var/www/SABnzbd/cherrypy/_cpwsgi.pyR      s
    	c         C   s   |  j  | | |  j ƒ S(   N(   t   response_classR   (   R   R   R   (    (    s$   /var/www/SABnzbd/cherrypy/_cpwsgi.pyt   tail'  s    c         C   s‚   |  j  } | d  k ru |  j } xH |  j d  d  d … D]0 \ } } |  j j | i  ƒ } | | |  } q5 W| |  _  n  | | | ƒ S(   Niÿÿÿÿ(   t   headR   R…   R€   R‚   R   (   R   R   R   R†   t   namet   callablet   conf(    (    s$   /var/www/SABnzbd/cherrypy/_cpwsgi.pyR   /  s    		#c         C   sr   | d k r |  j  j | ƒ nO | d k r7 | |  _ n7 | j d d ƒ \ } } |  j j | i  ƒ } | | | <d  S(   NR€   R„   t   .i   (   R€   R   R„   t   splitR‚   t
   setdefault(   R   t   kt   vR‡   t   argt   bucket(    (    s$   /var/www/SABnzbd/cherrypy/_cpwsgi.pyt   namespace_handler;  s    N(   R   R   R€   R   R†   R‚   R   R„   R   R…   R   R‘   (    (    (    s$   /var/www/SABnzbd/cherrypy/_cpwsgi.pyR     s   		(   RC   RB   t   sysR1   t   cherrypyR&   R    t   cherrypy.libR   RR   t   objectR   R   R   (    (    (    s$   /var/www/SABnzbd/cherrypy/_cpwsgi.pyt   <module>   s   4É