class HttpServer(object):
    """Factory that creates a HTTP server listening on port, calling generatorFactory for each new connection.  When a client does not send a valid HTTP request, it is disconnected after timeout seconds. The generatorFactory is called with the HTTP Status and Headers as arguments.  It is expected to return a generator that produces the response -- including the Status line and Headers -- to be send to the client."""
    def __init__(self,
                 reactor,
                 port,
                 generatorFactory,
                 timeout=1,
                 recvSize=RECVSIZE,
                 prio=None,
                 sok=None,
                 maxConnections=None,
                 errorHandler=None,
                 compressResponse=False,
                 bindAddress=None):
        self._reactor = reactor
        self._port = port
        self._bindAddress = bindAddress
        self._generatorFactory = generatorFactory
        self._timeout = timeout
        self._recvSize = recvSize
        self._prio = prio
        self._sok = sok
        self._maxConnections = maxConnections
        self._errorHandler = errorHandler
        self._compressResponse = compressResponse

    def listen(self):
        self._acceptor = Acceptor(reactor=self._reactor,
                                  port=self._port,
                                  sinkFactory=lambda sok: HttpHandler(
                                      reactor=self._reactor,
                                      sok=sok,
                                      generatorFactory=self._generatorFactory,
                                      timeout=self._timeout,
                                      recvSize=self._recvSize,
                                      prio=self._prio,
                                      maxConnections=self._maxConnections,
                                      errorHandler=self._errorHandler,
                                      compressResponse=self._compressResponse),
                                  prio=self._prio,
                                  sok=self._sok,
                                  bindAddress=self._bindAddress)

    def setMaxConnections(self, m):
        self._maxConnections = m

    def shutdown(self):
        self._acceptor.shutdown()
 def listen(self):
     self._acceptor = Acceptor(reactor=self._reactor,
                               port=self._port,
                               sinkFactory=lambda sok: HttpHandler(
                                   reactor=self._reactor,
                                   sok=sok,
                                   generatorFactory=self._generatorFactory,
                                   timeout=self._timeout,
                                   recvSize=self._recvSize,
                                   prio=self._prio,
                                   maxConnections=self._maxConnections,
                                   errorHandler=self._errorHandler,
                                   compressResponse=self._compressResponse),
                               prio=self._prio,
                               sok=self._sok,
                               bindAddress=self._bindAddress)
    def listen(self):
        # This should have been a SSLAcceptor ...
        if self._sok == None:

            def verify_cb(conn, cert, errnum, depth, ok):
                # This obviously has to be updated
                print 'Got certificate: %s' % cert.get_subject()
                return ok

            # Initialize context
            ctx = SSL.Context(SSL.SSLv23_METHOD)
            ctx.set_session_id('weightless:%s:%s' %
                               (time(), randint(1024, 4096)))
            ctx.set_options(SSL.OP_NO_SSLv2)
            ctx.set_verify(SSL.VERIFY_PEER, verify_cb)  # Demand a certificate
            ctx.use_privatekey_file(self._keyfile)
            ctx.use_certificate_file(self._certfile)

            # Set up server
            self._sok = SSL.Connection(ctx, socket())
            self._sok.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
            self._sok.setsockopt(SOL_SOCKET, SO_LINGER, pack('ii', 0, 0))
            self._sok.bind(
                ('0.0.0.0' if self._bindAddress is None else self._bindAddress,
                 self._port))
            self._sok.listen(127)

        self._acceptor = Acceptor(reactor=self._reactor,
                                  port=self._port,
                                  sinkFactory=lambda sok: HttpsHandler(
                                      reactor=self._reactor,
                                      sok=sok,
                                      generatorFactory=self._generatorFactory,
                                      timeout=self._timeout,
                                      recvSize=self._recvSize,
                                      prio=self._prio,
                                      maxConnections=self._maxConnections,
                                      errorHandler=self._errorHandler,
                                      compressResponse=self._compressResponse),
                                  prio=self._prio,
                                  sok=self._sok,
                                  bindAddress=self._bindAddress)
