diff options
author | Louis-Francis Ratté-Boulianne <louis-francis.ratte-boulianne@collabora.co.uk> | 2010-08-11 13:40:11 -0400 |
---|---|---|
committer | Louis-Francis Ratté-Boulianne <louis-francis.ratte-boulianne@collabora.co.uk> | 2010-08-13 00:30:24 -0400 |
commit | 86dd719a2f3a78770a64a04b23cc4363787abf7b (patch) | |
tree | e04c0a42b1133adb798b13a23cc63ac596a8b850 | |
parent | bfdc83907bc27b12a94494d6fb8c5976f0462e5c (diff) |
ft: cancel file transfer when the listening socket gets an error
-rw-r--r-- | butterfly/channel/file_transfer.py | 23 |
1 files changed, 12 insertions, 11 deletions
diff --git a/butterfly/channel/file_transfer.py b/butterfly/channel/file_transfer.py index 527da80..6985f46 100644 --- a/butterfly/channel/file_transfer.py +++ b/butterfly/channel/file_transfer.py @@ -174,12 +174,7 @@ class ButterflyFileTransferChannel(telepathy.server.ChannelTypeFileTransfer): def Close(self): logger.debug("Close") - if self._receiving and self.state == telepathy.FILE_TRANSFER_STATE_PENDING: - self._session.reject() - elif self.state not in (telepathy.FILE_TRANSFER_STATE_CANCELLED, - telepathy.FILE_TRANSFER_STATE_COMPLETED): - self._session.cancel() - + self.cancel() if self.state != telepathy.FILE_TRANSFER_STATE_COMPLETED: self.set_state(telepathy.FILE_TRANSFER_STATE_CANCELLED, telepathy.FILE_TRANSFER_STATE_CHANGE_REASON_LOCAL_STOPPED) @@ -188,6 +183,13 @@ class ButterflyFileTransferChannel(telepathy.server.ChannelTypeFileTransfer): self.cleanup() self.remove_from_connection() + def cancel(self): + if self._receiving and self.state == telepathy.FILE_TRANSFER_STATE_PENDING: + self._session.reject() + elif self.state not in (telepathy.FILE_TRANSFER_STATE_CANCELLED, + telepathy.FILE_TRANSFER_STATE_COMPLETED): + self._session.cancel() + def cleanup(self): if self.socket: self.socket.close() @@ -244,11 +246,10 @@ class ButterflyFileTransferChannel(telepathy.server.ChannelTypeFileTransfer): for source in self._sources: gobject.source_remove(source) channel.close() - #self.cleanup() - #TODO only cancel if the socket is disconnected while listening - #self._session.cancel() - #self.set_state(telepathy.FILE_TRANSFER_STATE_CANCELLED, - # telepathy.FILE_TRANSFER_STATE_CHANGE_REASON_LOCAL_ERROR) + + self.cancel() + self.set_state(telepathy.FILE_TRANSFER_STATE_CANCELLED, + telepathy.FILE_TRANSFER_STATE_CHANGE_REASON_LOCAL_ERROR) def _transfer_accepted(self, session): logger.debug("Transfer has been accepted") |