sven should we do an update in zinc for 2.0? Stef On Aug 2, 2012, at 11:39 AM, Sven Van Caekenberghe wrote:
Hi Chris,
On 21 Jul 2012, at 17:52, Chris <cpmbailey@btinternet.com> wrote:
On 20/07/2012 18:30, Sven Van Caekenberghe wrote:
On 20 Jul 2012, at 18:22, Chris wrote:
Thanks for that. I'm actually still having a bit of trouble when the file is bigger than the chunk size. ZnChunkedReadStream>>#readInto:startingAt:count: uses a limit variable which is bigger than the collection and requestedCount. I won't be able to do anything until the beginning of August.
It would be really helpful if you could provide me with an actual test case that fails.
Okay thanks Sven, I'll see what I can do. I am just working with a third party server which is sending chunks of 1mb (which I assume is valid) and I think Zinc just needs to support chunks bigger than the 16k in the above method
Regards, Chris
The 16K buffer used in ZnUtils>>#streamFrom:to:[size:] is independent from the chunk buffer used in ZnChunkedReadStream, BUT you did find a serious problem. Actually the code of ZnChunkedReadStream>>#readInto:startingAt:count: was embarrassingly bad and wrong although it did work in all cases thrown to it up until now.
I added an extra test for the case where the buffer being used is smaller than the chunk size:
ZnChunkedReadStream>>#testReadingBuffered | data chunked plain buffer readStream | data := String withAll: ($a to: $z), ($A to: $Z). chunked := String streamContents: [ :stream | ZnUtils nextPutAll: data on: stream chunked: 16 ]. readStream := ZnChunkedReadStream on: chunked readStream. buffer := String new: 11. plain := String streamContents: [ :output | | readCount | [ readStream atEnd ] whileFalse: [ readCount := readStream readInto: buffer startingAt: 1 count: buffer size. output next: readCount putAll: buffer ] ]. self assert: plain equals: data
As usual, load the latest code to get the fix. I hope it now works for your particular case.
Thanks again for reporting this, being persistent about it and for pointing me in the right direction !
Regards,
Sven
Here are the actual commits:
=== Name: Zinc-HTTP-SvenVanCaekenberghe.291 Author: SvenVanCaekenberghe Time: 2 August 2012, 11:26:02 am UUID: 3d8c50cd-2d7b-459f-89f3-b77a23dccfdd Ancestors: Zinc-HTTP-SvenVanCaekenberghe.290
various fixes to ZnChunkedReadStream>>#readInto:startingAt:count: (thx Chris Bailey for reporting the problem); added ZnLimitedReadStream>>#nextInto: as it is used by Fuel === Name: Zinc-Tests-SvenVanCaekenberghe.151 Author: SvenVanCaekenberghe Time: 2 August 2012, 11:27:58 am UUID: 3da15e83-c0ca-4066-a496-71d91393db01 Ancestors: Zinc-Tests-SvenVanCaekenberghe.150
added new ZnChunkedReadStreamTests>>#testReadingBuffered to validate various fixes to ZnChunkedReadStream>>#readInto:startingAt:count: (thx Chris Bailey for reporting the problem) ===
-- Sven Van Caekenberghe http://stfx.eu Smalltalk is the Red Pill