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

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

Developer Fusion