private LoginStatus Enable()
        {
            LoginStatus pwdResult = LoginStatus.InProgress;
            string      strTemp   = "";

            shell.buffer_empty();
            shell.print("\nenable");
            string match = "";

            string[] LoginPrompt = { "Username:"******"Login:"******"Password:"******"username:"******"login:"******"(>|#)", DevicePromptString + "#");
                    if (pwdResult == LoginStatus.UserMode)
                    {
                        shell.buffer_empty();
                        shell.print("\nenable");
                    }
                    PWDCounter++;
                }
                if (pwdResult > LoginStatus.Success)
                {
                    return(LoginStatus.InProgress);
                }
            }
            else if (match.ToLower().Contains("password:"******"", DevicePromptString + "#");

            string[] strLines = strOutput.Split(new char[] { '\n' });
            foreach (string strLine in strLines)
            {
                strTemp = strLine.Replace("\n", "");
                strTemp = strTemp.Replace("\r", "");
                strTemp = strTemp.Trim(); // strTemp.Replace(" ", "");
                if (strTemp.Length > 0)
                {
                    LastPromptChar = strTemp.Substring(strTemp.Length - 1, 1).ToCharArray()[0];
                    strTemp        = strTemp.Substring(0, strTemp.Length - 1); //Remove Last Char
                    DevicePrompt   = HelperClass.quotemeta(strTemp);
                }
            }
            DevicePromptString = DevicePrompt;
            DevicePromptConfig = DevicePrompt;
            if (DevicePromptConfig.Length > 10)
            {
                DevicePromptConfig = DevicePromptConfig.Substring(0, 10);
            }
            if (DeviceType.Equals("HP"))
            {
                DevicePromptConfig = DevicePromptConfig + @".*\(.*\)" + LastPromptChar;
            }
            else
            {
                DevicePromptConfig = DevicePromptConfig + @".*\(config.*\)" + LastPromptChar;
            }
            DevicePromptConfig = DevicePromptConfig + "[ \\r\\n]*$";
            DevicePrompt       = DevicePrompt + LastPromptChar + "[ \\r\\n]*$";
            if (Debug > 0)
            {
                Console.WriteLine("\nDebug-Info:");
                Console.WriteLine("new Prompt: " + DevicePrompt);
                Console.WriteLine("Config-Prompt: " + DevicePromptConfig);
            }

            return(LoginStatus.Success);
        }
        private LoginStatus Login(string host, string ConnectOptions)
        {
            string      match = "", strOutput = "";
            string      l_ConStr       = "";
            string      strTemp        = "";
            char        LastPromptChar = '\0';
            LoginStatus bResult        = LoginStatus.InProgress;

            if (bConnected == 0)
            {
                if (shell != null)  //if ((shell != null) && shell.Connected)
                {
                    shell.close();
                }
                shell = null;
                shell = new TerminalSessions.TelnetSSHLogin();
                if (Debug > 0)
                {
                    shell.DebugFlag = Debug;
                    Console.WriteLine("Debug-Info:\nConnect to " + host);
                }
                //shell.cmd_remove_mode = "1";
                if (!shell.open("", "", host, 0, "telnet", "", "", ""))
                {
                    return(LoginStatus.Failed);
                }
                else
                {
                    bConnected = 1;
                }
            }
            else
            {
                shell.buffer_empty();
                if (Debug > 0)
                {
                    Console.WriteLine("Debug-Info:\nConnect to " + host);
                }
                // shell.print("telnet " + host + " /vrf " + VRF);
                l_ConStr = host;
                if (ConnectOptions.Trim().Length != 0)
                {
                    l_ConStr = l_ConStr + " " + ConnectOptions;
                }
                Console.WriteLine("Will connect to: " + l_ConStr);
                shell.print("telnet " + l_ConStr);
                bConnected++;
            }
            // sleep 1sec.
            string[] LoginPrompt = { "Username:"******"Login:"******"Login Name:", "Password:"******"Press any key to continue" };
            if (DeviceCounter > 0)  //Add Prompt from source-Device
            {
                LoginPrompt = (string.Join(",", LoginPrompt) + "," + DeviceHistory[DeviceCounter - 1].DevicePrompt).Split(new char[] { ',' });
            }
            match = shell.WaitFor(LoginPrompt, false, Timeout);
            if (Debug > 0)
            {
                Console.WriteLine("Debug-Info:\nConnected, start Login.");
            }

            if ((match == null) || (match.Length == 0))
            {
                if (Debug > 0)
                {
                    Console.WriteLine("Connection failed, found no Loginprompt.");
                }
                return(LoginStatus.Unknown);
            }

            strTemp = shell.ShowScreen();
            if (strTemp.ToUpper().Contains("HEWLETT"))
            {
                DeviceType = "HP";      // HEWLETT-PACKARD
            }
            strTemp = "";
            if (match.ToLower().Contains("press any key to continue"))
            {
                match = "";
                shell.buffer_empty();
                string[] LoginPrompt2 = { "Username:"******"Login:"******"Login Name:", "Password:"******" ");
                match = shell.WaitFor(LoginPrompt2, false, Timeout);
                if ((match == null) || (match.Length == 0))
                {
                    if (Debug > 0)
                    {
                        Console.WriteLine("Connection failed, found no Loginprompt.");
                    }
                    return(LoginStatus.Unknown);
                }
            }

            if ((match.ToLower().Contains("username:"******"login:"******"login name:")))
            {
                //$PWDCounter = 0;
                bResult = LoginStatus.Continue;
                while ((PWDCounter <= UserArray.Count) && (bResult > LoginStatus.InProgress) && (bResult < LoginStatus.Unknown))
                {
                    bResult = TryUserLogin(unknownPrompt, unknownPrompt);
                    PWDCounter++;
                }
                if (bResult > LoginStatus.Success)
                {
                    return(bResult);
                }
            }
            else if (match.ToLower().Contains("password:"******"Test-" + PWDCounter.ToString() + ":" + bResult.ToString());
                    }
                    PWDCounter++;
                }
                if (bResult > 0)
                {
                    return(bResult);
                }
            }
            if (Debug > 0)
            {
                Console.WriteLine("\nDebug-Info:     Login success.");
            }

            //Get full Prompt
            DevicePrompt = "";
            strOutput    = shell.cmd("", unknownPrompt);
            if ((strOutput == null) || (strOutput.Length == 0))
            {
                //Found no Prompt Exit...
                return(LoginStatus.Unknown);
            }
            string[] strLines = strOutput.Split(new char[] { '\n' });
            foreach (string strLine in strLines)
            {
                strTemp = strLine.Replace("\n", "");
                strTemp = strTemp.Replace("\r", "");
                strTemp = strTemp.Trim(); // strTemp.Replace(" ", "");
                if (strTemp.Length > 0)
                {
                    LastPromptChar = strTemp.ToCharArray(strTemp.Length - 1, 1)[0];
                    strTemp        = strTemp.Substring(0, strTemp.Length - 1); // Remove Last Char
                    DevicePrompt   = HelperClass.quotemeta(strTemp);
                }
            }
            DevicePromptString = DevicePrompt;
            if (LastPromptChar == '#')
            {
                EnableMode = true;

                DevicePromptConfig = DevicePrompt.Substring(0, 10);
                if (DevicePromptConfig.EndsWith("\\"))
                {
                    DevicePromptConfig = DevicePromptConfig.Substring(0, DevicePromptConfig.Length - 1);
                }

                DevicePromptConfig = DevicePromptConfig + LastPromptChar;
                //DevicePromptConfig =~ s/(.*)(.)$/$1.*\\(config.*\\)$2/;	# s/(.*)([^\s])\s?$/$1.*\\(config.*\\)$2/;
                if (DeviceType.Equals("HP"))
                {
                    DevicePromptConfig = DevicePromptConfig.Substring(0, DevicePromptConfig.Length - 1) + ".*\\(.*\\)" + "#";
                }
                else
                {
                    DevicePromptConfig = DevicePromptConfig.Trim();
                    DevicePromptConfig = DevicePromptConfig.Substring(0, DevicePromptConfig.Length - 1) + ".*\\(config.*\\)" + "#";
                }
                DevicePromptConfig = DevicePromptConfig + "[ \\r\\n]*$";
            }
            else
            {
                DevicePromptConfig = "";
            }

            DevicePrompt = DevicePrompt + LastPromptChar + "[ \\r\\n]*$";
            if (Debug > 0)
            {
                Console.WriteLine("\nDebug-Info:");
                Console.WriteLine("new Prompt: " + DevicePrompt);
                Console.WriteLine("Config-Prompt: " + DevicePromptConfig);
            }

            return(LoginStatus.Success);
        }