From ef0536794c99596e1f49f4ddbae73fe2e5241327 Mon Sep 17 00:00:00 2001 From: Victor Julien Date: Tue, 3 May 2011 21:46:58 +0200 Subject: [PATCH] Adding comments, some cleanups. --- src/app-layer-htp.c | 52 ++++++++++++++++++++++++++++++++++++++------- 1 file changed, 44 insertions(+), 8 deletions(-) diff --git a/src/app-layer-htp.c b/src/app-layer-htp.c index ace57c5bc1..92c9e0a9f7 100644 --- a/src/app-layer-htp.c +++ b/src/app-layer-htp.c @@ -93,8 +93,12 @@ static uint64_t htp_state_memuse = 0; static uint64_t htp_state_memcnt = 0; #endif +/** part of the engine needs the request body (e.g. http_client_body keyword) */ static uint8_t need_htp_request_body = 0; +/** part of the engine needs the request body multipart header (e.g. filename + * and / or fileext keywords) */ static uint8_t need_htp_request_multipart_hdr = 0; +/** part of the engine needs the request file (e.g. log-file module) */ static uint8_t need_htp_request_file = 0; #ifdef DEBUG @@ -294,21 +298,30 @@ void AppLayerHtpEnableRequestBodyCallback(void) /** * \brief Sets a flag that informs the HTP app layer that some module in the - * engine needs the http request body data. + * engine needs the http request multi part header. + * * \initonly */ -void AppLayerHtpNeedFileInspection(void) -{ +void AppLayerHtpNeedMultipartHeader(void) { SCEnter(); - need_htp_request_body = 1; - need_htp_request_file = 1; + AppLayerHtpEnableRequestBodyCallback(); + + need_htp_request_multipart_hdr = 1; SCReturn; } -void AppLayerHtpNeedMultipartHeader(void) { +/** + * \brief Sets a flag that informs the HTP app layer that some module in the + * engine needs the http request file. + * + * \initonly + */ +void AppLayerHtpNeedFileInspection(void) +{ SCEnter(); - need_htp_request_body = 1; - need_htp_request_multipart_hdr = 1; + AppLayerHtpNeedMultipartHeader(); + + need_htp_request_file = 1; SCReturn; } @@ -791,6 +804,18 @@ static int HTTPParseContentTypeHeader(uint8_t *name, size_t name_len, SCReturnInt(0); } +/** + * \brief setup multipart parsing: extract boundary and store it + * + * \param d HTTP transaction + * \param htud transaction userdata + * + * \retval 0 ok + * \retval -1 error: problem with the boundary + * + * If the request contains a multipart message, this function will + * set the HTP_BOUNDARY_SET in the transaction. + */ static int HtpRequestBodySetupMultipart(htp_tx_data_t *d, SCHtpTxUserData *htud) { htp_header_t *cl = table_getc(d->tx->request_headers, "content-length"); if (cl != NULL) @@ -829,6 +854,9 @@ static int HtpRequestBodySetupMultipart(htp_tx_data_t *d, SCHtpTxUserData *htud) return 0; } +/** + * \brief Setup boundary buffers + */ static int HtpRequestBodySetupBoundary(SCHtpTxUserData *htud, uint8_t **expected_boundary, uint8_t *expected_boundary_len, uint8_t **expected_boundary_end, uint8_t *expected_boundary_end_len) @@ -943,6 +971,13 @@ static void HtpRequestBodyMultipartParseHeader(uint8_t *header, uint32_t header_ *filetype_len = ft_len; } +/** + * \brief Create a single buffer from the HtpBodyChunks in our list + * + * \param htud transaction user data + * \param chunks_buffers pointer to pass back the buffer to the caller + * \param chunks_buffer_len pointer to pass back the buffer length to the caller + */ static void HtpRequestBodyReassemble(SCHtpTxUserData *htud, uint8_t **chunks_buffer, uint32_t *chunks_buffer_len) { @@ -1234,6 +1269,7 @@ int HTPCallbackRequestBodyData(htp_tx_data_t *d) } end: + /* see if we can get rid of htp body chunks */ HtpBodyPrune(htud); if (expected_boundary != NULL) {