[Telepathy-commits] [telepathy-salut/master] gibber_bytestream_direct_initiate: try all priv->addresses if the first one does not work (implement the "FIXME")

Alban Crequy alban.crequy at collabora.co.uk
Mon Nov 24 09:12:38 PST 2008


---
 lib/gibber/gibber-bytestream-direct.c |   24 ++++++++++++++----------
 1 files changed, 14 insertions(+), 10 deletions(-)

diff --git a/lib/gibber/gibber-bytestream-direct.c b/lib/gibber/gibber-bytestream-direct.c
index 4a7a52d..772b05e 100644
--- a/lib/gibber/gibber-bytestream-direct.c
+++ b/lib/gibber/gibber-bytestream-direct.c
@@ -629,6 +629,8 @@ gibber_bytestream_direct_initiate (GibberBytestreamIface *bytestream)
   } addr;
   GibberBytestreamDirectPrivate *priv =
       GIBBER_BYTESTREAM_DIRECT_GET_PRIVATE (self);
+  int i;
+  gboolean ret;
 
   DEBUG ("Called.");
 
@@ -642,19 +644,21 @@ gibber_bytestream_direct_initiate (GibberBytestreamIface *bytestream)
       return FALSE;
     }
 
-  /* Use the first address for now
-   * FIXME: it should try the other addresses of the array if the first does
-   * not work. */
-  addr.storage = g_array_index (priv->addresses, struct sockaddr_storage, 0);
-
-  addr.in6.sin6_port = g_htons ((guint16) priv->portnum);
-
   ll_transport = gibber_ll_transport_new ();
   set_transport (self, GIBBER_TRANSPORT (ll_transport));
-  gibber_ll_transport_open_sockaddr (ll_transport,
-      &addr.storage, NULL);
 
-  return TRUE;
+  ret = FALSE;
+  for (i = 0 ; i < priv->addresses->len && !ret ; i++)
+    {
+      addr.storage = g_array_index (priv->addresses, struct sockaddr_storage,
+          i);
+      addr.in6.sin6_port = g_htons ((guint16) priv->portnum);
+
+      ret = gibber_ll_transport_open_sockaddr (ll_transport, &addr.storage,
+          NULL);
+  }
+
+  return ret;
 }
 
 static void
-- 
1.5.6.5




More information about the Telepathy-commits mailing list