Commit 2171274d 2171274d557413c8825c1e9730e07c685dca82c3 by Christian Gerdes

Support for Unsafe Header Parsing in ServiceManagerWebTestPlugin

1 parent a80b5e4b
...@@ -22,6 +22,9 @@ using System.Text.RegularExpressions; ...@@ -22,6 +22,9 @@ using System.Text.RegularExpressions;
22 using System.Security.Cryptography.X509Certificates; 22 using System.Security.Cryptography.X509Certificates;
23 using System.Diagnostics; 23 using System.Diagnostics;
24 using System.Collections.Specialized; 24 using System.Collections.Specialized;
25 using System.Configuration;
26 using System.Net.Configuration;
27 using System.Reflection;
25 28
26 namespace LIL_VSTT_Plugins 29 namespace LIL_VSTT_Plugins
27 { 30 {
...@@ -952,6 +955,8 @@ namespace LIL_VSTT_Plugins ...@@ -952,6 +955,8 @@ namespace LIL_VSTT_Plugins
952 [Description("(C) Copyright 2015 LIGHTS IN LINE AB\r\nSätter config värden i Service Manager instansen för hela testet, finns även som loadtest plugin och gäller då hela loadtestet.")] 955 [Description("(C) Copyright 2015 LIGHTS IN LINE AB\r\nSätter config värden i Service Manager instansen för hela testet, finns även som loadtest plugin och gäller då hela loadtestet.")]
953 public class ServiceManagerWebTestPlugin : WebTestPlugin 956 public class ServiceManagerWebTestPlugin : WebTestPlugin
954 { 957 {
958 static bool unsafeHeadersSet = false;
959
955 [DisplayName("Use Expect 100 Behaviour"), DefaultValue(false)] 960 [DisplayName("Use Expect 100 Behaviour"), DefaultValue(false)]
956 [Description("Default i .NET är att detta är påslaget, default i webbläsare är dock att detta inte är påslaget. Detta plugin stänger default därför av detta (false).")] 961 [Description("Default i .NET är att detta är påslaget, default i webbläsare är dock att detta inte är påslaget. Detta plugin stänger default därför av detta (false).")]
957 public bool exp100 { get; set; } 962 public bool exp100 { get; set; }
...@@ -1004,10 +1009,14 @@ namespace LIL_VSTT_Plugins ...@@ -1004,10 +1009,14 @@ namespace LIL_VSTT_Plugins
1004 public string proxyUser { get; set; } 1009 public string proxyUser { get; set; }
1005 1010
1006 [DisplayName("User Password"), DefaultValue("")] 1011 [DisplayName("User Password"), DefaultValue("")]
1007 [Description("Sätter swedbanks proxy (temp lösning)")] 1012 [Description("Sätter lösenordet för användarnamnet för proxyn")]
1008 [Category("Web Proxy")] 1013 [Category("Web Proxy")]
1009 public string proxyPass { get; set; } 1014 public string proxyPass { get; set; }
1010 1015
1016 [DisplayName("Use Unsafe Header Parsing"), DefaultValue(false)]
1017 [Description("Enables unsafe parsing of response headers")]
1018 public bool unsafeHeaders { get; set; }
1019
1011 System.Net.WebProxy myProxy = null; 1020 System.Net.WebProxy myProxy = null;
1012 1021
1013 public override void PreWebTest(object sender, PreWebTestEventArgs e) 1022 public override void PreWebTest(object sender, PreWebTestEventArgs e)
...@@ -1040,7 +1049,43 @@ namespace LIL_VSTT_Plugins ...@@ -1040,7 +1049,43 @@ namespace LIL_VSTT_Plugins
1040 System.Net.ServicePointManager.MaxServicePointIdleTime = maxIdle; 1049 System.Net.ServicePointManager.MaxServicePointIdleTime = maxIdle;
1041 System.Net.ServicePointManager.SetTcpKeepAlive(keepAlive, timeOut, interVal); 1050 System.Net.ServicePointManager.SetTcpKeepAlive(keepAlive, timeOut, interVal);
1042 System.Net.ServicePointManager.UseNagleAlgorithm = useNagle; 1051 System.Net.ServicePointManager.UseNagleAlgorithm = useNagle;
1043 if(useTls12) System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls12; 1052
1053 if (useTls12) System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls12;
1054 if (unsafeHeaders && !unsafeHeadersSet)
1055 {
1056 ToggleAllowUnsafeHeaderParsing(true);
1057 unsafeHeadersSet = true;
1058 }
1059 }
1060
1061 public static bool ToggleAllowUnsafeHeaderParsing(bool enable)
1062 {
1063 //Get the assembly that contains the internal class
1064 Assembly assembly = Assembly.GetAssembly(typeof(SettingsSection));
1065 if (assembly != null)
1066 {
1067 //Use the assembly in order to get the internal type for the internal class
1068 Type settingsSectionType = assembly.GetType("System.Net.Configuration.SettingsSectionInternal");
1069 if (settingsSectionType != null)
1070 {
1071 //Use the internal static property to get an instance of the internal settings class.
1072 //If the static instance isn't created already invoking the property will create it for us.
1073 object anInstance = settingsSectionType.InvokeMember("Section",
1074 BindingFlags.Static | BindingFlags.GetProperty | BindingFlags.NonPublic, null, null, new object[] { });
1075 if (anInstance != null)
1076 {
1077 //Locate the private bool field that tells the framework if unsafe header parsing is allowed
1078 FieldInfo aUseUnsafeHeaderParsing = settingsSectionType.GetField("useUnsafeHeaderParsing", BindingFlags.NonPublic | BindingFlags.Instance);
1079 if (aUseUnsafeHeaderParsing != null)
1080 {
1081 aUseUnsafeHeaderParsing.SetValue(anInstance, enable);
1082 return true;
1083 }
1084
1085 }
1086 }
1087 }
1088 return false;
1044 } 1089 }
1045 } 1090 }
1046 1091
......