Beispiel #1
0
        Candidate GetSingleMatch(CandidateSet cset, Message message)
        {
            int candiCount = cset.candidates.Count;

            if (cset.qnames.Count == 0)
            {
                if (candiCount == 0)
                {
                    return(null);
                }
                else if (candiCount == 1)
                {
                    return(cset.candidates[0]);
                }
                else
                {
                    Collection <MessageFilter> matches = new Collection <MessageFilter>();
                    for (int i = 0; i < candiCount; ++i)
                    {
                        matches.Add(cset.candidates[i].filter);
                    }
                    throw TraceUtility.ThrowHelperError(new MultipleFilterMatchesException(SR.GetString(SR.FilterMultipleMatches), null, matches), message);
                }
            }

            EndpointAddressProcessor context = CreateProcessor(this.size);

            context.ProcessHeaders(message, cset.qnames, this.headerLookup);

            Candidate        can    = null;
            List <Candidate> candis = cset.candidates;

            for (int i = 0; i < candiCount; ++i)
            {
                if (context.TestMask(candis[i].mask))
                {
                    if (can != null)
                    {
                        Collection <MessageFilter> matches = new Collection <MessageFilter>();
                        matches.Add(can.filter);
                        matches.Add(candis[i].filter);
                        throw TraceUtility.ThrowHelperError(new MultipleFilterMatchesException(SR.GetString(SR.FilterMultipleMatches), null, matches), message);
                    }
                    can = candis[i];
                }
            }

            ReleaseProcessor(context);

            return(can);
        }
        private void InnerMatchFilters(Message message, ICollection <MessageFilter> results, CandidateSet <TFilterData> cset)
        {
            EndpointAddressProcessor processor = this.CreateProcessor(this.size);

            processor.ProcessHeaders(message, cset.qnames, this.headerLookup);
            List <Candidate <TFilterData> > candidates = cset.candidates;

            for (int i = 0; i < candidates.Count; i++)
            {
                if (processor.TestMask(candidates[i].mask))
                {
                    results.Add(candidates[i].filter);
                }
            }
            this.ReleaseProcessor(processor);
        }
        private Candidate <TFilterData> GetSingleMatch(CandidateSet <TFilterData> cset, Message message)
        {
            int count = cset.candidates.Count;

            if (cset.qnames.Count == 0)
            {
                switch (count)
                {
                case 0:
                    return(null);

                case 1:
                    return(cset.candidates[0]);
                }
                Collection <MessageFilter> filters = new Collection <MessageFilter>();
                for (int j = 0; j < count; j++)
                {
                    filters.Add(cset.candidates[j].filter);
                }
                throw TraceUtility.ThrowHelperError(new MultipleFilterMatchesException(System.ServiceModel.SR.GetString("FilterMultipleMatches"), null, filters), message);
            }
            EndpointAddressProcessor processor = this.CreateProcessor(this.size);

            processor.ProcessHeaders(message, cset.qnames, this.headerLookup);
            Candidate <TFilterData>         candidate  = null;
            List <Candidate <TFilterData> > candidates = cset.candidates;

            for (int i = 0; i < count; i++)
            {
                if (processor.TestMask(candidates[i].mask))
                {
                    if (candidate != null)
                    {
                        Collection <MessageFilter> collection2 = new Collection <MessageFilter> {
                            candidate.filter,
                            candidates[i].filter
                        };
                        throw TraceUtility.ThrowHelperError(new MultipleFilterMatchesException(System.ServiceModel.SR.GetString("FilterMultipleMatches"), null, collection2), message);
                    }
                    candidate = candidates[i];
                }
            }
            this.ReleaseProcessor(processor);
            return(candidate);
        }
Beispiel #4
0
        void InnerMatchFilters(Message message, ICollection <MessageFilter> results, CandidateSet cset)
        {
            EndpointAddressProcessor context = CreateProcessor(this.size);

            context.ProcessHeaders(message, cset.qnames, this.headerLookup);

            List <Candidate> candis = cset.candidates;

            for (int i = 0; i < candis.Count; ++i)
            {
                if (context.TestMask(candis[i].mask))
                {
                    results.Add(candis[i].filter);
                }
            }

            ReleaseProcessor(context);
        }