Esempio n. 1
0
        // Token: 0x0600159F RID: 5535 RVA: 0x0008016C File Offset: 0x0007E36C
        internal static int CopyStream(Stream source, Stream target, int offset, int count, bool needCrc, out uint crc)
        {
            byte[] array = null;
            int    num   = 0;

            crc = 0U;
            if (count == 0)
            {
                return(0);
            }
            if (count < 0)
            {
                count = int.MaxValue;
            }
            try
            {
                array = StreamHelper.bytesBufferPool.Acquire();
                if (array == null)
                {
                    throw new InvalidOperationException("buffer should never be null.");
                }
                int num2;
                if (source.CanSeek)
                {
                    source.Seek((long)offset, SeekOrigin.Begin);
                }
                else if (offset > 0)
                {
                    do
                    {
                        num2    = source.Read(array, 0, (offset < array.Length) ? offset : array.Length);
                        offset -= num2;
                    }while (num2 > 0 && offset > 0);
                }
                do
                {
                    num2 = source.Read(array, 0, (count < array.Length) ? count : array.Length);
                    if (num2 != 0)
                    {
                        target.Write(array, 0, num2);
                        if (needCrc)
                        {
                            crc = StreamHelper.UpdateCrc32(crc, array, 0, num2);
                        }
                        AirSyncDiagnostics.TraceBinaryData(ExTraceGlobals.RawBodyBytesTracer, null, array, num2);
                        count -= num2;
                        num   += num2;
                    }
                }while (num2 > 0 && count > 0);
            }
            finally
            {
                if (array != null)
                {
                    StreamHelper.bytesBufferPool.Release(array);
                }
            }
            return(num);
        }
        // Token: 0x060002B7 RID: 695 RVA: 0x0000F384 File Offset: 0x0000D584
        private int GetStreamHash()
        {
            int  num      = 0;
            uint num2     = 0U;
            long position = this.internalStream.Position;

            this.internalStream.Position = 0L;
            bool flag = false;

            byte[] array;
            if (AirSyncStream.streamBufferPool != null)
            {
                array = AirSyncStream.streamBufferPool.Acquire();
                flag  = true;
                goto IL_46;
            }
            array = new byte[8192];
            try
            {
                do
                {
IL_46:
                    int num3 = this.internalStream.Read(array, 0, array.Length);
                    if (num3 == 0)
                    {
                        break;
                    }
                    num2 = StreamHelper.UpdateCrc32(num2, array, 0, num3);
                    num += num3;
                }while ((long)num < this.Length);
                this.internalStream.Position = position;
            }
            finally
            {
                if (flag && array != null)
                {
                    AirSyncStream.streamBufferPool.Release(array);
                }
            }
            return((int)num2);
        }
Esempio n. 3
0
        // Token: 0x0600159A RID: 5530 RVA: 0x0007FF68 File Offset: 0x0007E168
        internal static int CopyStream(Stream source, Stream target, Encoding encoding, int charCount, bool needCrc, out uint crc)
        {
            crc = 0U;
            byte[] array = null;
            StreamHelper.CharArrayBuffer charArrayBuffer = null;
            int num = 0;

            if (charCount == 0)
            {
                return(0);
            }
            if (charCount < 0)
            {
                charCount = int.MaxValue;
            }
            int result;

            try
            {
                array           = StreamHelper.bytesBufferPool.Acquire();
                charArrayBuffer = StreamHelper.charsBufferPool.Acquire();
                if (array == null)
                {
                    throw new InvalidOperationException("bytesBuffer should never be null.");
                }
                if (charArrayBuffer == null)
                {
                    throw new InvalidOperationException("charsBuffer should never be null.");
                }
                StreamReader streamReader = new StreamReader(source, encoding);
                do
                {
                    int num2 = (6144 > charCount - num - 1) ? (charCount - num - 1) : 6144;
                    if (num2 == 0)
                    {
                        num2 = 1;
                    }
                    int num3 = streamReader.ReadBlock(charArrayBuffer.Buffer, 0, num2);
                    if (num3 == 0)
                    {
                        break;
                    }
                    if (StreamHelper.NeedToHandleSurrogate(charArrayBuffer.Buffer, num2, num3))
                    {
                        int num4 = streamReader.Read();
                        if (num4 != -1)
                        {
                            charArrayBuffer.Buffer[num3] = (char)num4;
                            char c  = charArrayBuffer.Buffer[num3];
                            char c2 = charArrayBuffer.Buffer[num3 - 1];
                            if (!char.IsSurrogatePair(c2, c))
                            {
                                string message = string.Format(CultureInfo.InvariantCulture, "Invalid surrogate chars: first={0}, second={1}", new object[]
                                {
                                    c2,
                                    c
                                });
                                AirSyncDiagnostics.TraceDebug(ExTraceGlobals.RequestsTracer, null, message);
                            }
                            num3++;
                        }
                    }
                    num += num3;
                    int bytes = encoding.GetBytes(charArrayBuffer.Buffer, 0, num3, array, 0);
                    target.Write(array, 0, bytes);
                    if (needCrc)
                    {
                        crc = StreamHelper.UpdateCrc32(crc, array, 0, bytes);
                    }
                }while (num < charCount);
                result = num;
            }
            finally
            {
                if (array != null)
                {
                    StreamHelper.bytesBufferPool.Release(array);
                }
                if (charArrayBuffer != null)
                {
                    charArrayBuffer.Clear();
                    StreamHelper.charsBufferPool.Release(charArrayBuffer);
                }
            }
            return(result);
        }