Example #1
0
        private void Process(byte b)
        {
            switch (_parseState)
            {
            case ParseState.Normal when b == IAC:
                _parseState = ParseState.FoundIAC;
                break;

            case ParseState.Normal:
                _memoryStream.WriteByte(b);
                break;

            case ParseState.FoundIAC when b == SB:
                _parseState = ParseState.SBStart;
                break;

            case ParseState.FoundIAC when b == (byte)EnumIacVerbs.WILL:
            case ParseState.FoundIAC when b == (byte)EnumIacVerbs.WONT:
            case ParseState.FoundIAC when b == (byte)EnumIacVerbs.DO:
            case ParseState.FoundIAC when b == (byte)EnumIacVerbs.DONT:
                _currentVerb = (EnumIacVerbs)b;
                _parseState  = ParseState.IACCommand;
                break;

            case ParseState.FoundIAC when b == IAC:
                // special escape sequence
                _memoryStream.WriteByte(b);
                break;

            case ParseState.FoundIAC:
                _parseState = ParseState.Normal;
                break;

            case ParseState.IACCommand:
                IacVerbReceived?.Invoke(this, new IacVerbReceivedEventArgs()
                {
                    Verb   = _currentVerb,
                    Option = (EnumIacOptions)b
                });
                _parseState = ParseState.Normal;
                break;

            case ParseState.SBStart:
                _parseState = ParseState.SBValue;
                break;

            case ParseState.SBValue when b == IAC:
                _parseState = ParseState.SBIAC;
                break;

            case ParseState.SBIAC when b == SE:
                _parseState = ParseState.Normal;
                break;

            case ParseState.SBIAC:
                _parseState = ParseState.SBValue;
                break;
            }
        }
Example #2
0
 public IacResponse(EnumIacVerbs verb, EnumIacOptions option)
 {
     Verb   = verb;
     Option = option;
 }