changeset b96a4b734391 in /home/hg/repos/gajim
details:http://hg.gajim.org/gajim?cmd=changeset;node=b96a4b734391 description: send transport info, start "send_file" after receiving transport-info. TODO: implement file transfer complete callback, various session management code for abnormal FT interactions.
diffstat:
src/common/jingle_ft.py | 34 +++++++++++++++++++++++++++++++++- src/common/jingle_transport.py | 3 ++- src/common/protocol/bytestream.py | 8 +------- 3 files changed, 36 insertions(+), 9 deletions(-)
diffs (90 lines):
diff -r 7fb1b00e5f36 -r b96a4b734391 src/common/jingle_ft.py --- a/src/common/jingle_ft.py Sat Jul 03 16:22:47 2010 +0800 +++ b/src/common/jingle_ft.py Mon Jul 05 13:46:53 2010 +0800 @@ -117,7 +117,6 @@
def __on_session_accept(self, stanza, content, error, action): log.info("__on_session_accept") - gajim.socks5queue.send_file(self.file_props, self.session.ourjid)
def __on_session_terminate(self, stanza, content, error, action): log.info("__on_session_terminate") @@ -133,6 +132,7 @@
def __on_transport_info(self, stanza, content, error, action): log.info("__on_transport_info") + gajim.socks5queue.send_file(self.file_props, self.session.ourjid)
def __on_iq_result(self, stanza, content, error, action): log.info("__on_iq_result") @@ -152,7 +152,39 @@ if not listener: return # send error message, notify the user + else: # session-accept iq-result + if not gajim.socks5queue.get_file_props(self.session.ourjid, self.file_props['sid']): + gajim.socks5queue.add_file_props(self.session.ourjid, self.file_props) + gajim.socks5queue.connect_to_hosts(self.session.ourjid, self.file_props['sid'], + self.send_candidate_used, self._on_connect_error) + + def send_candidate_used(self, streamhost): + """ + send candidate-used stanza + """ + log.info("send_candidate_used") + if streamhost is None: + return + + content = xmpp.Node('content') + content.setAttr('creator', 'initiator') + content.setAttr('name', 'file') + + transport = xmpp.Node('transport') + transport.setAttr('xmlns', xmpp.NS_JINGLE_BYTESTREAM) + + candidateused = xmpp.Node('candidate-used') + candidateused.setAttr('cid', streamhost['cid']) + + transport.addChild(node=candidateused) + content.addChild(node=transport)
+ self.session.send_transport_info(content) + + def _on_connect_error(self, to, _id, sid, code=404): + log.info("connect error, sid=" + sid) + return + def _fill_content(self, content): description_node = xmpp.simplexml.Node(tag=xmpp.NS_JINGLE_FILE_TRANSFER + ' description')
diff -r 7fb1b00e5f36 -r b96a4b734391 src/common/jingle_transport.py --- a/src/common/jingle_transport.py Sat Jul 03 16:22:47 2010 +0800 +++ b/src/common/jingle_transport.py Mon Jul 05 13:46:53 2010 +0800 @@ -123,7 +123,8 @@ 'state': 0, 'target': self.ourjid, 'host': candidate['host'], - 'port': candidate['port'] + 'port': candidate['port'], + 'cid': candidate['cid'] } candidates.append(cand)
diff -r 7fb1b00e5f36 -r b96a4b734391 src/common/protocol/bytestream.py --- a/src/common/protocol/bytestream.py Sat Jul 03 16:22:47 2010 +0800 +++ b/src/common/protocol/bytestream.py Mon Jul 05 13:46:53 2010 +0800 @@ -143,13 +143,7 @@ if not session.accepted: session.approve_session() session.approve_content('file') - - if not gajim.socks5queue.get_file_props(session.ourjid, sid): - gajim.socks5queue.add_file_props(session.ourjid, file_props) - gajim.socks5queue.connect_to_hosts(session.ourjid, sid, - lambda streamhost: log.info("connected to" + str(streamhost)), - lambda a, b, c, d: log.info("connect error!" + a + b + c + d)) - return + return
iq = xmpp.Iq(to=unicode(file_props['sender']), typ='result') iq.setAttr('id', file_props['request-id'])