NovaBryan/EVE_Dump
Log | Files | 📦 下载最新源码 (.zip) | Refs | README

_cpserver.py (3948B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\carbon\common\lib\cherrypy\_cpserver.py
      2 import warnings
      3 import cherrypy
      4 from cherrypy.lib import attributes
      5 from cherrypy._cpcompat import basestring
      6 from cherrypy.process.servers import *
      7 
      8 class Server(ServerAdapter):
      9     socket_port = 8080
     10     _socket_host = '127.0.0.1'
     11 
     12     def _get_socket_host(self):
     13         return self._socket_host
     14 
     15     def _set_socket_host(self, value):
     16         if value == '':
     17             raise ValueError("The empty string ('') is not an allowed value. Use '0.0.0.0' instead to listen on all active interfaces (INADDR_ANY).")
     18         self._socket_host = value
     19 
     20     socket_host = property(_get_socket_host, _set_socket_host, doc='The hostname or IP address on which to listen for connections.\n        \n        Host values may be any IPv4 or IPv6 address, or any valid hostname.\n        The string \'localhost\' is a synonym for \'127.0.0.1\' (or \'::1\', if\n        your hosts file prefers IPv6). The string \'0.0.0.0\' is a special\n        IPv4 entry meaning "any active interface" (INADDR_ANY), and \'::\'\n        is the similar IN6ADDR_ANY for IPv6. The empty string or None are\n        not allowed.')
     21     socket_file = None
     22     socket_queue_size = 5
     23     socket_timeout = 10
     24     shutdown_timeout = 5
     25     protocol_version = 'HTTP/1.1'
     26     thread_pool = 10
     27     thread_pool_max = -1
     28     max_request_header_size = 512000
     29     max_request_body_size = 104857600
     30     instance = None
     31     ssl_context = None
     32     ssl_certificate = None
     33     ssl_certificate_chain = None
     34     ssl_private_key = None
     35     ssl_module = 'pyopenssl'
     36     nodelay = True
     37     wsgi_version = (1, 0)
     38 
     39     def __init__(self):
     40         self.bus = cherrypy.engine
     41         self.httpserver = None
     42         self.interrupt = None
     43         self.running = False
     44 
     45     def httpserver_from_self(self, httpserver = None):
     46         if httpserver is None:
     47             httpserver = self.instance
     48         if httpserver is None:
     49             from cherrypy import _cpwsgi_server
     50             httpserver = _cpwsgi_server.CPWSGIServer(self)
     51         if isinstance(httpserver, basestring):
     52             httpserver = attributes(httpserver)(self)
     53         return (httpserver, self.bind_addr)
     54 
     55     def start(self):
     56         if not self.httpserver:
     57             self.httpserver, self.bind_addr = self.httpserver_from_self()
     58         ServerAdapter.start(self)
     59 
     60     start.priority = 75
     61 
     62     def _get_bind_addr(self):
     63         if self.socket_file:
     64             return self.socket_file
     65         if self.socket_host is None and self.socket_port is None:
     66             return
     67         return (self.socket_host, self.socket_port)
     68 
     69     def _set_bind_addr(self, value):
     70         if value is None:
     71             self.socket_file = None
     72             self.socket_host = None
     73             self.socket_port = None
     74         elif isinstance(value, basestring):
     75             self.socket_file = value
     76             self.socket_host = None
     77             self.socket_port = None
     78         else:
     79             try:
     80                 self.socket_host, self.socket_port = value
     81                 self.socket_file = None
     82             except ValueError:
     83                 raise ValueError('bind_addr must be a (host, port) tuple (for TCP sockets) or a string (for Unix domain sockets), not %r' % value)
     84 
     85     bind_addr = property(_get_bind_addr, _set_bind_addr, doc='A (host, port) tuple for TCP sockets or a str for Unix domain sockets.')
     86 
     87     def base(self):
     88         if self.socket_file:
     89             return self.socket_file
     90         host = self.socket_host
     91         if host in ('0.0.0.0', '::'):
     92             import socket
     93             host = socket.gethostname()
     94         port = self.socket_port
     95         if self.ssl_certificate:
     96             scheme = 'https'
     97             if port != 443:
     98                 host += ':%s' % port
     99         else:
    100             scheme = 'http'
    101             if port != 80:
    102                 host += ':%s' % port
    103         return '%s://%s' % (scheme, host)