You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by ba...@apache.org on 2007/05/07 12:21:39 UTC

svn commit: r535836 - in /james/jspf/branches/asynch-jspf: ./ src/main/java/org/apache/james/jspf/core/ src/main/java/org/apache/james/jspf/impl/ src/test/java/org/apache/james/jspf/ src/test/resources/org/apache/james/jspf/ stage/uk.nominet/jars/

Author: bago
Date: Mon May  7 03:21:35 2007
New Revision: 535836

URL: http://svn.apache.org/viewvc?view=rev&rev=535836
Log:
Added support for recursive CNAME resolution in dnsjnio based resolver.
Added a LookupAsynch class into the dnsjnio project and changed the DNSJnioAsynchService to make use of that class.
http://sourceforge.net/tracker/index.php?func=detail&aid=1713970&group_id=194284&atid=948814

Modified:
    james/jspf/branches/asynch-jspf/pom.xml
    james/jspf/branches/asynch-jspf/src/main/java/org/apache/james/jspf/core/DNSRequest.java
    james/jspf/branches/asynch-jspf/src/main/java/org/apache/james/jspf/core/DNSResponse.java
    james/jspf/branches/asynch-jspf/src/main/java/org/apache/james/jspf/impl/DNSJnioAsynchService.java
    james/jspf/branches/asynch-jspf/src/main/java/org/apache/james/jspf/impl/DNSServiceXBillImpl.java
    james/jspf/branches/asynch-jspf/src/test/java/org/apache/james/jspf/AbstractYamlTest.java
    james/jspf/branches/asynch-jspf/src/test/resources/org/apache/james/jspf/mailzone-tests.yml
    james/jspf/branches/asynch-jspf/stage/uk.nominet/jars/dnsjnio-0.9.7-SNAPSHOT.jar

Modified: james/jspf/branches/asynch-jspf/pom.xml
URL: http://svn.apache.org/viewvc/james/jspf/branches/asynch-jspf/pom.xml?view=diff&rev=535836&r1=535835&r2=535836
==============================================================================
--- james/jspf/branches/asynch-jspf/pom.xml (original)
+++ james/jspf/branches/asynch-jspf/pom.xml Mon May  7 03:21:35 2007
@@ -1,4 +1,5 @@
 <?xml version="1.0" encoding="ISO-8859-1"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
 <!--
   Licensed to the Apache Software Foundation (ASF) under one
   or more contributor license agreements.  See the NOTICE file
@@ -17,7 +18,6 @@
   specific language governing permissions and limitations
   under the License.    
 -->
-<project>
   <modelVersion>4.0.0</modelVersion>
   <groupId>org.apache.james</groupId>
   <artifactId>jspf</artifactId>

Modified: james/jspf/branches/asynch-jspf/src/main/java/org/apache/james/jspf/core/DNSRequest.java
URL: http://svn.apache.org/viewvc/james/jspf/branches/asynch-jspf/src/main/java/org/apache/james/jspf/core/DNSRequest.java?view=diff&rev=535836&r1=535835&r2=535836
==============================================================================
--- james/jspf/branches/asynch-jspf/src/main/java/org/apache/james/jspf/core/DNSRequest.java (original)
+++ james/jspf/branches/asynch-jspf/src/main/java/org/apache/james/jspf/core/DNSRequest.java Mon May  7 03:21:35 2007
@@ -73,4 +73,10 @@
         return recordType;
     }
 
+    /**
+     * @see java.lang.Object#toString()
+     */
+    public String toString() {
+        return getHostname()+"#"+getRecordType();
+    }
 }

Modified: james/jspf/branches/asynch-jspf/src/main/java/org/apache/james/jspf/core/DNSResponse.java
URL: http://svn.apache.org/viewvc/james/jspf/branches/asynch-jspf/src/main/java/org/apache/james/jspf/core/DNSResponse.java?view=diff&rev=535836&r1=535835&r2=535836
==============================================================================
--- james/jspf/branches/asynch-jspf/src/main/java/org/apache/james/jspf/core/DNSResponse.java (original)
+++ james/jspf/branches/asynch-jspf/src/main/java/org/apache/james/jspf/core/DNSResponse.java Mon May  7 03:21:35 2007
@@ -58,4 +58,16 @@
         }
     }
 
