use moqtap_codec::draft09::message::{ClientSetup, ServerSetup};
use moqtap_codec::varint::VarInt;
#[derive(Debug, thiserror::Error, PartialEq, Eq)]
pub enum SetupError {
#[error("no common version between client and server")]
NoCommonVersion,
#[error("missing required parameter: {0}")]
MissingParameter(
&'static str,
),
#[error("client sent SERVER_SETUP-only parameter")]
WrongParameterRole,
#[error("no versions offered")]
EmptyVersionList,
}
pub fn validate_client_setup(msg: &ClientSetup) -> Result<(), SetupError> {
if msg.supported_versions.is_empty() {
return Err(SetupError::EmptyVersionList);
}
for param in &msg.parameters {
if param.key == VarInt::from_u64(0x02).unwrap() {
return Err(SetupError::WrongParameterRole);
}
}
Ok(())
}
pub fn validate_server_setup(_msg: &ServerSetup) -> Result<(), SetupError> {
Ok(())
}
pub fn negotiate_version(
client_versions: &[VarInt],
server_version: VarInt,
) -> Result<VarInt, SetupError> {
if client_versions.contains(&server_version) {
Ok(server_version)
} else {
Err(SetupError::NoCommonVersion)
}
}