You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by er...@apache.org on 2006/04/22 20:54:32 UTC

svn commit: r396147 - in /directory/trunks/apacheds/protocol-dns/src/main/java/org/apache/directory/server/dns: protocol/ service/

Author: erodriguez
Date: Sat Apr 22 11:54:28 2006
New Revision: 396147

URL: http://svn.apache.org/viewcvs?rev=396147&view=rev
Log:
Updated DNS protocol provider to use MINA IoHandlerChain, replacing protocol-common chain.

Removed:
    directory/trunks/apacheds/protocol-dns/src/main/java/org/apache/directory/server/dns/service/DnsExceptionHandler.java
Modified:
    directory/trunks/apacheds/protocol-dns/src/main/java/org/apache/directory/server/dns/protocol/DnsProtocolHandler.java
    directory/trunks/apacheds/protocol-dns/src/main/java/org/apache/directory/server/dns/service/BuildReply.java
    directory/trunks/apacheds/protocol-dns/src/main/java/org/apache/directory/server/dns/service/DnsContext.java
    directory/trunks/apacheds/protocol-dns/src/main/java/org/apache/directory/server/dns/service/DomainNameServiceChain.java
    directory/trunks/apacheds/protocol-dns/src/main/java/org/apache/directory/server/dns/service/GetResourceRecords.java
    directory/trunks/apacheds/protocol-dns/src/main/java/org/apache/directory/server/dns/service/MonitorContext.java
    directory/trunks/apacheds/protocol-dns/src/main/java/org/apache/directory/server/dns/service/MonitorMessage.java
    directory/trunks/apacheds/protocol-dns/src/main/java/org/apache/directory/server/dns/service/MonitorReply.java
    directory/trunks/apacheds/protocol-dns/src/main/java/org/apache/directory/server/dns/service/MonitorRequest.java

Modified: directory/trunks/apacheds/protocol-dns/src/main/java/org/apache/directory/server/dns/protocol/DnsProtocolHandler.java
URL: http://svn.apache.org/viewcvs/directory/trunks/apacheds/protocol-dns/src/main/java/org/apache/directory/server/dns/protocol/DnsProtocolHandler.java?rev=396147&r1=396146&r2=396147&view=diff
==============================================================================
--- directory/trunks/apacheds/protocol-dns/src/main/java/org/apache/directory/server/dns/protocol/DnsProtocolHandler.java (original)
+++ directory/trunks/apacheds/protocol-dns/src/main/java/org/apache/directory/server/dns/protocol/DnsProtocolHandler.java Sat Apr 22 11:54:28 2006
@@ -19,15 +19,21 @@
 
 
 import org.apache.directory.server.dns.DnsConfiguration;
+import org.apache.directory.server.dns.DnsException;
 import org.apache.directory.server.dns.messages.DnsMessage;
+import org.apache.directory.server.dns.messages.DnsMessageModifier;
+import org.apache.directory.server.dns.messages.MessageType;
+import org.apache.directory.server.dns.messages.OpCode;
+import org.apache.directory.server.dns.messages.ResourceRecords;
+import org.apache.directory.server.dns.messages.ResponseCode;
 import org.apache.directory.server.dns.service.DnsContext;
 import org.apache.directory.server.dns.service.DomainNameServiceChain;
 import org.apache.directory.server.dns.store.RecordStore;
-import org.apache.directory.server.protocol.shared.chain.Command;
 import org.apache.mina.common.IdleStatus;
 import org.apache.mina.common.IoHandler;
 import org.apache.mina.common.IoSession;
 import org.apache.mina.filter.codec.ProtocolCodecFilter;
+import org.apache.mina.handler.chain.IoHandlerCommand;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -38,8 +44,8 @@
 
     private DnsConfiguration config;
     private RecordStore store;
-
-    private Command dnsService;
+    private IoHandlerCommand dnsService;
+    private String contextKey = "context";
 
 
     public DnsProtocolHandler(DnsConfiguration config, RecordStore store)
