You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@trafficserver.apache.org by James Peach <ja...@me.com> on 2011/11/21 20:44:52 UTC

marshalling partial blocks into a TSIOBuffer

Hi all,

I'm working on a protocol plugin and I would like to marshall a response directly into a TSIOBuffer. AFAICT the right way to do this is roughly:

	TSIOBuffer buffer;
	TSIOBufferBlock blk;
	char * ptr;
	size_t avail;
	size_t total;

	blk = TSIOBufferStart(buffer);
	do {
		ptr = TSIOBufferBlockWriteStart(blk, &avail);
		// (1) marshall up to avail into ptr
		…
		total += avail;
		blk = TSIOBufferBlockNext(blk);
	} while (!finished);

	// make the written data visible
	TSIOBufferProduce(buffer, total);

AFAICT, TSIOBufferProduce() assumes that all the intermediate buffer blocks are completely filled. This means that if the space available at (1) is some inconvenient size, then I might have to handle splitting a uint32_t across the buffer block boundary.

Is there a way to set the buffer block's end pointer so that I can build a buffer containing partially filled blocks?

thanks,
James