NetWrok.HTTP.Zlib.GZipStream.SlurpHeader C# (CSharp) Method

SlurpHeader() private method

private SlurpHeader ( byte buffer, int offset ) : int
buffer byte
offset int
return int
        private int SlurpHeader(byte[] buffer, int offset)
        {
            int totalSlurped = 0;

            byte[] header = new byte[10];
            Array.Copy(buffer, offset, header, 0, header.Length);
            totalSlurped += header.Length;
            offset += header.Length;

            if (header[0] != 0x1F || header[1] != 0x8B || header[2] != 8)
                throw new ZlibException("Bad GZIP header.");

            if ((header[3] & 0x04) == 0x04)  // There is an extra field
            {
                // slurp and discard extra field
                Int16 extraLength = (Int16)(buffer[10] + buffer[11] * 256);

                offset += 2;
                byte[] extra = new byte[extraLength];

                Array.Copy(buffer, offset, extra, 0, extra.Length);
                totalSlurped += extra.Length;
                offset += extra.Length;
            }

            int count = 0;
            if ((header[3] & 0x08) == 0x08)
            {
                FileName = SlurpZeroTerminatedString(buffer, offset, out count);
                totalSlurped += count;
                offset += count;
            }

            if ((header[3] & 0x10) == 0x010)
            {
                Comment = SlurpZeroTerminatedString(buffer, offset, out count);
                totalSlurped += count;
                offset += count;
            }

            if ((header[3] & 0x02) == 0x02)
            {
                // CRC16, ignore the data
                totalSlurped += 1;
                offset += 1;
            }

            return totalSlurped;
        }