implement rest of packets [changes by tm85]
This commit is contained in:
parent
bbc8c0991f
commit
b769fa69ea
|
@ -9,7 +9,7 @@ pub enum PacketParseError {
|
||||||
IncorrectPacketLength
|
IncorrectPacketLength
|
||||||
}
|
}
|
||||||
|
|
||||||
pub trait SptprpPacket {
|
pub trait SRTPacket {
|
||||||
const PACKET_ID: u8;
|
const PACKET_ID: u8;
|
||||||
|
|
||||||
fn to_bytes(&self) -> Vec<u8>;
|
fn to_bytes(&self) -> Vec<u8>;
|
||||||
|
|
|
@ -0,0 +1,75 @@
|
||||||
|
use crate::packets::{PacketParseError, SRTPacket};
|
||||||
|
|
||||||
|
#[derive(Debug, PartialEq, Eq)]
|
||||||
|
pub struct HandshakeResponsePacket {
|
||||||
|
pub r_pub: [u8; 32],
|
||||||
|
pub check_encrypted: [u8; 48]
|
||||||
|
}
|
||||||
|
|
||||||
|
impl SRTPacket for HandshakeResponsePacket {
|
||||||
|
const PACKET_ID: u8 = 0x07;
|
||||||
|
|
||||||
|
fn to_bytes(&self) -> Vec<u8> {
|
||||||
|
let mut vec = vec![0x07];
|
||||||
|
vec.extend_from_slice(&self.r_pub);
|
||||||
|
vec.extend_from_slice(&self.check_encrypted);
|
||||||
|
|
||||||
|
vec
|
||||||
|
}
|
||||||
|
|
||||||
|
fn from_bytes(bytes: &[u8]) -> Result<Self, PacketParseError> where Self: Sized {
|
||||||
|
if bytes.len() != 81 {
|
||||||
|
return Err(PacketParseError::IncorrectPacketLength)
|
||||||
|
}
|
||||||
|
if bytes[0] != 0x07 {
|
||||||
|
return Err(PacketParseError::IncorrectPacketType)
|
||||||
|
}
|
||||||
|
|
||||||
|
let r_pub = &bytes[1..33];
|
||||||
|
let check = &bytes[33..81];
|
||||||
|
|
||||||
|
Ok(Self {
|
||||||
|
r_pub: r_pub.try_into().unwrap(),
|
||||||
|
check_encrypted: check.try_into().unwrap()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, PartialEq)]
|
||||||
|
pub struct EncryptedDataPacket {
|
||||||
|
pub data_len: u64,
|
||||||
|
pub enc_data: Vec<u8>
|
||||||
|
}
|
||||||
|
impl SRTPacket for EncryptedDataPacket {
|
||||||
|
const PACKET_ID: u8 = 0x08;
|
||||||
|
|
||||||
|
fn to_bytes(&self) -> Vec<u8> {
|
||||||
|
let mut bytes = vec![8u8];
|
||||||
|
bytes.extend_from_slice(&self.data_len.to_le_bytes());
|
||||||
|
bytes.extend_from_slice(&self.enc_data[..]);
|
||||||
|
bytes
|
||||||
|
}
|
||||||
|
|
||||||
|
fn from_bytes(bytes: &[u8]) -> Result<Self, PacketParseError> where Self: Sized {
|
||||||
|
if bytes.len() < 9 {
|
||||||
|
return Err(PacketParseError::IncorrectPacketLength)
|
||||||
|
}
|
||||||
|
|
||||||
|
if bytes[0] != 0x08 {
|
||||||
|
return Err(PacketParseError::IncorrectPacketType)
|
||||||
|
}
|
||||||
|
|
||||||
|
let data_len = u64::from_le_bytes(bytes[1..9].try_into().unwrap()) as usize;
|
||||||
|
|
||||||
|
if bytes.len() < 9 + data_len {
|
||||||
|
return Err(PacketParseError::IncorrectPacketLength)
|
||||||
|
}
|
||||||
|
|
||||||
|
let data = &bytes[9..9 + data_len];
|
||||||
|
|
||||||
|
Ok(Self {
|
||||||
|
data_len: data_len as u64,
|
||||||
|
enc_data: data.to_vec(),
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue