コード例 #1
0
ファイル: SerialConnection.cs プロジェクト: FNKGino/poderosa
        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);
        }
コード例 #2
0
        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));
        }
コード例 #3
0
ファイル: Connector.cs プロジェクト: yoshikixxxx/poderosa
        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;
        }
コード例 #4
0
        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));
        }
コード例 #5
0
        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)));
        }
コード例 #6
0
        /// <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);
        }
コード例 #7
0
 /// <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);
     }
 }
コード例 #8
0
        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();
        }
コード例 #9
0
ファイル: Logger.cs プロジェクト: hanamiche/poderosa
        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)));
            }
        }
コード例 #10
0
ファイル: ConsoleMain.cs プロジェクト: EHerzog76/THB-Terminal
        //“à•”‚Å‚Í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);
                }
            }
        }
コード例 #11
0
ファイル: KeyAgent.cs プロジェクト: takano32/poderosa
        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; //自分をハンドルするように設定
            }
        }
コード例 #12
0
ファイル: ConsoleMain.cs プロジェクト: EHerzog76/THB-Terminal
        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);
                     * }   */
            }
        }
コード例 #13
0
ファイル: ProtocolsPlugin.cs プロジェクト: sunxking/poderosa
        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);
                }
            }
        }
コード例 #14
0
        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; //自分をハンドルするように設定
            }
        }
コード例 #15
0
        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"));
            }
        }
コード例 #16
0
        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)));
        }
コード例 #17
0
ファイル: MRUPlugin.cs プロジェクト: yoshikixxxx/poderosa
        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; //これで遅延する
        }
コード例 #18
0
ファイル: Reproduce.cs プロジェクト: zhchlmm/EasyConnect
        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);
        }
コード例 #19
0
        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."); //ましなエラーメッセージ
        }
コード例 #20
0
        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));
        }
コード例 #21
0
        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;
        }
コード例 #22
0
 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;
     }));
 }
コード例 #23
0
ファイル: MRUPlugin.cs プロジェクト: yoshikixxxx/poderosa
        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);
            }
        }
コード例 #24
0
        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);
            }
        }
コード例 #25
0
        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);
        }
コード例 #26
0
        //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));
        }
コード例 #27
0
        //拡張ポイントから取ったインタフェースを使って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);
        }
コード例 #28
0
        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));
        }
コード例 #29
0
ファイル: Reproduce.cs プロジェクト: zhchlmm/EasyConnect
        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);
        }
コード例 #30
0
ファイル: Logger.cs プロジェクト: hanamiche/poderosa
        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);
        }
コード例 #31
0
ファイル: MRUPlugin.cs プロジェクト: yoshikixxxx/poderosa
        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;
        }
コード例 #32
0
 /// <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;
     }
 }
コード例 #33
0
 public override bool UIEquals(ITerminalParameter param) {
     ISSHLoginParameter ssh = (ISSHLoginParameter)param.GetAdapter(typeof(ISSHLoginParameter));
     return ssh != null && base.UIEquals(param) && _account == ssh.Account; //プロトコルが違うだけでは同一視してしまう
 }
コード例 #34
0
        protected ITerminalOutput _terminalOutput; //派生クラスではこれをセットする

        #endregion Fields

        #region Constructors

        protected TerminalConnection(ITerminalParameter p)
        {
            _destination = p;
            _stats = new ConnectionStats();
        }
コード例 #35
0
 public TerminalInitializeInfo(IAbstractTerminalHost session, ITerminalParameter param)
 {
     _session = session;
     _param = param;
     _initialWidth = param.InitialWidth;
     _initialHeight = param.InitialHeight;
 }
コード例 #36
0
ファイル: StartCommands.cs プロジェクト: Ricordanza/poderosa
 public bool IsSupporting(ITerminalParameter param, ITerminalSettings settings) {
     ICygwinParameter cygwin = (ICygwinParameter)param.GetAdapter(typeof(ICygwinParameter));
     return cygwin != null;
 }
コード例 #37
0
ファイル: StartCommands.cs プロジェクト: Ricordanza/poderosa
        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."); //ましなエラーメッセージ
        }
コード例 #38
0
ファイル: MacroExec.cs プロジェクト: FNKGino/poderosa
        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;
            }
        }
