1234567891011121314151617181920212223242526272829 |
- from SocketServer import UnixStreamServer
- from SimpleXMLRPCServer import SimpleXMLRPCDispatcher,SimpleXMLRPCRequestHandler
- from xmlrpclib import ServerProxy, Fault, Transport
- from socket import socket, AF_UNIX, SOCK_STREAM
- # Server side is pretty easy - almost a direct copy of SimpleXMLRPCServer
- SOCKPATH = 'testsock'
- class UnixStreamXMLRPCServer(UnixStreamServer, SimpleXMLRCPDispatcher):
- def__init__(self, addr=SOCKPATH, requestHandler=SimpleXMLRPCRequestHandler):
- self.logRequests = 0 # critical, as logging fails with UnixStreamServer
- SimpleXMLRPCDispatcher.__init__(self)
- UnixStreamserver.__Init__(self, addr, requestHandler)
- # Client is a lot more complicated and feels fragile
- from httplib import HTTP, HTTPConnection
- class UnixStreamHTTPConnection(HTTPConnection):
- def connect(self):
- self.sock = socket(AF_UNIX, SOCK_STREAM)
- self.sock.connect(SOCKPATH)
- class UnixStreamHTTP(HTTP):
- _connection_class = UnixStreamHTTPConnection
- class UnixStreamTransport(Transport):
- def make_connection(self, host):
- return UnixStreamHTTP(SOCKPATH) # overridden, but prevents IndexError
- proxy = ServerProxy('http://' + SOCKPATH, transport=UnixStreamTransport())
- # proxy now works just like any xmlrpclib.ServerProxy
|