Esempio n. 1
0
        private void mPlinkProcess_Exited(object sender, System.EventArgs e)
        {
            mPlinkProcess = new Process();
            mPlinkProcess.StartInfo.FileName               = StartupPath + @"\plink.exe";
            mPlinkProcess.StartInfo.UseShellExecute        = false;
            mPlinkProcess.StartInfo.RedirectStandardInput  = true;
            mPlinkProcess.StartInfo.RedirectStandardOutput = true;
            mPlinkProcess.StartInfo.RedirectStandardError  = true;
            mPlinkProcess.StartInfo.CreateNoWindow         = true;
            mPlinkProcess.EnableRaisingEvents              = true;

            mPlinkProcess.OutputDataReceived += new DataReceivedEventHandler(mPlinkProcess_ErrorOrOutputDataReceived);
            mPlinkProcess.ErrorDataReceived  += new DataReceivedEventHandler(mPlinkProcess_ErrorOrOutputDataReceived);
            mPlinkProcess.Exited             += new System.EventHandler(mPlinkProcess_Exited);

            CurStatus = ConnectionStatus.ConnectAborted;
            if (this.ConnectionStateChanged != null)
            {
                ConnectionStateChanged.BeginInvoke(OldStatus, CurStatus, null, null);
            }
            OutputDataReceived(0, LogLevel.Normal, "plink程序异常退出");

            if (mPlinkCf.ReConnAfterBreak)
            {
                ReConnDelayTimer.Enabled = true;
            }
        }
Esempio n. 2
0
        private void mPlinkProcess_ErrorOrOutputDataReceived(object sender, DataReceivedEventArgs e)
        {
            if (e.Data == null)
            {
                if (OutputDataReceived != null)
                {
                    OutputDataReceived(1, LogLevel.Normal, "e.Data null");
                }
                return;
            }
            else if (e.Data.Length == 0)
            {
                if (OutputDataReceived != null)
                {
                    OutputDataReceived(1, LogLevel.Normal, e.Data);
                }
                return;
            }
            else
            if (OutputDataReceived != null)
            {
                OutputDataReceived(1, LogLevel.Normal, e.Data);
            }

            if (Utility.IsLookingup(e.Data))
            {
                if (curStatus == ConnectionStatus.idle)
                {
                    CurStatus = ConnectionStatus.StartConnecting;
                }
                else if (CurStatus != ConnectionStatus.ReConnecting && CurStatus != ConnectionStatus.StartConnecting)
                {
                    CurStatus = ConnectionStatus.ReConnecting;
                }
            }
            else if (Utility.IsStoreKey(e.Data))
            {
                //mPlinkProcess.StandardInput.WriteLine("n");
                CurStatus = ConnectionStatus.KeyConfirm;
            }
            else if (Utility.IsUsername(e.Data))
            {
                mPlinkProcess.StandardInput.WriteLine(mPlinkCf.PasswordCrypt);
                CurStatus = ConnectionStatus.SendingUseName;
            }
            else if (Utility.IsPassword(e.Data))
            {
                CurStatus = ConnectionStatus.SendingPassword;
            }
            else if (Utility.IsAccessGranted(e.Data))
            {
                CurStatus = ConnectionStatus.Authenticated;
            }
            else if (Utility.IsLocalportForward(e.Data) || Utility.IsDynamicSocks(e.Data))
            {
                if (curStatus == ConnectionStatus.Connected)
                {
                    return;
                }
                else
                {
                    CurStatus = ConnectionStatus.Connected;
                }
            }
            else if (PlinkCf.LoopBackPing && Utility.IsPingRemoteForward(e.Data, PlinkCf.LoopBackPingPort))
            {
                CurStatus = ConnectionStatus.PingTunnelOpened;
            }
            else
            {
                return;
            }

            ConnectionStateChanged.BeginInvoke(OldStatus, CurStatus, null, this);
        }