Пример #1
0
        private static int GetPreambleLength(ArraySegment <byte> buffer, Encoding encoding)
        {
            byte[] array  = buffer.Array;
            int    offset = buffer.Offset;
            int    count  = buffer.Count;

            switch (encoding.CodePage)
            {
            case 1200:
                return(count < 2 || array[offset] != byte.MaxValue || array[offset + 1] != (byte)254 ? 0 : 2);

            case 1201:
                return(count < 2 || array[offset] != (byte)254 || array[offset + 1] != byte.MaxValue ? 0 : 2);

            case 12000:
                return(count < 4 || array[offset] != byte.MaxValue || (array[offset + 1] != (byte)254 || array[offset + 2] != (byte)0) || array[offset + 3] != (byte)0 ? 0 : 4);

            case 65001:
                return(count < 3 || array[offset] != (byte)239 || (array[offset + 1] != (byte)187 || array[offset + 2] != (byte)191) ? 0 : 3);

            default:
                byte[] preamble = encoding.GetPreamble();
                return(!HttpContent.BufferHasPrefix(buffer, preamble) ? 0 : preamble.Length);
            }
        }