summaryrefslogtreecommitdiff
path: root/header-value-parser.c
diff options
context:
space:
mode:
Diffstat (limited to 'header-value-parser.c')
-rw-r--r--header-value-parser.c19
1 files changed, 19 insertions, 0 deletions
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;