[Telepathy-commits] [telepathy-salut/master] SalutXmppConnectionManager: The port 5298 is preferred to remain compatible with old versions of iChat. Try a few close to it, and if those fail, use a random port.

Alban Crequy alban.crequy at collabora.co.uk
Fri Nov 7 05:10:26 PST 2008


---
 lib/gibber/gibber-xmpp-connection-listener.c |   14 ++++++++++++--
 lib/gibber/gibber-xmpp-connection-listener.h |    2 +-
 src/salut-xmpp-connection-manager.c          |   16 +++++++++++-----
 3 files changed, 24 insertions(+), 8 deletions(-)

diff --git a/lib/gibber/gibber-xmpp-connection-listener.c b/lib/gibber/gibber-xmpp-connection-listener.c
index db0ae22..4880526 100644
--- a/lib/gibber/gibber-xmpp-connection-listener.c
+++ b/lib/gibber/gibber-xmpp-connection-listener.c
@@ -158,13 +158,19 @@ new_connection_cb (GibberListener *listener,
   return TRUE;
 }
 
-gboolean
+/**
+ * port: the port, or 0 to choose a random port
+ *
+ * return: the port on success, or -1 on error
+ */
+int
 gibber_xmpp_connection_listener_listen (GibberXmppConnectionListener *self,
                                         int port,
                                         GError **error)
 {
   GibberXmppConnectionListenerPrivate *priv =
     GIBBER_XMPP_CONNECTION_LISTENER_GET_PRIVATE (self);
+  int ret;
 
   if (priv->listener == NULL)
     {
@@ -173,5 +179,9 @@ gibber_xmpp_connection_listener_listen (GibberXmppConnectionListener *self,
         G_CALLBACK (new_connection_cb), self);
     }
 
-  return gibber_listener_listen_tcp (priv->listener, port, error);
+  ret = gibber_listener_listen_tcp (priv->listener, port, error);
+  if (ret == TRUE)
+    return gibber_listener_get_port (priv->listener);
+
+  return -1;
 }
diff --git a/lib/gibber/gibber-xmpp-connection-listener.h b/lib/gibber/gibber-xmpp-connection-listener.h
index 077f8e5..2f39070 100644
--- a/lib/gibber/gibber-xmpp-connection-listener.h
+++ b/lib/gibber/gibber-xmpp-connection-listener.h
@@ -60,7 +60,7 @@ GType gibber_xmpp_connection_listener_get_type (void);
 GibberXmppConnectionListener *
 gibber_xmpp_connection_listener_new (void);
 
-gboolean
+int
 gibber_xmpp_connection_listener_listen (
     GibberXmppConnectionListener *listener, int port, GError **error);
 
diff --git a/src/salut-xmpp-connection-manager.c b/src/salut-xmpp-connection-manager.c
index 406c847..4e8a501 100644
--- a/src/salut-xmpp-connection-manager.c
+++ b/src/salut-xmpp-connection-manager.c
@@ -1135,11 +1135,15 @@ salut_xmpp_connection_manager_listen (SalutXmppConnectionManager *self,
     SALUT_XMPP_CONNECTION_MANAGER_GET_PRIVATE (self);
   int port;
 
-  for (port = 5298; port < 5400; port++)
+  /* The port 5298 is preferred to remain compatible with old versions of
+   * iChat. Try a few close to it, and if those fail, use a random port. */
+  for (port = 5298; port < 5300; port++)
     {
       GError *e = NULL;
-      if (gibber_xmpp_connection_listener_listen (priv->listener, port,
-            &e))
+      int ret;
+      ret = gibber_xmpp_connection_listener_listen (priv->listener, port, &e);
+
+      if (ret == port)
         break;
 
       if (!g_error_matches (e, GIBBER_LISTENER_ERROR,
@@ -1153,8 +1157,10 @@ salut_xmpp_connection_manager_listen (SalutXmppConnectionManager *self,
       e = NULL;
     }
 
-  if (port >= 5400)
-    return -1;
+  if (port >= 5300)
+    {
+      return gibber_xmpp_connection_listener_listen (priv->listener, 0, error);
+    }
 
   return port;
 }
-- 
1.5.6.5




More information about the Telepathy-commits mailing list