// 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));
 }
Esempio n. 3
0
        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);
        }
Esempio n. 6
0
        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);
            }
        }