2 // CommunicationSecurityTokenProvider.cs
5 // Atsushi Enomoto <atsushi@ximian.com>
7 // Copyright (C) 2006 Novell, Inc. http://www.novell.com
9 // Permission is hereby granted, free of charge, to any person obtaining
10 // a copy of this software and associated documentation files (the
11 // "Software"), to deal in the Software without restriction, including
12 // without limitation the rights to use, copy, modify, merge, publish,
13 // distribute, sublicense, and/or sell copies of the Software, and to
14 // permit persons to whom the Software is furnished to do so, subject to
15 // the following conditions:
17 // The above copyright notice and this permission notice shall be
18 // included in all copies or substantial portions of the Software.
20 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
21 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
22 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
23 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
24 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
25 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
26 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
29 using System.Collections.Generic;
30 using System.Net.Security;
31 using System.IdentityModel.Selectors;
32 using System.IdentityModel.Tokens;
33 using System.Security.Cryptography.X509Certificates;
34 using System.ServiceModel.Channels;
35 using System.ServiceModel.Description;
36 using System.ServiceModel.Security;
37 using System.ServiceModel.Security.Tokens;
39 using ReqType = System.ServiceModel.Security.Tokens.ServiceModelSecurityTokenRequirement;
41 namespace System.ServiceModel.Security.Tokens
43 abstract class CommunicationSecurityTokenProvider : SecurityTokenProvider, ICommunicationObject
45 public abstract ProviderCommunicationObject Communication { get; }
47 protected override SecurityToken GetTokenCore (TimeSpan timeout)
49 if (State != CommunicationState.Opened)
50 throw new InvalidOperationException ("Open the provider before issuing actual request to get token.");
51 return GetOnlineToken (timeout);
54 public abstract SecurityToken GetOnlineToken (TimeSpan timeout);
56 public CommunicationState State {
57 get { return Communication.State; }
62 Communication.Abort ();
67 Communication.Open ();
70 public void Open (TimeSpan timeout)
72 Communication.Open (timeout);
75 public IAsyncResult BeginOpen (AsyncCallback callback, object state)
77 return Communication.BeginOpen (callback, state);
80 public IAsyncResult BeginOpen (TimeSpan timeout, AsyncCallback callback, object state)
82 return Communication.BeginOpen (timeout, callback, state);
85 public void EndOpen (IAsyncResult result)
87 Communication.EndOpen (result);
92 Communication.Close ();
95 public void Close (TimeSpan timeout)
97 Communication.Close (timeout);
100 public IAsyncResult BeginClose (AsyncCallback callback, object state)
102 return Communication.BeginClose (callback, state);
105 public IAsyncResult BeginClose (TimeSpan timeout, AsyncCallback callback, object state)
107 return Communication.BeginClose (timeout, callback, state);
110 public void EndClose (IAsyncResult result)
112 Communication.EndClose (result);
115 public event EventHandler Opening {
116 add { Communication.Opening += value; }
117 remove { Communication.Opening -= value; }
120 public event EventHandler Opened {
121 add { Communication.Opened += value; }
122 remove { Communication.Opened -= value; }
125 public event EventHandler Closing {
126 add { Communication.Closing += value; }
127 remove { Communication.Closing -= value; }
130 public event EventHandler Closed {
131 add { Communication.Closed += value; }
132 remove { Communication.Closed -= value; }
135 public event EventHandler Faulted {
136 add { Communication.Faulted += value; }
137 remove { Communication.Faulted -= value; }