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

------------------------------------------------------------
revno: 3714
revision-id: [EMAIL PROTECTED]
parent: [EMAIL PROTECTED]
parent: [EMAIL PROTECTED]
committer: Canonical.com Patch Queue Manager <[EMAIL PROTECTED]>
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: [EMAIL PROTECTED]
    parent: [EMAIL PROTECTED]
    committer: Jelmer Vernooij <[EMAIL PROTECTED]>
    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: [EMAIL PROTECTED]
    parent: [EMAIL PROTECTED]
    committer: Jelmer Vernooij <[EMAIL PROTECTED]>
    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: [EMAIL PROTECTED]
    parent: [EMAIL PROTECTED]
    parent: [EMAIL PROTECTED]
    committer: Jelmer Vernooij <[EMAIL PROTECTED]>
    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: [EMAIL PROTECTED]
    parent: [EMAIL PROTECTED]
    committer: Jelmer Vernooij <[EMAIL PROTECTED]>
    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: [EMAIL PROTECTED]
    parent: [EMAIL PROTECTED]
    committer: Jelmer Vernooij <[EMAIL PROTECTED]>
    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()


-- 
bazaar-commits mailing list
[email protected]
https://lists.ubuntu.com/mailman/listinfo/bazaar-commits

Reply via email to