Rev 3714: (Jelmer) Support IPv6 in the smart server. in file:///home/pqm/archives/thelove/bzr/%2Btrunk/

Canonical.com Patch Queue Manager pqm at pqm.ubuntu.com
Fri Sep 19 12:01:35 BST 2008


At file:///home/pqm/archives/thelove/bzr/%2Btrunk/

------------------------------------------------------------
revno: 3714
revision-id: pqm at pqm.ubuntu.com-20080919110131-v81t8izemtywe4vu
parent: pqm at pqm.ubuntu.com-20080919034851-21510mhvx3xwyrta
parent: jelmer at samba.org-20080919101218-w00fsqqxv0zy6j6r
committer: Canonical.com Patch Queue Manager <pqm at pqm.ubuntu.com>
branch nick: +trunk
timestamp: Fri 2008-09-19 12:01:31 +0100
message:
  (Jelmer) Support IPv6 in the smart server.
modified:
  NEWS                           NEWS-20050323055033-4e00b5db738777ff
  bzrlib/smart/medium.py         medium.py-20061103051856-rgu2huy59fkz902q-1
  bzrlib/smart/server.py         server.py-20061110062051-chzu10y32vx8gvur-1
    ------------------------------------------------------------
    revno: 3711.2.3
    revision-id: jelmer at samba.org-20080919101218-w00fsqqxv0zy6j6r
    parent: jelmer at samba.org-20080919005726-sbvjd808xkjbbroe
    committer: Jelmer Vernooij <jelmer at samba.org>
    branch nick: bzr.dev
    timestamp: Fri 2008-09-19 12:12:18 +0200
    message:
      Add comment.
    modified:
      bzrlib/smart/medium.py         medium.py-20061103051856-rgu2huy59fkz902q-1
    ------------------------------------------------------------
    revno: 3711.2.2
    revision-id: jelmer at samba.org-20080919005726-sbvjd808xkjbbroe
    parent: jelmer at samba.org-20080919002853-r47mvu07ldqowbq2
    committer: Jelmer Vernooij <jelmer at samba.org>
    branch nick: bzr.dev
    timestamp: Fri 2008-09-19 02:57:26 +0200
    message:
      Avoid using AI_ADDRCONFIG since it's not portable.
    modified:
      bzrlib/smart/medium.py         medium.py-20061103051856-rgu2huy59fkz902q-1
      bzrlib/smart/server.py         server.py-20061110062051-chzu10y32vx8gvur-1
    ------------------------------------------------------------
    revno: 3711.2.1
    revision-id: jelmer at samba.org-20080919002853-r47mvu07ldqowbq2
    parent: pqm at pqm.ubuntu.com-20080917230446-p0wippqwikt511sp
    parent: jelmer at samba.org-20080830184812-9fcdxoxlrkdk85s8
    committer: Jelmer Vernooij <jelmer at samba.org>
    branch nick: bzr.dev
    timestamp: Fri 2008-09-19 02:28:53 +0200
    message:
      Merge ipv6 changes.
    modified:
      NEWS                           NEWS-20050323055033-4e00b5db738777ff
      bzrlib/smart/medium.py         medium.py-20061103051856-rgu2huy59fkz902q-1
      bzrlib/smart/server.py         server.py-20061110062051-chzu10y32vx8gvur-1
    ------------------------------------------------------------
    revno: 3665.4.2
    revision-id: jelmer at samba.org-20080830184812-9fcdxoxlrkdk85s8
    parent: jelmer at samba.org-20080830163506-wal9a9xcah391p2g
    committer: Jelmer Vernooij <jelmer at samba.org>
    branch nick: ip6
    timestamp: Sat 2008-08-30 20:48:12 +0200
    message:
      Fall through to next available address if previous fails.
    modified:
      bzrlib/smart/medium.py         medium.py-20061103051856-rgu2huy59fkz902q-1
    ------------------------------------------------------------
    revno: 3665.4.1
    revision-id: jelmer at samba.org-20080830163506-wal9a9xcah391p2g
    parent: pqm at pqm.ubuntu.com-20080829062746-ny482m2f2pukdhqt
    committer: Jelmer Vernooij <jelmer at samba.org>
    branch nick: bzr.dev
    timestamp: Sat 2008-08-30 18:35:06 +0200
    message:
      Support IPv6 in the smart server.
    modified:
      NEWS                           NEWS-20050323055033-4e00b5db738777ff
      bzrlib/smart/medium.py         medium.py-20061103051856-rgu2huy59fkz902q-1
      bzrlib/smart/server.py         server.py-20061110062051-chzu10y32vx8gvur-1
