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 2006/10/03 16:04:17 UTC
svn commit: r452504 [2/2] -
/directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/actions/
Added: directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/actions/ResponseAction.java
URL: http://svn.apache.org/viewvc/directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/actions/ResponseAction.java?view=auto&rev=452504
==============================================================================
--- directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/actions/ResponseAction.java (added)
+++ directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/actions/ResponseAction.java Tue Oct 3 07:04:15 2006
@@ -0,0 +1,88 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.directory.shared.ldap.codec.actions;
+
+
+import org.apache.directory.shared.asn1.ber.IAsn1Container;
+import org.apache.directory.shared.asn1.ber.grammar.GrammarAction;
+import org.apache.directory.shared.asn1.ber.tlv.TLV;
+import org.apache.directory.shared.asn1.codec.DecoderException;
+import org.apache.directory.shared.ldap.codec.LdapMessage;
+import org.apache.directory.shared.ldap.codec.LdapMessageContainer;
+import org.apache.directory.shared.ldap.codec.extended.ExtendedResponse;
+import org.apache.directory.shared.ldap.util.StringTools;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+/**
+ * The action used to store a Response to an ExtendedResponse
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ */
+public class ResponseAction extends GrammarAction
+{
+ /** The logger */
+ private static final Logger log = LoggerFactory.getLogger( ResponseAction.class );
+
+ /** Speedup for logs */
+ private static final boolean IS_DEBUG = log.isDebugEnabled();
+
+ public ResponseAction()
+ {
+ super( "Store response" );
+ }
+
+ /**
+ * The initialization action
+ */
+ public void action( IAsn1Container container ) throws DecoderException
+ {
+
+ LdapMessageContainer ldapMessageContainer = ( LdapMessageContainer ) container;
+ LdapMessage ldapMessage = ldapMessageContainer.getLdapMessage();
+
+ // We can allocate the ExtendedResponse Object
+ ExtendedResponse extendedResponse = ldapMessage.getExtendedResponse();
+
+ // Get the Value and store it in the ExtendedResponse
+ TLV tlv = ldapMessageContainer.getCurrentTLV();
+
+ // We have to handle the special case of a 0 length matched
+ // OID
+ if ( tlv.getLength() == 0 )
+ {
+ extendedResponse.setResponse( StringTools.EMPTY_BYTES );
+ }
+ else
+ {
+ extendedResponse.setResponse( tlv.getValue().getData() );
+ }
+
+ // We can have an END transition
+ ldapMessageContainer.grammarEndAllowed( true );
+
+ if ( IS_DEBUG )
+ {
+ log.debug( "Extended value : {}", extendedResponse.getResponse() );
+ }
+ }
+}
Added: directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/actions/ResponseNameAction.java
URL: http://svn.apache.org/viewvc/directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/actions/ResponseNameAction.java?view=auto&rev=452504
==============================================================================
--- directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/actions/ResponseNameAction.java (added)
+++ directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/actions/ResponseNameAction.java Tue Oct 3 07:04:15 2006
@@ -0,0 +1,90 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.directory.shared.ldap.codec.actions;
+
+
+import org.apache.directory.shared.asn1.ber.IAsn1Container;
+import org.apache.directory.shared.asn1.ber.grammar.GrammarAction;
+import org.apache.directory.shared.asn1.ber.tlv.TLV;
+import org.apache.directory.shared.asn1.codec.DecoderException;
+import org.apache.directory.shared.asn1.primitives.OID;
+import org.apache.directory.shared.ldap.codec.LdapMessage;
+import org.apache.directory.shared.ldap.codec.LdapMessageContainer;
+import org.apache.directory.shared.ldap.codec.extended.ExtendedResponse;
+import org.apache.directory.shared.ldap.util.StringTools;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+/**
+ * The action used to store a Response Name to an ExtendedResponse
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ */
+public class ResponseNameAction extends GrammarAction
+{
+ /** The logger */
+ private static final Logger log = LoggerFactory.getLogger( ResponseNameAction.class );
+
+ /** Speedup for logs */
+ private static final boolean IS_DEBUG = log.isDebugEnabled();
+
+ public ResponseNameAction()
+ {
+ super( "Store response name" );
+ }
+
+ /**
+ * The initialization action
+ */
+ public void action( IAsn1Container container ) throws DecoderException
+ {
+ LdapMessageContainer ldapMessageContainer = ( LdapMessageContainer ) container;
+ LdapMessage ldapMessage = ldapMessageContainer.getLdapMessage();
+
+ // We can allocate the ExtendedResponse Object
+ ExtendedResponse extendedResponse = ldapMessage.getExtendedResponse();
+
+ // Get the Value and store it in the ExtendedResponse
+ TLV tlv = ldapMessageContainer.getCurrentTLV();
+
+ // We have to handle the special case of a 0 length matched
+ // OID
+ if ( tlv.getLength() == 0 )
+ {
+ log.error( "The name must not be null" );
+ throw new DecoderException( "The name must not be null" );
+ }
+ else
+ {
+ extendedResponse
+ .setResponseName( new OID( StringTools.asciiBytesToString( tlv.getValue().getData() ) ) );
+ }
+
+ // We can have an END transition
+ ldapMessageContainer.grammarEndAllowed( true );
+
+ if ( IS_DEBUG )
+ {
+ log.debug( "OID read : {}", extendedResponse.getResponseName() );
+ }
+ }
+}
Added: directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/actions/ResultCodeAction.java
URL: http://svn.apache.org/viewvc/directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/actions/ResultCodeAction.java?view=auto&rev=452504
==============================================================================
--- directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/actions/ResultCodeAction.java (added)
+++ directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/actions/ResultCodeAction.java Tue Oct 3 07:04:15 2006
@@ -0,0 +1,144 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.directory.shared.ldap.codec.actions;
+
+
+import org.apache.directory.shared.asn1.ber.IAsn1Container;
+import org.apache.directory.shared.asn1.ber.grammar.GrammarAction;
+import org.apache.directory.shared.asn1.ber.tlv.TLV;
+import org.apache.directory.shared.asn1.ber.tlv.Value;
+import org.apache.directory.shared.asn1.codec.DecoderException;
+import org.apache.directory.shared.asn1.util.IntegerDecoder;
+import org.apache.directory.shared.asn1.util.IntegerDecoderException;
+import org.apache.directory.shared.ldap.codec.LdapMessage;
+import org.apache.directory.shared.ldap.codec.LdapMessageContainer;
+import org.apache.directory.shared.ldap.codec.LdapResponse;
+import org.apache.directory.shared.ldap.codec.LdapResult;
+import org.apache.directory.shared.ldap.codec.util.LdapResultEnum;
+import org.apache.directory.shared.ldap.util.StringTools;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+/**
+ * The action used to set the LdapResult result code.
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ */
+public class ResultCodeAction extends GrammarAction
+{
+ /** The logger */
+ private static final Logger log = LoggerFactory.getLogger( ResultCodeAction.class );
+
+ /** Speedup for logs */
+ private static final boolean IS_DEBUG = log.isDebugEnabled();
+
+ public ResultCodeAction()
+ {
+ super( "Store resultCode" );
+ }
+
+ /**
+ * The initialization action
+ */
+ public void action( IAsn1Container container ) throws DecoderException
+ {
+ LdapMessageContainer ldapMessageContainer = ( LdapMessageContainer ) container;
+ LdapMessage message = ldapMessageContainer.getLdapMessage();
+ LdapResponse response = message.getLdapResponse();
+ LdapResult ldapResult = new LdapResult();
+ response.setLdapResult( ldapResult );
+
+ // We don't have to allocate a LdapResult first.
+
+ // The current TLV should be a integer
+ // We get it and store it in MessageId
+ TLV tlv = ldapMessageContainer.getCurrentTLV();
+
+ Value value = tlv.getValue();
+ int resultCode = 0;
+
+ try
+ {
+ resultCode = IntegerDecoder.parse( value, 0, 90 );
+ }
+ catch ( IntegerDecoderException ide )
+ {
+ log.error( "The result code " + StringTools.dumpBytes( value.getData() ) + " is invalid : "
+ + ide.getMessage() + ". The result code must be between (0 .. 90)" );
+
+ throw new DecoderException( ide.getMessage() );
+ }
+
+ // Treat the 'normal' cases !
+ switch ( resultCode )
+ {
+ case LdapResultEnum.SUCCESS:
+ case LdapResultEnum.OPERATIONS_ERROR:
+ case LdapResultEnum.PROTOCOL_ERROR:
+ case LdapResultEnum.TIME_LIMIT_EXCEEDED:
+ case LdapResultEnum.SIZE_LIMIT_EXCEEDED:
+ case LdapResultEnum.COMPARE_FALSE:
+ case LdapResultEnum.COMPARE_TRUE:
+ case LdapResultEnum.AUTH_METHOD_NOT_SUPPORTED:
+ case LdapResultEnum.STRONG_AUTH_REQUIRED:
+ case LdapResultEnum.REFERRAL:
+ case LdapResultEnum.ADMIN_LIMIT_EXCEEDED:
+ case LdapResultEnum.UNAVAILABLE_CRITICAL_EXTENSION:
+ case LdapResultEnum.CONFIDENTIALITY_REQUIRED:
+ case LdapResultEnum.SASL_BIND_IN_PROGRESS:
+ case LdapResultEnum.NO_SUCH_ATTRIBUTE:
+ case LdapResultEnum.UNDEFINED_ATTRIBUTE_TYPE:
+ case LdapResultEnum.INAPPROPRIATE_MATCHING:
+ case LdapResultEnum.CONSTRAINT_VIOLATION:
+ case LdapResultEnum.ATTRIBUTE_OR_VALUE_EXISTS:
+ case LdapResultEnum.INVALID_ATTRIBUTE_SYNTAX:
+ case LdapResultEnum.NO_SUCH_OBJECT:
+ case LdapResultEnum.ALIAS_PROBLEM:
+ case LdapResultEnum.INVALID_DN_SYNTAX:
+ case LdapResultEnum.ALIAS_DEREFERENCING_PROBLEM:
+ case LdapResultEnum.INAPPROPRIATE_AUTHENTICATION:
+ case LdapResultEnum.INVALID_CREDENTIALS:
+ case LdapResultEnum.INSUFFICIENT_ACCESS_RIGHTS:
+ case LdapResultEnum.BUSY:
+ case LdapResultEnum.UNAVAILABLE:
+ case LdapResultEnum.UNWILLING_TO_PERFORM:
+ case LdapResultEnum.LOOP_DETECT:
+ case LdapResultEnum.NAMING_VIOLATION:
+ case LdapResultEnum.OBJECT_CLASS_VIOLATION:
+ case LdapResultEnum.NOT_ALLOWED_ON_NON_LEAF:
+ case LdapResultEnum.NOT_ALLOWED_ON_RDN:
+ case LdapResultEnum.ENTRY_ALREADY_EXISTS:
+ case LdapResultEnum.AFFECTS_MULTIPLE_DSAS:
+ ldapResult.setResultCode( resultCode );
+ break;
+
+ default:
+ log.warn( "The resultCode " + resultCode + " is unknown." );
+ ldapResult.setResultCode( LdapResultEnum.OTHER );
+ }
+
+ if ( IS_DEBUG )
+ {
+ log.debug( "The result code is set to " + LdapResultEnum.errorCode( resultCode ) );
+ }
+ }
+}
Added: directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/actions/SearchResultAttributeValueAction.java
URL: http://svn.apache.org/viewvc/directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/actions/SearchResultAttributeValueAction.java?view=auto&rev=452504
==============================================================================
--- directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/actions/SearchResultAttributeValueAction.java (added)
+++ directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/actions/SearchResultAttributeValueAction.java Tue Oct 3 07:04:15 2006
@@ -0,0 +1,97 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.directory.shared.ldap.codec.actions;
+
+
+import org.apache.directory.shared.asn1.ber.IAsn1Container;
+import org.apache.directory.shared.asn1.ber.grammar.GrammarAction;
+import org.apache.directory.shared.asn1.ber.tlv.TLV;
+import org.apache.directory.shared.ldap.codec.LdapMessage;
+import org.apache.directory.shared.ldap.codec.LdapMessageContainer;
+import org.apache.directory.shared.ldap.codec.search.SearchResultEntry;
+import org.apache.directory.shared.ldap.util.StringTools;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+/**
+ * The action used to store a Value to an search result entry
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ */
+public class SearchResultAttributeValueAction extends GrammarAction
+{
+ /** The logger */
+ private static final Logger log = LoggerFactory.getLogger( SearchResultAttributeValueAction.class );
+
+ /** Speedup for logs */
+ private static final boolean IS_DEBUG = log.isDebugEnabled();
+
+ public SearchResultAttributeValueAction()
+ {
+ super( "Stores AttributeValue" );
+ }
+
+ /**
+ * The initialization action
+ */
+ public void action( IAsn1Container container )
+ {
+ LdapMessageContainer ldapMessageContainer = ( LdapMessageContainer ) container;
+ LdapMessage ldapMessage = ldapMessageContainer.getLdapMessage();
+ SearchResultEntry searchResultEntry = ldapMessage.getSearchResultEntry();
+
+ TLV tlv = ldapMessageContainer.getCurrentTLV();
+
+ // Store the value
+ Object value = null;
+
+ if ( tlv.getLength() == 0 )
+ {
+ searchResultEntry.addAttributeValue( "" );
+
+ log.debug( "The attribute value is null" );
+ }
+ else
+ {
+ if ( ldapMessageContainer.isBinary( searchResultEntry.getCurrentAttributeValueType() ) )
+ {
+ value = tlv.getValue().getData();
+
+ if ( IS_DEBUG )
+ {
+ log.debug( "Attribute value {}", StringTools.dumpBytes( ( byte[] ) value ) );
+ }
+ }
+ else
+ {
+ value = StringTools.utf8ToString( tlv.getValue().getData() );
+
+ log.debug( "Attribute value {}", value );
+ }
+
+ searchResultEntry.addAttributeValue( value );
+ }
+
+ // We can have an END transition
+ ldapMessageContainer.grammarEndAllowed( true );
+ }
+}
Added: directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/actions/ServerSASLCredsAction.java
URL: http://svn.apache.org/viewvc/directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/actions/ServerSASLCredsAction.java?view=auto&rev=452504
==============================================================================
--- directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/actions/ServerSASLCredsAction.java (added)
+++ directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/actions/ServerSASLCredsAction.java Tue Oct 3 07:04:15 2006
@@ -0,0 +1,87 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.directory.shared.ldap.codec.actions;
+
+
+import org.apache.directory.shared.asn1.ber.IAsn1Container;
+import org.apache.directory.shared.asn1.ber.grammar.GrammarAction;
+import org.apache.directory.shared.asn1.ber.tlv.TLV;
+import org.apache.directory.shared.asn1.codec.DecoderException;
+import org.apache.directory.shared.ldap.codec.LdapMessageContainer;
+import org.apache.directory.shared.ldap.codec.bind.BindResponse;
+import org.apache.directory.shared.ldap.util.StringTools;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+/**
+ * The action used to store a SASL credentials
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ */
+public class ServerSASLCredsAction extends GrammarAction
+{
+ /** The logger */
+ private static final Logger log = LoggerFactory.getLogger( ServerSASLCredsAction.class );
+
+ /** Speedup for logs */
+ private static final boolean IS_DEBUG = log.isDebugEnabled();
+
+ public ServerSASLCredsAction()
+ {
+ super( "Store server sasl credentials value" );
+ }
+
+ /**
+ * The initialization action
+ */
+ public void action( IAsn1Container container ) throws DecoderException
+ {
+ LdapMessageContainer ldapMessageContainer = ( LdapMessageContainer ) container;
+
+ BindResponse bindResponseMessage = ldapMessageContainer.getLdapMessage().getBindResponse();
+
+ // Get the Value and store it in the BindRequest
+ TLV tlv = ldapMessageContainer.getCurrentTLV();
+
+ // We have to handle the special case of a 0 length server
+ // sasl credentials
+ if ( tlv.getLength() == 0 )
+ {
+ bindResponseMessage.setServerSaslCreds( StringTools.EMPTY_BYTES );
+ }
+ else
+ {
+ bindResponseMessage.setServerSaslCreds( tlv.getValue().getData() );
+ }
+
+ // We can have an END transition
+ ldapMessageContainer.grammarEndAllowed( true );
+
+ if ( IS_DEBUG )
+ {
+ log.debug( "The SASL credentials value is : {}", bindResponseMessage.getServerSaslCreds()
+ .toString() );
+ }
+
+ return;
+ }
+}
Added: directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/actions/StoreAnyAction.java
URL: http://svn.apache.org/viewvc/directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/actions/StoreAnyAction.java?view=auto&rev=452504
==============================================================================
--- directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/actions/StoreAnyAction.java (added)
+++ directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/actions/StoreAnyAction.java Tue Oct 3 07:04:15 2006
@@ -0,0 +1,86 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.directory.shared.ldap.codec.actions;
+
+
+import org.apache.directory.shared.asn1.ber.IAsn1Container;
+import org.apache.directory.shared.asn1.ber.grammar.GrammarAction;
+import org.apache.directory.shared.asn1.ber.tlv.TLV;
+import org.apache.directory.shared.asn1.codec.DecoderException;
+import org.apache.directory.shared.ldap.codec.LdapMessage;
+import org.apache.directory.shared.ldap.codec.LdapMessageContainer;
+import org.apache.directory.shared.ldap.codec.search.SearchRequest;
+import org.apache.directory.shared.ldap.codec.search.SubstringFilter;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+/**
+ * The action used to store a any value into a substring filter
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ */
+public class StoreAnyAction extends GrammarAction
+{
+ /** The logger */
+ private static final Logger log = LoggerFactory.getLogger( StoreAnyAction.class );
+
+ /** Speedup for logs */
+ private static final boolean IS_DEBUG = log.isDebugEnabled();
+
+ public StoreAnyAction()
+ {
+ super( "Store a any value" );
+ }
+
+ /**
+ * The initialization action
+ */
+ public void action( IAsn1Container container ) throws DecoderException
+ {
+ LdapMessageContainer ldapMessageContainer = ( LdapMessageContainer ) container;
+ LdapMessage ldapMessage = ldapMessageContainer.getLdapMessage();
+ SearchRequest searchRequest = ldapMessage.getSearchRequest();
+
+ TLV tlv = ldapMessageContainer.getCurrentTLV();
+
+ // Store the value.
+ SubstringFilter substringFilter = ( SubstringFilter ) searchRequest.getTerminalFilter();
+
+ if ( tlv.getLength() == 0 )
+ {
+ log.error( "The substring any filter is empty" );
+ throw new DecoderException( "The substring any filter is empty" );
+ }
+
+ String any = new String( tlv.getValue().getData() );
+ substringFilter.addAnySubstrings( any );
+
+ // We now have to get back to the nearest filter which is
+ // not terminal.
+ searchRequest.unstackFilters( container );
+
+ if ( IS_DEBUG )
+ {
+ log.debug( "Stored a any substring : {}", any );
+ }
+ }
+}
Added: directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/actions/StoreFinalAction.java
URL: http://svn.apache.org/viewvc/directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/actions/StoreFinalAction.java?view=auto&rev=452504
==============================================================================
--- directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/actions/StoreFinalAction.java (added)
+++ directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/actions/StoreFinalAction.java Tue Oct 3 07:04:15 2006
@@ -0,0 +1,86 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.directory.shared.ldap.codec.actions;
+
+
+import org.apache.directory.shared.asn1.ber.IAsn1Container;
+import org.apache.directory.shared.asn1.ber.grammar.GrammarAction;
+import org.apache.directory.shared.asn1.ber.tlv.TLV;
+import org.apache.directory.shared.asn1.codec.DecoderException;
+import org.apache.directory.shared.ldap.codec.LdapMessage;
+import org.apache.directory.shared.ldap.codec.LdapMessageContainer;
+import org.apache.directory.shared.ldap.codec.search.SearchRequest;
+import org.apache.directory.shared.ldap.codec.search.SubstringFilter;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+/**
+ * The action used to store a final value into a substring filter
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ */
+public class StoreFinalAction extends GrammarAction
+{
+ /** The logger */
+ private static final Logger log = LoggerFactory.getLogger( StoreFinalAction.class );
+
+ /** Speedup for logs */
+ private static final boolean IS_DEBUG = log.isDebugEnabled();
+
+ public StoreFinalAction()
+ {
+ super( "Store a final value" );
+ }
+
+ /**
+ * The initialization action
+ */
+ public void action( IAsn1Container container ) throws DecoderException
+ {
+ LdapMessageContainer ldapMessageContainer = ( LdapMessageContainer ) container;
+ LdapMessage ldapMessage = ldapMessageContainer.getLdapMessage();
+ SearchRequest searchRequest = ldapMessage.getSearchRequest();
+
+ TLV tlv = ldapMessageContainer.getCurrentTLV();
+
+ // Store the value.
+ SubstringFilter substringFilter = ( SubstringFilter ) searchRequest.getTerminalFilter();
+
+ if ( tlv.getLength() == 0 )
+ {
+ log.error( "The substring final filter is empty" );
+ throw new DecoderException( "The substring final filter is empty" );
+ }
+
+ String finalValue = new String( tlv.getValue().getData() );
+ substringFilter.setFinalSubstrings( finalValue );
+
+ // We now have to get back to the nearest filter which is
+ // not terminal.
+ searchRequest.unstackFilters( container );
+
+ if ( IS_DEBUG )
+ {
+ log.debug( "Stored a any substring : {}", finalValue );
+ }
+ }
+}
Added: directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/actions/StoreMatchValueAction.java
URL: http://svn.apache.org/viewvc/directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/actions/StoreMatchValueAction.java?view=auto&rev=452504
==============================================================================
--- directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/actions/StoreMatchValueAction.java (added)
+++ directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/actions/StoreMatchValueAction.java Tue Oct 3 07:04:15 2006
@@ -0,0 +1,81 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.directory.shared.ldap.codec.actions;
+
+
+import org.apache.directory.shared.asn1.ber.IAsn1Container;
+import org.apache.directory.shared.asn1.ber.grammar.GrammarAction;
+import org.apache.directory.shared.asn1.ber.tlv.TLV;
+import org.apache.directory.shared.asn1.codec.DecoderException;
+import org.apache.directory.shared.ldap.codec.LdapMessage;
+import org.apache.directory.shared.ldap.codec.LdapMessageContainer;
+import org.apache.directory.shared.ldap.codec.search.ExtensibleMatchFilter;
+import org.apache.directory.shared.ldap.codec.search.SearchRequest;
+import org.apache.directory.shared.ldap.util.StringTools;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+/**
+ * The action used to store a match value
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ */
+public class StoreMatchValueAction extends GrammarAction
+{
+ /** The logger */
+ private static final Logger log = LoggerFactory.getLogger( StoreMatchValueAction.class );
+
+ /** Speedup for logs */
+ private static final boolean IS_DEBUG = log.isDebugEnabled();
+
+ public StoreMatchValueAction()
+ {
+ super( "Store match Value" );
+ }
+
+ /**
+ * The initialization action
+ */
+ public void action( IAsn1Container container ) throws DecoderException
+ {
+ LdapMessageContainer ldapMessageContainer = ( LdapMessageContainer ) container;
+ LdapMessage ldapMessage = ldapMessageContainer.getLdapMessage();
+ SearchRequest searchRequest = ldapMessage.getSearchRequest();
+
+ TLV tlv = ldapMessageContainer.getCurrentTLV();
+
+ // Store the value.
+ ExtensibleMatchFilter extensibleMatchFilter = ( ExtensibleMatchFilter ) searchRequest
+ .getTerminalFilter();
+
+ String value = StringTools.utf8ToString( tlv.getValue().getData() );
+ extensibleMatchFilter.setMatchValue( value );
+
+ // unstack the filters if needed
+ searchRequest.unstackFilters( container );
+
+ if ( IS_DEBUG )
+ {
+ log.debug( "Stored a match value : {}", value );
+ }
+ }
+}
Added: directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/actions/StoreReferenceAction.java
URL: http://svn.apache.org/viewvc/directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/actions/StoreReferenceAction.java?view=auto&rev=452504
==============================================================================
--- directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/actions/StoreReferenceAction.java (added)
+++ directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/actions/StoreReferenceAction.java Tue Oct 3 07:04:15 2006
@@ -0,0 +1,101 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.directory.shared.ldap.codec.actions;
+
+
+import org.apache.directory.shared.asn1.ber.IAsn1Container;
+import org.apache.directory.shared.asn1.ber.grammar.GrammarAction;
+import org.apache.directory.shared.asn1.ber.tlv.TLV;
+import org.apache.directory.shared.asn1.codec.DecoderException;
+import org.apache.directory.shared.ldap.codec.LdapMessageContainer;
+import org.apache.directory.shared.ldap.codec.search.SearchResultReference;
+import org.apache.directory.shared.ldap.codec.util.LdapURL;
+import org.apache.directory.shared.ldap.codec.util.LdapURLEncodingException;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+/**
+ * The action used to store a reference into a searchResultReference
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ */
+public class StoreReferenceAction extends GrammarAction
+{
+ /** The logger */
+ private static final Logger log = LoggerFactory.getLogger( StoreReferenceAction.class );
+
+ /** Speedup for logs */
+ private static final boolean IS_DEBUG = log.isDebugEnabled();
+
+ public StoreReferenceAction()
+ {
+ super( "Store a reference" );
+ }
+
+ /**
+ * The initialization action
+ */
+ public void action( IAsn1Container container ) throws DecoderException
+ {
+
+ LdapMessageContainer ldapMessageContainer = ( LdapMessageContainer ) container;
+
+ SearchResultReference searchResultReference = ldapMessageContainer.getLdapMessage()
+ .getSearchResultReference();
+
+ // Get the Value and store it in the BindRequest
+ TLV tlv = ldapMessageContainer.getCurrentTLV();
+
+ // We have to handle the special case of a 0 length server
+ // sasl credentials
+ LdapURL url = LdapURL.EMPTY_URL;
+
+ if ( tlv.getLength() == 0 )
+ {
+ searchResultReference.addSearchResultReference( url );
+ }
+ else
+ {
+ try
+ {
+ url = new LdapURL( tlv.getValue().getData() );
+ searchResultReference.addSearchResultReference( url );
+ }
+ catch ( LdapURLEncodingException luee )
+ {
+ String badUrl = new String( tlv.getValue().getData() );
+ log.error( "The URL {} is not valid : {}", badUrl, luee.getMessage() );
+ throw new DecoderException( "Invalid URL : " + luee.getMessage() );
+ }
+ }
+
+ if ( IS_DEBUG )
+ {
+ log.debug( "Search reference URL found : {}", url );
+ }
+
+ // We can have an END transition
+ ldapMessageContainer.grammarEndAllowed( true );
+
+ return;
+ }
+}
Added: directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/actions/StoreTypeMatchingRuleAction.java
URL: http://svn.apache.org/viewvc/directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/actions/StoreTypeMatchingRuleAction.java?view=auto&rev=452504
==============================================================================
--- directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/actions/StoreTypeMatchingRuleAction.java (added)
+++ directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/actions/StoreTypeMatchingRuleAction.java Tue Oct 3 07:04:15 2006
@@ -0,0 +1,85 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.directory.shared.ldap.codec.actions;
+
+
+import org.apache.directory.shared.asn1.ber.IAsn1Container;
+import org.apache.directory.shared.asn1.ber.grammar.GrammarAction;
+import org.apache.directory.shared.asn1.ber.tlv.TLV;
+import org.apache.directory.shared.asn1.codec.DecoderException;
+import org.apache.directory.shared.ldap.codec.LdapMessage;
+import org.apache.directory.shared.ldap.codec.LdapMessageContainer;
+import org.apache.directory.shared.ldap.codec.search.ExtensibleMatchFilter;
+import org.apache.directory.shared.ldap.codec.search.SearchRequest;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+/**
+ * The action used to store a type matching rule
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ */
+public class StoreTypeMatchingRuleAction extends GrammarAction
+{
+ /** The logger */
+ private static final Logger log = LoggerFactory.getLogger( StoreTypeMatchingRuleAction.class );
+
+ /** Speedup for logs */
+ private static final boolean IS_DEBUG = log.isDebugEnabled();
+
+ public StoreTypeMatchingRuleAction()
+ {
+ super( "Store matching type Value" );
+ }
+
+ /**
+ * The initialization action
+ */
+ public void action( IAsn1Container container ) throws DecoderException
+ {
+ LdapMessageContainer ldapMessageContainer = ( LdapMessageContainer ) container;
+ LdapMessage ldapMessage = ldapMessageContainer.getLdapMessage();
+ SearchRequest searchRequest = ldapMessage.getSearchRequest();
+
+ TLV tlv = ldapMessageContainer.getCurrentTLV();
+
+ if ( tlv.getLength() == 0 )
+ {
+ log.error( "The type cannot be null in a MacthingRuleAssertion" );
+ throw new DecoderException( "The type cannot be null in a MacthingRuleAssertion" );
+ }
+ else
+ {
+ // Store the value.
+ ExtensibleMatchFilter extensibleMatchFilter = ( ExtensibleMatchFilter ) searchRequest
+ .getTerminalFilter();
+
+ String type = new String( tlv.getValue().getData() );
+ extensibleMatchFilter.setType( type );
+
+ if ( IS_DEBUG )
+ {
+ log.debug( "Stored a type matching rule : {}", type );
+ }
+ }
+ }
+}
Added: directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/actions/ValueAction.java
URL: http://svn.apache.org/viewvc/directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/actions/ValueAction.java?view=auto&rev=452504
==============================================================================
--- directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/actions/ValueAction.java (added)
+++ directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/codec/actions/ValueAction.java Tue Oct 3 07:04:15 2006
@@ -0,0 +1,96 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.directory.shared.ldap.codec.actions;
+
+
+import org.apache.directory.shared.asn1.ber.IAsn1Container;
+import org.apache.directory.shared.asn1.ber.grammar.GrammarAction;
+import org.apache.directory.shared.asn1.ber.tlv.TLV;
+import org.apache.directory.shared.ldap.codec.LdapMessage;
+import org.apache.directory.shared.ldap.codec.LdapMessageContainer;
+import org.apache.directory.shared.ldap.codec.add.AddRequest;
+import org.apache.directory.shared.ldap.util.StringTools;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+/**
+ * The action used to store a Value to an AddRequest
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ */
+public class ValueAction extends GrammarAction
+{
+ /** The logger */
+ private static final Logger log = LoggerFactory.getLogger( ValueAction.class );
+
+ /** Speedup for logs */
+ private static final boolean IS_DEBUG = log.isDebugEnabled();
+
+ public ValueAction()
+ {
+ super( "Store a value" );
+ }
+
+ /**
+ * The initialization action
+ */
+ public void action( IAsn1Container container )
+ {
+
+ LdapMessageContainer ldapMessageContainer = ( LdapMessageContainer ) container;
+ LdapMessage ldapMessage = ldapMessageContainer.getLdapMessage();
+ AddRequest addRequest = ldapMessage.getAddRequest();
+
+ TLV tlv = ldapMessageContainer.getCurrentTLV();
+
+ // Store the value. It can't be null
+ Object value = null;
+
+ if ( tlv.getLength() == 0 )
+ {
+ addRequest.addAttributeValue( "" );
+ }
+ else
+ {
+ if ( ldapMessageContainer.isBinary( addRequest.getCurrentAttributeType() ) )
+ {
+ value = tlv.getValue().getData();
+
+ if ( IS_DEBUG )
+ {
+ log.debug( "Adding value {}", StringTools.dumpBytes( ( byte[] ) value ) );
+ }
+ }
+ else
+ {
+ value = StringTools.utf8ToString( tlv.getValue().getData() );
+
+ log.debug( "Adding value {}" + value );
+ }
+
+ addRequest.addAttributeValue( value );
+ }
+
+ // We can have an END transition
+ ldapMessageContainer.grammarEndAllowed( true );
+ }
+}