Beispiel #4
0
class HttpServer(object):
    """Factory that creates a HTTP server listening on port, calling generatorFactory for each new connection.  When a client does not send a valid HTTP request, it is disconnected after timeout seconds. The generatorFactory is called with the HTTP Status and Headers as arguments.  It is expected to return a generator that produces the response -- including the Status line and Headers -- to be send to the client."""

    def __init__(self, reactor, port, generatorFactory, timeout=1, recvSize=RECVSIZE, prio=None, sok=None, maxConnections=None, errorHandler=None, compressResponse=False, bindAddress=None):
        self._reactor = reactor
        self._port = port
        self._bindAddress = bindAddress
        self._generatorFactory = generatorFactory
        self._timeout = timeout
        self._recvSize = recvSize
        self._prio = prio
        self._sok = sok
        self._maxConnections = maxConnections
        self._errorHandler = errorHandler
        self._compressResponse = compressResponse

    def listen(self):
        self._acceptor = Acceptor(
            reactor=self._reactor,
            port=self._port,
            sinkFactory=lambda sok: HttpHandler(
                reactor=self._reactor,
                sok=sok,
                generatorFactory=self._generatorFactory,
                timeout=self._timeout,
                recvSize=self._recvSize,
                prio=self._prio,
                maxConnections=self._maxConnections,
                errorHandler=self._errorHandler,
                compressResponse=self._compressResponse
            ),
            prio=self._prio,
            sok=self._sok,
            bindAddress=self._bindAddress)

    def setMaxConnections(self, m):
        self._maxConnections = m

    def shutdown(self):
        self._acceptor.shutdown()
Beispiel #5
0
 def listen(self):
     self._acceptor = Acceptor(
         reactor=self._reactor,
         port=self._port,
         sinkFactory=lambda sok: HttpHandler(
             reactor=self._reactor,
             sok=sok,
             generatorFactory=self._generatorFactory,
             timeout=self._timeout,
             recvSize=self._recvSize,
             prio=self._prio,
             maxConnections=self._maxConnections,
             errorHandler=self._errorHandler,
             compressResponse=self._compressResponse
         ),
         prio=self._prio,
         sok=self._sok,
         bindAddress=self._bindAddress)
Beispiel #6
0
    def listen(self):
        # This should have been a SSLAcceptor ...
        if self._sok == None:
            def verify_cb(conn, cert, errnum, depth, ok):
                # This obviously has to be updated
                print 'Got certificate: %s' % cert.get_subject()
                return ok

            # Initialize context
            ctx = SSL.Context(SSL.SSLv23_METHOD)
            ctx.set_session_id('weightless:%s:%s' % (time(), randint(1024,4096)))
            ctx.set_options(SSL.OP_NO_SSLv2)
            ctx.set_verify(SSL.VERIFY_PEER, verify_cb) # Demand a certificate
            ctx.use_privatekey_file(self._keyfile)
            ctx.use_certificate_file(self._certfile)

            # Set up server
            self._sok = SSL.Connection(ctx, socket())
            self._sok.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
            self._sok.setsockopt(SOL_SOCKET, SO_LINGER, pack('ii', 0, 0))
            self._sok.bind(('0.0.0.0' if self._bindAddress is None else self._bindAddress, self._port))
            self._sok.listen(127)

        self._acceptor = Acceptor(
            reactor=self._reactor,
            port=self._port,
            sinkFactory=lambda sok: HttpsHandler(
                reactor=self._reactor,
                sok=sok,
                generatorFactory=self._generatorFactory,
                timeout=self._timeout,
                recvSize=self._recvSize,
                prio=self._prio,
                maxConnections=self._maxConnections,
                errorHandler=self._errorHandler,
                compressResponse=self._compressResponse
            ),
            prio=self._prio,
            sok=self._sok,
            bindAddress=self._bindAddress)
