in src/flowgger/input/udp_input.rs [100:123]
fn handle_record_maybe_compressed(
line: &[u8],
tx: &SyncSender<Vec<u8>>,
decoder: &Box<dyn Decoder>,
encoder: &Box<dyn Encoder>,
) -> Result<(), &'static str> {
if line.len() >= 8
&& (line[0] == 0x78 && (line[1] == 0x01 || line[1] == 0x9c || line[1] == 0xda))
{
let mut decompressed = Vec::with_capacity(MAX_UDP_PACKET_SIZE * MAX_COMPRESSION_RATIO);
match ZlibDecoder::new(line).read_to_end(&mut decompressed) {
Ok(_) => handle_record(&decompressed, tx, decoder, encoder),
Err(_) => Err("Corrupted compressed (zlib) record"),
}
} else if line.len() >= 24 && (line[0] == 0x1f && line[1] == 0x8b && line[2] == 0x08) {
let mut decompressed = Vec::with_capacity(MAX_UDP_PACKET_SIZE * MAX_COMPRESSION_RATIO);
match GzDecoder::new(line).read_to_end(&mut decompressed) {
Ok(_) => handle_record(&decompressed, tx, decoder, encoder),
Err(_) => Err("Corrupted compressed (gzip) record"),
}
} else {
handle_record(line, tx, decoder, encoder)
}
}