summaryrefslogtreecommitdiff
path: root/utils
diff options
context:
space:
mode:
authorJohn Mark Bell <jmb@netsurf-browser.org>2011-02-22 23:46:03 +0000
committerJohn Mark Bell <jmb@netsurf-browser.org>2011-02-22 23:46:03 +0000
commitc550ae0e698d5cac09562fc800805726c8e10411 (patch)
tree0dc7913ced74018fdbae0f7cf220bc90667eb169 /utils
parentcbaada8305f949ed8bc54804162e41b3dc5e4596 (diff)
downloadnetsurf-c550ae0e698d5cac09562fc800805726c8e10411.tar.gz
netsurf-c550ae0e698d5cac09562fc800805726c8e10411.tar.bz2
Parser for Content-Disposition header
svn path=/trunk/netsurf/; revision=11765
Diffstat (limited to 'utils')
-rw-r--r--utils/http.c36
-rw-r--r--utils/http.h12
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, &params);
+ 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