public ITerminalConnection EstablishConnection(IPoderosaMainWindow window, ITerminalParameter param, ITerminalSettings settings) { SerialTerminalParam sp = param as SerialTerminalParam; SerialTerminalSettings ts = settings as SerialTerminalSettings; Debug.Assert(sp != null && ts != null); return SerialPortUtil.CreateNewSerialConnection(window, sp, ts); }
public ITerminalConnection EstablishConnection(IPoderosaMainWindow window, ITerminalParameter param, ITerminalSettings settings) { SerialTerminalParam sp = param as SerialTerminalParam; SerialTerminalSettings ts = settings as SerialTerminalSettings; Debug.Assert(sp != null && ts != null); return(SerialPortUtil.CreateNewSerialConnection(window, sp, ts)); }
protected override void Negotiate() { ITerminalParameter term = (ITerminalParameter)_destination.GetAdapter(typeof(ITerminalParameter)); TelnetNegotiator neg = new TelnetNegotiator(term.TerminalType, term.InitialWidth, term.InitialHeight); TelnetTerminalConnection r = new TelnetTerminalConnection(_destination, neg, new PlainPoderosaSocket(_socket)); //BACK-BURNER r.UsingSocks = _socks!=null; _result = r; }
public ITerminalConnection EstablishConnection(IPoderosaMainWindow window, ITerminalParameter param, ITerminalSettings settings) { PipeTerminalParameter tp = param as PipeTerminalParameter; PipeTerminalSettings ts = settings as PipeTerminalSettings; Debug.Assert(tp != null && ts != null); return(PipeCreator.CreateNewPipeTerminalConnection(tp, ts)); }
protected override ITerminalParameter PrepareTerminalParameter() { _param.Home = _homeDirectoryBox.Text; _param.ShellName = _shellBox.Text; //ログ設定 LogType logtype = (LogType)EnumDescAttribute.For(typeof(LogType)).FromDescription(_logTypeBox.Text, LogType.None); ISimpleLogSettings logsettings = null; if (logtype != LogType.None) { logsettings = CreateSimpleLogSettings(logtype, _logFileBox.Text); if (logsettings == null) { return(null); //動作キャンセル } } ITerminalSettings settings = this.TerminalSettings; settings.BeginUpdate(); if (logsettings != null) { settings.LogSettings.Reset(logsettings); } settings.Caption = _param.ShellBody; settings.Icon = Poderosa.TerminalSession.Properties.Resources.Cygwin16x16; settings.Encoding = (EncodingType)_encodingBox.SelectedIndex; settings.TerminalType = (TerminalType)_terminalTypeBox.SelectedIndex; settings.EndUpdate(); ITerminalParameter termParam = (ITerminalParameter)_param.GetAdapter(typeof(ITerminalParameter)); termParam.SetTerminalName(_terminalTypeBox.Text); // Used for TERM environment variable (LocalShellUtil) _param.CygwinDir = _cygwinDirBox.Text; if (_param.CygwinDir.Length > 0 && _param.CygwinDir[_param.CygwinDir.Length - 1] == Path.PathSeparator) { _param.CygwinDir = _param.CygwinDir.Substring(0, _param.CygwinDir.Length - 1); } string autoExecMacroPath = null; if (_autoExecMacroPathBox.Text.Length != 0) { autoExecMacroPath = _autoExecMacroPathBox.Text; } IAutoExecMacroParameter autoExecParams = _param.GetAdapter(typeof(IAutoExecMacroParameter)) as IAutoExecMacroParameter; if (autoExecParams != null) { autoExecParams.AutoExecMacroPath = autoExecMacroPath; } return((ITerminalParameter)_param.GetAdapter(typeof(ITerminalParameter))); }
/// <summary> /// Initiates the SSH connection process by getting the <see cref="IProtocolService"/> instance and calling /// <see cref="IProtocolService.AsyncSSHConnect"/>. This is an asynchronous process: the <see cref="SuccessfullyExit"/> method is called when the /// connection is established successfully and <see cref="ConnectionFailed"/> method is called when we are unable to establish the connection. /// </summary> public void AsyncConnect() { ITerminalEmulatorService terminalEmulatorService = (ITerminalEmulatorService)_poderosaWorld.PluginManager.FindPlugin("org.poderosa.terminalemulator", typeof(ITerminalEmulatorService)); IProtocolService protocolService = (IProtocolService)_poderosaWorld.PluginManager.FindPlugin("org.poderosa.protocols", typeof(IProtocolService)); // Create and initialize the SSH login parameters ISSHLoginParameter sshLoginParameter = protocolService.CreateDefaultSSHParameter(); sshLoginParameter.Account = Username; if (!String.IsNullOrEmpty(IdentityFile)) { sshLoginParameter.AuthenticationType = AuthenticationType.PublicKey; sshLoginParameter.IdentityFileName = IdentityFile; } else { sshLoginParameter.AuthenticationType = AuthenticationType.Password; if (Password != null && Password.Length > 0) { IntPtr passwordBytes = Marshal.SecureStringToGlobalAllocAnsi(Password); sshLoginParameter.PasswordOrPassphrase = Marshal.PtrToStringAnsi(passwordBytes); } } sshLoginParameter.Method = (SSHProtocol)Enum.Parse(typeof(SSHProtocol), SshProtocol.ToString("G")); // Create and initialize the various socket connection properties ITCPParameter tcpParameter = (ITCPParameter)sshLoginParameter.GetAdapter(typeof(ITCPParameter)); tcpParameter.Destination = HostName; tcpParameter.Port = Port; // Set the UI settings to use for the terminal itself terminalEmulatorService.TerminalEmulatorOptions.RightButtonAction = MouseButtonAction.Paste; _settings = terminalEmulatorService.CreateDefaultTerminalSettings(tcpParameter.Destination, null); _settings.BeginUpdate(); _settings.TerminalType = (ConnectionParam.TerminalType)Enum.Parse(typeof(ConnectionParam.TerminalType), TerminalType.ToString("G")); _settings.RenderProfile = terminalEmulatorService.TerminalEmulatorOptions.CreateRenderProfile(); _settings.RenderProfile.BackColor = BackColor; _settings.RenderProfile.ForeColor = ForeColor; _settings.RenderProfile.FontName = Font.Name; _settings.RenderProfile.FontSize = Font.Size; _settings.EndUpdate(); ITerminalParameter param = (ITerminalParameter)tcpParameter.GetAdapter(typeof(ITerminalParameter)); param.SetTerminalName(_settings.TerminalType.ToString("G").ToLower()); // Initiate the connection process protocolService.AsyncSSHConnect(this, sshLoginParameter); }
/// <summary> /// ターミナルセッションInvoke /// </summary> /// <param name="tp">ターミナルパラメータ</param> /// <param name="ts">ターミナルセッティング</param> private static ITerminalSession InvokeOpenSessionOrNull(ITerminalParameter tp, ITerminalSettings ts) { try { ITerminalSessionsService ss = ConnectProfilePlugin.Instance.TerminalSessionsService; ITerminalSession newsession = ss.TerminalSessionStartCommand.StartTerminalSession(ConnectProfilePlugin.Instance.WindowManager.ActiveWindow, tp, ts); return((newsession == null) ? null : newsession); } catch (Exception ex) { Poderosa.RuntimeUtil.ReportException(ex); return(null); } }
public InternalTerminalInstance(ProtocolType protocol, InternalPoderosaInstance _internalPoderosaWorld, ITerminalParameter _IterminalParameter) { _basePoderosaInstance = _internalPoderosaWorld; _window = _basePoderosaInstance.WindowManagerPlugin.CreateLibraryMainWindow(); _protocol = protocol; _terminalSettings = new TerminalSettings(); _terminalParameter = _IterminalParameter; _terminalView = _window.ViewManager.GetCandidateViewForNewDocument(); }
public LogService(ITerminalParameter param, ITerminalSettings settings) { _binaryLoggers = new BinaryLoggerList(); _textLoggers = new TextLoggerList(); _xmlLoggers = new XmlLoggerList(); ITerminalEmulatorOptions opt = GEnv.Options; if (opt.DefaultLogType != LogType.None) { ApplySimpleLogSetting(new SimpleLogSettings(opt.DefaultLogType, CreateAutoLogFileName(opt, param, settings))); } }
//“à•”‚Å‚ÍITCPParameter‚©ICygwinParameter‚Ì‚Ç‚Á‚¿‚©‚µ‚©ŒÄ‚΂ê‚È‚¢‚Í‚¸ public static void FireConnectionSucceeded(IAdaptable param) { ITerminalParameter t = (ITerminalParameter)param.GetAdapter(typeof(ITerminalParameter)); Debug.Assert(t != null); if (ConsoleMain.Instance != null) { foreach (IConnectionResultEventHandler h in ProtocolsPlugin.Instance.ConnectionResultEventHandler.GetExtensions()) { h.OnSucceeded(t); } } }
public void BeforeAsyncConnect(ITerminalParameter tp) { ISSHLoginParameter ssh = (ISSHLoginParameter)tp.GetAdapter(typeof(ISSHLoginParameter)); if (ssh == null) { return; //SSH以外は興味なし } if (ssh.Method == SSHProtocol.SSH2 && _originalOptions.EnableKeyAgent) { ssh.AgentForward = this; //自分をハンドルするように設定 } }
public void FireConnectionFailure(ITerminalParameter param, string msg) { ITerminalParameter t = param; // (ITerminalParameter)param.GetAdapter(typeof(ITerminalParameter)); Debug.Assert(t != null); if (_ConMain != null) { /* * foreach (IConnectionResultEventHandler h in ConsoleMain.Instance.ConnectionResultEventHandler.GetExtensions()) * { * h.OnFailed(t, msg); * } */ } }
public static void FireConnectionFailure(IAdaptable param, string msg) { ITerminalParameter t = (ITerminalParameter)param.GetAdapter(typeof(ITerminalParameter)); Debug.Assert(t != null); if (ProtocolsPlugin.Instance != null) { foreach (IConnectionResultEventHandler h in ProtocolsPlugin.Instance.ConnectionResultEventHandler.GetExtensions()) { h.OnFailed(t, msg); } } }
public void BeforeAsyncConnect(ITerminalParameter tp) { ISSHLoginParameter ssh = (ISSHLoginParameter)tp.GetAdapter(typeof(ISSHLoginParameter)); if (ssh == null) { return; //SSH以外は興味なし } if (ssh.Method == SSHProtocol.SSH2 && ssh.EnableAgentForwarding) { ssh.AgentForwardingAuthKeyProvider = this; //自分をハンドルするように設定 } }
protected override void Negotiate() { ITerminalParameter term = (ITerminalParameter)_destination.GetAdapter(typeof(ITerminalParameter)); ITCPParameter tcp = (ITCPParameter)_destination.GetAdapter(typeof(ITCPParameter)); SSHConnectionParameter con = new SSHConnectionParameter(); #if DEBUG // con.EventTracer = new SSHDebugTracer(); #endif con.Protocol = _destination.Method; con.CheckMACError = PEnv.Options.SSHCheckMAC; con.UserName = _destination.Account; con.Password = _destination.PasswordOrPassphrase; con.AuthenticationType = _destination.AuthenticationType; con.IdentityFile = _destination.IdentityFileName; con.TerminalWidth = term.InitialWidth; con.TerminalHeight = term.InitialHeight; con.TerminalName = term.TerminalType; con.WindowSize = PEnv.Options.SSHWindowSize; con.PreferableCipherAlgorithms = LocalSSHUtil.ParseCipherAlgorithm(PEnv.Options.CipherAlgorithmOrder); con.PreferableHostKeyAlgorithms = LocalSSHUtil.ParsePublicKeyAlgorithm(PEnv.Options.HostKeyAlgorithmOrder); con.AgentForward = _destination.AgentForward; if (ProtocolsPlugin.Instance.ProtocolOptions.LogSSHEvents) { con.EventTracer = new SSHEventTracer(tcp.Destination); } if (_keycheck != null) { con.KeyCheck += new HostKeyCheckCallback(this.CheckKey); } SSHTerminalConnection r = new SSHTerminalConnection(_destination); SSHConnection ssh = SSHConnection.Connect(con, r.ConnectionEventReceiver, _socket); if (ssh != null) { if (PEnv.Options.RetainsPassphrase && _destination.AuthenticationType != AuthenticationType.KeyboardInteractive) { ProtocolsPlugin.Instance.PassphraseCache.Add(tcp.Destination, _destination.Account, _destination.PasswordOrPassphrase); //接続成功時のみセット } //_destination.PasswordOrPassphrase = ""; 接続の複製のためにここで消さずに残しておく r.AttachTransmissionSide(ssh); r.UsingSocks = _socks != null; _result = r; } else { throw new IOException(PEnv.Strings.GetString("Message.SSHConnector.Cancelled")); } }
public bool UIEquals(ITerminalParameter t) { PipeTerminalParameter p = t as PipeTerminalParameter; return(p != null && ((_exeFilePath == null && p._exeFilePath == null) || (_exeFilePath != null && p._exeFilePath != null && String.Compare(_exeFilePath, p._exeFilePath, true) == 0)) && ((_commandLineOptions == null && p._commandLineOptions == null) || (_commandLineOptions != null && p._commandLineOptions != null && String.Compare(_commandLineOptions, p._commandLineOptions, false) == 0)) && ((_inputPipePath == null && p._inputPipePath == null) || (_inputPipePath != null && p._inputPipePath != null && String.Compare(_inputPipePath, p._inputPipePath, true) == 0)) && ((_outputPipePath == null && p._outputPipePath == null) || (_outputPipePath != null && p._outputPipePath != null && String.Compare(_outputPipePath, p._outputPipePath, true) == 0))); }
private void AssureContent() { if (_lateBindContent == null) { return; } MRUItem temp = MRUItemSerializer.Instance.Deserialize(_lateBindContent) as MRUItem; Debug.Assert(temp != null); //型チェックくらいはロード時にしている _terminalParam = temp._terminalParam; _terminalSettings = temp._terminalSettings; _lateBindContent = null; //これで遅延する }
private CommandResult Reproduce(ITerminalSession ts) { //TODO SSH2では同一コネクションでもう一本張るショートカット、シリアルでは複製できないことを通知するショートカットがあるが... ITerminalParameter param = (ITerminalParameter)ts.TerminalTransmission.Connection.Destination.Clone(); ISSHLoginParameter ssh = (ISSHLoginParameter)param.GetAdapter(typeof(ISSHLoginParameter)); if (ssh != null) { ssh.LetUserInputPassword = false; } ITerminalSettings settings = ts.TerminalSettings.Clone(); ITerminalSession session = TerminalSessionsPlugin.Instance.TerminalSessionStartCommand.StartTerminalSession(ts.OwnerWindow, param, settings); return(session != null ? CommandResult.Succeeded : CommandResult.Failed); }
public ITerminalConnection OpenConnection(IPoderosaMainWindow owner, ITerminalParameter destination, ITerminalSettings settings) { //NOTE 同時接続数チェックあたりあってもいい ITerminalConnectionFactory[] fs = (ITerminalConnectionFactory[])TerminalSessionsPlugin.Instance.PoderosaWorld.PluginManager.FindExtensionPoint(TerminalSessionsPlugin.TERMINAL_CONNECTION_FACTORY_ID).GetExtensions(); //後に登録されたやつを優先するため、逆順に舐める for (int i = fs.Length - 1; i >= 0; i--) { ITerminalConnectionFactory f = fs[i]; if (f.IsSupporting(destination, settings)) { return(f.EstablishConnection(owner, destination, settings)); } } throw new ArgumentException("Failed to make an ITerminalConnection using extension point."); //ましなエラーメッセージ }
private static ShortcutFileContent ParseV4(XmlElement root) { XmlElement first = null; XmlElement second = null; //ちょっといいかげんだが、最初のElement、2個目のElementを。 foreach (XmlNode node in root.ChildNodes) { XmlElement e = node as XmlElement; if (e != null) { if (first == null) { first = e; } else if (second == null) { second = e; break; } } } if (second == null) { throw new FormatException("Unknown XML Format"); } StructuredText setting_text = new XmlStructuredTextReader(first).Read(); StructuredText parameter_text = new XmlStructuredTextReader(second).Read(); ISerializeService ss = TerminalSessionsPlugin.Instance.SerializeService; ITerminalSettings setting = ss.Deserialize(setting_text) as ITerminalSettings; if (setting == null) { throw new FormatException("TerminalSettings could not be loaded"); } ITerminalParameter param = ss.Deserialize(parameter_text) as ITerminalParameter; if (param == null) { throw new FormatException("TerminalParameter could not be loaded"); } return(new ShortcutFileContent(setting, param)); }
public ConnectionParameterCollectionImpl(ITerminalSession session) { if (session != null && session.TerminalConnection != null) { termialParameter = session.TerminalConnection.Destination; } else { termialParameter = null; } if (session != null) { termialSettings = session.TerminalSettings; } else { termialSettings = null; } List <string> names = new List <string>(); foreach (object obj in new object[] { termialParameter, termialSettings }) { if (obj != null) { foreach (PropertyInfo prop in obj.GetType().GetProperties(PROPERTY_BINDING_FLAGS)) { if (!prop.CanRead || prop.GetIndexParameters().Length > 0) { continue; } object[] attribs = prop.GetCustomAttributes(typeof(MacroConnectionParameterAttribute), true); if (attribs.Length > 0) { names.Add(prop.Name); } } } } names.Sort(); names.TrimExcess(); paramNames = names; }
public IEnumerable <TerminalSessionParameters <T> > FindTerminalParameter <T>() where T : class { return(_data.Select((item) => { ITerminalParameter tp = item.TerminalParameter; T param = tp.GetAdapter(typeof(T)) as T; if (param != null && item.TerminalParameter != null && item.TerminalSettings != null) { return new TerminalSessionParameters <T>(param, item.TerminalParameter, item.TerminalSettings); } else { return null; } }) .Where((item) => { return item != null; })); }
private static bool CheckDestination(ITerminalParameter tp, string destination) { //destinationがnull(FillTop()由来)なら常にOK if (destination == null) { return(true); } ITCPParameter tcp = (ITCPParameter)tp.GetAdapter(typeof(ITCPParameter)); if (tcp == null) { return(false); } else { return(tcp.Destination == destination); } }
private static ITerminalSession OpenSessionOrNull(ITerminalParameter tp, ITerminalSettings ts) { try { ITerminalSessionsService ss = MacroPlugin.Instance.TerminalSessionsService; ITerminalSession newsession = ss.TerminalSessionStartCommand.StartTerminalSession(MacroPlugin.Instance.WindowManager.ActiveWindow, tp, ts); if (newsession == null) { return(null); } MacroPlugin.Instance.MacroManager.CurrentExecutor.AddRuntimeSession(newsession); return(newsession); } catch (Exception ex) { RuntimeUtil.ReportException(ex); return(null); } }
private string CreateAutoLogFileName(ITerminalEmulatorOptions opt, ITerminalParameter param, ITerminalSettings settings) { string filebody; //if(fmts.Length==0) { DateTime now = DateTime.Now; this._logFileName = ReplaceCharForLogFile(settings.Caption); if (opt.DefaultLogDirectory.EndsWith("\\")) { filebody = String.Format("{0}{1}_{2}{3,2:D2}{4,2:D2}", opt.DefaultLogDirectory, ReplaceCharForLogFile(settings.Caption), now.Year, now.Month, now.Day); } else { filebody = String.Format("{0}\\{1}_{2}{3,2:D2}{4,2:D2}", opt.DefaultLogDirectory, ReplaceCharForLogFile(settings.Caption), now.Year, now.Month, now.Day); } //} //else // filebody = fmts[0].FormatFileName(opt.DefaultLogDirectory, param, settings); int n = 1; do { string filename; if (n == 1) { filename = String.Format("{0}.log", filebody); } else { filename = String.Format("{0}_{1}.log", filebody, n); } if (!File.Exists(filename)) { return(filename); } else { n++; } } while(true); }
//Parameterからスタートするタイプ 今はtargetはwindow強制だがViewでも可能にしたい public ITerminalSession StartTerminalSession(ICommandTarget target, ITerminalParameter destination, ITerminalSettings settings) { IPoderosaMainWindow window = (IPoderosaMainWindow)target.GetAdapter(typeof(IPoderosaMainWindow)); if (window == null) { IPoderosaView view = (IPoderosaView)target.GetAdapter(typeof(IPoderosaView)); window = (IPoderosaMainWindow)view.ParentForm.GetAdapter(typeof(IPoderosaMainWindow)); } Debug.Assert(window != null); ITerminalConnection connection = OpenConnection(window, destination, settings); if (connection == null) { return(null); } return(StartTerminalSession(target, connection, settings)); }
//拡張ポイントから取ったインタフェースを使ってApplyParam。なければデフォルトで public void ApplyParam() { ITerminalParameter parameter = null; ITerminalSettings settings = null; if (_loginDialogUISupport != null) { _loginDialogUISupport.FillTopDestination(typeof(ITCPParameter), out parameter, out settings); } if (parameter == null) { parameter = (ITerminalParameter)TerminalSessionsPlugin.Instance.ProtocolService.CreateDefaultSSHParameter().GetAdapter(typeof(ITerminalParameter)); } if (settings == null) { settings = TerminalSessionsPlugin.Instance.TerminalEmulatorService.CreateDefaultTerminalSettings("", null); } ApplyParam(parameter, settings); }
public static ITerminalSession InvokeOpenSessionOrNull(ICommandTarget target, TerminalParam param) { ITerminalParameter tp = param.ConvertToTerminalParameter(); ITerminalSettings ts = CreateTerminalSettings(param); IViewManager pm = CommandTargetUtil.AsWindow(target).ViewManager; //独立ウィンドウにポップアップさせるようなことは考えていない IContentReplaceableView rv = (IContentReplaceableView)pm.GetCandidateViewForNewDocument().GetAdapter(typeof(IContentReplaceableView)); TerminalControl tc = (TerminalControl)rv.GetCurrentContent().GetAdapter(typeof(TerminalControl)); if (tc != null) //ターミナルコントロールがないときは無理に設定しにいかない { RenderProfile rp = ts.UsingDefaultRenderProfile ? MacroPlugin.Instance.TerminalEmulatorService.TerminalEmulatorOptions.CreateRenderProfile() : ts.RenderProfile; Size sz = tc.CalcTerminalSize(rp); tp.SetTerminalSize(sz.Width, sz.Height); } return((ITerminalSession)MacroPlugin.Instance.WindowManager.ActiveWindow.AsForm().Invoke(new OpenSessionDelegate(OpenSessionOrNull), tp, ts)); }
private CommandResult ConnectAgain(ITerminalSession ts0) { TerminalSession ts = (TerminalSession)ts0.GetAdapter(typeof(TerminalSession)); ITerminalParameter param = (ITerminalParameter)ts.TerminalTransmission.Connection.Destination.Clone(); ISSHLoginParameter ssh = (ISSHLoginParameter)param.GetAdapter(typeof(ISSHLoginParameter)); if (ssh != null) { ssh.LetUserInputPassword = false; } ITerminalConnection connection = TerminalSessionsPlugin.Instance.TerminalSessionStartCommand.OpenConnection(ts.OwnerWindow, param, ts.TerminalSettings); if (connection == null) { return(CommandResult.Failed); } ts.Revive(connection); //接続を復活 return(CommandResult.Succeeded); }
private static string CreateAutoLogFileName(ITerminalEmulatorOptions opt, ITerminalParameter param, ITerminalSettings settings) { IAutoLogFileFormatter[] fmts = TerminalEmulatorPlugin.Instance.AutoLogFileFormatter; string filebody; if (fmts.Length == 0) { DateTime now = DateTime.Now; filebody = String.Format("{0}\\{1}_{2}{3,2:D2}{4,2:D2}", opt.DefaultLogDirectory, ReplaceCharForLogFile(settings.Caption), now.Year, now.Month, now.Day); } else { filebody = fmts[0].FormatFileName(opt.DefaultLogDirectory, param, settings); } int n = 1; do { string filename; if (n == 1) { filename = String.Format("{0}.log", filebody); } else { filename = String.Format("{0}_{1}.log", filebody, n); } if (!File.Exists(filename)) { return(filename); } else { n++; } } while (true); }
public void FillCorrespondingDestination(Type adapter, string destination, out ITerminalParameter parameter, out ITerminalSettings settings) { Debug.WriteLineIf(DebugOpt.MRU, "FillCorrespondingDestination"); List <ITerminalParameter> l = new List <ITerminalParameter>(); foreach (MRUItem item in _data) { ITerminalParameter tp = item.TerminalParameter; if (tp.GetAdapter(adapter) != null) { if (CheckDestination(item.TerminalParameter, destination)) //見つかった { parameter = item.TerminalParameter; settings = item.TerminalSettings; return; } } } parameter = null; settings = null; }
/// <summary> /// ターミナルセッションInvoke /// </summary> /// <param name="tp">ターミナルパラメータ</param> /// <param name="ts">ターミナルセッティング</param> private static ITerminalSession InvokeOpenSessionOrNull(ITerminalParameter tp, ITerminalSettings ts) { try { ITerminalSessionsService ss = ConnectProfilePlugin.Instance.TerminalSessionsService; ITerminalSession newsession = ss.TerminalSessionStartCommand.StartTerminalSession(ConnectProfilePlugin.Instance.WindowManager.ActiveWindow, tp, ts); return (newsession == null) ? null : newsession; } catch (Exception ex) { Poderosa.RuntimeUtil.ReportException(ex); return null; } }
public override bool UIEquals(ITerminalParameter param) { ISSHLoginParameter ssh = (ISSHLoginParameter)param.GetAdapter(typeof(ISSHLoginParameter)); return ssh != null && base.UIEquals(param) && _account == ssh.Account; //プロトコルが違うだけでは同一視してしまう }
protected ITerminalOutput _terminalOutput; //派生クラスではこれをセットする #endregion Fields #region Constructors protected TerminalConnection(ITerminalParameter p) { _destination = p; _stats = new ConnectionStats(); }
public TerminalInitializeInfo(IAbstractTerminalHost session, ITerminalParameter param) { _session = session; _param = param; _initialWidth = param.InitialWidth; _initialHeight = param.InitialHeight; }
public bool IsSupporting(ITerminalParameter param, ITerminalSettings settings) { ICygwinParameter cygwin = (ICygwinParameter)param.GetAdapter(typeof(ICygwinParameter)); return cygwin != null; }
public ITerminalConnection OpenConnection(IPoderosaMainWindow owner, ITerminalParameter destination, ITerminalSettings settings) { //NOTE 同時接続数チェックあたりあってもいい ITerminalConnectionFactory[] fs = (ITerminalConnectionFactory[])TerminalSessionsPlugin.Instance.PoderosaWorld.PluginManager.FindExtensionPoint(TerminalSessionsPlugin.TERMINAL_CONNECTION_FACTORY_ID).GetExtensions(); //後に登録されたやつを優先するため、逆順に舐める for (int i = fs.Length - 1; i >= 0; i--) { ITerminalConnectionFactory f = fs[i]; if (f.IsSupporting(destination, settings)) { return f.EstablishConnection(owner, destination, settings); } } throw new ArgumentException("Failed to make an ITerminalConnection using extension point."); //ましなエラーメッセージ }
private static ITerminalSession OpenSessionOrNull(ITerminalParameter tp, ITerminalSettings ts) { try { ITerminalSessionsService ss = MacroPlugin.Instance.TerminalSessionsService; ITerminalSession newsession = ss.TerminalSessionStartCommand.StartTerminalSession(MacroPlugin.Instance.WindowManager.ActiveWindow, tp, ts); if (newsession == null) return null; MacroPlugin.Instance.MacroManager.CurrentExecutor.AddRuntimeSession(newsession); return newsession; } catch (Exception ex) { RuntimeUtil.ReportException(ex); return null; } }
public abstract bool UIEquals(ITerminalParameter param);
public bool IsSupporting(ITerminalParameter param, ITerminalSettings settings) { SerialTerminalParam sp = param as SerialTerminalParam; SerialTerminalSettings ts = settings as SerialTerminalSettings; return sp != null && ts != null; }
public void OnSucceeded(ITerminalParameter param) { }
public bool UIEquals(ITerminalParameter t) { return t is TerminalParameter; }
public ConnectionParameterCollectionImpl(ITerminalSession session) { if (session != null && session.TerminalConnection != null) termialParameter = session.TerminalConnection.Destination; else termialParameter = null; if (session != null) termialSettings = session.TerminalSettings; else termialSettings = null; List<string> names = new List<string>(); foreach (object obj in new object[] { termialParameter, termialSettings }) { if (obj != null) { foreach (PropertyInfo prop in obj.GetType().GetProperties(PROPERTY_BINDING_FLAGS)) { if (!prop.CanRead || prop.GetIndexParameters().Length > 0) continue; object[] attribs = prop.GetCustomAttributes(typeof(MacroConnectionParameterAttribute), true); if (attribs.Length > 0) names.Add(prop.Name); } } } names.Sort(); names.TrimExcess(); paramNames = names; }
public MockTerminalConnection(string terminalType, MockSocket mockSocket) { _param = new TerminalParameter(); _param.SetTerminalName(terminalType); _mockSocket = mockSocket; }
public override bool UIEquals(ITerminalParameter param) { return param is LocalShellParameter; //Cygwinは全部同一視 }
public ITerminalConnection EstablishConnection(IPoderosaMainWindow window, ITerminalParameter destination, ITerminalSettings settings) { ISSHLoginParameter ssh = (ISSHLoginParameter)destination.GetAdapter(typeof(ISSHLoginParameter)); if (ssh.LetUserInputPassword && ssh.AuthenticationType != Granados.AuthenticationType.KeyboardInteractive) { //ダイアログで入力を促して接続 SSHShortcutLoginDialog dlg = new SSHShortcutLoginDialog(window, ssh, settings); if (dlg.ShowDialog(window.AsForm()) == DialogResult.OK) { ITerminalConnection con = dlg.Result; AdjustCaptionAndText(settings, ((ITCPParameter)con.Destination.GetAdapter(typeof(ITCPParameter))).Destination, StartCommandIcon.NewConnection); return con; } else return null; } else { //主にReproduceやマクロ。設定済みのパスワードで接続 IProtocolService protocolservice = TerminalSessionsPlugin.Instance.ProtocolService; ISynchronizedConnector conn = protocolservice.CreateFormBasedSynchronozedConnector(window); IInterruptable r = protocolservice.AsyncSSHConnect(conn.InterruptableConnectorClient, ssh); AdjustCaptionAndText(settings, ((ITCPParameter)destination.GetAdapter(typeof(ITCPParameter))).Destination, StartCommandIcon.NewConnection); return conn.WaitConnection(r, TerminalSessionsPlugin.Instance.TerminalSessionOptions.TerminalEstablishTimeout); //時間? } }
public override bool UIEquals(ITerminalParameter t) { return t is EmptyTerminalParameter; }
public ShortcutFileContent(ITerminalSettings settings, ITerminalParameter param) { _settings = settings; _param = param; }
public bool IsSupporting(ITerminalParameter param, ITerminalSettings settings) { ITCPParameter tcp = (ITCPParameter)param.GetAdapter(typeof(ITCPParameter)); ISSHLoginParameter ssh = (ISSHLoginParameter)param.GetAdapter(typeof(ISSHLoginParameter)); return tcp != null && ssh == null; //SSHならSSHを使う。 }
public bool IsSupporting(ITerminalParameter destination, ITerminalSettings settings) { ISSHLoginParameter ssh = (ISSHLoginParameter)destination.GetAdapter(typeof(ISSHLoginParameter)); return ssh != null; }
public bool UIEquals(ITerminalParameter param) { SerialTerminalParam tp = param as SerialTerminalParam; return tp != null && _portName == tp.PortName; }
protected override ITerminalParameter PrepareTerminalParameter() { _param = ValidateContent(); return _param; }
//Parameterからスタートするタイプ 今はtargetはwindow強制だがViewでも可能にしたい public ITerminalSession StartTerminalSession(ICommandTarget target, ITerminalParameter destination, ITerminalSettings settings) { IPoderosaMainWindow window = (IPoderosaMainWindow)target.GetAdapter(typeof(IPoderosaMainWindow)); if (window == null) { IPoderosaView view = (IPoderosaView)target.GetAdapter(typeof(IPoderosaView)); window = (IPoderosaMainWindow)view.ParentForm.GetAdapter(typeof(IPoderosaMainWindow)); } Debug.Assert(window != null); ITerminalConnection connection = OpenConnection(window, destination, settings); if (connection == null) return null; return StartTerminalSession(target, connection, settings); }
public ITerminalConnection EstablishConnection(IPoderosaMainWindow window, ITerminalParameter destination, ITerminalSettings settings) { ITCPParameter tcp = (ITCPParameter)destination.GetAdapter(typeof(ITCPParameter)); IProtocolService ps = TerminalSessionsPlugin.Instance.ProtocolService; ISynchronizedConnector sc = ps.CreateFormBasedSynchronozedConnector(window); IInterruptable t = ps.AsyncTelnetConnect(sc.InterruptableConnectorClient, tcp); ITerminalConnection con = sc.WaitConnection(t, TerminalSessionsPlugin.Instance.TerminalSessionOptions.TerminalEstablishTimeout); AdjustCaptionAndText(settings, tcp.Destination, StartCommandIcon.NewConnection); return con; }
public RawTerminalConnection(IPoderosaSocket socket, ITerminalParameter tp) { _socket = socket; _terminalParameter = tp; }
public override bool UIEquals(ITerminalParameter param) { ITCPParameter tcp = (ITCPParameter)param.GetAdapter(typeof(ITCPParameter)); return tcp != null && _destination == tcp.Destination && _port == tcp.Port; }
//IConnectionResultEventHandler public void OnSucceeded(ITerminalParameter param) { _successCount++; Debug.Assert(param != null); }
public void BeforeAsyncConnect(ITerminalParameter tp) { ISSHLoginParameter ssh = (ISSHLoginParameter)tp.GetAdapter(typeof(ISSHLoginParameter)); if (ssh == null) return; //SSH以外は興味なし if (ssh.Method == SSHProtocol.SSH2 && _originalOptions.EnableKeyAgent) { ssh.AgentForward = this; //自分をハンドルするように設定 } }
public void OnFailed(ITerminalParameter param, string msg) { _failCount++; Debug.Assert(param != null); Debug.WriteLine(msg); }
public void OnFailed(ITerminalParameter param, string msg) { }