use super::consts;
#[repr(u8)]
#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)]
pub enum TelnetOption {
TransmitBinary,
Echo,
Reconnection,
SuppressGoAhead,
ApproxMessageSizeNegotiation,
Status,
TimingMark,
RCTE,
OutLineWidth,
OutPageSize,
NAOCRD,
NAOHTS,
NAOHTD,
NAOFFD,
NAOVTS,
NAOVTD,
NAOLFD,
XASCII,
Logout,
ByteMacro,
DET,
SUPDUP,
SUPDUPOutput,
SNDLOC,
TTYPE,
EOR,
TUID,
OUTMRK,
TTYLOC,
OPT3270Regime,
X3PAD,
NAWS,
TSPEED,
LFLOW,
Linemode,
XDISPLOC,
Environment,
Authentication,
Encryption,
NewEnvironment,
TN3270E,
XAUTH,
Charset,
TRSP,
CPCO,
TSLE,
StartTLS,
Kermit,
SendUrl,
ForwardX,
MSDP,
MSSP,
Compress1,
Compress2,
ZMP,
PragmaLogon,
SSPILogon,
PragmaHeartbeat,
EXOPL,
Unknown(u8),
}
impl TelnetOption {
pub fn support_local(&self) -> bool {
match self {
TelnetOption::TransmitBinary => true,
_ => false,
}
}
pub fn support_remote(&self) -> bool {
match self {
TelnetOption::TransmitBinary => true,
_ => false,
}
}
}
impl From<u8> for TelnetOption {
fn from(byte: u8) -> Self {
match byte {
consts::option::BINARY => TelnetOption::TransmitBinary,
consts::option::ECHO => TelnetOption::Echo,
consts::option::RCP => TelnetOption::Reconnection,
consts::option::SGA => TelnetOption::SuppressGoAhead,
consts::option::NAMS => TelnetOption::ApproxMessageSizeNegotiation,
consts::option::STATUS => TelnetOption::Status,
consts::option::TM => TelnetOption::TimingMark,
consts::option::RCTE => TelnetOption::RCTE,
consts::option::NAOL => TelnetOption::OutLineWidth,
consts::option::NAOP => TelnetOption::OutPageSize,
consts::option::NAOCRD => TelnetOption::NAOCRD,
consts::option::NAOHTS => TelnetOption::NAOHTS,
consts::option::NAOHTD => TelnetOption::NAOHTD,
consts::option::NAOFFD => TelnetOption::NAOFFD,
consts::option::NAOVTS => TelnetOption::NAOVTS,
consts::option::NAOVTD => TelnetOption::NAOVTD,
consts::option::NAOLFD => TelnetOption::NAOLFD,
consts::option::XASCII => TelnetOption::XASCII,
consts::option::LOGOUT => TelnetOption::Logout,
consts::option::BM => TelnetOption::ByteMacro,
consts::option::DET => TelnetOption::DET,
consts::option::SUPDUP => TelnetOption::SUPDUP,
consts::option::SUPDUP_OUTPUT => TelnetOption::SUPDUPOutput,
consts::option::SNDLOC => TelnetOption::SNDLOC,
consts::option::TTYPE => TelnetOption::TTYPE,
consts::option::EOR => TelnetOption::EOR,
consts::option::TUID => TelnetOption::TUID,
consts::option::OUTMRK => TelnetOption::OUTMRK,
consts::option::TTYLOC => TelnetOption::TTYLOC,
consts::option::OPT3270REGIME => TelnetOption::OPT3270Regime,
consts::option::X3PAD => TelnetOption::X3PAD,
consts::option::NAWS => TelnetOption::NAWS,
consts::option::TSPEED => TelnetOption::TSPEED,
consts::option::LFLOW => TelnetOption::LFLOW,
consts::option::LINEMODE => TelnetOption::Linemode,
consts::option::XDISPLOC => TelnetOption::XDISPLOC,
consts::option::OLD_ENVIRONMENT => TelnetOption::Environment,
consts::option::AUTHENTICATION => TelnetOption::Authentication,
consts::option::ENCRYPTION => TelnetOption::Encryption,
consts::option::NEW_ENVIRONMENT => TelnetOption::NewEnvironment,
consts::option::TN3270E => TelnetOption::TN3270E,
consts::option::XAUTH => TelnetOption::XAUTH,
consts::option::CHARSET => TelnetOption::Charset,
consts::option::TRSP => TelnetOption::TRSP,
consts::option::CPCO => TelnetOption::CPCO,
consts::option::TSLE => TelnetOption::TSLE,
consts::option::START_TLS => TelnetOption::StartTLS,
consts::option::KERMIT => TelnetOption::Kermit,
consts::option::SENDURL => TelnetOption::SendUrl,
consts::option::FORWARDX => TelnetOption::ForwardX,
consts::option::MSDP => TelnetOption::MSDP,
consts::option::MSSP => TelnetOption::MSSP,
consts::option::COMPRESS1 => TelnetOption::Compress1,
consts::option::COMPRESS2 => TelnetOption::Compress2,
consts::option::ZMP => TelnetOption::ZMP,
consts::option::EXOPL => TelnetOption::EXOPL,
consts::option::PRAGMA_LOGIN => TelnetOption::PragmaLogon,
consts::option::SSPI_LOGIN => TelnetOption::SSPILogon,
consts::option::PRAGMA_HEARTBEAT => TelnetOption::PragmaHeartbeat,
byte => TelnetOption::Unknown(byte),
}
}
}
impl From<TelnetOption> for u8 {
fn from(option: TelnetOption) -> Self {
match option {
TelnetOption::TransmitBinary => consts::option::BINARY,
TelnetOption::Echo => consts::option::ECHO,
TelnetOption::Reconnection => consts::option::RCP,
TelnetOption::SuppressGoAhead => consts::option::SGA,
TelnetOption::ApproxMessageSizeNegotiation => consts::option::NAMS,
TelnetOption::Status => consts::option::STATUS,
TelnetOption::TimingMark => consts::option::TM,
TelnetOption::RCTE => consts::option::RCTE,
TelnetOption::OutLineWidth => consts::option::NAOL,
TelnetOption::OutPageSize => consts::option::NAOP,
TelnetOption::NAOCRD => consts::option::NAOCRD,
TelnetOption::NAOHTS => consts::option::NAOHTS,
TelnetOption::NAOHTD => consts::option::NAOHTD,
TelnetOption::NAOFFD => consts::option::NAOFFD,
TelnetOption::NAOVTS => consts::option::NAOVTS,
TelnetOption::NAOVTD => consts::option::NAOVTD,
TelnetOption::NAOLFD => consts::option::NAOLFD,
TelnetOption::XASCII => consts::option::XASCII,
TelnetOption::Logout => consts::option::LOGOUT,
TelnetOption::ByteMacro => consts::option::BM,
TelnetOption::DET => consts::option::DET,
TelnetOption::SUPDUP => consts::option::SUPDUP,
TelnetOption::SUPDUPOutput => consts::option::SUPDUP_OUTPUT,
TelnetOption::SNDLOC => consts::option::SNDLOC,
TelnetOption::TTYPE => consts::option::TTYPE,
TelnetOption::EOR => consts::option::EOR,
TelnetOption::TUID => consts::option::TUID,
TelnetOption::OUTMRK => consts::option::OUTMRK,
TelnetOption::TTYLOC => consts::option::TTYLOC,
TelnetOption::OPT3270Regime => consts::option::OPT3270REGIME,
TelnetOption::X3PAD => consts::option::X3PAD,
TelnetOption::NAWS => consts::option::NAWS,
TelnetOption::TSPEED => consts::option::TSPEED,
TelnetOption::LFLOW => consts::option::LFLOW,
TelnetOption::Linemode => consts::option::LINEMODE,
TelnetOption::XDISPLOC => consts::option::XDISPLOC,
TelnetOption::Environment => consts::option::OLD_ENVIRONMENT,
TelnetOption::Authentication => consts::option::AUTHENTICATION,
TelnetOption::Encryption => consts::option::ENCRYPTION,
TelnetOption::NewEnvironment => consts::option::NEW_ENVIRONMENT,
TelnetOption::TN3270E => consts::option::TN3270E,
TelnetOption::XAUTH => consts::option::XAUTH,
TelnetOption::Charset => consts::option::CHARSET,
TelnetOption::TRSP => consts::option::TRSP,
TelnetOption::CPCO => consts::option::CPCO,
TelnetOption::TSLE => consts::option::TSLE,
TelnetOption::StartTLS => consts::option::START_TLS,
TelnetOption::Kermit => consts::option::KERMIT,
TelnetOption::SendUrl => consts::option::SENDURL,
TelnetOption::ForwardX => consts::option::FORWARDX,
TelnetOption::MSDP => consts::option::MSDP,
TelnetOption::MSSP => consts::option::MSSP,
TelnetOption::Compress1 => consts::option::COMPRESS1,
TelnetOption::Compress2 => consts::option::COMPRESS2,
TelnetOption::ZMP => consts::option::ZMP,
TelnetOption::PragmaLogon => consts::option::PRAGMA_LOGIN,
TelnetOption::SSPILogon => consts::option::SSPI_LOGIN,
TelnetOption::PragmaHeartbeat => consts::option::PRAGMA_HEARTBEAT,
TelnetOption::EXOPL => consts::option::EXOPL,
TelnetOption::Unknown(byte) => byte,
}
}
}