From 0308b0cc9fab95f0f12aa874ae1fcded31d7f573 Mon Sep 17 00:00:00 2001 From: Paul Duncan Date: Sun, 28 Aug 2016 23:23:10 -0400 Subject: add content-type parser --- header-value-parser.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) (limited to 'header-value-parser.c') diff --git a/header-value-parser.c b/header-value-parser.c index e3c4107..d899889 100644 --- a/header-value-parser.c +++ b/header-value-parser.c @@ -33,6 +33,13 @@ fhp_header_value_parser_init(fhp_ctx_t * const ctx) { // init parser if ((err = fhp_cl_parser_init(&(ctx->parsers.cl))) != FHP_OK) return err; + } else if (hash == ctx->env->hashes[FHP_STR_CONTENT_TYPE]) { + // set parser type + parser = FHP_HEADER_VALUE_PARSER_CONTENT_TYPE; + + // init parser + if ((err = fhp_ct_parser_init(&(ctx->parsers.ct), ctx->env)) != FHP_OK) + return err; } else { // set default parser type parser = FHP_HEADER_VALUE_PARSER_NONE; @@ -60,6 +67,9 @@ fhp_header_value_parser_push( case FHP_HEADER_VALUE_PARSER_CONTENT_LENGTH: r = fhp_cl_parser_push(&(ctx->parsers.cl), buf, len); break; + case FHP_HEADER_VALUE_PARSER_CONTENT_TYPE: + r = fhp_ct_parser_push(&(ctx->parsers.ct), buf, len); + break; default: // do nothing r = FHP_OK; @@ -151,6 +161,15 @@ fhp_header_value_parser_done(fhp_ctx_t * const ctx) { return FHP_ERR_CB; break; + case FHP_HEADER_VALUE_PARSER_CONTENT_TYPE: + // finish parsing content-length and copy to context + if ((r = fhp_ct_parser_done(&(ctx->parsers.ct), &(ctx->content_type))) != FHP_OK) + return r; + + // notify callback + if (!ctx->cb(ctx, FHP_TOKEN_HEADER_CONTENT_TYPE, 0, 0)) + return FHP_ERR_CB; + default: // do nothing r = FHP_OK; -- cgit v1.2.3