You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by ak...@apache.org on 2007/10/08 07:54:47 UTC
svn commit: r582712 [1/3] - in /directory:
apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/
apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/
apacheds/branches/bigbang...
Author: akarasulu
Date: Sun Oct 7 22:54:38 2007
New Revision: 582712
URL: http://svn.apache.org/viewvc?rev=582712&view=rev
Log:
Cleaning up LDAP protocol provider and the codec
Added:
directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/DefaultAbandonHandler.java (contents, props changed)
- copied, changed from r582695, directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/AbandonHandler.java
directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/DefaultAddHandler.java (contents, props changed)
- copied, changed from r582695, directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/AddHandler.java
directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/DefaultBindHandler.java (contents, props changed)
- copied, changed from r582695, directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/BindHandler.java
directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/DefaultCompareHandler.java (contents, props changed)
- copied, changed from r582695, directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/CompareHandler.java
directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/DefaultDeleteHandler.java (contents, props changed)
- copied, changed from r582695, directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/DeleteHandler.java
directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/DefaultExtendedHandler.java (contents, props changed)
- copied, changed from r582695, directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/ExtendedHandler.java
directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/DefaultModifyDnHandler.java (contents, props changed)
- copied, changed from r582695, directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/ModifyDnHandler.java
directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/DefaultModifyHandler.java (contents, props changed)
- copied, changed from r582695, directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/ModifyHandler.java
directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/DefaultSearchHandler.java (contents, props changed)
- copied, changed from r582695, directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/SearchHandler.java
directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/DefaultUnbindHandler.java (contents, props changed)
- copied, changed from r582695, directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/UnbindHandler.java
directory/shared/branches/bigbang/ldap/src/main/java/org/apache/directory/shared/ldap/message/spi/BinaryAttributeDetector.java
Modified:
directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/LdapProtocolProvider.java
directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/AbandonHandler.java
directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/AddHandler.java
directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/BindHandler.java
directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/CompareHandler.java
directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/DeleteHandler.java
directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/ExtendedHandler.java
directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/ModifyDnHandler.java
directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/ModifyHandler.java
directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/SearchHandler.java
directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/UnbindHandler.java
directory/apacheds/branches/bigbang/protocol-ldap/src/test/java/org/apache/directory/server/ldap/LdapProtocolProviderTest.java
directory/apacheds/branches/bigbang/server-jndi/src/main/java/org/apache/directory/server/configuration/ApacheDS.java
directory/shared/branches/bigbang/asn1-codec/src/main/java/org/apache/directory/shared/asn1/codec/Asn1CodecDecoder.java
directory/shared/branches/bigbang/asn1-codec/src/main/java/org/apache/directory/shared/asn1/codec/Asn1CodecEncoder.java
directory/shared/branches/bigbang/ldap/src/main/java/org/apache/directory/shared/ldap/codec/LdapMessageContainer.java
directory/shared/branches/bigbang/ldap/src/main/java/org/apache/directory/shared/ldap/codec/TwixDecoder.java
directory/shared/branches/bigbang/ldap/src/main/java/org/apache/directory/shared/ldap/codec/TwixProvider.java
directory/shared/branches/bigbang/ldap/src/main/java/org/apache/directory/shared/ldap/message/MessageDecoder.java
directory/shared/branches/bigbang/ldap/src/main/java/org/apache/directory/shared/ldap/message/MessageEncoder.java
directory/shared/branches/bigbang/ldap/src/main/java/org/apache/directory/shared/ldap/message/spi/Provider.java
Modified: directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/LdapProtocolProvider.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/LdapProtocolProvider.java?rev=582712&r1=582711&r2=582712&view=diff
==============================================================================
--- directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/LdapProtocolProvider.java (original)
+++ directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/LdapProtocolProvider.java Sun Oct 7 22:54:38 2007
@@ -22,11 +22,14 @@
import org.apache.directory.server.core.DirectoryService;
import org.apache.directory.server.ldap.support.*;
+import org.apache.directory.server.schema.registries.AttributeTypeRegistry;
import org.apache.directory.shared.asn1.codec.Asn1CodecDecoder;
import org.apache.directory.shared.asn1.codec.Asn1CodecEncoder;
import org.apache.directory.shared.ldap.exception.LdapNamingException;
import org.apache.directory.shared.ldap.message.*;
import org.apache.directory.shared.ldap.message.extended.NoticeOfDisconnect;
+import org.apache.directory.shared.ldap.message.spi.BinaryAttributeDetector;
+import org.apache.directory.shared.ldap.schema.AttributeType;
import org.apache.mina.common.IoFilterChain;
import org.apache.mina.common.IoHandler;
import org.apache.mina.common.IoSession;
@@ -36,10 +39,11 @@
import org.apache.mina.filter.codec.ProtocolDecoder;
import org.apache.mina.filter.codec.ProtocolEncoder;
import org.apache.mina.handler.demux.DemuxingIoHandler;
-import org.apache.mina.handler.demux.MessageHandler;
import org.apache.mina.util.SessionLog;
import javax.naming.Context;
+import javax.naming.NamingException;
+import javax.naming.ldap.Control;
import java.util.*;
@@ -52,74 +56,28 @@
*/
public class LdapProtocolProvider
{
- //TM private static long cumul = 0L;
- //TM private static long count = 0;
- //TM private static Object lock = new Object();
-
/** the constant service name of this ldap protocol provider **/
public static final String SERVICE_NAME = "ldap";
- /** a map of the default request object class name to the handler class name */
- private static final Map<String,Class> DEFAULT_HANDLERS;
- /** a set of supported controls */
- private static final Set SUPPORTED_CONTROLS;
- /** configuration for the LDAP protocol provider **/
- private LdapConfiguration cfg;
- private DirectoryService directoryService;
-
- static
- {
- Map<String, Class> map = new HashMap<String, Class>();
-
- /*
- * Note:
- *
- * By mapping the implementation class in addition to the interface
- * for the request type to the handler Class we're bypassing the need
- * to iterate through Interface[] looking for handlers. For the default
- * cases here the name of the request object's class will look up
- * immediately.
- */
-
- map.put( AbandonRequest.class.getName(), AbandonHandler.class );
- map.put( AbandonRequestImpl.class.getName(), AbandonHandler.class );
-
- map.put( AddRequest.class.getName(), AddHandler.class );
- map.put( AddRequestImpl.class.getName(), AddHandler.class );
-
- map.put( BindRequest.class.getName(), BindHandler.class );
- map.put( BindRequestImpl.class.getName(), BindHandler.class );
- map.put( CompareRequest.class.getName(), CompareHandler.class );
- map.put( CompareRequestImpl.class.getName(), CompareHandler.class );
-
- map.put( DeleteRequest.class.getName(), DeleteHandler.class );
- map.put( DeleteRequestImpl.class.getName(), DeleteHandler.class );
-
- map.put( ExtendedRequest.class.getName(), ExtendedHandler.class );
- map.put( ExtendedRequestImpl.class.getName(), ExtendedHandler.class );
-
- map.put( ModifyRequest.class.getName(), ModifyHandler.class );
- map.put( ModifyRequestImpl.class.getName(), ModifyHandler.class );
-
- map.put( ModifyDnRequest.class.getName(), ModifyDnHandler.class );
- map.put( ModifyDnRequestImpl.class.getName(), ModifyDnHandler.class );
+ /** a set of supported controls */
+ private Set<String> supportedControls;
- map.put( SearchRequest.class.getName(), SearchHandler.class );
- map.put( SearchRequestImpl.class.getName(), SearchHandler.class );
+ /** configuration for the LDAP protocol provider **/
+ private LdapConfiguration ldapConfiguration;
- map.put( UnbindRequest.class.getName(), UnbindHandler.class );
- map.put( UnbindRequestImpl.class.getName(), UnbindHandler.class );
+ private DirectoryService directoryService;
- DEFAULT_HANDLERS = Collections.unmodifiableMap( map );
+ private AbandonHandler abandonHandler;
+ private AddHandler addHandler;
+ private BindHandler bindHandler;
+ private CompareHandler compareHandler;
+ private DeleteHandler deleteHandler;
+ private ExtendedHandler extendedHandler;
+ private ModifyHandler modifyHandler;
+ private ModifyDnHandler modifyDnHandler;
+ private SearchHandler searchHandler;
+ private UnbindHandler unbindHandler;
- Set<Object> set = new HashSet<Object>();
- set.add( PersistentSearchControl.CONTROL_OID );
- set.add( EntryChangeControl.CONTROL_OID );
- set.add( SubentriesControl.CONTROL_OID );
- set.add( ManageDsaITControl.CONTROL_OID );
- set.add( CascadeControl.CONTROL_OID );
- SUPPORTED_CONTROLS = Collections.unmodifiableSet( set );
- }
/** the underlying provider codec factory */
private final ProtocolCodecFactory codecFactory;
@@ -132,24 +90,23 @@
// C O N S T R U C T O R S
// ------------------------------------------------------------------------
+
+
/**
* Creates a MINA LDAP protocol provider.
*
- * @param env environment properties used to configure the provider and
* underlying codec providers if any
* @param cfg the ldap configuration
* @param directoryService the directory service core
*
* @throws LdapNamingException if there are problems setting up the protocol provider
*/
- public LdapProtocolProvider( DirectoryService directoryService, LdapConfiguration cfg,
- Hashtable<String,Object> env ) throws LdapNamingException
+ public LdapProtocolProvider( DirectoryService directoryService, LdapConfiguration cfg ) throws LdapNamingException
{
- this.cfg = cfg;
+ this.ldapConfiguration = cfg;
this.directoryService = directoryService;
- Hashtable<String,Object> copy = new Hashtable<String,Object>( env.size() );
- copy.putAll( env );
+ Hashtable<String,Object> copy = new Hashtable<String,Object>();
copy.put( Context.PROVIDER_URL, "" );
copy.put( Context.INITIAL_CONTEXT_FACTORY, "org.apache.directory.server.core.jndi.CoreContextFactory" );
copy.put( DirectoryService.JNDI_KEY, directoryService );
@@ -157,56 +114,25 @@
SessionRegistry.releaseSingleton();
new SessionRegistry( cfg, copy );
- for ( String type : DEFAULT_HANDLERS.keySet() )
- {
- MessageHandler handler;
- Class clazz = null;
-
- if ( copy.containsKey( type ) )
- {
- try
- {
- clazz = Class.forName( ( String ) copy.get( type ) );
- }
- catch ( ClassNotFoundException e )
- {
- LdapNamingException lne;
- String msg = "failed to load class " + clazz;
- msg += " for processing " + type + " objects.";
- lne = new LdapNamingException( msg, ResultCodeEnum.OTHER );
- lne.setRootCause( e );
- throw lne;
- }
- }
- else
- {
- clazz = ( Class ) DEFAULT_HANDLERS.get( type );
- }
-
- try
- {
- Class typeClass = Class.forName( type );
- handler = ( MessageHandler ) clazz.newInstance();
-
- if ( handler instanceof BindHandler )
- {
- ( ( BindHandler ) handler ).setDirectoryService( directoryService );
- }
-
- this.handler.addMessageHandler( typeClass, handler );
- }
- catch ( Exception e )
- {
- LdapNamingException lne;
- String msg = "failed to create handler instance of " + clazz;
- msg += " for processing " + type + " objects.";
- lne = new LdapNamingException( msg, ResultCodeEnum.OTHER );
- lne.setRootCause( e );
- throw lne;
- }
- }
+ this.supportedControls = new HashSet<String>();
+ this.supportedControls.add( PersistentSearchControl.CONTROL_OID );
+ this.supportedControls.add( EntryChangeControl.CONTROL_OID );
+ this.supportedControls.add( SubentriesControl.CONTROL_OID );
+ this.supportedControls.add( ManageDsaITControl.CONTROL_OID );
+ this.supportedControls.add( CascadeControl.CONTROL_OID );
+
+ setAbandonHandler( new DefaultAbandonHandler() );
+ setAddHandler( new DefaultAddHandler() );
+ setBindHandler( new DefaultBindHandler() );
+ setCompareHandler( new DefaultCompareHandler() );
+ setDeleteHandler( new DefaultDeleteHandler() );
+ setExtendedHandler( new DefaultExtendedHandler() );
+ setModifyHandler( new DefaultModifyHandler() );
+ setModifyDnHandler( new DefaultModifyDnHandler() );
+ setSearchHandler( new DefaultSearchHandler() );
+ setUnbindHandler( new DefaultUnbindHandler() );
- this.codecFactory = new ProtocolCodecFactoryImpl( copy );
+ this.codecFactory = new ProtocolCodecFactoryImpl( directoryService );
}
@@ -214,6 +140,7 @@
// ProtocolProvider Methods
// ------------------------------------------------------------------------
+
public String getName()
{
return SERVICE_NAME;
@@ -235,98 +162,275 @@
/**
* Registeres the specified {@link ExtendedOperationHandler} to this
* protocol provider to provide a specific LDAP extended operation.
+ *
+ * @param eoh an extended operation handler
*/
public void addExtendedOperationHandler( ExtendedOperationHandler eoh )
{
- ExtendedHandler eh = ( ExtendedHandler ) handler.getMessageHandler( ExtendedRequest.class );
- eh.addHandler( eoh );
- eh = ( ExtendedHandler ) handler.getMessageHandler( ExtendedRequestImpl.class );
- eh.addHandler( eoh );
+ extendedHandler.addHandler( eoh );
}
/**
* Deregisteres an {@link ExtendedOperationHandler} with the specified <tt>oid</tt>
* from this protocol provider.
+ *
+ * @param oid the numeric identifier for the extended operation associated with
+ * the handler to remove
*/
public void removeExtendedOperationHandler( String oid )
{
- ExtendedHandler eh = ( ExtendedHandler ) handler.getMessageHandler( ExtendedRequest.class );
- eh.removeHandler( oid );
- eh = ( ExtendedHandler ) handler.getMessageHandler( ExtendedRequestImpl.class );
- eh.removeHandler( oid );
+ extendedHandler.removeHandler( oid );
}
/**
* Returns an {@link ExtendedOperationHandler} with the specified <tt>oid</tt>
* which is registered to this protocol provider.
+ *
+ * @param oid the oid of the extended request of associated with the extended
+ * request handler
+ * @return the exnteded operation handler
*/
public ExtendedOperationHandler getExtendedOperationHandler( String oid )
{
- ExtendedHandler eh = ( ExtendedHandler ) handler.getMessageHandler( ExtendedRequest.class );
- return eh.getHandler( oid );
+ return extendedHandler.getHandler( oid );
}
/**
* Returns a {@link Map} of all registered OID-{@link ExtendedOperationHandler}
* pairs.
+ *
+ * @return map of all extended operation handlers
*/
- public Map getExtendedOperationHandlerMap()
+ public Map<String,ExtendedOperationHandler> getExtendedOperationHandlerMap()
{
- ExtendedHandler eh = ( ExtendedHandler ) handler.getMessageHandler( ExtendedRequest.class );
- return eh.getHandlerMap();
+ return extendedHandler.getHandlerMap();
}
- /**
- * A snickers based BER Decoder factory.
- */
- private static final class ProtocolCodecFactoryImpl implements ProtocolCodecFactory
+
+ public DirectoryService getDirectoryService()
{
- final Hashtable env;
+ return directoryService;
+ }
- public ProtocolCodecFactoryImpl()
+ public void setDirectoryService( DirectoryService directoryService )
+ {
+ this.directoryService = directoryService;
+
+ if ( bindHandler != null )
{
- this.env = null;
+ this.bindHandler.setDirectoryService( directoryService );
}
+ }
+
+
+ public Set<String> getSupportedControls()
+ {
+ return supportedControls;
+ }
+
+
+ public void setSupportedControls( Set<String> supportedControls )
+ {
+ this.supportedControls = supportedControls;
+ }
+
+
+ public AbandonHandler getAbandonHandler()
+ {
+ return abandonHandler;
+ }
+
+
+ public void setAbandonHandler( AbandonHandler abandonHandler )
+ {
+ this.handler.removeMessageHandler( AbandonRequest.class );
+ this.abandonHandler = abandonHandler;
+ //noinspection unchecked
+ this.handler.addMessageHandler( AbandonRequest.class, this.abandonHandler );
+ }
+
+
+ public AddHandler getAddHandler()
+ {
+ return addHandler;
+ }
+
+
+ public void setAddHandler( AddHandler addHandler )
+ {
+ this.handler.removeMessageHandler( AddRequest.class );
+ this.addHandler = addHandler;
+ //noinspection unchecked
+ this.handler.addMessageHandler( AddRequest.class, this.addHandler );
+ }
- ProtocolCodecFactoryImpl(Hashtable env)
+ public BindHandler getBindHandler()
+ {
+ return bindHandler;
+ }
+
+
+ public void setBindHandler( BindHandler bindHandler )
+ {
+ this.handler.removeMessageHandler( BindRequest.class );
+ this.bindHandler = bindHandler;
+ if ( directoryService != null )
+ {
+ this.bindHandler.setDirectoryService( directoryService );
+ }
+ //noinspection unchecked
+ this.handler.addMessageHandler( BindRequest.class, this.bindHandler );
+ }
+
+
+ public CompareHandler getCompareHandler()
+ {
+ return compareHandler;
+ }
+
+
+ public void setCompareHandler( CompareHandler compareHandler )
+ {
+ this.handler.removeMessageHandler( CompareRequest.class );
+ this.compareHandler = compareHandler;
+ //noinspection unchecked
+ this.handler.addMessageHandler( CompareRequest.class, this.compareHandler );
+ }
+
+
+ public DeleteHandler getDeleteHandler()
+ {
+ return deleteHandler;
+ }
+
+
+ public void setDeleteHandler( DeleteHandler deleteHandler )
+ {
+ this.handler.removeMessageHandler( DeleteRequest.class );
+ this.deleteHandler = deleteHandler;
+ //noinspection unchecked
+ this.handler.addMessageHandler( DeleteRequest.class, this.deleteHandler );
+ }
+
+
+ public ExtendedHandler getExtendedHandler()
+ {
+ return extendedHandler;
+ }
+
+
+ public void setExtendedHandler( ExtendedHandler extendedHandler )
+ {
+ this.handler.removeMessageHandler( ExtendedRequest.class );
+ this.extendedHandler = extendedHandler;
+ //noinspection unchecked
+ this.handler.addMessageHandler( ExtendedRequest.class, this.extendedHandler );
+ }
+
+
+ public ModifyHandler getModifyHandler()
+ {
+ return modifyHandler;
+ }
+
+
+ public void setModifyHandler( ModifyHandler modifyHandler )
+ {
+ this.handler.removeMessageHandler( ModifyRequest.class );
+ this.modifyHandler = modifyHandler;
+ //noinspection unchecked
+ this.handler.addMessageHandler( ModifyRequest.class, this.modifyHandler );
+ }
+
+
+ public ModifyDnHandler getModifyDnHandler()
+ {
+ return modifyDnHandler;
+ }
+
+
+ public void setModifyDnHandler( ModifyDnHandler modifyDnHandler )
+ {
+ this.handler.removeMessageHandler( ModifyDnRequest.class );
+ this.modifyDnHandler = modifyDnHandler;
+ //noinspection unchecked
+ this.handler.addMessageHandler( ModifyDnRequest.class, this.modifyDnHandler );
+ }
+
+
+ public SearchHandler getSearchHandler()
+ {
+ return searchHandler;
+ }
+
+
+ public void setSearchHandler( SearchHandler searchHandler )
+ {
+ this.handler.removeMessageHandler( SearchRequest.class );
+ this.searchHandler = searchHandler;
+ //noinspection unchecked
+ this.handler.addMessageHandler( SearchRequest.class, this.searchHandler );
+ }
+
+
+ public UnbindHandler getUnbindHandler()
+ {
+ return unbindHandler;
+ }
+
+
+ public void setUnbindHandler( UnbindHandler unbindHandler )
+ {
+ this.handler.removeMessageHandler( UnbindRequest.class );
+ this.unbindHandler = unbindHandler;
+ //noinspection unchecked
+ this.handler.addMessageHandler( UnbindRequest.class, this.unbindHandler );
+ }
+
+
+ /**
+ * A snickers based BER Decoder factory.
+ */
+ private static final class ProtocolCodecFactoryImpl implements ProtocolCodecFactory
+ {
+ final DirectoryService directoryService;
+
+
+ public ProtocolCodecFactoryImpl( DirectoryService directoryService )
{
- this.env = env;
+ this.directoryService = directoryService;
}
public ProtocolEncoder getEncoder()
{
- return new Asn1CodecEncoder( new MessageEncoder( env ) );
+ return new Asn1CodecEncoder( new MessageEncoder() );
}
public ProtocolDecoder getDecoder()
{
- //TM long t0 = System.nanoTime();
-
- ProtocolDecoder decoder = new Asn1CodecDecoder( new MessageDecoder( env ) );
-
- //TM long t1 = System.nanoTime();
- //TM System.out.println( "New Asn1Decoder cost : " + (t1-t0) );
-
- //TM synchronized (lock)
- //TM {
- //TM cumul += (t1 - t0);
- //TM count++;
- //TM
- //TM if ( count % 1000L == 0)
- //TM {
- //TM System.out.println( "New Asn1Decoder cost : " + (cumul/count) );
- //TM cumul = 0L;
- //TM }
- //TM }
-
- return decoder;
+ return new Asn1CodecDecoder( new MessageDecoder( new BinaryAttributeDetector()
+ {
+ public boolean isBinary( String id )
+ {
+ AttributeTypeRegistry attrRegistry = directoryService.getRegistries().getAttributeTypeRegistry();
+ try
+ {
+ AttributeType type = attrRegistry.lookup( id );
+ return ! type.getSyntax().isHumanReadable();
+ }
+ catch ( NamingException e )
+ {
+ return false;
+ }
+ }
+ }) );
}
}
@@ -334,8 +438,7 @@
{
public void sessionCreated( IoSession session ) throws Exception
{
- session.setAttribute( LdapConfiguration.class.toString(), cfg );
-
+ session.setAttribute( LdapConfiguration.class.toString(), ldapConfiguration );
IoFilterChain filters = session.getFilterChain();
filters.addLast( "codec", new ProtocolCodecFilter( codecFactory ) );
}
@@ -378,11 +481,10 @@
if ( ( ( Request ) message ).getControls().size() > 0 && message instanceof ResultResponseRequest )
{
ResultResponseRequest req = ( ResultResponseRequest ) message;
- Iterator controls = req.getControls().values().iterator();
- while ( controls.hasNext() )
+ for ( Control control1 : req.getControls().values() )
{
- MutableControl control = ( MutableControl ) controls.next();
- if ( control.isCritical() && !SUPPORTED_CONTROLS.contains( control.getID() ) )
+ MutableControl control = ( MutableControl ) control1;
+ if ( control.isCritical() && !supportedControls.contains( control.getID() ) )
{
ResultResponse resp = req.getResultResponse();
resp.getLdapResult().setErrorMessage( "Unsupport critical control: " + control.getID() );
Modified: directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/AbandonHandler.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/AbandonHandler.java?rev=582712&r1=582711&r2=582712&view=diff
==============================================================================
--- directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/AbandonHandler.java (original)
+++ directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/AbandonHandler.java Sun Oct 7 22:54:38 2007
@@ -20,14 +20,9 @@
package org.apache.directory.server.ldap.support;
-import org.apache.directory.server.ldap.SessionRegistry;
import org.apache.directory.shared.ldap.message.AbandonRequest;
-import org.apache.directory.shared.ldap.message.AbandonableRequest;
-import org.apache.directory.shared.ldap.message.Request;
import org.apache.mina.common.IoSession;
import org.apache.mina.handler.demux.MessageHandler;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
/**
@@ -36,56 +31,13 @@
* @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
* @version $Rev$
*/
-public class AbandonHandler implements MessageHandler
+public abstract class AbandonHandler implements MessageHandler
{
- private static final Logger log = LoggerFactory.getLogger( AbandonHandler.class );
-
- /** Speedup for logs */
- private static final boolean IS_DEBUG = log.isDebugEnabled();
-
- public void messageReceived( IoSession session, Object request ) throws Exception
+ public final void messageReceived( IoSession session, Object request ) throws Exception
{
- AbandonRequest req = ( AbandonRequest ) request;
- int abandonedId = req.getAbandoned();
-
- if ( abandonedId < 0 )
- {
- return;
- }
-
- Request abandonedRequest = SessionRegistry.getSingleton().getOutstandingRequest( session, abandonedId );
-
- if ( abandonedRequest == null )
- {
- if ( log.isWarnEnabled() )
- {
- log.warn( "Got abandon request from client " + session + " but request must have already "
- + "terminated. Abandon request " + req + " had no effect." );
- }
- return;
- }
+ abandonMessageReceived( session, ( AbandonRequest ) request );
+ }
- if ( abandonedRequest instanceof AbandonableRequest )
- {
- log
- .warn( "Abandon, Bind, Unbind, and StartTLS operations cannot be abandoned. Abandon request will be ignored." );
- }
- ( ( AbandonableRequest ) abandonedRequest ).abandon();
- if ( SessionRegistry.getSingleton().removeOutstandingRequest( session, abandonedId ) == null )
- {
- if ( log.isWarnEnabled() )
- {
- log.warn( "Got abandon request from client " + session + " but request must have already "
- + "terminated." );
- }
- }
- else
- {
- if ( IS_DEBUG )
- {
- log.debug( "Abandoned request: ", req );
- }
- }
- }
+ protected abstract void abandonMessageReceived( IoSession session, AbandonRequest abandonRequest ) throws Exception;
}
Modified: directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/AddHandler.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/AddHandler.java?rev=582712&r1=582711&r2=582712&view=diff
==============================================================================
--- directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/AddHandler.java (original)
+++ directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/AddHandler.java Sun Oct 7 22:54:38 2007
@@ -20,27 +20,11 @@
package org.apache.directory.server.ldap.support;
-import javax.naming.Context;
-import javax.naming.NamingException;
-import javax.naming.ReferralException;
-import javax.naming.ldap.LdapContext;
-
-import org.apache.directory.server.ldap.SessionRegistry;
-import org.apache.directory.shared.ldap.exception.LdapException;
import org.apache.directory.shared.ldap.message.AddRequest;
-import org.apache.directory.shared.ldap.message.LdapResult;
-import org.apache.directory.shared.ldap.message.ManageDsaITControl;
-import org.apache.directory.shared.ldap.message.ReferralImpl;
-import org.apache.directory.shared.ldap.message.ResultCodeEnum;
-import org.apache.directory.shared.ldap.name.LdapDN;
-import org.apache.directory.shared.ldap.util.ExceptionUtils;
import org.apache.mina.common.IoSession;
import org.apache.mina.handler.demux.MessageHandler;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
/**
* A single reply handler for {@link org.apache.directory.shared.ldap.message.AddRequest}s.
@@ -48,89 +32,13 @@
* @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
* @version $Rev$
*/
-public class AddHandler extends AbstractLdapHandler implements MessageHandler
+public abstract class AddHandler extends AbstractLdapHandler implements MessageHandler
{
- private static final Logger log = LoggerFactory.getLogger( AddHandler.class );
-
- /** Speedup for logs */
- private static final boolean IS_DEBUG = log.isDebugEnabled();
-
- public void messageReceived( IoSession session, Object request ) throws Exception
+ public final void messageReceived( IoSession session, Object request ) throws Exception
{
- AddRequest req = ( AddRequest ) request;
- LdapResult result = req.getResultResponse().getLdapResult();
-
- if ( IS_DEBUG )
- {
- log.debug( "Received an Add message: {}", req.toString() );
- }
-
- try
- {
- LdapContext ctx = SessionRegistry.getSingleton().getLdapContext( session, null, true );
-
- if ( req.getControls().containsKey( ManageDsaITControl.CONTROL_OID ) )
- {
- ctx.addToEnvironment( Context.REFERRAL, "ignore" );
- }
- else
- {
- ctx.addToEnvironment( Context.REFERRAL, "throw" );
- }
-
- // Inject controls into the context
- setRequestControls( ctx, req );
- ctx.createSubcontext( req.getEntry(), req.getAttributes() );
- result.setResultCode( ResultCodeEnum.SUCCESS );
- req.getResultResponse().addAll( ctx.getResponseControls() );
- session.write( req.getResultResponse() );
- }
- catch ( ReferralException e )
- {
- ReferralImpl refs = new ReferralImpl();
- result.setReferral( refs );
- result.setResultCode( ResultCodeEnum.REFERRAL );
- result.setErrorMessage( "Encountered referral attempting to handle add request." );
- /* coming up null causing a NPE */
- // result.setMatchedDn( e.getResolvedName().toString() );
- do
- {
- refs.addLdapUrl( ( String ) e.getReferralInfo() );
- }
- while ( e.skipReferral() );
- session.write( req.getResultResponse() );
- }
- catch ( NamingException e )
- {
- String msg = "failed to add entry " + req.getEntry() + ": " + e.getMessage();
-
- if ( log.isDebugEnabled() )
- {
- msg += ":\n" + ExceptionUtils.getStackTrace( e );
- }
-
- ResultCodeEnum code;
-
- if ( e instanceof LdapException )
- {
- code = ( ( LdapException ) e ).getResultCode();
- }
- else
- {
- code = ResultCodeEnum.getBestEstimate( e, req.getType() );
- }
-
- result.setResultCode( code );
- result.setErrorMessage( msg );
+ addMessageReceived( session, ( AddRequest ) request );
+ }
- if ( ( e.getResolvedName() != null )
- && ( ( code == ResultCodeEnum.NO_SUCH_OBJECT ) || ( code == ResultCodeEnum.ALIAS_PROBLEM )
- || ( code == ResultCodeEnum.INVALID_DN_SYNTAX ) || ( code == ResultCodeEnum.ALIAS_DEREFERENCING_PROBLEM ) ) )
- {
- result.setMatchedDn( (LdapDN)e.getResolvedName() );
- }
- session.write( req.getResultResponse() );
- }
- }
+ protected abstract void addMessageReceived( IoSession session, AddRequest req ) throws Exception;
}
Modified: directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/BindHandler.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/BindHandler.java?rev=582712&r1=582711&r2=582712&view=diff
==============================================================================
--- directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/BindHandler.java (original)
+++ directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/BindHandler.java Sun Oct 7 22:54:38 2007
@@ -21,27 +21,9 @@
import org.apache.directory.server.core.DirectoryService;
-import org.apache.directory.server.core.jndi.ServerLdapContext;
-import org.apache.directory.server.ldap.LdapConfiguration;
-import org.apache.directory.server.ldap.SessionRegistry;
-import org.apache.directory.server.ldap.support.bind.BindHandlerChain;
-import org.apache.directory.shared.ldap.exception.LdapException;
import org.apache.directory.shared.ldap.message.*;
-import org.apache.directory.shared.ldap.name.LdapDN;
-import org.apache.directory.shared.ldap.util.ExceptionUtils;
import org.apache.mina.common.IoSession;
-import org.apache.mina.handler.chain.IoHandlerCommand;
import org.apache.mina.handler.demux.MessageHandler;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import javax.naming.Context;
-import javax.naming.NamingException;
-import javax.naming.ldap.InitialLdapContext;
-import javax.naming.ldap.LdapContext;
-import javax.naming.spi.InitialContextFactory;
-import java.util.Hashtable;
-import java.util.Set;
/**
@@ -52,244 +34,17 @@
* @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
* @version $Rev$, $Date$
*/
-public class BindHandler extends AbstractLdapHandler implements MessageHandler
+public abstract class BindHandler extends AbstractLdapHandler implements MessageHandler
{
- private static final Logger LOG = LoggerFactory.getLogger( BindHandler.class );
-
- /** A class to handle SASL bind requests */
- private IoHandlerCommand saslBindHandler;
-
- /** Definition of SIMPLE and STRONG authentication constants */
- private static final String SIMPLE_AUTHENTICATION_LEVEL = "simple";
-
- //private static final String STRONG_AUTHENTICATION_LEVEL = "strong";
-
- /** An empty Contol array used to get back the controls if any */
- private static final MutableControl[] EMPTY_CONTROL = new MutableControl[0];
-
-
- /**
- * Creates a new instance of BindHandler.
- */
- public BindHandler()
- {
- }
-
-
- public void setDirectoryService( DirectoryService directoryService )
- {
- saslBindHandler = new BindHandlerChain( directoryService );
- }
-
-
- /**
- * Create an environment object and inject the Bond informations collected
- * from the BindRequest message :
- * - the principal : the user's who issued the Bind request
- * - the credentials : principal's password, if auth level is 'simple'
- * - the authentication level : either 'simple' or 'strong'
- * - how to handle referral : either 'ignore' or 'throw'
- */
- private Hashtable<String, Object> getEnvironment( IoSession session, BindRequest bindRequest, String authenticationLevel )
- {
- LdapDN principal = bindRequest.getName();
-
- /**
- * For simple, this is a password. For strong, this is unused.
- */
- Object credentials = bindRequest.getCredentials();
-
- if ( LOG.isDebugEnabled() )
- {
- LOG.debug( "{} {}", Context.SECURITY_PRINCIPAL, principal );
- LOG.debug( "{} {}", Context.SECURITY_CREDENTIALS, credentials );
- LOG.debug( "{} {}", Context.SECURITY_AUTHENTICATION, authenticationLevel );
- }
-
- // clone the environment first then add the required security settings
- Hashtable<String, Object> env = SessionRegistry.getSingleton().getEnvironmentByCopy();
-
- // Store the principal
- env.put( Context.SECURITY_PRINCIPAL, principal );
-
- // Store the credentials
- if ( credentials != null )
- {
- env.put( Context.SECURITY_CREDENTIALS, credentials );
- }
-
- // Store the authentication level
- env.put( Context.SECURITY_AUTHENTICATION, authenticationLevel );
-
- // Store the referral handling method
- if ( bindRequest.getControls().containsKey( ManageDsaITControl.CONTROL_OID ) )
- {
- env.put( Context.REFERRAL, "ignore" );
- }
- else
- {
- env.put( Context.REFERRAL, "throw" );
- }
+ public abstract void setDirectoryService( DirectoryService directoryService );
+ protected abstract void bindMessageReceived( IoSession session, BindRequest req ) throws Exception;
- return env;
- }
-
- /**
- * Create the Context associated with the BindRequest.
- */
- private LdapContext getLdapContext( IoSession session, BindRequest bindRequest, Hashtable<String, Object> env )
- {
- LdapResult result = bindRequest.getResultResponse().getLdapResult();
- LdapContext ctx = null;
-
- try
- {
- if ( env.containsKey( "server.use.factory.instance" ) )
- {
- InitialContextFactory factory = ( InitialContextFactory ) env.get( "server.use.factory.instance" );
-
- if ( factory == null )
- {
- LOG.error( "The property 'server.use.factory.instance' was set in env but was null" );
- throw new NullPointerException( "server.use.factory.instance was set in env but was null" );
- }
-
- // Bind is a special case where we have to use the referral property to deal
- ctx = ( LdapContext ) factory.getInitialContext( env );
- }
- else
- {
- MutableControl[] connCtls = bindRequest.getControls().values().toArray( EMPTY_CONTROL );
- ctx = new InitialLdapContext( env, connCtls );
- }
- }
- catch ( NamingException e )
- {
- ResultCodeEnum code;
-
- if ( e instanceof LdapException )
- {
- code = ( ( LdapException ) e ).getResultCode();
- result.setResultCode( code );
- }
- else
- {
- code = ResultCodeEnum.getBestEstimate( e, bindRequest.getType() );
- result.setResultCode( code );
- }
-
- String msg = "Bind failed: " + e.getMessage();
-
- if ( LOG.isDebugEnabled() )
- {
- msg += ":\n" + ExceptionUtils.getStackTrace( e );
- msg += "\n\nBindRequest = \n" + bindRequest.toString();
- LOG.debug( msg );
- }
-
- if ( ( e.getResolvedName() != null )
- && ( ( code == ResultCodeEnum.NO_SUCH_OBJECT ) || ( code == ResultCodeEnum.ALIAS_PROBLEM )
- || ( code == ResultCodeEnum.INVALID_DN_SYNTAX ) || ( code == ResultCodeEnum.ALIAS_DEREFERENCING_PROBLEM ) ) )
- {
- result.setMatchedDn( ( LdapDN ) e.getResolvedName() );
- }
-
- result.setErrorMessage( msg );
- session.write( bindRequest.getResultResponse() );
- ctx = null;
- }
-
- return ctx;
- }
-
- /**
- * This method handle a 'simple' authentication. Of course, the 'SIMPLE' mechanism
- * must have been allowed in the configuration, otherwise an error is thrown.
- *
- */
- private void handleSimpleAuth( IoSession session, BindRequest bindRequest ) throws NamingException
- {
- LdapConfiguration config = ( LdapConfiguration ) session.getAttribute( LdapConfiguration.class.toString() );
-
- @SuppressWarnings( "unchecked" )
- Set<String> supportedMechanisms = config.getSupportedMechanisms();
- LdapResult bindResult = bindRequest.getResultResponse().getLdapResult();
-
- // First, deal with Simple Authentication
- // Guard clause: Reject SIMPLE mechanism.
- if ( !supportedMechanisms.contains( "SIMPLE" ) )
- {
- LOG.error( "Bind error : SIMPLE authentication not supported. Please check the server.xml configuration file (supportedMechanisms field)" );
-
- bindResult.setResultCode( ResultCodeEnum.STRONG_AUTH_REQUIRED );
- bindResult.setErrorMessage( "Simple binds are disabled." );
- session.write( bindRequest.getResultResponse() );
- return;
- }
-
- // Initialize the environment which will be used to create the context
- Hashtable<String, Object> env = getEnvironment( session, bindRequest, SIMPLE_AUTHENTICATION_LEVEL );
-
- // Now, get the context
- LdapContext ctx = getLdapContext( session, bindRequest, env );
-
- // Test that we successfully got one. If not, an error has already been returned.
- if ( ctx != null )
- {
- ServerLdapContext newCtx = ( ServerLdapContext ) ctx.lookup( "" );
- setRequestControls( newCtx, bindRequest );
- SessionRegistry.getSingleton().setLdapContext( session, newCtx );
- bindResult.setResultCode( ResultCodeEnum.SUCCESS );
- BindResponse response = ( BindResponse ) bindRequest.getResultResponse();
- response.addAll( newCtx.getResponseControls() );
- session.write( response );
- LOG.debug( "Returned SUCCESS message." );
- }
- }
/**
* Deal with a received BindRequest
*/
- public void messageReceived( IoSession session, Object message ) throws Exception
+ public final void messageReceived( IoSession session, Object message ) throws Exception
{
- BindRequest bindRequest = ( BindRequest ) message;
-
- if ( LOG.isDebugEnabled() )
- {
- LOG.debug( "User {} is binding", bindRequest.getName() );
-
- if ( bindRequest.isSimple() )
- {
- LOG.debug( "Using simple authentication." );
-
- }
- else
- {
- LOG.debug( "Using SASL authentication with mechanism: {}", bindRequest.getSaslMechanism() );
- }
- }
-
- // Guard clause: LDAP version 3
- if ( !bindRequest.getVersion3() )
- {
- LOG.error( "Bind error : Only LDAP v3 is supported." );
- LdapResult bindResult = bindRequest.getResultResponse().getLdapResult();
- bindResult.setResultCode( ResultCodeEnum.PROTOCOL_ERROR );
- bindResult.setErrorMessage( "Only LDAP v3 is supported." );
- session.write( bindRequest.getResultResponse() );
- return;
- }
-
- // Deal with the two kinds of authen :
- // - if it's simple, handle it in this class for speed
- // - for sasl, we go through a chain right now (but it may change in the near future)
- if ( bindRequest.isSimple() )
- {
- handleSimpleAuth( session, bindRequest );
- }
- else
- {
- saslBindHandler.execute( null, session, message );
- }
+ bindMessageReceived( session, ( BindRequest ) message );
}
}
Modified: directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/CompareHandler.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/CompareHandler.java?rev=582712&r1=582711&r2=582712&view=diff
==============================================================================
--- directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/CompareHandler.java (original)
+++ directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/CompareHandler.java Sun Oct 7 22:54:38 2007
@@ -20,25 +20,9 @@
package org.apache.directory.server.ldap.support;
-import javax.naming.Context;
-import javax.naming.NamingException;
-import javax.naming.ReferralException;
-import javax.naming.ldap.LdapContext;
-
-import org.apache.directory.server.core.jndi.ServerLdapContext;
-import org.apache.directory.server.ldap.SessionRegistry;
-import org.apache.directory.shared.ldap.exception.LdapException;
import org.apache.directory.shared.ldap.message.CompareRequest;
-import org.apache.directory.shared.ldap.message.LdapResult;
-import org.apache.directory.shared.ldap.message.ManageDsaITControl;
-import org.apache.directory.shared.ldap.message.ReferralImpl;
-import org.apache.directory.shared.ldap.message.ResultCodeEnum;
-import org.apache.directory.shared.ldap.name.LdapDN;
-import org.apache.directory.shared.ldap.util.ExceptionUtils;
import org.apache.mina.common.IoSession;
import org.apache.mina.handler.demux.MessageHandler;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
/**
@@ -47,100 +31,13 @@
* @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
* @version $Rev$
*/
-public class CompareHandler extends AbstractLdapHandler implements MessageHandler
+public abstract class CompareHandler extends AbstractLdapHandler implements MessageHandler
{
- private static final Logger log = LoggerFactory.getLogger( CompareHandler.class );
-
- /** Speedup for logs */
- private static final boolean IS_DEBUG = log.isDebugEnabled();
-
- public void messageReceived( IoSession session, Object request ) throws Exception
+ public final void messageReceived( IoSession session, Object request ) throws Exception
{
- CompareRequest req = ( CompareRequest ) request;
- LdapResult result = req.getResultResponse().getLdapResult();
-
- try
- {
- LdapContext ctx = SessionRegistry.getSingleton().getLdapContext( session, null, true );
- ServerLdapContext newCtx = ( ServerLdapContext ) ctx.lookup( "" );
-
- if ( req.getControls().containsKey( ManageDsaITControl.CONTROL_OID ) )
- {
- newCtx.addToEnvironment( Context.REFERRAL, "ignore" );
- }
- else
- {
- newCtx.addToEnvironment( Context.REFERRAL, "throw" );
- }
-
- // Inject controls into the context
- setRequestControls( newCtx, req );
-
- if ( newCtx.compare( req.getName(), req.getAttributeId(), req.getAssertionValue() ) )
- {
- result.setResultCode( ResultCodeEnum.COMPARE_TRUE );
- }
- else
- {
- result.setResultCode( ResultCodeEnum.COMPARE_FALSE );
- }
-
- result.setMatchedDn( req.getName() );
- req.getResultResponse().addAll( newCtx.getResponseControls() );
- session.write( req.getResultResponse() );
- }
- catch ( ReferralException e )
- {
- ReferralImpl refs = new ReferralImpl();
- result.setReferral( refs );
- result.setResultCode( ResultCodeEnum.REFERRAL );
- result.setErrorMessage( "Encountered referral attempting to handle compare request." );
-
- result.setMatchedDn( (LdapDN)e.getResolvedName() );
-
- do
- {
- refs.addLdapUrl( ( String ) e.getReferralInfo() );
- }
- while ( e.skipReferral() );
- session.write( req.getResultResponse() );
- }
- catch ( Exception e )
- {
- String msg = "failed to compare entry " + req.getName() + ": " + e.getMessage();
-
- if ( IS_DEBUG )
- {
- msg += ":\n" + ExceptionUtils.getStackTrace( e );
- }
-
- ResultCodeEnum code;
-
- if ( e instanceof LdapException )
- {
- code = ( ( LdapException ) e ).getResultCode();
- }
- else
- {
- code = ResultCodeEnum.getBestEstimate( e, req.getType() );
- }
-
- result.setResultCode( code );
- result.setErrorMessage( msg );
-
- if ( e instanceof NamingException )
- {
- NamingException ne = ( NamingException ) e;
+ compareMessageReceived( session, ( CompareRequest ) request );
+ }
- if ( ( ne.getResolvedName() != null )
- && ( ( code == ResultCodeEnum.NO_SUCH_OBJECT ) || ( code == ResultCodeEnum.ALIAS_PROBLEM )
- || ( code == ResultCodeEnum.INVALID_DN_SYNTAX ) || ( code == ResultCodeEnum.ALIAS_DEREFERENCING_PROBLEM ) ) )
- {
- result.setMatchedDn( (LdapDN)ne.getResolvedName() );
- }
- }
- session.write( req.getResultResponse() );
- }
- }
+ protected abstract void compareMessageReceived( IoSession session, CompareRequest compareRequest ) throws Exception;
}
Copied: directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/DefaultAbandonHandler.java (from r582695, directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/AbandonHandler.java)
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/DefaultAbandonHandler.java?p2=directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/DefaultAbandonHandler.java&p1=directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/AbandonHandler.java&r1=582695&r2=582712&rev=582712&view=diff
==============================================================================
--- directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/AbandonHandler.java (original)
+++ directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/DefaultAbandonHandler.java Sun Oct 7 22:54:38 2007
@@ -25,27 +25,26 @@
import org.apache.directory.shared.ldap.message.AbandonableRequest;
import org.apache.directory.shared.ldap.message.Request;
import org.apache.mina.common.IoSession;
-import org.apache.mina.handler.demux.MessageHandler;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
- * Handler for {@link org.apache.directory.shared.ldap.message.AbandonRequest}s.
+ * Handler for {@link AbandonRequest}s.
*
* @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
* @version $Rev$
*/
-public class AbandonHandler implements MessageHandler
+public class DefaultAbandonHandler extends AbandonHandler
{
- private static final Logger log = LoggerFactory.getLogger( AbandonHandler.class );
+ private static final Logger LOG = LoggerFactory.getLogger( AbandonHandler.class );
/** Speedup for logs */
- private static final boolean IS_DEBUG = log.isDebugEnabled();
+ private static final boolean IS_DEBUG = LOG.isDebugEnabled();
- public void messageReceived( IoSession session, Object request ) throws Exception
+
+ public void abandonMessageReceived( IoSession session, AbandonRequest req ) throws Exception
{
- AbandonRequest req = ( AbandonRequest ) request;
int abandonedId = req.getAbandoned();
if ( abandonedId < 0 )
@@ -57,9 +56,9 @@
if ( abandonedRequest == null )
{
- if ( log.isWarnEnabled() )
+ if ( LOG.isWarnEnabled() )
{
- log.warn( "Got abandon request from client " + session + " but request must have already "
+ LOG.warn( "Got abandon request from client " + session + " but request must have already "
+ "terminated. Abandon request " + req + " had no effect." );
}
return;
@@ -67,16 +66,16 @@
if ( abandonedRequest instanceof AbandonableRequest )
{
- log
+ LOG
.warn( "Abandon, Bind, Unbind, and StartTLS operations cannot be abandoned. Abandon request will be ignored." );
}
( ( AbandonableRequest ) abandonedRequest ).abandon();
if ( SessionRegistry.getSingleton().removeOutstandingRequest( session, abandonedId ) == null )
{
- if ( log.isWarnEnabled() )
+ if ( LOG.isWarnEnabled() )
{
- log.warn( "Got abandon request from client " + session + " but request must have already "
+ LOG.warn( "Got abandon request from client " + session + " but request must have already "
+ "terminated." );
}
}
@@ -84,8 +83,8 @@
{
if ( IS_DEBUG )
{
- log.debug( "Abandoned request: ", req );
+ LOG.debug( "Abandoned request: ", req );
}
}
}
-}
+}
\ No newline at end of file
Propchange: directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/DefaultAbandonHandler.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/DefaultAbandonHandler.java
------------------------------------------------------------------------------
--- svn:keywords (added)
+++ svn:keywords Sun Oct 7 22:54:38 2007
@@ -0,0 +1,4 @@
+Rev
+Revision
+Date
+Id
Copied: directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/DefaultAddHandler.java (from r582695, directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/AddHandler.java)
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/DefaultAddHandler.java?p2=directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/DefaultAddHandler.java&p1=directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/AddHandler.java&r1=582695&r2=582712&rev=582712&view=diff
==============================================================================
--- directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/AddHandler.java (original)
+++ directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/DefaultAddHandler.java Sun Oct 7 22:54:38 2007
@@ -36,39 +36,38 @@
import org.apache.directory.shared.ldap.util.ExceptionUtils;
import org.apache.mina.common.IoSession;
-import org.apache.mina.handler.demux.MessageHandler;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
- * A single reply handler for {@link org.apache.directory.shared.ldap.message.AddRequest}s.
+ * A single reply handler for {@link AddRequest}s.
*
* @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
* @version $Rev$
*/
-public class AddHandler extends AbstractLdapHandler implements MessageHandler
+public class DefaultAddHandler extends AddHandler
{
- private static final Logger log = LoggerFactory.getLogger( AddHandler.class );
+ private static final Logger LOG = LoggerFactory.getLogger( AddHandler.class );
/** Speedup for logs */
- private static final boolean IS_DEBUG = log.isDebugEnabled();
+ private static final boolean IS_DEBUG = LOG.isDebugEnabled();
- public void messageReceived( IoSession session, Object request ) throws Exception
+
+ protected void addMessageReceived( IoSession session, AddRequest req ) throws Exception
{
- AddRequest req = ( AddRequest ) request;
LdapResult result = req.getResultResponse().getLdapResult();
if ( IS_DEBUG )
{
- log.debug( "Received an Add message: {}", req.toString() );
+ LOG.debug( "Received an Add message: {}", req.toString() );
}
try
{
LdapContext ctx = SessionRegistry.getSingleton().getLdapContext( session, null, true );
-
+
if ( req.getControls().containsKey( ManageDsaITControl.CONTROL_OID ) )
{
ctx.addToEnvironment( Context.REFERRAL, "ignore" );
@@ -77,7 +76,7 @@
{
ctx.addToEnvironment( Context.REFERRAL, "throw" );
}
-
+
// Inject controls into the context
setRequestControls( ctx, req );
ctx.createSubcontext( req.getEntry(), req.getAttributes() );
@@ -104,7 +103,7 @@
{
String msg = "failed to add entry " + req.getEntry() + ": " + e.getMessage();
- if ( log.isDebugEnabled() )
+ if ( LOG.isDebugEnabled() )
{
msg += ":\n" + ExceptionUtils.getStackTrace( e );
}
@@ -133,4 +132,4 @@
session.write( req.getResultResponse() );
}
}
-}
+}
\ No newline at end of file
Propchange: directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/DefaultAddHandler.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/DefaultAddHandler.java
------------------------------------------------------------------------------
--- svn:keywords (added)
+++ svn:keywords Sun Oct 7 22:54:38 2007
@@ -0,0 +1,4 @@
+Rev
+Revision
+Date
+Id
Copied: directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/DefaultBindHandler.java (from r582695, directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/BindHandler.java)
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/DefaultBindHandler.java?p2=directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/DefaultBindHandler.java&p1=directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/BindHandler.java&r1=582695&r2=582712&rev=582712&view=diff
==============================================================================
--- directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/BindHandler.java (original)
+++ directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/DefaultBindHandler.java Sun Oct 7 22:54:38 2007
@@ -45,33 +45,33 @@
/**
- * A single reply handler for {@link org.apache.directory.shared.ldap.message.BindRequest}s.
- *
+ * A single reply handler for {@link BindRequest}s.
+ *
* Implements server-side of RFC 2222, sections 4.2 and 4.3.
- *
+ *
* @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
* @version $Rev$, $Date$
*/
-public class BindHandler extends AbstractLdapHandler implements MessageHandler
+public class DefaultBindHandler extends BindHandler
{
private static final Logger LOG = LoggerFactory.getLogger( BindHandler.class );
/** A class to handle SASL bind requests */
private IoHandlerCommand saslBindHandler;
-
+
/** Definition of SIMPLE and STRONG authentication constants */
private static final String SIMPLE_AUTHENTICATION_LEVEL = "simple";
-
+
//private static final String STRONG_AUTHENTICATION_LEVEL = "strong";
-
+
/** An empty Contol array used to get back the controls if any */
private static final MutableControl[] EMPTY_CONTROL = new MutableControl[0];
/**
* Creates a new instance of BindHandler.
- */
- public BindHandler()
+ */
+ public DefaultBindHandler()
{
}
@@ -108,7 +108,7 @@
// clone the environment first then add the required security settings
Hashtable<String, Object> env = SessionRegistry.getSingleton().getEnvironmentByCopy();
-
+
// Store the principal
env.put( Context.SECURITY_PRINCIPAL, principal );
@@ -198,19 +198,19 @@
session.write( bindRequest.getResultResponse() );
ctx = null;
}
-
+
return ctx;
}
/**
- * This method handle a 'simple' authentication. Of course, the 'SIMPLE' mechanism
+ * This method handle a 'simple' authentication. Of course, the 'SIMPLE' mechanism
* must have been allowed in the configuration, otherwise an error is thrown.
- *
+ *
*/
private void handleSimpleAuth( IoSession session, BindRequest bindRequest ) throws NamingException
{
LdapConfiguration config = ( LdapConfiguration ) session.getAttribute( LdapConfiguration.class.toString() );
-
+
@SuppressWarnings( "unchecked" )
Set<String> supportedMechanisms = config.getSupportedMechanisms();
LdapResult bindResult = bindRequest.getResultResponse().getLdapResult();
@@ -229,10 +229,10 @@
// Initialize the environment which will be used to create the context
Hashtable<String, Object> env = getEnvironment( session, bindRequest, SIMPLE_AUTHENTICATION_LEVEL );
-
+
// Now, get the context
LdapContext ctx = getLdapContext( session, bindRequest, env );
-
+
// Test that we successfully got one. If not, an error has already been returned.
if ( ctx != null )
{
@@ -247,28 +247,27 @@
}
}
+
/**
* Deal with a received BindRequest
*/
- public void messageReceived( IoSession session, Object message ) throws Exception
+ protected void bindMessageReceived( IoSession session, BindRequest bindRequest ) throws Exception
{
- BindRequest bindRequest = ( BindRequest ) message;
-
if ( LOG.isDebugEnabled() )
{
LOG.debug( "User {} is binding", bindRequest.getName() );
-
+
if ( bindRequest.isSimple() )
{
LOG.debug( "Using simple authentication." );
-
+
}
else
{
LOG.debug( "Using SASL authentication with mechanism: {}", bindRequest.getSaslMechanism() );
}
}
-
+
// Guard clause: LDAP version 3
if ( !bindRequest.getVersion3() )
{
@@ -279,7 +278,7 @@
session.write( bindRequest.getResultResponse() );
return;
}
-
+
// Deal with the two kinds of authen :
// - if it's simple, handle it in this class for speed
// - for sasl, we go through a chain right now (but it may change in the near future)
@@ -289,7 +288,7 @@
}
else
{
- saslBindHandler.execute( null, session, message );
+ saslBindHandler.execute( null, session, bindRequest );
}
}
-}
+}
\ No newline at end of file
Propchange: directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/DefaultBindHandler.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/DefaultBindHandler.java
------------------------------------------------------------------------------
--- svn:keywords (added)
+++ svn:keywords Sun Oct 7 22:54:38 2007
@@ -0,0 +1,4 @@
+Rev
+Revision
+Date
+Id
Copied: directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/DefaultCompareHandler.java (from r582695, directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/CompareHandler.java)
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/DefaultCompareHandler.java?p2=directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/DefaultCompareHandler.java&p1=directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/CompareHandler.java&r1=582695&r2=582712&rev=582712&view=diff
==============================================================================
--- directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/CompareHandler.java (original)
+++ directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/DefaultCompareHandler.java Sun Oct 7 22:54:38 2007
@@ -36,34 +36,32 @@
import org.apache.directory.shared.ldap.name.LdapDN;
import org.apache.directory.shared.ldap.util.ExceptionUtils;
import org.apache.mina.common.IoSession;
-import org.apache.mina.handler.demux.MessageHandler;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
- * A single reply handler for {@link org.apache.directory.shared.ldap.message.CompareRequest}s.
+ * A single reply handler for {@link CompareRequest}s.
*
* @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
* @version $Rev$
*/
-public class CompareHandler extends AbstractLdapHandler implements MessageHandler
+public class DefaultCompareHandler extends CompareHandler
{
- private static final Logger log = LoggerFactory.getLogger( CompareHandler.class );
+ private static final Logger LOG = LoggerFactory.getLogger( CompareHandler.class );
/** Speedup for logs */
- private static final boolean IS_DEBUG = log.isDebugEnabled();
+ private static final boolean IS_DEBUG = LOG.isDebugEnabled();
- public void messageReceived( IoSession session, Object request ) throws Exception
+ public void compareMessageReceived( IoSession session, CompareRequest req ) throws Exception
{
- CompareRequest req = ( CompareRequest ) request;
LdapResult result = req.getResultResponse().getLdapResult();
try
{
LdapContext ctx = SessionRegistry.getSingleton().getLdapContext( session, null, true );
ServerLdapContext newCtx = ( ServerLdapContext ) ctx.lookup( "" );
-
+
if ( req.getControls().containsKey( ManageDsaITControl.CONTROL_OID ) )
{
newCtx.addToEnvironment( Context.REFERRAL, "ignore" );
@@ -72,7 +70,7 @@
{
newCtx.addToEnvironment( Context.REFERRAL, "throw" );
}
-
+
// Inject controls into the context
setRequestControls( newCtx, req );
@@ -97,7 +95,7 @@
result.setErrorMessage( "Encountered referral attempting to handle compare request." );
result.setMatchedDn( (LdapDN)e.getResolvedName() );
-
+
do
{
refs.addLdapUrl( ( String ) e.getReferralInfo() );
@@ -143,4 +141,4 @@
session.write( req.getResultResponse() );
}
}
-}
+}
\ No newline at end of file
Propchange: directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/DefaultCompareHandler.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/DefaultCompareHandler.java
------------------------------------------------------------------------------
--- svn:keywords (added)
+++ svn:keywords Sun Oct 7 22:54:38 2007
@@ -0,0 +1,4 @@
+Rev
+Revision
+Date
+Id
Copied: directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/DefaultDeleteHandler.java (from r582695, directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/DeleteHandler.java)
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/DefaultDeleteHandler.java?p2=directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/DefaultDeleteHandler.java&p1=directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/DeleteHandler.java&r1=582695&r2=582712&rev=582712&view=diff
==============================================================================
--- directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/DeleteHandler.java (original)
+++ directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/DefaultDeleteHandler.java Sun Oct 7 22:54:38 2007
@@ -35,27 +35,26 @@
import org.apache.directory.shared.ldap.name.LdapDN;
import org.apache.directory.shared.ldap.util.ExceptionUtils;
import org.apache.mina.common.IoSession;
-import org.apache.mina.handler.demux.MessageHandler;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
- * A single reply handler for {@link org.apache.directory.shared.ldap.message.DeleteRequest}s.
+ * A single reply handler for {@link DeleteRequest}s.
*
* @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
* @version $Rev$
*/
-public class DeleteHandler extends AbstractLdapHandler implements MessageHandler
+public class DefaultDeleteHandler extends DeleteHandler
{
- private static final Logger log = LoggerFactory.getLogger( DeleteHandler.class );
+ private static final Logger LOG = LoggerFactory.getLogger( DeleteHandler.class );
/** Speedup for logs */
- private static final boolean IS_DEBUG = log.isDebugEnabled();
+ private static final boolean IS_DEBUG = LOG.isDebugEnabled();
- public void messageReceived( IoSession session, Object request ) throws Exception
+
+ public void deleteMessageReceived( IoSession session, DeleteRequest req ) throws Exception
{
- DeleteRequest req = ( DeleteRequest ) request;
LdapResult result = req.getResultResponse().getLdapResult();
try
@@ -69,7 +68,7 @@
{
ctx.addToEnvironment( Context.REFERRAL, "throw" );
}
-
+
// Inject controls into the context
setRequestControls( ctx, req );
@@ -124,4 +123,4 @@
session.write( req.getResultResponse() );
}
}
-}
+}
\ No newline at end of file
Propchange: directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/DefaultDeleteHandler.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/DefaultDeleteHandler.java
------------------------------------------------------------------------------
--- svn:keywords (added)
+++ svn:keywords Sun Oct 7 22:54:38 2007
@@ -0,0 +1,4 @@
+Rev
+Revision
+Date
+Id
Copied: directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/DefaultExtendedHandler.java (from r582695, directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/ExtendedHandler.java)
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/DefaultExtendedHandler.java?p2=directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/DefaultExtendedHandler.java&p1=directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/ExtendedHandler.java&r1=582695&r2=582712&rev=582712&view=diff
==============================================================================
--- directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/ExtendedHandler.java (original)
+++ directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/DefaultExtendedHandler.java Sun Oct 7 22:54:38 2007
@@ -20,10 +20,6 @@
package org.apache.directory.server.ldap.support;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Map;
-
import org.apache.directory.server.ldap.ExtendedOperationHandler;
import org.apache.directory.server.ldap.SessionRegistry;
import org.apache.directory.shared.ldap.message.ExtendedRequest;
@@ -32,54 +28,19 @@
import org.apache.directory.shared.ldap.message.ResultCodeEnum;
import org.apache.directory.shared.ldap.util.ExceptionUtils;
import org.apache.mina.common.IoSession;
-import org.apache.mina.handler.demux.MessageHandler;
/**
- * A single reply handler for {@link org.apache.directory.shared.ldap.message.ExtendedRequest}s.
+* A single reply handler for {@link ExtendedRequest}s.
*
* @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
* @version $Rev$
*/
-public class ExtendedHandler extends AbstractLdapHandler implements MessageHandler
+public class DefaultExtendedHandler extends ExtendedHandler
{
- private Map<String, ExtendedOperationHandler> handlers = new HashMap<String, ExtendedOperationHandler>();
-
-
- public ExtendedOperationHandler addHandler( ExtendedOperationHandler eoh )
- {
- synchronized ( handlers )
- {
- return handlers.put( eoh.getOid(), eoh );
- }
- }
-
-
- public ExtendedOperationHandler removeHandler( String oid )
- {
- synchronized ( handlers )
- {
- return handlers.remove( oid );
- }
- }
-
-
- public ExtendedOperationHandler getHandler( String oid )
- {
- return handlers.get( oid );
- }
-
-
- public Map getHandlerMap()
- {
- return Collections.unmodifiableMap( handlers );
- }
-
-
- public void messageReceived( IoSession session, Object request ) throws Exception
+ public void extendedMessageReceived( IoSession session, ExtendedRequest req ) throws Exception
{
- ExtendedRequest req = ( ExtendedRequest ) request;
- ExtendedOperationHandler handler = handlers.get( req.getOid() );
+ ExtendedOperationHandler handler = getHandler( req.getOid() );
if ( handler == null )
{
@@ -106,7 +67,7 @@
ExtendedResponse resp = ( ExtendedResponse ) req.getResultResponse();
resp.setResponse( new byte[0] );
session.write( req.getResultResponse() );
- }
+ }
}
}
-}
+}
\ No newline at end of file
Propchange: directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/DefaultExtendedHandler.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/DefaultExtendedHandler.java
------------------------------------------------------------------------------
--- svn:keywords (added)
+++ svn:keywords Sun Oct 7 22:54:38 2007
@@ -0,0 +1,4 @@
+Rev
+Revision
+Date
+Id
Copied: directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/DefaultModifyDnHandler.java (from r582695, directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/ModifyDnHandler.java)
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/DefaultModifyDnHandler.java?p2=directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/DefaultModifyDnHandler.java&p1=directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/ModifyDnHandler.java&r1=582695&r2=582712&rev=582712&view=diff
==============================================================================
--- directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/ModifyDnHandler.java (original)
+++ directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/DefaultModifyDnHandler.java Sun Oct 7 22:54:38 2007
@@ -36,48 +36,46 @@
import org.apache.directory.shared.ldap.name.LdapDN;
import org.apache.directory.shared.ldap.util.ExceptionUtils;
import org.apache.mina.common.IoSession;
-import org.apache.mina.handler.demux.MessageHandler;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
- * A single reply handler for {@link org.apache.directory.shared.ldap.message.ModifyDnRequest}s.
- *
+ * A single reply handler for {@link ModifyDnRequest}s.
+ *
* @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
* @version $Rev$
*/
-public class ModifyDnHandler extends AbstractLdapHandler implements MessageHandler
+public class DefaultModifyDnHandler extends ModifyDnHandler
{
- private static final Logger log = LoggerFactory.getLogger( ModifyDnHandler.class );
+ private static final Logger LOG = LoggerFactory.getLogger( ModifyDnHandler.class );
/** Speedup for logs */
- private static final boolean IS_DEBUG = log.isDebugEnabled();
+ private static final boolean IS_DEBUG = LOG.isDebugEnabled();
/**
* Deal with a ModifyDN request received from a client.
- *
+ *
* A ModifyDN operation has more than one semantic, depending on its parameters.
- *
+ *
* In any case, the first argument is the DN entry to be changed. We then
* have the new relative DN for this entry.
- *
+ *
* Two other arguments can be provided :
* - deleteOldRdn : if the old RDN attributes should be removed from the
- * new entry or not (for instance, if the old RDN was cn=acme, and the new
+ * new entry or not (for instance, if the old RDN was cn=acme, and the new
* one is sn=acme, then we may have to remove the cn: acme from the attributes
* list)
* - newSuperior : this is a move operation. The entry is removed from its
* current location, and created in the new one.
*/
- public void messageReceived( IoSession session, Object request ) throws Exception
+ public void modifyDnMessageReceived( IoSession session, ModifyDnRequest req ) throws Exception
{
- ModifyDnRequest req = ( ModifyDnRequest ) request;
LdapResult result = req.getResultResponse().getLdapResult();
if ( IS_DEBUG )
{
- log.debug( "req.getName() == [{}]", req.getName() );
+ LOG.debug( "req.getName() == [{}]", req.getName() );
}
if ( req.getName().isEmpty() )
@@ -93,7 +91,7 @@
try
{
LdapContext ctx = SessionRegistry.getSingleton().getLdapContext( session, null, true );
-
+
if ( req.getControls().containsKey( ManageDsaITControl.CONTROL_OID ) )
{
ctx.addToEnvironment( Context.REFERRAL, "ignore" );
@@ -102,10 +100,10 @@
{
ctx.addToEnvironment( Context.REFERRAL, "throw" );
}
-
+
// Inject controls into the context
setRequestControls( ctx, req );
-
+
String deleteRDN = String.valueOf( req.getDeleteOldRdn() );
ctx.addToEnvironment( JndiPropertyConstants.JNDI_LDAP_DELETE_RDN, deleteRDN );
@@ -114,7 +112,7 @@
if ( ( newSuperior != null ) && ( !newSuperior.isEmpty() ) )
{
LdapDN oldDn = req.getName();
- LdapDN newDn = null;
+ LdapDN newDn;
newDn = newSuperior;
@@ -154,20 +152,20 @@
refs.addLdapUrl( ( String ) e.getReferralInfo() );
}
while ( e.skipReferral() );
-
+
session.write( req.getResultResponse() );
}
catch ( NamingException e )
{
String msg = "failed to modify DN of entry " + req.getName() + ": " + e.getMessage();
-
+
if ( IS_DEBUG )
{
msg += ":\n" + ExceptionUtils.getStackTrace( e );
}
ResultCodeEnum code;
-
+
if ( e instanceof LdapException )
{
code = ( ( LdapException ) e ).getResultCode();
@@ -179,7 +177,7 @@
result.setResultCode( code );
result.setErrorMessage( msg );
-
+
if ( ( e.getResolvedName() != null )
&& ( ( code == ResultCodeEnum.NO_SUCH_OBJECT ) || ( code == ResultCodeEnum.ALIAS_PROBLEM )
|| ( code == ResultCodeEnum.INVALID_DN_SYNTAX ) || ( code == ResultCodeEnum.ALIAS_DEREFERENCING_PROBLEM ) ) )
@@ -191,4 +189,4 @@
}
}
}
-}
+}
\ No newline at end of file
Propchange: directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/DefaultModifyDnHandler.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: directory/apacheds/branches/bigbang/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/DefaultModifyDnHandler.java
------------------------------------------------------------------------------
--- svn:keywords (added)
+++ svn:keywords Sun Oct 7 22:54:38 2007
@@ -0,0 +1,4 @@
+Rev
+Revision
+Date
+Id