3 using System.Xml.XPath;
6 using Mono.Linker.Steps;
10 namespace Mono.Tuner {
12 public class PreserveHttps : BaseStep {
14 static string [] types = new [] {
15 "System.Net.WebRequest",
16 "System.Net.WebClient",
17 "System.Net.Security.RemoteCertificateValidationCallback",
18 "System.Web.Services.Protocols.WebClientProtocol",
19 "System.Security.Cryptography.X509Certificates.X509Certificate",
20 "System.ServiceModel.ClientBase`1",
21 "System.Web.Services.WebServiceBindingAttribute",
22 "System.Web.Services.Protocols.SoapHttpClientProtocol",
23 "System.Xml.XmlDocument"
28 protected override void ProcessAssembly (AssemblyDefinition assembly)
33 if (Profile.IsSdkAssembly (assembly))
36 if (HasNeededReference (assembly.MainModule))
40 static bool HasNeededReference (ModuleDefinition module)
42 foreach (var type in types)
43 if (module.HasTypeReference (type))
49 protected override void EndProcess ()
54 var mono_security = Context.Resolve ("Mono.Security");
55 if (mono_security == null)
58 if (Annotations.GetAction (mono_security) != AssemblyAction.Link)
61 var xml_preserve = CreatePreserveStep ();
62 Context.Pipeline.AddStepAfter (typeof (PreserveHttps), xml_preserve);
63 // Context.Pipeline.AddStepAfter (xml_preserve, new PreserveCrypto ());
66 static IStep CreatePreserveStep ()
68 return new ResolveFromXmlStep (
70 new StringReader (descriptor)));
73 const string descriptor = @"<?xml version=""1.0"" encoding=""utf-8"" ?>
75 <assembly fullname=""Mono.Security"">
76 <type fullname=""Mono.Security.Protocol.Tls.HttpsClientStream"" />
77 <type fullname=""Mono.Security.Protocol.Tls.SslClientStream"" />
78 <type fullname=""Mono.Security.Protocol.Tls.SslStreamBase"" />