fn decode()

in src/codec/echo.rs [51:83]


    fn decode(&self, buffer: &mut Session) -> Result<(), ParseError> {
        // no-copy borrow as a slice
        let buf: &[u8] = (*buffer).buffer();

        // check if we got a CRLF
        let mut double_byte_windows = buf.windows(2);
        if let Some(response_end) = double_byte_windows.position(|w| w == b"\r\n") {
            if response_end < 5 {
                Err(ParseError::Unknown)
            } else {
                let message = &buf[0..(response_end - 4)];
                let crc_received = &buf[(response_end - 4)..response_end];
                let mut digest = CRC.digest();
                digest.update(message);
                let crc_calculated = digest.finalize();
                let crc_calculated: [u8; 4] =
                    unsafe { std::mem::transmute(crc_calculated.to_be()) };
                if crc_calculated != crc_received[..] {
                    debug!(
                        "Response has bad CRC: {:?} != {:?}",
                        crc_received, crc_calculated
                    );
                    metrics::RESPONSE_EX.increment();
                    Err(ParseError::Error)
                } else {
                    let _ = buffer.consume(response_end + 2);
                    Ok(())
                }
            }
        } else {
            Err(ParseError::Incomplete)
        }
    }