return tx;
}
-/** \internal
- * \brief update inspected tracker if it gets to far behind
- *
- * As smtp uses the FILE_USE_DETECT flag in the file API, we are responsible
- * for making sure that File::content_inspected is not getting too far
- * behind.
- */
-static void SMTPPruneFiles(FileContainer *files)
-{
- SCLogDebug("cfg: win %"PRIu32" min_size %"PRIu32,
- smtp_config.content_inspect_window, smtp_config.content_inspect_min_size);
-
- File *file = files->head;
- while (file) {
- SCLogDebug("file %p", file);
- uint32_t window = smtp_config.content_inspect_window;
- if (file->sb->stream_offset == 0)
- window = MAX(window, smtp_config.content_inspect_min_size);
-
- uint64_t file_size = FileDataSize(file);
- uint64_t data_size = file_size - file->sb->stream_offset;
-
- SCLogDebug("window %"PRIu32", file_size %"PRIu64", data_size %"PRIu64,
- window, file_size, data_size);
-
- if (data_size > (window * 3)) {
- uint64_t left_edge = file_size - window;
- SCLogDebug("file->content_inspected now %"PRIu64, left_edge);
- file->content_inspected = left_edge;
- }
-
- file = file->next;
- }
-}
-
static void FlagDetectStateNewFile(SMTPTransaction *tx)
{
if (tx && tx->de_state) {
SCLogDebug("FileOpenFile() failed");
}
FlagDetectStateNewFile(smtp_state->curr_tx);
+ files->tail->inspect_window = smtp_config.content_inspect_window;
+ files->tail->inspect_min_size = smtp_config.content_inspect_min_size;
/* If close in the same chunk, then pass in empty bytes */
if (state->body_end) {
} else {
SCLogDebug("Body not a Ctnt_attachment");
}
-
- if (files != NULL) {
- SMTPPruneFiles(files);
- }
-
SCReturnInt(ret);
}
}
if (file->flags & FILE_USE_DETECT) {
left_edge = MIN(left_edge, file->content_inspected);
+
+ /* if file has inspect window and min size set, we
+ * do some house keeping here */
+ if (file->inspect_window != 0 && file->inspect_min_size != 0) {
+ uint32_t window = file->inspect_window;
+ if (file->sb->stream_offset == 0)
+ window = MAX(window, file->inspect_min_size);
+
+ uint64_t file_size = FileDataSize(file);
+ uint64_t data_size = file_size - file->sb->stream_offset;
+
+ SCLogDebug("window %"PRIu32", file_size %"PRIu64", data_size %"PRIu64,
+ window, file_size, data_size);
+
+ if (data_size > (window * 3)) {
+ left_edge = file_size - window;
+ SCLogDebug("file->content_inspected now %"PRIu64, left_edge);
+ file->content_inspected = left_edge;
+ }
+ }
}
if (left_edge) {