-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 diff -uNr gajim-0.10.1/src/common/connection_handlers.py gajim-0.10.1-new/src/common/connection_handlers.py - --- gajim-0.10.1/src/common/connection_handlers.py 2006-06-05 14:03:08.000000000 +0200 +++ gajim-0.10.1-new/src/common/connection_handlers.py 2006-06-30 05:08:18.000000000 +0200 @@ -33,6 +33,7 @@ from common import helpers from common import gajim from common import i18n +from ipv6addr import ipv6addrlist _ = i18n._ STATUS_LIST = ['offline', 'connecting', 'online', 'chat', 'away', 'xa', 'dnd', @@ -187,7 +188,16 @@ query.setNamespace(common.xmpp.NS_BYTESTREAM) query.setAttr('mode', 'tcp') query.setAttr('sid', file_props['sid']) - - streamhost = query.setTag('streamhost') + # IPv6 go first + if socket.has_ipv6: + for ipv6addr in ipv6addrlist(): + streamhost = common.xmpp.Node(tag = 'streamhost') + query.addChild(node=streamhost) + streamhost.setAttr('port', unicode(port)) + streamhost.setAttr('host', ipv6addr) + streamhost.setAttr('jid', sender) + streamhost = common.xmpp.Node(tag = 'streamhost') + query.addChild(node=streamhost) streamhost.setAttr('port', unicode(port)) streamhost.setAttr('host', ft_override_host_to_send) streamhost.setAttr('jid', sender) diff -uNr gajim-0.10.1/src/common/socks5.py gajim-0.10.1-new/src/common/socks5.py - --- gajim-0.10.1/src/common/socks5.py 2006-06-05 14:03:08.000000000 +0200 +++ gajim-0.10.1-new/src/common/socks5.py 2006-06-30 05:14:10.000000000 +0200 @@ -803,13 +803,21 @@ self.fd = -1 def bind(self): - - self._serv = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + if socket.has_ipv6: + family = socket.AF_INET6 + addr_any = '::' + else: + family = socket.AF_INET + addr_any = '0.0.0.0' + self._serv = socket.socket(family, socket.SOCK_STREAM) self._serv.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) self._serv.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1) self._serv.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1) + if socket.has_ipv6: + self._serv.setsockopt(socket.IPPROTO_IPV6, socket.IPV6_V6ONLY, 0) # will fail when port as busy, or we don't have rights to bind try: - - self._serv.bind(('0.0.0.0', self.port)) + self._serv.bind((addr_any, self.port)) except Exception, e: # unable to bind, show error dialog return None diff -uNr gajim-0.10.1/src/ipv6addr.py gajim-0.10.1-new/src/ipv6addr.py - --- gajim-0.10.1/src/ipv6addr.py 1970-01-01 01:00:00.000000000 +0100 +++ gajim-0.10.1-new/src/ipv6addr.py 2006-06-30 05:15:24.000000000 +0200 @@ -0,0 +1,43 @@ +import struct,sys + +ADDRFILE = '/proc/net/if_inet6' + +class ipv6addrlist(list): + def __init__(self): + if sys.platform[:-1] == 'linux' : self.getLinux() + elif sys.platform[:-1] == 'freebsd': self.getFreeBSD() + elif sys.platform == 'win32': self.getWindows() + + def getFreeBSD(self): + return + + def getWindows(self): + return + + def getLinux(self): + try: + f = open(ADDRFILE, 'r') + + l = f.readline() + while l: + addr = l.split() + + # global scope addresses only + if addr[3] != '00': + l = f.readline() + continue + + # split by four characters + addr=struct.unpack('4s4s4s4s4s4s4s4s', addr[0]) + self.append(':'.join(addr)) + + l = f.readline() + except IOError, e: + self[:] = [] + return None + + +if __name__ == '__main__': + A = ipv6addrlist() + for a in A: + print a -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.2.2 (GNU/Linux) iD8DBQFEpQJ6NdzY8sm9K9wRAutLAKCN7ihaTCUo9+PvWdk8t2lnUqV8lQCfQgSx l7178LkjwvkV7ShMXnESNAI= =q4Vs -----END PGP SIGNATURE-----