コード例 #1
0
ファイル: Telnet.cs プロジェクト: Ricordanza/poderosa
 public TelnetNegotiator(string terminal_type, int width, int height) {
     Debug.Assert(terminal_type != null);
     _terminalType = terminal_type;
     _width = width;
     _height = height;
     _warnings = new List<string>();
     _state = TelnetCode.NA;
     _sequenceBuffer = new MemoryStream();
     _optionWriter = new TelnetOptionWriter();
     _defaultOptionSent = false;
 }
コード例 #2
0
 public TelnetNegotiator(string terminal_type, int width, int height)
 {
     Debug.Assert(terminal_type != null);
     _terminalType      = terminal_type;
     _width             = width;
     _height            = height;
     _warnings          = new List <string>();
     _state             = TelnetCode.NA;
     _sequenceBuffer    = new MemoryStream();
     _optionWriter      = new TelnetOptionWriter();
     _defaultOptionSent = false;
 }
コード例 #3
0
        /*
         * public TelnetCode[] RefusedOptions {
         *      get {
         *              return (TelnetCode[])_refusedOptions.ToArray(typeof(TelnetCode));
         *      }
         * }
         */

        public TelnetNegotiator(TerminalParam param, int width, int height)
        {
            _param             = param;
            _refusedOptions    = new ArrayList();
            _width             = width;
            _height            = height;
            _warnings          = new ArrayList();
            _state             = TelnetCode.NA;
            _sequenceBuffer    = new MemoryStream();
            _optionWriter      = new TelnetOptionWriter();
            _defaultOptionSent = false;
        }
コード例 #4
0
        public ProcessResult Process(byte data)
        {
            Debug.Assert(_state != TelnetCode.NA);
            switch (_state)
            {
            case TelnetCode.IAC:
                if (data == (byte)TelnetCode.SB || ((byte)TelnetCode.WILL <= data && data <= (byte)TelnetCode.DONT))
                {
                    _state = (TelnetCode)data;
                }
                else if (data == (byte)TelnetCode.IAC)
                {
                    _state = TelnetCode.NA;
                    return(ProcessResult.REAL_0xFF);
                }
                else
                {
                    _state = TelnetCode.NA;
                }
                break;

            case TelnetCode.SB:
                if (data != (byte)TelnetCode.SE && data != (byte)TelnetOption.NAWS)                    //IAC SB 0x1F ‚Æ‚«‚Ä‚»‚ê‚Á‚«‚èA‚Æ‚¢‚¤ƒP[ƒX‚ª‚ ‚Á‚½BƒzƒXƒg‘¤‚ÌŽd—lˆá”½‚̂悤‚ÉŒ©‚¦‚邪APoderosa‚ª‰½‚©‚̉ž“š‚ð•Ô‚·‚킯‚Å‚Í‚È‚¢‚Ì‚Å‚±‚ê‚ʼnñ”ð
                {
                    _sequenceBuffer.WriteByte(data);
                }
                else
                {
                    ProcessSequence(_sequenceBuffer.ToArray());
                    _state = TelnetCode.NA;
                    _sequenceBuffer.SetLength(0);
                }
                break;

            case TelnetCode.DO:
            case TelnetCode.DONT:
            case TelnetCode.WILL:
            case TelnetCode.WONT:
                ProcessOptionRequest(data);
                _state = TelnetCode.NA;
                break;
            }

            return(ProcessResult.NOP);
        }
