]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
filetracker: track total queued data (in_flight)
authorVictor Julien <vjulien@oisf.net>
Sat, 16 Apr 2022 04:57:56 +0000 (06:57 +0200)
committerVictor Julien <vjulien@oisf.net>
Tue, 19 Apr 2022 11:14:23 +0000 (13:14 +0200)
As well as expose number of chunks.

rust/src/filetracker.rs

index 48b810b1122710598d0fa07ea7fe07b162ac8de2..d10acdbe6f8a168049d7def6f7681a714c4e24d9 100644 (file)
@@ -66,6 +66,8 @@ pub struct FileTransferTracker {
 
     chunks: HashMap<u64, FileChunk>,
     cur_ooo_chunk_offset: u64,
+
+    in_flight: u64,
 }
 
 impl FileTransferTracker {
@@ -224,6 +226,9 @@ impl FileTransferTracker {
                     self.cur_ooo += d.len() as u64;
                     c.contains_gap |= is_gap;
                     c.chunk.extend(d);
+
+                    self.in_flight += d.len() as u64;
+                    SCLogDebug!("{:p} in_flight {}", self, self.in_flight);
                 }
 
                 consumed += self.chunk_left as usize;
@@ -247,6 +252,8 @@ impl FileTransferTracker {
                             let _offset = self.tracked;
                             match self.chunks.remove(&self.tracked) {
                                 Some(c) => {
+                                    self.in_flight -= c.chunk.len() as u64;
+
                                     let res = files.file_append(&self.track_id, &c.chunk, c.contains_gap);
                                     match res {
                                         0   => { },
@@ -307,6 +314,7 @@ impl FileTransferTracker {
                     c.chunk.extend(data);
                     c.contains_gap |= is_gap;
                     self.cur_ooo += data.len() as u64;
+                    self.in_flight += data.len() as u64;
                 }
 
                 self.chunk_left -= data.len() as u32;
@@ -319,4 +327,11 @@ impl FileTransferTracker {
     pub fn get_queued_size(&self) -> u64 {
         self.cur_ooo
     }
+
+    pub fn get_inflight_size(&self) -> u64 {
+        self.in_flight
+    }
+    pub fn get_inflight_cnt(&self) -> usize {
+        self.chunks.len()
+    }
 }