changeset 9682f6b115e3 in /home/hg/repos/gajim
details:http://hg.gajim.org/gajim?cmd=changeset;node=9682f6b115e3
description: merge
diffstat:
src/common/jingle.py | 39 +++++++++++++++++----------
src/common/jingle_ft.py | 54 ++++++++++++++++++--------------------
src/common/protocol/bytestream.py | 9 +++++-
3 files changed, 57 insertions(+), 45 deletions(-)
diffs (252 lines):
diff -r fe9d79c951fa -r 9682f6b115e3 src/common/jingle.py
--- a/src/common/jingle.py Sun Jan 15 19:37:00 2012 -0500
+++ b/src/common/jingle.py Sun Jan 15 19:53:40 2012 -0500
@@ -38,6 +38,7 @@
if gajim.HAVE_FARSIGHT:
from jingle_rtp import JingleAudio, JingleVideo
from jingle_ft import JingleFileTransfer
+from jingle_transport import JingleTransportSocks5, JingleTransportIBB
import logging
logger = logging.getLogger('gajim.c.jingle')
@@ -78,11 +79,11 @@
"""
# get data
jid = helpers.get_full_jid_from_iq(stanza)
- id = stanza.getID()
+ id_ = stanza.getID()
- if (jid, id) in self.__iq_responses.keys():
- self.__iq_responses[(jid, id)].on_stanza(stanza)
- del self.__iq_responses[(jid, id)]
+ if (jid, id_) in self.__iq_responses.keys():
+ self.__iq_responses[(jid, id_)].on_stanza(stanza)
+ del self.__iq_responses[(jid, id_)]
raise xmpp.NodeProcessed
jingle = stanza.getTag('jingle')
@@ -93,7 +94,7 @@
else:
sid = None
for sesn in self._sessions.values():
- if id in sesn.iq_ids:
+ if id_ in sesn.iq_ids:
sesn.on_stanza(stanza)
return
@@ -101,14 +102,15 @@
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)
+ iq_id=id_, sid=sid)
self._sessions[sid] = newjingle
# we already have such session in dispatcher...
- self._sessions[sid].collect_iq_id(id)
+ 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
@@ -142,16 +144,20 @@
def start_file_transfer(self, jid, file_props):
logger.info("start file transfer with file: %s" % file_props)
contact = gajim.contacts.get_contact_with_highest_priority(self.name,
-
gajim.get_jid_without_resource(jid))
+ gajim.get_jid_without_resource(jid))
if contact is None:
return
use_security = contact.supports(xmpp.NS_JINGLE_XTLS)
jingle = JingleSession(self, weinitiate=True, jid=jid)
self._sessions[jingle.sid] = jingle
file_props['sid'] = jingle.sid
- c = JingleFileTransfer(jingle, file_props=file_props,
- use_security=use_security)
- c.hash_algo = self.__hash_support(contact)
+ if contact.supports(xmpp.NS_JINGLE_BYTESTREAM):
+ transport = JingleTransportSocks5()
+ elif contact.supports(xmpp.NS_JINGLE_IBB):
+ transport = JingleTransportIBB()
+ c = JingleFileTransfer(jingle, transport=transport,
+ file_props=file_props, use_security=use_security)
+ c.hash_algo = self.__hash_support(contact)
jingle.add_content('file' + helpers.get_random_string_16(), c)
jingle.start_session()
return c.transport.sid
@@ -172,13 +178,16 @@
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 session in self._sessions.values() if
session.peerjid == jid)
+ return (session for session in self._sessions.values() if \
+ session.sid == sid)
+ sessions = (session for session in self._sessions.values() if \
+ session.peerjid == jid)
if media:
if media not in ('audio', 'video', 'file'):
return tuple()
else:
- return (session for session in sessions if
session.get_content(media))
+ return (session for session in sessions if \
+ session.get_content(media))
else:
return sessions
diff -r fe9d79c951fa -r 9682f6b115e3 src/common/jingle_ft.py
--- a/src/common/jingle_ft.py Sun Jan 15 19:37:00 2012 -0500
+++ b/src/common/jingle_ft.py Sun Jan 15 19:53:40 2012 -0500
@@ -22,7 +22,8 @@
import gajim
import xmpp
from jingle_content import contents, JingleContent
-from jingle_transport import JingleTransportICEUDP, JingleTransportSocks5,
JingleTransportIBB, TransportType
+from jingle_transport import JingleTransportICEUDP, JingleTransportSocks5
+from jingle_transport import JingleTransportIBB, TransportType
from common import helpers
from common.socks5 import Socks5ReceiverClient, Socks5SenderClient
from common.connection_handlers_events import FileRequestReceivedEvent
@@ -150,9 +151,9 @@
self.file_props['streamhosts'] = self.transport.remote_candidates
for host in self.file_props['streamhosts']:
- host['initiator'] = self.session.initiator
- host['target'] = self.session.responder
- host['sid'] = self.file_props['sid']
+ host['initiator'] = self.session.initiator
+ host['target'] = self.session.responder
+ host['sid'] = self.file_props['sid']
response = stanza.buildReply('result')
response.delChild(response.getQuery())
@@ -161,15 +162,15 @@
if not gajim.socks5queue.get_file_props(
self.session.connection.name, self.file_props['sid']):
gajim.socks5queue.add_file_props(self.session.connection.name,
- self.file_props)
+ self.file_props)
fingerprint = None
if self.use_security:
fingerprint = 'client'
if self.transport.type == TransportType.SOCKS5:
gajim.socks5queue.connect_to_hosts(self.session.connection.name,
- self.file_props['sid'], self.send_candidate_used,
- self._on_connect_error, fingerprint=fingerprint,
- receiving=False)
+ self.file_props['sid'], self.send_candidate_used,
+ self._on_connect_error, fingerprint=fingerprint,
+ receiving=False)
elif self.transport.type == TransportType.IBB:
self.state = STATE_TRANSFERING
self.__start_IBB_transfer(self.session.connection)
@@ -286,11 +287,11 @@
def __start_IBB_transfer(self, con):
con.files_props[self.file_props['sid']] = self.file_props
fp = open(self.file_props['file-name'], 'r')
- con.OpenStream( self.transport.sid, self.session.peerjid,
- fp, blocksize=4096)
+ con.OpenStream( self.transport.sid, self.session.peerjid, fp,
+ blocksize=4096)
- def __transport_setup(self, stanza=None, content=None, error=None
- , action=None):
+ def __transport_setup(self, stanza=None, content=None, error=None,
+ action=None):
# Sets up a few transport specific things for the file transfer
if self.transport.type == TransportType.SOCKS5:
self._listen_host()
@@ -377,7 +378,7 @@
receiver = self.file_props['receiver']
sender = self.file_props['sender']
sha_str = helpers.get_auth_sha(self.file_props['sid'], sender,
- receiver)
+ receiver)
self.file_props['sha_str'] = sha_str
port = gajim.config.get('file_transfers_port')
@@ -388,15 +389,15 @@
if self.weinitiate:
listener = gajim.socks5queue.start_listener(port, sha_str,
- self._store_socks5_sid, self.file_props,
- fingerprint=fingerprint, type='sender')
+ self._store_socks5_sid, self.file_props,
+ fingerprint=fingerprint, type='sender')
else:
listener = gajim.socks5queue.start_listener(port, sha_str,
- self._store_socks5_sid, self.file_props,
- fingerprint=fingerprint, type='receiver')
+ self._store_socks5_sid, self.file_props,
+ fingerprint=fingerprint, type='receiver')
if not listener:
- # send error message, notify the user
+ # send error message, notify the user
return
def isOurCandUsed(self):
'''
@@ -467,21 +468,18 @@
gajim.socks5queue.idx += 1
idx = gajim.socks5queue.idx
sockobj = Socks5SenderClient(gajim.idlequeue, idx,
- gajim.socks5queue,
- _sock=None,
- host=str(streamhost_used['host']),
- port=int(streamhost_used['port']),
- fingerprint=None,
- connected=False,
- file_props=self.file_props)
+ gajim.socks5queue, _sock=None,
+ host=str(streamhost_used['host']),
+ port=int(streamhost_used['port']), fingerprint=None,
+ connected=False, file_props=self.file_props)
else:
sockobj = Socks5ReceiverClient(gajim.idlequeue,
streamhost_used,
sid=self.file_props['sid'],
file_props=self.file_props, fingerprint=None)
sockobj.proxy = True
- sockobj.streamhost = streamhost_used
- gajim.socks5queue.add_sockobj(self.session.connection.name,
- sockobj, 'sender')
+ sockobj.streamhost = streamhost_used
+ gajim.socks5queue.add_sockobj(self.session.connection.name,
+ sockobj, 'sender')
streamhost_used['idx'] = sockobj.queue_idx
# If we offered the nominated candidate used, we activate
# the proxy
diff -r fe9d79c951fa -r 9682f6b115e3 src/common/protocol/bytestream.py
--- a/src/common/protocol/bytestream.py Sun Jan 15 19:37:00 2012 -0500
+++ b/src/common/protocol/bytestream.py Sun Jan 15 19:53:40 2012 -0500
@@ -957,13 +957,17 @@
log.debug('StreamCloseHandler called sid->%s' % sid)
# look in sending files
if sid in self.files_props.keys():
- conn.send(stanza.buildReply('result'))
+ reply = stanza.buildReply('result')
+ reply.delChild('close')
+ conn.send(reply)
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):
file_props = gajim.socks5queue.get_file_props(self.name, sid)
- conn.send(stanza.buildReply('result'))
+ reply = stanza.buildReply('result')
+ reply.delChild('close')
+ conn.send(reply)
file_props['fp'].close()
gajim.socks5queue.complete_transfer_cb(self.name, file_props)
gajim.socks5queue.remove_file_props(self.name, sid)
@@ -1003,6 +1007,7 @@
if stanza.getTag('data'):
if self.IBBMessageHandler(conn, stanza):
reply = stanza.buildReply('result')
+ reply.delChild('data')
conn.send(reply)
raise xmpp.NodeProcessed
elif syn_id == self.last_sent_ibb_id:
_______________________________________________
Commits mailing list
[email protected]
http://lists.gajim.org/cgi-bin/listinfo/commits