CLIENT-SERVER: improve netrpc
bzr revid: ced-228717f183c1bf3b42dbe1e9df452bde0fb3645c
This commit is contained in:
parent
cd498105b9
commit
840953821b
|
@ -242,8 +242,9 @@ if HAS_SSL:
|
|||
else:
|
||||
pass
|
||||
|
||||
class HttpDaemon(object):
|
||||
class HttpDaemon(threading.Thread):
|
||||
def __init__(self, interface,port, secure=False):
|
||||
threading.Thread.__init__(self)
|
||||
self.__port=port
|
||||
self.__interface=interface
|
||||
if secure and HAS_SSL:
|
||||
|
@ -255,14 +256,20 @@ class HttpDaemon(object):
|
|||
pass
|
||||
|
||||
def stop(self):
|
||||
self.running = False
|
||||
self.server.socket.shutdown(socket.SHUT_RDWR)
|
||||
self.server.socket.close()
|
||||
self.server.socket.close()
|
||||
del self.server
|
||||
# self.server.socket.close()
|
||||
# del self.server
|
||||
|
||||
def start(self):
|
||||
def run(self):
|
||||
self.server.register_introspection_functions()
|
||||
|
||||
self.server.serve_forever()
|
||||
# self.server.serve_forever()
|
||||
self.running = True
|
||||
while self.running:
|
||||
self.server.handle_request()
|
||||
return True
|
||||
|
||||
# If the server need to be run recursively
|
||||
#
|
||||
|
@ -346,7 +353,6 @@ class TinySocketServerThread(threading.Thread):
|
|||
# print "threads size:", len(self.threads)
|
||||
self.socket.close()
|
||||
except Exception, e:
|
||||
print "exception server", e
|
||||
self.socket.close()
|
||||
return False
|
||||
|
||||
|
|
|
@ -40,13 +40,13 @@ def login(db, login, password):
|
|||
if res:
|
||||
return res[0]
|
||||
else:
|
||||
raise _('Bad username or password')
|
||||
raise Exception('Bad username or password')
|
||||
|
||||
def check_super(passwd):
|
||||
if passwd == tools.config['admin_passwd']:
|
||||
return True
|
||||
else:
|
||||
raise 'AccessDenied'
|
||||
raise Exception('AccessDenied')
|
||||
|
||||
def check(db, uid, passwd):
|
||||
#FIXME: this should be db dependent
|
||||
|
@ -57,7 +57,7 @@ def check(db, uid, passwd):
|
|||
res = cr.fetchone()[0]
|
||||
cr.close()
|
||||
if not bool(res):
|
||||
raise 'AccessDenied'
|
||||
raise Exception('AccessDenied')
|
||||
if res:
|
||||
_uid_cache[uid] = passwd
|
||||
return bool(res)
|
||||
|
@ -68,5 +68,5 @@ def access(db, uid, passwd, sec_level, ids):
|
|||
res = cr.fetchone()
|
||||
cr.close()
|
||||
if not res:
|
||||
raise _('Bad username or password')
|
||||
raise Exception('Bad username or password')
|
||||
return res[0]
|
||||
|
|
|
@ -66,10 +66,10 @@ logger = netsvc.Logger()
|
|||
# import the tools module so that the commandline parameters are parsed
|
||||
#-----------------------------------------------------------------------
|
||||
import tools
|
||||
import time
|
||||
|
||||
if sys.platform=='win32':
|
||||
import mx.DateTime
|
||||
import time
|
||||
mx.DateTime.strptime = lambda x,y: mx.DateTime.mktime(time.strptime(x, y))
|
||||
|
||||
#os.chdir(tools.file_path_root)
|
||||
|
@ -200,35 +200,44 @@ if tools.config["stop_after_init"]:
|
|||
#----------------------------------------------------------
|
||||
# Launch Server
|
||||
#----------------------------------------------------------
|
||||
try:
|
||||
port = int(tools.config["port"])
|
||||
except Exception:
|
||||
logger.notifyChannel("init", netsvc.LOG_ERROR, "invalid port '%s'!" % (tools.config["port"],))
|
||||
sys.exit(1)
|
||||
interface = tools.config["interface"]
|
||||
secure = tools.config["secure"]
|
||||
|
||||
httpd = netsvc.HttpDaemon(interface,port, secure)
|
||||
if tools.config['xmlrpc']:
|
||||
try:
|
||||
port = int(tools.config["port"])
|
||||
except Exception:
|
||||
logger.notifyChannel("init", netsvc.LOG_ERROR, "invalid port '%s'!" % (tools.config["port"],))
|
||||
sys.exit(1)
|
||||
interface = tools.config["interface"]
|
||||
secure = tools.config["secure"]
|
||||
|
||||
httpd = netsvc.HttpDaemon(interface,port, secure)
|
||||
|
||||
if tools.config["xmlrpc"]:
|
||||
xml_gw = netsvc.xmlrpc.RpcGateway('web-services')
|
||||
httpd.attach("/xmlrpc", xml_gw )
|
||||
logger.notifyChannel("web-services", netsvc.LOG_INFO, "starting XML-RPC services, port "+str(port))
|
||||
|
||||
#
|
||||
#if tools.config["soap"]:
|
||||
# soap_gw = netsvc.xmlrpc.RpcGateway('web-services')
|
||||
# httpd.attach("/soap", soap_gw )
|
||||
# logger.notifyChannel("web-services", netsvc.LOG_INFO, 'starting SOAP services, port '+str(port))
|
||||
#
|
||||
if not (netsvc.HAS_SSL and tools.config['secure']):
|
||||
logger.notifyChannel("web-services", netsvc.LOG_INFO, "You are not using the SSL layer")
|
||||
else:
|
||||
logger.notifyChannel("web-services", netsvc.LOG_INFO, "You are using the SSL Layer")
|
||||
|
||||
if tools.config["xmlrpc"]:
|
||||
xml_gw = netsvc.xmlrpc.RpcGateway('web-services')
|
||||
httpd.attach("/xmlrpc", xml_gw )
|
||||
logger.notifyChannel("web-services", netsvc.LOG_INFO, "starting XML-RPC services, port "+str(port))
|
||||
|
||||
#
|
||||
#if tools.config["soap"]:
|
||||
# soap_gw = netsvc.xmlrpc.RpcGateway('web-services')
|
||||
# httpd.attach("/soap", soap_gw )
|
||||
# logger.notifyChannel("web-services", netsvc.LOG_INFO, 'starting SOAP services, port '+str(port))
|
||||
#
|
||||
if not (netsvc.HAS_SSL and tools.config['secure']):
|
||||
logger.notifyChannel("web-services", netsvc.LOG_INFO, "You are not using the SSL layer")
|
||||
else:
|
||||
logger.notifyChannel("web-services", netsvc.LOG_INFO, "You are using the SSL Layer")
|
||||
|
||||
|
||||
tinySocket = netsvc.TinySocketServerThread(interface, 8085, False)
|
||||
logger.notifyChannel("web-services", netsvc.LOG_INFO, "starting TinySocket service, port "+str(8085))
|
||||
if tools.config['netrpc']:
|
||||
try:
|
||||
netport = int(tools.config["netport"])
|
||||
except Exception:
|
||||
logger.notifyChannel("init", netsvc.LOG_ERROR, "invalid port '%s'!" % (tools.config["netport"],))
|
||||
sys.exit(1)
|
||||
netinterface = tools.config["netinterface"]
|
||||
|
||||
tinySocket = netsvc.TinySocketServerThread(netinterface, netport, False)
|
||||
logger.notifyChannel("web-services", netsvc.LOG_INFO, "starting netrpc service, port "+str(netport))
|
||||
|
||||
def handler(signum, frame):
|
||||
from tools import config
|
||||
|
@ -245,10 +254,16 @@ if config['pidfile']:
|
|||
pidtext="%d" % (os.getpid())
|
||||
fd.write(pidtext)
|
||||
fd.close()
|
||||
|
||||
signal.signal(signal.SIGINT, handler)
|
||||
signal.signal(signal.SIGTERM, handler)
|
||||
|
||||
logger.notifyChannel("web-services", netsvc.LOG_INFO, 'the server is running, waiting for connections...')
|
||||
tinySocket.start()
|
||||
httpd.start()
|
||||
dispatcher.run()
|
||||
if tools.config['netrpc']:
|
||||
tinySocket.start()
|
||||
if tools.config['xmlrpc']:
|
||||
httpd.start()
|
||||
#dispatcher.run()
|
||||
|
||||
while True:
|
||||
time.sleep(1)
|
||||
|
|
|
@ -36,6 +36,8 @@ class configmanager(object):
|
|||
'verbose': False,
|
||||
'interface': '', # this will bind the server to all interfaces
|
||||
'port': '8069',
|
||||
'netinterface': '',
|
||||
'netport': '8070',
|
||||
'db_host': False,
|
||||
'db_port': False,
|
||||
'db_name': 'terp',
|
||||
|
@ -71,6 +73,10 @@ class configmanager(object):
|
|||
|
||||
parser.add_option("-n", "--interface", dest="interface", help="specify the TCP IP address")
|
||||
parser.add_option("-p", "--port", dest="port", help="specify the TCP port")
|
||||
parser.add_option("--net_interface", dest="netinterface", help="specify the TCP IP address for netrpc")
|
||||
parser.add_option("--net_port", dest="netport", help="specify the TCP port for netrpc")
|
||||
parser.add_option("--no-netrpc", dest="netrpc", action="store_false", default=True, help="disable netrpc")
|
||||
parser.add_option("--no-xmlrpc", dest="xmlrpc", action="store_false", default=True, help="disable xmlrpc")
|
||||
|
||||
parser.add_option("-i", "--init", dest="init", help="init a module (use \"all\" for all modules)")
|
||||
parser.add_option("--without-demo", dest="without_demo", help="load demo data for a module (use \"all\" for all modules)", default=False)
|
||||
|
@ -131,13 +137,13 @@ class configmanager(object):
|
|||
self.options['pidfile'] = False
|
||||
|
||||
for arg in ('interface', 'port', 'db_name', 'db_user', 'db_password', 'db_host',
|
||||
'db_port', 'logfile', 'pidfile', 'secure', 'smtp_server', 'price_accuracy'):
|
||||
'db_port', 'logfile', 'pidfile', 'secure', 'smtp_server', 'price_accuracy', 'netinterface', 'netport'):
|
||||
if getattr(opt, arg):
|
||||
self.options[arg] = getattr(opt, arg)
|
||||
|
||||
for arg in ('language', 'translate_out', 'translate_in',
|
||||
'upgrade', 'verbose', 'debug_mode',
|
||||
'stop_after_init', 'without_demo'):
|
||||
'stop_after_init', 'without_demo', 'netrpc', 'xmlrpc'):
|
||||
self.options[arg] = getattr(opt, arg)
|
||||
|
||||
if not self.options['root_path'] or self.options['root_path']=='None':
|
||||
|
|
Loading…
Reference in New Issue