Ejemplo n.º 1
0
        public static List <TelnetPacket> Parse(byte[] data, out byte[] remaining)
        {
            List <TelnetPacket> list = new List <TelnetPacket>();

            if (BufUtil.CountDelim(data, IAC) > 0)
            {
                List <byte[]> seq = BufUtil.SplitIAC(data, IAC, out byte[] unparsed);
                remaining = unparsed;
                seq.ForEach(s =>
                {
                    switch (s[1])
                    {
                    case Command.DO:
                    case Command.DONT:
                    case Command.WILL:
                    case Command.WONT:
                        list.Add(new TelnetPacket {
                            Command = s[1], Option = s[2]
                        });
                        break;

                    case Command.SB:
                        byte[] payload = new byte[s.Length - 3];
                        Buffer.BlockCopy(s, 3, payload, 0, payload.Length);
                        list.Add(new TelnetPacket {
                            Command = s[1], Option = s[2], Payload = payload
                        });
                        break;

                    case Command.SE:
                        // Ignore sub-negotiation end.
                        break;
                    }
                });
            }
            else
            {
                remaining = data;
            }
            return(list);
        }