[telepathy-gabble/master] add IPv6 sockets support
Guillaume Desmottes
guillaume.desmottes at collabora.co.uk
Fri Apr 3 09:26:28 PDT 2009
---
src/ft-channel.c | 32 ++++++++++++++++++++
.../twisted/file-transfer/file_transfer_helper.py | 11 +++++--
2 files changed, 40 insertions(+), 3 deletions(-)
diff --git a/src/ft-channel.c b/src/ft-channel.c
index 0dec244..b747f8a 100644
--- a/src/ft-channel.c
+++ b/src/ft-channel.c
@@ -468,6 +468,14 @@ gabble_file_transfer_channel_constructor (GType type,
g_hash_table_insert (self->priv->available_socket_types,
GUINT_TO_POINTER (TP_SOCKET_ADDRESS_TYPE_IPV4), socket_access);
+ /* Socket_Address_Type_IPv6 */
+ socket_access = g_array_sized_new (FALSE, FALSE,
+ sizeof (TpSocketAccessControl), 1);
+ access_control = TP_SOCKET_ACCESS_CONTROL_LOCALHOST;
+ g_array_append_val (socket_access, access_control);
+ g_hash_table_insert (self->priv->available_socket_types,
+ GUINT_TO_POINTER (TP_SOCKET_ADDRESS_TYPE_IPV6), socket_access);
+
gabble_signal_connect_weak (self->priv->connection->presence_cache,
"presences-updated", G_CALLBACK (connection_presences_updated_cb), obj);
@@ -1687,6 +1695,30 @@ setup_local_socket (GabbleFileTransferChannel *self,
1, gibber_listener_get_port (self->priv->listener),
G_MAXUINT);
}
+ else if (address_type == TP_SOCKET_ADDRESS_TYPE_IPV6)
+ {
+ int ret;
+
+ ret = gibber_listener_listen_tcp_loopback_af (self->priv->listener, 0,
+ GIBBER_AF_IPV6, &error);
+ if (!ret)
+ {
+ DEBUG ("Error listening on socket: %s", error->message);
+ g_error_free (error);
+ return FALSE;
+ }
+
+ self->priv->socket_address = tp_g_value_slice_new (
+ TP_STRUCT_TYPE_SOCKET_ADDRESS_IPV6);
+ g_value_take_boxed (self->priv->socket_address,
+ dbus_g_type_specialized_construct (
+ TP_STRUCT_TYPE_SOCKET_ADDRESS_IPV6));
+
+ dbus_g_type_struct_set (self->priv->socket_address,
+ 0, "::1",
+ 1, gibber_listener_get_port (self->priv->listener),
+ G_MAXUINT);
+ }
else
{
g_assert_not_reached ();
diff --git a/tests/twisted/file-transfer/file_transfer_helper.py b/tests/twisted/file-transfer/file_transfer_helper.py
index ba73584..d66f3aa 100644
--- a/tests/twisted/file-transfer/file_transfer_helper.py
+++ b/tests/twisted/file-transfer/file_transfer_helper.py
@@ -133,6 +133,8 @@ class FileTransferTest(object):
return socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
elif self.address_type == cs.SOCKET_ADDRESS_TYPE_IPV4:
return socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+ elif self.address_type == cs.SOCKET_ADDRESS_TYPE_IPV6:
+ return socket.socket(socket.AF_INET6, socket.SOCK_STREAM)
else:
assert False
@@ -191,7 +193,8 @@ class ReceiveFileTest(FileTransferTest):
assert props[cs.FT_DATE] == self.file.date
assert props[cs.FT_AVAILABLE_SOCKET_TYPES] == \
{cs.SOCKET_ADDRESS_TYPE_UNIX: [cs.SOCKET_ACCESS_CONTROL_LOCALHOST],
- cs.SOCKET_ADDRESS_TYPE_IPV4: [cs.SOCKET_ACCESS_CONTROL_LOCALHOST]}, \
+ cs.SOCKET_ADDRESS_TYPE_IPV4: [cs.SOCKET_ACCESS_CONTROL_LOCALHOST],
+ cs.SOCKET_ADDRESS_TYPE_IPV6: [cs.SOCKET_ACCESS_CONTROL_LOCALHOST]}, \
props[cs.FT_AVAILABLE_SOCKET_TYPES]
assert props[cs.FT_TRANSFERRED_BYTES] == 0
assert props[cs.FT_INITIAL_OFFSET] == 0
@@ -331,7 +334,8 @@ class SendFileTest(FileTransferTest):
assert props[cs.FT_DATE] == self.file.date
assert props[cs.FT_AVAILABLE_SOCKET_TYPES] == \
{cs.SOCKET_ADDRESS_TYPE_UNIX: [cs.SOCKET_ACCESS_CONTROL_LOCALHOST],
- cs.SOCKET_ADDRESS_TYPE_IPV4: [cs.SOCKET_ACCESS_CONTROL_LOCALHOST]}, \
+ cs.SOCKET_ADDRESS_TYPE_IPV4: [cs.SOCKET_ACCESS_CONTROL_LOCALHOST],
+ cs.SOCKET_ADDRESS_TYPE_IPV6: [cs.SOCKET_ACCESS_CONTROL_LOCALHOST]}, \
props[cs.FT_AVAILABLE_SOCKET_TYPES]
assert props[cs.FT_TRANSFERRED_BYTES] == 0
assert props[cs.FT_INITIAL_OFFSET] == 0
@@ -413,6 +417,7 @@ def exec_file_transfer_test(test_cls):
BytestreamSIFallbackS5WrongHash]:
for addr_type, access_control, access_control_param in [
(cs.SOCKET_ADDRESS_TYPE_UNIX, cs.SOCKET_ACCESS_CONTROL_LOCALHOST, ""),
- (cs.SOCKET_ADDRESS_TYPE_IPV4, cs.SOCKET_ACCESS_CONTROL_LOCALHOST, "")]:
+ (cs.SOCKET_ADDRESS_TYPE_IPV4, cs.SOCKET_ACCESS_CONTROL_LOCALHOST, ""),
+ (cs.SOCKET_ADDRESS_TYPE_IPV6, cs.SOCKET_ACCESS_CONTROL_LOCALHOST, "")]:
test = test_cls(bytestream_cls, addr_type, access_control, access_control_param)
exec_test(test.test)
--
1.5.6.5
More information about the telepathy-commits
mailing list