GNU libmicrohttpd
0.9.72
|
Methods for parsing POST data. More...
Go to the source code of this file.
Macros | |
#define | XBUF_SIZE 512 |
Enumerations | |
enum | PP_State { PP_Error , PP_Done , PP_Init , PP_NextBoundary , PP_ProcessValue , PP_Callback , PP_ExpectNewLine , PP_ProcessEntryHeaders , PP_PerformCheckMultipart , PP_ProcessValueToBoundary , PP_PerformCleanup , PP_Nested_Init , PP_Nested_PerformMarking , PP_Nested_ProcessEntryHeaders , PP_Nested_ProcessValueToBoundary , PP_Nested_PerformCleanup } |
enum | RN_State { RN_Inactive = 0 , RN_OptN = 1 , RN_Full = 2 , RN_Dash = 3 , RN_Dash2 = 4 } |
enum | NE_State { NE_none = 0 , NE_content_name = 1 , NE_content_type = 2 , NE_content_filename = 4 , NE_content_transfer_encoding = 8 } |
Functions | |
_MHD_EXTERN struct MHD_PostProcessor * | MHD_create_post_processor (struct MHD_Connection *connection, size_t buffer_size, MHD_PostDataIterator iter, void *iter_cls) |
static void | process_value (struct MHD_PostProcessor *pp, const char *value_start, const char *value_end, const char *last_escape) |
static int | post_process_urlencoded (struct MHD_PostProcessor *pp, const char *post_data, size_t post_data_len) |
static int | try_match_header (const char *prefix, size_t prefix_len, char *line, char **suffix) |
static int | find_boundary (struct MHD_PostProcessor *pp, const char *boundary, size_t blen, size_t *ioffptr, enum PP_State next_state, enum PP_State next_dash_state) |
static void | try_get_value (const char *buf, const char *key, char **destination) |
static int | process_multipart_headers (struct MHD_PostProcessor *pp, size_t *ioffptr, enum PP_State next_state) |
static int | process_value_to_boundary (struct MHD_PostProcessor *pp, size_t *ioffptr, const char *boundary, size_t blen, enum PP_State next_state, enum PP_State next_dash_state) |
static void | free_unmarked (struct MHD_PostProcessor *pp) |
static int | post_process_multipart (struct MHD_PostProcessor *pp, const char *post_data, size_t post_data_len) |
_MHD_EXTERN enum MHD_Result | MHD_post_process (struct MHD_PostProcessor *pp, const char *post_data, size_t post_data_len) |
_MHD_EXTERN enum MHD_Result | MHD_destroy_post_processor (struct MHD_PostProcessor *pp) |
Methods for parsing POST data.
Definition in file postprocessor.c.
#define XBUF_SIZE 512 |
Size of on-stack buffer that we use for un-escaping of the value. We use a pretty small value to be nice to the stack on embedded systems.
Definition at line 36 of file postprocessor.c.
enum NE_State |
Bits for the globally known fields that should not be deleted when we exit the nested state.
Enumerator | |
---|---|
NE_none | |
NE_content_name | |
NE_content_type | |
NE_content_filename | |
NE_content_transfer_encoding |
Definition at line 107 of file postprocessor.c.
enum PP_State |
States in the PP parser's state machine.
Definition at line 41 of file postprocessor.c.
enum RN_State |
Definition at line 70 of file postprocessor.c.
|
static |
pp | post processor context |
boundary | boundary to look for |
blen | number of bytes in boundary |
ioffptr | set to the end of the boundary if found, otherwise incremented by one (FIXME: quirky API!) |
next_state | state to which we should advance the post processor if the boundary is found |
next_dash_state | dash_state to which we should advance the post processor if the boundary is found |
Definition at line 771 of file postprocessor.c.
References MHD_NO, MHD_YES, NULL, PP_Error, PP_Init, and RN_Dash.
Referenced by MHD_destroy_post_processor().
|
static |
pp | post processor context |
Definition at line 1064 of file postprocessor.c.
References NE_content_filename, NE_content_name, NE_content_transfer_encoding, NE_content_type, and NULL.
Referenced by MHD_destroy_post_processor().
|
static |
Decode multipart POST data.
pp | post processor context |
post_data | data to decode |
post_data_len | number of bytes in post_data |
Per RFC2046 5.1.1 NOTE TO IMPLEMENTORS, consume anything prior to the first multipart boundary:
There appears to be room for additional information prior to the first boundary delimiter line and following the final boundary delimiter line. These areas should generally be left blank, and implementations must ignore anything that appears before the first boundary delimiter line or after the last one.
Definition at line 1102 of file postprocessor.c.
|
static |
Process url-encoded POST data.
pp | post processor context |
post_data | upload data |
post_data_len | number of bytes in post_data |
Definition at line 501 of file postprocessor.c.
References mhd_assert, MHD_http_unescape(), MHD_NO, mhd_panic, mhd_panic_cls, MHD_unescape_plus(), MHD_YES, NULL, PP_Callback, PP_Done, PP_Error, PP_Init, PP_ProcessValue, and process_value().
|
static |
Go over the headers of the part and update the fields in "pp" according to what we find. If we are at the end of the headers (as indicated by an empty line), transition into next_state.
pp | post processor context |
ioffptr | set to how many bytes have been processed |
next_state | state to which the post processor should be advanced if we find the end of the headers |
Definition at line 890 of file postprocessor.c.
References MHD_NO, MHD_STATICSTR_LEN_, MHD_str_equal_caseless_n_(), MHD_YES, PP_Error, RN_Full, RN_OptN, try_get_value(), and try_match_header().
Referenced by MHD_destroy_post_processor().
|
static |
Give a (possibly partial) value to the application callback. We have some part of the value in the 'pp->xbuf', the rest is between value_start and value_end. If last_escape is non-NULL, there may be an incomplete escape sequence at at value_escape between value_start and value_end which we should preserve in 'pp->xbuf' for the future.
Unescapes the value and calls the iterator together with the key. The key must already be in the key buffer allocated and 0-terminated at the end of pp at the time of the call.
[in,out] | pp | post processor to act upon |
value_start | where in memory is the value | |
value_end | where does the value end | |
last_escape | last ''-sign in value range, if relevant, or NULL |
Definition at line 374 of file postprocessor.c.
References mhd_assert, MHD_http_unescape(), MHD_NO, MHD_POSTDATA_KIND, MHD_unescape_plus(), NULL, PP_Error, and XBUF_SIZE.
Referenced by post_process_urlencoded().
|
static |
We have the value until we hit the given boundary; process accordingly.
pp | post processor context |
ioffptr | incremented based on the number of bytes processed |
boundary | the boundary to look for |
blen | strlen(boundary) |
next_state | what state to go into after the boundary was found |
next_dash_state | state to go into if the next boundary ends with "--" |
Definition at line 964 of file postprocessor.c.
References MHD_NO, MHD_POSTDATA_KIND, MHD_YES, NULL, PP_Error, and RN_Dash.
Referenced by MHD_destroy_post_processor().
|
static |
In buf, there maybe an expression '$key="$value"'. If that is the case, copy a copy of $value to destination.
If destination is already non-NULL, do nothing.
Definition at line 832 of file postprocessor.c.
References NULL.
Referenced by process_multipart_headers().
|
static |
If the given line matches the prefix, strdup the rest of the line into the suffix ptr.
prefix | prefix to match |
prefix_len | length of prefix |
line | line to match prefix in |
suffix | set to a copy of the rest of the line, starting at the end of the match |
Definition at line 735 of file postprocessor.c.
References MHD_NO, MHD_str_equal_caseless_n_(), MHD_YES, and NULL.
Referenced by process_multipart_headers().