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:
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