[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