//
// BasicHttpBinding.cs
//
+// See BasicHttpBinding_4_5.cs and HttpBindingBase.cs for the .NET 4.5
+// version of this class.
+//
// Author:
// Atsushi Enomoto <atsushi@ximian.com>
//
// Copyright (C) 2005-2006 Novell, Inc. http://www.novell.com
+// Copyright 2011 Xamarin Inc (http://www.xamarin.com).
//
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
+#if !NET_4_5 && !MOBILE
using System;
using System.Collections.Generic;
using System.Net;
XmlDictionaryReaderQuotas reader_quotas
= new XmlDictionaryReaderQuotas ();
EnvelopeVersion env_version = EnvelopeVersion.Soap11;
- Encoding text_encoding = new UTF8Encoding ();
+ static readonly Encoding default_text_encoding = new UTF8Encoding ();
+ Encoding text_encoding = default_text_encoding;
TransferMode transfer_mode
= TransferMode.Buffered;
bool use_default_web_proxy = true;
set { bypass_proxy_on_local = value; }
}
+#if NET_2_1
+ public bool EnableHttpCookieContainer {
+ get; set;
+ }
+#elif NET_4_5
+ [Obsolete ("Use AllowCookies.")]
+ public bool EnableHttpCookieContainer {
+ get { return AllowCookies; }
+ set { AllowCookies = value; }
+ }
+#endif
+
public HostNameComparisonMode HostNameComparisonMode {
get { return host_name_comparison_mode; }
set { host_name_comparison_mode = value; }
get { return env_version; }
}
+ internal static Encoding DefaultTextEncoding {
+ get { return default_text_encoding; }
+ }
+
public Encoding TextEncoding {
get { return text_encoding; }
set { text_encoding = value; }
public override BindingElementCollection
CreateBindingElements ()
{
+ var list = new List<BindingElement> ();
+
+ var security = CreateSecurityBindingElement ();
+ if (security != null)
+ list.Add (security);
+
+#if NET_2_1
+ if (EnableHttpCookieContainer)
+ list.Add (new HttpCookieContainerBindingElement ());
+#endif
+
+ list.Add (BuildMessageEncodingBindingElement ());
+ list.Add (GetTransport ());
+
+ return new BindingElementCollection (list.ToArray ());
+ }
+
+ SecurityBindingElement CreateSecurityBindingElement ()
+ {
+ SecurityBindingElement element;
switch (Security.Mode) {
#if !NET_2_1
case BasicHttpSecurityMode.Message:
if (Security.Message.ClientCredentialType != BasicHttpMessageCredentialType.Certificate)
throw new InvalidOperationException ("When Message security is enabled in a BasicHttpBinding, the message security credential type must be BasicHttpMessageCredentialType.Certificate.");
- goto case BasicHttpSecurityMode.TransportWithMessageCredential;
+ element = SecurityBindingElement.CreateMutualCertificateBindingElement (
+ MessageSecurityVersion.WSSecurity10WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11BasicSecurityProfile10);
+ break;
+
case BasicHttpSecurityMode.TransportWithMessageCredential:
- SecurityBindingElement sec;
if (Security.Message.ClientCredentialType != BasicHttpMessageCredentialType.Certificate)
// FIXME: pass proper security token parameters.
- sec = SecurityBindingElement.CreateCertificateOverTransportBindingElement ();
+ element = SecurityBindingElement.CreateCertificateOverTransportBindingElement ();
else
- sec = new AsymmetricSecurityBindingElement ();
- return new BindingElementCollection (new BindingElement [] {sec, BuildMessageEncodingBindingElement (), GetTransport ()});
+ element = new AsymmetricSecurityBindingElement ();
+ break;
#endif
- default:
- return new BindingElementCollection (new BindingElement [] {
- BuildMessageEncodingBindingElement (),
- GetTransport ()});
+ default:
+ return null;
}
+#if !NET_2_1
+ element.SetKeyDerivation (false);
+ element.SecurityHeaderLayout = SecurityHeaderLayout.Lax;
+#endif
+ return element;
}
MessageEncodingBindingElement BuildMessageEncodingBindingElement ()
h.ProxyAddress = ProxyAddress;
h.UseDefaultWebProxy = UseDefaultWebProxy;
h.TransferMode = TransferMode;
+#if NET_4_0
+ h.ExtendedProtectionPolicy = Security.Transport.ExtendedProtectionPolicy;
+#endif
-#if !NET_2_1
- switch (Security.Mode) {
- case BasicHttpSecurityMode.Transport:
- switch (Security.Transport.ClientCredentialType) {
- case HttpClientCredentialType.Certificate:
- var https = (HttpsTransportBindingElement) h;
- https.RequireClientCertificate = true;
- break;
- }
+#if !NET_2_1 || MOBILE
+ switch (Security.Transport.ClientCredentialType) {
+ case HttpClientCredentialType.Basic:
+ h.AuthenticationScheme = AuthenticationSchemes.Basic;
break;
- case BasicHttpSecurityMode.TransportCredentialOnly:
- switch (Security.Transport.ClientCredentialType) {
- case HttpClientCredentialType.Basic:
- h.AuthenticationScheme = AuthenticationSchemes.Basic;
- break;
- case HttpClientCredentialType.Ntlm:
- h.AuthenticationScheme = AuthenticationSchemes.Ntlm;
- break;
- case HttpClientCredentialType.Windows:
- h.AuthenticationScheme = AuthenticationSchemes.Negotiate;
- break;
- case HttpClientCredentialType.Digest:
- h.AuthenticationScheme = AuthenticationSchemes.Digest;
+ case HttpClientCredentialType.Ntlm:
+ h.AuthenticationScheme = AuthenticationSchemes.Ntlm;
+ break;
+ case HttpClientCredentialType.Windows:
+ h.AuthenticationScheme = AuthenticationSchemes.Negotiate;
+ break;
+ case HttpClientCredentialType.Digest:
+ h.AuthenticationScheme = AuthenticationSchemes.Digest;
+ break;
+ case HttpClientCredentialType.Certificate:
+ switch (Security.Mode) {
+ case BasicHttpSecurityMode.Transport:
+ (h as HttpsTransportBindingElement).RequireClientCertificate = true;
break;
- case HttpClientCredentialType.Certificate:
+ case BasicHttpSecurityMode.TransportCredentialOnly:
throw new InvalidOperationException ("Certificate-based client authentication is not supported by 'TransportCredentialOnly' mode.");
}
break;
}
}
}
+#endif