You've already forked linux-packaging-mono
Imported Upstream version 4.0.0~alpha1
Former-commit-id: 806294f5ded97629b74c85c09952f2a74fe182d9
This commit is contained in:
102
external/referencesource/System.ServiceModel/System/ServiceModel/Channels/MsmqMessageProperty.cs
vendored
Normal file
102
external/referencesource/System.ServiceModel/System/ServiceModel/Channels/MsmqMessageProperty.cs
vendored
Normal file
@ -0,0 +1,102 @@
|
||||
//----------------------------------------------------------------------------
|
||||
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
//----------------------------------------------------------------------------
|
||||
namespace System.ServiceModel.Channels
|
||||
{
|
||||
public sealed class MsmqMessageProperty
|
||||
{
|
||||
public const string Name = "MsmqMessageProperty";
|
||||
|
||||
int abortCount;
|
||||
int moveCount;
|
||||
long lookupId;
|
||||
string messageId;
|
||||
int acknowledge;
|
||||
|
||||
internal MsmqMessageProperty(MsmqInputMessage msmqMessage)
|
||||
{
|
||||
if (null == msmqMessage)
|
||||
throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("msmqMessage");
|
||||
this.lookupId = msmqMessage.LookupId.Value;
|
||||
if (msmqMessage.AbortCount != null)
|
||||
this.abortCount = msmqMessage.AbortCount.Value;
|
||||
if (msmqMessage.MoveCount != null)
|
||||
this.moveCount = msmqMessage.MoveCount.Value;
|
||||
this.acknowledge = (int)(ushort)msmqMessage.Class.Value;
|
||||
this.messageId = MsmqMessageId.ToString(msmqMessage.MessageId.Buffer);
|
||||
}
|
||||
|
||||
public DeliveryFailure? DeliveryFailure
|
||||
{
|
||||
get { return TryGetDeliveryFailure(this.messageId, this.acknowledge); }
|
||||
}
|
||||
|
||||
public DeliveryStatus? DeliveryStatus
|
||||
{
|
||||
get
|
||||
{
|
||||
DeliveryFailure? deliveryFailure = this.DeliveryFailure;
|
||||
|
||||
if (!deliveryFailure.HasValue)
|
||||
return null;
|
||||
|
||||
if (System.ServiceModel.Channels.DeliveryFailure.ReachQueueTimeout == deliveryFailure.Value
|
||||
|| System.ServiceModel.Channels.DeliveryFailure.Unknown == deliveryFailure.Value)
|
||||
return System.ServiceModel.Channels.DeliveryStatus.InDoubt;
|
||||
else
|
||||
return System.ServiceModel.Channels.DeliveryStatus.NotDelivered;
|
||||
}
|
||||
}
|
||||
|
||||
public int AbortCount
|
||||
{
|
||||
get { return this.abortCount; }
|
||||
internal set { this.abortCount = value; }
|
||||
}
|
||||
|
||||
internal long LookupId
|
||||
{
|
||||
get { return this.lookupId; }
|
||||
}
|
||||
|
||||
internal string MessageId
|
||||
{
|
||||
get { return this.messageId; }
|
||||
}
|
||||
|
||||
public int MoveCount
|
||||
{
|
||||
get { return this.moveCount; }
|
||||
internal set { this.moveCount = value; }
|
||||
}
|
||||
|
||||
public static MsmqMessageProperty Get(Message message)
|
||||
{
|
||||
if (null == message)
|
||||
throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("message");
|
||||
if (null == message.Properties)
|
||||
throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("message.Properties");
|
||||
|
||||
return message.Properties[Name] as MsmqMessageProperty;
|
||||
}
|
||||
|
||||
static DeliveryFailure? TryGetDeliveryFailure(string messageId, int acknowledgment)
|
||||
{
|
||||
// DeliveryFailure definintion explains these bit manipulations
|
||||
int bit15 = (1 << 15) & acknowledgment;
|
||||
if (0 == bit15)
|
||||
return null;
|
||||
int bit14 = (1 << 14) & acknowledgment;
|
||||
int otherBits = ~((1 << 15) | (1 << 14)) & acknowledgment;
|
||||
|
||||
if ((0 == bit14 && otherBits >= 0 && otherBits <= 0x0A) ||
|
||||
(0 != bit14 && otherBits >= 0 && otherBits <= 0x02))
|
||||
return (DeliveryFailure)acknowledgment;
|
||||
else
|
||||
{
|
||||
MsmqDiagnostics.UnexpectedAcknowledgment(messageId, acknowledgment);
|
||||
return System.ServiceModel.Channels.DeliveryFailure.Unknown;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user