Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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;
            }
        }