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')
|
file_props.fp = open(file_props.file_name, 'w')
|
||||||
conn.send(rep)
|
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):
|
def OpenStream(self, sid, to, fp, blocksize=4096):
|
||||||
"""
|
"""
|
||||||
Start new stream. You should provide stream id 'sid', the endpoind jid
|
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.direction[0] == '>':
|
||||||
if file_props.paused:
|
if file_props.paused:
|
||||||
continue
|
continue
|
||||||
|
if not file_props.connected:
|
||||||
|
#TODO: Reply with out of order error
|
||||||
|
continue
|
||||||
chunk = file_props.fp.read(file_props.block_size)
|
chunk = file_props.fp.read(file_props.block_size)
|
||||||
if chunk:
|
if chunk:
|
||||||
datanode = nbxmpp.Node(nbxmpp.NS_IBB + ' data', {'sid': sid,
|
datanode = nbxmpp.Node(nbxmpp.NS_IBB + ' data', {'sid': sid,
|
||||||
|
@ -939,6 +952,9 @@ class ConnectionIBBytestream(ConnectionBytestream):
|
||||||
reply.delChild('close')
|
reply.delChild('close')
|
||||||
conn.send(reply)
|
conn.send(reply)
|
||||||
file_props.fp.close()
|
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)
|
gajim.socks5queue.complete_transfer_cb(self.name, file_props)
|
||||||
else:
|
else:
|
||||||
conn.send(nbxmpp.Error(stanza, nbxmpp.ERR_ITEM_NOT_FOUND))
|
conn.send(nbxmpp.Error(stanza, nbxmpp.ERR_ITEM_NOT_FOUND))
|
||||||
|
@ -953,8 +969,9 @@ class ConnectionIBBytestream(ConnectionBytestream):
|
||||||
syn_id = stanza.getID()
|
syn_id = stanza.getID()
|
||||||
log.debug('IBBAllIqHandler called syn_id->%s' % syn_id)
|
log.debug('IBBAllIqHandler called syn_id->%s' % syn_id)
|
||||||
for file_props in FilesProp.getAllFileProp():
|
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
|
# It's socks5 bytestream
|
||||||
|
# Or we closed the IBB stream
|
||||||
continue
|
continue
|
||||||
if file_props.syn_id == syn_id:
|
if file_props.syn_id == syn_id:
|
||||||
if stanza.getType() == 'error':
|
if stanza.getType() == 'error':
|
||||||
|
|
|
@ -943,7 +943,11 @@ class FileTransfersWindow:
|
||||||
account = file_props.tt_account
|
account = file_props.tt_account
|
||||||
if account not in gajim.connections:
|
if account not in gajim.connections:
|
||||||
return
|
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')
|
self.set_status(file_props, 'stop')
|
||||||
|
|
||||||
def show_tooltip(self, widget):
|
def show_tooltip(self, widget):
|
||||||
|
|
Loading…
Reference in New Issue