コード例 #5
0
        public ProcessResult Process(byte data)
        {
            Debug.Assert(_state != TelnetCode.NA);
            switch (_state)
            {
            case TelnetCode.IAC:
                if (data == (byte)TelnetCode.SB || ((byte)TelnetCode.WILL <= data && data <= (byte)TelnetCode.DONT))
                {
                    _state = (TelnetCode)data;
                }
                else if (data == (byte)TelnetCode.IAC)
                {
                    _state = TelnetCode.NA;
                    return(ProcessResult.REAL_0xFF);
                }
                else
                {
                    _state = TelnetCode.NA;
                }
                break;

            case TelnetCode.SB:
                if (data != (byte)TelnetCode.SE && data != (byte)TelnetOption.NAWS)     //IAC SB 0x1F ときてそれっきり、というケースがあった。ホスト側の仕様違反のように見えるが、Poderosaが何かの応答を返すわけではないのでこれで回避
                {
                    _sequenceBuffer.WriteByte(data);
                }
                else
                {
                    ProcessSequence(_sequenceBuffer.ToArray());
                    _state = TelnetCode.NA;
                    _sequenceBuffer.SetLength(0);
                }
                break;

            case TelnetCode.DO:
            case TelnetCode.DONT:
            case TelnetCode.WILL:
            case TelnetCode.WONT:
                ProcessOptionRequest(data);
                _state = TelnetCode.NA;
                break;
            }

            return(ProcessResult.NOP);
        }
コード例 #6
0
        public ProcessResult Process(byte data)
        {
            Debug.Assert(_state != TelnetCode.NA);
            switch (_state)
            {
            case TelnetCode.IAC:
                if (data == (byte)TelnetCode.SB || ((byte)TelnetCode.WILL <= data && data <= (byte)TelnetCode.DONT))
                {
                    _state = (TelnetCode)data;
                }
                else if (data == (byte)TelnetCode.IAC)
                {
                    _state = TelnetCode.NA;
                    return(ProcessResult.REAL_0xFF);
                }
                else
                {
                    _state = TelnetCode.NA;
                }
                break;

            case TelnetCode.SB:
                if (data != (byte)TelnetCode.SE)
                {
                    _sequenceBuffer.WriteByte(data);
                }
                else
                {
                    ProcessSequence(_sequenceBuffer.ToArray());
                    _state = TelnetCode.NA;
                    _sequenceBuffer.SetLength(0);
                }
                break;

            case TelnetCode.DO:
            case TelnetCode.DONT:
            case TelnetCode.WILL:
            case TelnetCode.WONT:
                ProcessOptionRequest(data);
                _state = TelnetCode.NA;
                break;
            }

            return(ProcessResult.NOP);
        }
コード例 #7
0
ファイル: Telnet.cs プロジェクト: FNKGino/poderosa
 public void Write(TelnetCode code, TelnetOption opt)
 {
     _strm.WriteByte((byte)TelnetCode.IAC);
     _strm.WriteByte((byte)code);
     _strm.WriteByte((byte)opt);
 }
コード例 #8
0
ファイル: Telnet.cs プロジェクト: FNKGino/poderosa
 public void StartNegotiate()
 {
     _state = TelnetCode.IAC;
 }
コード例 #9
0
ファイル: Telnet.cs プロジェクト: FNKGino/poderosa
        public ProcessResult Process(byte data)
        {
            Debug.Assert(_state != TelnetCode.NA);
            switch (_state) {
                case TelnetCode.IAC:
                    if (data == (byte)TelnetCode.SB || ((byte)TelnetCode.WILL <= data && data <= (byte)TelnetCode.DONT))
                        _state = (TelnetCode)data;
                    else if (data == (byte)TelnetCode.IAC) {
                        _state = TelnetCode.NA;
                        return ProcessResult.REAL_0xFF;
                    }
                    else
                        _state = TelnetCode.NA;
                    break;
                case TelnetCode.SB:
                    if (data != (byte)TelnetCode.SE && data != (byte)TelnetOption.NAWS) //IAC SB 0x1F ときてそれっきり、というケースがあった。ホスト側の仕様違反のように見えるが、Poderosaが何かの応答を返すわけではないのでこれで回避
                        _sequenceBuffer.WriteByte(data);
                    else {
                        ProcessSequence(_sequenceBuffer.ToArray());
                        _state = TelnetCode.NA;
                        _sequenceBuffer.SetLength(0);
                    }
                    break;
                case TelnetCode.DO:
                case TelnetCode.DONT:
                case TelnetCode.WILL:
                case TelnetCode.WONT:
                    ProcessOptionRequest(data);
                    _state = TelnetCode.NA;
                    break;
            }

            return ProcessResult.NOP;
        }
