[Zope-Checkins] SVN: Zope/branches/2.13/ Backport IPv6 changes from trunk

Hanno Schlichting hannosch at hannosch.eu
Sun Apr 3 12:39:36 EDT 2011


Log message for revision 121227:
  Backport IPv6 changes from trunk
  

Changed:
  U   Zope/branches/2.13/doc/CHANGES.rst
  U   Zope/branches/2.13/sources.cfg
  U   Zope/branches/2.13/src/ZServer/datatypes.py
  U   Zope/branches/2.13/src/ZServer/medusa/http_server.py
  U   Zope/branches/2.13/src/ZServer/tests/test_config.py
  U   Zope/branches/2.13/versions.cfg

-=-
Modified: Zope/branches/2.13/doc/CHANGES.rst
===================================================================
--- Zope/branches/2.13/doc/CHANGES.rst	2011-04-03 16:26:36 UTC (rev 121226)
+++ Zope/branches/2.13/doc/CHANGES.rst	2011-04-03 16:39:36 UTC (rev 121227)
@@ -23,6 +23,8 @@
 Features Added
 ++++++++++++++
 
+- Add preliminary IPv6 support to ZServer.
+
 - Updated to Zope Toolkit 1.0.2.
 
 - Updated distributions:
@@ -31,6 +33,7 @@
   - Products.BTreeFolder2 = 2.13.3
   - Products.ZCatalog = 2.13.8
   - python-gettext = 1.1.1
+  - ZConfig = 2.9.0
 
 2.13.5 (2011-02-23)
 -------------------

Modified: Zope/branches/2.13/sources.cfg
===================================================================
--- Zope/branches/2.13/sources.cfg	2011-04-03 16:26:36 UTC (rev 121226)
+++ Zope/branches/2.13/sources.cfg	2011-04-03 16:39:36 UTC (rev 121227)
@@ -22,3 +22,4 @@
 zExceptions = svn ^/zExceptions/trunk
 ZODB3 = svn ^/ZODB/trunk
 ZopeUndo = svn ^/ZopeUndo/trunk
+ZConfig = svn ^/ZConfig/trunk

Modified: Zope/branches/2.13/src/ZServer/datatypes.py
===================================================================
--- Zope/branches/2.13/src/ZServer/datatypes.py	2011-04-03 16:26:36 UTC (rev 121226)
+++ Zope/branches/2.13/src/ZServer/datatypes.py	2011-04-03 16:39:36 UTC (rev 121227)
@@ -35,7 +35,9 @@
             ip = socket.gethostbyname(defaulthost)
             self._set_default_host(defaulthost, ip)
         else:
-            self.ip = socket.gethostbyname(self.host)
+            address_info = socket.getaddrinfo(self.host, self.port)
+            ips = [info[4][0] for info in address_info]
+            self.ip = ips[0]
         self.dnsresolver = dnsresolver
         self.module = module
         self.cgienv = env

Modified: Zope/branches/2.13/src/ZServer/medusa/http_server.py
===================================================================
--- Zope/branches/2.13/src/ZServer/medusa/http_server.py	2011-04-03 16:26:36 UTC (rev 121226)
+++ Zope/branches/2.13/src/ZServer/medusa/http_server.py	2011-04-03 16:39:36 UTC (rev 121227)
@@ -542,8 +542,13 @@
         self.ip = ip
         self.port = port
         asyncore.dispatcher.__init__ (self)
-        self.create_socket (socket.AF_INET, socket.SOCK_STREAM)
         
+        if ':' in ip:
+            socket_type = socket.AF_INET6
+        else:
+            socket_type = socket.AF_INET
+        self.create_socket (socket_type, socket.SOCK_STREAM)
+        
         self.handlers = []
         
         if not logger_object:
@@ -555,7 +560,10 @@
         # lower this to 5 if your OS complains
         self.listen (1024)
         
-        host, port = self.socket.getsockname()
+        name = self.socket.getsockname()
+        host = name[0]
+        port = name[1]
+
         if not ip:
             self.log_info('Computing default hostname', 'warning')
             try:

Modified: Zope/branches/2.13/src/ZServer/tests/test_config.py
===================================================================
--- Zope/branches/2.13/src/ZServer/tests/test_config.py	2011-04-03 16:26:36 UTC (rev 121226)
+++ Zope/branches/2.13/src/ZServer/tests/test_config.py	2011-04-03 16:39:36 UTC (rev 121227)
@@ -134,6 +134,22 @@
         self.assertEqual(server.port, 9381)
         server.close()
 
+    def test_http_over_ipv6(self):
+        factory = self.load_factory("""\
+            <http-server>
+              address [::1]:81
+            </http-server>
+            """)
+        self.assert_(isinstance(factory,
+                                ZServer.datatypes.HTTPServerFactory))
+        self.assertEqual(factory.host, "::1")
+        self.assertEqual(factory.port, 81)
+        self.check_prepare(factory)
+        server = factory.create()
+        self.assertEqual(server.ip, '::1')
+        self.assertEqual(server.port, 9381)
+        server.close()
+    
     def test_http_factory_defaulthost(self):
         factory = self.load_factory("""\
             <http-server>

Modified: Zope/branches/2.13/versions.cfg
===================================================================
--- Zope/branches/2.13/versions.cfg	2011-04-03 16:26:36 UTC (rev 121226)
+++ Zope/branches/2.13/versions.cfg	2011-04-03 16:39:36 UTC (rev 121227)
@@ -35,6 +35,7 @@
 mechanize = 0.2.3
 unittest2 = 0.5.1
 python-gettext = 1.1.1
+ZConfig = 2.9.0
 ZODB3 = 3.10.2
 zope.testing = 3.9.4
 



More information about the Zope-Checkins mailing list