Cancel an IBB transfer

This commit is contained in:
Jefry Lagrange 2012-12-26 18:41:31 -04:00
parent 6894db0224
commit c4ca6a80c3
2 changed files with 23 additions and 2 deletions

View File

@ -803,6 +803,16 @@ class ConnectionIBBytestream(ConnectionBytestream):
file_props.fp = open(file_props.file_name, 'w')
conn.send(rep)
def CloseIBBStream(self, file_props):
file_props.connected = False
file_props.fp.close()
file_props.stopped = True
self.connection.send(nbxmpp.Protocol('iq',
file_props.direction[1:], 'set',
payload=[nbxmpp.Node(nbxmpp.NS_IBB + ' close',
{'sid':file_props.sid})]))
def OpenStream(self, sid, to, fp, blocksize=4096):
"""
Start new stream. You should provide stream id 'sid', the endpoind jid
@ -849,6 +859,9 @@ class ConnectionIBBytestream(ConnectionBytestream):
if file_props.direction[0] == '>':
if file_props.paused:
continue
if not file_props.connected:
#TODO: Reply with out of order error
continue
chunk = file_props.fp.read(file_props.block_size)
if chunk:
datanode = nbxmpp.Node(nbxmpp.NS_IBB + ' data', {'sid': sid,
@ -939,6 +952,9 @@ class ConnectionIBBytestream(ConnectionBytestream):
reply.delChild('close')
conn.send(reply)
file_props.fp.close()
file_props.completed = file_props.received_len >= file_props.size
if not file_props.completed:
file_props.error = -1
gajim.socks5queue.complete_transfer_cb(self.name, file_props)
else:
conn.send(nbxmpp.Error(stanza, nbxmpp.ERR_ITEM_NOT_FOUND))
@ -953,8 +969,9 @@ class ConnectionIBBytestream(ConnectionBytestream):
syn_id = stanza.getID()
log.debug('IBBAllIqHandler called syn_id->%s' % syn_id)
for file_props in FilesProp.getAllFileProp():
if not file_props.direction:
if not file_props.direction or not file_props.connected:
# It's socks5 bytestream
# Or we closed the IBB stream
continue
if file_props.syn_id == syn_id:
if stanza.getType() == 'error':

View File

@ -943,7 +943,11 @@ class FileTransfersWindow:
account = file_props.tt_account
if account not in gajim.connections:
return
gajim.connections[account].disconnect_transfer(file_props)
con = gajim.connections[account]
# Check if we are in a IBB transfer
if file_props.direction:
con.CloseIBBStream(file_props)
con.disconnect_transfer(file_props)
self.set_status(file_props, 'stop')
def show_tooltip(self, widget):