class HttpsServer(object):
    """Factory that creates a HTTP server listening on port, calling generatorFactory for each new connection.  When a client does not send a valid HTTP request, it is disconnected after timeout seconds. The generatorFactory is called with the HTTP Status and Headers as arguments.  It is expected to return a generator that produces the response -- including the Status line and Headers -- to be send to the client."""
    def __init__(self,
                 reactor,
                 port,
                 generatorFactory,
                 timeout=1,
                 recvSize=RECVSIZE,
                 prio=None,
                 sok=None,
                 certfile='',
                 keyfile='',
                 maxConnections=None,
                 errorHandler=None,
                 compressResponse=False,
                 bindAddress=None):
        self._reactor = reactor
        self._port = port
        self._bindAddress = bindAddress
        self._generatorFactory = generatorFactory
        self._timeout = timeout
        self._recvSize = recvSize
        self._prio = prio
        self._sok = sok
        self._certfile = certfile
        self._keyfile = keyfile
        self._maxConnections = maxConnections
        self._errorHandler = errorHandler
        self._compressResponse = compressResponse

    def listen(self):
        # This should have been a SSLAcceptor ...
        if self._sok == None:

            def verify_cb(conn, cert, errnum, depth, ok):
                # This obviously has to be updated
                print 'Got certificate: %s' % cert.get_subject()
                return ok

            # Initialize context
            ctx = SSL.Context(SSL.SSLv23_METHOD)
            ctx.set_session_id('weightless:%s:%s' %
                               (time(), randint(1024, 4096)))
            ctx.set_options(SSL.OP_NO_SSLv2)
            ctx.set_verify(SSL.VERIFY_PEER, verify_cb)  # Demand a certificate
            ctx.use_privatekey_file(self._keyfile)
            ctx.use_certificate_file(self._certfile)

            # Set up server
            self._sok = SSL.Connection(ctx, socket())
            self._sok.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
            self._sok.setsockopt(SOL_SOCKET, SO_LINGER, pack('ii', 0, 0))
            self._sok.bind(
                ('0.0.0.0' if self._bindAddress is None else self._bindAddress,
                 self._port))
            self._sok.listen(127)

        self._acceptor = Acceptor(reactor=self._reactor,
                                  port=self._port,
                                  sinkFactory=lambda sok: HttpsHandler(
                                      reactor=self._reactor,
                                      sok=sok,
                                      generatorFactory=self._generatorFactory,
                                      timeout=self._timeout,
                                      recvSize=self._recvSize,
                                      prio=self._prio,
                                      maxConnections=self._maxConnections,
                                      errorHandler=self._errorHandler,
                                      compressResponse=self._compressResponse),
                                  prio=self._prio,
                                  sok=self._sok,
                                  bindAddress=self._bindAddress)

    def setMaxConnections(self, m):
        self._maxConnections = m

    def shutdown(self):
        self._acceptor.shutdown()
Beispiel #8
0
class HttpsServer(object):
    """Factory that creates a HTTP server listening on port, calling generatorFactory for each new connection.  When a client does not send a valid HTTP request, it is disconnected after timeout seconds. The generatorFactory is called with the HTTP Status and Headers as arguments.  It is expected to return a generator that produces the response -- including the Status line and Headers -- to be send to the client."""

    def __init__(self, reactor, port, generatorFactory, timeout=1, recvSize=RECVSIZE, prio=None, sok=None, certfile='', keyfile='', maxConnections=None, errorHandler=None, compressResponse=False, bindAddress=None):
        self._reactor = reactor
        self._port = port
        self._bindAddress = bindAddress
        self._generatorFactory = generatorFactory
        self._timeout = timeout
        self._recvSize = recvSize
        self._prio = prio
        self._sok = sok
        self._certfile = certfile
        self._keyfile = keyfile
        self._maxConnections = maxConnections
        self._errorHandler = errorHandler
        self._compressResponse = compressResponse

    def listen(self):
        # This should have been a SSLAcceptor ...
        if self._sok == None:
            def verify_cb(conn, cert, errnum, depth, ok):
                # This obviously has to be updated
                print 'Got certificate: %s' % cert.get_subject()
                return ok

            # Initialize context
            ctx = SSL.Context(SSL.SSLv23_METHOD)
            ctx.set_session_id('weightless:%s:%s' % (time(), randint(1024,4096)))
            ctx.set_options(SSL.OP_NO_SSLv2)
            ctx.set_verify(SSL.VERIFY_PEER, verify_cb) # Demand a certificate
            ctx.use_privatekey_file(self._keyfile)
            ctx.use_certificate_file(self._certfile)

            # Set up server
            self._sok = SSL.Connection(ctx, socket())
            self._sok.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
            self._sok.setsockopt(SOL_SOCKET, SO_LINGER, pack('ii', 0, 0))
            self._sok.bind(('0.0.0.0' if self._bindAddress is None else self._bindAddress, self._port))
            self._sok.listen(127)

        self._acceptor = Acceptor(
            reactor=self._reactor,
            port=self._port,
            sinkFactory=lambda sok: HttpsHandler(
                reactor=self._reactor,
                sok=sok,
                generatorFactory=self._generatorFactory,
                timeout=self._timeout,
                recvSize=self._recvSize,
                prio=self._prio,
                maxConnections=self._maxConnections,
                errorHandler=self._errorHandler,
                compressResponse=self._compressResponse
            ),
            prio=self._prio,
            sok=self._sok,
            bindAddress=self._bindAddress)

    def setMaxConnections(self, m):
        self._maxConnections = m

    def shutdown(self):
        self._acceptor.shutdown()