nfs: file handling cleanups

pull/8421/head
Victor Julien 3 years ago
parent 33f6a16290
commit 4bfeac6591

@ -295,14 +295,31 @@ pub fn filetracker_newchunk(ft: &mut FileTransferTracker, files: &mut FileContai
flags: u16, name: &[u8], data: &[u8],
chunk_offset: u64, chunk_size: u32, fill_bytes: u8, is_last: bool, xid: &u32)
{
match unsafe {SURICATA_NFS_FILE_CONFIG} {
Some(sfcm) => {
ft.new_chunk(sfcm, files, flags, name, data, chunk_offset,
chunk_size, fill_bytes, is_last, xid); }
None => panic!("no SURICATA_NFS_FILE_CONFIG"),
if let Some(sfcm) = unsafe { SURICATA_NFS_FILE_CONFIG } {
ft.new_chunk(sfcm, files, flags, name, data, chunk_offset,
chunk_size, fill_bytes, is_last, xid);
}
}
fn filetracker_trunc(ft: &mut FileTransferTracker, files: &mut FileContainer,
flags: u16)
{
ft.trunc(files, flags);
}
pub fn filetracker_close(ft: &mut FileTransferTracker, files: &mut FileContainer,
flags: u16)
{
ft.close(files, flags);
}
fn filetracker_update(ft: &mut FileTransferTracker, files: &mut FileContainer,
flags: u16, data: &[u8], gap_size: u32) -> u32
{
ft.update(files, flags, data, gap_size)
}
#[derive(Debug)]
pub struct NFSState {
state_data: AppLayerStateData,
@ -590,7 +607,7 @@ impl NFSState {
tx.request_done = true;
tx.response_done = true;
let (files, flags) = f.files.get(tx.file_tx_direction);
f.file_tracker.trunc(files, flags);
filetracker_trunc(&mut f.file_tracker, files, flags);
} else {
post_gap_txs = true;
}
@ -945,7 +962,7 @@ impl NFSState {
let queued_data = tdf.file_tracker.get_queued_size();
if queued_data > 2000000 { // TODO should probably be configurable
SCLogDebug!("QUEUED size {} while we've seen GAPs. Truncating file.", queued_data);
tdf.file_tracker.trunc(files, flags);
filetracker_trunc(&mut tdf.file_tracker, files, flags);
}
}
@ -955,7 +972,7 @@ impl NFSState {
}
tdf.chunk_count += 1;
let cs = tdf.file_tracker.update(files, flags, data, gap_size);
let cs = filetracker_update(&mut tdf.file_tracker, files, flags, data, gap_size);
/* see if we need to close the tx */
if tdf.file_tracker.is_done() {
if direction == Direction::ToClient {

@ -123,7 +123,7 @@ impl NFSState {
let (files, flags) = tdf.files.get(Direction::ToServer);
tdf.chunk_count += 1;
tdf.file_additional_procs.push(NFSPROC3_COMMIT);
tdf.file_tracker.close(files, flags);
filetracker_close(&mut tdf.file_tracker, files, flags);
tdf.file_last_xid = r.hdr.xid;
tx.is_last = true;
tx.request_done = true;

@ -118,7 +118,7 @@ impl NFSState {
if let Some(tx) = self.get_file_tx_by_handle(&file_handle, Direction::ToServer) {
if let Some(NFSTransactionTypeData::FILE(ref mut tdf)) = tx.type_data {
let (files, flags) = tdf.files.get(Direction::ToServer);
tdf.file_tracker.close(files, flags);
filetracker_close(&mut tdf.file_tracker, files, flags);
tdf.file_last_xid = r.hdr.xid;
tx.is_last = true;
tx.request_done = true;

Loading…
Cancel
Save