@@ -88,22 +94,44 @@
     {
         log.debug( "{} RCVD: {}", session.getRemoteAddress(), message );
 
-        DnsMessage request = ( DnsMessage ) message;
-
         try
         {
             DnsContext dnsContext = new DnsContext();
             dnsContext.setConfig( config );
             dnsContext.setStore( store );
-            dnsContext.setRequest( request );
+            session.setAttribute( getContextKey(), dnsContext );
+
+            dnsService.execute( null, session, message );
 
-            dnsService.execute( dnsContext );
+            DnsMessage response = dnsContext.getReply();
 
-            session.write( dnsContext.getReply() );
+            session.write( response );
         }
         catch ( Exception e )
         {
             log.error( e.getMessage(), e );
+
+            DnsMessage request = (DnsMessage) message;
+            DnsException de = (DnsException) e;
+
+            DnsMessageModifier modifier = new DnsMessageModifier();
+
+            modifier.setTransactionId( request.getTransactionId() );
+            modifier.setMessageType( MessageType.RESPONSE );
+            modifier.setOpCode( OpCode.QUERY );
+            modifier.setAuthoritativeAnswer( false );
+            modifier.setTruncated( false );
+            modifier.setRecursionDesired( request.isRecursionDesired() );
+            modifier.setRecursionAvailable( false );
+            modifier.setReserved( false );
+            modifier.setAcceptNonAuthenticatedData( false );
+            modifier.setResponseCode( ResponseCode.getTypeByOrdinal( de.getResponseCode() ) );
+            modifier.setQuestionRecords( request.getQuestionRecords() );
+            modifier.setAnswerRecords( new ResourceRecords() );
+            modifier.setAuthorityRecords( new ResourceRecords() );
+            modifier.setAdditionalRecords( new ResourceRecords() );
+
+            session.write( modifier.getDnsMessage() );
         }
     }
 
@@ -111,5 +139,11 @@
     public void messageSent( IoSession session, Object message )
     {
         log.debug( "{} SENT: {}", session.getRemoteAddress(), message );
+    }
+
+
+    public String getContextKey()
+    {
+        return ( this.contextKey );
     }
 }

Modified: directory/trunks/apacheds/protocol-dns/src/main/java/org/apache/directory/server/dns/service/BuildReply.java
URL: http://svn.apache.org/viewcvs/directory/trunks/apacheds/protocol-dns/src/main/java/org/apache/directory/server/dns/service/BuildReply.java?rev=396147&r1=396146&r2=396147&view=diff
==============================================================================
--- directory/trunks/apacheds/protocol-dns/src/main/java/org/apache/directory/server/dns/service/BuildReply.java (original)
+++ directory/trunks/apacheds/protocol-dns/src/main/java/org/apache/directory/server/dns/service/BuildReply.java Sat Apr 22 11:54:28 2006
@@ -23,17 +23,19 @@
 import org.apache.directory.server.dns.messages.OpCode;
 import org.apache.directory.server.dns.messages.ResourceRecords;
 import org.apache.directory.server.dns.messages.ResponseCode;
-import org.apache.directory.server.protocol.shared.chain.Context;
-import org.apache.directory.server.protocol.shared.chain.impl.CommandBase;
+import org.apache.mina.common.IoSession;
+import org.apache.mina.handler.chain.IoHandlerCommand;
 
 
-public class BuildReply extends CommandBase
+public class BuildReply implements IoHandlerCommand
 {
-    public boolean execute( Context context ) throws Exception
+    private String contextKey = "context";
+
+    public void execute( NextCommand next, IoSession session, Object message ) throws Exception
     {
-        DnsContext dnsContext = ( DnsContext ) context;
+        DnsContext dnsContext = (DnsContext) session.getAttribute( getContextKey() );
         ResourceRecords records = dnsContext.getResourceRecords();
-        DnsMessage request = dnsContext.getRequest();
+        DnsMessage request = (DnsMessage) message;
 
         DnsMessageModifier modifier = new DnsMessageModifier();
 
@@ -55,6 +57,11 @@
 
         dnsContext.setReply( modifier.getDnsMessage() );
 
-        return CONTINUE_CHAIN;
+        next.execute( session, message );
+    }
+
+    public String getContextKey()
+    {
+        return ( this.contextKey );
     }
 }

Modified: directory/trunks/apacheds/protocol-dns/src/main/java/org/apache/directory/server/dns/service/DnsContext.java
URL: http://svn.apache.org/viewcvs/directory/trunks/apacheds/protocol-dns/src/main/java/org/apache/directory/server/dns/service/DnsContext.java?rev=396147&r1=396146&r2=396147&view=diff
==============================================================================
--- directory/trunks/apacheds/protocol-dns/src/main/java/org/apache/directory/server/dns/service/DnsContext.java (original)
+++ directory/trunks/apacheds/protocol-dns/src/main/java/org/apache/directory/server/dns/service/DnsContext.java Sat Apr 22 11:54:28 2006
@@ -24,16 +24,14 @@
 import org.apache.directory.server.dns.messages.ResourceRecord;
 import org.apache.directory.server.dns.messages.ResourceRecords;
 import org.apache.directory.server.dns.store.RecordStore;
