1 //-----------------------------------------------------------------------------
2 // Copyright (c) Microsoft Corporation.  All rights reserved.
3 //-----------------------------------------------------------------------------
4 
5 namespace System.ServiceModel.Dispatcher
6 {
7     using System.Collections.Generic;
8     using System.ServiceModel.Channels;
9     using System.Runtime.Serialization;
10 
11     class EndpointFilterProvider
12     {
13         SynchronizedCollection<string> initiatingActions;
14         object mutex;
15 
EndpointFilterProvider(params string[] initiatingActions)16         public EndpointFilterProvider(params string[] initiatingActions)
17         {
18             this.mutex = new object();
19             this.initiatingActions = new SynchronizedCollection<string>(this.mutex, initiatingActions);
20         }
21 
22         public SynchronizedCollection<string> InitiatingActions
23         {
24             get { return this.initiatingActions; }
25         }
26 
CreateFilter(out int priority)27         public MessageFilter CreateFilter(out int priority)
28         {
29             lock (this.mutex)
30             {
31                 priority = 1;
32                 if (initiatingActions.Count == 0)
33                     return new MatchNoneMessageFilter();
34 
35                 string[] actions = new string[initiatingActions.Count];
36                 int index = 0;
37                 for (int i = 0; i < initiatingActions.Count; i++)
38                 {
39                     string currentAction = initiatingActions[i];
40                     if (currentAction == MessageHeaders.WildcardAction)
41                     {
42                         priority = 0;
43                         return new MatchAllMessageFilter();
44                     }
45                     actions[index] = currentAction;
46                     ++index;
47                 }
48 
49                 return new ActionMessageFilter(actions);
50             }
51         }
52     }
53 }
54 
55