Cancel an IBB transfer
This commit is contained in:
parent
6894db0224
commit
c4ca6a80c3
|
@ -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':
|
||||
|
|
|
@ -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):
|
||||
|
|
Loading…
Reference in New Issue