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.FilterMultipleMatches, null, matches), message); } } EndpointAddressProcessor context = CreateProcessor(size); context.ProcessHeaders(message, cset.qnames, 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.FilterMultipleMatches, null, matches), message); } can = candis[i]; } } ReleaseProcessor(context); return(can); }
void InnerMatchFilters(Message message, ICollection <MessageFilter> results, CandidateSet cset) { EndpointAddressProcessor context = CreateProcessor(size); context.ProcessHeaders(message, cset.qnames, 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); }