changeset d4d017adf294 in /home/hg/repos/gajim details:http://hg.gajim.org/gajim?cmd=changeset;node=d4d017adf294 description: Fixes jingleFT IBB fallback
diffstat: src/common/jingle_content.py | 11 +++++++++++ src/common/jingle_ft.py | 10 ++++++++-- src/common/jingle_session.py | 8 ++------ src/common/protocol/bytestream.py | 7 +++---- src/common/socks5.py | 2 +- src/gajim.py | 4 +++- 6 files changed, 28 insertions(+), 14 deletions(-) diffs (162 lines): diff -r 51c9600fc1f1 -r d4d017adf294 src/common/jingle_content.py --- a/src/common/jingle_content.py Sat Jul 02 00:52:35 2011 +0200 +++ b/src/common/jingle_content.py Tue Jul 05 14:05:16 2011 -0400 @@ -138,6 +138,17 @@ content = self.__content() content.addChild(node=self.transport.make_transport([candidate])) self.session.send_transport_info(content) + + def send_error_candidate(self): + """ + Sends a candidate-error when we can't connect to a candidate. + """ + content = self.__content() + tp = self.transport.make_transport() + tp.addChild(name='candidate-error') + content.addChild(node=tp) + self.session.send_transport_info(content) + def send_description_info(self): content = self.__content() diff -r 51c9600fc1f1 -r d4d017adf294 src/common/jingle_ft.py --- a/src/common/jingle_ft.py Sat Jul 02 00:52:35 2011 +0200 +++ b/src/common/jingle_ft.py Tue Jul 05 14:05:16 2011 -0400 @@ -23,7 +23,6 @@ import xmpp from jingle_content import contents, JingleContent from jingle_transport import JingleTransportICEUDP, JingleTransportSocks5 -from jingle_transport import JingleTransportIBB from common import helpers from common.socks5 import Socks5Receiver from common.connection_handlers_events import FileRequestReceivedEvent @@ -88,6 +87,7 @@ self.session = session self.media = 'file' + def __on_session_initiate(self, stanza, content, error, action): gajim.nec.push_incoming_event(FileRequestReceivedEvent(None, @@ -131,6 +131,9 @@ if not self.weinitiate: # proxy activated from initiator return + if content.getTag('transport').getTag('candidate-error'): + self.session.transport_replace() + return streamhost_cid = content.getTag('transport').getTag('candidate-used').\ getAttr('cid') streamhost_used = None @@ -147,7 +150,7 @@ if proxy['host'] == streamhost_used['host'] and \ proxy['port'] == streamhost_used['port'] and \ proxy['jid'] == streamhost_used['jid']: - streamhost_used = proxy + host_used = proxy break if 'streamhosts' not in self.file_props: self.file_props['streamhosts'] = [] @@ -238,6 +241,9 @@ self.session.send_transport_info(content) def _on_connect_error(self, to, _id, sid, code=404): + if code == 404 and self.file_props['sid'] == sid: + self.send_error_candidate() + log.info('connect error, sid=' + sid) def _fill_content(self, content): diff -r 51c9600fc1f1 -r d4d017adf294 src/common/jingle_session.py --- a/src/common/jingle_session.py Sat Jul 02 00:52:35 2011 +0200 +++ b/src/common/jingle_session.py Tue Jul 05 14:05:16 2011 -0400 @@ -314,7 +314,7 @@ self.__send_error(stanza, 'bad-request') return # FIXME: If we aren't initiated and it's not a session-initiate... - if action != 'session-initiate' and self.state == JingleStates.ended: + if action not in ['session-initiate','session-terminate'] and self.state == JingleStates.ended: self.__send_error(stanza, 'item-not-found', 'unknown-session') return else: @@ -367,7 +367,7 @@ self.__append_contents(jingle) self.__broadcast(stanza, jingle, None, 'transport-replace') self.connection.connection.send(stanza) - #self.collect_iq_id(stanza.getID()) + self.state = JingleStates.pending def __on_transport_replace(self, stanza, jingle, error, action): @@ -599,10 +599,6 @@ def __dispatch_error(self, error=None, text=None, type_=None): - if type_ == 'cancel' and error == 'item-not-found': - # We coudln't connect with sock5stream, we fallback to IBB - self.transport_replace() - return if text: text = '%s (%s)' % (error, text) if type_ != 'modify': diff -r 51c9600fc1f1 -r d4d017adf294 src/common/protocol/bytestream.py --- a/src/common/protocol/bytestream.py Sat Jul 02 00:52:35 2011 +0200 +++ b/src/common/protocol/bytestream.py Tue Jul 05 14:05:16 2011 -0400 @@ -128,7 +128,7 @@ feature.addChild(node=_feature) field = _feature.setField('stream-method') field.setAttr('type', 'list-single') - #field.addOption(xmpp.NS_BYTESTREAM) + field.addOption(xmpp.NS_BYTESTREAM) field.addOption(xmpp.NS_IBB) self.connection.send(iq) @@ -795,8 +795,7 @@ if file_props['seq'] == 65536: file_props['seq'] = 0 self.last_sent_ibb_id = self.connection.send(xmpp.Protocol('iq', - file_props['direction'][1:], payload=[datanode, - self._ampnode])) + file_props['direction'][1:], 'set', payload=[datanode])) current_time = time.time() file_props['elapsed-time'] += current_time - file_props[ 'last-time'] @@ -871,7 +870,7 @@ # look in sending files if sid in self.files_props.keys(): conn.send(stanza.buildReply('result')) - gajim.socks5queue.complete_transfer_cb(self.name, file_props) + gajim.socks5queue.complete_transfer_cb(self.name, self.files_props[sid]) del self.files_props[sid] # look in receiving files elif gajim.socks5queue.get_file_props(self.name, sid): diff -r 51c9600fc1f1 -r d4d017adf294 src/common/socks5.py --- a/src/common/socks5.py Sat Jul 02 00:52:35 2011 +0200 +++ b/src/common/socks5.py Tue Jul 05 14:05:16 2011 -0400 @@ -209,7 +209,7 @@ return # failure_cb exists - this means that it has never been called if 'failure_cb' in file_props and file_props['failure_cb']: - file_props['failure_cb'](streamhost['initiator'], streamhost['id'], + file_props['failure_cb'](streamhost['initiator'], streamhost['idx'], file_props['sid'], code = 404) del(file_props['failure_cb']) diff -r 51c9600fc1f1 -r d4d017adf294 src/gajim.py --- a/src/gajim.py Sat Jul 02 00:52:35 2011 +0200 +++ b/src/gajim.py Tue Jul 05 14:05:16 2011 -0400 @@ -36,11 +36,13 @@ ## from common import demandimport + demandimport.enable() demandimport.ignore += ['gobject._gobject', 'libasyncns', 'i18n', 'logging.NullHandler', 'dbus.glib', 'dbus.service', 'command_system.implementation.standard', 'OpenSSL.SSL', 'OpenSSL.crypto', - 'common.sleepy', 'DLFCN', 'dl', 'xml.sax', 'xml.sax.handler', 'ic'] + 'common.sleepy', 'DLFCN', 'dl', 'xml.sax', 'xml.sax.handler', 'ic' + ,'FileRequestReceivedEvent'] import os import sys _______________________________________________ Commits mailing list Commits@gajim.org http://lists.gajim.org/cgi-bin/listinfo/commits