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