ó
‚•oTc           @   sy   d  d l  Z  d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d „  Z d	 d
 „ Z d „  Z d „  Z d S(   iÿÿÿÿNt   ServerAdapterc           B   sh   e  Z d
 d
 d  „ Z d „  Z d „  Z d „  Z d e _ d „  Z d „  Z	 d „  Z
 d e
 _ d	 „  Z RS(   c         C   s1   | |  _  | |  _ | |  _ d  |  _ t |  _ d  S(   N(   t   bust
   httpservert	   bind_addrt   Nonet	   interruptt   Falset   running(   t   selfR   R   R   (    (    s,   /var/www/SABnzbd/cherrypy/process/servers.pyt   __init__   s
    				c         C   s0   |  j  j d |  j ƒ |  j  j d |  j ƒ d  S(   Nt   startt   stop(   R   t	   subscribeR
   R   (   R   (    (    s,   /var/www/SABnzbd/cherrypy/process/servers.pyR      s    c         C   s0   |  j  j d |  j ƒ |  j  j d |  j ƒ d  S(   NR
   R   (   R   t   unsubscribeR
   R   (   R   (    (    s,   /var/www/SABnzbd/cherrypy/process/servers.pyR      s    c         C   s*  |  j  d  k r d } nA t |  j  t ƒ rL |  j  \ } } d | | f } n d |  j  } |  j rz |  j j d | ƒ d  Sd  |  _ |  j s› t	 d ƒ ‚ n  t |  j  t ƒ r½ t
 |  j  Œ  n  d d  l } | j d |  j ƒ } | j d | j ƒ  ƒ | j ƒ  |  j ƒ  t |  _ |  j j d	 | ƒ d  S(
   Ns   unknown interface (dynamic?)s   %s:%ss   socket file: %ss   Already serving on %ss    No HTTP server has been created.iÿÿÿÿt   targets   HTTPServer s   Serving on %s(   R   R   t
   isinstancet   tupleR   R   t   logR   R   t
   ValueErrort   wait_for_free_portt	   threadingt   Threadt   _start_http_threadt   setNamet   getNameR
   t   waitt   True(   R   t   on_whatt   hostt   portR   t   t(    (    s,   /var/www/SABnzbd/cherrypy/process/servers.pyR
   #   s*    				

	iK   c         C   sÝ   y |  j  j ƒ  WnÅ t k
 rL } |  j j d ƒ | |  _ |  j j ƒ  n t k
 r‡ } |  j j d ƒ | |  _ |  j j ƒ  ‚  nR d d  l } | j	 ƒ  d |  _ |  j j d d t
 d d ƒ|  j j ƒ  ‚  n Xd  S(	   Ns'   <Ctrl-C> hit: shutting down HTTP servers,   SystemExit raised: shutting down HTTP serveriÿÿÿÿi   s#   Error in HTTP server: shutting downt	   tracebackt   leveli(   (   R   R
   t   KeyboardInterruptR   R   R   t   exitt
   SystemExitt   syst   exc_infoR   (   R   t   excR$   (    (    s,   /var/www/SABnzbd/cherrypy/process/servers.pyR   C   s$    		c         C   ss   x; t  |  j d t ƒ s= |  j r- |  j ‚ n  t j d ƒ q Wt |  j t ƒ ro |  j \ } } t	 | | ƒ n  d  S(   Nt   readygš™™™™™¹?(
   t   getattrR   R   R   t   timet   sleepR   R   R   t   wait_for_occupied_port(   R   R   R   (    (    s,   /var/www/SABnzbd/cherrypy/process/servers.pyR   ]   s    	c         C   sv   |  j  r[ |  j j ƒ  t |  j t ƒ r8 t |  j Œ  n  t |  _  |  j j	 d |  j ƒ n |  j j	 d |  j ƒ d  S(   Ns   HTTP Server %s shut downs    HTTP Server %s already shut down(
   R   R   R   R   R   R   R   R   R   R   (   R   (    (    s,   /var/www/SABnzbd/cherrypy/process/servers.pyR   i   s    		i   c         C   s   |  j  ƒ  |  j ƒ  d  S(   N(   R   R
   (   R   (    (    s,   /var/www/SABnzbd/cherrypy/process/servers.pyt   restartw   s    
N(   t   __name__t
   __module__R   R	   R   R   R
   t   priorityR   R   R   R,   (    (    (    s,   /var/www/SABnzbd/cherrypy/process/servers.pyR       s   								t   FlupFCGIServerc           B   s#   e  Z d  „  Z d „  Z d „  Z RS(   c         O   sg   | j  d d  ƒ d  k rH d d  l } t | j d ƒ sH t d ƒ ‚ qH n  | |  _ | |  _ t |  _ d  S(   Nt   bindAddressiÿÿÿÿt   fromfds{   Dynamic FCGI server not available on this platform. You must use a static or external one by providing a legal bindAddress.(	   t   getR   t   sockett   hasattrR   t   argst   kwargsR   R'   (   R   R6   R7   R4   (    (    s,   /var/www/SABnzbd/cherrypy/process/servers.pyR	   €   s    		c         C   s]   d d l  m } | |  j |  j Ž  |  _ d „  |  j _ g  |  j _ t |  _ |  j j	 ƒ  d  S(   Niÿÿÿÿ(   t
   WSGIServerc           S   s   d  S(   N(   R   (    (    (    s,   /var/www/SABnzbd/cherrypy/process/servers.pyt   <lambda>›   s    (
   t   flup.server.fcgiR8   R6   R7   t
   fcgiservert   _installSignalHandlerst   _oldSIGsR   R'   t   run(   R   R8   (    (    s,   /var/www/SABnzbd/cherrypy/process/servers.pyR
   Œ   s    
	c         C   s1   t  |  j _ |  j j j |  j j _ t  |  _ d  S(   N(   R   R;   t
   _keepGoingt   _threadPoolt
   _idleCountt   maxSpareR'   (   R   (    (    s,   /var/www/SABnzbd/cherrypy/process/servers.pyR       s    (   R-   R.   R	   R
   R   (    (    (    s,   /var/www/SABnzbd/cherrypy/process/servers.pyR0   }   s   		t   FlupSCGIServerc           B   s#   e  Z d  „  Z d „  Z d „  Z RS(   c         O   s   | |  _  | |  _ t |  _ d  S(   N(   R6   R7   R   R'   (   R   R6   R7   (    (    s,   /var/www/SABnzbd/cherrypy/process/servers.pyR	   ¬   s    		c         C   s]   d d l  m } | |  j |  j Ž  |  _ d „  |  j _ g  |  j _ t |  _ |  j j	 ƒ  d  S(   Niÿÿÿÿ(   R8   c           S   s   d  S(   N(   R   (    (    (    s,   /var/www/SABnzbd/cherrypy/process/servers.pyR9   À   s    (
   t   flup.server.scgiR8   R6   R7   t
   scgiserverR<   R=   R   R'   R>   (   R   R8   (    (    s,   /var/www/SABnzbd/cherrypy/process/servers.pyR
   ±   s    
	c         C   s(   t  |  _ t  |  j _ d |  j j _ d  S(   Ni    (   R   R'   RE   R?   R@   RB   (   R   (    (    s,   /var/www/SABnzbd/cherrypy/process/servers.pyR   Å   s    	(   R-   R.   R	   R
   R   (    (    (    s,   /var/www/SABnzbd/cherrypy/process/servers.pyRC   ©   s   		c         C   s$   |  d k r d S|  d k r  d S|  S(   Ns   0.0.0.0s	   127.0.0.1s   ::s   ::1(    (   t   server_host(    (    s,   /var/www/SABnzbd/cherrypy/process/servers.pyt   client_hostÎ   s
    g      ð?c         C   s  |  s t  d ƒ ‚ n  t |  ƒ }  t | ƒ } d d  l } xÐ | j |  | | j | j ƒ D]° } | \ } } } } }	 d  }
 ye | j | | | ƒ }
 |
 j | ƒ |
 j	 |  | f ƒ |
 j
 ƒ  t d t | ƒ t |  ƒ f ƒ ‚ WqX | j k
 r|
 r|
 j
 ƒ  qqX XqX Wd  S(   Ns*   Host values of '' or None are not allowed.iÿÿÿÿsT   Port %s is in use on %s; perhaps the previous httpserver did not shut down properly.(   R   RG   t   intR4   t   getaddrinfot	   AF_UNSPECt   SOCK_STREAMR   t
   settimeoutt   connectt   closet   IOErrort   reprt   error(   R   R   t   timeoutR4   t   rest   aft   socktypet   protot	   canonnamet   sat   s(    (    s,   /var/www/SABnzbd/cherrypy/process/servers.pyt
   check_portØ   s&    
 c         C   s‚   |  s t  d ƒ ‚ n  xP t d ƒ D]B } y t |  | d d ƒWn t k
 r_ t j d ƒ q" Xd  Sq" Wt d | |  f ƒ ‚ d  S(   Ns*   Host values of '' or None are not allowed.i2   RR   gš™™™™™¹?s   Port %r not free on %r(   R   t   xrangeRZ   RO   R)   R*   (   R   R   t   trial(    (    s,   /var/www/SABnzbd/cherrypy/process/servers.pyR   õ   s    c         C   sy   |  s t  d ƒ ‚ n  xG t d ƒ D]9 } y t |  | ƒ Wn t k
 rM d  SXt j d ƒ q" Wt d | |  f ƒ ‚ d  S(   Ns*   Host values of '' or None are not allowed.i2   gš™™™™™¹?s   Port %r not bound on %r(   R   R[   RZ   RO   R)   R*   (   R   R   R\   (    (    s,   /var/www/SABnzbd/cherrypy/process/servers.pyR+     s    (	   R)   t   objectR    R0   RC   RG   RZ   R   R+   (    (    (    s,   /var/www/SABnzbd/cherrypy/process/servers.pyt   <module>   s   w,%	
	