| 1 | -----BEGIN PGP SIGNED MESSAGE----- |
|---|
| 2 | Hash: SHA1 |
|---|
| 3 | |
|---|
| 4 | diff -uNr gajim-0.10.1/src/common/connection_handlers.py gajim-0.10.1-new/src/common/connection_handlers.py |
|---|
| 5 | - --- gajim-0.10.1/src/common/connection_handlers.py 2006-06-05 14:03:08.000000000 +0200 |
|---|
| 6 | +++ gajim-0.10.1-new/src/common/connection_handlers.py 2006-06-30 05:08:18.000000000 +0200 |
|---|
| 7 | @@ -33,6 +33,7 @@ |
|---|
| 8 | from common import helpers |
|---|
| 9 | from common import gajim |
|---|
| 10 | from common import i18n |
|---|
| 11 | +from ipv6addr import ipv6addrlist |
|---|
| 12 | _ = i18n._ |
|---|
| 13 | |
|---|
| 14 | STATUS_LIST = ['offline', 'connecting', 'online', 'chat', 'away', 'xa', 'dnd', |
|---|
| 15 | @@ -187,7 +188,16 @@ |
|---|
| 16 | query.setNamespace(common.xmpp.NS_BYTESTREAM) |
|---|
| 17 | query.setAttr('mode', 'tcp') |
|---|
| 18 | query.setAttr('sid', file_props['sid']) |
|---|
| 19 | - - streamhost = query.setTag('streamhost') |
|---|
| 20 | + # IPv6 go first |
|---|
| 21 | + if socket.has_ipv6: |
|---|
| 22 | + for ipv6addr in ipv6addrlist(): |
|---|
| 23 | + streamhost = common.xmpp.Node(tag = 'streamhost') |
|---|
| 24 | + query.addChild(node=streamhost) |
|---|
| 25 | + streamhost.setAttr('port', unicode(port)) |
|---|
| 26 | + streamhost.setAttr('host', ipv6addr) |
|---|
| 27 | + streamhost.setAttr('jid', sender) |
|---|
| 28 | + streamhost = common.xmpp.Node(tag = 'streamhost') |
|---|
| 29 | + query.addChild(node=streamhost) |
|---|
| 30 | streamhost.setAttr('port', unicode(port)) |
|---|
| 31 | streamhost.setAttr('host', ft_override_host_to_send) |
|---|
| 32 | streamhost.setAttr('jid', sender) |
|---|
| 33 | diff -uNr gajim-0.10.1/src/common/socks5.py gajim-0.10.1-new/src/common/socks5.py |
|---|
| 34 | - --- gajim-0.10.1/src/common/socks5.py 2006-06-05 14:03:08.000000000 +0200 |
|---|
| 35 | +++ gajim-0.10.1-new/src/common/socks5.py 2006-06-30 05:14:10.000000000 +0200 |
|---|
| 36 | @@ -803,13 +803,21 @@ |
|---|
| 37 | self.fd = -1 |
|---|
| 38 | |
|---|
| 39 | def bind(self): |
|---|
| 40 | - - self._serv = socket.socket(socket.AF_INET, socket.SOCK_STREAM) |
|---|
| 41 | + if socket.has_ipv6: |
|---|
| 42 | + family = socket.AF_INET6 |
|---|
| 43 | + addr_any = '::' |
|---|
| 44 | + else: |
|---|
| 45 | + family = socket.AF_INET |
|---|
| 46 | + addr_any = '0.0.0.0' |
|---|
| 47 | + self._serv = socket.socket(family, socket.SOCK_STREAM) |
|---|
| 48 | self._serv.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) |
|---|
| 49 | self._serv.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1) |
|---|
| 50 | self._serv.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1) |
|---|
| 51 | + if socket.has_ipv6: |
|---|
| 52 | + self._serv.setsockopt(socket.IPPROTO_IPV6, socket.IPV6_V6ONLY, 0) |
|---|
| 53 | # will fail when port as busy, or we don't have rights to bind |
|---|
| 54 | try: |
|---|
| 55 | - - self._serv.bind(('0.0.0.0', self.port)) |
|---|
| 56 | + self._serv.bind((addr_any, self.port)) |
|---|
| 57 | except Exception, e: |
|---|
| 58 | # unable to bind, show error dialog |
|---|
| 59 | return None |
|---|
| 60 | diff -uNr gajim-0.10.1/src/ipv6addr.py gajim-0.10.1-new/src/ipv6addr.py |
|---|
| 61 | - --- gajim-0.10.1/src/ipv6addr.py 1970-01-01 01:00:00.000000000 +0100 |
|---|
| 62 | +++ gajim-0.10.1-new/src/ipv6addr.py 2006-06-30 05:15:24.000000000 +0200 |
|---|
| 63 | @@ -0,0 +1,43 @@ |
|---|
| 64 | +import struct,sys |
|---|
| 65 | + |
|---|
| 66 | +ADDRFILE = '/proc/net/if_inet6' |
|---|
| 67 | + |
|---|
| 68 | +class ipv6addrlist(list): |
|---|
| 69 | + def __init__(self): |
|---|
| 70 | + if sys.platform[:-1] == 'linux' : self.getLinux() |
|---|
| 71 | + elif sys.platform[:-1] == 'freebsd': self.getFreeBSD() |
|---|
| 72 | + elif sys.platform == 'win32': self.getWindows() |
|---|
| 73 | + |
|---|
| 74 | + def getFreeBSD(self): |
|---|
| 75 | + return |
|---|
| 76 | + |
|---|
| 77 | + def getWindows(self): |
|---|
| 78 | + return |
|---|
| 79 | + |
|---|
| 80 | + def getLinux(self): |
|---|
| 81 | + try: |
|---|
| 82 | + f = open(ADDRFILE, 'r') |
|---|
| 83 | + |
|---|
| 84 | + l = f.readline() |
|---|
| 85 | + while l: |
|---|
| 86 | + addr = l.split() |
|---|
| 87 | + |
|---|
| 88 | + # global scope addresses only |
|---|
| 89 | + if addr[3] != '00': |
|---|
| 90 | + l = f.readline() |
|---|
| 91 | + continue |
|---|
| 92 | + |
|---|
| 93 | + # split by four characters |
|---|
| 94 | + addr=struct.unpack('4s4s4s4s4s4s4s4s', addr[0]) |
|---|
| 95 | + self.append(':'.join(addr)) |
|---|
| 96 | + |
|---|
| 97 | + l = f.readline() |
|---|
| 98 | + except IOError, e: |
|---|
| 99 | + self[:] = [] |
|---|
| 100 | + return None |
|---|
| 101 | + |
|---|
| 102 | + |
|---|
| 103 | +if __name__ == '__main__': |
|---|
| 104 | + A = ipv6addrlist() |
|---|
| 105 | + for a in A: |
|---|
| 106 | + print a |
|---|
| 107 | -----BEGIN PGP SIGNATURE----- |
|---|
| 108 | Version: GnuPG v1.4.2.2 (GNU/Linux) |
|---|
| 109 | |
|---|
| 110 | iD8DBQFEpQJ6NdzY8sm9K9wRAutLAKCN7ihaTCUo9+PvWdk8t2lnUqV8lQCfQgSx |
|---|
| 111 | l7178LkjwvkV7ShMXnESNAI= |
|---|
| 112 | =q4Vs |
|---|
| 113 | -----END PGP SIGNATURE----- |
|---|