in rocketmq-client-csharp/ClientManager.cs [222:286]
private Message Convert(string sourceHost, rmq::Message message)
{
var msg = new Message();
msg.Topic = message.Topic.Name;
msg.MessageId = message.SystemProperties.MessageId;
msg.Tag = message.SystemProperties.Tag;
// Validate message body checksum
byte[] raw = message.Body.ToByteArray();
if (rmq::DigestType.Crc32 == message.SystemProperties.BodyDigest.Type)
{
uint checksum = Force.Crc32.Crc32Algorithm.Compute(raw, 0, raw.Length);
if (!message.SystemProperties.BodyDigest.Checksum.Equals(checksum.ToString("X")))
{
msg._checksumVerifiedOk = false;
}
}
else if (rmq::DigestType.Md5 == message.SystemProperties.BodyDigest.Type)
{
var checksum = MD5.HashData(raw);
if (!message.SystemProperties.BodyDigest.Checksum.Equals(System.Convert.ToHexString(checksum)))
{
msg._checksumVerifiedOk = false;
}
}
else if (rmq::DigestType.Sha1 == message.SystemProperties.BodyDigest.Type)
{
var checksum = SHA1.HashData(raw);
if (!message.SystemProperties.BodyDigest.Checksum.Equals(System.Convert.ToHexString(checksum)))
{
msg._checksumVerifiedOk = false;
}
}
foreach (var entry in message.UserProperties)
{
msg.UserProperties.Add(entry.Key, entry.Value);
}
msg._receiptHandle = message.SystemProperties.ReceiptHandle;
msg._sourceHost = sourceHost;
foreach (var key in message.SystemProperties.Keys)
{
msg.Keys.Add(key);
}
msg.DeliveryAttempt = message.SystemProperties.DeliveryAttempt;
if (message.SystemProperties.BodyEncoding == rmq::Encoding.Gzip)
{
// Decompress/Inflate message body
var inputStream = new MemoryStream(message.Body.ToByteArray());
var gzipStream = new GZipStream(inputStream, CompressionMode.Decompress);
var outputStream = new MemoryStream();
gzipStream.CopyTo(outputStream);
msg.Body = outputStream.ToArray();
}
else
{
msg.Body = message.Body.ToByteArray();
}
return msg;
}