示例#1
0
def start_service(host, port, bv):
    info("Starting service on {}:{}".format(host, port))
    server = xmlrpc.server.SimpleXMLRPCServer(
        (host, port),
        requestHandler=BinjaGefRequestHandler,
        logRequests=False,
        allow_none=True)
    server.register_introspection_functions()
    server.register_instance(Gef(server, bv))
    dbg("Registered {} functions.".format(len(server.system_listMethods())))
    while True:
        if hasattr(server, "shutdown") and server.shutdown == True: break
        server.handle_request()
    return
示例#2
0
 def run_server():
     server.socket.settimeout(float(1))  # Don't hang if client fails
     server.handle_request()  # First request and attempt at second
     server.handle_request()  # Retried second request
示例#3
0
 def run_server():
     server.socket.settimeout(float(1))
     server.handle_request()
     server.handle_request()
示例#4
0
 def run_server():
     server.socket.settimeout(float(1))  # Don't hang if client fails
     server.handle_request()  # First request and attempt at second
     server.handle_request()  # Retried second request
示例#5
0
 def serve_forever(self, signals=None):
     """
         \param signals which signals will cause normal exit
     """
     if signals is not None:
         for s in signals:
             self._logger.debug("Registering %s for %s signal...", _interrupt_raiser, s)
             signal.signal(s, _interrupt_raiser)
     self._logger.info("Starting %d worker(s) listening on \"%s:%d\"...", self._worker_count, *self._addr)
     with self._hub.context(capacity=self._capacity()):
         class XMLRPCServer(xmlrpc.server.SimpleXMLRPCServer):
             def __init__(self, *args, **kwargs):
                 super(XMLRPCServer, self).__init__(*args, **kwargs)
                 self.request_timeout = False
             def handle_request(self):
                 self.request_timeout = False
                 super(XMLRPCServer, self).handle_request()
             def handle_timeout(self):
                 self.request_timeout = True
         server = XMLRPCServer(addr=self._addr, allow_none=True)
         server.timeout = self._query_interval
         server.register_function(self._add_task, name='add_task')
         self._logger.debug("Starting threads...")
         workers = []
         for i in range(self._worker_count):
             thread = threading.Thread(target=self._worker, args=(i,))
             thread.start()
             workers.append(thread)
         self._logger.debug("%d workers were started.", self._worker_count)
         self._logger.debug("Starting xmlrpc server...")
         try:
             self._logger.debug("Entering task handling loop...")
             while True:
                 if not server.request_timeout:
                     self._logger.debug("Waiting for request...")
                 server.handle_request()
                 if not server.request_timeout:
                     self._logger.debug("Request was handled.")
                 if self._need_registration.is_set():
                     self._logger.debug("Registration is needed...")
                     try:
                         self._logger.debug("Trying to register machine...")
                         self._hub.register_machine(capacity=self._capacity())
                         self._logger.debug("Machine was successfully registered.")
                         self._need_registration.clear()
                     except Exception as e:
                         self._logger.exception("Unable to register due to %s.", e)
                 else:
                     self._logger.debug("Trying to ping...")
                     try:
                         if not self._hub.ping():
                             self._need_registration.set()
                         self._logger.debug("Pinged.")
                     except Exception as e:
                         self._logger.exception("Unable to ping due to %s.", e)
                         self._need_registration.set()
         except (KeyboardInterrupt, _InterruptedError) as e:
             self._logger.debug("Exiting.")
             self._quit.set()
             self._logger.debug("Joining workers...")
             for worker in workers:
                 worker.join()
             self._logger.info("Completed.")