if self.encoding == HTTP2ContentEncoding::Unknown {
if input == b"gzip" {
self.encoding = HTTP2ContentEncoding::Gzip;
- self.decoder = HTTP2Decompresser::Gzip(Box::new(GzDecoder::new(HTTP2cursor::new())));
+ self.decoder =
+ HTTP2Decompresser::Gzip(Box::new(GzDecoder::new(HTTP2cursor::new())));
} else if input == b"deflate" {
self.encoding = HTTP2ContentEncoding::Deflate;
- self.decoder = HTTP2Decompresser::Deflate(Box::new(DeflateDecoder::new(HTTP2cursor::new())));
+ self.decoder =
+ HTTP2Decompresser::Deflate(Box::new(DeflateDecoder::new(HTTP2cursor::new())));
} else if input == b"br" {
self.encoding = HTTP2ContentEncoding::Br;
self.decoder = HTTP2Decompresser::Brotli(Box::new(brotli::Decompressor::new(
return;
}
let empty = Vec::new();
- let mut resp_line : Vec<u8> = Vec::new();
+ let mut resp_line: Vec<u8> = Vec::new();
let status =
if let Ok(value) = http2_frames_get_header_firstvalue(tx, Direction::ToClient, ":status") {
fn http2_normalize_host(value: &[u8]) -> &[u8] {
match value.iter().position(|&x| x == b'@') {
Some(i) => {
- let value = &value[i+1..];
+ let value = &value[i + 1..];
match value.iter().position(|&x| x == b':') {
Some(i) => {
return &value[..i];
}
}
}
- None => {
- match value.iter().position(|&x| x == b':') {
- Some(i) => {
- return &value[..i];
- }
- None => {
- return value;
- }
+ None => match value.iter().position(|&x| x == b':') {
+ Some(i) => {
+ return &value[..i];
}
- }
+ None => {
+ return value;
+ }
+ },
}
}
if let Some(sfcm) = unsafe { SURICATA_HTTP2_FILE_CONFIG } {
//TODO get a file container instead of NULL
(c.HTPFileCloseHandleRange)(
- sfcm.files_sbcfg,
- std::ptr::null_mut(),
- 0,
- self.file_range,
- std::ptr::null_mut(),
- 0,
- );
+ sfcm.files_sbcfg,
+ std::ptr::null_mut(),
+ 0,
+ self.file_range,
+ std::ptr::null_mut(),
+ 0,
+ );
(c.HttpRangeFreeBlock)(self.file_range);
self.file_range = std::ptr::null_mut();
}
}
fn decompress<'a>(
- &'a mut self, input: &'a [u8], dir: Direction, sfcm: &'static SuricataFileContext, over: bool, flow: *const Flow,
+ &'a mut self, input: &'a [u8], dir: Direction, sfcm: &'static SuricataFileContext,
+ over: bool, flow: *const Flow,
) -> io::Result<()> {
let mut output = Vec::with_capacity(decompression::HTTP2_DECOMPRESSION_CHUNK_SIZE);
let decompressed = self.decoder.decompress(input, &mut output, dir)?;
) {
match range::http2_parse_check_content_range(&value) {
Ok((_, v)) => {
- range::http2_range_open(self, &v, flow, sfcm, Direction::ToClient, decompressed);
+ range::http2_range_open(
+ self,
+ &v,
+ flow,
+ sfcm,
+ Direction::ToClient,
+ decompressed,
+ );
if over && !self.file_range.is_null() {
range::http2_range_close(self, Direction::ToClient, &[])
}
tx.state = HTTP2TransactionState::HTTP2StateGlobal;
tx.tx_data.update_file_flags(self.state_data.file_flags);
// TODO can this tx hold files?
- tx.tx_data.file_tx = STREAM_TOSERVER|STREAM_TOCLIENT; // might hold files in both directions
+ tx.tx_data.file_tx = STREAM_TOSERVER | STREAM_TOCLIENT; // might hold files in both directions
tx.update_file_flags(tx.tx_data.file_flags);
self.transactions.push_back(tx);
return self.transactions.back_mut().unwrap();
tx.state = HTTP2TransactionState::HTTP2StateOpen;
tx.tx_data.update_file_flags(self.state_data.file_flags);
tx.update_file_flags(tx.tx_data.file_flags);
- tx.tx_data.file_tx = STREAM_TOSERVER|STREAM_TOCLIENT; // might hold files in both directions
+ tx.tx_data.file_tx = STREAM_TOSERVER | STREAM_TOCLIENT; // might hold files in both directions
self.transactions.push_back(tx);
return Some(self.transactions.back_mut().unwrap());
}
for block in blocks {
if block.error >= parser::HTTP2HeaderDecodeStatus::HTTP2HeaderDecodeError {
self.set_event(HTTP2Event::InvalidHeader);
- } else if block.error
- == parser::HTTP2HeaderDecodeStatus::HTTP2HeaderDecodeSizeUpdate
- {
+ } else if block.error == parser::HTTP2HeaderDecodeStatus::HTTP2HeaderDecodeSizeUpdate {
update = true;
if block.sizeupdate > sizeup {
sizeup = block.sizeupdate;
tx_same.ft_ts.tx_id = tx_same.tx_id - 1;
};
let mut dinput = &rem[..hlsafe];
- if padded && !rem.is_empty() && usize::from(rem[0]) < hlsafe{
+ if padded && !rem.is_empty() && usize::from(rem[0]) < hlsafe {
dinput = &rem[1..hlsafe - usize::from(rem[0])];
}
- if tx_same.decompress(
- dinput,
- dir,
- sfcm,
- over,
- flow).is_err() {
+ if tx_same.decompress(dinput, dir, sfcm, over, flow).is_err() {
self.set_event(HTTP2Event::FailedDecompression);
}
}
let tx = cast_pointer!(tx, HTTP2Transaction);
if let Some(sfcm) = { SURICATA_HTTP2_FILE_CONFIG } {
if direction & STREAM_TOSERVER != 0 {
- return AppLayerGetFileState { fc: &mut tx.ft_ts.file, cfg: sfcm.files_sbcfg }
+ return AppLayerGetFileState {
+ fc: &mut tx.ft_ts.file,
+ cfg: sfcm.files_sbcfg,
+ };
} else {
- return AppLayerGetFileState { fc: &mut tx.ft_tc.file, cfg: sfcm.files_sbcfg }
+ return AppLayerGetFileState {
+ fc: &mut tx.ft_tc.file,
+ cfg: sfcm.files_sbcfg,
+ };
}
}
AppLayerGetFileState::err()
}
for e in set {
js.start_object()?;
- js.set_string("settings_id", &format!("SETTINGS{}", &e.id.to_string().to_uppercase()))?;
+ js.set_string(
+ "settings_id",
+ &format!("SETTINGS{}", &e.id.to_string().to_uppercase()),
+ )?;
js.set_uint("settings_value", e.value as u64)?;
js.close()?;
}
while dyn_headers.current_size > dyn_headers.max_size
&& toremove < dyn_headers.table.len()
{
- dyn_headers.current_size -=
- 32 + dyn_headers.table[toremove].name.len() + dyn_headers.table[toremove].value.len();
+ dyn_headers.current_size -= 32
+ + dyn_headers.table[toremove].name.len()
+ + dyn_headers.table[toremove].value.len();
toremove += 1;
}
dyn_headers.table.drain(0..toremove);
// whole file in one range
return;
}
- let flags = if dir == Direction::ToServer { tx.ft_ts.file_flags } else { tx.ft_tc.file_flags };
+ let flags = if dir == Direction::ToServer {
+ tx.ft_ts.file_flags
+ } else {
+ tx.ft_tc.file_flags
+ };
if let Ok((key, index)) = http2_range_key_get(tx) {
let name = &key[index..];
tx.file_range = unsafe {
}
}
-pub fn http2_range_append(cfg: &'static SuricataFileContext, fr: *mut HttpRangeContainerBlock, data: &[u8]) {
+pub fn http2_range_append(
+ cfg: &'static SuricataFileContext, fr: *mut HttpRangeContainerBlock, data: &[u8],
+) {
unsafe {
HttpRangeAppendData(cfg.files_sbcfg, fr, data.as_ptr(), data.len() as u32);
}
}
-pub fn http2_range_close(
- tx: &mut HTTP2Transaction, dir: Direction, data: &[u8],
-) {
+pub fn http2_range_close(tx: &mut HTTP2Transaction, dir: Direction, data: &[u8]) {
let added = if let Some(c) = unsafe { SC } {
if let Some(sfcm) = unsafe { SURICATA_HTTP2_FILE_CONFIG } {
let (files, flags) = if dir == Direction::ToServer {
(&mut tx.ft_tc.file, tx.ft_tc.file_flags)
};
let added = (c.HTPFileCloseHandleRange)(
- sfcm.files_sbcfg,
- files,
- flags,
- tx.file_range,
- data.as_ptr(),
- data.len() as u32,
- );
+ sfcm.files_sbcfg,
+ files,
+ flags,
+ tx.file_range,
+ data.as_ptr(),
+ data.len() as u32,
+ );
(c.HttpRangeFreeBlock)(tx.file_range);
added
} else {
data: *const c_uchar, data_len: u32,
) -> *mut HttpRangeContainerBlock;
pub fn HttpRangeAppendData(
- cfg: *const StreamingBufferConfig, c: *mut HttpRangeContainerBlock, data: *const c_uchar, data_len: u32,
+ cfg: *const StreamingBufferConfig, c: *mut HttpRangeContainerBlock, data: *const c_uchar,
+ data_len: u32,
) -> std::os::raw::c_int;
}