Ticket #1969: gajim-ipv6-filetransfer.diff.asc

File gajim-ipv6-filetransfer.diff.asc, 3.6 kB (added by steelman # poczta ' fm, 2 years ago)

enable IPv6 filetransfers

Line 
1-----BEGIN PGP SIGNED MESSAGE-----
2Hash: SHA1
3
4diff -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)
33diff -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
60diff -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-----
108Version: GnuPG v1.4.2.2 (GNU/Linux)
109
110iD8DBQFEpQJ6NdzY8sm9K9wRAutLAKCN7ihaTCUo9+PvWdk8t2lnUqV8lQCfQgSx
111l7178LkjwvkV7ShMXnESNAI=
112=q4Vs
113-----END PGP SIGNATURE-----