Commit
[mono.git] / mcs / class / System / System.Net / SocketPermissionAttribute.cs
index 39bde99d251af7f0be21dde3d4fdebab43958bf6..1ccb8f107f93fb1486018a02ef86842b08825b45 100644 (file)
@@ -1,10 +1,11 @@
-//\r
-// System.Net.SocketPermissionAttribute.cs\r
-//\r
-// Author:\r
-//   Lawrence Pit (loz@cable.a2000.nl)\r
-//\r
-
+//
+// System.Net.SocketPermissionAttribute.cs
+//
+// Author:
+//     Lawrence Pit (loz@cable.a2000.nl)
+//     Sebastien Pouliot  <sebastien@ximian.com>
+//
+// Copyright (C) 2004 Novell, Inc (http://www.novell.com)
 //
 // Permission is hereby granted, free of charge, to any person obtaining
 // a copy of this software and associated documentation files (the
 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
-\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);
+               }
+       }
+}