You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by el...@apache.org on 2007/11/01 17:03:48 UTC

svn commit: r591064 - in /directory/apacheds/branches/bigbang/protocol-dns/src/main/java/org/apache/directory/server/dns: ./ protocol/ service/

Author: elecharny
Date: Thu Nov  1 09:03:46 2007
New Revision: 591064

URL: http://svn.apache.org/viewvc?rev=591064&view=rev
Log:
Get rid of the IoHandlerChain

Added:
    directory/apacheds/branches/bigbang/protocol-dns/src/main/java/org/apache/directory/server/dns/service/DomainNameService.java
      - copied, changed from r590742, directory/apacheds/branches/bigbang/protocol-dns/src/main/java/org/apache/directory/server/dns/service/DomainNameServiceChain.java
Removed:
    directory/apacheds/branches/bigbang/protocol-dns/src/main/java/org/apache/directory/server/dns/service/BuildReply.java
    directory/apacheds/branches/bigbang/protocol-dns/src/main/java/org/apache/directory/server/dns/service/DomainNameServiceChain.java
    directory/apacheds/branches/bigbang/protocol-dns/src/main/java/org/apache/directory/server/dns/service/GetResourceRecords.java
    directory/apacheds/branches/bigbang/protocol-dns/src/main/java/org/apache/directory/server/dns/service/MonitorMessage.java
    directory/apacheds/branches/bigbang/protocol-dns/src/main/java/org/apache/directory/server/dns/service/MonitorReply.java
    directory/apacheds/branches/bigbang/protocol-dns/src/main/java/org/apache/directory/server/dns/service/MonitorRequest.java
Modified:
    directory/apacheds/branches/bigbang/protocol-dns/src/main/java/org/apache/directory/server/dns/DnsServer.java
    directory/apacheds/branches/bigbang/protocol-dns/src/main/java/org/apache/directory/server/dns/Main.java
    directory/apacheds/branches/bigbang/protocol-dns/src/main/java/org/apache/directory/server/dns/protocol/DnsProtocolHandler.java

