Updates referencesource to .NET 4.7
[mono.git] / mcs / class / referencesource / System.ServiceModel / System / ServiceModel / Configuration / SslStreamSecurityElement.cs
1 //------------------------------------------------------------------------------
2 // Copyright (c) Microsoft Corporation.  All rights reserved.
3 //------------------------------------------------------------------------------
4
5 namespace System.ServiceModel.Configuration
6 {
7     using System.Configuration;
8     using System.Security.Authentication;
9     using System.ServiceModel.Channels;
10     using System.ServiceModel.Security;
11
12     public sealed partial class SslStreamSecurityElement : BindingElementExtensionElement
13     {
14         public SslStreamSecurityElement()
15         {
16         }
17
18         [ConfigurationProperty(
19             ConfigurationStrings.RequireClientCertificate, DefaultValue = TransportDefaults.RequireClientCertificate)]
20         public bool RequireClientCertificate
21         {
22             get { return (bool)base[ConfigurationStrings.RequireClientCertificate]; }
23             set { base[ConfigurationStrings.RequireClientCertificate] = value; }
24         }
25
26         [ConfigurationProperty(ConfigurationStrings.SslProtocols, DefaultValue = TransportDefaults.SslProtocols)]
27         [ServiceModelEnumValidator(typeof(SslProtocolsHelper))]
28         public SslProtocols SslProtocols
29         {
30             get { return (SslProtocols)base[ConfigurationStrings.SslProtocols]; }
31             private set { base[ConfigurationStrings.SslProtocols] = value; }
32         }
33
34
35         public override void ApplyConfiguration(BindingElement bindingElement)
36         {
37             base.ApplyConfiguration(bindingElement);
38             SslStreamSecurityBindingElement sslBindingElement = 
39                 (SslStreamSecurityBindingElement)bindingElement;
40             sslBindingElement.RequireClientCertificate = this.RequireClientCertificate;
41             sslBindingElement.SslProtocols = this.SslProtocols;
42         }
43
44         protected internal override BindingElement CreateBindingElement()
45         {
46             SslStreamSecurityBindingElement sslBindingElement 
47                 = new SslStreamSecurityBindingElement();
48
49             this.ApplyConfiguration(sslBindingElement);
50             return sslBindingElement;
51         }
52
53         public override Type BindingElementType
54         {
55             get { return typeof(SslStreamSecurityBindingElement); }
56         }
57
58         public override void CopyFrom(ServiceModelExtensionElement from)
59         {
60             base.CopyFrom(from);
61
62             SslStreamSecurityElement source = (SslStreamSecurityElement)from;
63 #pragma warning suppress 56506 // Microsoft, base.CopyFrom() validates the argument
64             this.RequireClientCertificate = source.RequireClientCertificate;
65             this.SslProtocols = source.SslProtocols;
66         }
67
68         protected internal override void InitializeFrom(BindingElement bindingElement)
69         {
70             base.InitializeFrom(bindingElement);
71             SslStreamSecurityBindingElement sslBindingElement 
72                 = (SslStreamSecurityBindingElement)bindingElement;
73             SetPropertyValueIfNotDefaultValue(ConfigurationStrings.RequireClientCertificate, sslBindingElement.RequireClientCertificate);
74             SetPropertyValueIfNotDefaultValue(ConfigurationStrings.SslProtocols, sslBindingElement.SslProtocols);
75         }
76     }
77 }
78
79
80