Example #1
0
        public static bool UnpackBytes(ReadBuffer rb, ref byte[] value)
        {
            byte t = rb.MoveNext();

            if (t == 0xc0)
            {
                value = null;
                return(true);
            }
            switch (t)
            {
            case 0xc4:    // bin8
            {
                if (rb.Left() < 1)
                {
                    Console.WriteLine("UnpackBytes bin8 length failed");
                    return(false);
                }
                byte slen = rb.MoveNext();
                if (rb.Left() < slen)
                {
                    Console.WriteLine("UnpackBytes bin failed");
                    return(false);
                }
                value = rb.CopyBytes(slen);
                rb.MoveOffset(slen);
                break;
            }

            case 0xc5:    // bin16
            {
                ushort slen = 0;
                if (rb.Left() < 2)
                {
                    Console.WriteLine("UnpackBytes bin16 length failed");
                    return(false);
                }
                ReadNumber(rb.Data(), rb.Offset(), ref slen);
                rb.MoveOffset(2);
                if (rb.Left() < slen)
                {
                    Console.WriteLine("UnpackBytes bin16 failed");
                    return(false);
                }
                value = rb.CopyBytes(slen);
                rb.MoveOffset(slen);
                break;
            }

            case 0xc6:    // bin32
            {
                uint slen = 0;
                if (rb.Left() < 4)
                {
                    Console.WriteLine("UnpackBytes bin32 length failed");
                    return(false);
                }
                ReadNumber(rb.Data(), rb.Offset(), ref slen);
                rb.MoveOffset(4);
                if (rb.Left() < slen)
                {
                    Console.WriteLine("UnpackBytes bin32 failed");
                    return(false);
                }
                value = rb.CopyBytes((int)slen);
                rb.MoveOffset((int)slen);
                break;
            }

            default:
            {
                Console.WriteLine("UnpackBytes unknown type " + t.ToString());
                return(false);
            }
            }
            return(true);
        }