}
}
+ pub fn set_file_left(&mut self, direction: u8, rec_size: u32, data_size: u32, fuid: Vec<u8>)
+ {
+ let left = if data_size >= rec_size { 0 } else { rec_size - data_size };
+ if direction == STREAM_TOSERVER {
+ self.file_ts_left = left;
+ self.file_ts_guid = fuid;
+ } else {
+ self.file_tc_left = left;
+ self.file_tc_guid = fuid;
+ }
+ }
+
pub fn set_skip(&mut self, direction: u8, rec_size: u32, data_size: u32)
{
let skip = if data_size >= rec_size { 0 } else { rec_size - data_size };
tx.vercmd.set_smb1_cmd(SMB1_COMMAND_WRITE_ANDX);
}
}
- state.file_ts_left = rd.len - rd.data.len() as u32;
- state.file_ts_guid = file_fid.to_vec();
- SCLogDebug!("SMBv1 WRITE RESPONSE: {} bytes left", state.file_tc_left);
+
+ state.set_file_left(STREAM_TOSERVER, rd.len, rd.data.len() as u32, file_fid.to_vec());
if r.command == SMB1_COMMAND_WRITE_AND_CLOSE {
SCLogDebug!("closing FID {:?}", file_fid);
smb_read_dcerpc_record(state, vercmd, hdr, &pure_fid, &rd.data);
}
- state.file_tc_left = rd.len - rd.data.len() as u32;
- state.file_tc_guid = file_fid.to_vec();
- SCLogDebug!("SMBv1 READ RESPONSE: {} bytes left", state.file_tc_left);
+ state.set_file_left(STREAM_TOCLIENT, rd.len, rd.data.len() as u32, file_fid.to_vec());
}
_ => {
events.push(SMBEvent::MalformedData);
}
}
- state.file_tc_left = rd.len - rd.data.len() as u32;
- state.file_tc_guid = file_guid.to_vec();
- SCLogDebug!("SMBv2 READ RESPONSE: {} bytes left", state.file_tc_left);
+ state.set_file_left(STREAM_TOCLIENT, rd.len, rd.data.len() as u32, file_guid.to_vec());
}
_ => {
state.set_event(SMBEvent::MalformedData);
r.session_id, r.tree_id, 0); // TODO move into new_file_tx
}
}
- state.file_ts_left = wr.wr_len - wr.data.len() as u32;
- state.file_ts_guid = file_guid.to_vec();
- SCLogDebug!("SMBv2 WRITE REQUEST: {} bytes left", state.file_ts_left);
-
+ state.set_file_left(STREAM_TOSERVER, wr.wr_len, wr.data.len() as u32, file_guid.to_vec());
},
_ => {
state.set_event(SMBEvent::MalformedData);