Skip to main content

wireforge_app/rdp/
negotiation.rs

1pub struct RdpNegotiationRequest<'a> { buf: &'a [u8] }
2impl<'a> RdpNegotiationRequest<'a> {
3    pub fn parse(buf:&'a[u8])->Option<Self>{
4        if buf.len()<8||buf[0]!=0{return None;} // type must be RDP_NEG_REQ(0)
5        Some(Self{buf})
6    }
7    pub fn flags(&self)->u8 { self.buf[1] }
8    pub fn requested_protocols(&self)->u32 { u32::from_le_bytes([self.buf[4],self.buf[5],self.buf[6],self.buf[7]]) }
9}
10
11#[cfg(test)]mod tests{use super::*;
12    #[test]fn parse_rdp_negotiation(){
13        let data=[0x00u8,0x00,0x00,0x08,0x07,0x00,0x00,0x00]; // type=0, len=8, protocols=0x07(RDP+TLS+NLA)
14        let n=RdpNegotiationRequest::parse(&data).unwrap();
15        assert_eq!(n.requested_protocols(),0x07);
16    }
17}