Skip to main content

wireforge_app/rdp/
x224.rs

1pub const X224_CR: u8 = 0xE0;
2pub const X224_CC: u8 = 0xD0;
3pub struct X224Header<'a> { buf: &'a [u8] }
4impl<'a> X224Header<'a> {
5    pub fn parse(buf:&'a[u8])->Option<Self>{
6        if buf.is_empty(){return None;}
7        Some(Self{buf})
8    }
9    pub fn length(&self)->u8 { self.buf[0] }
10    pub fn type_(&self)->u8 { self.buf.get(1).copied().unwrap_or(0) }
11    pub fn payload(&self)->&'a[u8] {
12        let hdr_len=if self.type_()==X224_CR||self.type_()==X224_CC{7}else{3};
13        &self.buf[hdr_len.min(self.buf.len())..]
14    }
15}
16
17#[cfg(test)]mod tests{use super::*;
18    #[test]fn parse_x224_cr(){
19        let data=[0x2Au8,0xE0,0x00,0x00,0x00,0x00,0x00,0x01]; // len=42, type=CR(0xE0)
20        let h=X224Header::parse(&data).unwrap();
21        assert_eq!(h.length(),42);assert_eq!(h.type_(),X224_CR);
22    }
23}