# Authors: # Kees Bos # Martin von Loewis - python 3 port # # See the LICENSE file for legal information regarding use of this file. """xmlrpcserver.py - simple XML RPC server supporting TLS.""" try: from SimpleXMLRPCServer import SimpleXMLRPCServer, SimpleXMLRPCRequestHandler except ImportError: # Python 3 from xmlrpc.server import SimpleXMLRPCServer, SimpleXMLRPCRequestHandler from .tlssocketservermixin import TLSSocketServerMixIn class TLSXMLRPCRequestHandler(SimpleXMLRPCRequestHandler): """XMLRPCRequestHandler using TLS.""" # Redefine the setup method (see SocketServer.StreamRequestHandler) def setup(self): """Setup the connection for TLS.""" self.connection = self.request if getattr(self, 'timeout', None) is not None: # Python 2.7 self.connection.settimeout(self.timeout) self.rfile = self.connection.makefile('rb', self.rbufsize) self.wfile = self.connection.makefile('wb', self.wbufsize) def do_POST(self): """Handle the HTTPS POST request.""" SimpleXMLRPCRequestHandler.do_POST(self) try: # shut down the connection self.connection.shutdown() except: pass class TLSXMLRPCServer(TLSSocketServerMixIn, SimpleXMLRPCServer): """Simple XML-RPC server using TLS.""" def __init__(self, addr, *args, **kwargs): if not args and not 'requestHandler' in kwargs: kwargs['requestHandler'] = TLSXMLRPCRequestHandler SimpleXMLRPCServer.__init__(self, addr, *args, **kwargs) class MultiPathTLSXMLRPCServer(TLSXMLRPCServer): """Multipath XML-RPC Server using TLS.""" def __init__(self, addr, *args, **kwargs): TLSXMLRPCServer.__init__(addr, *args, **kwargs) self.dispatchers = {} self.allow_none = allow_none self.encoding = encoding