make jingleFT work when receiver's proxy is used

This commit is contained in:
Yann Leboulanger 2011-11-02 00:09:33 +01:00
parent 8408b17758
commit e4fa96cce3
3 changed files with 28 additions and 10 deletions

View File

@ -387,6 +387,12 @@ class JingleFileTransfer(JingleContent):
if streamhost_used['type'] == 'proxy': if streamhost_used['type'] == 'proxy':
self.file_props['is_a_proxy'] = True self.file_props['is_a_proxy'] = True
if self.weinitiate:
self.file_props['proxy_sender'] = streamhost_used['initiator']
self.file_props['proxy_receiver'] = streamhost_used['target']
else:
self.file_props['proxy_sender'] = streamhost_used['target']
self.file_props['proxy_receiver'] = streamhost_used['initiator']
if not self.weinitiate and streamhost_used['type'] == 'proxy': if not self.weinitiate and streamhost_used['type'] == 'proxy':
r = gajim.socks5queue.readers r = gajim.socks5queue.readers
@ -394,7 +400,14 @@ class JingleFileTransfer(JingleContent):
if r[reader].host == streamhost_used['host'] and \ if r[reader].host == streamhost_used['host'] and \
r[reader].connected: r[reader].connected:
return return
if self.weinitiate and streamhost_used['type'] == 'proxy':
s = gajim.socks5queue.senders
for sender in s:
if s[sender].host == streamhost_used['host'] and \
s[sender].connected:
return
if streamhost_used['type'] == 'proxy': if streamhost_used['type'] == 'proxy':
self.file_props['streamhost-used'] = True self.file_props['streamhost-used'] = True
streamhost_used['sid'] = self.file_props['sid'] streamhost_used['sid'] = self.file_props['sid']
@ -402,11 +415,11 @@ class JingleFileTransfer(JingleContent):
self.file_props['streamhosts'].append(streamhost_used) self.file_props['streamhosts'].append(streamhost_used)
self.file_props['proxyhosts'] = [] self.file_props['proxyhosts'] = []
self.file_props['proxyhosts'].append(streamhost_used) self.file_props['proxyhosts'].append(streamhost_used)
self.file_props['is_a_proxy'] = True
if self.weinitiate:
gajim.socks5queue.idx += 1 gajim.socks5queue.idx += 1
idx = gajim.socks5queue.idx idx = gajim.socks5queue.idx
sockobj = Socks5Sender(gajim.idlequeue, idx, sockobj = Socks5Sender(gajim.idlequeue, idx,
gajim.socks5queue, gajim.socks5queue,
mode='client', mode='client',
_sock=None, _sock=None,
@ -415,6 +428,10 @@ class JingleFileTransfer(JingleContent):
fingerprint=None, fingerprint=None,
connected=False, connected=False,
file_props=self.file_props) file_props=self.file_props)
else:
sockobj = Socks5Receiver(gajim.idlequeue, streamhost_used,
sid=self.file_props['sid'], mode='client',
file_props=self.file_props, fingerprint=None)
sockobj.proxy = True sockobj.proxy = True
sockobj.streamhost = streamhost_used sockobj.streamhost = streamhost_used
gajim.socks5queue.add_sockobj(self.session.connection.name, gajim.socks5queue.add_sockobj(self.session.connection.name,

View File

@ -223,9 +223,6 @@ class JingleTransportSocks5(JingleTransport):
proxyhosts = socks5conn._get_file_transfer_proxies_from_config(self.file_props) proxyhosts = socks5conn._get_file_transfer_proxies_from_config(self.file_props)
if proxyhosts: if proxyhosts:
self.file_props['proxy_receiver'] = unicode(
self.file_props['receiver'])
self.file_props['proxy_sender'] = unicode(self.file_props['sender'])
self.file_props['proxyhosts'] = proxyhosts self.file_props['proxyhosts'] = proxyhosts
for proxyhost in proxyhosts: for proxyhost in proxyhosts:

View File

@ -115,7 +115,7 @@ class SocksQueue:
for proxy in file_props['proxyhosts']: for proxy in file_props['proxyhosts']:
if proxy['host'] == streamhost['host']: if proxy['host'] == streamhost['host']:
self.on_success[file_props['sid']](proxy) self.on_success[file_props['sid']](proxy)
return 2 return 1
return 0 return 0
if 'streamhosts' in file_props: if 'streamhosts' in file_props:
for host in file_props['streamhosts']: for host in file_props['streamhosts']:
@ -154,6 +154,10 @@ class SocksQueue:
idx = self.idx idx = self.idx
self.idx = self.idx + 1 self.idx = self.idx + 1
self.type = 'sender' self.type = 'sender'
if 'type' in streamhost and streamhost['type'] == 'proxy':
file_props['is_a_proxy'] = True
file_props['proxy_sender'] = streamhost['target']
file_props['proxy_receiver'] = streamhost['initiator']
socks5obj = Socks5Sender(self.idlequeue, idx, socks5obj = Socks5Sender(self.idlequeue, idx,
self, mode='client' , _sock=None, self, mode='client' , _sock=None,
host=str(streamhost['host']), port=int(streamhost['port']), host=str(streamhost['host']), port=int(streamhost['port']),