]> code.delx.au - pymsnt/commitdiff
Fixed bug in sending files and avatars.
authorjamesbunton <jamesbunton@55fbd22a-6204-0410-b2f0-b6c764c7e90a>
Mon, 23 Jan 2006 01:07:23 +0000 (01:07 +0000)
committerjamesbunton <jamesbunton@55fbd22a-6204-0410-b2f0-b6c764c7e90a>
Mon, 23 Jan 2006 01:07:23 +0000 (01:07 +0000)
git-svn-id: http://delx.cjb.net/svn/pymsnt/trunk@96 55fbd22a-6204-0410-b2f0-b6c764c7e90a

committer: jamesbunton <jamesbunton@55fbd22a-6204-0410-b2f0-b6c764c7e90a>

src/tlib/msn/msn.py
src/tlib/msn/test_msn.py

index f2262da8c63f819f728ba620ce4ba72d8742490d..cc665ad8b984ee4ba4a123dcd98f69aa37b506d8 100644 (file)
@@ -2783,21 +2783,19 @@ class SLPLink_Send(SLPLink):
     def write(self, data):
         if MSNP2PDEBUG: log.msg("write")
         i = 0
+        data = self.data + data
+        self.data = ""
         length = len(data)
         while i < length:
             if i + 1202 < length:
                 self._writeChunk(data[i:i+1202])
                 i += 1202
             else:
-                self.data += data[i:]
-                if len(self.data) >= 1202:
-                    data = self.data
-                    self.data = ""
-                    self.write(data)
+                self.data = data[i:]
                 return
 
     def _writeChunk(self, chunk):
-        log.msg("writing chunk")
+        if MSNP2PDEBUG: log.msg("writing chunk")
         binaryFields = BinaryFields()
         binaryFields[0] = self.sessionID
         if self.offset == 0:
index f87110a59ec446f77b9d1d6c682fba17cc741af1..a15ef456197d4e48939fa39232966f766da72644 100644 (file)
@@ -1058,6 +1058,41 @@ class SwitchboardP2PTests(unittest.TestCase):
 
         self.failUnless((self.gotFile), "Failed to transfer file")
 
+    def testFilesHappyChunkedPath(self):
+        fileData = self._generateData()
+        self.gotFile = False
+
+        # Send the file (client2->client1)
+        msnContact = msn.MSNContact(userHandle='foo1@bar.com', caps=msn.MSNContact.MSNC1)
+        fileSend, d = self.client2.sendFile(msnContact, "myfile.txt", len(fileData))
+        def accepted((yes,)):
+            if yes:
+                fileSend.write(fileData[:len(fileData)/2])
+                fileSend.write(fileData[len(fileData)/2:])
+                fileSend.close()
+            else:
+                raise "TransferDeclined"
+        def failed():
+            raise "TransferError"
+        d.addCallback(accepted)
+        d.addErrback(failed)
+
+        # Let the request get pushed to client1
+        self._loop(10)
+
+        # Receive the file
+        def finished(data):
+            self.gotFile = (data == fileData)
+        fileBuffer = msn.StringBuffer(finished)
+        fileReceive = self.client1.fileReceive
+        self.failUnless((fileReceive.filename == "myfile.txt" and fileReceive.filesize == len(fileData)), "Filename or length wrong.")
+        fileReceive.accept(fileBuffer)
+
+        # Lets transfer!!
+        self._loop(10)
+
+        self.failUnless((self.gotFile), "Failed to transfer file")
+
     def testFilesDeclinePath(self):
         fileData = self._generateData()
         self.gotDecline = False