internal void LoadValuesFromConfigurationXml(XmlNode section) { HandlerBase.GetAndRemoveBooleanAttribute(section, "enabled", ref _isEnabled); HandlerBase.GetAndRemoveNonNegativeIntegerAttribute(section, "requestLimit", ref _requestLimit); HandlerBase.GetAndRemoveBooleanAttribute(section, "pageOutput", ref _pageOutput); HandlerBase.GetAndRemoveBooleanAttribute(section, "localOnly", ref _localOnly); string [] values = { "SortByTime", "SortByCategory" }; // TraceMode is in another file in a different namespace ... so lets have some protection if they change Debug.Assert(TraceMode.SortByTime == (TraceMode)0); Debug.Assert(TraceMode.SortByCategory == (TraceMode)1); int iMode = 0; XmlNode attribute = HandlerBase.GetAndRemoveEnumAttribute(section, "traceMode", values, ref iMode); if (attribute != null) { _outputMode = (TraceMode)iMode; } HandlerBase.CheckForUnrecognizedAttributes(section); // section can have no content HandlerBase.CheckForChildNodes(section); }
internal void LoadValuesFromConfigurationInput(XmlNode node) { XmlNode n; // executionTimeout HandlerBase.GetAndRemovePositiveIntegerAttribute(node, "executionTimeout", ref _executionTimeout); // maxRequestLength int limit = 0; if (HandlerBase.GetAndRemoveNonNegativeIntegerAttribute(node, "maxRequestLength", ref limit) != null) { _maxRequestLength = limit * 1024; } // useFullyQualifiedRedirectUrl HandlerBase.GetAndRemoveBooleanAttribute(node, "useFullyQualifiedRedirectUrl", ref _useFullyQualifiedRedirectUrl); // minFreeThreads n = HandlerBase.GetAndRemoveNonNegativeIntegerAttribute(node, "minFreeThreads", ref _minFreeThreads); int workerMax, ioMax; System.Threading.ThreadPool.GetMaxThreads(out workerMax, out ioMax); int maxThreads = (workerMax < ioMax) ? workerMax : ioMax; if (_minFreeThreads >= maxThreads) { throw new ConfigurationException(HttpRuntime.FormatResourceString(SR.Min_free_threads_must_be_under_thread_pool_limits, maxThreads.ToString()), (n != null) ? n : node); } // minLocalRequestFreeThreads n = HandlerBase.GetAndRemoveNonNegativeIntegerAttribute(node, "minLocalRequestFreeThreads", ref _minLocalRequestFreeThreads); if (_minLocalRequestFreeThreads > _minFreeThreads) { throw new ConfigurationException(HttpRuntime.FormatResourceString(SR.Local_free_threads_cannot_exceed_free_threads), (n != null) ? n : node); } // appRequestQueueLimit HandlerBase.GetAndRemovePositiveIntegerAttribute(node, "appRequestQueueLimit", ref _appRequestQueueLimit); // shutdownTimeout HandlerBase.GetAndRemoveNonNegativeIntegerAttribute(node, "shutdownTimeout", ref _shutdownTimeout); // delayNotificationTimeout HandlerBase.GetAndRemoveNonNegativeIntegerAttribute(node, "delayNotificationTimeout", ref _delayNotificationTimeout); // waitChangeNotification HandlerBase.GetAndRemoveNonNegativeIntegerAttribute(node, "waitChangeNotification", ref _waitChangeNotification); // maxWaitChangeNotification HandlerBase.GetAndRemoveNonNegativeIntegerAttribute(node, "maxWaitChangeNotification", ref _maxWaitChangeNotification); // enableKernelOutputCache HandlerBase.GetAndRemoveBooleanAttribute(node, "enableKernelOutputCache", ref _enableKernelOutputCache); // enableVersionHeader HandlerBase.GetAndRemoveBooleanAttribute(node, "enableVersionHeader", ref _enableVersionHeader); #if USE_REGEX_CSS_VALIDATION // ASURT 122278 // If we find a requestValidationRegex string, create a new regex string requestValidationRegexString = null; XmlNode attrib = HandlerBase.GetAndRemoveStringAttribute(node, "requestValidationRegex", ref requestValidationRegexString); if (attrib != null) { // REVIEW: consider using a compiled regex, though that is slow on first hit (and a memory hog). // Obviously, we can't precompile it since it's not know ahead of time. try { _requestValidationRegex = new Regex(requestValidationRegexString, RegexOptions.IgnoreCase /*| RegexOptions.Compiled*/); } catch (Exception e) { throw new ConfigurationException(e.Message, e, attrib); } } #endif // error on unrecognized attributes and nodes HandlerBase.CheckForUnrecognizedAttributes(node); HandlerBase.CheckForChildNodes(node); }