=== modified file 'NEWS'
--- a/NEWS	2008-09-19 03:17:09 +0000
+++ b/NEWS	2008-09-19 11:01:31 +0000
@@ -95,6 +95,8 @@
     * Support for GSSAPI authentication when using FTP as documented in 
       RFC2228. (Jelmer Vernooij, #49623)
 
+    * Add support for IPv6 in the smart server. (Jelmer Vernooij, #165014)
+
   IMPROVEMENTS:
 
     * A url like ``log+file:///tmp`` will log all access to that Transport 

=== modified file 'bzrlib/smart/medium.py'
--- a/bzrlib/smart/medium.py	2008-08-14 02:15:31 +0000
+++ b/bzrlib/smart/medium.py	2008-09-19 10:12:18 +0000
@@ -704,7 +704,7 @@
 
 
 # Port 4155 is the default port for bzr://, registered with IANA.
-BZR_DEFAULT_INTERFACE = '0.0.0.0'
+BZR_DEFAULT_INTERFACE = None
 BZR_DEFAULT_PORT = 4155
 
 
@@ -736,15 +736,31 @@
         """Connect this medium if not already connected."""
         if self._connected:
             return
-        self._socket = socket.socket()
-        self._socket.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)
         if self._port is None:
             port = BZR_DEFAULT_PORT
         else:
             port = int(self._port)
         try:
-            self._socket.connect((self._host, port))
-        except socket.error, err:
+            sockaddrs = socket.getaddrinfo(self._host, port, socket.AF_UNSPEC, 
+                socket.SOCK_STREAM, 0, 0)
+        except socket.gaierror, (err_num, err_msg):
+            raise errors.ConnectionError("failed to lookup %s:%d: %s" %
+                    (self._host, port, err_msg))
+        # Initialize err in case there are no addresses returned:
+        err = socket.error("no address found for %s" % self._host)
+        for (family, socktype, proto, canonname, sockaddr) in sockaddrs:
+            try:
+                self._socket = socket.socket(family, socktype, proto)
+                self._socket.setsockopt(socket.IPPROTO_TCP, 
+                                        socket.TCP_NODELAY, 1)
+                self._socket.connect(sockaddr)
+            except socket.error, err:
+                if self._socket is not None:
+                    self._socket.close()
+                self._socket = None
+                continue
+            break
+        if self._socket is None:
             # socket errors either have a (string) or (errno, string) as their
             # args.
             if type(err.args) is str:

=== modified file 'bzrlib/smart/server.py'
--- a/bzrlib/smart/server.py	2008-06-05 22:56:42 +0000
+++ b/bzrlib/smart/server.py	2008-09-19 00:57:26 +0000
@@ -59,13 +59,18 @@
         from socket import error as socket_error
         self._socket_error = socket_error
         self._socket_timeout = socket_timeout
-        self._server_socket = socket.socket()
+        addrs = socket.getaddrinfo(host, port, socket.AF_UNSPEC, 
+            socket.SOCK_STREAM, 0, socket.AI_PASSIVE)[0]
+
+        (family, socktype, proto, canonname, sockaddr) = addrs
+
+        self._server_socket = socket.socket(family, socktype, proto)
         # SO_REUSERADDR has a different meaning on Windows
         if sys.platform != 'win32':
             self._server_socket.setsockopt(socket.SOL_SOCKET,
                 socket.SO_REUSEADDR, 1)
         try:
-            self._server_socket.bind((host, port))
+            self._server_socket.bind(sockaddr)
         except self._socket_error, message:
             raise errors.CannotBindAddress(host, port, message)
         self._sockname = self._server_socket.getsockname()




More information about the bazaar-commits mailing list