summaryrefslogtreecommitdiff
path: root/header-value-parser.c
diff options
context:
space:
mode:
authorPaul Duncan <pabs@pablotron.org>2016-08-28 23:23:10 -0400
committerPaul Duncan <pabs@pablotron.org>2016-08-28 23:23:10 -0400
commit0308b0cc9fab95f0f12aa874ae1fcded31d7f573 (patch)
tree47e40528e1439e161b3f855e2bab7c7233b6d94a /header-value-parser.c
parent845ddb43da8aa2a8c80a9d9638d63386ddf97d7e (diff)
downloadlibfhp-0308b0cc9fab95f0f12aa874ae1fcded31d7f573.tar.bz2
libfhp-0308b0cc9fab95f0f12aa874ae1fcded31d7f573.zip
add content-type parser
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;