fkm-proxy 0.3.0

Fkm proxy client & server
Documentation
#[derive(Debug)]
pub struct SshPacketHeader {
    pub packet_type: SshPacketType,
    pub length: u32,
}

impl SshPacketHeader {
    pub const HEADER_LENGTH: usize = 6;

    pub fn to_buf(&self) -> [u8; Self::HEADER_LENGTH] {
        let mut tmp = [0; Self::HEADER_LENGTH];
        tmp[0] = self.packet_type.to_u8();
        tmp[1..5].copy_from_slice(&self.length.to_be_bytes());
        tmp
    }

    pub fn from_buf(buf: &[u8; Self::HEADER_LENGTH]) -> Self {
        Self {
            packet_type: SshPacketType::from_u8(buf[0]),
            length: u32::from_be_bytes(buf[1..5].try_into().expect("Cannot fail")),
        }
    }
}

#[derive(Debug, PartialEq)]
pub enum SshPacketType {
    Invalid = 0,
    PtyResize = 1,
    Data = 2,
    User = 3,
}

impl SshPacketType {
    pub fn to_u8(&self) -> u8 {
        match self {
            SshPacketType::Invalid => 0,
            SshPacketType::PtyResize => 1,
            SshPacketType::Data => 2,
            SshPacketType::User => 3,
        }
    }

    pub fn from_u8(v: u8) -> Self {
        match v {
            1 => SshPacketType::PtyResize,
            2 => SshPacketType::Data,
            3 => SshPacketType::User,
            _ => SshPacketType::Invalid,
        }
    }
}