-import org.apache.directory.server.protocol.shared.chain.impl.ContextBase;
 
 
-public class DnsContext extends ContextBase
+public class DnsContext
 {
     private static final long serialVersionUID = -5911142975867852436L;
 
     private DnsConfiguration config;
     private RecordStore store;
-    private DnsMessage request;
     private DnsMessage reply;
     private ResourceRecords records = new ResourceRecords();
 
@@ -98,24 +96,6 @@
     public void setReply( DnsMessage reply )
     {
         this.reply = reply;
-    }
-
-
-    /**
-     * @return Returns the request.
-     */
-    public DnsMessage getRequest()
-    {
-        return request;
-    }
-
-
-    /**
-     * @param request The request to set.
-     */
-    public void setRequest( DnsMessage request )
-    {
-        this.request = request;
     }
 
 

Modified: directory/trunks/apacheds/protocol-dns/src/main/java/org/apache/directory/server/dns/service/DomainNameServiceChain.java
URL: http://svn.apache.org/viewcvs/directory/trunks/apacheds/protocol-dns/src/main/java/org/apache/directory/server/dns/service/DomainNameServiceChain.java?rev=396147&r1=396146&r2=396147&view=diff
==============================================================================
--- directory/trunks/apacheds/protocol-dns/src/main/java/org/apache/directory/server/dns/service/DomainNameServiceChain.java (original)
+++ directory/trunks/apacheds/protocol-dns/src/main/java/org/apache/directory/server/dns/service/DomainNameServiceChain.java Sat Apr 22 11:54:28 2006
@@ -17,7 +17,7 @@
 package org.apache.directory.server.dns.service;
 
 
-import org.apache.directory.server.protocol.shared.chain.impl.ChainBase;
+import org.apache.mina.handler.chain.IoHandlerChain;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -25,7 +25,7 @@
 /**
  * Domain Name Service (DNS) Protocol (RFC 1034, 1035)
  */
-public class DomainNameServiceChain extends ChainBase
+public class DomainNameServiceChain extends IoHandlerChain
 {
     /** the log for this class */
     private static final Logger log = LoggerFactory.getLogger( DomainNameServiceChain.class );
@@ -33,25 +33,23 @@
 
     public DomainNameServiceChain()
     {
-        addCommand( new DnsExceptionHandler() );
-
         if ( log.isDebugEnabled() )
         {
-            addCommand( new MonitorRequest() );
+            addLast( "monitorRequest", new MonitorRequest() );
         }
 
-        addCommand( new GetResourceRecords() );
+        addLast( "getResourceRecords", new GetResourceRecords() );
 
         if ( log.isDebugEnabled() )
         {
-            addCommand( new MonitorContext() );
+            addLast( "monitorContext", new MonitorContext() );
         }
 
-        addCommand( new BuildReply() );
+        addLast( "buildReply", new BuildReply() );
 
         if ( log.isDebugEnabled() )
         {
-            addCommand( new MonitorReply() );
+            addLast( "monitorReply", new MonitorReply() );
         }
     }
 }

Modified: directory/trunks/apacheds/protocol-dns/src/main/java/org/apache/directory/server/dns/service/GetResourceRecords.java
URL: http://svn.apache.org/viewcvs/directory/trunks/apacheds/protocol-dns/src/main/java/org/apache/directory/server/dns/service/GetResourceRecords.java?rev=396147&r1=396146&r2=396147&view=diff
==============================================================================
--- directory/trunks/apacheds/protocol-dns/src/main/java/org/apache/directory/server/dns/service/GetResourceRecords.java (original)
+++ directory/trunks/apacheds/protocol-dns/src/main/java/org/apache/directory/server/dns/service/GetResourceRecords.java Sat Apr 22 11:54:28 2006
@@ -21,22 +21,27 @@
 import java.util.Set;
 
 import org.apache.directory.server.dns.DnsException;
+import org.apache.directory.server.dns.messages.DnsMessage;
 import org.apache.directory.server.dns.messages.QuestionRecord;
 import org.apache.directory.server.dns.messages.QuestionRecords;
 import org.apache.directory.server.dns.messages.ResponseCode;
 import org.apache.directory.server.dns.store.RecordStore;
-import org.apache.directory.server.protocol.shared.chain.Context;
-import org.apache.directory.server.protocol.shared.chain.impl.CommandBase;
+import org.apache.directory.shared.ldap.exception.LdapNameNotFoundException;
+import org.apache.mina.common.IoSession;
+import org.apache.mina.handler.chain.IoHandlerCommand;
 
 
-public class GetResourceRecords extends CommandBase
+public class GetResourceRecords implements IoHandlerCommand
 {
-    public boolean execute( Context context ) throws Exception
+    private String contextKey = "context";
+
+    public void execute( NextCommand next, IoSession session, Object message ) throws Exception
     {
-        DnsContext dnsContext = ( DnsContext ) context;
+        DnsContext dnsContext = (DnsContext) session.getAttribute( getContextKey() );
         RecordStore store = dnsContext.getStore();
 
-        QuestionRecords questions = dnsContext.getRequest().getQuestionRecords();
+        DnsMessage request = (DnsMessage) message;
+        QuestionRecords questions = request.getQuestionRecords();
 
         Iterator it = questions.iterator();
 
@@ -45,7 +50,7 @@
             dnsContext.addResourceRecords( getEntry( store, ( QuestionRecord ) it.next() ) );
         }
 
-        return CONTINUE_CHAIN;
+        next.execute( session, message );
     }
 
 
@@ -57,6 +62,10 @@
         {
             records = store.getRecords( question );
         }
+        catch ( LdapNameNotFoundException lnnfe )
+        {
+            throw new DnsException( ResponseCode.NAME_ERROR );
+        }
         catch ( Exception e )
         {
             throw new DnsException( ResponseCode.SERVER_FAILURE );
@@ -68,5 +77,10 @@
         }
 
         return records;
+    }
+
+    public String getContextKey()
+    {
+        return ( this.contextKey );
     }
 }

