diff --git a/bin/netsvc.py b/bin/netsvc.py index 0a9bfa53e2e..872b3f4c9a5 100644 --- a/bin/netsvc.py +++ b/bin/netsvc.py @@ -198,16 +198,13 @@ class GenericXMLRPCRequestHandler: import traceback try: n=self.path.split("/")[-1] -# print "TERP-CALLING:",n,method,params s=LocalService(n) m=getattr(s,method) s._service._response=None r=m(*params) res=s._service._response if res!=None: -# print "RESPONSE FOUND" r=res -# print "TERP-RETURN :",r return r except Exception,e: logger = Logger() @@ -262,13 +259,10 @@ class HttpDaemon(threading.Thread): else: self.server.socket.shutdown(2) self.server.socket.close() -# self.server.socket.close() -# del self.server def run(self): self.server.register_introspection_functions() -# self.server.serve_forever() self.running = True while self.running: self.server.handle_request() @@ -307,8 +301,7 @@ class TinySocketClientThread(threading.Thread): res=s._service._response if res!=None: r=res - result = r - ts.mysend(result) + ts.mysend(r) except Exception, e: logger = Logger() logger.notifyChannel("web-services", LOG_ERROR, 'Exception in call: ' + reduce(lambda x, y: x+y, traceback.format_exc())) @@ -327,8 +320,6 @@ class TinySocketClientThread(threading.Thread): return False def stop(self): self.running = False -# self.sock.shutdown(socket.SHUT_RDWR) -# self.sock.close() class TinySocketServerThread(threading.Thread): def __init__(self, interface, port, secure=False): @@ -346,14 +337,10 @@ class TinySocketServerThread(threading.Thread): try: self.running = True while self.running: - #accept connections from outside (clientsocket, address) = self.socket.accept() - #now do something with the clientsocket - #in this case, we'll pretend this is a threaded server ct = TinySocketClientThread(clientsocket, self.threads) ct.start() self.threads.append(ct) -# print "threads size:", len(self.threads) self.socket.close() except Exception, e: self.socket.close() diff --git a/bin/tiny_socket.py b/bin/tiny_socket.py index 52690d09c1b..545462d5c06 100644 --- a/bin/tiny_socket.py +++ b/bin/tiny_socket.py @@ -2,6 +2,11 @@ import socket import cPickle import marshal +class Myexception(Exception): + def __init__(self, faultCode, faultString): + self.faultCode = faultCode + self.faultString = faultString + class mysocket: def __init__(self, sock=None): if sock is None: @@ -10,8 +15,11 @@ class mysocket: else: self.sock = sock self.sock.settimeout(60) - def connect(self, host, port): - self.sock.connect((host, port)) + def connect(self, host, port=False): + if not port: + protocol, buf = host.split('//') + host, port = buf.split(':') + self.sock.connect((host, int(port))) def disconnect(self): self.sock.shutdown(socket.SHUT_RDWR) self.sock.close() @@ -19,6 +27,7 @@ class mysocket: msg = cPickle.dumps(msg) size = len(msg) self.sock.send('%8d' % size) + self.sock.send(exception and "1" or "0") totalsent = 0 while totalsent < size: sent = self.sock.send(msg[totalsent:]) @@ -33,6 +42,11 @@ class mysocket: raise RuntimeError, "socket connection broken" buf += chunk size = int(buf) + buf = self.sock.recv(1) + if buf != "0": + exception = buf + else: + exception = False msg = '' while len(msg) < size: chunk = self.sock.recv(size-len(msg)) @@ -41,6 +55,8 @@ class mysocket: msg = msg + chunk res = cPickle.loads(msg) if isinstance(res,Exception): + if exception: + raise Myexception(exception, str(res)) raise res else: return res