The Labs \ Source Viewer \ SSCLI \ System.Net.Configuration \ WebRequestModulesSectionInternal

  1. //------------------------------------------------------------------------------
  2. // <copyright file="WebRequestModulesSection.cs" company="Microsoft Corporation">
  3. //
  4. // Copyright (c) 2006 Microsoft Corporation. All rights reserved.
  5. //
  6. // The use and distribution terms for this software are contained in the file
  7. // named license.txt, which can be found in the root of this distribution.
  8. // By using this software in any fashion, you are agreeing to be bound by the
  9. // terms of this license.
  10. //
  11. // You must not remove this notice, or any other, from this software.
  12. //
  13. // </copyright>
  14. //------------------------------------------------------------------------------
  15. namespace System.Net.Configuration
  16. {
  17.     using System.Configuration;
  18.     using System.Collections;
  19.     using System.Globalization;
  20.     using System.Net;
  21.     using System.Reflection;
  22.     using System.Threading;
  23.     public sealed class WebRequestModulesSection : ConfigurationSection
  24.     {
  25.         public WebRequestModulesSection()
  26.         {
  27.             this.properties.Add(this.webRequestModules);
  28.         }
  29.        
  30.         protected override void PostDeserialize()
  31.         {
  32.             // Perf optimization. If the configuration is coming from machine.config
  33.             // It is safe and we don't need to check for permissions.
  34.             if (EvaluationContext.IsMachineLevel)
  35.                 return;
  36.            
  37.             try {
  38.                 ExceptionHelper.WebPermissionUnrestricted.Demand();
  39.             }
  40.             catch (Exception exception) {
  41.                 throw new ConfigurationErrorsException(SR.GetString(SR.net_config_section_permission, ConfigurationStrings.WebRequestModulesSectionName), exception);
  42.             }
  43.         }
  44.        
  45.         protected override void InitializeDefault()
  46.         {
  47.             this.WebRequestModules.Add(new WebRequestModuleElement(ConfigurationStrings.Https, typeof(HttpRequestCreator)));
  48.             this.WebRequestModules.Add(new WebRequestModuleElement(ConfigurationStrings.Http, typeof(HttpRequestCreator)));
  49.             this.WebRequestModules.Add(new WebRequestModuleElement(ConfigurationStrings.File, typeof(FileWebRequestCreator)));
  50.             this.WebRequestModules.Add(new WebRequestModuleElement(ConfigurationStrings.Ftp, typeof(FtpWebRequestCreator)));
  51.         }
  52.        
  53.         protected override ConfigurationPropertyCollection Properties {
  54.             get { return this.properties; }
  55.         }
  56.        
  57.         [ConfigurationProperty("", IsDefaultCollection = true)]
  58.         public WebRequestModuleElementCollection WebRequestModules {
  59.             get { return (WebRequestModuleElementCollection)this[this.webRequestModules]; }
  60.         }
  61.        
  62.         ConfigurationPropertyCollection properties = new ConfigurationPropertyCollection();
  63.        
  64.         readonly ConfigurationProperty webRequestModules = new ConfigurationProperty(null, typeof(WebRequestModuleElementCollection), null, ConfigurationPropertyOptions.IsDefaultCollection);
  65.     }
  66.    
  67.     internal sealed class WebRequestModulesSectionInternal
  68.     {
  69.         internal WebRequestModulesSectionInternal(WebRequestModulesSection section)
  70.         {
  71.             if (section.WebRequestModules.Count > 0) {
  72.                 this.webRequestModules = new ArrayList(section.WebRequestModules.Count);
  73.                 foreach (WebRequestModuleElement webRequestModuleElement in section.WebRequestModules) {
  74.                     try {
  75.                         this.webRequestModules.Add(new WebRequestPrefixElement(webRequestModuleElement.Prefix, webRequestModuleElement.Type));
  76.                     }
  77.                     catch (Exception exception) {
  78.                         if (NclUtilities.IsFatal(exception))
  79.                             throw;
  80.                        
  81.                         throw new ConfigurationErrorsException(SR.GetString(SR.net_config_webrequestmodules), exception);
  82.                     }
  83.                     catch {
  84.                         //
  85.                         // throw exception for config debugging
  86.                         //
  87.                        
  88.                         throw new ConfigurationErrorsException(ConfigurationStrings.WebRequestModulesSectionPath, new Exception(SR.GetString(SR.net_nonClsCompliantException)));
  89.                     }
  90.                 }
  91.             }
  92.         }
  93.        
  94.         static internal object ClassSyncObject {
  95.             get {
  96.                 if (classSyncObject == null) {
  97.                     object o = new object();
  98.                     Interlocked.CompareExchange(ref classSyncObject, o, null);
  99.                 }
  100.                 return classSyncObject;
  101.             }
  102.         }
  103.        
  104.         static internal WebRequestModulesSectionInternal GetSection()
  105.         {
  106.             lock (WebRequestModulesSectionInternal.ClassSyncObject) {
  107.                 WebRequestModulesSection section = PrivilegedConfigurationManager.GetSection(ConfigurationStrings.WebRequestModulesSectionPath) as WebRequestModulesSection;
  108.                 if (section == null)
  109.                     return null;
  110.                
  111.                 return new WebRequestModulesSectionInternal(section);
  112.             }
  113.         }
  114.        
  115.         internal ArrayList WebRequestModules {
  116.             get {
  117.                 ArrayList retval = this.webRequestModules;
  118.                 if (retval == null) {
  119.                     retval = new ArrayList(0);
  120.                 }
  121.                 return retval;
  122.             }
  123.         }
  124.        
  125.         static object classSyncObject = null;
  126.         ArrayList webRequestModules = null;
  127.     }
  128. }

Developer Fusion