コード例 #39
0
 public abstract bool UIEquals(ITerminalParameter param);
コード例 #40
0
ファイル: SerialConnection.cs プロジェクト: FNKGino/poderosa
 public bool IsSupporting(ITerminalParameter param, ITerminalSettings settings)
 {
     SerialTerminalParam sp = param as SerialTerminalParam;
     SerialTerminalSettings ts = settings as SerialTerminalSettings;
     return sp != null && ts != null;
 }
コード例 #41
0
ファイル: KeyAgent.cs プロジェクト: Ricordanza/poderosa
 public void OnSucceeded(ITerminalParameter param) {
 }
コード例 #42
0
ファイル: TerminalParameter.cs プロジェクト: FNKGino/poderosa
 public bool UIEquals(ITerminalParameter t)
 {
     return t is TerminalParameter;
 }
コード例 #43
0
ファイル: MacroEnv.cs プロジェクト: Ricordanza/poderosa
        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;
        }
コード例 #44
0
 public MockTerminalConnection(string terminalType, MockSocket mockSocket) {
     _param = new TerminalParameter();
     _param.SetTerminalName(terminalType);
     _mockSocket = mockSocket;
 }
コード例 #45
0
 public override bool UIEquals(ITerminalParameter param) {
     return param is LocalShellParameter; //Cygwinは全部同一視
 }
コード例 #46
0
ファイル: StartCommands.cs プロジェクト: Ricordanza/poderosa
 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); //時間?
     }
 }
コード例 #47
0
 public override bool UIEquals(ITerminalParameter t) {
     return t is EmptyTerminalParameter;
 }
コード例 #48
0
ファイル: ShortcutFile.cs プロジェクト: FNKGino/poderosa
 public ShortcutFileContent(ITerminalSettings settings, ITerminalParameter param)
 {
     _settings = settings;
     _param = param;
 }
コード例 #49
0
ファイル: StartCommands.cs プロジェクト: Ricordanza/poderosa
 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を使う。
 }
コード例 #50
0
ファイル: StartCommands.cs プロジェクト: Ricordanza/poderosa
 public bool IsSupporting(ITerminalParameter destination, ITerminalSettings settings) {
     ISSHLoginParameter ssh = (ISSHLoginParameter)destination.GetAdapter(typeof(ISSHLoginParameter));
     return ssh != null;
 }
コード例 #51
0
ファイル: SerialSettings.cs プロジェクト: Ricordanza/poderosa
 public bool UIEquals(ITerminalParameter param) {
     SerialTerminalParam tp = param as SerialTerminalParam;
     return tp != null && _portName == tp.PortName;
 }
コード例 #52
0
 protected override ITerminalParameter PrepareTerminalParameter() {
     _param = ValidateContent();
     return _param;
 }
コード例 #53
0
ファイル: StartCommands.cs プロジェクト: Ricordanza/poderosa
        //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);

        }
コード例 #54
0
ファイル: StartCommands.cs プロジェクト: Ricordanza/poderosa
            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;
            }
コード例 #55
0
 public RawTerminalConnection(IPoderosaSocket socket, ITerminalParameter tp)
 {
     _socket = socket;
     _terminalParameter = tp;
 }
コード例 #56
0
 public override bool UIEquals(ITerminalParameter param) {
     ITCPParameter tcp = (ITCPParameter)param.GetAdapter(typeof(ITCPParameter));
     return tcp != null && _destination == tcp.Destination && _port == tcp.Port;
 }
コード例 #57
0
 //IConnectionResultEventHandler
 public void OnSucceeded(ITerminalParameter param) {
     _successCount++;
     Debug.Assert(param != null);
 }
コード例 #58
0
ファイル: KeyAgent.cs プロジェクト: Ricordanza/poderosa
        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; //自分をハンドルするように設定
            }
        }
コード例 #59
0
 public void OnFailed(ITerminalParameter param, string msg) {
     _failCount++;
     Debug.Assert(param != null);
     Debug.WriteLine(msg);
 }
コード例 #60
0
ファイル: KeyAgent.cs プロジェクト: Ricordanza/poderosa
 public void OnFailed(ITerminalParameter param, string msg) {
 }