1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157

///
/// Telnet options
///
#[derive(Debug, Clone, Copy)]
pub enum TelnetOption {
    TransmitBinary,
    Echo,
    Reconnection,
    SuppressGoAhead,
    ApproxMessageSizeNeg,
    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,
    MSSP,
    Compress,
    Compress2,
    ZMP,
    EXOPL,
    UnknownOption(u8)
}

impl TelnetOption {
    pub fn parse(byte: u8) -> TelnetOption {
        match byte {
            0 => TelnetOption::TransmitBinary,
            1 => TelnetOption::Echo,
            2 => TelnetOption::Reconnection,
            3 => TelnetOption::SuppressGoAhead,
            4 => TelnetOption::ApproxMessageSizeNeg,
            5 => TelnetOption::Status,
            6 => TelnetOption::TimingMark,
            7 => TelnetOption::RCTE,
            8 => TelnetOption::OutLineWidth,
            9 => TelnetOption::OutPageSize,
            10 => TelnetOption::NAOCRD,
            11 => TelnetOption::NAOHTS,
            12 => TelnetOption::NAOHTD,
            13 => TelnetOption::NAOFFD,
            14 => TelnetOption::NAOVTS,
            15 => TelnetOption::NAOVTD,
            16 => TelnetOption::NAOLFD,
            17 => TelnetOption::XASCII,
            18 => TelnetOption::Logout,
            19 => TelnetOption::ByteMacro,
            20 => TelnetOption::DET,
            21 => TelnetOption::SUPDUP,
            22 => TelnetOption::SUPDUPOutput,
            23 => TelnetOption::SNDLOC,
            24 => TelnetOption::TTYPE,
            25 => TelnetOption::EOR,
            26 => TelnetOption::TUID,
            27 => TelnetOption::OUTMRK,
            28 => TelnetOption::TTYLOC,
            29 => TelnetOption::OPT3270Regime,
            30 => TelnetOption::X3PAD,
            31 => TelnetOption::NAWS,
            32 => TelnetOption::TSPEED,
            33 => TelnetOption::LFLOW,
            34 => TelnetOption::Linemode,
            35 => TelnetOption::XDISPLOC,
            36 => TelnetOption::Environment,
            37 => TelnetOption::Authentication,
            38 => TelnetOption::Encryption,
            39 => TelnetOption::NewEnvironment,
            70 => TelnetOption::MSSP,
            85 => TelnetOption::Compress,
            86 => TelnetOption::Compress2,
            93 => TelnetOption::ZMP,
            255 => TelnetOption::EXOPL,
            byte => TelnetOption::UnknownOption(byte)
        }
    }

    pub fn to_byte(&self) -> u8 {
        match *self {
            TelnetOption::TransmitBinary => 0,
            TelnetOption::Echo => 1,
            TelnetOption::Reconnection => 2,
            TelnetOption::SuppressGoAhead => 3,
            TelnetOption::ApproxMessageSizeNeg => 4,
            TelnetOption::Status => 5,
            TelnetOption::TimingMark => 6,
            TelnetOption::RCTE => 7,
            TelnetOption::OutLineWidth => 8,
            TelnetOption::OutPageSize => 9,
            TelnetOption::NAOCRD => 10,
            TelnetOption::NAOHTS => 11,
            TelnetOption::NAOHTD => 12,
            TelnetOption::NAOFFD => 13,
            TelnetOption::NAOVTS => 14,
            TelnetOption::NAOVTD => 15,
            TelnetOption::NAOLFD => 16,
            TelnetOption::XASCII => 17,
            TelnetOption::Logout => 18,
            TelnetOption::ByteMacro => 19,
            TelnetOption::DET => 20,
            TelnetOption::SUPDUP => 21,
            TelnetOption::SUPDUPOutput => 22,
            TelnetOption::SNDLOC => 23,
            TelnetOption::TTYPE => 24,
            TelnetOption::EOR => 25,
            TelnetOption::TUID => 26,
            TelnetOption::OUTMRK => 27,
            TelnetOption::TTYLOC => 28,
            TelnetOption::OPT3270Regime => 29,
            TelnetOption::X3PAD => 30,
            TelnetOption::NAWS => 31,
            TelnetOption::TSPEED => 32,
            TelnetOption::LFLOW => 33,
            TelnetOption::Linemode => 34,
            TelnetOption::XDISPLOC => 35,
            TelnetOption::Environment => 36,
            TelnetOption::Authentication => 37,
            TelnetOption::Encryption => 38,
            TelnetOption::NewEnvironment => 39,
            TelnetOption::MSSP => 70,
            TelnetOption::Compress => 85,
            TelnetOption::Compress2 => 86,
            TelnetOption::ZMP => 93,
            TelnetOption::EXOPL => 255,
            TelnetOption::UnknownOption(byte) => byte
        }
    }
}