make file_props use session sid as the default sid

This commit is contained in:
Jefry Lagrange 2012-08-25 12:09:50 -04:00
parent ce1bdb7b63
commit 5bec8c7a09
7 changed files with 16 additions and 17 deletions

View file

@ -1981,11 +1981,9 @@ class FileRequestReceivedEvent(nec.NetworkIncomingEvent, HelperEvent):
self.FT_content.session.ourjid) self.FT_content.session.ourjid)
self.FT_content.transport.set_connection( self.FT_content.transport.set_connection(
self.FT_content.session.connection) self.FT_content.session.connection)
sid = self.FT_content.transport.sid sid = unicode(self.stanza.getTag('jingle').getAttr('sid'))
self.file_props = FilesProp.getNewFileProp(self.conn.name, sid) self.file_props = FilesProp.getNewFileProp(self.conn.name, sid)
self.file_props.session_sid = unicode( self.file_props.transport_sid = self.FT_content.transport.sid
self.stanza.getTag('jingle').getAttr('sid')
)
self.FT_content.file_props = self.file_props self.FT_content.file_props = self.file_props
self.FT_content.transport.set_file_props(self.file_props) self.FT_content.transport.set_file_props(self.file_props)
if self.file_props.streamhosts: if self.file_props.streamhosts:

View file

@ -123,6 +123,7 @@ class FileProp(object):
self.tt_account = None self.tt_account = None
self.size = None self.size = None
self._sid = sid self._sid = sid
self.transport_sid = None
self.account = account self.account = account
self.mime_type = None self.mime_type = None
self.algo = None self.algo = None
@ -130,7 +131,6 @@ class FileProp(object):
self.syn_id = None self.syn_id = None
self.seq = None self.seq = None
self.hash_ = None self.hash_ = None
self.session_sid = None
self.fd = None self.fd = None
self.startexmpp = None self.startexmpp = None
self.session_type = None self.session_type = None

View file

@ -76,8 +76,9 @@ class JingleFileTransfer(JingleContent):
self.file_props.sender = session.ourjid self.file_props.sender = session.ourjid
self.file_props.receiver = session.peerjid self.file_props.receiver = session.peerjid
self.file_props.session_type = 'jingle' self.file_props.session_type = 'jingle'
self.file_props.session_sid = session.sid self.file_props.sid = session.sid
self.file_props.transfered_size = [] self.file_props.transfered_size = []
self.file_props.transport_sid = self.transport.sid
log.info("FT request: %s" % file_props) log.info("FT request: %s" % file_props)
if transport is None: if transport is None:
self.transport = JingleTransportSocks5() self.transport = JingleTransportSocks5()

View file

@ -250,7 +250,7 @@ class JingleTransportSocks5(JingleTransport):
def get_content(self): def get_content(self):
sesn = self.connection.get_jingle_session(self.ourjid, sesn = self.connection.get_jingle_session(self.ourjid,
self.file_props.session_sid) self.file_props.sid)
for content in sesn.contents.values(): for content in sesn.contents.values():
if content.transport == self: if content.transport == self:
return content return content
@ -261,7 +261,7 @@ class JingleTransportSocks5(JingleTransport):
if not self.connection: if not self.connection:
return return
sesn = self.connection.get_jingle_session(self.ourjid, sesn = self.connection.get_jingle_session(self.ourjid,
self.file_props.session_sid) self.file_props.sid)
if sesn is None: if sesn is None:
return return

View file

@ -143,12 +143,12 @@ class ConnectionBytestream:
log.info("send_file_approval: jingle session accept") log.info("send_file_approval: jingle session accept")
if file_props.session_type == 'jingle': if file_props.session_type == 'jingle':
session = self.get_jingle_session(file_props.sender, session = self.get_jingle_session(file_props.sender,
file_props.session_sid) file_props.sid)
if not session: if not session:
return return
content = None content = None
for c in session.contents.values(): for c in session.contents.values():
if c.transport.sid == file_props.sid: if c.transport.sid == file_props.transport_sid:
content = c content = c
break break
if not content: if not content:
@ -193,7 +193,7 @@ class ConnectionBytestream:
if not self.connection or self.connected < 2: if not self.connection or self.connected < 2:
return return
if file_props.session_type == 'jingle': if file_props.session_type == 'jingle':
jingle = self._sessions[file_props.session_sid] jingle = self._sessions[file_props.sid]
jingle.cancel_session() jingle.cancel_session()
return return
iq = xmpp.Iq(to=unicode(file_props.sender), typ='error') iq = xmpp.Iq(to=unicode(file_props.sender), typ='error')
@ -562,7 +562,7 @@ class ConnectionSocks5Bytestream(ConnectionBytestream):
else: else:
to = file_props.sender to = file_props.sender
iq = xmpp.Iq(to=to, typ='error') iq = xmpp.Iq(to=to, typ='error')
iq.setAttr('id', file_props.session_sid) iq.setAttr('id', file_props.sid)
err = iq.setTag('error') err = iq.setTag('error')
err.setAttr('code', unicode(code)) err.setAttr('code', unicode(code))
err.setData(msg) err.setData(msg)

View file

@ -257,7 +257,7 @@ class FileTransfersWindow:
sid = gajim.connections[account].start_file_transfer(fjid, sid = gajim.connections[account].start_file_transfer(fjid,
file_props, file_props,
True) True)
file_props.sid = sid file_props.transport_sid = sid
if file_props.type_ == 'r': if file_props.type_ == 'r':
file_name = os.path.basename(file_props.file_name) file_name = os.path.basename(file_props.file_name)
@ -643,7 +643,8 @@ class FileTransfersWindow:
self.model.set(iter_, 0, self.get_icon(status)) self.model.set(iter_, 0, self.get_icon(status))
if transfered_size == full_size: if transfered_size == full_size:
# If we are receiver and this is a jingle session # If we are receiver and this is a jingle session
if file_props.type_ == 'r' and file_props.session_sid: if file_props.type_ == 'r' and \
file_props.session_type == 'jingle':
# Show that we are computing the hash # Show that we are computing the hash
self.set_status(file_props, 'computing') self.set_status(file_props, 'computing')
else: else:

View file

@ -941,7 +941,7 @@ class Interface:
def __compare_hashes(self, account, file_props): def __compare_hashes(self, account, file_props):
session = gajim.connections[account].get_jingle_session(jid=None, session = gajim.connections[account].get_jingle_session(jid=None,
sid=file_props.session_sid) sid=file_props.sid)
ft_win = self.instances['file_transfers'] ft_win = self.instances['file_transfers']
if not file_props.hash_: if not file_props.hash_:
# We disn't get the hash, sender probably don't support that # We disn't get the hash, sender probably don't support that
@ -981,9 +981,8 @@ class Interface:
return return
if file_props.type_ == 'r': # we receive a file if file_props.type_ == 'r': # we receive a file
# If we have a jingle session id, it is a jingle transfer
# we compare hashes # we compare hashes
if file_props.session_sid: if file_props.session_type == 'jingle':
# Compare hashes in a new thread # Compare hashes in a new thread
self.hashThread = Thread(target=self.__compare_hashes, self.hashThread = Thread(target=self.__compare_hashes,
args=(account, file_props)) args=(account, file_props))