Exemple #1
0
        public void EncodeBulkStringContent()
        {
            var channel = new EmbeddedChannel(new RedisEncoder());

            var header = new BulkStringHeaderRedisMessage(16);

            IByteBuffer buffer1 = "bulk\nstr".Buffer();

            buffer1.Retain();
            var body1 = new BulkStringRedisContent(buffer1);

            IByteBuffer buffer2 = "ing\ntest".Buffer();

            buffer1.Retain();
            var body2 = new LastBulkStringRedisContent(buffer2);

            Assert.True(channel.WriteOutbound(header));
            Assert.True(channel.WriteOutbound(body1));
            Assert.True(channel.WriteOutbound(body2));
            IByteBuffer written = ReadAll(channel);

            byte[] output   = written.Bytes();
            byte[] expected = "$16\r\nbulk\nstring\ntest\r\n".Bytes();

            Assert.Equal(expected.Length, output.Length);
            Assert.True(output.SequenceEqual(expected));
            written.Release();
        }
        public void EncodeBulkStringContent()
        {
            var header = new BulkStringHeaderRedisMessage(16);
            var body1  = new DefaultBulkStringRedisContent((IByteBuffer)ByteBufOf("bulk\nstr").Retain());
            var body2  = new DefaultLastBulkStringRedisContent((IByteBuffer)ByteBufOf("ing\ntest").Retain());

            Assert.True(this.channel.WriteOutbound(header));
            Assert.True(this.channel.WriteOutbound(body1));
            Assert.True(this.channel.WriteOutbound(body2));

            IByteBuffer written = ReadAll(this.channel);

            Assert.Equal(BytesOf("$16\r\nbulk\nstring\ntest\r\n"), BytesOf(written));
            written.Release();
        }
Exemple #3
0
        void WriteBulkStringHeader(IByteBufferAllocator allocator, BulkStringHeaderRedisMessage msg, List <object> output)
        {
            IByteBuffer buf = allocator.Buffer(RedisConstants.TypeLength +
                                               (msg.IsNull ? RedisConstants.NullLength : RedisConstants.LongMaxLength + RedisConstants.EndOfLineLength));

            RedisMessageType.BulkString.WriteTo(buf);
            if (msg.IsNull)
            {
                buf.WriteShort(RedisConstants.NullShort);
            }
            else
            {
                buf.WriteBytes(this.NumberToBytes(msg.BulkStringLength));
                buf.WriteShort(RedisConstants.EndOfLineShort);
            }
            output.Add(buf);
        }
        void InvokeHandleOversizedMessage(IChannelHandlerContext context, BulkStringHeaderRedisMessage startMessage)
        {
            Contract.Requires(context != null);
            Contract.Requires(startMessage != null);

            this.currentMessage = null;

            try
            {
                context.FireExceptionCaught(
                    new TooLongFrameException($"Content length exceeded {this.maximumContentLength} bytes."));
            }
            finally
            {
                // Release the message in case it is a full one.
                ReferenceCountUtil.Release(startMessage);
            }
        }
Exemple #5
0
        void Write(IByteBufferAllocator allocator, BulkStringHeaderRedisMessage message, ICollection <object> output)
        {
            Contract.Requires(allocator != null);
            Contract.Requires(message != null);
            Contract.Requires(output != null);

            IByteBuffer buffer = allocator.Buffer(
                RedisConstants.TypeLength
                + (message.IsNull ? RedisConstants.NullLength : RedisConstants.LongValueMaximumLength)
                + RedisConstants.EndOfLineLength);

            buffer.WriteByte((char)RedisMessageType.BulkString);

            if (!message.IsNull)
            {
                byte[] bytes = this.NumberToBytes(message.BulkStringLength);
                buffer.WriteBytes(bytes);
            }

            buffer.WriteShort(RedisConstants.EndOfLine);
            output.Add(buffer);
        }
        static bool IsContentLengthInvalid(BulkStringHeaderRedisMessage start, int expectedMaximumContentLength)
        {
            Contract.Requires(start != null);

            return(start.BulkStringLength > expectedMaximumContentLength);
        }