The Labs \ Source Viewer \ SSCLI \ System.Security.Policy \ Site

  1. // ==++==
  2. //
  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. //
  14. // ==--==
  15. //
  16. // Site.cs
  17. //
  18. // Site is an IIdentity representing internet sites.
  19. //
  20. namespace System.Security.Policy
  21. {
  22.     using System.Security.Util;
  23.     using System.Globalization;
  24.     using SiteIdentityPermission = System.Security.Permissions.SiteIdentityPermission;
  25.    
  26.     [Serializable()]
  27.     [System.Runtime.InteropServices.ComVisible(true)]
  28.     public sealed class Site : IIdentityPermissionFactory, IBuiltInEvidence
  29.     {
  30.         private SiteString m_name;
  31.        
  32.         internal Site()
  33.         {
  34.             m_name = null;
  35.         }
  36.        
  37.         public Site(string name)
  38.         {
  39.             if (name == null)
  40.                 throw new ArgumentNullException("name");
  41.            
  42.             m_name = new SiteString(name);
  43.         }
  44.        
  45.         internal Site(byte[] id, string name)
  46.         {
  47.             m_name = ParseSiteFromUrl(name);
  48.         }
  49.        
  50.         public static Site CreateFromUrl(string url)
  51.         {
  52.             Site site = new Site();
  53.            
  54.             site.m_name = ParseSiteFromUrl(url);
  55.            
  56.             return site;
  57.         }
  58.        
  59.         private static SiteString ParseSiteFromUrl(string name)
  60.         {
  61.             URLString urlString = new URLString(name);
  62.            
  63.             if (String.Compare(urlString.Scheme, "file", StringComparison.OrdinalIgnoreCase) == 0)
  64.                 throw new ArgumentException(Environment.GetResourceString("Argument_InvalidSite"));
  65.            
  66.             return new SiteString(new URLString(name).Host);
  67.         }
  68.        
  69.         public string Name {
  70.             get {
  71.                 if (m_name != null)
  72.                     return m_name.ToString();
  73.                 else
  74.                     return null;
  75.             }
  76.         }
  77.        
  78.         internal SiteString GetSiteString()
  79.         {
  80.             return m_name;
  81.         }
  82.        
  83.         public IPermission CreateIdentityPermission(Evidence evidence)
  84.         {
  85.             return new SiteIdentityPermission(Name);
  86.         }
  87.        
  88.         public override bool Equals(object o)
  89.         {
  90.             if (o is Site) {
  91.                 Site s = (Site)o;
  92.                 if (Name == null)
  93.                     return (s.Name == null);
  94.                
  95.                 return String.Compare(Name, s.Name, StringComparison.OrdinalIgnoreCase) == 0;
  96.             }
  97.            
  98.             return false;
  99.         }
  100.        
  101.         public override int GetHashCode()
  102.         {
  103.             string name = this.Name;
  104.            
  105.             if (name == null)
  106.                 return 0;
  107.             else
  108.                 return name.GetHashCode();
  109.         }
  110.        
  111.         public object Copy()
  112.         {
  113.             return new Site(this.Name);
  114.         }
  115.        
  116.         internal SecurityElement ToXml()
  117.         {
  118.             SecurityElement elem = new SecurityElement("System.Security.Policy.Site");
  119.             // If you hit this assert then most likely you are trying to change the name of this class.
  120.             // This is ok as long as you change the hard coded string above and change the assert below.
  121.             BCLDebug.Assert(this.GetType().FullName.Equals("System.Security.Policy.Site"), "Class name changed!");
  122.            
  123.             elem.AddAttribute("version", "1");
  124.            
  125.             if (m_name != null)
  126.                 elem.AddChild(new SecurityElement("Name", m_name.ToString()));
  127.            
  128.             return elem;
  129.         }
  130.        
  131.         /// <internalonly/>
  132.         int IBuiltInEvidence.OutputToBuffer(char[] buffer, int position, bool verbose)
  133.         {
  134.             buffer[position++] = BuiltInEvidenceHelper.idSite;
  135.             string name = this.Name;
  136.             int length = name.Length;
  137.            
  138.             if (verbose) {
  139.                 BuiltInEvidenceHelper.CopyIntToCharArray(length, buffer, position);
  140.                 position += 2;
  141.             }
  142.             name.CopyTo(0, buffer, position, length);
  143.             return length + position;
  144.         }
  145.        
  146.         /// <internalonly/>
  147.         int IBuiltInEvidence.GetRequiredSize(bool verbose)
  148.         {
  149.             if (verbose)
  150.                 return this.Name.Length + 3;
  151.             else
  152.                 return this.Name.Length + 1;
  153.         }
  154.        
  155.         /// <internalonly/>
  156.         int IBuiltInEvidence.InitFromBuffer(char[] buffer, int position)
  157.         {
  158.             int length = BuiltInEvidenceHelper.GetIntFromCharArray(buffer, position);
  159.             position += 2;
  160.            
  161.             m_name = new SiteString(new string(buffer, position, length));
  162.            
  163.             return position + length;
  164.         }
  165.        
  166.         public override string ToString()
  167.         {
  168.             return ToXml().ToString();
  169.         }
  170.        
  171.         // INormalizeForIsolatedStorage is not implemented for startup perf
  172.         // equivalent to INormalizeForIsolatedStorage.Normalize()
  173.         internal object Normalize()
  174.         {
  175.             return m_name.ToString().ToUpper(CultureInfo.InvariantCulture);
  176.         }
  177.     }
  178. }

Developer Fusion