private dynamic SendCommand(string message, TelnetCodes expectedCode) { var response = SendCommand(message); if (response.Code != (int)expectedCode) { throw new Exception($"Unexpected response code: {response.Code}"); } else { response.Status = true; } return(response); }
private void HandleIAC(byte[] data, int len, ref int pos, ref int scanned) { #if TELNET_DEBUG ChiConsole.WriteLine(((TelnetCodes)data[pos]).ToString() + " "); #endif if (pos + 1 >= len) { #if TELNET_DEBUG ChiConsole.WriteLine("Uncomplete telnet sequence"); #endif // skip IAC. We will try again when we receive more data pos++; return; } if (System.Enum.IsDefined(TelnetCodes.ABORT.GetType(), data[pos + 1]) == false) { ChiConsole.WriteLine("Unknown telnet code " + data[pos + 1]); // consume IAC pos++; scanned = pos; return; } TelnetCodes telCode = (TelnetCodes)data[pos + 1]; #if TELNET_DEBUG ChiConsole.WriteLine(telCode.ToString()); #endif if (telCode == TelnetCodes.DO || telCode == TelnetCodes.DONT || telCode == TelnetCodes.WILL || telCode == TelnetCodes.WONT) { if (pos + 2 >= len) { #if TELNET_DEBUG ChiConsole.WriteLine("Uncomplete telnet sequence"); #endif // skip IAC and DO/DONT. We will try again when we receive more data pos += 2; return; } if (System.Enum.IsDefined(TelnetOpts.TELOPT_ECHO.GetType(), data[pos + 2]) == false) { ChiConsole.WriteLine("Unknown telnet option " + data[pos + 2]); // consume IAC pos++; scanned = pos; return; } TelnetOpts telOpt = (TelnetOpts)data[pos + 2]; #if TELNET_DEBUG ChiConsole.WriteLine(telOpt.ToString()); #endif if (telnetEvent != null) { telnetEvent(telCode, telOpt); } pos += 3; scanned = pos; return; } else if (telCode == TelnetCodes.GA) { string str = m_stringBuilder.ToString(); if (promptEvent != null) { promptEvent(str); } m_stringBuilder = new StringBuilder(); pos += 2; scanned = pos; return; } else { if (telnetEvent != null) { telnetEvent(telCode, 0); } pos += 2; scanned = pos; return; } }