1 // 2 // System.Web.Configuration.HttpRuntimeSection 3 // 4 // Authors: 5 // Chris Toshok (toshok@ximian.com) 6 // 7 // (C) 2005 Novell, Inc (http://www.novell.com) 8 // 9 10 // 11 // Permission is hereby granted, free of charge, to any person obtaining 12 // a copy of this software and associated documentation files (the 13 // "Software"), to deal in the Software without restriction, including 14 // without limitation the rights to use, copy, modify, merge, publish, 15 // distribute, sublicense, and/or sell copies of the Software, and to 16 // permit persons to whom the Software is furnished to do so, subject to 17 // the following conditions: 18 // 19 // The above copyright notice and this permission notice shall be 20 // included in all copies or substantial portions of the Software. 21 // 22 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 23 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 24 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 25 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 26 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 27 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 28 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 29 // 30 31 32 using System; 33 using System.ComponentModel; 34 using System.Configuration; 35 36 namespace System.Web.Configuration 37 { 38 public sealed class HttpRuntimeSection : ConfigurationSection 39 { 40 static ConfigurationProperty apartmentThreadingProp; 41 static ConfigurationProperty appRequestQueueLimitProp; 42 static ConfigurationProperty delayNotificationTimeoutProp; 43 static ConfigurationProperty enableProp; 44 static ConfigurationProperty enableHeaderCheckingProp; 45 static ConfigurationProperty enableKernelOutputCacheProp; 46 static ConfigurationProperty enableVersionHeaderProp; 47 static ConfigurationProperty executionTimeoutProp; 48 static ConfigurationProperty maxRequestLengthProp; 49 static ConfigurationProperty maxWaitChangeNotificationProp; 50 static ConfigurationProperty minFreeThreadsProp; 51 static ConfigurationProperty minLocalRequestFreeThreadsProp; 52 static ConfigurationProperty requestLengthDiskThresholdProp; 53 static ConfigurationProperty requireRootedSaveAsPathProp; 54 static ConfigurationProperty sendCacheControlHeaderProp; 55 static ConfigurationProperty shutdownTimeoutProp; 56 static ConfigurationProperty useFullyQualifiedRedirectUrlProp; 57 static ConfigurationProperty waitChangeNotificationProp; 58 static ConfigurationProperty requestPathInvalidCharactersProp; 59 static ConfigurationProperty requestValidationTypeProp; 60 static ConfigurationProperty requestValidationModeProp; 61 static ConfigurationProperty maxQueryStringLengthProp; 62 static ConfigurationProperty maxUrlLengthProp; 63 static ConfigurationProperty encoderTypeProp; 64 static ConfigurationProperty relaxedUrlToFileSystemMappingProp; 65 static ConfigurationProperty targetFrameworkProp; 66 static ConfigurationProperty allowDynamicModuleRegistrationProp; 67 static ConfigurationPropertyCollection properties; 68 HttpRuntimeSection()69 static HttpRuntimeSection () 70 { 71 apartmentThreadingProp = new ConfigurationProperty ("apartmentThreading", typeof (bool), false); 72 appRequestQueueLimitProp = new ConfigurationProperty ("appRequestQueueLimit", typeof (int), 5000, 73 TypeDescriptor.GetConverter (typeof (int)), 74 new IntegerValidator (1, Int32.MaxValue), 75 ConfigurationPropertyOptions.None); 76 delayNotificationTimeoutProp = new ConfigurationProperty ("delayNotificationTimeout", typeof (TimeSpan), TimeSpan.FromSeconds (5), 77 PropertyHelper.TimeSpanSecondsConverter, 78 PropertyHelper.DefaultValidator, 79 ConfigurationPropertyOptions.None); 80 enableProp = new ConfigurationProperty ("enable", typeof (bool), true); 81 enableHeaderCheckingProp = new ConfigurationProperty ("enableHeaderChecking", typeof (bool), true); 82 enableKernelOutputCacheProp = new ConfigurationProperty ("enableKernelOutputCache", typeof (bool), true); 83 enableVersionHeaderProp = new ConfigurationProperty ("enableVersionHeader", typeof (bool), true); 84 executionTimeoutProp = new ConfigurationProperty ("executionTimeout", typeof (TimeSpan), TimeSpan.FromSeconds (110), 85 PropertyHelper.TimeSpanSecondsConverter, 86 PropertyHelper.PositiveTimeSpanValidator, 87 ConfigurationPropertyOptions.None); 88 maxRequestLengthProp = new ConfigurationProperty ("maxRequestLength", typeof (int), 4096, 89 TypeDescriptor.GetConverter (typeof (int)), 90 PropertyHelper.IntFromZeroToMaxValidator, 91 ConfigurationPropertyOptions.None); 92 maxWaitChangeNotificationProp = new ConfigurationProperty ("maxWaitChangeNotification", typeof (int), 0, 93 TypeDescriptor.GetConverter (typeof (int)), 94 PropertyHelper.IntFromZeroToMaxValidator, 95 ConfigurationPropertyOptions.None); 96 minFreeThreadsProp = new ConfigurationProperty ("minFreeThreads", typeof (int), 8, 97 TypeDescriptor.GetConverter (typeof (int)), 98 PropertyHelper.IntFromZeroToMaxValidator, 99 ConfigurationPropertyOptions.None); 100 minLocalRequestFreeThreadsProp = new ConfigurationProperty ("minLocalRequestFreeThreads", typeof (int), 4, 101 TypeDescriptor.GetConverter (typeof (int)), 102 PropertyHelper.IntFromZeroToMaxValidator, 103 ConfigurationPropertyOptions.None); 104 requestLengthDiskThresholdProp = new ConfigurationProperty ("requestLengthDiskThreshold", typeof (int), 80, 105 TypeDescriptor.GetConverter (typeof (int)), 106 new IntegerValidator (1, Int32.MaxValue), 107 ConfigurationPropertyOptions.None); 108 requireRootedSaveAsPathProp = new ConfigurationProperty ("requireRootedSaveAsPath", typeof (bool), true); 109 sendCacheControlHeaderProp = new ConfigurationProperty ("sendCacheControlHeader", typeof (bool), true); 110 shutdownTimeoutProp = new ConfigurationProperty ("shutdownTimeout", typeof (TimeSpan), TimeSpan.FromSeconds (90), 111 PropertyHelper.TimeSpanSecondsConverter, 112 PropertyHelper.DefaultValidator, 113 ConfigurationPropertyOptions.None); 114 useFullyQualifiedRedirectUrlProp = new ConfigurationProperty ("useFullyQualifiedRedirectUrl", typeof (bool), false); 115 waitChangeNotificationProp = new ConfigurationProperty ("waitChangeNotification", typeof (int), 0, 116 TypeDescriptor.GetConverter (typeof (int)), 117 PropertyHelper.IntFromZeroToMaxValidator, 118 ConfigurationPropertyOptions.None); 119 requestPathInvalidCharactersProp = new ConfigurationProperty ("requestPathInvalidCharacters", typeof (string), "<,>,*,%,&,:,\\,?"); 120 requestValidationTypeProp = new ConfigurationProperty ("requestValidationType", typeof (string),"System.Web.Util.RequestValidator", 121 TypeDescriptor.GetConverter (typeof (string)), 122 PropertyHelper.NonEmptyStringValidator, 123 ConfigurationPropertyOptions.None); 124 requestValidationModeProp = new ConfigurationProperty ("requestValidationMode", typeof (Version), new Version (4, 0), 125 PropertyHelper.VersionConverter, 126 PropertyHelper.DefaultValidator, 127 ConfigurationPropertyOptions.None); 128 maxQueryStringLengthProp = new ConfigurationProperty ("maxQueryStringLength", typeof (int), 2048, 129 TypeDescriptor.GetConverter (typeof (int)), 130 PropertyHelper.IntFromZeroToMaxValidator, 131 ConfigurationPropertyOptions.None); 132 maxUrlLengthProp = new ConfigurationProperty ("maxUrlLength", typeof (int), 260, 133 TypeDescriptor.GetConverter (typeof (int)), 134 PropertyHelper.IntFromZeroToMaxValidator, 135 ConfigurationPropertyOptions.None); 136 encoderTypeProp = new ConfigurationProperty ("encoderType", typeof (string), "System.Web.Util.HttpEncoder", 137 TypeDescriptor.GetConverter (typeof (string)), 138 PropertyHelper.NonEmptyStringValidator, 139 ConfigurationPropertyOptions.None); 140 relaxedUrlToFileSystemMappingProp = new ConfigurationProperty ("relaxedUrlToFileSystemMapping", typeof (bool), false); 141 targetFrameworkProp = new ConfigurationProperty ("targetFramework", typeof (Version), new Version (4, 0), 142 PropertyHelper.VersionConverter, 143 PropertyHelper.DefaultValidator, 144 ConfigurationPropertyOptions.None); 145 allowDynamicModuleRegistrationProp = new ConfigurationProperty ("allowDynamicModuleRegistration", typeof(bool), true, 146 ConfigurationPropertyOptions.None); 147 148 properties = new ConfigurationPropertyCollection(); 149 properties.Add (apartmentThreadingProp); 150 properties.Add (appRequestQueueLimitProp); 151 properties.Add (delayNotificationTimeoutProp); 152 properties.Add (enableProp); 153 properties.Add (enableHeaderCheckingProp); 154 properties.Add (enableKernelOutputCacheProp); 155 properties.Add (enableVersionHeaderProp); 156 properties.Add (executionTimeoutProp); 157 properties.Add (maxRequestLengthProp); 158 properties.Add (maxWaitChangeNotificationProp); 159 properties.Add (minFreeThreadsProp); 160 properties.Add (minLocalRequestFreeThreadsProp); 161 properties.Add (requestLengthDiskThresholdProp); 162 properties.Add (requireRootedSaveAsPathProp); 163 properties.Add (sendCacheControlHeaderProp); 164 properties.Add (shutdownTimeoutProp); 165 properties.Add (useFullyQualifiedRedirectUrlProp); 166 properties.Add (waitChangeNotificationProp); 167 properties.Add (requestPathInvalidCharactersProp); 168 properties.Add (requestValidationTypeProp); 169 properties.Add (requestValidationModeProp); 170 properties.Add (maxQueryStringLengthProp); 171 properties.Add (maxUrlLengthProp); 172 properties.Add (encoderTypeProp); 173 properties.Add (relaxedUrlToFileSystemMappingProp); 174 properties.Add (targetFrameworkProp); 175 properties.Add (allowDynamicModuleRegistrationProp); 176 } 177 HttpRuntimeSection()178 public HttpRuntimeSection() 179 { 180 } 181 182 [ConfigurationProperty ("apartmentThreading", DefaultValue = "False")] 183 public bool ApartmentThreading { 184 get { return (bool) base[apartmentThreadingProp]; } 185 set { base[apartmentThreadingProp] = value; } 186 } 187 188 [IntegerValidator (MinValue = 1, MaxValue = Int32.MaxValue)] 189 [ConfigurationProperty ("appRequestQueueLimit", DefaultValue = "5000")] 190 public int AppRequestQueueLimit { 191 get { return (int) base[appRequestQueueLimitProp]; } 192 set { base[appRequestQueueLimitProp] = value; } 193 } 194 195 [TypeConverter (typeof (TimeSpanSecondsConverter))] 196 [ConfigurationProperty ("delayNotificationTimeout", DefaultValue = "00:00:05")] 197 public TimeSpan DelayNotificationTimeout { 198 get { return (TimeSpan) base[delayNotificationTimeoutProp]; } 199 set { base[delayNotificationTimeoutProp] = value; } 200 } 201 202 [ConfigurationProperty ("enable", DefaultValue = "True")] 203 public bool Enable { 204 get { return (bool) base[enableProp]; } 205 set { base[enableProp] = value; } 206 } 207 208 [ConfigurationProperty ("enableHeaderChecking", DefaultValue = "True")] 209 public bool EnableHeaderChecking { 210 get { return (bool) base[enableHeaderCheckingProp]; } 211 set { base[enableHeaderCheckingProp] = value; } 212 } 213 214 [ConfigurationProperty ("enableKernelOutputCache", DefaultValue = "True")] 215 public bool EnableKernelOutputCache { 216 get { return (bool) base[enableKernelOutputCacheProp]; } 217 set { base[enableKernelOutputCacheProp] = value; } 218 } 219 220 [ConfigurationProperty ("enableVersionHeader", DefaultValue = "True")] 221 public bool EnableVersionHeader { 222 get { return (bool) base[enableVersionHeaderProp]; } 223 set { base[enableVersionHeaderProp] = value; } 224 } 225 226 [TypeConverter (typeof (TimeSpanSecondsConverter))] 227 [TimeSpanValidator (MinValueString = "00:00:00")] 228 [ConfigurationProperty ("executionTimeout", DefaultValue = "00:01:50")] 229 public TimeSpan ExecutionTimeout { 230 get { return (TimeSpan) base[executionTimeoutProp]; } 231 set { base[executionTimeoutProp] = value; } 232 } 233 234 [IntegerValidator (MinValue = 0, MaxValue = Int32.MaxValue)] 235 [ConfigurationProperty ("maxRequestLength", DefaultValue = "4096")] 236 public int MaxRequestLength { 237 get { return (int) base[maxRequestLengthProp]; } 238 set { base[maxRequestLengthProp] = value; } 239 } 240 241 [IntegerValidator (MinValue = 0, MaxValue = Int32.MaxValue)] 242 [ConfigurationProperty ("maxWaitChangeNotification", DefaultValue = "0")] 243 public int MaxWaitChangeNotification { 244 get { return (int) base[maxWaitChangeNotificationProp]; } 245 set { base[maxWaitChangeNotificationProp] = value; } 246 } 247 248 [IntegerValidator (MinValue = 0, MaxValue = Int32.MaxValue)] 249 [ConfigurationProperty ("minFreeThreads", DefaultValue = "8")] 250 public int MinFreeThreads { 251 get { return (int) base[minFreeThreadsProp]; } 252 set { base[minFreeThreadsProp] = value; } 253 } 254 255 [IntegerValidator (MinValue = 0, MaxValue = Int32.MaxValue)] 256 [ConfigurationProperty ("minLocalRequestFreeThreads", DefaultValue = "4")] 257 public int MinLocalRequestFreeThreads { 258 get { return (int) base[minLocalRequestFreeThreadsProp]; } 259 set { base[minLocalRequestFreeThreadsProp] = value; } 260 } 261 262 [IntegerValidator (MinValue = 1, MaxValue = Int32.MaxValue)] 263 [ConfigurationProperty ("requestLengthDiskThreshold", DefaultValue = "80")] 264 public int RequestLengthDiskThreshold { 265 get { return (int) base[requestLengthDiskThresholdProp]; } 266 set { base[requestLengthDiskThresholdProp] = value; } 267 } 268 269 [ConfigurationProperty ("requireRootedSaveAsPath", DefaultValue = "True")] 270 public bool RequireRootedSaveAsPath { 271 get { return (bool) base[requireRootedSaveAsPathProp]; } 272 set { base[requireRootedSaveAsPathProp] = value; } 273 } 274 275 [ConfigurationProperty ("sendCacheControlHeader", DefaultValue = "True")] 276 public bool SendCacheControlHeader { 277 get { return (bool) base[sendCacheControlHeaderProp]; } 278 set { base[sendCacheControlHeaderProp] = value; } 279 } 280 281 [TypeConverter (typeof (TimeSpanSecondsConverter))] 282 [ConfigurationProperty ("shutdownTimeout", DefaultValue = "00:01:30")] 283 public TimeSpan ShutdownTimeout { 284 get { return (TimeSpan) base[shutdownTimeoutProp]; } 285 set { base[shutdownTimeoutProp] = value; } 286 } 287 288 [ConfigurationProperty ("useFullyQualifiedRedirectUrl", DefaultValue = "False")] 289 public bool UseFullyQualifiedRedirectUrl { 290 get { return (bool) base[useFullyQualifiedRedirectUrlProp]; } 291 set { base[useFullyQualifiedRedirectUrlProp] = value; } 292 } 293 294 [IntegerValidator (MinValue = 0, MaxValue = Int32.MaxValue)] 295 [ConfigurationProperty ("waitChangeNotification", DefaultValue = "0")] 296 public int WaitChangeNotification { 297 get { return (int) base[waitChangeNotificationProp]; } 298 set { base[waitChangeNotificationProp] = value; } 299 } 300 301 [ConfigurationProperty ("requestPathInvalidCharacters", DefaultValue = ",*,%,&,:,\\,?")] 302 public string RequestPathInvalidCharacters { 303 get { return (string) base [requestPathInvalidCharactersProp]; } 304 set { base [requestPathInvalidCharactersProp] = value; } 305 } 306 307 [ConfigurationProperty ("requestValidationType", DefaultValue = "System.Web.Util.RequestValidator")] 308 [StringValidator (MinLength = 1)] 309 public string RequestValidationType { 310 get { return (string) base [requestValidationTypeProp]; } 311 set { base [requestValidationTypeProp] = value; } 312 } 313 314 [ConfigurationProperty ("requestValidationMode", DefaultValue = "4.0")] 315 [TypeConverter ("System.Web.Configuration.VersionConverter")] 316 public Version RequestValidationMode { 317 get { return (Version) base [requestValidationModeProp]; } 318 set { base [requestValidationModeProp] = value; } 319 } 320 321 [IntegerValidator (MinValue = 0)] 322 [ConfigurationProperty ("maxQueryStringLength", DefaultValue = "2048")] 323 public int MaxQueryStringLength { 324 get { return (int) base [maxQueryStringLengthProp]; } 325 set { base [maxQueryStringLengthProp] = value; } 326 } 327 328 [IntegerValidator (MinValue = 0)] 329 [ConfigurationProperty ("maxUrlLength", DefaultValue = "260")] 330 public int MaxUrlLength { 331 get { return (int) base [maxUrlLengthProp]; } 332 set { base [maxUrlLengthProp] = value; } 333 } 334 335 [StringValidator (MinLength = 1)] 336 [ConfigurationProperty ("encoderType", DefaultValue = "System.Web.Util.HttpEncoder")] 337 public string EncoderType { 338 get { return (string) base [encoderTypeProp]; } 339 set { base [encoderTypeProp] = value; } 340 } 341 342 [ConfigurationProperty ("relaxedUrlToFileSystemMapping", DefaultValue = "False")] 343 public bool RelaxedUrlToFileSystemMapping { 344 get { return (bool) base [relaxedUrlToFileSystemMappingProp]; } 345 set { base [relaxedUrlToFileSystemMappingProp] = value; } 346 } 347 [ConfigurationProperty ("targetFramework", DefaultValue = "4.0")] 348 [TypeConverter ("System.Web.Configuration.VersionConverter")] 349 public Version TargetFramework { 350 get { return (Version) base [targetFrameworkProp]; } 351 set { base [targetFrameworkProp] = value; } 352 } 353 protected internal override ConfigurationPropertyCollection Properties { 354 get { return properties; } 355 } 356 [ConfigurationProperty ("allowDynamicModuleRegistration", DefaultValue = "True")] 357 public bool AllowDynamicModuleRegistration { 358 get { return (bool) base [allowDynamicModuleRegistrationProp]; } 359 set { base [allowDynamicModuleRegistrationProp] = value; } 360 } 361 } 362 } 363 364