Fix a bug which can cause an invalid header id
Add javadocs
Some minor refactoring

git-svn-id: https://svn.apache.org/repos/asf/james/jspf/branches/asynch-jspf@536180 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/src/main/java/org/apache/james/jspf/FutureSPFResult.java b/src/main/java/org/apache/james/jspf/FutureSPFResult.java
index 8d65b03..188bb0e 100644
--- a/src/main/java/org/apache/james/jspf/FutureSPFResult.java
+++ b/src/main/java/org/apache/james/jspf/FutureSPFResult.java
@@ -29,6 +29,12 @@
         isReady = false;

     }

     

+    /**

+     * Set SPFResult using the given SPFsession

+     * 

+     * @param session 

+     * 

+     */

     public synchronized void setSPFResult(SPFSession session) {

         setSPFSession(session);

         isReady = true;

@@ -45,31 +51,51 @@
         }

     }

 

+    /**

+     * @see org.apache.james.jspf.SPFResult#getExplanation()

+     */

     public String getExplanation() {

         checkReady();

         return super.getExplanation();

     }

 

+    /**

+     * @see org.apache.james.jspf.SPFResult#getHeader()

+     */

     public String getHeader() {

         checkReady();

         return super.getHeader();

     }

 

+    /**

+     * @see org.apache.james.jspf.SPFResult#getHeaderName()

+     */

     public String getHeaderName() {

         checkReady();

         return super.getHeaderName();

     }

 

+    /**

+     * @see org.apache.james.jspf.SPFResult#getHeaderText()

+     */

     public String getHeaderText() {

         checkReady();

         return super.getHeaderText();

     }

 

+    /**

+     * @see org.apache.james.jspf.SPFResult#getResult()

+     */

     public String getResult() {

         checkReady();

         return super.getResult();

     }

 

+    /**

+     * Return true if the result was fully builded 

+     * 

+     * @return true or false

+     */

     public boolean isReady() {

         return isReady;

     }

diff --git a/src/main/java/org/apache/james/jspf/SPF.java b/src/main/java/org/apache/james/jspf/SPF.java
index 184b6b3..0673b8d 100644
--- a/src/main/java/org/apache/james/jspf/SPF.java
+++ b/src/main/java/org/apache/james/jspf/SPF.java
@@ -277,6 +277,24 @@
         this.executor = executor;
     }
 
