[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