1 //
2 // System.Security.Policy.CodeConnectAccess class
3 //
4 // Author:
5 //	Sebastien Pouliot  <sebastien@ximian.com>
6 //
7 // Copyright (C) 2004-2005 Novell, Inc (http://www.novell.com)
8 //
9 // Permission is hereby granted, free of charge, to any person obtaining
10 // a copy of this software and associated documentation files (the
11 // "Software"), to deal in the Software without restriction, including
12 // without limitation the rights to use, copy, modify, merge, publish,
13 // distribute, sublicense, and/or sell copies of the Software, and to
14 // permit persons to whom the Software is furnished to do so, subject to
15 // the following conditions:
16 //
17 // The above copyright notice and this permission notice shall be
18 // included in all copies or substantial portions of the Software.
19 //
20 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
21 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
22 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
23 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
24 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
25 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
26 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
27 //
28 
29 
30 using System.Globalization;
31 using System.Runtime.InteropServices;
32 
33 namespace System.Security.Policy {
34 
35 	[Serializable]
36 	[ComVisible (true)]
37 	public class CodeConnectAccess {
38 
39 		public static readonly string AnyScheme = "*";
40 		public static readonly int DefaultPort = -3;
41 		public static readonly int OriginPort = -4;
42 		public static readonly string OriginScheme = "$origin";
43 
44 		private string _scheme;
45 		private int _port;
46 
47 		[MonoTODO ("(2.0) validations incomplete")]
CodeConnectAccess(string allowScheme, int allowPort)48 		public CodeConnectAccess (string allowScheme, int allowPort)
49 		{
50 			// LAME but as documented
51 			if ((allowScheme == null) || (allowScheme.Length == 0))
52 				throw new ArgumentOutOfRangeException ("allowScheme");
53 			// TODO : check for invalid characters in scheme
54 			if ((allowPort < 0) || (allowPort > 65535)) {
55 				throw new ArgumentOutOfRangeException ("allowPort");
56 			}
57 
58 			_scheme = allowScheme;
59 			_port = allowPort;
60 		}
61 
62 		public int Port {
63 			get { return _port; }
64 		}
65 
66 		public string Scheme {
67 			get { return _scheme; }
68 		}
69 
Equals(object o)70 		public override bool Equals (object o)
71 		{
72 			CodeConnectAccess cca = (o as CodeConnectAccess);
73 			if (cca == null)
74 				return false;
75 			return ((_scheme == cca._scheme) && (_port == cca._port));
76 		}
77 
GetHashCode()78 		public override int GetHashCode ()
79 		{
80 			// return same hash code if objects are equals
81 			return (_scheme.GetHashCode () ^ _port);
82 		}
83 
CreateAnySchemeAccess(int allowPort)84 		public static CodeConnectAccess CreateAnySchemeAccess (int allowPort)
85 		{
86 			return new CodeConnectAccess (AnyScheme, allowPort);
87 		}
88 
CreateOriginSchemeAccess(int allowPort)89 		public static CodeConnectAccess CreateOriginSchemeAccess (int allowPort)
90 		{
91 			return new CodeConnectAccess (OriginScheme, allowPort);
92 		}
93 	}
94 }
95 
96