Argh... the code wrapped... I thought I made it narrow enough. Here is the same code (sorry), but now actually pasteable.
--- import SimpleXMLRPCServer, xmlrpclib, threading, sys def GetCallerNameAndArgs(StackDepth = 1): """This function returns a tuple (a,b) where: a = The name of the calling function b = A dictionary with the arg values in order """ f = sys._getframe(StackDepth + 1) #+1 to account for this call callerName = f.f_code.co_name #get the arg count for the frame... argCount = f.f_code.co_argcount #get a tuple with the local vars in the frame (args first)... localVars = f.f_code.co_varnames #now get the tuple of just the args... argNames = localVars[:argCount] #now to make a dictionary of args and values... argDict = {} for key in argNames: argDict[key] = f.f_locals[key] return (callerName, argDict) def GetRpcClientConnectionInfo(): #Move up the stack to the location to figure out client info... requestHandler = GetCallerNameAndArgs(4)[1]["self"] usedSocket = requestHandler.connection return str(usedSocket.getpeername()) def StartSession(): return "RPC call came in on: %s" % GetRpcClientConnectionInfo() class DaemonicServerLaunchThread(threading.Thread): def __init__(self, RpcServer, **kwargs): threading.Thread.__init__(self, **kwargs) self.setDaemon(1) self.server = RpcServer def run(self): self.server.serve_forever() rpcServer = SimpleXMLRPCServer.SimpleXMLRPCServer(("", 12390), \ logRequests = False) rpcServer.register_function(StartSession) slt = DaemonicServerLaunchThread(rpcServer) slt.start() sp = xmlrpclib.ServerProxy("http://localhost:12390";) print sp.StartSession() -- http://mail.python.org/mailman/listinfo/python-list