
    g                      N    d Z ddlZddlmZ ddlmZ ddlmZ dZ G d de      Z	y)	z"Manage HTTP servers with CherryPy.    N)
attributes)text_or_bytes)ServerAdapter)Serverc                   @    e Zd ZdZdZ	 dZed        Zej                  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	 dZ	 dZ	 dZ	 dZ	 dZ	 dZ	 dZ	 dZ	 dZ	 d Z ddZ! fdZ"de"_#        ed        Z$e$j                  d        Z$d Z% xZ&S )r   a  An adapter for an HTTP server.

    You can set attributes (like socket_host and socket_port)
    on *this* object (which is probably cherrypy.server), and call
    quickstart. For example::

        cherrypy.server.socket_port = 80
        cherrypy.quickstart()
    i  z	127.0.0.1c                     | j                   S )a  The hostname or IP address on which to listen for connections.

        Host values may be any IPv4 or IPv6 address, or any valid hostname.
        The string 'localhost' is a synonym for '127.0.0.1' (or '::1', if
        your hosts file prefers IPv6). The string '0.0.0.0' is a special
        IPv4 entry meaning "any active interface" (INADDR_ANY), and '::'
        is the similar IN6ADDR_ANY for IPv6. The empty string or None are
        not allowed.
        )_socket_hostselfs    '/opt/Tautulli/lib/cherrypy/_cpserver.pysocket_hostzServer.socket_host   s            c                 2    |dk(  rt        d      || _        y )N zuThe empty string ('') is not an allowed value. Use '0.0.0.0' instead to listen on all active interfaces (INADDR_ANY).)
ValueErrorr	   r   values     r   r   zServer.socket_host)   s%    B; 8 9 9 "r   N   
   zHTTP/1.1i  i  @builtinFT)   r   c                 X    t         j                  | _        d| _        d| _        d| _        y)zInitialize Server instance.NF)cherrypyenginebus
httpserver	interruptrunningr
   s    r   __init__zServer.__init__   s"    ??r   c                     || j                   }|ddlm} |j                  |       }t	        |t
              r t        |      |       }|| j                  fS )z?Return a (httpserver, bind_addr) pair based on self attributes.r   )_cpwsgi_server)instancer   r"   CPWSGIServer
isinstancer   r   	bind_addr)r   r   r"   s      r   httpserver_from_selfzServer.httpserver_from_self   sT    J/'44T:Jj-0/J/5J4>>))r   c                 |    | j                   s| j                         \  | _         | _        t        t        |           y)zStart the HTTP server.N)r   r'   r&   superr   start)r   	__class__s    r   r*   zServer.start   s.    .2.G.G.I+DOT^fd!#r   K   c                     | j                   r| j                   S | j                  | j                  y| j                  | j                  fS )zuReturn bind address.

        A (host, port) tuple for TCP sockets or a str for Unix domain
        sockets.
        N)socket_filer   socket_portr
   s    r   r&   zServer.bind_addr   sJ     ####(8(8(@  $"2"233r   c                     |d | _         d | _        d | _        y t        |t              r|| _         d | _        d | _        y 	 |\  | _        | _        d | _         y # t
        $ r t        d|z        w xY w)Nzfbind_addr must be a (host, port) tuple (for TCP sockets) or a string (for Unix domain sockets), not %r)r.   r   r/   r%   r   r   r   s     r   r&   zServer.bind_addr   s    =#D#D#D}-$D#D#DD5:2 $"2#'  D  ";=B"C D DDs    A A/c                     | j                   r| j                   S | j                  }|dv rddl}|j                         }| j                  }| j
                  rd}|dk7  r|d|z  z  }nd}|dk7  r|d|z  z  }|d	|S )
zYReturn the base for this server.

        e.i. scheme://host[:port] or sock file
        )z0.0.0.0z::r   Nhttpsi  z:%shttpP   z://)r.   r   socketgethostnamer/   ssl_certificate)r   hostr5   portschemes        r   basezServer.base   s    
 ###$$ %%'DFs{$Frz$"D))r   )N)'__name__
__module____qualname____doc__r/   r	   propertyr   setterr.   socket_queue_sizesocket_timeoutaccepted_queue_sizeaccepted_queue_timeoutshutdown_timeoutprotocol_versionthread_poolthread_pool_maxmax_request_header_sizemax_request_body_sizer#   ssl_contextr7   ssl_certificate_chainssl_private_keyssl_ciphers
ssl_module
statisticsnodelaywsgi_version	peercredspeercreds_resolver    r'   r*   priorityr&   r;   __classcell__)r+   s   @r   r   r      s    K:L
! 
! " " K * NGG  2 ?!K K?O
 ) . H K;O5 & O:K"J JFGNL I 
*$
 EN
4 
4 D D$*r   r   )
r?   r   cherrypy.lib.reprconfr   cherrypy._cpcompatr   cherrypy.process.serversr   __all__r    r   r   <module>r]      s)    (  , , 2 q*] q*r   