diff options
Diffstat (limited to 'utils')
-rw-r--r-- | utils/http.c | 36 | ||||
-rw-r--r-- | utils/http.h | 12 |
2 files changed, 48 insertions, 0 deletions
diff --git a/utils/http.c b/utils/http.c index 71c8a216e..7ae2fb386 100644 --- a/utils/http.c +++ b/utils/http.c @@ -344,6 +344,42 @@ nserror http_parse_content_type(const char *header_value, char **media_type, } /* See http.h for documentation */ +nserror http_parse_content_disposition(const char *header_value, + char **disposition_type, http_parameter **parameters) +{ + const char *pos = header_value; + char *type; + http_parameter *params = NULL; + nserror error; + + /* disposition-type *( ";" parameter ) */ + + while (*pos == ' ' || *pos == '\t') + pos++; + + error = http_parse_token(&pos, &type); + if (error != NSERROR_OK) + return error; + + while (*pos == ' ' || *pos == '\t') + pos++; + + if (*pos == ';') { + error = http_parse_parameter_list(&pos, ¶ms); + if (error != NSERROR_OK) { + free(type); + return error; + } + } + + *disposition_type = type; + *parameters = params; + + return NSERROR_OK; + +} + +/* See http.h for documentation */ nserror http_parameter_list_find_item(const http_parameter *list, const char *name, const char **value) { diff --git a/utils/http.h b/utils/http.h index 1d8b4de6c..f15a10218 100644 --- a/utils/http.h +++ b/utils/http.h @@ -40,6 +40,18 @@ nserror http_parse_content_type(const char *header_value, char **media_type, http_parameter **parameters); /** + * Parse an HTTP Content-Disposition header value + * + * \param header_value Header value to parse + * \param disposition_type Pointer to location to receive disposition type + * \param parameters Pointer to location to receive parameter list + * \return NSERROR_OK on success, + * NSERROR_NOMEM on memory exhaustion + */ +nserror http_parse_content_disposition(const char *header_value, + char **disposition_type, http_parameter **parameters); + +/** * Find a named item in an HTTP parameter list * * \param list List to search |