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