[sgen] Make sure we don't sweep a block if we're not supposed to
[mono.git] / mcs / class / System.ServiceModel / System.ServiceModel.Description / ClientCredentials.cs
1 //
2 // ClientCredentials.cs
3 //
4 // Author:
5 //      Atsushi Enomoto <atsushi@ximian.com>
6 //
7 // Copyright (C) 2005-2006 Novell, Inc.  http://www.novell.com
8 //
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:
16 // 
17 // The above copyright notice and this permission notice shall be
18 // included in all copies or substantial portions of the Software.
19 // 
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.
27 //
28 using System;
29 using System.Collections.Generic;
30 using System.ServiceModel.Channels;
31 using System.ServiceModel.Description;
32 using System.ServiceModel.Dispatcher;
33 using System.ServiceModel.Security;
34 #if !MOBILE
35 using System.IdentityModel.Selectors;
36 using System.IdentityModel.Tokens;
37 using System.ServiceModel.Security.Tokens;
38 #endif
39
40 namespace System.ServiceModel.Description
41 {
42         public class ClientCredentials
43 #if MOBILE || XAMMAC_4_5
44                 : IEndpointBehavior
45 #else
46                 : SecurityCredentialsManager, IEndpointBehavior
47 #endif
48         {
49                 public ClientCredentials ()
50                 {
51                 }
52
53                 [MonoTODO]
54                 protected ClientCredentials (ClientCredentials source)
55                 {
56                         userpass = source.userpass.Clone ();
57                         digest = source.digest.Clone ();
58                         initiator = source.initiator.Clone ();
59                         recipient = source.recipient.Clone ();
60                         windows = source.windows.Clone ();
61 #if !MOBILE
62                         issued_token = source.issued_token.Clone ();
63                         peer = source.peer.Clone ();
64                         support_interactive = source.support_interactive;
65 #endif
66                 }
67
68                 UserNamePasswordClientCredential userpass =
69                         new UserNamePasswordClientCredential ();
70
71                 HttpDigestClientCredential digest =
72                         new HttpDigestClientCredential ();
73                 X509CertificateInitiatorClientCredential initiator =
74                         new X509CertificateInitiatorClientCredential ();
75                 X509CertificateRecipientClientCredential recipient =
76                         new X509CertificateRecipientClientCredential ();
77                 WindowsClientCredential windows =
78                         new WindowsClientCredential ();
79
80                 public X509CertificateInitiatorClientCredential ClientCertificate {
81                         get { return initiator; }
82                 }
83
84                 public HttpDigestClientCredential HttpDigest {
85                         get { return digest; }
86                 }
87
88                 public X509CertificateRecipientClientCredential ServiceCertificate {
89                         get { return recipient; }
90                 }
91
92                 public WindowsClientCredential Windows {
93                         get { return windows; }
94                 }
95
96 #if !MOBILE
97                 IssuedTokenClientCredential issued_token =
98                         new IssuedTokenClientCredential ();
99                 PeerCredential peer = new PeerCredential ();
100                 bool support_interactive = true;
101
102                 public IssuedTokenClientCredential IssuedToken {
103                         get { return issued_token; }
104                 }
105
106                 public PeerCredential Peer {
107                         get { return peer; }
108                 }
109
110                 public bool SupportInteractive {
111                         get { return support_interactive; }
112                         set { support_interactive = value; }
113                 }
114 #endif
115
116                 public UserNamePasswordClientCredential UserName {
117                         get { return userpass; }
118                 }
119
120                 public ClientCredentials Clone ()
121                 {
122                         ClientCredentials ret = CloneCore ();
123                         if (ret.GetType () != GetType ())
124                                 throw new NotImplementedException ("CloneCore() must be implemented to return an instance of the same type in this custom ClientCredentials type.");
125                         return ret;
126                 }
127
128                 protected virtual ClientCredentials CloneCore ()
129                 {
130                         return new ClientCredentials (this);
131                 }
132
133 #if !MOBILE && !XAMMAC_4_5
134                 public override SecurityTokenManager CreateSecurityTokenManager ()
135                 {
136                         return new ClientCredentialsSecurityTokenManager (this);
137                 }
138
139                 [MonoTODO]
140                 protected virtual SecurityToken GetInfoCardSecurityToken (
141                         bool requiresInfoCard, CardSpacePolicyElement [] chain,
142                         SecurityTokenSerializer tokenSerializer)
143                 {
144                         throw new NotImplementedException ();
145                 }
146 #endif
147
148                 void IEndpointBehavior.ApplyDispatchBehavior (ServiceEndpoint endpoint,
149                         EndpointDispatcher dispatcher)
150                 {
151                         // documented as to have no effect.
152                 }
153
154                 void IEndpointBehavior.AddBindingParameters (ServiceEndpoint endpoint,
155                         BindingParameterCollection parameters)
156                 {
157                         parameters.Add (this);
158                 }
159
160                 [MonoTODO]
161                 public virtual void ApplyClientBehavior (
162                         ServiceEndpoint endpoint, ClientRuntime behavior)
163                 {
164                         if (endpoint == null)
165                                 throw new ArgumentNullException ("endpoint");
166                         if (behavior == null)
167                                 throw new ArgumentNullException ("behavior");
168
169                         // FIXME: apply to endpoint when there is not security binding element.
170                 }
171
172                 void IEndpointBehavior.Validate (ServiceEndpoint endpoint)
173                 {
174                         // documented as reserved for future use.
175                 }
176         }
177 }