Change in vdsm[master]: XMLRPCServer: make XMLRPCServer able to listen on ipv6 addre...

mhuntxu at gmail.com mhuntxu at gmail.com
Tue Jan 29 18:55:02 UTC 2013


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 <mhuntxu at gmail.com>
---
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 <mhuntxu at gmail.com>


More information about the vdsm-patches mailing list