[telepathy-gabble/master] implement and test resume on the sending side
Guillaume Desmottes
guillaume.desmottes at collabora.co.uk
Fri Apr 17 06:37:04 PDT 2009
---
src/ft-channel.c | 23 +++++++++++++++++++-
.../twisted/file-transfer/file_transfer_helper.py | 14 +++++++----
.../test-send-file-provide-immediately.py | 3 +-
.../test-send-file-wait-to-provide.py | 3 +-
4 files changed, 33 insertions(+), 10 deletions(-)
diff --git a/src/ft-channel.c b/src/ft-channel.c
index 7b3c0f1..68fd7be 100644
--- a/src/ft-channel.c
+++ b/src/ft-channel.c
@@ -1080,6 +1080,7 @@ bytestream_negotiate_cb (GabbleBytestreamIface *bytestream,
gpointer user_data)
{
GabbleFileTransferChannel *self = GABBLE_FILE_TRANSFER_CHANNEL (user_data);
+ LmMessageNode *file;
if (bytestream == NULL)
{
@@ -1091,7 +1092,27 @@ bytestream_negotiate_cb (GabbleBytestreamIface *bytestream,
return;
}
- DEBUG ("receiver accepted file offer");
+ file = lm_message_node_find_child (msg->node, "file");
+ if (file != NULL)
+ {
+ LmMessageNode *range;
+
+ range = lm_message_node_get_child_any_ns (file, "range");
+ if (range != NULL)
+ {
+ const gchar *offset_str;
+
+ offset_str = lm_message_node_get_attribute (range, "offset");
+ if (offset_str != NULL)
+ {
+ self->priv->initial_offset = g_ascii_strtoull (offset_str, NULL,
+ 0);
+ }
+ }
+ }
+
+ DEBUG ("receiver accepted file offer (offset: %" G_GUINT64_FORMAT ")",
+ self->priv->initial_offset);
set_bytestream (self, bytestream);
diff --git a/tests/twisted/file-transfer/file_transfer_helper.py b/tests/twisted/file-transfer/file_transfer_helper.py
index 4e7b6c6..f1575bd 100644
--- a/tests/twisted/file-transfer/file_transfer_helper.py
+++ b/tests/twisted/file-transfer/file_transfer_helper.py
@@ -390,6 +390,9 @@ class SendFileTest(FileTransferTest):
def client_accept_file(self):
# accept SI offer
result, si = self.bytestream.create_si_reply(self.iq)
+ file_node = si.addElement((ns.FILE_TRANSFER, 'file'))
+ range = file_node.addElement('range')
+ range['offset'] = str(self.file.offset)
self.stream.send(result)
self.bytestream.wait_bytestream_open()
@@ -397,8 +400,9 @@ class SendFileTest(FileTransferTest):
def send_file(self):
s = self.create_socket()
s.connect(self.address)
- s.send(self.file.data)
+ s.send(self.file.data[self.file.offset:])
+ to_receive = self.file.size - self.file.offset
self.count = 0
def bytes_changed_cb(bytes):
@@ -408,17 +412,17 @@ class SendFileTest(FileTransferTest):
# get data from bytestream
data = ''
- while len(data) < self.file.size:
+ while len(data) < to_receive:
data += self.bytestream.get_data()
- assert data == self.file.data
+ assert data == self.file.data[self.file.offset:]
# If not all the bytes transferred have been announced using
# TransferredBytesChanged, wait for them
- while self.count < self.file.size:
+ while self.count < to_receive:
self.q.expect('dbus-signal', signal='TransferredBytesChanged')
- assert self.count == self.file.size
+ assert self.count == to_receive
# FileTransferStateChanged could have already been fired
events = self.bytestream.wait_bytestream_closed(
diff --git a/tests/twisted/file-transfer/test-send-file-provide-immediately.py b/tests/twisted/file-transfer/test-send-file-provide-immediately.py
index 16f089e..edb2ce5 100644
--- a/tests/twisted/file-transfer/test-send-file-provide-immediately.py
+++ b/tests/twisted/file-transfer/test-send-file-provide-immediately.py
@@ -14,8 +14,7 @@ class SendFileTransferProvideImmediately(SendFileTest):
e = self.q.expect('dbus-signal', signal='InitialOffsetDefined')
offset = e.args[0]
- # We don't support resume
- assert offset == 0
+ assert offset == self.file.offset
# Channel is open. We can start to send the file
e = self.q.expect('dbus-signal', signal='FileTransferStateChanged')
diff --git a/tests/twisted/file-transfer/test-send-file-wait-to-provide.py b/tests/twisted/file-transfer/test-send-file-wait-to-provide.py
index 55334fa..a528ce6 100644
--- a/tests/twisted/file-transfer/test-send-file-wait-to-provide.py
+++ b/tests/twisted/file-transfer/test-send-file-wait-to-provide.py
@@ -27,8 +27,7 @@ class SendFileTransferWaitToProvideTest(SendFileTest):
e = self.q.expect('dbus-signal', signal='InitialOffsetDefined')
offset = e.args[0]
- # We don't support resume
- assert offset == 0
+ assert offset == self.file.offset
# Channel is open. We can start to send the file
e = self.q.expect('dbus-signal', signal='FileTransferStateChanged')
--
1.5.6.5
More information about the telepathy-commits
mailing list