gajim: merged local changes
changeset 86508b573578 in /home/hg/repos/gajim details:http://hg.gajim.org/gajim?cmd=changeset;node=86508b573578 description: merged local changes diffstat: po/kk.po | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) diffs (17 lines): diff -r c105a89bedc7 -r 86508b573578 po/kk.po --- a/po/kk.po Thu Aug 26 16:59:29 2010 +0200 +++ b/po/kk.po Thu Aug 26 17:19:39 2010 +0200 @@ -824,11 +824,11 @@ #: ../data/gui/change_activity_dialog.ui.h:2 msgid "Set Activity" -msgstr "Айналасуыңызды орнату" +msgstr "Айналысқан ісіңізді орнату" #: ../data/gui/change_activity_dialog.ui.h:3 msgid "Set an activity" -msgstr "Айналасқан ісіңізді көрсету" +msgstr "Айналысқан ісіңізді көрсету" #: ../data/gui/change_mood_dialog.ui.h:1 msgid "Message:" ___ Commits mailing list Commits@gajim.org http://lists.gajim.org/cgi-bin/listinfo/commits
gajim: [Jingle] Move on_negotiated callback to JingleContent
changeset c105a89bedc7 in /home/hg/repos/gajim details:http://hg.gajim.org/gajim?cmd=changeset;node=c105a89bedc7 description: [Jingle] Move on_negotiated callback to JingleContent diffstat: src/common/jingle_content.py | 15 +++ src/common/jingle_rtp.py | 12 2 files changed, 15 insertions(+), 12 deletions(-) diffs (81 lines): diff -r be31d22c35fd -r c105a89bedc7 src/common/jingle_content.py --- a/src/common/jingle_content.py Thu Aug 26 13:52:00 2010 +0200 +++ b/src/common/jingle_content.py Thu Aug 26 16:59:29 2010 +0200 @@ -55,14 +55,16 @@ self.callbacks = { # these are called when *we* get stanzas -'content-accept': [self.__on_transport_info], +'content-accept': [self.__on_transport_info, +self.__on_content_accept], 'content-add': [self.__on_transport_info], 'content-modify': [], 'content-reject': [], 'content-remove': [], 'description-info': [], 'security-info': [], -'session-accept': [self.__on_transport_info], +'session-accept': [self.__on_transport_info, +self.__on_content_accept], 'session-info': [], 'session-initiate': [self.__on_transport_info], 'session-terminate': [], @@ -73,16 +75,21 @@ 'iq-result': [], 'iq-error': [], # these are called when *we* sent these stanzas -'content-accept-sent': [self.__fill_jingle_stanza], +'content-accept-sent': [self.__fill_jingle_stanza, +self.__on_content_accept], 'content-add-sent': [self.__fill_jingle_stanza], 'session-initiate-sent': [self.__fill_jingle_stanza], -'session-accept-sent': [self.__fill_jingle_stanza], +'session-accept-sent': [self.__fill_jingle_stanza, +self.__on_content_accept], 'session-terminate-sent': [], } def is_ready(self): return self.accepted and not self.sent +def __on_content_accept(self, stanza, content, error, action): +self.on_negotiated() + def on_negotiated(self): if self.accepted: self.negotiated = True diff -r be31d22c35fd -r c105a89bedc7 src/common/jingle_rtp.py --- a/src/common/jingle_rtp.py Thu Aug 26 13:52:00 2010 +0200 +++ b/src/common/jingle_rtp.py Thu Aug 26 16:59:29 2010 +0200 @@ -53,12 +53,8 @@ self.callbacks['session-initiate'] += [self.__on_remote_codecs] self.callbacks['content-add'] += [self.__on_remote_codecs] self.callbacks['description-info'] += [self.__on_remote_codecs] -self.callbacks['content-accept'] += [self.__on_remote_codecs, -self.__on_content_accept] -self.callbacks['session-accept'] += [self.__on_remote_codecs, -self.__on_content_accept] -self.callbacks['session-accept-sent'] += [self.__on_content_accept] -self.callbacks['content-accept-sent'] += [self.__on_content_accept] +self.callbacks['content-accept'] += [self.__on_remote_codecs] +self.callbacks['session-accept'] += [self.__on_remote_codecs] self.callbacks['session-terminate'] += [self.__stop] self.callbacks['session-terminate-sent'] += [self.__stop] @@ -234,14 +230,14 @@ def get_fallback_src(self): return gst.element_factory_make('fakesrc') -def __on_content_accept(self, stanza, content, error, action): +def on_negotiated(self): if self.accepted: if self.transport.remote_candidates: self.p2pstream.set_remote_candidates(self.transport.remote_candidates) self.transport.remote_candidates = [] # TODO: farsight.DIRECTION_BOTH only if senders='both' self.p2pstream.set_property('direction', farsight.DIRECTION_BOTH) -self.on_negotiated() +JingleContent.on_negotiated(self) def __on_remote_codecs(self, stanza, content, error, action): """ ___ Commits mailing list Commits@gajim.org http://lists.gajim.org/cgi-bin/listinfo/commits
gajim: [Jingle] Don't wait for all contents to be ready to accep...
changeset be31d22c35fd in /home/hg/repos/gajim details:http://hg.gajim.org/gajim?cmd=changeset;node=be31d22c35fd description: [Jingle] Don't wait for all contents to be ready to accept a session diffstat: src/common/jingle_session.py | 5 +++-- 1 files changed, 3 insertions(+), 2 deletions(-) diffs (22 lines): diff -r b9926e6d6599 -r be31d22c35fd src/common/jingle_session.py --- a/src/common/jingle_session.py Tue Aug 24 11:43:16 2010 +0200 +++ b/src/common/jingle_session.py Thu Aug 26 13:52:00 2010 +0200 @@ -229,7 +229,7 @@ """ Return True when all codecs and candidates are ready (for all contents) """ -return (all((content.is_ready() for content in self.contents.itervalues())) +return (any((content.is_ready() for content in self.contents.itervalues())) and self.accepted) def accept_session(self): @@ -592,7 +592,8 @@ # TODO: integrate with __appendContent? # TODO: parameters 'name', 'content'? for content in self.contents.values(): -self.__append_content(jingle, content) +if content.is_ready(): +self.__append_content(jingle, content) def __session_initiate(self): assert self.state == JingleStates.ended ___ Commits mailing list Commits@gajim.org http://lists.gajim.org/cgi-bin/listinfo/commits
gajim: send content-remove when a filetranfer is finished but ot...
changeset 0c8aedd47e68 in /home/hg/repos/gajim details:http://hg.gajim.org/gajim?cmd=changeset;node=0c8aedd47e68 description: send content-remove when a filetranfer is finished but other are still running diffstat: src/gui_interface.py | 16 +--- 1 files changed, 9 insertions(+), 7 deletions(-) diffs (33 lines): diff -r 2c64c483cc02 -r 0c8aedd47e68 src/gui_interface.py --- a/src/gui_interface.py Thu Aug 26 16:56:08 2010 +0200 +++ b/src/gui_interface.py Thu Aug 26 16:56:46 2010 +0200 @@ -1417,7 +1417,15 @@ if file_props['session-type'] == 'jingle' and file_props['type'] == 'r': session = gajim.connections[account].get_jingle_session(jid, sid=file_props['session-sid']) -session.end_session() +# get content: +content = None +for c in session.contents.values(): +if c.file_props['sid'] == file_props['sid']: +content = c +break +if not content: +return +session.remove_content('initiator', c.name) if helpers.allow_popup_window(account): if file_props['error'] == 0: @@ -1484,12 +1492,6 @@ txt = _('File transfer of %(filename)s to %(name)s ' 'stopped.') % {'filename': filename, 'name': name} img_name = 'gajim-ft_stopped' -# if we are the sender of the file and the file transfer was initiated with jingle -# send session-terminate stanza -if 'session-type' in file_props and file_props['session-type'] == 'jingle': -sender = gajim.get_jid_without_resource(file_props['sender']) -jingle_session = gajim.connections[account].get_jingle_session(sender, file_props['sid']) -jingle_session.end_session() path = gtkgui_helpers.get_icon_path(img_name, 48) else: txt = '' ___ Commits mailing list Commits@gajim.org http://lists.gajim.org/cgi-bin/listinfo/commits
gajim: [Thibg] handle negociated variable correctly and use it f...
changeset 2c64c483cc02 in /home/hg/repos/gajim details:http://hg.gajim.org/gajim?cmd=changeset;node=2c64c483cc02 description: [Thibg] handle negociated variable correctly and use it for file transfer. diffstat: src/common/jingle_content.py | 15 +++ src/common/jingle_ft.py | 2 +- src/common/jingle_rtp.py | 12 3 files changed, 16 insertions(+), 13 deletions(-) diffs (93 lines): diff -r 301d7169b571 -r 2c64c483cc02 src/common/jingle_content.py --- a/src/common/jingle_content.py Thu Aug 26 13:52:53 2010 +0200 +++ b/src/common/jingle_content.py Thu Aug 26 16:56:08 2010 +0200 @@ -55,14 +55,16 @@ self.callbacks = { # these are called when *we* get stanzas -'content-accept': [self.__on_transport_info], +'content-accept': [self.__on_transport_info, +self.__on_content_accept], 'content-add': [self.__on_transport_info], 'content-modify': [], 'content-reject': [], 'content-remove': [], 'description-info': [], 'security-info': [], -'session-accept': [self.__on_transport_info], +'session-accept': [self.__on_transport_info, +self.__on_content_accept], 'session-info': [], 'session-initiate': [self.__on_transport_info], 'session-terminate': [], @@ -73,16 +75,21 @@ 'iq-result': [], 'iq-error': [], # these are called when *we* sent these stanzas -'content-accept-sent': [self.__fill_jingle_stanza], +'content-accept-sent': [self.__fill_jingle_stanza, +self.__on_content_accept], 'content-add-sent': [self.__fill_jingle_stanza], 'session-initiate-sent': [self.__fill_jingle_stanza], -'session-accept-sent': [self.__fill_jingle_stanza], +'session-accept-sent': [self.__fill_jingle_stanza, +self.__on_content_accept], 'session-terminate-sent': [], } def is_ready(self): return self.accepted and not self.sent +def __on_content_accept(self, stanza, content, error, action): +self.on_negotiated() + def on_negotiated(self): if self.accepted: self.negotiated = True diff -r 301d7169b571 -r 2c64c483cc02 src/common/jingle_ft.py --- a/src/common/jingle_ft.py Thu Aug 26 13:52:53 2010 +0200 +++ b/src/common/jingle_ft.py Thu Aug 26 16:56:08 2010 +0200 @@ -223,7 +223,7 @@ # send error message, notify the user elif not self.weinitiate and self.state == STATE_NOT_STARTED: # session-accept iq-result -if not self.sent: +if not self.negotiated: return self.state = STATE_ACCEPTED if not gajim.socks5queue.get_file_props( diff -r 301d7169b571 -r 2c64c483cc02 src/common/jingle_rtp.py --- a/src/common/jingle_rtp.py Thu Aug 26 13:52:53 2010 +0200 +++ b/src/common/jingle_rtp.py Thu Aug 26 16:56:08 2010 +0200 @@ -53,12 +53,8 @@ self.callbacks['session-initiate'] += [self.__on_remote_codecs] self.callbacks['content-add'] += [self.__on_remote_codecs] self.callbacks['description-info'] += [self.__on_remote_codecs] -self.callbacks['content-accept'] += [self.__on_remote_codecs, -self.__on_content_accept] -self.callbacks['session-accept'] += [self.__on_remote_codecs, -self.__on_content_accept] -self.callbacks['session-accept-sent'] += [self.__on_content_accept] -self.callbacks['content-accept-sent'] += [self.__on_content_accept] +self.callbacks['content-accept'] += [self.__on_remote_codecs] +self.callbacks['session-accept'] += [self.__on_remote_codecs] self.callbacks['session-terminate'] += [self.__stop] self.callbacks['session-terminate-sent'] += [self.__stop] @@ -234,14 +230,14 @@ def get_fallback_src(self): return gst.element_factory_make('fakesrc') -def __on_content_accept(self, stanza, content, error, action): +def on_negotiated(self): if self.accepted: if self.transport.remote_candidates: self.p2pstream.set_remote_candidates(self.transport.remote_candidates) self.transport.remote_candidates = [] # TODO: farsight.DIRECTION_BOTH only if senders='both' self.p2pstream.set_property('direction', farsight.DIRECTION_BOTH) -self.on_negotiated() +JingleContent.on_negotiated(self) def __on_remote_codecs(self, stanza, content, error, action): """ ___ Commits mailing list Commits@gajim.org http://lists.gajim.org/cgi-bin/listinfo/commits
gajim: nicer code
changeset 301d7169b571 in /home/hg/repos/gajim details:http://hg.gajim.org/gajim?cmd=changeset;node=301d7169b571 description: nicer code diffstat: src/common/jingle_session.py | 5 + 1 files changed, 1 insertions(+), 4 deletions(-) diffs (15 lines): diff -r d2b7fe3b41d5 -r 301d7169b571 src/common/jingle_session.py --- a/src/common/jingle_session.py Thu Aug 26 13:52:40 2010 +0200 +++ b/src/common/jingle_session.py Thu Aug 26 13:52:53 2010 +0200 @@ -247,10 +247,7 @@ """ Return True when all codecs and candidates are ready (for all contents) """ -for c in self.contents.itervalues(): -if c.is_ready(): -return True -return (all((content.is_ready() for content in self.contents.itervalues())) +return (any((content.is_ready() for content in self.contents.itervalues())) and self.accepted) def accept_session(self): ___ Commits mailing list Commits@gajim.org http://lists.gajim.org/cgi-bin/listinfo/commits
gajim: prevent traceback
changeset d2b7fe3b41d5 in /home/hg/repos/gajim details:http://hg.gajim.org/gajim?cmd=changeset;node=d2b7fe3b41d5 description: prevent traceback diffstat: src/common/socks5.py | 6 -- 1 files changed, 4 insertions(+), 2 deletions(-) diffs (16 lines): diff -r 17c95fb022ad -r d2b7fe3b41d5 src/common/socks5.py --- a/src/common/socks5.py Thu Aug 26 13:31:29 2010 +0200 +++ b/src/common/socks5.py Thu Aug 26 13:52:40 2010 +0200 @@ -304,8 +304,10 @@ if account in self.files_props: fl_props = self.files_props[account] if sid in fl_props: -del self.on_success[sid] -del self.on_failure[sid] +if sid in self.on_success: +del self.on_success[sid] +if sid in self.on_failure: +del self.on_failure[sid] del(fl_props[sid]) if len(self.files_props) == 0: ___ Commits mailing list Commits@gajim.org http://lists.gajim.org/cgi-bin/listinfo/commits
gajim: minor fix for jingle audio / video
changeset 17c95fb022ad in /home/hg/repos/gajim details:http://hg.gajim.org/gajim?cmd=changeset;node=17c95fb022ad description: minor fix for jingle audio / video diffstat: src/common/jingle_rtp.py | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diffs (12 lines): diff -r 7f331eb60f74 -r 17c95fb022ad src/common/jingle_rtp.py --- a/src/common/jingle_rtp.py Thu Aug 26 13:18:16 2010 +0200 +++ b/src/common/jingle_rtp.py Thu Aug 26 13:31:29 2010 +0200 @@ -37,7 +37,7 @@ class JingleRTPContent(JingleContent): def __init__(self, session, media, transport=None): if transport is None: -transport = JingleTransportICEUDP() +transport = JingleTransportICEUDP(None) JingleContent.__init__(self, session, transport) self.media = media self._dtmf_running = False ___ Commits mailing list Commits@gajim.org http://lists.gajim.org/cgi-bin/listinfo/commits
gajim: accept session as soon as one content is accepted
changeset 7f331eb60f74 in /home/hg/repos/gajim details:http://hg.gajim.org/gajim?cmd=changeset;node=7f331eb60f74 description: accept session as soon as one content is accepted diffstat: src/common/jingle_ft.py | 2 ++ src/common/jingle_session.py | 6 +- 2 files changed, 7 insertions(+), 1 deletions(-) diffs (35 lines): diff -r 592973e9c3a4 -r 7f331eb60f74 src/common/jingle_ft.py --- a/src/common/jingle_ft.py Thu Aug 26 11:56:12 2010 +0200 +++ b/src/common/jingle_ft.py Thu Aug 26 13:18:16 2010 +0200 @@ -223,6 +223,8 @@ # send error message, notify the user elif not self.weinitiate and self.state == STATE_NOT_STARTED: # session-accept iq-result +if not self.sent: +return self.state = STATE_ACCEPTED if not gajim.socks5queue.get_file_props( self.session.connection.name, self.file_props['sid']): diff -r 592973e9c3a4 -r 7f331eb60f74 src/common/jingle_session.py --- a/src/common/jingle_session.py Thu Aug 26 11:56:12 2010 +0200 +++ b/src/common/jingle_session.py Thu Aug 26 13:18:16 2010 +0200 @@ -247,6 +247,9 @@ """ Return True when all codecs and candidates are ready (for all contents) """ +for c in self.contents.itervalues(): +if c.is_ready(): +return True return (all((content.is_ready() for content in self.contents.itervalues())) and self.accepted) @@ -623,7 +626,8 @@ # TODO: integrate with __appendContent? # TODO: parameters 'name', 'content'? for content in self.contents.values(): -self.__append_content(jingle, content) +if content.is_ready(): +self.__append_content(jingle, content) def __session_initiate(self): assert self.state == JingleStates.ended ___ Commits mailing list Commits@gajim.org http://lists.gajim.org/cgi-bin/listinfo/commits
gajim: l10n: Updated Kazakh (kk) translation to 100%
changeset 73841ab0bf8a in /home/hg/repos/gajim details:http://hg.gajim.org/gajim?cmd=changeset;node=73841ab0bf8a description: l10n: Updated Kazakh (kk) translation to 100% New status: 2103 messages complete with 0 fuzzies and 0 untranslated. Transmitted-via: Transifex (www.transifex.net). diffstat: po/kk.po | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) diffs (17 lines): diff -r b9926e6d6599 -r 73841ab0bf8a po/kk.po --- a/po/kk.po Tue Aug 24 11:43:16 2010 +0200 +++ b/po/kk.po Thu Aug 26 10:30:49 2010 + @@ -824,11 +824,11 @@ #: ../data/gui/change_activity_dialog.ui.h:2 msgid "Set Activity" -msgstr "Айналасуыңызды орнату" +msgstr "Айналысқан ісіңізді орнату" #: ../data/gui/change_activity_dialog.ui.h:3 msgid "Set an activity" -msgstr "Айналасқан ісіңізді көрсету" +msgstr "Айналысқан ісіңізді көрсету" #: ../data/gui/change_mood_dialog.ui.h:1 msgid "Message:" ___ Commits mailing list Commits@gajim.org http://lists.gajim.org/cgi-bin/listinfo/commits
gajim: ability to send several files at the same time. We need t...
changeset 592973e9c3a4 in /home/hg/repos/gajim details:http://hg.gajim.org/gajim?cmd=changeset;node=592973e9c3a4 description: ability to send several files at the same time. We need to accept them all before transfer starts for the moment. diffstat: src/common/jingle_ft.py | 3 ++- src/common/socks5.py| 14 -- 2 files changed, 10 insertions(+), 7 deletions(-) diffs (63 lines): diff -r 13de0324eece -r 592973e9c3a4 src/common/jingle_ft.py --- a/src/common/jingle_ft.py Thu Aug 26 11:09:35 2010 +0200 +++ b/src/common/jingle_ft.py Thu Aug 26 11:56:12 2010 +0200 @@ -188,7 +188,8 @@ gajim.socks5queue.add_receiver(self.session.connection.name, receiver) streamhost_used['idx'] = receiver.queue_idx -gajim.socks5queue.on_success = self.transport._on_proxy_auth_ok +gajim.socks5queue.on_success[self.file_props['sid']] = \ + self.transport._on_proxy_auth_ok else: jid = gajim.get_jid_without_resource(self.session.ourjid) gajim.socks5queue.send_file(self.file_props, diff -r 13de0324eece -r 592973e9c3a4 src/common/socks5.py --- a/src/common/socks5.py Thu Aug 26 11:09:35 2010 +0200 +++ b/src/common/socks5.py Thu Aug 26 11:56:12 2010 +0200 @@ -81,8 +81,8 @@ self.complete_transfer_cb = complete_transfer_cb self.progress_transfer_cb = progress_transfer_cb self.error_cb = error_cb -self.on_success = None -self.on_failure = None +self.on_success = {} # {id: cb} +self.on_failure = {} # {id: cb} def start_listener(self, port, sha_str, sha_handler, sid, fingerprint=None): """ @@ -110,7 +110,7 @@ if 'proxyhosts' in file_props: for proxy in file_props['proxyhosts']: if proxy == streamhost: -self.on_success(streamhost) +self.on_success[file_props['sid']](streamhost) return 2 return 0 if 'streamhosts' in file_props: @@ -118,14 +118,14 @@ if streamhost['state'] == 1: return 0 streamhost['state'] = 1 -self.on_success(streamhost) +self.on_success[file_props['sid']](streamhost) return 1 return 0 def connect_to_hosts(self, account, sid, on_success=None, on_failure=None, fingerprint=None): -self.on_success = on_success -self.on_failure = on_failure +self.on_success[sid] = on_success +self.on_failure[sid] = on_failure file_props = self.files_props[account][sid] file_props['failure_cb'] = on_failure @@ -304,6 +304,8 @@ if account in self.files_props: fl_props = self.files_props[account] if sid in fl_props: +del self.on_success[sid] +del self.on_failure[sid] del(fl_props[sid]) if len(self.files_props) == 0: ___ Commits mailing list Commits@gajim.org http://lists.gajim.org/cgi-bin/listinfo/commits
gajim: ability to accept correct content by its name, not only b...
changeset 13de0324eece in /home/hg/repos/gajim details:http://hg.gajim.org/gajim?cmd=changeset;node=13de0324eece description: ability to accept correct content by its name, not only by it's media diffstat: src/common/jingle_session.py | 13 +++-- src/common/jingle_xtls.py | 24 src/common/protocol/bytestream.py | 16 3 files changed, 31 insertions(+), 22 deletions(-) diffs (127 lines): diff -r f42b8e141cb1 -r 13de0324eece src/common/jingle_session.py --- a/src/common/jingle_session.py Thu Aug 26 10:36:58 2010 +0200 +++ b/src/common/jingle_session.py Thu Aug 26 11:09:35 2010 +0200 @@ -142,14 +142,14 @@ reason.addChild('decline') self._session_terminate(reason) -def approve_content(self, media): -content = self.get_content(media) +def approve_content(self, media, name=None): +content = self.get_content(media, name) if content: content.accepted = True self.on_session_state_changed(content) -def reject_content(self, media): -content = self.get_content(media) +def reject_content(self, media, name=None): +content = self.get_content(media, name) if content: if self.state == JingleStates.active: self.__content_reject(content) @@ -167,13 +167,14 @@ reason.addChild('cancel') self._session_terminate(reason) -def get_content(self, media=None): +def get_content(self, media=None, name=None): if media is None: return for content in self.contents.values(): if content.media == media: -return content +if name is None or content.name == name: +return content def add_content(self, name, content, creator='we'): """ diff -r f42b8e141cb1 -r 13de0324eece src/common/jingle_xtls.py --- a/src/common/jingle_xtls.py Thu Aug 26 10:36:58 2010 +0200 +++ b/src/common/jingle_xtls.py Thu Aug 26 11:09:35 2010 +0200 @@ -25,15 +25,15 @@ PYOPENSSL_PRESENT = False -pending_sessions = {} # key-exchange id -> session, accept that session once key-exchange completes +pending_contents = {} # key-exchange id -> session, accept that session once key-exchange completes -def key_exchange_pend(id, session): -pending_sessions[id] = session +def key_exchange_pend(id_, content): +pending_contents[id_] = content -def approve_pending_session(id): -session = pending_sessions[id] -session.approve_session() -session.approve_content('file') +def approve_pending_content(id_): +content = pending_contents[id_] +content.session.approve_session() +content.session.approve_content('file', name=content.name) try: import OpenSSL @@ -133,7 +133,7 @@ certpath = os.path.join(os.path.expanduser(gajim.MY_PEER_CERTS_PATH), jid) certpath += '.cert' -id = obj.getAttr('id') +id_ = obj.getAttr('id') x509cert = obj.getTag('pubkeys').getTag('keyinfo').getTag('x509cert') @@ -144,16 +144,16 @@ f.write(cert) f.write('-END CERTIFICATE-\n') -approve_pending_session(id) +approve_pending_content(id_) def send_cert_request(con, to_jid): iq = common.xmpp.Iq('get', to=to_jid) -id = con.connection.getAnID() -iq.setAttr('id', id) +id_ = con.connection.getAnID() +iq.setAttr('id', id_) pubkey = iq.setTag('pubkeys') pubkey.setNamespace(common.xmpp.NS_PUBKEY_PUBKEY) con.connection.send(iq) -return unicode(id) +return unicode(id_) # the following code is partly due to pyopenssl examples diff -r f42b8e141cb1 -r 13de0324eece src/common/protocol/bytestream.py --- a/src/common/protocol/bytestream.py Thu Aug 26 10:36:58 2010 +0200 +++ b/src/common/protocol/bytestream.py Thu Aug 26 11:09:35 2010 +0200 @@ -140,16 +140,24 @@ file_props['session-sid']) if not session: return +content = None +for c in session.contents.values(): +if c.transport.sid == file_props['sid']: +content = c +break +if not content: +return gajim.socks5queue.add_file_props(self.name, file_props) if not session.accepted: -if session.get_content('file').use_security: -id_ = jingle_xtls.send_cert_request(self, file_props['sender']) -jingle_xtls.key_exchange_pend(id_, session) +if session.get_content('file', content.name).use_security: +id_ = jingle_xtls.send_cert_request(self, +file_props['sender']) +jingle_xtls.key_exchange_pend(id_, content) return session.approve_session() -session.approve_content('file') +session.approve_content('file',
gajim: Name of filetransfer content is now random to be able to ...
changeset f42b8e141cb1 in /home/hg/repos/gajim details:http://hg.gajim.org/gajim?cmd=changeset;node=f42b8e141cb1 description: Name of filetransfer content is now random to be able to have 2 transfer in the same session. send and handle content-add in filetranfer diffstat: src/common/jingle.py | 47 +++--- src/common/jingle_ft.py | 3 +- src/common/jingle_session.py | 18 -- src/common/jingle_transport.py| 15 +--- src/common/jingle_xtls.py | 29 +++ src/common/protocol/bytestream.py | 3 +- src/common/socks5.py | 2 +- 7 files changed, 64 insertions(+), 53 deletions(-) diffs (truncated from 373 to 300 lines): diff -r 36f1fc353296 -r f42b8e141cb1 src/common/jingle.py --- a/src/common/jingle.py Wed Aug 25 13:01:35 2010 +0200 +++ b/src/common/jingle.py Thu Aug 26 10:36:58 2010 +0200 @@ -48,7 +48,7 @@ def __init__(self): # dictionary: sessionid => JingleSession object -self.__sessions = {} +self.__sessions__ = {} # dictionary: (jid, iq stanza id) => JingleSession object, # one time callbacks @@ -58,12 +58,12 @@ """ Remove a jingle session from a jingle stanza dispatcher """ -if sid in self.__sessions: +if sid in self.__sessions__: #FIXME: Move this elsewhere? -for content in self.__sessions[sid].contents.values(): +for content in self.__sessions__[sid].contents.values(): content.destroy() -self.__sessions[sid].callbacks = [] -del self.__sessions[sid] +self.__sessions__[sid].callbacks = [] +del self.__sessions__[sid] def _JingleCB(self, con, stanza): """ @@ -91,23 +91,23 @@ sid = jingle.getAttr('sid') else: sid = None -for sesn in self.__sessions.values(): +for sesn in self.__sessions__.values(): if id in sesn.iq_ids: sesn.on_stanza(stanza) return # do we need to create a new jingle object -if sid not in self.__sessions: +if sid not in self.__sessions__: #TODO: tie-breaking and other things... newjingle = JingleSession(con=self, weinitiate=False, jid=jid, iq_id = id, sid=sid) -self.__sessions[sid] = newjingle +self.__sessions__[sid] = newjingle # we already have such session in dispatcher... -self.__sessions[sid].collect_iq_id(id) -self.__sessions[sid].on_stanza(stanza) +self.__sessions__[sid].collect_iq_id(id) +self.__sessions__[sid].on_stanza(stanza) # Delete invalid/unneeded sessions -if sid in self.__sessions and self.__sessions[sid].state == JingleStates.ended: +if sid in self.__sessions__ and self.__sessions__[sid].state == JingleStates.ended: self.delete_jingle_session(sid) raise xmpp.NodeProcessed @@ -120,7 +120,7 @@ jingle.add_content('voice', JingleAudio(jingle)) else: jingle = JingleSession(self, weinitiate=True, jid=jid) -self.__sessions[jingle.sid] = jingle +self.__sessions__[jingle.sid] = jingle jingle.add_content('voice', JingleAudio(jingle)) jingle.start_session() return jingle.sid @@ -133,7 +133,7 @@ jingle.add_content('video', JingleVideo(jingle)) else: jingle = JingleSession(self, weinitiate=True, jid=jid) -self.__sessions[jingle.sid] = jingle +self.__sessions__[jingle.sid] = jingle jingle.add_content('video', JingleVideo(jingle)) jingle.start_session() return jingle.sid @@ -150,24 +150,25 @@ file_props['sid'] = jingle.sid c = JingleFileTransfer(jingle, file_props=file_props, use_security=use_security) -jingle.add_content('file', c) +jingle.add_content('file' + helpers.get_random_string_16(), c) +jingle.on_session_state_changed(c) else: jingle = JingleSession(self, weinitiate=True, jid=jid) -self.__sessions[jingle.sid] = jingle +self.__sessions__[jingle.sid] = jingle file_props['sid'] = jingle.sid c = JingleFileTransfer(jingle, file_props=file_props, use_security=use_security) -jingle.add_content('file', c) +jingle.add_content('file' + helpers.get_random_string_16(), c) jingle.start_session() return c.transport.sid def iter_jingle_sessions(self, jid, sid=None, media=None): if sid: -return (session for session in self.__sessions.values() if session.sid == sid) -sessions = (session for sess