Commit 7948d099 authored by Hanno Schlichting's avatar Hanno Schlichting

Backport IPv6 changes from trunk

parent b494f26a
...@@ -23,6 +23,8 @@ Bugs Fixed ...@@ -23,6 +23,8 @@ Bugs Fixed
Features Added Features Added
++++++++++++++ ++++++++++++++
- Add preliminary IPv6 support to ZServer.
- Updated to Zope Toolkit 1.0.2. - Updated to Zope Toolkit 1.0.2.
- Updated distributions: - Updated distributions:
...@@ -31,6 +33,7 @@ Features Added ...@@ -31,6 +33,7 @@ Features Added
- Products.BTreeFolder2 = 2.13.3 - Products.BTreeFolder2 = 2.13.3
- Products.ZCatalog = 2.13.8 - Products.ZCatalog = 2.13.8
- python-gettext = 1.1.1 - python-gettext = 1.1.1
- ZConfig = 2.9.0
2.13.5 (2011-02-23) 2.13.5 (2011-02-23)
------------------- -------------------
......
...@@ -22,3 +22,4 @@ tempstorage = svn ^/tempstorage/trunk ...@@ -22,3 +22,4 @@ tempstorage = svn ^/tempstorage/trunk
zExceptions = svn ^/zExceptions/trunk zExceptions = svn ^/zExceptions/trunk
ZODB3 = svn ^/ZODB/trunk ZODB3 = svn ^/ZODB/trunk
ZopeUndo = svn ^/ZopeUndo/trunk ZopeUndo = svn ^/ZopeUndo/trunk
ZConfig = svn ^/ZConfig/trunk
...@@ -35,7 +35,9 @@ class ServerFactory: ...@@ -35,7 +35,9 @@ class ServerFactory:
ip = socket.gethostbyname(defaulthost) ip = socket.gethostbyname(defaulthost)
self._set_default_host(defaulthost, ip) self._set_default_host(defaulthost, ip)
else: 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.dnsresolver = dnsresolver
self.module = module self.module = module
self.cgienv = env self.cgienv = env
......
...@@ -542,7 +542,12 @@ class http_server (asyncore.dispatcher): ...@@ -542,7 +542,12 @@ class http_server (asyncore.dispatcher):
self.ip = ip self.ip = ip
self.port = port self.port = port
asyncore.dispatcher.__init__ (self) 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 = [] self.handlers = []
...@@ -555,7 +560,10 @@ class http_server (asyncore.dispatcher): ...@@ -555,7 +560,10 @@ class http_server (asyncore.dispatcher):
# lower this to 5 if your OS complains # lower this to 5 if your OS complains
self.listen (1024) self.listen (1024)
host, port = self.socket.getsockname() name = self.socket.getsockname()
host = name[0]
port = name[1]
if not ip: if not ip:
self.log_info('Computing default hostname', 'warning') self.log_info('Computing default hostname', 'warning')
try: try:
......
...@@ -134,6 +134,22 @@ class ZServerConfigurationTestCase(BaseTest, WarningInterceptor): ...@@ -134,6 +134,22 @@ class ZServerConfigurationTestCase(BaseTest, WarningInterceptor):
self.assertEqual(server.port, 9381) self.assertEqual(server.port, 9381)
server.close() 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): def test_http_factory_defaulthost(self):
factory = self.load_factory("""\ factory = self.load_factory("""\
<http-server> <http-server>
......
...@@ -35,6 +35,7 @@ manuel = 1.1.1 ...@@ -35,6 +35,7 @@ manuel = 1.1.1
mechanize = 0.2.3 mechanize = 0.2.3
unittest2 = 0.5.1 unittest2 = 0.5.1
python-gettext = 1.1.1 python-gettext = 1.1.1
ZConfig = 2.9.0
ZODB3 = 3.10.2 ZODB3 = 3.10.2
zope.testing = 3.9.4 zope.testing = 3.9.4
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment