2
0
Fork 0
lighttpd2/include/lighttpd/chunk_parser.h

55 lines
1.5 KiB
C

#ifndef _LIGHTTPD_CHUNK_PARSER_H_
#define _LIGHTTPD_CHUNK_PARSER_H_
#ifndef _LIGHTTPD_BASE_H_
#error Please include <lighttpd/base.h> instead of this file
#endif
struct liChunkParserCtx {
liChunkQueue *cq;
goffset bytes_in;
/* current position
* buf is curi[start..start+length)
*/
liChunkIter curi;
off_t start, length;
char *buf;
int cs;
};
struct liChunkParserMark {
liChunkIter ci;
off_t pos, abs_pos;
};
LI_API void li_chunk_parser_init(liChunkParserCtx *ctx, liChunkQueue *cq);
LI_API void li_chunk_parser_reset(liChunkParserCtx *ctx);
LI_API liHandlerResult li_chunk_parser_prepare(liChunkParserCtx *ctx);
LI_API liHandlerResult li_chunk_parser_next(liChunkParserCtx *ctx, char **p, char **pe, GError **err);
LI_API void li_chunk_parser_done(liChunkParserCtx *ctx, goffset len);
/* extract [from..to) */
LI_API gboolean li_chunk_extract_to(liChunkParserMark from, liChunkParserMark to, GString *dest, GError **err);
LI_API GString* li_chunk_extract(liChunkParserMark from, liChunkParserMark to, GError **err);
INLINE liChunkParserMark li_chunk_parser_getmark(liChunkParserCtx *ctx, const char *fpc);
/********************
* Inline functions *
********************/
INLINE liChunkParserMark li_chunk_parser_getmark(liChunkParserCtx *ctx, const char *fpc) {
liChunkParserMark m;
m.ci = ctx->curi;
m.pos = ctx->start + fpc - ctx->buf;
m.abs_pos = ctx->bytes_in + fpc - ctx->buf;
return m;
}
#define LI_GETMARK(FPC) (li_chunk_parser_getmark(&ctx->chunk_ctx, FPC))
#endif