+    /**
+     * @see java.lang.Object#toString()
+     */
+    public String toString() {
+        if (exception != null) {
+            return "EXCEPTION!";
+        } else if (response != null) {
+            return response.toString();
+        } else {
+            return "NULL?";
+        }
+    }
 }

Modified: james/jspf/branches/asynch-jspf/src/main/java/org/apache/james/jspf/impl/DNSJnioAsynchService.java
URL: http://svn.apache.org/viewvc/james/jspf/branches/asynch-jspf/src/main/java/org/apache/james/jspf/impl/DNSJnioAsynchService.java?view=diff&rev=535836&r1=535835&r2=535836
==============================================================================
--- james/jspf/branches/asynch-jspf/src/main/java/org/apache/james/jspf/impl/DNSJnioAsynchService.java (original)
+++ james/jspf/branches/asynch-jspf/src/main/java/org/apache/james/jspf/impl/DNSJnioAsynchService.java Mon May  7 03:21:35 2007
@@ -25,25 +25,17 @@
 import org.apache.james.jspf.core.IResponse;
 import org.apache.james.jspf.core.IResponseQueue;
 import org.xbill.DNS.DClass;
+import org.xbill.DNS.ExtendedNonblockingResolver;
+import org.xbill.DNS.LookupAsynch;
 import org.xbill.DNS.Message;
 import org.xbill.DNS.Name;
-import org.xbill.DNS.NonblockingResolver;
-import org.xbill.DNS.RRset;
 import org.xbill.DNS.Record;
-import org.xbill.DNS.Section;
+import org.xbill.DNS.Resolver;
 import org.xbill.DNS.TextParseException;
 import org.xbill.DNS.Type;
 
