summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLouis-Francis Ratté-Boulianne <louis-francis.ratte-boulianne@collabora.co.uk>2010-08-11 13:40:11 -0400
committerLouis-Francis Ratté-Boulianne <louis-francis.ratte-boulianne@collabora.co.uk>2010-08-13 00:30:24 -0400
commit86dd719a2f3a78770a64a04b23cc4363787abf7b (patch)
treee04c0a42b1133adb798b13a23cc63ac596a8b850
parentbfdc83907bc27b12a94494d6fb8c5976f0462e5c (diff)
ft: cancel file transfer when the listening socket gets an error
-rw-r--r--butterfly/channel/file_transfer.py23
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")