Modified: directory/trunks/apacheds/protocol-dns/src/main/java/org/apache/directory/server/dns/service/MonitorContext.java
URL: http://svn.apache.org/viewcvs/directory/trunks/apacheds/protocol-dns/src/main/java/org/apache/directory/server/dns/service/MonitorContext.java?rev=396147&r1=396146&r2=396147&view=diff
==============================================================================
--- directory/trunks/apacheds/protocol-dns/src/main/java/org/apache/directory/server/dns/service/MonitorContext.java (original)
+++ directory/trunks/apacheds/protocol-dns/src/main/java/org/apache/directory/server/dns/service/MonitorContext.java Sat Apr 22 11:54:28 2006
@@ -19,25 +19,26 @@
 
 import org.apache.directory.server.dns.messages.ResourceRecords;
 import org.apache.directory.server.dns.store.RecordStore;
-import org.apache.directory.server.protocol.shared.chain.Context;
-import org.apache.directory.server.protocol.shared.chain.impl.CommandBase;
+import org.apache.mina.common.IoSession;
+import org.apache.mina.handler.chain.IoHandlerCommand;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 
-public class MonitorContext extends CommandBase
+public class MonitorContext implements IoHandlerCommand
 {
     /** the log for this class */
     private static final Logger log = LoggerFactory.getLogger( MonitorContext.class );
 
+    private String contextKey = "context";
 
-    public boolean execute( Context context ) throws Exception
+    public void execute( NextCommand next, IoSession session, Object message ) throws Exception
     {
         if ( log.isDebugEnabled() )
         {
             try
             {
-                DnsContext dnsContext = ( DnsContext ) context;
+                DnsContext dnsContext = (DnsContext) session.getAttribute( getContextKey() );
                 RecordStore store = dnsContext.getStore();
                 ResourceRecords records = dnsContext.getResourceRecords();
 
@@ -55,6 +56,11 @@
             }
         }
 
-        return CONTINUE_CHAIN;
+        next.execute( session, message );
+    }
+
+    public String getContextKey()
+    {
+        return ( this.contextKey );
     }
 }

Modified: directory/trunks/apacheds/protocol-dns/src/main/java/org/apache/directory/server/dns/service/MonitorMessage.java
URL: http://svn.apache.org/viewcvs/directory/trunks/apacheds/protocol-dns/src/main/java/org/apache/directory/server/dns/service/MonitorMessage.java?rev=396147&r1=396146&r2=396147&view=diff
==============================================================================
--- directory/trunks/apacheds/protocol-dns/src/main/java/org/apache/directory/server/dns/service/MonitorMessage.java (original)
+++ directory/trunks/apacheds/protocol-dns/src/main/java/org/apache/directory/server/dns/service/MonitorMessage.java Sat Apr 22 11:54:28 2006
@@ -22,10 +22,10 @@
 import org.apache.directory.server.dns.messages.OpCode;
 import org.apache.directory.server.dns.messages.QuestionRecords;
 import org.apache.directory.server.dns.messages.ResponseCode;
