Merge pull request #1304 from slluis/mac-proxy-autoconfig
[mono.git] / mcs / class / System / System.Net.Mail / SmtpException.cs
old mode 100755 (executable)
new mode 100644 (file)
index b2f2b8f..ceda2dd
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
-#if NET_2_0
-
 using System.Runtime.Serialization;
 
 namespace System.Net.Mail {
-       public class SmtpException : Exception
+       [Serializable]
+       public class SmtpException : Exception, ISerializable
        {
                #region Fields
 
@@ -44,33 +43,41 @@ namespace System.Net.Mail {
                #region Constructors
 
                public SmtpException ()
+                       : this (SmtpStatusCode.GeneralFailure)
                {
                }
 
                public SmtpException (SmtpStatusCode statusCode)
+                       : this (statusCode, "Syntax error, command unrecognized.")
                {
-                       StatusCode = statusCode;
                }
 
                public SmtpException (string message)
-                       : base (message)
+                       : this (SmtpStatusCode.GeneralFailure, message)
                {
                }
 
-               public SmtpException (SerializationInfo info, StreamingContext context)
+               protected SmtpException (SerializationInfo info, StreamingContext context)
                        : base (info, context)
                {
+                       try {
+                               statusCode = (SmtpStatusCode) info.GetValue ("Status", typeof (int));
+                       } catch (SerializationException) {
+                               //For compliance with previously serialized version:
+                               statusCode = (SmtpStatusCode) info.GetValue ("statusCode", typeof (SmtpStatusCode));
+                       }
                }
 
                public SmtpException (SmtpStatusCode statusCode, string message)
                        : base (message)
                {
-                       StatusCode = statusCode;
+                       this.statusCode = statusCode;
                }
 
                public SmtpException (string message, Exception innerException)
                        : base (message, innerException)
                {
+                       statusCode = SmtpStatusCode.GeneralFailure;
                }
 
                #endregion // Constructors
@@ -83,7 +90,18 @@ namespace System.Net.Mail {
                }
 
                #endregion // Properties
+
+               public override void GetObjectData (SerializationInfo info, StreamingContext context)
+               {
+                       if (info == null)
+                               throw new ArgumentNullException ("info");
+                       base.GetObjectData (info, context);
+                       info.AddValue ("Status", statusCode, typeof (int));
+               }
+               void ISerializable.GetObjectData (SerializationInfo info, StreamingContext context)
+               {
+                       GetObjectData (info, context);
+               }
        }
 }
 
-#endif // NET_2_0