in edge-hub/core/src/Microsoft.Azure.Devices.Edge.Hub.Amqp/AmqpMessageConverter.cs [106:226]
public AmqpMessage FromMessage(IMessage message)
{
AmqpMessage amqpMessage = AmqpMessage.Create(
new Data
{
Value = new ArraySegment<byte>(message.Body)
});
if (message.SystemProperties.TryGetNonEmptyValue(SystemProperties.MessageId, out string messageId))
{
amqpMessage.Properties.MessageId = messageId;
}
if (message.SystemProperties.TryGetNonEmptyValue(SystemProperties.To, out string to))
{
amqpMessage.Properties.To = to;
}
if (message.SystemProperties.TryGetNonEmptyValue(SystemProperties.ExpiryTimeUtc, out string expiryTimeStr) &&
DateTime.TryParse(expiryTimeStr, null, DateTimeStyles.RoundtripKind, out DateTime expiryTime))
{
amqpMessage.Properties.AbsoluteExpiryTime = expiryTime;
}
if (message.SystemProperties.TryGetNonEmptyValue(SystemProperties.MsgCorrelationId, out string correlationId))
{
amqpMessage.Properties.CorrelationId = correlationId;
}
if (message.SystemProperties.TryGetNonEmptyValue(SystemProperties.UserId, out string userId))
{
amqpMessage.Properties.UserId = new ArraySegment<byte>(Encoding.UTF8.GetBytes(userId));
}
if (message.SystemProperties.TryGetNonEmptyValue(SystemProperties.ContentType, out string contentType))
{
amqpMessage.Properties.ContentType = contentType;
}
if (message.SystemProperties.TryGetNonEmptyValue(SystemProperties.ContentEncoding, out string contentEncoding))
{
amqpMessage.Properties.ContentEncoding = contentEncoding;
}
if (message.SystemProperties.TryGetNonEmptyValue(SystemProperties.EnqueuedTime, out string enqueuedTimeString)
&& DateTime.TryParse(enqueuedTimeString, null, DateTimeStyles.RoundtripKind, out DateTime enqueuedTime))
{
amqpMessage.MessageAnnotations.Map[Constants.MessageAnnotationsEnqueuedTimeKey] = enqueuedTime;
}
if (message.SystemProperties.TryGetNonEmptyValue(SystemProperties.DeliveryCount, out string deliveryCountString)
&& byte.TryParse(deliveryCountString, out byte deliveryCount))
{
amqpMessage.MessageAnnotations.Map[Constants.MessageAnnotationsDeliveryCountKey] = deliveryCount;
}
if (message.SystemProperties.TryGetNonEmptyValue(SystemProperties.LockToken, out string lockToken))
{
amqpMessage.MessageAnnotations.Map[Constants.MessageAnnotationsLockTokenName] = lockToken;
}
if (message.SystemProperties.TryGetNonEmptyValue(SystemProperties.SequenceNumber, out string sequenceNumberString)
&& ulong.TryParse(sequenceNumberString, out ulong sequenceNumber))
{
amqpMessage.MessageAnnotations.Map[Constants.MessageAnnotationsSequenceNumberName] = sequenceNumber;
}
if (message.SystemProperties.TryGetNonEmptyValue(SystemProperties.InputName, out string inputName))
{
amqpMessage.MessageAnnotations.Map[Constants.MessageAnnotationsInputNameKey] = inputName;
}
if (message.SystemProperties.TryGetNonEmptyValue(SystemProperties.RpConnectionDeviceIdInternal, out string rpConnectionDeviceId))
{
amqpMessage.MessageAnnotations.Map[Constants.MessageAnnotationsConnectionDeviceId] = rpConnectionDeviceId;
}
else if (message.SystemProperties.TryGetNonEmptyValue(SystemProperties.ConnectionDeviceId, out string connectionDeviceId))
{
amqpMessage.MessageAnnotations.Map[Constants.MessageAnnotationsConnectionDeviceId] = connectionDeviceId;
}
if (message.SystemProperties.TryGetNonEmptyValue(SystemProperties.RpConnectionModuleIdInternal, out string rpConnectionModuleId))
{
amqpMessage.MessageAnnotations.Map[Constants.MessageAnnotationsConnectionModuleId] = rpConnectionModuleId;
}
else if (message.SystemProperties.TryGetNonEmptyValue(SystemProperties.ConnectionModuleId, out string connectionModuleId))
{
amqpMessage.MessageAnnotations.Map[Constants.MessageAnnotationsConnectionModuleId] = connectionModuleId;
}
if (message.SystemProperties.TryGetNonEmptyValue(SystemProperties.ComponentName, out string componentName))
{
amqpMessage.MessageAnnotations.Map[Constants.MessageAnnotationsComponentName] = componentName;
}
if (message.SystemProperties.TryGetNonEmptyValue(SystemProperties.MessageSchema, out string messageSchema))
{
amqpMessage.ApplicationProperties.Map[Constants.MessagePropertiesMessageSchemaKey] = messageSchema;
}
if (message.SystemProperties.TryGetNonEmptyValue(SystemProperties.CreationTime, out string creationTime))
{
amqpMessage.ApplicationProperties.Map[Constants.MessagePropertiesCreationTimeKey] = creationTime;
}
if (message.SystemProperties.TryGetNonEmptyValue(SystemProperties.Operation, out string operation))
{
amqpMessage.ApplicationProperties.Map[Constants.MessagePropertiesOperationKey] = operation;
}
foreach (KeyValuePair<string, string> property in message.Properties)
{
amqpMessage.ApplicationProperties.Map[property.Key] = property.Value;
}
amqpMessage.DeliveryTag = !string.IsNullOrWhiteSpace(lockToken) && Guid.TryParse(lockToken, out Guid lockTokenGuid)
? new ArraySegment<byte>(lockTokenGuid.ToByteArray())
: new ArraySegment<byte>(Guid.NewGuid().ToByteArray());
return amqpMessage;
}