// Two error cases: // (1) The sequence contains holes. // (2) TerminateSequence.LastMsgNumber < last received message number. // In both cases the channel should be faulted. In case (2) the channel should send a fault. public bool SetTerminateSequenceLast(long last, out bool isLastLargeEnough) { WsrmUtilities.AssertWsrm11(_reliableMessagingVersion); isLastLargeEnough = true; // unspecified last if (last < 1) { return(false); } int rangeCount = Ranges.Count; long lastReceived = (rangeCount > 0) ? Ranges[rangeCount - 1].Upper : 0; // last is too small to be valid if (last < lastReceived) { isLastLargeEnough = false; return(false); } // there is a hole in the sequence if ((rangeCount > 1) || (last > lastReceived)) { return(false); } SetLast(last); return(true); }
protected override WsrmFault VerifySimplexProtocolElements(WsrmMessageInfo info) { if ((info.AcknowledgementInfo != null) && (info.AcknowledgementInfo.SequenceID != base.OutputID)) { return(new UnknownSequenceFault(info.AcknowledgementInfo.SequenceID)); } if (info.AckRequestedInfo != null) { return(SequenceTerminatedFault.CreateProtocolFault(base.OutputID, System.ServiceModel.SR.GetString("SequenceTerminatedUnexpectedAckRequested"), System.ServiceModel.SR.GetString("UnexpectedAckRequested"))); } if (info.CreateSequenceInfo != null) { return(SequenceTerminatedFault.CreateProtocolFault(base.OutputID, System.ServiceModel.SR.GetString("SequenceTerminatedUnexpectedCS"), System.ServiceModel.SR.GetString("UnexpectedCS"))); } if (info.SequencedMessageInfo != null) { return(new UnknownSequenceFault(info.SequencedMessageInfo.SequenceID)); } if (info.TerminateSequenceInfo != null) { if (base.Settings.ReliableMessagingVersion == ReliableMessagingVersion.WSReliableMessagingFebruary2005) { return(SequenceTerminatedFault.CreateProtocolFault(base.OutputID, System.ServiceModel.SR.GetString("SequenceTerminatedUnexpectedTerminateSequence"), System.ServiceModel.SR.GetString("UnexpectedTerminateSequence"))); } if (info.TerminateSequenceInfo.Identifier == base.OutputID) { return(null); } return(new UnknownSequenceFault(info.TerminateSequenceInfo.Identifier)); } if (info.TerminateSequenceResponseInfo != null) { WsrmUtilities.AssertWsrm11(base.Settings.ReliableMessagingVersion); if (info.TerminateSequenceResponseInfo.Identifier == base.OutputID) { return(null); } return(new UnknownSequenceFault(info.TerminateSequenceResponseInfo.Identifier)); } if (info.CloseSequenceInfo != null) { WsrmUtilities.AssertWsrm11(base.Settings.ReliableMessagingVersion); if (info.CloseSequenceInfo.Identifier == base.OutputID) { return(SequenceTerminatedFault.CreateProtocolFault(base.OutputID, System.ServiceModel.SR.GetString("SequenceTerminatedUnsupportedClose"), System.ServiceModel.SR.GetString("UnsupportedCloseExceptionString"))); } return(new UnknownSequenceFault(info.CloseSequenceInfo.Identifier)); } if (info.CloseSequenceResponseInfo == null) { return(null); } WsrmUtilities.AssertWsrm11(base.Settings.ReliableMessagingVersion); if (info.CloseSequenceResponseInfo.Identifier == base.OutputID) { return(null); } return(new UnknownSequenceFault(info.CloseSequenceResponseInfo.Identifier)); }
public bool SetCloseSequenceLast(long last) { bool flag; WsrmUtilities.AssertWsrm11(this.reliableMessagingVersion); if ((last < 1L) || (this.ranges.Count == 0)) { flag = true; } else { SequenceRange range = this.ranges[this.ranges.Count - 1]; flag = last >= range.Upper; } if (flag) { this.isSequenceClosed = true; this.SetLast(last); } return(flag); }
public bool SetCloseSequenceLast(long last) { WsrmUtilities.AssertWsrm11(_reliableMessagingVersion); bool validLast; if ((last < 1) || (Ranges.Count == 0)) { validLast = true; } else { validLast = last >= Ranges[Ranges.Count - 1].Upper; } if (validLast) { IsSequenceClosed = true; SetLast(last); } return(validLast); }
public bool SetCloseSequenceLast(Int64 last) { WsrmUtilities.AssertWsrm11(this.reliableMessagingVersion); bool validLast; if ((last < 1) || (this.ranges.Count == 0)) { validLast = true; } else { validLast = last >= this.ranges[this.ranges.Count - 1].Upper; } if (validLast) { this.isSequenceClosed = true; this.SetLast(last); } return(validLast); }
public bool SetTerminateSequenceLast(long last, out bool isLastLargeEnough) { WsrmUtilities.AssertWsrm11(this.reliableMessagingVersion); isLastLargeEnough = true; if (last < 1L) { return(false); } int count = this.ranges.Count; long num2 = (count > 0) ? this.ranges[count - 1].Upper : 0L; if (last < num2) { isLastLargeEnough = false; return(false); } if ((count > 1) || (last > num2)) { return(false); } this.SetLast(last); return(true); }
protected virtual WsrmFault VerifyDuplexProtocolElements(WsrmMessageInfo info) { if (info.AcknowledgementInfo != null && info.AcknowledgementInfo.SequenceID != this.OutputID) { return(new UnknownSequenceFault(info.AcknowledgementInfo.SequenceID)); } else if (info.AckRequestedInfo != null && info.AckRequestedInfo.SequenceID != this.InputID) { return(new UnknownSequenceFault(info.AckRequestedInfo.SequenceID)); } else if (info.SequencedMessageInfo != null && info.SequencedMessageInfo.SequenceID != this.InputID) { return(new UnknownSequenceFault(info.SequencedMessageInfo.SequenceID)); } else if (info.TerminateSequenceInfo != null && info.TerminateSequenceInfo.Identifier != this.InputID) { if (this.Settings.ReliableMessagingVersion == ReliableMessagingVersion.WSReliableMessagingFebruary2005) { return(SequenceTerminatedFault.CreateProtocolFault(this.OutputID, SR.GetString(SR.SequenceTerminatedUnexpectedTerminateSequence), SR.GetString(SR.UnexpectedTerminateSequence))); } else if (info.TerminateSequenceInfo.Identifier == this.OutputID) { return(null); } else { return(new UnknownSequenceFault(info.TerminateSequenceInfo.Identifier)); } } else if (info.TerminateSequenceResponseInfo != null) { WsrmUtilities.AssertWsrm11(this.settings.ReliableMessagingVersion); if (info.TerminateSequenceResponseInfo.Identifier == this.OutputID) { return(null); } else { return(new UnknownSequenceFault(info.TerminateSequenceResponseInfo.Identifier)); } } else if (info.CloseSequenceInfo != null) { WsrmUtilities.AssertWsrm11(this.settings.ReliableMessagingVersion); if (info.CloseSequenceInfo.Identifier == this.InputID) { return(null); } else if (info.CloseSequenceInfo.Identifier == this.OutputID) { // Spec allows RM-Destination close, but we do not. return(SequenceTerminatedFault.CreateProtocolFault(this.OutputID, SR.GetString(SR.SequenceTerminatedUnsupportedClose), SR.GetString(SR.UnsupportedCloseExceptionString))); } else { return(new UnknownSequenceFault(info.CloseSequenceInfo.Identifier)); } } else if (info.CloseSequenceResponseInfo != null) { WsrmUtilities.AssertWsrm11(this.settings.ReliableMessagingVersion); if (info.CloseSequenceResponseInfo.Identifier == this.OutputID) { return(null); } else if (info.CloseSequenceResponseInfo.Identifier == this.InputID) { return(SequenceTerminatedFault.CreateProtocolFault(this.InputID, SR.GetString(SR.SequenceTerminatedUnexpectedCloseSequenceResponse), SR.GetString(SR.UnexpectedCloseSequenceResponse))); } else { return(new UnknownSequenceFault(info.CloseSequenceResponseInfo.Identifier)); } } else { return(null); } }
protected override WsrmFault VerifySimplexProtocolElements(WsrmMessageInfo info) { if (info.AcknowledgementInfo != null) { return(SequenceTerminatedFault.CreateProtocolFault(this.InputID, SR.GetString(SR.SequenceTerminatedUnexpectedAcknowledgement), SR.GetString(SR.UnexpectedAcknowledgement))); } else if (info.AckRequestedInfo != null && info.AckRequestedInfo.SequenceID != this.InputID) { return(new UnknownSequenceFault(info.AckRequestedInfo.SequenceID)); } else if (info.CreateSequenceResponseInfo != null) { return(SequenceTerminatedFault.CreateProtocolFault(this.InputID, SR.GetString(SR.SequenceTerminatedUnexpectedCSR), SR.GetString(SR.UnexpectedCSR))); } else if (info.SequencedMessageInfo != null && info.SequencedMessageInfo.SequenceID != this.InputID) { return(new UnknownSequenceFault(info.SequencedMessageInfo.SequenceID)); } else if (info.TerminateSequenceInfo != null && info.TerminateSequenceInfo.Identifier != this.InputID) { return(new UnknownSequenceFault(info.TerminateSequenceInfo.Identifier)); } else if (info.TerminateSequenceResponseInfo != null) { WsrmUtilities.AssertWsrm11(this.Settings.ReliableMessagingVersion); if (info.TerminateSequenceResponseInfo.Identifier == this.InputID) { return(SequenceTerminatedFault.CreateProtocolFault(this.InputID, SR.GetString(SR.SequenceTerminatedUnexpectedTerminateSequenceResponse), SR.GetString(SR.UnexpectedTerminateSequenceResponse))); } else { return(new UnknownSequenceFault(info.TerminateSequenceResponseInfo.Identifier)); } } else if (info.CloseSequenceInfo != null) { WsrmUtilities.AssertWsrm11(this.Settings.ReliableMessagingVersion); if (info.CloseSequenceInfo.Identifier == this.InputID) { return(null); } else { return(new UnknownSequenceFault(info.CloseSequenceInfo.Identifier)); } } else if (info.CloseSequenceResponseInfo != null) { WsrmUtilities.AssertWsrm11(this.Settings.ReliableMessagingVersion); if (info.CloseSequenceResponseInfo.Identifier == this.InputID) { return(SequenceTerminatedFault.CreateProtocolFault(this.InputID, SR.GetString(SR.SequenceTerminatedUnexpectedCloseSequenceResponse), SR.GetString(SR.UnexpectedCloseSequenceResponse))); } else { return(new UnknownSequenceFault(info.CloseSequenceResponseInfo.Identifier)); } } else { return(null); } }