ignore address-related errors for getaddrinfo. Fixes #7611

cleanup of jingle_transport.py
This commit is contained in:
Fedor Brunner 2013-12-27 12:16:58 +01:00
parent 4a360397fe
commit 4759ef235a
1 changed files with 45 additions and 34 deletions

View File

@ -178,30 +178,39 @@ class JingleTransportSocks5(JingleTransport):
return
if not self.connection:
return
local_ip_cand = []
port = int(gajim.config.get('file_transfers_port'))
#type preference of connection type. XEP-0260 section 2.2
type_preference = 126
c = {'host': self.connection.peerhost[0]}
c['candidate_id'] = self.connection.connection.getAnID()
c['port'] = port
c['type'] = 'direct'
c['jid'] = self.ourjid
c['priority'] = (2**16) * type_preference
priority = (2**16) * type_preference
hosts = set()
local_ip_cand = []
c = {'host': self.connection.peerhost[0],
'candidate_id': self.connection.connection.getAnID(),
'port': port,
'type': 'direct',
'jid': self.ourjid,
'priority': priority}
hosts.add(self.connection.peerhost[0])
local_ip_cand.append(c)
for addr in socket.getaddrinfo(socket.gethostname(), None):
if not addr[4][0] in local_ip_cand and not addr[4][0].startswith('127'):
c = {'host': addr[4][0]}
c['candidate_id'] = self.connection.connection.getAnID()
c['port'] = port
c['type'] = 'direct'
c['jid'] = self.ourjid
c['priority'] = (2**16) * type_preference
c['initiator'] = self.file_props.sender
c['target'] = self.file_props.receiver
try:
for addrinfo in socket.getaddrinfo(socket.gethostname(), None):
addr = addrinfo[4][0]
if not addr in hosts and not addr.startswith('127'):
c = {'host': addr,
'candidate_id': self.connection.connection.getAnID(),
'port': port,
'type': 'direct',
'jid': self.ourjid,
'priority': priority,
'initiator': self.file_props.sender,
'target': self.file_props.receiver}
hosts.add(addr)
local_ip_cand.append(c)
except socket.gaierror:
pass # ignore address-related errors for getaddrinfo
self._add_candidates(local_ip_cand)
@ -209,6 +218,7 @@ class JingleTransportSocks5(JingleTransport):
if not self.connection:
return
type_preference = 126
priority = (2**16) * type_preference
additional_ip_cand = []
port = int(gajim.config.get('file_transfers_port'))
ft_add_hosts = gajim.config.get('ft_add_hosts_to_send')
@ -216,14 +226,14 @@ class JingleTransportSocks5(JingleTransport):
if ft_add_hosts:
hosts = [e.strip() for e in ft_add_hosts.split(',')]
for h in hosts:
c = {'host': h}
c['candidate_id'] = self.connection.connection.getAnID()
c['port'] = port
c['type'] = 'direct'
c['jid'] = self.ourjid
c['priority'] = (2**16) * type_preference
c['initiator'] = self.file_props.sender
c['target'] = self.file_props.receiver
c = {'host': h,
'candidate_id': self.connection.connection.getAnID(),
'port': port,
'type': 'direct',
'jid': self.ourjid,
'priority': priority,
'initiator': self.file_props.sender,
'target': self.file_props.receiver}
additional_ip_cand.append(c)
self._add_candidates(additional_ip_cand)
@ -232,6 +242,7 @@ class JingleTransportSocks5(JingleTransport):
if not self.connection:
return
type_preference = 10
priority = (2**16) * type_preference
proxy_cand = []
socks5conn = self.connection
proxyhosts = socks5conn._get_file_transfer_proxies_from_config(self.file_props)
@ -240,14 +251,14 @@ class JingleTransportSocks5(JingleTransport):
self.file_props.proxyhosts = proxyhosts
for proxyhost in proxyhosts:
c = {'host': proxyhost['host']}
c['candidate_id'] = self.connection.connection.getAnID()
c['port'] = int(proxyhost['port'])
c['type'] = 'proxy'
c['jid'] = proxyhost['jid']
c['priority'] = (2**16) * type_preference
c['initiator'] = self.file_props.sender
c['target'] = self.file_props.receiver
c = {'host': proxyhost['host'],
'candidate_id': self.connection.connection.getAnID(),
'port': int(proxyhost['port']),
'type': 'proxy',
'jid': proxyhost['jid'],
'priority': priority,
'initiator': self.file_props.sender,
'target': self.file_props.receiver}
proxy_cand.append(c)
self._add_candidates(proxy_cand)