Hunt Xu has uploaded a new change for review. Change subject: XMLRPCServer: make XMLRPCServer able to listen on ipv6 addresses ......................................................................
XMLRPCServer: make XMLRPCServer able to listen on ipv6 addresses SimpleXMLRPCServer is derived from SocketServer.TCPServer of which the default address_family is socket.AF_INET, that makes it could only listen on ipv4 connections. We simply wrap it, extending its ability on ipv6 networks. Change-Id: I50ab0ba59ac696da2d992afe453c6d3ceb111e94 Signed-off-by: huntxu <[email protected]> --- M vdsm/SecureXMLRPCServer.py M vdsm/utils.py 2 files changed, 36 insertions(+), 6 deletions(-) git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/20/11520/1 diff --git a/vdsm/SecureXMLRPCServer.py b/vdsm/SecureXMLRPCServer.py index 78c4b72..fecfc54 100644 --- a/vdsm/SecureXMLRPCServer.py +++ b/vdsm/SecureXMLRPCServer.py @@ -28,7 +28,7 @@ """SecureXMLRPCServer.py - simple XML RPC server supporting SSL.""" -import SimpleXMLRPCServer +from vdsm.utils import IPXMLRPCRequestHandler, IPXMLRPCServer import xmlrpclib import ssl import httplib @@ -38,7 +38,7 @@ from M2Crypto import SSL, X509 -SecureXMLRPCRequestHandler = SimpleXMLRPCServer.SimpleXMLRPCRequestHandler +SecureXMLRPCRequestHandler = IPXMLRPCRequestHandler class SSLSocket(object): @@ -118,9 +118,9 @@ return client, address -class SecureXMLRPCServer(SimpleXMLRPCServer.SimpleXMLRPCServer): +class SecureXMLRPCServer(IPXMLRPCServer): def __init__(self, addr, - requestHandler=SimpleXMLRPCServer.SimpleXMLRPCRequestHandler, + requestHandler=SecureXMLRPCRequestHandler, logRequests=True, allow_none=False, encoding=None, bind_and_activate=True, keyfile=None, certfile=None, ca_certs=None, @@ -129,7 +129,7 @@ its self.socket member with ssl. """ - SimpleXMLRPCServer.SimpleXMLRPCServer.__init__( + IPXMLRPCServer.__init__( self, addr, requestHandler, logRequests, allow_none, encoding, bind_and_activate=False) self.socket = SSLServerSocket(raw=self.socket, certfile=certfile, diff --git a/vdsm/utils.py b/vdsm/utils.py index 35338a0..2454edb 100644 --- a/vdsm/utils.py +++ b/vdsm/utils.py @@ -27,6 +27,8 @@ Contains a reverse dictionary pointing from error string to its error code. """ from SimpleXMLRPCServer import SimpleXMLRPCServer +from SimpleXMLRPCServer import SimpleXMLRPCRequestHandler +import socket import SocketServer import threading import os @@ -101,9 +103,37 @@ time.sleep(0.1) +def isIPv6Address(addr): + try: + socket.inet_pton(socket.AF_INET6, str(addr)) + return True + except socket.error: + return False + + +IPXMLRPCRequestHandler = SimpleXMLRPCRequestHandler + + +class IPXMLRPCServer(SimpleXMLRPCServer): + def __init__(self, addr, requestHandler=IPXMLRPCRequestHandler, + logRequests=True, allow_none=False, encoding=None, + bind_and_activate=True): + SimpleXMLRPCServer.__init__(self, addr, requestHandler, + logRequests, allow_none, encoding, + bind_and_activate=False) + if isIPv6Address(addr[0]): + self.socket.close() + self.address_family = socket.AF_INET6 + self.socket = socket.socket(self.address_family, + socket.SOCK_STREAM) + if bind_and_activate: + self.server_bind() + self.server_activate() + + #Threaded version of SimpleXMLRPCServer class SimpleThreadedXMLRPCServer(SocketServer.ThreadingMixIn, - SimpleXMLRPCServer): + IPXMLRPCServer): allow_reuse_address = True -- To view, visit http://gerrit.ovirt.org/11520 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I50ab0ba59ac696da2d992afe453c6d3ceb111e94 Gerrit-PatchSet: 1 Gerrit-Project: vdsm Gerrit-Branch: master Gerrit-Owner: Hunt Xu <[email protected]> _______________________________________________ vdsm-patches mailing list [email protected] https://lists.fedorahosted.org/mailman/listinfo/vdsm-patches