-import org.apache.directory.server.protocol.shared.chain.impl.CommandBase;
+import org.apache.mina.handler.chain.IoHandlerCommand;
 
 
-public abstract class MonitorMessage extends CommandBase
+public abstract class MonitorMessage implements IoHandlerCommand
 {
     protected String monitorMessage( DnsMessage message, String direction )
     {

Modified: directory/trunks/apacheds/protocol-dns/src/main/java/org/apache/directory/server/dns/service/MonitorReply.java
URL: http://svn.apache.org/viewcvs/directory/trunks/apacheds/protocol-dns/src/main/java/org/apache/directory/server/dns/service/MonitorReply.java?rev=396147&r1=396146&r2=396147&view=diff
==============================================================================
--- directory/trunks/apacheds/protocol-dns/src/main/java/org/apache/directory/server/dns/service/MonitorReply.java (original)
+++ directory/trunks/apacheds/protocol-dns/src/main/java/org/apache/directory/server/dns/service/MonitorReply.java Sat Apr 22 11:54:28 2006
@@ -17,7 +17,8 @@
 package org.apache.directory.server.dns.service;
 
 
-import org.apache.directory.server.protocol.shared.chain.Context;
+import org.apache.directory.server.dns.messages.DnsMessage;
+import org.apache.mina.common.IoSession;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -27,16 +28,18 @@
     /** the log for this class */
     private static final Logger log = LoggerFactory.getLogger( MonitorReply.class );
 
+    private String contextKey = "context";
 
-    public boolean execute( Context context ) throws Exception
+    public void execute( NextCommand next, IoSession session, Object message ) throws Exception
     {
         if ( log.isDebugEnabled() )
         {
             try
             {
-                DnsContext dnsContext = ( DnsContext ) context;
+                DnsContext dnsContext = (DnsContext) session.getAttribute( getContextKey() );
+                DnsMessage reply = dnsContext.getReply();
 
-                log.debug( monitorMessage( dnsContext.getReply(), "reply" ) );
+                log.debug( monitorMessage( reply, "reply" ) );
             }
             catch ( Exception e )
             {
@@ -45,6 +48,11 @@
             }
         }
 
-        return CONTINUE_CHAIN;
+        next.execute( session, message );
+    }
+
+    public String getContextKey()
+    {
+        return ( this.contextKey );
     }
 }

Modified: directory/trunks/apacheds/protocol-dns/src/main/java/org/apache/directory/server/dns/service/MonitorRequest.java
URL: http://svn.apache.org/viewcvs/directory/trunks/apacheds/protocol-dns/src/main/java/org/apache/directory/server/dns/service/MonitorRequest.java?rev=396147&r1=396146&r2=396147&view=diff
==============================================================================
--- directory/trunks/apacheds/protocol-dns/src/main/java/org/apache/directory/server/dns/service/MonitorRequest.java (original)
+++ directory/trunks/apacheds/protocol-dns/src/main/java/org/apache/directory/server/dns/service/MonitorRequest.java Sat Apr 22 11:54:28 2006
@@ -17,7 +17,8 @@
 package org.apache.directory.server.dns.service;
 
 
-import org.apache.directory.server.protocol.shared.chain.Context;
+import org.apache.directory.server.dns.messages.DnsMessage;
+import org.apache.mina.common.IoSession;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -27,16 +28,15 @@
     /** the log for this class */
     private static final Logger log = LoggerFactory.getLogger( MonitorRequest.class );
 
-
-    public boolean execute( Context context ) throws Exception
+    public void execute( NextCommand next, IoSession session, Object message ) throws Exception
     {
         if ( log.isDebugEnabled() )
         {
             try
             {
-                DnsContext dnsContext = ( DnsContext ) context;
+                DnsMessage request = (DnsMessage) message;
 
-                log.debug( monitorMessage( dnsContext.getRequest(), "request" ) );
+                log.debug( monitorMessage( request, "request" ) );
             }
             catch ( Exception e )
             {
@@ -45,6 +45,6 @@
             }
         }
 
-        return CONTINUE_CHAIN;
+        next.execute( session, message );
     }
 }