gajim: merged local changes

2010-08-26 Thread Thibaut Girka
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

2010-08-26 Thread Thibaut Girka
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...

2010-08-26 Thread Thibaut Girka
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...

2010-08-26 Thread Yann Leboulanger
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...

2010-08-26 Thread Yann Leboulanger
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

2010-08-26 Thread Yann Leboulanger
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

2010-08-26 Thread Yann Leboulanger
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

2010-08-26 Thread Yann Leboulanger
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

2010-08-26 Thread Yann Leboulanger
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%

2010-08-26 Thread Baurzhan Muftakhidinov
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...

2010-08-26 Thread Yann Leboulanger
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...

2010-08-26 Thread Yann Leboulanger
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 ...

2010-08-26 Thread Yann Leboulanger
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