protected override void Negotiate()
        {
            TelnetNegotiator         neg = new TelnetNegotiator(_param, _size.Width, _size.Height);
            TelnetTerminalConnection r   = new TelnetTerminalConnection(_param, neg, new PlainGuevaraSocket(_socket), _size.Width, _size.Height);

            r.UsingSocks = _socks != null;
            r.SetServerInfo(_param.Host, this.IPAddress);
            _result = new ConnectionTag(r);
        }
Beispiel #2
0
            public ConnectionTag Connect()
            {
                lock (_lockObject) {
                    if (_localPort == 0)
                    {
                        PrepareListener();
                    }

                    PrepareEnv(_param);
                }

                string cygtermPath    = "cygterm\\" + (IsCygwin(_param)? "cygterm.exe" : "sfuterm.exe");
                string connectionName = IsCygwin(_param)? "Cygwin" : "SFU";

                string           args = String.Format("-p {0} -v HOME=\"{1}\" -s \"{2}\"", _localPort, _param.Home, _param.Shell);
                ProcessStartInfo psi  = new ProcessStartInfo(cygtermPath, args);

                psi.CreateNoWindow  = true;
                psi.ErrorDialog     = true;
                psi.UseShellExecute = false;
                psi.WindowStyle     = ProcessWindowStyle.Hidden;

                _process = Process.Start(psi);
                if (_interrupted)
                {
                    return(null);
                }
                Socket sock = _listener.Accept();

                if (_interrupted)
                {
                    return(null);
                }

                Size                     sz  = GEnv.Frame.TerminalSizeForNextConnection;
                TelnetNegotiator         neg = new TelnetNegotiator(_param, sz.Width, sz.Height);
                TelnetTerminalConnection r   = new TelnetTerminalConnection(_param, neg, new PlainGuevaraSocket(sock), sz.Width, sz.Height);

                r.UsingSocks = false;
                r.SetServerInfo(connectionName, null);
                return(new ConnectionTag(r));
            }
Beispiel #3
0
        public void SuccessfullyExit(ITerminalConnection connection)
        {
            ITerminalSettings terminalSettings = PoderosaTerminalEmulatorService.CreateDefaultTerminalSettings(Connection.DisplayName, null);

            TerminalSession session       = new TerminalSession(connection, terminalSettings);
            SessionHost     sessionHost   = new SessionHost(PoderosaSessionManagerPlugin, session);
            TerminalView    terminalView  = new TerminalView(null, _terminal);
            RenderProfile   renderProfile = new RenderProfile(_terminal.GetRenderProfile());

            renderProfile.BackColor = Connection.BackgroundColor;
            renderProfile.ForeColor = Connection.TextColor;
            renderProfile.FontName  = Connection.FontFamily;
            renderProfile.FontSize  = Connection.FontSize;

            session.TerminalSettings.BeginUpdate();
            session.TerminalSettings.Encoding      = Connection.Encoding;
            session.TerminalSettings.RenderProfile = renderProfile;
            session.TerminalSettings.EndUpdate();

            _telnetConnection = (TelnetTerminalConnection)connection;

            Invoke(
                new Action(
                    () =>
            {
                _terminal.Attach(session);

                session.InternalStart(sessionHost);
                session.InternalAttachView(sessionHost.DocumentAt(0), terminalView);

                _telnetConnection.ConnectionEventReceiver.NormalTermination   += ConnectionEventReceiver_NormalTermination;
                _telnetConnection.ConnectionEventReceiver.AbnormalTermination += ConnectionEventReceiver_AbnormalTermination;

                ParentForm.Closing += ParentForm_OnClosing;
                connection.TerminalOutput.Resize(session.Terminal.GetDocument().TerminalWidth, session.Terminal.GetDocument().TerminalHeight);

                OnConnected(_terminal, null);
            }));
        }