mirror of
http://git.haproxy.org/git/haproxy.git/
synced 2024-12-21 20:00:17 +00:00
MINOR: htx: Add a function to return a block at a specific offset
The htx_find_offset() function may be used to look for a block at a specific offset in an HTX message, starting from the message head. A compound result is returned, an htx_ret structure, with the found block and the position of the offset in the block. If the offset is ouside of the HTX message, the returned block is NULL.
This commit is contained in:
parent
251f4917c3
commit
1cdceb9365
@ -230,6 +230,7 @@ extern struct htx htx_empty;
|
||||
struct htx_blk *htx_defrag(struct htx *htx, struct htx_blk *blk);
|
||||
struct htx_blk *htx_add_blk(struct htx *htx, enum htx_blk_type type, uint32_t blksz);
|
||||
struct htx_blk *htx_remove_blk(struct htx *htx, struct htx_blk *blk);
|
||||
struct htx_ret htx_find_offset(struct htx *htx, uint32_t offset);
|
||||
void htx_truncate(struct htx *htx, uint32_t offset);
|
||||
struct htx_ret htx_drain(struct htx *htx, uint32_t max);
|
||||
|
||||
|
25
src/htx.c
25
src/htx.c
@ -391,6 +391,31 @@ struct htx_blk *htx_remove_blk(struct htx *htx, struct htx_blk *blk)
|
||||
return blk;
|
||||
}
|
||||
|
||||
/* Looks for the HTX block containing the offset <offset>, starting at the HTX
|
||||
* message's head. The function returns an htx_ret with the found HTX block and
|
||||
* the position inside this block where the offset is. If the offset <offset> is
|
||||
* ouside of the HTX message, htx_ret.blk is set to NULL.
|
||||
*/
|
||||
struct htx_ret htx_find_offset(struct htx *htx, uint32_t offset)
|
||||
{
|
||||
struct htx_blk *blk;
|
||||
struct htx_ret htxret = { .blk = NULL, .ret = 0 };
|
||||
|
||||
if (offset >= htx->data)
|
||||
return htxret;
|
||||
|
||||
for (blk = htx_get_head_blk(htx); blk && offset; blk = htx_get_next_blk(htx, blk)) {
|
||||
uint32_t sz = htx_get_blksz(blk);
|
||||
|
||||
if (offset < sz)
|
||||
break;
|
||||
offset -= sz;
|
||||
}
|
||||
htxret.blk = blk;
|
||||
htxret.ret = offset;
|
||||
return htxret;
|
||||
}
|
||||
|
||||
/* Removes all blocks after the one containing the offset <offset>. This last
|
||||
* one may be truncated if it is a DATA block.
|
||||
*/
|
||||
|
Loading…
Reference in New Issue
Block a user