-import uk.nominet.dnsjnio.Response;
-import uk.nominet.dnsjnio.ResponseQueue;
-
-import java.net.UnknownHostException;
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.List;
-
 public class DNSJnioAsynchService implements DNSAsynchLookupService {
-
+/*
     private final class ResponseQueueAdaptor extends ResponseQueue {
 
         private IResponseQueue responsePool;
@@ -104,22 +96,19 @@
         
         
     }
+*/
+    private ExtendedNonblockingResolver resolver;
 
-    private NonblockingResolver resolver;
-
-    public DNSJnioAsynchService() {
-        try {
-            this.resolver = new NonblockingResolver("127.0.0.1");
-            this.resolver.setPort(35347);
-            this.resolver.setTCP(false);
-        } catch (UnknownHostException e) {
-            // TODO Auto-generated catch block
-            e.printStackTrace();
-        }
+    public DNSJnioAsynchService(ExtendedNonblockingResolver resolver) {
+        this.resolver = resolver;
+        LookupAsynch.setDefaultResolver(resolver);
     }
     
     public void setTimeout(int timeout) {
-        this.resolver.setTimeout(timeout);
+        Resolver[] res = resolver.getResolvers();
+        for (int i = 0; i < res.length; i++) {
+            res[i].setTimeout(timeout);
+        }
     }
     
     /**
@@ -131,7 +120,46 @@
         Message message;
         try {
             message = makeQuery(request, id);
-            this.resolver.sendAsync(message, new Integer(id), new ResponseQueueAdaptor(responsePool));
+            LookupAsynch la = new LookupAsynch(message.getQuestion().getName(), message.getQuestion().getType());
+            la.runAsynch(new Runnable() {
+
+                private IResponseQueue responsePool;
+                private Integer id;
+                private LookupAsynch lookup;
+
+                public void run() {
+                    responsePool.insertResponse(new IResponse() {
+
+                        public Exception getException() {
+                            if (lookup.getResult() == LookupAsynch.TRY_AGAIN) {
+                                System.err.println("######## "+lookup.getErrorString());
+                                return new DNSService.TimeoutException();
+                            } else {
+                                return null;
+                            }
+                        }
+
+                        public Object getId() {
+                            return id;
+                        }
+
+                        public Object getValue() {
+                            return (DNSServiceXBillImpl.convertRecordsToList(lookup.getAnswers()));
+                        }
+                        
+                    });
+                }
+
+                public Runnable setResponsePool(LookupAsynch la, IResponseQueue responsePool,
+                        Integer integer) {
+                    this.lookup = la;
+                    this.responsePool = responsePool;
+                    this.id = integer;
+                    return this;
+                }
+                
+            }.setResponsePool(la, responsePool, new Integer(id)));
+            // this.resolver.sendAsync(message, new Integer(id), new ResponseQueueAdaptor(responsePool));
         } catch (TextParseException e) {
             // TODO Auto-generated catch block
             e.printStackTrace();

Modified: james/jspf/branches/asynch-jspf/src/main/java/org/apache/james/jspf/impl/DNSServiceXBillImpl.java
URL: http://svn.apache.org/viewvc/james/jspf/branches/asynch-jspf/src/main/java/org/apache/james/jspf/impl/DNSServiceXBillImpl.java?view=diff&rev=535836&r1=535835&r2=535836
==============================================================================
--- james/jspf/branches/asynch-jspf/src/main/java/org/apache/james/jspf/impl/DNSServiceXBillImpl.java (original)
+++ james/jspf/branches/asynch-jspf/src/main/java/org/apache/james/jspf/impl/DNSServiceXBillImpl.java Mon May  7 03:21:35 2007
@@ -28,7 +28,6 @@
 import org.xbill.DNS.Lookup;
 import org.xbill.DNS.MXRecord;
 import org.xbill.DNS.PTRRecord;
-import org.xbill.DNS.RRset;
 import org.xbill.DNS.Record;
 import org.xbill.DNS.SPFRecord;
 import org.xbill.DNS.TXTRecord;
@@ -142,8 +141,7 @@
                 throw new TimeoutException();
             }
             
-            List records;
-            records = convertRecordsToList(rr);
+            List records = convertRecordsToList(rr);
             
             log.debug("Found " + (rr != null ? rr.length : 0) + " "+recordTypeDescription+"-Records");
             return records;

Modified: james/jspf/branches/asynch-jspf/src/test/java/org/apache/james/jspf/AbstractYamlTest.java
URL: http://svn.apache.org/viewvc/james/jspf/branches/asynch-jspf/src/test/java/org/apache/james/jspf/AbstractYamlTest.java?view=diff&rev=535836&r1=535835&r2=535836
==============================================================================
--- james/jspf/branches/asynch-jspf/src/test/java/org/apache/james/jspf/AbstractYamlTest.java (original)
+++ james/jspf/branches/asynch-jspf/src/test/java/org/apache/james/jspf/AbstractYamlTest.java Mon May  7 03:21:35 2007
@@ -42,8 +42,10 @@
 import org.jvyaml.DefaultYAMLFactory;
 import org.jvyaml.YAMLFactory;
 import org.xbill.DNS.DClass;
+import org.xbill.DNS.ExtendedNonblockingResolver;
 import org.xbill.DNS.Lookup;
 import org.xbill.DNS.Name;
+import org.xbill.DNS.NonblockingResolver;
 import org.xbill.DNS.Resolver;
 import org.xbill.DNS.SimpleResolver;
 import org.xbill.DNS.TextParseException;
@@ -69,6 +71,7 @@
     protected static final int TIMEOUT = 10;
     protected static final int MOCK_SERVICE = 2;
     protected static final int FAKE_SERVER = 1;
+    protected static final int REAL_SERVER = 3;
     private int dnsServiceMockStyle = MOCK_SERVICE;
 
     protected static final int SYNCHRONOUS_EXECUTOR = 1;
@@ -207,9 +210,34 @@
         } else if (getSpfExecutorType() == STAGED_EXECUTOR || getSpfExecutorType() == STAGED_EXECUTOR_MULTITHREADED){
             executor = new StagedMultipleSPFExecutor(log, new DNSServiceAsynchSimulator(dns, getSpfExecutorType() == STAGED_EXECUTOR_MULTITHREADED));
         } else if (getSpfExecutorType() == STAGED_EXECUTOR_DNSJNIO) {
-            DNSJnioAsynchService jnioAsynchService = new DNSJnioAsynchService();
-            jnioAsynchService.setTimeout(TIMEOUT);
-            executor = new StagedMultipleSPFExecutor(log, jnioAsynchService);
+            
+            try {
+                ExtendedNonblockingResolver resolver;
+                
+                if (getDnsServiceMockStyle() == FAKE_SERVER) {
+                    NonblockingResolver nonblockingResolver = new NonblockingResolver("127.0.0.1");
+                    resolver = new ExtendedNonblockingResolver(new Resolver[] {nonblockingResolver});
+                    nonblockingResolver.setPort(35347);
+                    nonblockingResolver.setTCP(false);
+                } else if (getDnsServiceMockStyle() == REAL_SERVER) {
+                    resolver = new ExtendedNonblockingResolver();
+                    Resolver[] resolvers = resolver.getResolvers();
+                    for (int i = 0; i < resolvers.length; i++) {
+                        resolvers[i].setTCP(false);
+                    }
+                } else {
+                    throw new IllegalStateException("DnsServiceMockStyle "+getDnsServiceMockStyle()+" is not supported when STAGED_EXECUTOR_DNSJNIO executor style is used");
+                }
+                
+                DNSJnioAsynchService jnioAsynchService = new DNSJnioAsynchService(resolver);
+                jnioAsynchService.setTimeout(TIMEOUT);
+                executor = new StagedMultipleSPFExecutor(log, jnioAsynchService);
+
+            } catch (UnknownHostException e) {
+                // TODO Auto-generated catch block
+                e.printStackTrace();
+            }
+
         } else {
             throw new UnsupportedOperationException("Unknown executor type");
         }
@@ -309,6 +337,7 @@
         switch (getDnsServiceMockStyle()) {
             case MOCK_SERVICE: return getDNSServiceMockedDNSService();
             case FAKE_SERVER: return getDNSServiceFakeServer();
+            case REAL_SERVER: return getDNSServiceReal();
             default: 
                 throw new UnsupportedOperationException("Unsupported mock style");
         }
@@ -357,6 +386,16 @@
             }
 
         };
+        // TIMEOUT 2 seconds
+        serviceXBillImpl.setTimeOut(TIMEOUT);
+        return serviceXBillImpl;
+    }
+    
+    /**
+     * @return
+     */
+    protected DNSService getDNSServiceReal() {
+        DNSServiceXBillImpl serviceXBillImpl = new DNSServiceXBillImpl(log);
         // TIMEOUT 2 seconds
         serviceXBillImpl.setTimeOut(TIMEOUT);
         return serviceXBillImpl;

Modified: james/jspf/branches/asynch-jspf/src/test/resources/org/apache/james/jspf/mailzone-tests.yml
URL: http://svn.apache.org/viewvc/james/jspf/branches/asynch-jspf/src/test/resources/org/apache/james/jspf/mailzone-tests.yml?view=diff&rev=535836&r1=535835&r2=535836
==============================================================================
--- james/jspf/branches/asynch-jspf/src/test/resources/org/apache/james/jspf/mailzone-tests.yml (original)
+++ james/jspf/branches/asynch-jspf/src/test/resources/org/apache/james/jspf/mailzone-tests.yml Mon May  7 03:21:35 2007
@@ -945,6 +945,8 @@
   52.spf1-test.mailzone.com:
     - TXT:  'v=spf1 include:53.spf1-test.mailzone.com                  -all'
   53.spf1-test.mailzone.com:
+    - CNAME:  54.spf1-test.mailzone.com.
+  54.spf1-test.mailzone.com:
     - TXT:  'v=spf1 include:42.spf1-test.mailzone.com                  -all'
   55.spf1-test.mailzone.com:
     - TXT:  'v=spf1 include:56.spf1-test.mailzone.com                  -all'

Modified: james/jspf/branches/asynch-jspf/stage/uk.nominet/jars/dnsjnio-0.9.7-SNAPSHOT.jar
URL: http://svn.apache.org/viewvc/james/jspf/branches/asynch-jspf/stage/uk.nominet/jars/dnsjnio-0.9.7-SNAPSHOT.jar?view=diff&rev=535836&r1=535835&r2=535836
==============================================================================
Binary files - no diff available.



---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org