Modified: directory/apacheds/branches/bigbang/protocol-dns/src/main/java/org/apache/directory/server/dns/DnsServer.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/protocol-dns/src/main/java/org/apache/directory/server/dns/DnsServer.java?rev=591064&r1=591063&r2=591064&view=diff
==============================================================================
--- directory/apacheds/branches/bigbang/protocol-dns/src/main/java/org/apache/directory/server/dns/DnsServer.java (original)
+++ directory/apacheds/branches/bigbang/protocol-dns/src/main/java/org/apache/directory/server/dns/DnsServer.java Thu Nov  1 09:03:46 2007
@@ -41,7 +41,6 @@
  */
 public class DnsServer extends DirectoryBackedService
 {
-    @SuppressWarnings ( { "UnusedDeclaration" } )
     private static final long serialVersionUID = 6943138644427163149L;
 
     /** The default IP port. */

Modified: directory/apacheds/branches/bigbang/protocol-dns/src/main/java/org/apache/directory/server/dns/Main.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/protocol-dns/src/main/java/org/apache/directory/server/dns/Main.java?rev=591064&r1=591063&r2=591064&view=diff
==============================================================================
--- directory/apacheds/branches/bigbang/protocol-dns/src/main/java/org/apache/directory/server/dns/Main.java (original)
+++ directory/apacheds/branches/bigbang/protocol-dns/src/main/java/org/apache/directory/server/dns/Main.java Thu Nov  1 09:03:46 2007
@@ -37,7 +37,7 @@
 public class Main
 {
     /** Logger for this class */
-    private static final Logger log = LoggerFactory.getLogger( Main.class );
+    private static final Logger LOG = LoggerFactory.getLogger( Main.class );
 
     private static DnsServer dnsConfiguration;
 
@@ -58,6 +58,8 @@
      */
     public void go() throws IOException
     {
+        LOG.debug( "Starting the DNS server" );
+        
         DatagramAcceptor datagramAcceptor = new DatagramAcceptor( null );
         SocketAcceptor socketAcceptor = new SocketAcceptor( null );
         DirectoryService directoryService = new DefaultDirectoryService();
@@ -73,6 +75,7 @@
 
     protected void shutdown()
     {
+        LOG.debug( "Stopping the DNS server" );
         dnsConfiguration.stop();
     }
 }

Modified: directory/apacheds/branches/bigbang/protocol-dns/src/main/java/org/apache/directory/server/dns/protocol/DnsProtocolHandler.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/protocol-dns/src/main/java/org/apache/directory/server/dns/protocol/DnsProtocolHandler.java?rev=591064&r1=591063&r2=591064&view=diff
==============================================================================
--- directory/apacheds/branches/bigbang/protocol-dns/src/main/java/org/apache/directory/server/dns/protocol/DnsProtocolHandler.java (original)
+++ directory/apacheds/branches/bigbang/protocol-dns/src/main/java/org/apache/directory/server/dns/protocol/DnsProtocolHandler.java Thu Nov  1 09:03:46 2007
@@ -32,14 +32,13 @@
 import org.apache.directory.server.dns.messages.ResourceRecord;
 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.service.DomainNameService;
 import org.apache.directory.server.dns.store.RecordStore;
 import org.apache.mina.common.IdleStatus;
 import org.apache.mina.common.IoHandler;
 import org.apache.mina.common.IoSession;
 import org.apache.mina.common.TransportType;
 import org.apache.mina.filter.codec.ProtocolCodecFilter;
-import org.apache.mina.handler.chain.IoHandlerCommand;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -50,11 +49,10 @@
  */
 public class DnsProtocolHandler implements IoHandler
 {
-    private static final Logger log = LoggerFactory.getLogger( DnsProtocolHandler.class );
+    private static final Logger LOG = LoggerFactory.getLogger( DnsProtocolHandler.class );
 
     private DnsServer config;
     private RecordStore store;
-    private IoHandlerCommand dnsService;
     private String contextKey = "context";
 
 
@@ -68,16 +66,14 @@
     {
         this.config = config;
         this.store = store;
-
-        dnsService = new DomainNameServiceChain();
     }
 
 
     public void sessionCreated( IoSession session ) throws Exception
     {
-        if ( log.isDebugEnabled() )
+        if ( LOG.isDebugEnabled() )
         {
-            log.debug( "{} CREATED:  {}", session.getRemoteAddress(), session.getTransportType() );
+            LOG.debug( "{} CREATED:  {}", session.getRemoteAddress(), session.getTransportType() );
         }
 
         if ( session.getTransportType() == TransportType.DATAGRAM )
@@ -95,32 +91,32 @@
 
     public void sessionOpened( IoSession session )
     {
-        log.debug( "{} OPENED", session.getRemoteAddress() );
+        LOG.debug( "{} OPENED", session.getRemoteAddress() );
     }
 
 
     public void sessionClosed( IoSession session )
     {
-        log.debug( "{} CLOSED", session.getRemoteAddress() );
+        LOG.debug( "{} CLOSED", session.getRemoteAddress() );
     }
 
 
     public void sessionIdle( IoSession session, IdleStatus status )
     {
-        log.debug( "{} IDLE ({})", session.getRemoteAddress(), status );
+        LOG.debug( "{} IDLE ({})", session.getRemoteAddress(), status );
     }
 
 
     public void exceptionCaught( IoSession session, Throwable cause )
     {
-        log.error( session.getRemoteAddress() + " EXCEPTION", cause );
+        LOG.error( session.getRemoteAddress() + " EXCEPTION", cause );
         session.close();
     }
 
 
     public void messageReceived( IoSession session, Object message )
     {
-        log.debug( "{} RCVD:  {}", session.getRemoteAddress(), message );
+        LOG.debug( "{} RCVD:  {}", session.getRemoteAddress(), message );
 
         try
         {
@@ -129,7 +125,7 @@
             dnsContext.setStore( store );
             session.setAttribute( getContextKey(), dnsContext );
 
-            dnsService.execute( null, session, message );
+            DomainNameService.execute( dnsContext, (DnsMessage)message );
 
             DnsMessage response = dnsContext.getReply();
 
@@ -137,7 +133,7 @@
         }
         catch ( Exception e )
         {
-            log.error( e.getMessage(), e );
+            LOG.error( e.getMessage(), e );
 
             DnsMessage request = ( DnsMessage ) message;
             DnsException de = ( DnsException ) e;
@@ -166,7 +162,7 @@
 
     public void messageSent( IoSession session, Object message )
     {
-        log.debug( "{} SENT:  {}", session.getRemoteAddress(), message );
+        LOG.debug( "{} SENT:  {}", session.getRemoteAddress(), message );
     }
 
 

Copied: directory/apacheds/branches/bigbang/protocol-dns/src/main/java/org/apache/directory/server/dns/service/DomainNameService.java (from r590742, directory/apacheds/branches/bigbang/protocol-dns/src/main/java/org/apache/directory/server/dns/service/DomainNameServiceChain.java)
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/protocol-dns/src/main/java/org/apache/directory/server/dns/service/DomainNameService.java?p2=directory/apacheds/branches/bigbang/protocol-dns/src/main/java/org/apache/directory/server/dns/service/DomainNameService.java&p1=directory/apacheds/branches/bigbang/protocol-dns/src/main/java/org/apache/directory/server/dns/service/DomainNameServiceChain.java&r1=590742&r2=591064&rev=591064&view=diff
==============================================================================
--- directory/apacheds/branches/bigbang/protocol-dns/src/main/java/org/apache/directory/server/dns/service/DomainNameServiceChain.java (original)
+++ directory/apacheds/branches/bigbang/protocol-dns/src/main/java/org/apache/directory/server/dns/service/DomainNameService.java Thu Nov  1 09:03:46 2007
@@ -20,7 +20,20 @@
 package org.apache.directory.server.dns.service;
 
 
-import org.apache.mina.handler.chain.IoHandlerChain;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+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.DnsMessageModifier;
+import org.apache.directory.server.dns.messages.MessageType;
+import org.apache.directory.server.dns.messages.OpCode;
+import org.apache.directory.server.dns.messages.QuestionRecord;
+import org.apache.directory.server.dns.messages.ResourceRecord;
+import org.apache.directory.server.dns.messages.ResponseCode;
+import org.apache.directory.server.dns.store.RecordStore;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -31,34 +44,180 @@
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  * @version $Rev$, $Date$
  */
-public class DomainNameServiceChain extends IoHandlerChain
+public class DomainNameService
 {
     /** the log for this class */
-    private static final Logger log = LoggerFactory.getLogger( DomainNameServiceChain.class );
+    private static final Logger LOG = LoggerFactory.getLogger( DomainNameService.class );
 
 
     /**
-     * Creates a new instance of DomainNameServiceChain.
+     * Creates a new instance of DomainNameService.
      */
-    public DomainNameServiceChain()
+    public static void execute( DnsContext dnsContext, DnsMessage request ) throws Exception
     {
-        if ( log.isDebugEnabled() )
+        if ( LOG.isDebugEnabled() )
         {
-            addLast( "monitorRequest", new MonitorRequest() );
+            monitorRequest( request );
         }
 
-        addLast( "getResourceRecords", new GetResourceRecords() );
+        getResourceRecords( dnsContext, request );
 
-        if ( log.isDebugEnabled() )
+        if ( LOG.isDebugEnabled() )
         {
-            addLast( "monitorContext", new MonitorContext() );
+            monitorContext( dnsContext );
         }
 
-        addLast( "buildReply", new BuildReply() );
+        buildReply( dnsContext, request );
 
-        if ( log.isDebugEnabled() )
+        if ( LOG.isDebugEnabled() )
         {
-            addLast( "monitorReply", new MonitorReply() );
+            monitorReply( dnsContext );
         }
+    }
+    
+    private static void monitorRequest( DnsMessage request ) throws Exception
+    {
+        try
+        {
+            LOG.debug( monitorMessage( request, "request" ) );
+        }
+        catch ( Exception e )
+        {
+            // This is a monitor.  No exceptions should bubble up.
+            LOG.error( "Error in request monitor", e );
+        }
+    }
+    
+
+    private static void getResourceRecords( DnsContext dnsContext, DnsMessage request ) throws Exception
+    {
+        RecordStore store = dnsContext.getStore();
+
+        List<QuestionRecord> questions = request.getQuestionRecords();
+
+        Iterator<QuestionRecord> it = questions.iterator();
+
+        while ( it.hasNext() )
+        {
+            dnsContext.addResourceRecords( getEntry( store, it.next() ) );
+        }
+    }
+    
+    
+    /**
+     * Returns a set of {@link ResourceRecord}s from a {@link RecordStore}, given a DNS {@link QuestionRecord}.
+     *
+     * @param store
+     * @param question
+     * @return The set of {@link ResourceRecord}s.
+     * @throws DNSException
+     */
+    private static Set<ResourceRecord> getEntry( RecordStore store, QuestionRecord question ) throws DnsException
+    {
+        Set<ResourceRecord> records = null;
+
+        records = store.getRecords( question );
+
+        if ( records == null || records.isEmpty() )
+        {
+            LOG.debug( "The domain name referenced in the query does not exist." );
+
+            throw new DnsException( ResponseCode.NAME_ERROR );
+        }
+
+        return records;
+    }
+    
+    
+    private static void monitorContext( DnsContext dnsContext ) throws Exception
+    {
+        try
+        {
+            RecordStore store = dnsContext.getStore();
+            List<ResourceRecord> records = dnsContext.getResourceRecords();
+
+            StringBuffer sb = new StringBuffer();
+            sb.append( "Monitoring context:" );
+            sb.append( "\n\t" + "store:                     " + store );
+            sb.append( "\n\t" + "records:                   " + records );
+
+            LOG.debug( sb.toString() );
+        }
+        catch ( Exception e )
+        {
+            // This is a monitor.  No exceptions should bubble up.
+            LOG.error( "Error in context monitor", e );
+        }
+    }
+    
+    
+    private static void buildReply( DnsContext dnsContext, DnsMessage request ) throws Exception
+    {
+        List<ResourceRecord> records = dnsContext.getResourceRecords();
+
+        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.NO_ERROR );
+        modifier.setQuestionRecords( request.getQuestionRecords() );
+
+        modifier.setAnswerRecords( records );
+        modifier.setAuthorityRecords( new ArrayList<ResourceRecord>() );
+        modifier.setAdditionalRecords( new ArrayList<ResourceRecord>() );
+
+        dnsContext.setReply( modifier.getDnsMessage() );
+    }
+ 
+    
+    private static void monitorReply( DnsContext dnsContext ) throws Exception
+    {
+        try
+        {
+            DnsMessage reply = dnsContext.getReply();
+
+            LOG.debug( monitorMessage( reply, "reply" ) );
+        }
+        catch ( Exception e )
+        {
+            // This is a monitor.  No exceptions should bubble up.
+            LOG.error( "Error in reply monitor", e );
+        }
+    }
+    
+    
+    private static String monitorMessage( DnsMessage message, String direction )
+    {
+        MessageType messageType = message.getMessageType();
+        OpCode opCode = message.getOpCode();
+        ResponseCode responseCode = message.getResponseCode();
+        int transactionId = message.getTransactionId();
+
+        StringBuffer sb = new StringBuffer();
+        sb.append( "Monitoring " + direction + ":" );
+        sb.append( "\n\t" + "messageType                " + messageType );
+        sb.append( "\n\t" + "opCode                     " + opCode );
+        sb.append( "\n\t" + "responseCode               " + responseCode );
+        sb.append( "\n\t" + "transactionId              " + transactionId );
+
+        sb.append( "\n\t" + "authoritativeAnswer        " + message.isAuthoritativeAnswer() );
+        sb.append( "\n\t" + "truncated                  " + message.isTruncated() );
+        sb.append( "\n\t" + "recursionDesired           " + message.isRecursionDesired() );
+        sb.append( "\n\t" + "recursionAvailable         " + message.isRecursionAvailable() );
+        sb.append( "\n\t" + "reserved                   " + message.isReserved() );
+        sb.append( "\n\t" + "acceptNonAuthenticatedData " + message.isAcceptNonAuthenticatedData() );
+
+        List<QuestionRecord> questions = message.getQuestionRecords();
+
+        sb.append( "\n\t" + "questions:                 " + questions );
+
+        return sb.toString();
     }
 }