Skip to main content

wireforge_app/rdp/
tpkt.rs

1pub const TPKT_MIN_LEN: usize = 4;
2#[derive(Debug, Clone)]
3pub struct TpktHeader<'a> { buf: &'a [u8] }
4impl<'a> TpktHeader<'a> {
5    pub fn parse(buf:&'a[u8])->Option<Self>{
6        if buf.len()<TPKT_MIN_LEN||buf[0]!=3{return None;}
7        Some(Self{buf})
8    }
9    pub fn version(&self)->u8 { self.buf[0] }
10    pub fn length(&self)->u16 { u16::from_be_bytes([self.buf[2],self.buf[3]]) }
11    pub fn payload(&self)->&'a[u8] { &self.buf[TPKT_MIN_LEN..] }
12}
13
14#[cfg(test)]mod tests{use super::*;
15    #[test]fn parse_tpkt(){
16        let data=[0x03u8,0x00,0x00,0x2C,0xE0];
17        let h=TpktHeader::parse(&data).unwrap();
18        assert_eq!(h.version(),3);assert_eq!(h.length(),44);
19        assert_eq!(h.payload(),&[0xE0]);
20    }
21}