public static int GetEstimatedMessageSize(AnnotatedMessage message) { var size = 0; if (message.Header != null) { size += 64; } if (message.DeliveryAnnotations != null) { size += 64; } if (message.MessageAnnotations != null) { size += 64; } if (message.BareMessage != null) { size += message.BareMessage.Length; } if (message.Footer != null) { size += 64; } return(size); }
public static void Encode(AnnotatedMessage message, ByteBuffer buffer) { if (message.Header != null) { message.Header.Encode(buffer); } if (message.DeliveryAnnotations != null) { message.DeliveryAnnotations.Encode(buffer); } if (message.MessageAnnotations != null) { message.MessageAnnotations.Encode(buffer); } if (message.BareMessage != null && message.BareMessage.Length > 0) { AmqpBitConverter.WriteBytes(buffer, message.BareMessage, 0, message.BareMessage.Length); } if (message.Footer != null) { message.Footer.Encode(buffer); } }
public static AnnotatedMessage Decode(ByteBuffer buffer) { var message = new AnnotatedMessage(); int bareMessageStartOffset = -1; int bareMessageEndOffset = -1; while (buffer.LengthAvailableToRead > 0) { int offOfDescribedList = buffer.ReadOffset; // peak at the type of the described list var formatCode = AmqpCodec.DecodeFormatCode(buffer); if (formatCode != FormatCode.Described) throw new AmqpException(ErrorCode.FramingError, $"Expected Format Code = {FormatCode.Described.ToHex()} but was {formatCode.ToHex()}"); var descriptor = AmqpCodec.DecodeDescriptor(buffer); if (descriptor == DescribedTypeCodec.Header) { message.Header = (Header)AmqpCodec.DecodeKnownDescribedType(buffer, descriptor); continue; } if (descriptor == DescribedTypeCodec.DeliveryAnnotations) { message.DeliveryAnnotations = (DeliveryAnnotations)AmqpCodec.DecodeKnownDescribedType(buffer, descriptor); continue; } if (descriptor == DescribedTypeCodec.MessageAnnotations) { message.MessageAnnotations = (MessageAnnotations)AmqpCodec.DecodeKnownDescribedType(buffer, descriptor); continue; } if (descriptor == DescribedTypeCodec.Footer) { message.Footer = (Footer)AmqpCodec.DecodeKnownDescribedType(buffer, descriptor); continue; } if (descriptor == DescribedTypeCodec.Properties) { if (bareMessageStartOffset < 0) bareMessageStartOffset = offOfDescribedList; // the first described list in the bare message SkipDescribedList(buffer); bareMessageEndOffset = buffer.ReadOffset; continue; } if (descriptor == DescribedTypeCodec.ApplicationProperties) { if (bareMessageStartOffset < 0) bareMessageStartOffset = offOfDescribedList; // the first described list in the bare message SkipDescribedList(buffer); bareMessageEndOffset = buffer.ReadOffset; continue; } if (descriptor == DescribedTypeCodec.Data) { if (bareMessageStartOffset < 0) bareMessageStartOffset = offOfDescribedList; // the first described list in the bare message SkipBinaryBuffer(buffer); bareMessageEndOffset = buffer.ReadOffset; continue; } if (descriptor == DescribedTypeCodec.AmqpValue) { if (bareMessageStartOffset < 0) bareMessageStartOffset = offOfDescribedList; // the first described list in the bare message throw new NotImplementedException(); //continue; } if (descriptor == DescribedTypeCodec.AmqpSequence) { if (bareMessageStartOffset < 0) bareMessageStartOffset = offOfDescribedList; // the first described list in the bare message throw new NotImplementedException(); //continue; } } if (bareMessageStartOffset > -1) { message.BareMessage = new byte[bareMessageEndOffset - bareMessageStartOffset]; Array.Copy(buffer.Buffer, bareMessageStartOffset, message.BareMessage, 0, message.BareMessage.Length); } return message; }
public static int GetEstimatedMessageSize(AnnotatedMessage message) { var size = 0; if (message.Header != null) size += 64; if (message.DeliveryAnnotations != null) size += 64; if (message.MessageAnnotations != null) size += 64; if (message.BareMessage != null) size += message.BareMessage.Length; if (message.Footer != null) size += 64; return size; }
public static void Encode(AnnotatedMessage message, ByteBuffer buffer) { if (message.Header != null) message.Header.Encode(buffer); if (message.DeliveryAnnotations != null) message.DeliveryAnnotations.Encode(buffer); if (message.MessageAnnotations != null) message.MessageAnnotations.Encode(buffer); if (message.BareMessage != null && message.BareMessage.Length > 0) AmqpBitConverter.WriteBytes(buffer, message.BareMessage, 0, message.BareMessage.Length); if (message.Footer != null) message.Footer.Encode(buffer); }
public static AnnotatedMessage Decode(ByteBuffer buffer) { var message = new AnnotatedMessage(); int bareMessageStartOffset = -1; int bareMessageEndOffset = -1; while (buffer.LengthAvailableToRead > 0) { int offOfDescribedList = buffer.ReadOffset; // peak at the type of the described list var formatCode = AmqpCodec.DecodeFormatCode(buffer); if (formatCode != FormatCode.Described) { throw new AmqpException(ErrorCode.FramingError, $"Expected Format Code = {FormatCode.Described.ToHex()} but was {formatCode.ToHex()}"); } var descriptor = AmqpCodec.DecodeDescriptor(buffer); if (descriptor == DescribedTypeCodec.Header) { message.Header = (Header)AmqpCodec.DecodeKnownDescribedType(buffer, descriptor); continue; } if (descriptor == DescribedTypeCodec.DeliveryAnnotations) { message.DeliveryAnnotations = (DeliveryAnnotations)AmqpCodec.DecodeKnownDescribedType(buffer, descriptor); continue; } if (descriptor == DescribedTypeCodec.MessageAnnotations) { message.MessageAnnotations = (MessageAnnotations)AmqpCodec.DecodeKnownDescribedType(buffer, descriptor); continue; } if (descriptor == DescribedTypeCodec.Footer) { message.Footer = (Footer)AmqpCodec.DecodeKnownDescribedType(buffer, descriptor); continue; } if (descriptor == DescribedTypeCodec.Properties) { if (bareMessageStartOffset < 0) { bareMessageStartOffset = offOfDescribedList; // the first described list in the bare message } SkipDescribedList(buffer); bareMessageEndOffset = buffer.ReadOffset; continue; } if (descriptor == DescribedTypeCodec.ApplicationProperties) { if (bareMessageStartOffset < 0) { bareMessageStartOffset = offOfDescribedList; // the first described list in the bare message } SkipDescribedList(buffer); bareMessageEndOffset = buffer.ReadOffset; continue; } if (descriptor == DescribedTypeCodec.Data) { if (bareMessageStartOffset < 0) { bareMessageStartOffset = offOfDescribedList; // the first described list in the bare message } SkipBinaryBuffer(buffer); bareMessageEndOffset = buffer.ReadOffset; continue; } if (descriptor == DescribedTypeCodec.AmqpValue) { if (bareMessageStartOffset < 0) { bareMessageStartOffset = offOfDescribedList; // the first described list in the bare message } throw new NotImplementedException(); //continue; } if (descriptor == DescribedTypeCodec.AmqpSequence) { if (bareMessageStartOffset < 0) { bareMessageStartOffset = offOfDescribedList; // the first described list in the bare message } throw new NotImplementedException(); //continue; } } if (bareMessageStartOffset > -1) { message.BareMessage = new byte[bareMessageEndOffset - bareMessageStartOffset]; Array.Copy(buffer.Buffer, bareMessageStartOffset, message.BareMessage, 0, message.BareMessage.Length); } return(message); }