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(); }
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); } }
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); }