Example #1
0
        //CR NUL -> CR •ÏŠ·‚¨‚æ‚Ñ IAC‚©‚ç‚Í‚¶‚Ü‚éƒV[ƒPƒ“ƒX‚̏ˆ—
        private void ProcessBuffer(ByteDataFragment data)
        {
            int limit  = data.Offset + data.Length;
            int offset = data.Offset;

            byte[] buf = data.Buffer;
            //Debug.WriteLine(String.Format("Telnet len={0}, proc={1}", data.Length, _negotiator.InProcessing));

            while (offset < limit)
            {
                while (offset < limit && _negotiator.InProcessing)
                {
                    if (_negotiator.Process(buf[offset++]) == TelnetNegotiator.ProcessResult.REAL_0xFF)
                    {
                        _callback.OnReception(_localdata.Set(buf, offset - 1, 1));
                    }
                }

                int delim = offset;
                while (delim < limit)
                {
                    byte b = buf[delim];
                    if (b == 0xFF)
                    {
                        _negotiator.StartNegotiate();
                        break;
                    }
                    if (b == 0 && delim - 1 >= 0 && buf[delim - 1] == 0x0D)
                    {
                        break;                                                              //CR NULƒTƒ|[ƒg
                    }
                    delim++;
                }

                if (delim > offset)
                {
                    _callback.OnReception(_localdata.Set(buf, offset, delim - offset));                            //delim‚ÌŽè‘O‚܂ŏˆ—
                }
                offset = delim + 1;
            }
        }