Ejemplo n.º 1
0
 private void ReleaseProcessor(EndpointAddressProcessor context)
 {
     lock (this.processorPool)
     {
         context.Next = this.processorPool.Target as EndpointAddressProcessor;
         this.processorPool.Target = context;
     }
 }
Ejemplo n.º 2
0
            internal EndpointAddressProcessor Pop()
            {
                EndpointAddressProcessor p = this.processor;

                if (null != p)
                {
                    this.processor = (EndpointAddressProcessor)p.next;
                    p.next         = null;
                    return(p);
                }
                return(null);
            }
            internal EndpointAddressProcessor Pop()
            {
                EndpointAddressProcessor processor = this.processor;

                if (processor != null)
                {
                    this.processor = processor.next;
                    processor.next = null;
                    return(processor);
                }
                return(null);
            }
 private void ReleaseProcessor(EndpointAddressProcessor processor)
 {
     lock (this.processorPool)
     {
         ProcessorPool <TFilterData> target = this.processorPool.Target as ProcessorPool <TFilterData>;
         if (target == null)
         {
             target = new ProcessorPool <TFilterData>();
             this.processorPool.Target = target;
         }
         target.Push(processor);
     }
 }
Ejemplo n.º 5
0
 void ReleaseProcessor(EndpointAddressProcessor processor)
 {
     lock (this.processorPool)
     {
         ProcessorPool pool = this.processorPool.Target as ProcessorPool;
         if (null == pool)
         {
             pool = new ProcessorPool();
             this.processorPool.Target = pool;
         }
         pool.Push(processor);
     }
 }
Ejemplo n.º 6
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);
        }
Ejemplo n.º 7
0
        internal bool Match(Message message)
        {
            if (this.size == 0)
            {
                return(true);
            }
            EndpointAddressProcessor context = this.CreateProcessor(this.size);

            context.ProcessHeaders(message, this.qnameLookup, this.headerLookup);
            bool flag = context.TestExact(this.mask);

            this.ReleaseProcessor(context);
            return(flag);
        }
        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);
        }
Ejemplo n.º 10
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);
        }
Ejemplo n.º 11
0
 private EndpointAddressProcessor CreateProcessor(int length)
 {
     if (this.processorPool.Target != null)
     {
         lock (this.processorPool)
         {
             object target = this.processorPool.Target;
             if (target != null)
             {
                 EndpointAddressProcessor processor = (EndpointAddressProcessor)target;
                 this.processorPool.Target = processor.Next;
                 processor.Next            = null;
                 processor.Clear(length);
                 return(processor);
             }
         }
     }
     return(new EndpointAddressProcessor(length));
 }
        private EndpointAddressProcessor CreateProcessor(int length)
        {
            EndpointAddressProcessor processor = null;

            lock (this.processorPool)
            {
                ProcessorPool <TFilterData> target = this.processorPool.Target as ProcessorPool <TFilterData>;
                if (target != null)
                {
                    processor = target.Pop();
                }
            }
            if (processor != null)
            {
                processor.Clear(length);
                return(processor);
            }
            return(new EndpointAddressProcessor(length));
        }
Ejemplo n.º 13
0
        EndpointAddressProcessor CreateProcessor(int length)
        {
            if (this.processorPool.Target != null)
            {
                lock (this.processorPool)
                {
                    object o = this.processorPool.Target;
                    if (o != null)
                    {
                        EndpointAddressProcessor p = (EndpointAddressProcessor)o;
                        this.processorPool.Target = p.Next;
                        p.Next = null;
                        p.Clear(length);
                        return(p);
                    }
                }
            }

            return(new EndpointAddressProcessor(length));
        }
Ejemplo n.º 14
0
        EndpointAddressProcessor CreateProcessor(int length)
        {
            EndpointAddressProcessor p = null;

            lock (this.processorPool)
            {
                ProcessorPool pool = this.processorPool.Target as ProcessorPool;
                if (null != pool)
                {
                    p = pool.Pop();
                }
            }

            if (null != p)
            {
                p.Clear(length);
                return(p);
            }

            return(new EndpointAddressProcessor(length));
        }
 internal void Push(EndpointAddressProcessor p)
 {
     p.next         = this.processor;
     this.processor = p;
 }