Beispiel #1
0
        public void EncodeSensitive(string name, string value, byte[] buffer, ref int offset,
                                    ref int bytesAvailableInBuffer)
        {
            if (name == null)
            {
                throw new ArgumentNullException(nameof(name));
            }
            var header = GetIndexedHeader(name, value);

            if (header != null && header.Name.Length >= _maxDynamicTableSize)
            {
                header = null;
            }

            //Literal Header Field Never Indexed — Indexed Name
            if (header != null)
            {
                var indexOffset = offset;
                IntegerCodec.Encode(4, header.IndexPosition, buffer, ref offset, ref bytesAvailableInBuffer);
                buffer[indexOffset] += 8;
            }

            //Literal Header Field Never Indexed — New Name
            else
            {
                buffer[offset++] = 8;
                bytesAvailableInBuffer--;
                EncodeLiteral(name, buffer, ref offset, ref bytesAvailableInBuffer);
            }

            EncodeLiteral(value, buffer, ref offset, ref bytesAvailableInBuffer);
        }
Beispiel #2
0
        private void EncodeLiteral(string literalValue, byte[] buffer, ref int offset, ref int bytesAvailableInBuffer)
        {
            var buf           = _encoding.GetBytes(literalValue);
            var octets        = _encoder.GetEncodedLength(buf);
            var huffmanOffset = offset;

            IntegerCodec.Encode(7, octets, buffer, ref offset, ref bytesAvailableInBuffer);
            buffer[huffmanOffset] += 128;
            _encoder.Encode(buf, 0, buf.Length, buffer, ref offset, ref bytesAvailableInBuffer);
        }
 public void TestGetSignedIntegerSize()
 {
     Assert.AreEqual(1, IntegerCodec.GetSignedIntegerSize(63));
     Assert.AreEqual(1, IntegerCodec.GetSignedIntegerSize(-64));
     Assert.AreEqual(2, IntegerCodec.GetSignedIntegerSize(64));
     Assert.AreEqual(2, IntegerCodec.GetSignedIntegerSize(8191));
     Assert.AreEqual(2, IntegerCodec.GetSignedIntegerSize(-8192));
     Assert.AreEqual(2, IntegerCodec.GetSignedIntegerSize(-65));
     Assert.AreEqual(4, IntegerCodec.GetSignedIntegerSize(134217727));
     Assert.AreEqual(4, IntegerCodec.GetSignedIntegerSize(-134217728));
 }
Beispiel #4
0
        public void should_be_able_to_decode_10_using_5bit_prefix_as_in_the_specification_example()
        {
            var expected = 10;
            var buffer   = new byte[10];
            var count    = buffer.Length;
            var offset   = 0;

            IntegerCodec.Encode(5, 10, buffer, ref offset, ref count);
            count  = offset;
            offset = 0;
            var actual = IntegerCodec.Decode(5, buffer, ref offset, ref count);

            actual.Should().Be(expected);
        }
Beispiel #5
0
        public void Encode(string name, string value, byte[] buffer, ref int offset, ref int bytesAvailableInBuffer)
        {
            if (name == null)
            {
                throw new ArgumentNullException(nameof(name));
            }
            var header = GetIndexedHeader(name, value);

            if (header != null && header.Name.Length >= _maxDynamicTableSize)
            {
                header = null;
            }

            if (header != null && header.Value.Equals(value))
            {
                var flagOffset = offset;
                IntegerCodec.Encode(7, header.IndexPosition, buffer, ref offset, ref bytesAvailableInBuffer);
                buffer[flagOffset] += 128;
                return;
            }

            //Literal Header Field with Incremental Indexing — New Name
            if (header == null)
            {
                buffer[offset++]        = 64;
                bytesAvailableInBuffer -= 1;
                _dynamicTable.Append(name, value);
                EncodeLiteral(name, buffer, ref offset, ref bytesAvailableInBuffer);
            }
            else
            {
                var flagOffset = offset;
                IntegerCodec.Encode(6, header.IndexPosition, buffer, ref offset, ref bytesAvailableInBuffer);
                buffer[flagOffset] += 64;
            }

            EncodeLiteral(value, buffer, ref offset, ref bytesAvailableInBuffer);
        }