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; }
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; }
/* * 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; }
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); }
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); }
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); }
public void Write(TelnetCode code, TelnetOption opt) { _strm.WriteByte((byte)TelnetCode.IAC); _strm.WriteByte((byte)code); _strm.WriteByte((byte)opt); }
public void StartNegotiate() { _state = TelnetCode.IAC; }
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; }
/* 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; }
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; }
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; }