[telepathy-salut/master] gibber_oob_file_transfer_offer: create a HTTP server listenning on IPv6 interfaces if the XMPP connection is a IP6 one

Guillaume Desmottes guillaume.desmottes at collabora.co.uk
Wed Apr 1 08:29:49 PDT 2009


---
 lib/gibber/gibber-oob-file-transfer.c |   41 ++++++++++++++++++++++++++++++++-
 1 files changed, 40 insertions(+), 1 deletions(-)

diff --git a/lib/gibber/gibber-oob-file-transfer.c b/lib/gibber/gibber-oob-file-transfer.c
index fcfecad..97a11c2 100644
--- a/lib/gibber/gibber-oob-file-transfer.c
+++ b/lib/gibber/gibber-oob-file-transfer.c
@@ -677,7 +677,46 @@ gibber_oob_file_transfer_offer (GibberFileTransfer *ft)
   /* FIXME we should have only a single server */
   if (self->priv->server == NULL)
     {
-      self->priv->server = soup_server_new (NULL, NULL);
+      /* FIXME: libsoup can't listen on IPv4 and IPv6 interfaces at the same
+       * time. http://bugzilla.gnome.org/show_bug.cgi?id=522519
+       * We have to check which IP will be send when creating the stanza. */
+        GibberXmppConnection *connection;
+        struct sockaddr_storage name_addr;
+        socklen_t name_addr_len = sizeof (name_addr);
+
+        g_object_get (GIBBER_FILE_TRANSFER (self), "connection", &connection,
+            NULL);
+        if (connection->transport == NULL)
+          {
+            g_set_error (&error, GIBBER_FILE_TRANSFER_ERROR,
+                GIBBER_FILE_TRANSFER_ERROR_NOT_CONNECTED, "Null transport");
+            gibber_file_transfer_emit_error (GIBBER_FILE_TRANSFER (self),
+                error);
+            g_error_free (error);
+            return;
+          }
+
+        gibber_transport_get_sockaddr (connection->transport, &name_addr,
+            &name_addr_len);
+        g_object_unref (connection);
+
+        if (name_addr.ss_family == AF_INET6)
+          {
+            /* IPv6 server */
+            SoupAddress *addr;
+
+            addr = soup_address_new_any (SOUP_ADDRESS_FAMILY_IPV6, 0);
+            self->priv->server = soup_server_new (SOUP_SERVER_INTERFACE,
+                addr, NULL);
+
+            g_object_unref (addr);
+          }
+        else
+          {
+            /* IPv4 server */
+            self->priv->server = soup_server_new (NULL, NULL);
+          }
+
       soup_server_run_async (self->priv->server);
     }
 
-- 
1.5.6.5




More information about the telepathy-commits mailing list