Code:
/ FXUpdate3074 / FXUpdate3074 / 1.1 / untmp / whidbey / QFE / ndp / fx / src / xsp / System / Web / Configuration / HandlerBase.cs / 2 / HandlerBase.cs
//------------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//-----------------------------------------------------------------------------
/*
* HandlerBase contains static helper functions for consistent XML parsing
* behavior and error messages.
*
* Copyright (c) 1998 Microsoft Corporation
*/
namespace System.Web.Configuration {
using System.Collections;
using System.Collections.Specialized;
using System.Configuration;
using System.Globalization;
using System.Text;
using System.Web.Hosting;
using System.Web.Util;
using System.Xml;
using System.Web.Compilation;
static internal class HandlerBase {
//
// XML Attribute Helpers
//
private static XmlNode GetAndRemoveAttribute(XmlNode node, string attrib, bool fRequired) {
XmlNode a = node.Attributes.RemoveNamedItem(attrib);
// If the attribute is required and was not present, throw
if (fRequired && a == null) {
throw new ConfigurationErrorsException(
SR.GetString(SR.Missing_required_attribute, attrib, node.Name),
node);
}
return a;
}
private static XmlNode GetAndRemoveStringAttributeInternal(XmlNode node, string attrib, bool fRequired, ref string val) {
XmlNode a = GetAndRemoveAttribute(node, attrib, fRequired);
if (a != null) {
val = a.Value;
}
return a;
}
internal static XmlNode GetAndRemoveStringAttribute(XmlNode node, string attrib, ref string val) {
return GetAndRemoveStringAttributeInternal(node, attrib, false /*fRequired*/, ref val);
}
internal static XmlNode GetAndRemoveRequiredStringAttribute(XmlNode node, string attrib, ref string val) {
return GetAndRemoveStringAttributeInternal(node, attrib, true /*fRequired*/, ref val);
}
internal static XmlNode GetAndRemoveNonEmptyStringAttribute(XmlNode node, string attrib, ref string val) {
return GetAndRemoveNonEmptyStringAttributeInternal(node, attrib, false /*fRequired*/, ref val);
}
internal static XmlNode GetAndRemoveRequiredNonEmptyStringAttribute(XmlNode node, string attrib, ref string val) {
return GetAndRemoveNonEmptyStringAttributeInternal(node, attrib, true /*fRequired*/, ref val);
}
private static XmlNode GetAndRemoveNonEmptyStringAttributeInternal(XmlNode node, string attrib, bool fRequired, ref string val) {
XmlNode a = GetAndRemoveStringAttributeInternal(node, attrib, fRequired, ref val);
if (a != null && val.Length == 0) {
throw new ConfigurationErrorsException(
SR.GetString(SR.Empty_attribute, attrib),
a);
}
return a;
}
// input.Xml cursor must be at a true/false XML attribute
private static XmlNode GetAndRemoveBooleanAttributeInternal(XmlNode node, string attrib, bool fRequired, ref bool val) {
XmlNode a = GetAndRemoveAttribute(node, attrib, fRequired);
if (a != null) {
if (a.Value == "true") {
val = true;
}
else if (a.Value == "false") {
val = false;
}
else {
throw new ConfigurationErrorsException(
SR.GetString(SR.Invalid_boolean_attribute, a.Name),
a);
}
}
return a;
}
internal static XmlNode GetAndRemoveBooleanAttribute(XmlNode node, string attrib, ref bool val) {
return GetAndRemoveBooleanAttributeInternal(node, attrib, false /*fRequired*/, ref val);
}
private static XmlNode GetAndRemoveIntegerAttributeInternal(XmlNode node, string attrib, bool fRequired, ref int val) {
XmlNode a = GetAndRemoveAttribute(node, attrib, fRequired);
if (a != null) {
if (a.Value.Trim() != a.Value) {
throw new ConfigurationErrorsException(
SR.GetString(SR.Invalid_integer_attribute, a.Name),
a);
}
try {
val = int.Parse(a.Value, CultureInfo.InvariantCulture);
}
catch (Exception e) {
throw new ConfigurationErrorsException(
SR.GetString(SR.Invalid_integer_attribute, a.Name),
e, a);
}
}
return a;
}
private static XmlNode GetAndRemovePositiveAttributeInternal(XmlNode node, string attrib, bool fRequired, ref int val) {
XmlNode a = GetAndRemoveIntegerAttributeInternal(node, attrib, fRequired, ref val);
if (a != null && val <= 0) {
throw new ConfigurationErrorsException(
SR.GetString(SR.Invalid_positive_integer_attribute, attrib),
a);
}
return a;
}
internal static XmlNode GetAndRemovePositiveIntegerAttribute(XmlNode node, string attrib, ref int val) {
return GetAndRemovePositiveAttributeInternal(node, attrib, false /*fRequired*/, ref val);
}
#if UNUSED_CODE
internal static XmlNode GetAndRemoveRequiredPositiveIntegerAttribute(XmlNode node, string attrib, ref int val) {
return GetAndRemovePositiveAttributeInternal(node, attrib, true /*fRequired*/, ref val);
}
#endif
private static XmlNode GetAndRemoveTypeAttributeInternal(XmlNode node, string attrib, bool fRequired, ref Type val) {
XmlNode a = GetAndRemoveAttribute(node, attrib, fRequired);
if (a != null) {
val = ConfigUtil.GetType(a.Value, a);
}
return a;
}
internal static XmlNode GetAndRemoveTypeAttribute(XmlNode node, string attrib, ref Type val) {
return GetAndRemoveTypeAttributeInternal(node, attrib, false /*fRequired*/, ref val);
}
internal static void CheckForbiddenAttribute(XmlNode node, string attrib) {
XmlAttribute attr = node.Attributes[attrib];
if (attr != null) {
throw new ConfigurationErrorsException(
SR.GetString(SR.Config_base_unrecognized_attribute, attrib),
attr);
}
}
internal static void CheckForUnrecognizedAttributes(XmlNode node) {
if (node.Attributes.Count != 0) {
throw new ConfigurationErrorsException(
SR.GetString(SR.Config_base_unrecognized_attribute, node.Attributes[0].Name),
node.Attributes[0]);
}
}
#if UNUSED_CODE
// Throw an exception complaining that a line is duplicated (ASURT 93151)
internal static void ThrowDuplicateLineException(XmlNode node) {
throw new ConfigurationErrorsException(
SR.GetString(SR.Config_base_duplicate_line),
node);
}
#endif
//
// Obsolete XML Attribute Helpers
//
// if attribute not found return null
internal static string RemoveAttribute(XmlNode node, string name) {
XmlNode attribute = node.Attributes.RemoveNamedItem(name);
if (attribute != null) {
return attribute.Value;
}
return null;
}
// if attr not found throw standard message - "attribute x required"
internal static string RemoveRequiredAttribute(XmlNode node, string name) {
return RemoveRequiredAttribute(node, name, false);
}
internal static string RemoveRequiredAttribute(XmlNode node, string name, bool allowEmpty) {
XmlNode attribute = node.Attributes.RemoveNamedItem(name);
if (attribute == null) {
throw new ConfigurationErrorsException(
SR.GetString(SR.Config_base_required_attribute_missing, name),
node);
}
if (attribute.Value.Length == 0 && !allowEmpty) {
throw new ConfigurationErrorsException(
SR.GetString(SR.Config_base_required_attribute_empty, name),
node);
}
return attribute.Value;
}
//
// XML Element Helpers
//
internal static void CheckForNonCommentChildNodes(XmlNode node) {
foreach (XmlNode childNode in node.ChildNodes) {
if (childNode.NodeType != XmlNodeType.Comment) {
throw new ConfigurationErrorsException(
SR.GetString(SR.Config_base_no_child_nodes),
childNode);
}
}
}
internal static void ThrowUnrecognizedElement(XmlNode node) {
throw new ConfigurationErrorsException(
SR.GetString(SR.Config_base_unrecognized_element),
node);
}
internal static void CheckAssignableType(XmlNode node, Type baseType, Type type) {
if (!baseType.IsAssignableFrom(type)) {
throw new ConfigurationErrorsException(
SR.GetString(SR.Type_doesnt_inherit_from_type, type.FullName, baseType.FullName),
node);
}
}
internal static void CheckAssignableType(string filename, int lineNumber, Type baseType, Type type) {
if (!baseType.IsAssignableFrom(type)) {
throw new ConfigurationErrorsException(
SR.GetString(SR.Type_doesnt_inherit_from_type, type.FullName, baseType.FullName),
filename, lineNumber);
}
}
// Section handlers can run in client mode through:
// ConfigurationManager.GetSection("sectionName")
// See ASURT 123738
internal static bool IsServerConfiguration(object context) {
return context is HttpConfigurationContext;
}
internal static bool CheckAndReadRegistryValue(ref string value, bool throwIfError) {
if (value == null) {
return true;
}
if (!StringUtil.StringStartsWithIgnoreCase(value, "registry:")) {
// Not a registry value. It's not an error.
return true;
}
const int size = 1024;
StringBuilder str = new StringBuilder(size);
int iRet = UnsafeNativeMethods.GetCredentialFromRegistry(value, str, size);
if (iRet == 0) {
value = str.ToString();
return true;
}
else {
if (throwIfError) {
throw new ConfigurationErrorsException(
SR.GetString(SR.Invalid_registry_config));
}
else {
return false;
}
}
}
internal static bool CheckAndReadConnectionString(ref string connectionString, bool throwIfError) {
ConnectionStringSettings connObj = RuntimeConfig.GetConfig().ConnectionStrings.ConnectionStrings[connectionString];
if (connObj != null && connObj.ConnectionString != null && connObj.ConnectionString.Length > 0)
connectionString = connObj.ConnectionString;
return CheckAndReadRegistryValue(ref connectionString, throwIfError);
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- HashSetDebugView.cs
- TableParaClient.cs
- Itemizer.cs
- MSG.cs
- SQLDecimal.cs
- CodeSnippetStatement.cs
- MenuItem.cs
- XmlNodeComparer.cs
- CompositeControl.cs
- ErrorWrapper.cs
- FileDialogCustomPlaces.cs
- DelegateCompletionCallbackWrapper.cs
- XmlException.cs
- ApplicationDirectory.cs
- SafeCertificateContext.cs
- DayRenderEvent.cs
- CodeTypeDelegate.cs
- PageContent.cs
- ExpressionBuilderCollection.cs
- XslCompiledTransform.cs
- RelationalExpressions.cs
- Page.cs
- MouseGestureConverter.cs
- HttpStaticObjectsCollectionWrapper.cs
- TemplateNameScope.cs
- DesignerSelectionListAdapter.cs
- ReflectTypeDescriptionProvider.cs
- ISAPIWorkerRequest.cs
- InternalCache.cs
- PolicyImporterElement.cs
- ConfigurationStrings.cs
- AsymmetricAlgorithm.cs
- PropertyOverridesDialog.cs
- CommandValueSerializer.cs
- ThumbButtonInfo.cs
- Atom10FormatterFactory.cs
- BinaryUtilClasses.cs
- Int16AnimationBase.cs
- ITreeGenerator.cs
- EdmRelationshipRoleAttribute.cs
- XmlSchemaSimpleContentRestriction.cs
- AutomationElement.cs
- NamedPermissionSet.cs
- ComponentResourceKeyConverter.cs
- HtmlInputText.cs
- EnumConverter.cs
- ProxyGenerator.cs
- DataGridPagerStyle.cs
- SessionEndingEventArgs.cs
- RuleSettingsCollection.cs
- activationcontext.cs
- FormattedText.cs
- MonitoringDescriptionAttribute.cs
- _FixedSizeReader.cs
- PlainXmlSerializer.cs
- StackOverflowException.cs
- TcpConnectionPoolSettings.cs
- Misc.cs
- CheckBoxBaseAdapter.cs
- CodePageEncoding.cs
- PropertyDescriptorGridEntry.cs
- ContextDataSourceView.cs
- InputLangChangeEvent.cs
- TextBoxBase.cs
- EditorZone.cs
- HuffmanTree.cs
- TextElementAutomationPeer.cs
- XmlWriterSettings.cs
- BinaryCommonClasses.cs
- StringAnimationBase.cs
- EntityObject.cs
- BitmapFrameEncode.cs
- TextEditorCopyPaste.cs
- WizardPanel.cs
- ToolStripDropDownClosingEventArgs.cs
- AlphaSortedEnumConverter.cs
- Crc32.cs
- XmlQueryRuntime.cs
- AutomationPattern.cs
- PointHitTestParameters.cs
- PasswordRecoveryDesigner.cs
- SqlRowUpdatingEvent.cs
- RSAPKCS1KeyExchangeDeformatter.cs
- TokenizerHelper.cs
- LoginViewDesigner.cs
- InteropBitmapSource.cs
- PointF.cs
- ToolboxBitmapAttribute.cs
- RedistVersionInfo.cs
- ConfigXmlSignificantWhitespace.cs
- RotationValidation.cs
- BrowserTree.cs
- NavigationExpr.cs
- ServiceModelConfigurationSection.cs
- BaseParser.cs
- ControlCachePolicy.cs
- StandardOleMarshalObject.cs
- WebPartVerbCollection.cs
- ConfigXmlSignificantWhitespace.cs
- DataControlLinkButton.cs