⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mxrecord.cs

📁 A project written in C# sends email without smtp server. It queries dns server for mx records and se
💻 CS
字号:
// $Id: MxRecord.cs,v 1.3 2006/08/07 11:02:38 ethem Exp $
namespace Erle.DnsMail
{
	using System;
	using System.Net;
	using System.Collections;
	using ISerializable = System.Runtime.Serialization.ISerializable;
	using StreamingContext = System.Runtime.Serialization.StreamingContext;
	using SerializationInfo = System.Runtime.Serialization.SerializationInfo;

	[Serializable]
	public struct MxRecord : IComparable, ISerializable
	{
		public static readonly MxRecord Null = new MxRecord(false);

		private string nameexchange;
		public string NameExchange
		{
			get { return nameexchange; }
			set { nameexchange = value; }
		}

		private short priority;
		public short Priority
		{
			get { return priority; }
			set { priority = value; }
		}

		private ArrayList addresses;
		public ArrayList IPAddresses
		{
			get { return addresses; }
		}

		public bool IsNull
		{
			get { return (MxRecord.Null == this); }
		}

		#region Constructors
		private MxRecord(bool ignore)
			: this(null, 0)
		{
			ignore = !!ignore;
		}
		public MxRecord(string nameExchange) : this(nameExchange, 0) { }
		public MxRecord(string nameExchange, short priority)
		{
			this.nameexchange = nameExchange;
			this.priority = priority;
			this.addresses = new ArrayList(2);
		}

		#endregion

		#region IComparable
		public int CompareTo(Object obj)
		{
			int result = 1;
			if (obj == null)
				return result;

			if (obj is MxRecord)
			{
				result = Priority - ((MxRecord)obj).Priority;
				if (result == 0)
					result = String.Compare(NameExchange, ((MxRecord)obj).NameExchange, true);

				return result;
			}
			throw new ArgumentException("Object must be of type MxRecord.");
		}
		#endregion

		#region ISerializable
		internal MxRecord(SerializationInfo info, StreamingContext context)
		{
			nameexchange = info.GetString("NameExchange");
			priority = info.GetInt16("Priority");
			addresses = (ArrayList)info.GetValue("IPAddresses", typeof(ArrayList));
		}
		void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context)
		{
			info.AddValue("NameExchange", NameExchange, typeof(string));
			info.AddValue("Priority", Priority, typeof(short));
			info.AddValue("IPAddresses", IPAddresses, typeof(ArrayList));
		}

		#endregion

		#region operators

		public static bool operator ==(MxRecord mx1, MxRecord mx2)
		{
			return mx1.Equals(mx2);
		}

		public static bool operator !=(MxRecord mx1, MxRecord mx2)
		{
			return !mx1.Equals(mx2);
		}

		public static MxRecord operator +(MxRecord mx, IPAddress ip)
		{
			if (!(ip == null || mx.IsNull || mx.IPAddresses.Contains(ip)))
				mx.IPAddresses.Add(ip);

			return mx;
		}

		public static MxRecord operator -(MxRecord mx, IPAddress ip)
		{
			if (!(ip == null || mx.IsNull))
				mx.IPAddresses.Remove(ip);

			return mx;
		}

		public override bool Equals(Object obj)
		{
			if (!(obj is MxRecord))
				return false;

			MxRecord x = (MxRecord)obj;
			return ((Priority == x.Priority) && (String.Compare(NameExchange, x.NameExchange, true) == 0));
		}

		#endregion

		public override int GetHashCode()
		{
			return ToString().GetHashCode();
		}

		public override string ToString()
		{
			return NameExchange + ":" + Priority.ToString();
		}
	}
};

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -