Ejemplo n.º 1
0
        public override bool Equals(object obj)
        {
            // this object isn't null
            if (obj == null)
            {
                return(false);
            }

            // must be of same type
            if (this.GetType() != obj.GetType())
            {
                return(false);
            }

            MXRecord mxOther = (MXRecord)obj;

            // preference must match
            if (mxOther._preference != this._preference)
            {
                return(false);
            }

            // and so must the domain name
            if (mxOther._domainName != this._domainName)
            {
                return(false);
            }

            // its a match
            return(true);
        }
Ejemplo n.º 2
0
        /// <summary>
        ///     Shorthand form to make MX querying easier, essentially wraps up the retreival
        ///     of the MX records, and sorts them by preference
        /// </summary>
        /// <param name="domain"> domain name to retreive MX RRs for </param>
        /// <param name="dnsServer"> the server we're going to ask </param>
        /// <returns> An array of MXRecords </returns>
        public static MXRecord[] MXLookup(string domain, IPAddress dnsServer)
        {
            // check the inputs
            if (domain == null)
            {
                throw new ArgumentNullException("domain");
            }
            if (dnsServer == null)
            {
                throw new ArgumentNullException("dnsServer");
            }

            // create a request for this
            Request request = new Request();

            // add one question - the MX IN lookup for the supplied domain
            request.AddQuestion(new Question(domain, DnsType.MX, DnsClass.IN));

            // fire it off
            Response response = Lookup(request, dnsServer);

            // if we didn't get a response, then return null
            if (response == null)
            {
                return(null);
            }

            // create a growable array of MX records
            ArrayList resourceRecords = new ArrayList();

            // add each of the answers to the array
            foreach (Answer answer in response.Answers)
            {
                // if the answer is an MX record
                if (answer.Record.GetType() == typeof(MXRecord))
                {
                    // add it to our array
                    resourceRecords.Add(answer.Record);
                }
            }

            // create array of MX records
            MXRecord[] mxRecords = new MXRecord[resourceRecords.Count];

            // copy from the array list
            resourceRecords.CopyTo(mxRecords);

            // sort into lowest preference order
            Array.Sort(mxRecords);

            // and return
            return(mxRecords);
        }
Ejemplo n.º 3
0
        /// <summary>
        ///     Implements the IComparable interface so that we can sort the MX records by their
        ///     lowest preference
        /// </summary>
        /// <param name="obj"> the other MxRecord to compare against </param>
        /// <returns> 1, 0, -1 </returns>
        public int CompareTo(object obj)
        {
            MXRecord mxOther = (MXRecord)obj;

            // we want to be able to sort them by preference
            if (mxOther._preference < this._preference)
            {
                return(1);
            }
            if (mxOther._preference > this._preference)
            {
                return(-1);
            }

            // order mail servers of same preference by name
            return(-mxOther._domainName.CompareTo(this._domainName));
        }
Ejemplo n.º 4
0
        /// <summary>
        ///     Shorthand form to make MX querying easier, essentially wraps up the retreival
        ///     of the MX records, and sorts them by preference
        /// </summary>
        /// <param name="domain"> domain name to retreive MX RRs for </param>
        /// <param name="dnsServer"> the server we're going to ask </param>
        /// <returns> An array of MXRecords </returns>
        public static MXRecord[] MXLookup(string domain, IPAddress dnsServer)
        {
            // check the inputs
            if (domain == null) throw new ArgumentNullException("domain");
            if (dnsServer == null) throw new ArgumentNullException("dnsServer");

            // create a request for this
            Request request = new Request();

            // add one question - the MX IN lookup for the supplied domain
            request.AddQuestion(new Question(domain, DnsType.MX, DnsClass.IN));

            // fire it off
            Response response = Lookup(request, dnsServer);

            // if we didn't get a response, then return null
            if (response == null) return null;

            // create a growable array of MX records
            ArrayList resourceRecords = new ArrayList();

            // add each of the answers to the array
            foreach (Answer answer in response.Answers)
            {
                // if the answer is an MX record
                if (answer.Record.GetType() == typeof (MXRecord))
                {
                    // add it to our array
                    resourceRecords.Add(answer.Record);
                }
            }

            // create array of MX records
            MXRecord[] mxRecords = new MXRecord[resourceRecords.Count];

            // copy from the array list
            resourceRecords.CopyTo(mxRecords);

            // sort into lowest preference order
            Array.Sort(mxRecords);

            // and return
            return mxRecords;
        }