SCLogDebug("fd %p", fd);
if (file->flags & FILE_NOSTORE || fd->stored == 1) {
+ /* keep chunks in memory as long as we still need to
+ * inspect them or parts of them */
+ if (file->flags & FILE_USE_DETECT) {
+ uint64_t right_edge = fd->stream_offset + fd->len;
+ if (file->content_inspected < right_edge)
+ break;
+ }
+
file->chunks_head = fd->next;
if (file->chunks_tail == fd)
file->chunks_tail = fd->next;
SCLogDebug("not doing md5 for this file");
ff->flags |= FILE_NOMD5;
}
+ if (flags & FILE_USE_DETECT) {
+ SCLogDebug("considering content_inspect tracker when pruning");
+ ff->flags |= FILE_USE_DETECT;
+ }
#ifdef HAVE_NSS
if (!(ff->flags & FILE_NOMD5) || g_file_force_md5) {
#define FILE_STORE 0x0040
#define FILE_STORED 0x0080
#define FILE_NOTRACK 0x0100 /**< track size of file */
+#define FILE_USE_DETECT 0x0200 /**< use content_inspected tracker */
typedef enum FileState_ {
FILE_STATE_NONE = 0, /**< no state */
uint64_t chunks_cnt_max;
#endif
uint64_t content_len_so_far;
- uint64_t content_inspected;
+ uint64_t content_inspected; /**< used in pruning if FILE_USE_DETECT
+ * flag is set */
} File;
typedef struct FileContainer_ {