#[derive(Copy, Clone, PartialEq, Eq, Debug)]
pub enum ProtocolVersion {
SSLv3,
TLSv1_0,
TLSv1_1,
TLSv1_2,
TLSv1_3,
DTLSv1_0,
DTLSv1_2,
DTLSv1_3,
Unknown(u16),
}
impl ProtocolVersion {
pub fn as_u16(self) -> u16 {
match self {
ProtocolVersion::SSLv3 => 0x0300,
ProtocolVersion::TLSv1_0 => 0x0301,
ProtocolVersion::TLSv1_1 => 0x0302,
ProtocolVersion::TLSv1_2 => 0x0303,
ProtocolVersion::TLSv1_3 => 0x0304,
ProtocolVersion::DTLSv1_0 => 0xfeff,
ProtocolVersion::DTLSv1_2 => 0xfefd,
ProtocolVersion::DTLSv1_3 => 0xfefc,
ProtocolVersion::Unknown(v) => v,
}
}
pub fn from_u16(v: u16) -> Self {
match v {
0x0300 => ProtocolVersion::SSLv3,
0x0301 => ProtocolVersion::TLSv1_0,
0x0302 => ProtocolVersion::TLSv1_1,
0x0303 => ProtocolVersion::TLSv1_2,
0x0304 => ProtocolVersion::TLSv1_3,
0xfeff => ProtocolVersion::DTLSv1_0,
0xfefd => ProtocolVersion::DTLSv1_2,
0xfefc => ProtocolVersion::DTLSv1_3,
other => ProtocolVersion::Unknown(other),
}
}
}
#[derive(Copy, Clone, PartialEq, Eq, Debug)]
pub enum ContentType {
ChangeCipherSpec,
Alert,
Handshake,
ApplicationData,
Unknown(u8),
}
impl ContentType {
pub fn as_u8(self) -> u8 {
match self {
ContentType::ChangeCipherSpec => 20,
ContentType::Alert => 21,
ContentType::Handshake => 22,
ContentType::ApplicationData => 23,
ContentType::Unknown(v) => v,
}
}
pub fn from_u8(v: u8) -> Self {
match v {
20 => ContentType::ChangeCipherSpec,
21 => ContentType::Alert,
22 => ContentType::Handshake,
23 => ContentType::ApplicationData,
other => ContentType::Unknown(other),
}
}
}