-\r
-using System;\r
-using System.Security;\r
-using System.Security.Permissions;\r
-\r
-namespace System.Net\r
-{\r
- [AttributeUsage (AttributeTargets.Assembly \r
- | AttributeTargets.Class \r
- | AttributeTargets.Struct \r
- | AttributeTargets.Constructor \r
- | AttributeTargets.Method, AllowMultiple = true, Inherited = false)\r
- ] \r
- [Serializable]\r
- public sealed class SocketPermissionAttribute : CodeAccessSecurityAttribute\r
- {\r
- // Fields\r
- string m_access;\r
- string m_host;\r
- string m_port;\r
- string m_transport;\r
- \r
- // Constructors\r
- public SocketPermissionAttribute (SecurityAction action) : base (action)\r
- {\r
- }\r
-\r
- // Properties\r
-\r
- public string Access {\r
- get { return m_access; }\r
- set { \r
- if (m_access != null)\r
- throw new ArgumentException ("The parameter 'Access' can be set only once.");\r
- if (value == null) \r
- throw new ArgumentException ("The parameter 'Access' cannot be null.");\r
- m_access = value;\r
- }\r
- }\r
-\r
- public string Host {\r
- get { return m_host; }\r
- set { \r
- if (m_host != null)\r
- throw new ArgumentException ("The parameter 'Host' can be set only once.");\r
- if (value == null) \r
- throw new ArgumentException ("The parameter 'Host' cannot be null."); \r
- m_host = value;\r
- }\r
- }\r
-\r
- public string Port {\r
- get { return m_port; }\r
- set { \r
- if (m_port != null)\r
- throw new ArgumentException ("The parameter 'Port' can be set only once.");\r
- if (value == null) \r
- throw new ArgumentException ("The parameter 'Port' cannot be null."); \r
- m_port = value;\r
- }\r
- }\r
-\r
- public string Transport {\r
- get { return m_transport; }\r
- set { \r
- if (m_transport != null)\r
- throw new ArgumentException ("The parameter 'Transport' can be set only once.");\r
- if (value == null) \r
- throw new ArgumentException ("The parameter 'Transport' cannot be null."); \r
- m_transport = value;\r
- }\r
- }\r
- \r
- // Methods\r
- \r
- public override IPermission CreatePermission () {\r
- if (this.Unrestricted)\r
- return new SocketPermission (PermissionState.Unrestricted);\r
-\r
- if (m_access == null) \r
- throw new ArgumentException ("The value for 'Access' must be specified.");\r
- if (m_host == null) \r
- throw new ArgumentException ("The value for 'Host' must be specified.");\r
- if (m_port == null) \r
- throw new ArgumentException ("The value for 'Port' must be specified.");\r
- if (m_transport == null) \r
- throw new ArgumentException ("The value for 'Transport' must be specified.");\r
-\r
- NetworkAccess access;\r
- TransportType transport;\r
- int port = SocketPermission.AllPorts;\r
-\r
- if (String.Compare (m_access, "Connect", true) == 0)\r
- access = NetworkAccess.Connect;\r
- else if (String.Compare (m_access, "Accept", true) == 0)\r
- access = NetworkAccess.Accept;\r
- else \r
- throw new ArgumentException ("The parameter value 'Access=" + m_access + "' is invalid.");\r
-\r
- if (String.Compare (m_port, "All", true) != 0) {\r
- try {\r
- port = Int32.Parse (m_port); \r
- } catch (Exception) {\r
- throw new ArgumentException ("The parameter value 'Port=" + port + "' is invalid.");\r
- }\r
- // test whether port number is valid..\r
- new IPEndPoint (1, port);\r
- }\r
-\r
- try {\r
- transport = (TransportType) Enum.Parse (typeof (TransportType), m_transport, true);\r
- } catch (Exception) {\r
- throw new ArgumentException ("The parameter value 'Transport=" + m_transport + "' is invalid.");\r
- }\r
- \r
- SocketPermission perm = new SocketPermission (PermissionState.None);\r
- perm.AddPermission (access, transport, m_host, port);\r
- return perm;\r
- } \r
- }\r
-}\r
+
+using System.Security;
+using System.Security.Permissions;
+
+namespace System.Net {
+
+ [AttributeUsage (AttributeTargets.Assembly
+ | AttributeTargets.Class
+ | AttributeTargets.Struct
+ | AttributeTargets.Constructor
+ | AttributeTargets.Method, AllowMultiple = true, Inherited = false)
+ ]
+ [Serializable]
+ public sealed class SocketPermissionAttribute : CodeAccessSecurityAttribute {
+
+ // Fields
+ string m_access;
+ string m_host;
+ string m_port;
+ string m_transport;
+
+ // Constructors
+ public SocketPermissionAttribute (SecurityAction action)
+ : base (action)
+ {
+ }
+
+ // Properties
+
+ public string Access {
+ get { return m_access; }
+ set {
+ if (m_access != null)
+ AlreadySet ("Access");
+
+ m_access = value;
+ }
+ }
+
+ public string Host {
+ get { return m_host; }
+ set {
+ if (m_host != null)
+ AlreadySet ("Host");
+
+ m_host = value;
+ }
+ }
+
+ public string Port {
+ get { return m_port; }
+ set {
+ if (m_port != null)
+ AlreadySet ("Port");
+
+ m_port = value;
+ }
+ }
+
+ public string Transport {
+ get { return m_transport; }
+ set {
+ if (m_transport != null)
+ AlreadySet ("Transport");
+
+ m_transport = value;
+ }
+ }
+
+ // Methods
+
+ public override IPermission CreatePermission ()
+ {
+ if (this.Unrestricted)
+ return new SocketPermission (PermissionState.Unrestricted);
+
+ string missing = String.Empty;
+ if (m_access == null)
+ missing += "Access, ";
+ if (m_host == null)
+ missing += "Host, ";
+ if (m_port == null)
+ missing += "Port, ";
+ if (m_transport == null)
+ missing += "Transport, ";
+ if (missing.Length > 0) {
+ string msg = Locale.GetText ("The value(s) for {0} must be specified.");
+ missing = missing.Substring (0, missing.Length - 2); // remove last separator
+ throw new ArgumentException (String.Format (msg, missing));
+ }
+
+ NetworkAccess access;
+ TransportType transport;
+ int port = SocketPermission.AllPorts;
+
+ if (String.Compare (m_access, "Connect", true) == 0)
+ access = NetworkAccess.Connect;
+ else if (String.Compare (m_access, "Accept", true) == 0)
+ access = NetworkAccess.Accept;
+ else {
+ string msg = Locale.GetText ("The parameter value for 'Access', '{1}, is invalid.");
+ throw new ArgumentException (String.Format (msg, m_access));
+ }
+
+ if (String.Compare (m_port, "All", true) != 0) {
+ try {
+ port = Int32.Parse (m_port);
+ }
+ catch {
+ string msg = Locale.GetText ("The parameter value for 'Port', '{1}, is invalid.");
+ throw new ArgumentException (String.Format (msg, m_port));
+ }
+ // test whether port number is valid..
+ new IPEndPoint (1, port);
+ }
+
+ try {
+ transport = (TransportType) Enum.Parse (typeof (TransportType), m_transport, true);
+ }
+ catch {
+ string msg = Locale.GetText ("The parameter value for 'Transport', '{1}, is invalid.");
+ throw new ArgumentException (String.Format (msg, m_transport));
+ }
+
+ SocketPermission perm = new SocketPermission (PermissionState.None);
+ perm.AddPermission (access, transport, m_host, port);
+ return perm;
+ }
+
+ // helpers
+
+ internal void AlreadySet (string property)
+ {
+ string msg = Locale.GetText ("The parameter '{0}' can be set only once.");
+ throw new ArgumentException (String.Format (msg, property), property);
+ }
+ }
+}