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; } }
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); }