trafficserver-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From James Peach <jamespe...@me.com>
Subject marshalling partial blocks into a TSIOBuffer
Date Mon, 21 Nov 2011 19:44:52 GMT
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
Mime
View raw message