Function ppp::parse_header [−][src]
pub fn parse_header(input: &[u8]) -> ParseResult<&[u8]>
Expand description
A parser that can handle both version 1 and version 2 of the proxy protocol header.
Examples
Partial
assert!(ppp::parse_header(b"\r\n").unwrap_err().is_incomplete());
Version 1 TCP4
assert_eq!(ppp::parse_header(b"PROXY TCP4 255.255.255.255 255.255.255.255 65535 65535\r\nHi!"), Ok((&b"Hi!"[..], ppp::model:: Header::version_1(
([255, 255, 255, 255], [255, 255, 255, 255], 65535, 65535).into(),
))));
Version 2 TCP over IPv6 with some TLVs
let mut input: Vec<u8> = Vec::new();
input.extend_from_slice(b"\r\n\r\n\0\r\nQUIT\n");
input.push(0x21);
input.push(0x21);
input.extend(&[0, 45]);
input.extend(&[0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF]);
input.extend(&[0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF1]);
input.extend(&[0, 80]);
input.extend(&[1, 187]);
input.extend(&[1, 0, 1, 5]);
input.extend(&[2, 0, 2, 5, 5]);
input.extend(&[42]);
assert_eq!(ppp::parse_v2_header(&input[..]), Ok((&[42][..], ppp::model::Header::new(
ppp::model::Version::Two,
ppp::model::Command::Proxy,
ppp::model::Protocol::Stream,
vec![ppp::model::Tlv::new(1, vec![5]), ppp::model::Tlv::new(2, vec![5, 5])],
(
[0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF],
[0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFF1],
80,
443
).into(),
))))