noel        2004/03/29 16:48:40

  Modified:    src/java/org/apache/james/dnsserver DNSServer.java
  Log:
  Revert to prior version.  Premature merger from branch_2_1_fcs
  
  Revision  Changes    Path
  1.26      +12 -182   james-server/src/java/org/apache/james/dnsserver/DNSServer.java
  
  Index: DNSServer.java
  ===================================================================
  RCS file: /home/cvs/james-server/src/java/org/apache/james/dnsserver/DNSServer.java,v
  retrieving revision 1.25
  retrieving revision 1.26
  diff -u -r1.25 -r1.26
  --- DNSServer.java    30 Mar 2004 00:37:46 -0000      1.25
  +++ DNSServer.java    30 Mar 2004 00:48:40 -0000      1.26
  @@ -29,7 +29,6 @@
   import org.xbill.DNS.FindServer;
   import org.xbill.DNS.Message;
   import org.xbill.DNS.MXRecord;
  -import org.xbill.DNS.ARecord;
   import org.xbill.DNS.Name;
   import org.xbill.DNS.Rcode;
   import org.xbill.DNS.Record;
  @@ -43,7 +42,7 @@
   import java.net.UnknownHostException;
   import java.util.*;
   
  -/*
  +/**
    * Provides DNS client functionality to services running
    * inside James
    */
  @@ -52,34 +51,34 @@
       implements Configurable, Initializable,
       org.apache.james.services.DNSServer, DNSServerMBean {
   
  -    /*
  +    /**
        * A resolver instance used to retrieve DNS records.  This
        * is a reference to a third party library object.
        */
       private Resolver resolver;
   
  -    /*
  +    /**
        * A TTL cache of results received from the DNS server.  This
        * is a reference to a third party library object.
        */
       private Cache cache;
   
  -    /*
  +    /**
        * Whether the DNS response is required to be authoritative
        */
       private byte dnsCredibility;
   
  -    /*
  +    /**
        * The DNS servers to be used by this service
        */
       private List dnsServers = new ArrayList();
   
  -    /*
  +    /**
        * The MX Comparator used in the MX sort.
        */
       private Comparator mxComparator = new MXRecordComparator();
   
  -    /*
  +    /**
        * @see 
org.apache.avalon.framework.configuration.Configurable#configure(Configuration)
        */
       public void configure( final Configuration configuration )
  @@ -120,7 +119,7 @@
           dnsCredibility = authoritative ? Credibility.AUTH_ANSWER : 
Credibility.NONAUTH_ANSWER;
       }
   
  -    /*
  +    /**
        * @see org.apache.avalon.framework.activity.Initializable#initialize()
        */
       public void initialize()
  @@ -158,7 +157,7 @@
           getLogger().debug("DNSServer ...init end");
       }
   
  -    /*
  +    /**
        * <p>Return the list of DNS servers in use by this service</p>
        *
        * @return an array of DNS server names
  @@ -167,7 +166,7 @@
           return (String[])dnsServers.toArray(new String[0]);
       }
       
  -    /*
  +    /**
        * <p>Return a prioritized unmodifiable list of MX records
        * obtained from the server.</p>
        *
  @@ -223,7 +222,7 @@
           }
       }
   
  -    /*
  +    /**
        * Looks up DNS records of the specified type for the specified name.
        *
        * This method is a public wrapper for the private implementation
  @@ -236,7 +235,7 @@
           return rawDNSLookup(name,false,type);
       }
   
  -    /*
  +    /**
        * Looks up DNS records of the specified type for the specified name
        *
        * @param namestr the name of the host to be looked up
  @@ -347,175 +346,6 @@
               int pa = ((MXRecord)a).getPriority();
               int pb = ((MXRecord)b).getPriority();
               return (pa == pb) ? (512 - random.nextInt(1024)) : pa - pb;
  -        }
  -    }
  -
  -    /*
  -     * Returns an Iterator over org.apache.mailet.HostAddress, a
  -     * specialized subclass of javax.mail.URLName, which provides
  -     * location information for servers that are specified as mail
  -     * handlers for the given hostname.  This is done using MX records,
  -     * and the HostAddress instances are returned sorted by MX priority.
  -     * If no host is found for domainName, the Iterator returned will be
  -     * empty and the first call to hasNext() will return false.  The
  -     * Iterator is a nested iterator: the outer iteration is over the
  -     * results of the MX record lookup, and the inner iteration is over
  -     * potentially multiple A records for each MX record.  DNS lookups
  -     * are deferred until actually needed.
  -     *
  -     * @since v2.2.0a16-unstable
  -     * @param domainName - the domain for which to find mail servers
  -     * @return an Iterator over HostAddress instances, sorted by priority
  -     */
  -    public Iterator getSMTPHostAddresses(final String domainName) {
  -        return new Iterator() {
  -            private Iterator mxHosts = new MxSorter(domainName);
  -            private Iterator addresses = null;
  -
  -            public boolean hasNext() {
  -                /* Make sure that when next() is called, that we can
  -                 * provide a HostAddress.  This means that we need to
  -                 * have an inner iterator, and verify that it has
  -                 * addresses.  We could, for example, run into a
  -                 * situation where the next mxHost didn't have any valid
  -                 * addresses.
  -                 */
  -                if ((addresses == null || !addresses.hasNext()) && 
mxHosts.hasNext()) do {
  -                    final String nextHostname = (String)mxHosts.next();
  -                    addresses = new Iterator() {
  -                        private Record[] aRecords = lookup(nextHostname, Type.A);
  -                        int i = 0;
  -
  -                        public boolean hasNext() {
  -                            return aRecords != null && i < aRecords.length;
  -                        }
  -
  -                        public Object next() {
  -                            return new org.apache.mailet.HostAddress(nextHostname, 
"smtp://" + ((ARecord)aRecords[i++]).getAddress().getHostAddress());
  -                        }
  -
  -                        public void remove() {
  -                            throw new UnsupportedOperationException ("remove not 
supported by this iterator");
  -                        }
  -                    };
  -                } while (!addresses.hasNext() && mxHosts.hasNext());
  -
  -                return addresses != null && addresses.hasNext();
  -            }
  -
  -            public Object next() {
  -                return addresses != null ? addresses.next() : null;
  -            }
  -
  -            public void remove() {
  -                throw new UnsupportedOperationException ("remove not supported by 
this iterator");
  -            }
  -        };
  -    }
  -
  -    /* A way to get mail hosts to try.  If any MX hosts are found for the
  -     * domain name with which this is constructed, then these MX hostnames
  -     * are returned in priority sorted order, lowest priority numbers coming
  -     * first.  And, whenever multiple hosts have the same priority then these
  -     * are returned in a randomized order within that priority group, as
  -     * specified in RFC 2821, Section 5.
  -     *
  -     * If no MX hosts are found for the domain name, then a DNS search is
  -     * performed for an A record.  If an A record is found then domainName itself
  -     * will be returned by the Iterator, and it will be the only object in
  -     * the Iterator.  If however no A record is found (in addition to no MX
  -     * record) then the Iterator constructed will be empty; the first call to
  -     * its hasNext() will return false.
  -     *
  -     * This behavior attempts to satisfy the requirements of RFC 2821, Section 5.
  -     * @since v2.2.0a16-unstable
  -     */
  -    private class MxSorter implements Iterator {
  -        private int priorListPriority = Integer.MIN_VALUE;
  -        private ArrayList equiPriorityList = new ArrayList();
  -        private Record[] mxRecords;
  -        private Random rnd = new Random ();
  -
  -        /* The implementation of this class attempts to achieve efficiency by
  -         * performing no more sorting of the rawMxRecords than necessary. In the
  -         * large majority of cases the first attempt, made by a client of this class
  -         * to connect to an SMTP server for a given domain, will succeed. As such,
  -         * in most cases only one call will be made to this Iterator's
  -         * next(), and in that majority of cases there will have been no need
  -         * to sort the array of MX Records.  This implementation would, however, be
  -         * relatively inefficient in the case where all hosts fail, when every
  -         * Object is called out of a long Iterator.
  -         */
  -
  -        private MxSorter(String domainName) {
  -            mxRecords =  lookup(domainName, Type.MX);
  -            if (mxRecords == null || mxRecords.length == 0) {
  -                //no MX records were found, so try to use the domainName
  -                Record[] aRecords = lookup(domainName, Type.A);
  -                if(aRecords != null && aRecords.length > 0) {
  -                    equiPriorityList.add(domainName);
  -                }
  -            }
  -        }
  -
  -        /*
  -         * Sets presentPriorityList to contain all hosts
  -         * which have the least priority greater than pastPriority.
  -         * When this is called, both (rawMxRecords.length > 0) and
  -         * (presentPriorityList.size() == 0), by contract.
  -         * In the case where this is called repeatedly, so that priorListPriority
  -         * has already become the highest of the priorities in the rawMxRecords,
  -         * then this returns without having added any elements to
  -         * presentPriorityList; presentPriorityList.size remains zero.
  -         */
  -        private void createPriorityList(){
  -            int leastPriorityFound = Integer.MAX_VALUE;
  -            /* We loop once through the rawMxRecords, finding the lowest priority
  -             * greater than priorListPriority, and collecting all the hostnames
  -             * with that priority into equiPriorityList.
  -             */
  -            for (int i = 0; i < mxRecords.length; i++) {
  -                MXRecord thisRecord = (MXRecord)mxRecords[i];
  -                int thisRecordPriority = thisRecord.getPriority();
  -                if (thisRecordPriority > priorListPriority) {
  -                    if (thisRecordPriority < leastPriorityFound) {
  -                        equiPriorityList.clear();
  -                        leastPriorityFound = thisRecordPriority;
  -                        equiPriorityList.add(thisRecord.getTarget().toString());
  -                    } else if (thisRecordPriority == leastPriorityFound) {
  -                        equiPriorityList.add(thisRecord.getTarget().toString());
  -                    }
  -                }
  -            }
  -            priorListPriority = leastPriorityFound;
  -        }
  -
  -        public boolean hasNext(){
  -            if (equiPriorityList.size() > 0){
  -                return true;
  -            }else if (mxRecords != null && mxRecords.length > 0){
  -                createPriorityList();
  -                return equiPriorityList.size() > 0;
  -            } else{
  -                return false;
  -            }
  -        }
  -
  -        public Object next(){
  -            if (hasNext()){
  -                /* this randomization is done to comply with RFC-2821 */
  -                /* Note: java.util.Random.nextInt(limit) is about twice as fast as 
(int)(Math.random()*limit) */
  -                int getIndex = rnd.nextInt(equiPriorityList.size());
  -                Object returnElement = equiPriorityList.get(getIndex);
  -                equiPriorityList.remove(getIndex);
  -                return returnElement;
  -            }else{
  -                throw new NoSuchElementException();
  -            }
  -        }
  -
  -        public void remove () {
  -            throw new UnsupportedOperationException ("remove not supported by this 
iterator");
           }
       }
   }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to