コード例 #10
0
 public void StartNegotiate()
 {
     _state = TelnetCode.IAC;
 }
コード例 #11
0
 public void Write(TelnetCode code, TelnetOption opt)
 {
     _strm.WriteByte((byte)TelnetCode.IAC);
     _strm.WriteByte((byte)code);
     _strm.WriteByte((byte)opt);
 }
コード例 #12
0
ファイル: Telnet.cs プロジェクト: rfyiamcool/solrex
 /*
 public TelnetCode[] RefusedOptions {
     get {
         return (TelnetCode[])_refusedOptions.ToArray(typeof(TelnetCode));
     }
 }
 */
 public TelnetNegotiator(TerminalParam param, int width, int height)
 {
     _param = param;
     _refusedOptions = new ArrayList();
     _width = width;
     _height = height;
     _warnings = new ArrayList();
     _state = TelnetCode.NA;
     _sequenceBuffer = new MemoryStream();
     _optionWriter = new TelnetOptionWriter();
     _defaultOptionSent = false;
 }
コード例 #13
0
ファイル: Telnet.cs プロジェクト: rfyiamcool/solrex
        public ProcessResult Process(byte data)
        {
            Debug.Assert(_state!=TelnetCode.NA);
            switch(_state) {
                case TelnetCode.IAC:
                    if(data==(byte)TelnetCode.SB || ((byte)TelnetCode.WILL<=data && data<=(byte)TelnetCode.DONT))
                        _state = (TelnetCode)data;
                    else if(data==(byte)TelnetCode.IAC) {
                        _state = TelnetCode.NA;
                        return ProcessResult.REAL_0xFF;
                    }
                    else
                        _state = TelnetCode.NA;
                    break;
                case TelnetCode.SB:
                    if(data!=(byte)TelnetCode.SE)
                        _sequenceBuffer.WriteByte(data);
                    else {
                        ProcessSequence(_sequenceBuffer.ToArray());
                        _state = TelnetCode.NA;
                        _sequenceBuffer.SetLength(0);
                    }
                    break;
                case TelnetCode.DO:
                case TelnetCode.DONT:
                case TelnetCode.WILL:
                case TelnetCode.WONT:
                    ProcessOptionRequest(data);
                    _state = TelnetCode.NA;
                    break;
            }

            return ProcessResult.NOP;
        }
コード例 #14
0
ファイル: Telnet.cs プロジェクト: VirusFree/Poderosa
        public ProcessResult Process(byte data)
        {
            Debug.Assert(_state != TelnetCode.NA);
            switch (_state) {
                case TelnetCode.IAC:
                    if (data == (byte)TelnetCode.SB || ((byte)TelnetCode.WILL <= data && data <= (byte)TelnetCode.DONT))
                        _state = (TelnetCode)data;
                    else if (data == (byte)TelnetCode.IAC) {
                        _state = TelnetCode.NA;
                        return ProcessResult.REAL_0xFF;
                    }
                    else
                        _state = TelnetCode.NA;
                    break;
                case TelnetCode.SB:
                    if (data != (byte)TelnetCode.SE && data != (byte)TelnetOption.NAWS) //IAC SB 0x1F �Ƃ��Ă��������A�Ƃ����P�[�X���������B�z�X�g���̎d�l�ᔽ�̂悤�Ɍ����邪�APoderosa�������̉�����Ԃ��킯�ł͂Ȃ��̂ł���ʼn��
                        _sequenceBuffer.WriteByte(data);
                    else {
                        ProcessSequence(_sequenceBuffer.ToArray());
                        _state = TelnetCode.NA;
                        _sequenceBuffer.SetLength(0);
                    }
                    break;
                case TelnetCode.DO:
                case TelnetCode.DONT:
                case TelnetCode.WILL:
                case TelnetCode.WONT:
                    ProcessOptionRequest(data);
                    _state = TelnetCode.NA;
                    break;
            }

            return ProcessResult.NOP;
        }