summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rw-r--r--include/fhp/fhp.h33
1 files changed, 32 insertions, 1 deletions
diff --git a/include/fhp/fhp.h b/include/fhp/fhp.h
index 3aa020d..6225843 100644
--- a/include/fhp/fhp.h
+++ b/include/fhp/fhp.h
@@ -96,6 +96,7 @@ typedef enum {
FHP_TOKEN_HEADER_TRANSFER_ENCODING,
FHP_TOKEN_HEADER_CONTENT_LENGTH,
+ FHP_TOKEN_HEADER_CONTENT_TYPE,
FHP_TOKEN_HEADERS_END,
@@ -127,7 +128,7 @@ typedef enum {
// env functions
//
-#define FHP_ENV_NUM_HASHES 17
+#define FHP_ENV_NUM_HASHES 20
typedef struct {
uint32_t hashes[FHP_ENV_NUM_HASHES];
@@ -165,6 +166,32 @@ fhp_err_t
fhp_cl_parser_done(fhp_cl_parser_t * const, uint64_t * const);
//
+// content-type parser functions
+//
+
+typedef enum {
+ FHP_CONTENT_TYPE_NONE,
+ FHP_CONTENT_TYPE_APPLICATION_X_WWW_FORM_URLENCODED,
+ FHP_CONTENT_TYPE_MULTIPART_FORM_DATA,
+ FHP_CONTENT_TYPE_OTHER,
+ FHP_CONTENT_TYPE_LAST
+} fhp_content_type_t;
+
+typedef struct {
+ fhp_env_t *env;
+ uint32_t hash;
+} fhp_ct_parser_t;
+
+fhp_err_t
+fhp_ct_parser_init(fhp_ct_parser_t * const, fhp_env_t * const);
+
+fhp_err_t
+fhp_ct_parser_push(fhp_ct_parser_t *, uint8_t * const, size_t);
+
+fhp_err_t
+fhp_ct_parser_done(fhp_ct_parser_t * const, fhp_content_type_t * const);
+
+//
// transfer-encoding parser functions
//
@@ -257,6 +284,7 @@ typedef enum {
FHP_HEADER_VALUE_PARSER_NONE,
FHP_HEADER_VALUE_PARSER_TRANSFER_ENCODING,
FHP_HEADER_VALUE_PARSER_CONTENT_LENGTH,
+ FHP_HEADER_VALUE_PARSER_CONTENT_TYPE,
FHP_HEADER_VALUE_PARSER_LAST
} fhp_header_value_parser_t;
@@ -302,6 +330,7 @@ struct fhp_ctx_t_ {
union {
fhp_te_parser_t te;
fhp_cl_parser_t cl;
+ fhp_ct_parser_t ct;
} parsers;
// request body type
@@ -310,6 +339,8 @@ struct fhp_ctx_t_ {
// content length
uint64_t content_length;
+ fhp_content_type_t content_type;
+
// transfer encodings
uint32_t tes[FHP_CTX_MAX_TRANSFER_ENCODINGS];
size_t num_tes;