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 }); } }
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); }