+    
+    private static final class DefaultSPFChecker implements SPFChecker {
+
+        /**
+         * @see org.apache.james.jspf.core.SPFChecker#checkSPF(org.apache.james.jspf.core.SPFSession)
+         */
+        public DNSLookupContinuation checkSPF(SPFSession spfData)
+                throws PermErrorException, TempErrorException,
+                NeutralException, NoneException {
+            if (spfData.getCurrentResultExpanded() == null) {
+                String resultChar = spfData.getCurrentResult() != null ? spfData.getCurrentResult() : "";
+                String result = SPF1Utils.resultToName(resultChar);
+                spfData.setCurrentResultExpanded(result);
+            }
+            return null;
+        }
+    }
+    
     /**
      * Run check for SPF with the given values.
      * 
@@ -300,20 +318,7 @@
             spfData.setCurrentResultExpanded(e1.getResult());
         }
 
-        SPFChecker resultHandler = new SPFChecker() {
-
-            public DNSLookupContinuation checkSPF(SPFSession spfData)
-                    throws PermErrorException, TempErrorException,
-                    NeutralException, NoneException {
-                if (spfData.getCurrentResultExpanded() == null) {
-                    String resultChar = spfData.getCurrentResult() != null ? spfData.getCurrentResult() : "";
-                    String result = SPF1Utils.resultToName(resultChar);
-                    spfData.setCurrentResultExpanded(result);
-                }
-                return null;
-            }
-
-        };
+        SPFChecker resultHandler = new DefaultSPFChecker();
         
         spfData.pushChecker(resultHandler);
         spfData.pushChecker(this);
diff --git a/src/main/java/org/apache/james/jspf/core/SPFSession.java b/src/main/java/org/apache/james/jspf/core/SPFSession.java
index 2fde2e1..a92f491 100644
--- a/src/main/java/org/apache/james/jspf/core/SPFSession.java
+++ b/src/main/java/org/apache/james/jspf/core/SPFSession.java
@@ -79,7 +79,7 @@
     private String currentResultExpanded;
     
     /**
-     * Build the SPF1Data from the given parameters
+     * Build the SPFSession from the given parameters
      * 
      * @param mailFrom
      *            The emailaddress of the sender
diff --git a/src/main/java/org/apache/james/jspf/core/StagedMultipleSPFExecutor.java b/src/main/java/org/apache/james/jspf/core/StagedMultipleSPFExecutor.java
index 2e80f5a..2f3242a 100644
--- a/src/main/java/org/apache/james/jspf/core/StagedMultipleSPFExecutor.java
+++ b/src/main/java/org/apache/james/jspf/core/StagedMultipleSPFExecutor.java
@@ -62,9 +62,16 @@
 

     }

 

-    private static int id = 1;

+    // Use short as id because the id header is limited to 16 bit

+    // From RFC1035 4.1.1. Header section format :

+    // 

+    // ID              A 16 bit identifier assigned by the program that

+    //                 generates any kind of query.  This identifier is copied

+    //                 the corresponding reply and can be used by the requester

+    //                 to match up replies to outstanding queries.

+    //

+    private static short id;

     

-    // TODO: sooner or later we have to avoid overflow and restart.

     private synchronized int nextId() {

         return id++;

     }

diff --git a/src/main/java/org/apache/james/jspf/policies/InitialChecksPolicy.java b/src/main/java/org/apache/james/jspf/policies/InitialChecksPolicy.java
index e763475..381e70e 100644
--- a/src/main/java/org/apache/james/jspf/policies/InitialChecksPolicy.java
+++ b/src/main/java/org/apache/james/jspf/policies/InitialChecksPolicy.java
@@ -38,6 +38,9 @@
  */
 public final class InitialChecksPolicy implements SPFChecker {
     
+    /**
+     * @see org.apache.james.jspf.core.SPFChecker#checkSPF(org.apache.james.jspf.core.SPFSession)
+     */
     public DNSLookupContinuation checkSPF(SPFSession spfData)
             throws PermErrorException, TempErrorException, NeutralException,
             NoneException {
diff --git a/src/main/java/org/apache/james/jspf/policies/SPFRetriever.java b/src/main/java/org/apache/james/jspf/policies/SPFRetriever.java
index 68679b3..54287f1 100644
--- a/src/main/java/org/apache/james/jspf/policies/SPFRetriever.java
+++ b/src/main/java/org/apache/james/jspf/policies/SPFRetriever.java
@@ -26,6 +26,9 @@
     
     private static final class SPFRecordHandlerDNSResponseListener implements SPFCheckerDNSResponseListener {
 
+        /**
+         * @see org.apache.james.jspf.core.SPFCheckerDNSResponseListener#onDNSResponse(org.apache.james.jspf.core.DNSResponse, org.apache.james.jspf.core.SPFSession)
+         */
         public DNSLookupContinuation onDNSResponse(
                 DNSResponse response, SPFSession session)
                 throws PermErrorException,
@@ -50,6 +53,9 @@
 
     private static final class SPFRetrieverDNSResponseListener implements SPFCheckerDNSResponseListener {
 
+        /**
+         * @see org.apache.james.jspf.core.SPFCheckerDNSResponseListener#onDNSResponse(org.apache.james.jspf.core.DNSResponse, org.apache.james.jspf.core.SPFSession)
+         */
         public DNSLookupContinuation onDNSResponse(
                 DNSResponse response, SPFSession session)
                 throws PermErrorException, NoneException,
diff --git a/src/main/java/org/apache/james/jspf/policies/SPFStrictCheckerRetriever.java b/src/main/java/org/apache/james/jspf/policies/SPFStrictCheckerRetriever.java
index 4b77dcd..8b4169c 100644
--- a/src/main/java/org/apache/james/jspf/policies/SPFStrictCheckerRetriever.java
+++ b/src/main/java/org/apache/james/jspf/policies/SPFStrictCheckerRetriever.java
@@ -27,6 +27,9 @@
     
     private static final class SPFStrictSPFRecordsDNSResponseListener implements SPFCheckerDNSResponseListener {
 
+        /**
+         * @see org.apache.james.jspf.core.SPFCheckerDNSResponseListener#onDNSResponse(org.apache.james.jspf.core.DNSResponse, org.apache.james.jspf.core.SPFSession)
+         */
         public DNSLookupContinuation onDNSResponse(
                 DNSResponse response, SPFSession session)
                 throws PermErrorException,
@@ -55,6 +58,9 @@
     
     private static final class SPFStrictCheckDNSResponseListener implements SPFCheckerDNSResponseListener {
 
+        /**
+         * @see org.apache.james.jspf.core.SPFCheckerDNSResponseListener#onDNSResponse(org.apache.james.jspf.core.DNSResponse, org.apache.james.jspf.core.SPFSession)
+         */
         public DNSLookupContinuation onDNSResponse(
                 DNSResponse response, SPFSession session)
                 throws PermErrorException, NoneException,
diff --git a/src/main/java/org/apache/james/jspf/policies/local/DefaultExplanationPolicy.java b/src/main/java/org/apache/james/jspf/policies/local/DefaultExplanationPolicy.java
index 6279f13..24158f6 100644
--- a/src/main/java/org/apache/james/jspf/policies/local/DefaultExplanationPolicy.java
+++ b/src/main/java/org/apache/james/jspf/policies/local/DefaultExplanationPolicy.java
@@ -40,6 +40,10 @@
 
     
     private final class ExplanationChecker implements SPFChecker {
+        
+        /**
+         * @see org.apache.james.jspf.core.SPFChecker#checkSPF(org.apache.james.jspf.core.SPFSession)
+         */
         public DNSLookupContinuation checkSPF(SPFSession spfData)
                 throws PermErrorException,
                 NoneException, TempErrorException,