|
|
|
@ -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()
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|