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 2004/11/03 06:45:53 UTC
svn commit: rev 56477 - incubator/directory/eve/trunk/protocol/src/java/org/apache/eve/protocol
Author: akarasulu
Date: Tue Nov 2 21:45:52 2004
New Revision: 56477
Added:
incubator/directory/eve/trunk/protocol/src/java/org/apache/eve/protocol/LdapProviderMonitor.java
incubator/directory/eve/trunk/protocol/src/java/org/apache/eve/protocol/SessionRegistry.java
Modified:
incubator/directory/eve/trunk/protocol/src/java/org/apache/eve/protocol/AbandonHandler.java
incubator/directory/eve/trunk/protocol/src/java/org/apache/eve/protocol/BindHandler.java
incubator/directory/eve/trunk/protocol/src/java/org/apache/eve/protocol/LdapProtocolProvider.java
incubator/directory/eve/trunk/protocol/src/java/org/apache/eve/protocol/UnbindHandler.java
Log:
its coming along
Modified: incubator/directory/eve/trunk/protocol/src/java/org/apache/eve/protocol/AbandonHandler.java
==============================================================================
--- incubator/directory/eve/trunk/protocol/src/java/org/apache/eve/protocol/AbandonHandler.java (original)
+++ incubator/directory/eve/trunk/protocol/src/java/org/apache/eve/protocol/AbandonHandler.java Tue Nov 2 21:45:52 2004
@@ -20,6 +20,7 @@
import org.apache.seda.listener.ClientKey;
import org.apache.seda.protocol.AbstractNoReplyHandler;
+import org.apache.ldap.common.message.AbandonRequest;
import org.apache.ldap.common.NotImplementedException;
@@ -33,6 +34,8 @@
{
public void handle( ClientKey key, Object request )
{
- throw new NotImplementedException( "handle in org.apache.eve.protocol.AbandonHandler not implemented!" );
+ AbandonRequest req = ( AbandonRequest ) request;
+ int abandonedId = req.getAbandoned();
+ throw new NotImplementedException( "don't know how to do this just yet" );
}
}
Modified: incubator/directory/eve/trunk/protocol/src/java/org/apache/eve/protocol/BindHandler.java
==============================================================================
--- incubator/directory/eve/trunk/protocol/src/java/org/apache/eve/protocol/BindHandler.java (original)
+++ incubator/directory/eve/trunk/protocol/src/java/org/apache/eve/protocol/BindHandler.java Tue Nov 2 21:45:52 2004
@@ -17,10 +17,16 @@
package org.apache.eve.protocol;
+import java.util.Hashtable;
+
+import javax.naming.InitialContext;
+import javax.naming.NamingException;
+
import org.apache.seda.listener.ClientKey;
import org.apache.seda.protocol.AbstractSingleReplyHandler;
-import org.apache.ldap.common.NotImplementedException;
+import org.apache.ldap.common.message.*;
+import org.apache.ldap.common.util.ExceptionUtils;
/**
@@ -36,6 +42,37 @@
*/
public Object handle( ClientKey key, Object request )
{
- throw new NotImplementedException( "handle in org.apache.eve.protocol.BindHandler not implemented!" );
+ BindRequest req = ( BindRequest ) request;
+ BindResponse resp = new BindResponseImpl( req.getMessageId() );
+
+ if ( ! req.isSimple() )
+ {
+ resp.setLdapResult( new LdapResultImpl( resp ) );
+ resp.getLdapResult().setResultCode( ResultCodeEnum.AUTHMETHODNOTSUPPORTED );
+ resp.getLdapResult().setErrorMessage( "Only simple binds currently supported" );
+ return resp;
+ }
+
+ String dn = req.getName();
+ byte[] creds = req.getCredentials();
+ Hashtable env = SessionRegistry.getSingleton( null ).getEnvironment();
+ InitialContext ictx;
+
+ try
+ {
+ ictx = new InitialContext( env );
+ }
+ catch( NamingException e )
+ {
+ resp.setLdapResult( new LdapResultImpl( resp ) );
+ resp.getLdapResult().setResultCode( ResultCodeEnum.OTHER );
+ String msg = "Bind failure:\n" + ExceptionUtils.getStackTrace( e );
+ msg += "\n\nBindRequest = \n" + req.toString();
+ resp.getLdapResult().setErrorMessage( msg );
+ return resp;
+ }
+
+ SessionRegistry.getSingleton( null ).put( key, ictx );
+ return resp;
}
}
Modified: incubator/directory/eve/trunk/protocol/src/java/org/apache/eve/protocol/LdapProtocolProvider.java
==============================================================================
--- incubator/directory/eve/trunk/protocol/src/java/org/apache/eve/protocol/LdapProtocolProvider.java (original)
+++ incubator/directory/eve/trunk/protocol/src/java/org/apache/eve/protocol/LdapProtocolProvider.java Tue Nov 2 21:45:52 2004
@@ -115,6 +115,7 @@
public LdapProtocolProvider( Properties env ) throws LdapNamingException
{
this.handlers = new HashMap();
+ SessionRegistry.getSingleton( env );
Iterator requestTypes = DEFAULT_HANDLERS.keySet().iterator();
while ( requestTypes.hasNext() )
@@ -172,6 +173,7 @@
public LdapProtocolProvider() throws LdapNamingException
{
this.handlers = new HashMap();
+ SessionRegistry.getSingleton( null );
Iterator requestTypes = DEFAULT_HANDLERS.keySet().iterator();
while ( requestTypes.hasNext() )
Added: incubator/directory/eve/trunk/protocol/src/java/org/apache/eve/protocol/LdapProviderMonitor.java
==============================================================================
--- (empty file)
+++ incubator/directory/eve/trunk/protocol/src/java/org/apache/eve/protocol/LdapProviderMonitor.java Tue Nov 2 21:45:52 2004
@@ -0,0 +1,28 @@
+/*
+ * Copyright 2004 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+package org.apache.eve.protocol;
+
+
+/**
+ * Document this class.
+ *
+ * @author <a href="mailto:directory-dev@incubator.apache.org">Apache Directory Project</a>
+ * @version $Rev$
+ */
+public interface LdapProviderMonitor
+{
+}
Added: incubator/directory/eve/trunk/protocol/src/java/org/apache/eve/protocol/SessionRegistry.java
==============================================================================
--- (empty file)
+++ incubator/directory/eve/trunk/protocol/src/java/org/apache/eve/protocol/SessionRegistry.java Tue Nov 2 21:45:52 2004
@@ -0,0 +1,162 @@
+/*
+ * Copyright 2004 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+package org.apache.eve.protocol;
+
+
+import java.util.*;
+import javax.naming.InitialContext;
+
+import org.apache.seda.listener.ClientKey;
+
+
+/**
+ * A client session state based on JNDI contexts.
+ *
+ * @author <a href="mailto:directory-dev@incubator.apache.org">Apache Directory Project</a>
+ * @version $Rev$
+ */
+public class SessionRegistry
+{
+ private static SessionRegistry s_singleton;
+ /** the set of client contexts */
+ private final Map contexts = new HashMap();
+ /** the observer to listen for key expiration */
+ private final Observer keyObserver = new KeyExpirationObserver();
+ /** the properties associated with this SessionRegistry */
+ private Hashtable env;
+
+
+ /**
+ * Gets the singleton instance for this SessionRegistry. If the singleton
+ * does not exist one is created.
+ *
+ * @param env the properties associated with the SessionRegistry if created
+ * @return the singleton SessionRegistry instance
+ */
+ public static SessionRegistry getSingleton( Hashtable env )
+ {
+ if ( s_singleton == null )
+ {
+ s_singleton = new SessionRegistry( env );
+ }
+
+ return s_singleton;
+ }
+
+
+ /**
+ * Creates a singleton session state object for the system.
+ *
+ * @param env the properties associated with this SessionRegistry
+ */
+ private SessionRegistry( Hashtable env )
+ {
+ if ( env == null )
+ {
+ this.env = new Hashtable();
+ }
+ else
+ {
+ this.env = env;
+ }
+ }
+
+
+ /**
+ * Gets a cloned copy of the environment associated with this registry.
+ *
+ * @return the registry environment
+ */
+ public Hashtable getEnvironment()
+ {
+ return ( Hashtable ) env.clone();
+ }
+
+
+ /**
+ * Gets the InitialContext to the root of the system that was gotten for
+ * client.
+ *
+ * @param key the client's key
+ * @return the InitialContext or null
+ */
+ public InitialContext get( ClientKey key )
+ {
+ key.addObserver( keyObserver );
+ synchronized( contexts )
+ {
+ return ( InitialContext ) contexts.get( key );
+ }
+ }
+
+
+ /**
+ * Sets the initial context associated with a newly authenticated client.
+ *
+ * @param key the client's key
+ * @param ictx the initial context gotten
+ */
+ public void put( ClientKey key, InitialContext ictx )
+ {
+ key.deleteObserver( keyObserver ); // remove first just in case
+ key.addObserver( keyObserver );
+ synchronized( contexts )
+ {
+ contexts.put( key, ictx );
+ }
+ }
+
+
+ /**
+ * Removes the state mapping a JNDI initial context for the client's key.
+ *
+ * @param key the client's key
+ */
+ public void remove( ClientKey key )
+ {
+ key.deleteObserver( keyObserver );
+ synchronized( contexts )
+ {
+ contexts.remove( key );
+ }
+ }
+
+
+ /**
+ * A key expiration observer.
+ */
+ class KeyExpirationObserver implements Observer
+ {
+ /**
+ * This is called whenever the client's key expires. We react by removing
+ * the entry if any of the client's in our InitialContext registry.
+ *
+ * @param o the ClientKey that has expired
+ * @param arg will be null
+ */
+ public void update( Observable o, Object arg )
+ {
+ // cast just to make sure
+ ClientKey key = ( ClientKey ) o;
+ key.deleteObserver( keyObserver );
+ synchronized( contexts )
+ {
+ contexts.remove( key );
+ }
+ }
+ }
+}
Modified: incubator/directory/eve/trunk/protocol/src/java/org/apache/eve/protocol/UnbindHandler.java
==============================================================================
--- incubator/directory/eve/trunk/protocol/src/java/org/apache/eve/protocol/UnbindHandler.java (original)
+++ incubator/directory/eve/trunk/protocol/src/java/org/apache/eve/protocol/UnbindHandler.java Tue Nov 2 21:45:52 2004
@@ -20,8 +20,6 @@
import org.apache.seda.listener.ClientKey;
import org.apache.seda.protocol.AbstractNoReplyHandler;
-import org.apache.ldap.common.NotImplementedException;
-
/**
* A no reply protocol handler implementation for LDAP {@link
@@ -34,6 +32,6 @@
{
public void handle( ClientKey key, Object request )
{
- throw new NotImplementedException( "handle in org.apache.eve.protocol.UnbindHandler not implemented!" );
+ SessionRegistry.getSingleton( null ).remove( key );
}
}