Example #1
0
            private DecodResult RealDeocde(byte[] data, int offset, int size)
            {
                int num3 = 0;

                for (int i = 0; i < ((size > 6) ? 7 : size); i++)
                {
                    if (data[i + offset] == 13 && data[i + offset + 1] == 10)
                    {
                        num3 = i;
                        break;
                    }
                }
                if (num3 < 1)
                {
                    DecodResult decodResult = new DecodResult
                    {
                        Info = DecodState.Err
                    };
                    BadFormat = (true);
                    return(decodResult);
                }
                byte[] array2 = new byte[num3];
                Buffer.BlockCopy(data, offset, array2, 0, array2.Length);
                int num4;

                try
                {
                    num4 = HexCharToInt(array2);
                }
                catch
                {
                    DecodResult decodResult = new DecodResult
                    {
                        Info = DecodState.Err
                    };
                    BadFormat = (true);
                    var result = decodResult;
                    return(result);
                }
                if (num4 == 0)
                {
                    if (data[offset + size - 2] == 13 && data[offset + size - 1] == 10)
                    {
                        IsComplete = (true);
                        return(new DecodResult
                        {
                            Info = DecodState.Complete
                        });
                    }
                    return(new DecodResult
                    {
                        Info = DecodState.WaitNext
                    });
                }
                else
                {
                    if (num3 + 2 + num4 + 2 > size)
                    {
                        return(new DecodResult
                        {
                            Info = DecodState.WaitNext
                        });
                    }
                    int num5 = num3 + 2 + num4 + offset;
                    if (data[num5] != 13 && data[num5 + 1] != 10)
                    {
                        DecodResult decodResult = default(DecodResult);
                        BadFormat        = (true);
                        decodResult.Info = DecodState.Err;
                        return(decodResult);
                    }
                    byte[] array3 = new byte[num4];
                    Buffer.BlockCopy(data, offset + num3 + 2, array3, 0, array3.Length);
                    int chunkedLen = num3 + 2 + num4 + 2;
                    return(new DecodResult
                    {
                        Info = DecodState.Ok,
                        Data = array3,
                        ChunkedLen = chunkedLen
                    });
                }
            }
Example #2
0
            public byte[] Deocde(byte[] array, int num, int num2)
            {
                if (IsComplete || BadFormat)
                {
                    return(null);
                }

                int num4;

                if (num2 + ((_lastBytes == null) ? 0 : _lastBytes.Length) >= 5)
                {
                    byte[] array2 = array;
                    if (_lastBytes != null)
                    {
                        array2 = new byte[_lastBytes.Length + num2];
                        Buffer.BlockCopy(_lastBytes, 0, array2, 0, _lastBytes.Length);
                        Buffer.BlockCopy(array, num, array2, _lastBytes.Length, num2);
                        _lastBytes = null;
                        num        = 0;
                        num2       = array2.Length;
                    }
                    byte[] array3 = null;
                    while (true)
                    {
                        DecodResult decodResult = RealDeocde(array2, num, num2);
                        if (decodResult.Info == DecodState.Ok)
                        {
                            int num3 = decodResult.Data.Length;
                            if (array3 == null)
                            {
                                array3 = new byte[num3];
                                Buffer.BlockCopy(decodResult.Data, 0, array3, 0, num3);
                            }
                            else
                            {
                                num4 = array3.Length;
                                Array.Resize <byte>(ref array3, num4 + num3);
                                Buffer.BlockCopy(decodResult.Data, 0, array3, num4, num3);
                            }
                            num  += decodResult.ChunkedLen;
                            num2 -= decodResult.ChunkedLen;
                        }
                        else
                        {
                            if (decodResult.Info == DecodState.Complete)
                            {
                                break;
                            }
                            if (decodResult.Info == DecodState.Err)
                            {
                                goto Block_9;
                            }
                            if (decodResult.Info == DecodState.WaitNext)
                            {
                                goto Block_10;
                            }
                        }
                    }
                    return(array3);

Block_9:
                    return(null);

Block_10:
                    _lastBytes = new byte[num2];
                    Buffer.BlockCopy(array2, num, _lastBytes, 0, num2);
                    return(array3);
                }
                if (_lastBytes == null)
                {
                    _lastBytes = new byte[num2];
                    Buffer.BlockCopy(array, num, _lastBytes, 0, num2);
                    return(null);
                }
                num4 = _lastBytes.Length;
                Array.Resize <byte>(ref _lastBytes, num4 + num2);
                Buffer.BlockCopy(array, num, _lastBytes, num4, num2);
                return(null);
            }