Fixed shared in order to handle correctly the PagedSearch control :
- the decoder was not handling the control at all
- a test was failing as soon as the previous bug was fixed
- the twixTransformer was not handling this control either.
git-svn-id: https://svn.apache.org/repos/asf/directory/shared/branches/shared-mina2@723943 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/ldap/src/main/java/org/apache/directory/shared/ldap/codec/TwixTransformer.java b/ldap/src/main/java/org/apache/directory/shared/ldap/codec/TwixTransformer.java
index e5e11c0..5f388f0 100644
--- a/ldap/src/main/java/org/apache/directory/shared/ldap/codec/TwixTransformer.java
+++ b/ldap/src/main/java/org/apache/directory/shared/ldap/codec/TwixTransformer.java
@@ -60,6 +60,7 @@
import org.apache.directory.shared.ldap.codec.search.SearchResultReference;
import org.apache.directory.shared.ldap.codec.search.SubstringFilter;
import org.apache.directory.shared.ldap.codec.search.controls.PSearchControlCodec;
+import org.apache.directory.shared.ldap.codec.search.controls.PagedSearchControlCodec;
import org.apache.directory.shared.ldap.codec.search.controls.SubEntryControlCodec;
import org.apache.directory.shared.ldap.codec.util.LdapURLEncodingException;
import org.apache.directory.shared.ldap.entry.EntryAttribute;
@@ -105,6 +106,7 @@
import org.apache.directory.shared.ldap.message.UnbindRequestImpl;
import org.apache.directory.shared.ldap.message.control.AbstractMutableControlImpl;
import org.apache.directory.shared.ldap.message.control.CascadeControl;
+import org.apache.directory.shared.ldap.message.control.PagedSearchControl;
import org.apache.directory.shared.ldap.message.control.PersistentSearchControl;
import org.apache.directory.shared.ldap.message.control.SubentriesControl;
import org.apache.directory.shared.ldap.message.extended.GracefulShutdownRequest;
@@ -934,6 +936,15 @@
neutralSubentriesControl.setVisibility( twixSubentriesControl.isVisible() );
neutralSubentriesControl.setCritical( twixControl.getCriticality() );
}
+ else if ( twixControl.getControlValue() instanceof PagedSearchControlCodec )
+ {
+ PagedSearchControl neutralPagedSearchControl = new PagedSearchControl();
+ neutralControl = neutralPagedSearchControl;
+ PagedSearchControlCodec twixPagedSearchControl = (PagedSearchControlCodec)twixControl.getControlValue();
+ neutralPagedSearchControl.setCookie( twixPagedSearchControl.getCookie() );
+ neutralPagedSearchControl.setSize( twixPagedSearchControl.getSize() );
+ neutralPagedSearchControl.setCritical( twixControl.getCriticality() );
+ }
else if ( twixControl.getControlValue() instanceof byte[] )
{
neutralControl = new AbstractMutableControlImpl()
diff --git a/ldap/src/main/java/org/apache/directory/shared/ldap/codec/actions/ControlValueAction.java b/ldap/src/main/java/org/apache/directory/shared/ldap/codec/actions/ControlValueAction.java
index 6c2e308..fb87960 100644
--- a/ldap/src/main/java/org/apache/directory/shared/ldap/codec/actions/ControlValueAction.java
+++ b/ldap/src/main/java/org/apache/directory/shared/ldap/codec/actions/ControlValueAction.java
@@ -34,6 +34,7 @@
import org.apache.directory.shared.ldap.codec.LdapMessageContainer;
import org.apache.directory.shared.ldap.codec.controls.ManageDsaITControlDecoder;
import org.apache.directory.shared.ldap.codec.search.controls.PSearchControlDecoder;
+import org.apache.directory.shared.ldap.codec.search.controls.PagedSearchControlDecoder;
import org.apache.directory.shared.ldap.codec.search.controls.SubEntryControlDecoder;
import org.apache.directory.shared.ldap.util.StringTools;
@@ -73,6 +74,9 @@
decoder = new SubEntryControlDecoder();
controlDecoders.put( decoder.getControlType(), decoder );
+
+ decoder = new PagedSearchControlDecoder();
+ controlDecoders.put( decoder.getControlType(), decoder );
}
diff --git a/ldap/src/test/java/org/apache/directory/shared/ldap/codec/bind/BindResponseTest.java b/ldap/src/test/java/org/apache/directory/shared/ldap/codec/bind/BindResponseTest.java
index 08ed22c..985271b 100644
--- a/ldap/src/test/java/org/apache/directory/shared/ldap/codec/bind/BindResponseTest.java
+++ b/ldap/src/test/java/org/apache/directory/shared/ldap/codec/bind/BindResponseTest.java
@@ -21,6 +21,7 @@
import java.nio.ByteBuffer;
+import java.util.Arrays;
import java.util.List;
import org.apache.directory.shared.asn1.ber.Asn1Decoder;
@@ -32,7 +33,9 @@
import org.apache.directory.shared.ldap.codec.LdapMessage;
import org.apache.directory.shared.ldap.codec.LdapMessageContainer;
import org.apache.directory.shared.ldap.codec.bind.BindResponse;
+import org.apache.directory.shared.ldap.codec.search.controls.PagedSearchControlCodec;
import org.apache.directory.shared.ldap.message.ResultCodeEnum;
+import org.apache.directory.shared.ldap.message.control.PagedSearchControl;
import org.apache.directory.shared.ldap.util.StringTools;
import junit.framework.TestCase;
@@ -124,26 +127,32 @@
ByteBuffer stream = ByteBuffer.allocate( 0x3C );
stream.put( new byte[]
- { 0x30, 0x3A, // LDAPMessage ::=SEQUENCE {
- 0x02, 0x01, 0x01, // messageID MessageID
- 0x61, 0x07, // CHOICE { ..., bindResponse BindResponse, ...
- // BindResponse ::= APPLICATION[1] SEQUENCE {
- // COMPONENTS OF LDAPResult,
- 0x0A, 0x01, 0x00, // LDAPResult ::= SEQUENCE {
- // resultCode ENUMERATED {
- // success (0), ...
- // },
- 0x04, 0x00, // matchedDN LDAPDN,
- 0x04, 0x00, // errorMessage LDAPString,
- // referral [3] Referral OPTIONAL }
- // serverSaslCreds [7] OCTET STRING OPTIONAL }
- ( byte ) 0xa0, 0x2C, // controls
- 0x30, 0x2A, 0x04, 0x16, 0x31, 0x2e, 0x32, 0x2e, 0x38, 0x34, 0x30, 0x2e, 0x31, 0x31, 0x33, 0x35, 0x35,
- 0x36, 0x2e, 0x31, 0x2e, 0x34, 0x2e, 0x33, 0x31, 0x39, // control
- // oid:
- // 1.2.840.113556.1.4.319
- 0x01, 0x01, ( byte ) 0xff, // criticality: false
- 0x04, 0x0D, 0x30, 0x0B, 0x0A, 0x01, 0x08, 0x04, 0x03, 'a', '=', 'b', 0x02, 0x01, 0x10 } );
+ {
+ 0x30, 0x3A, // LDAPMessage ::=SEQUENCE {
+ 0x02, 0x01, 0x01, // messageID MessageID
+ 0x61, 0x07, // CHOICE { ..., bindResponse BindResponse, ...
+ // BindResponse ::= APPLICATION[1] SEQUENCE {
+ // COMPONENTS OF LDAPResult,
+ 0x0A, 0x01, 0x00, // LDAPResult ::= SEQUENCE {
+ // resultCode ENUMERATED {
+ // success (0), ...
+ // },
+ 0x04, 0x00, // matchedDN LDAPDN,
+ 0x04, 0x00, // errorMessage LDAPString,
+ // referral [3] Referral OPTIONAL }
+ // serverSaslCreds [7] OCTET STRING OPTIONAL }
+ ( byte ) 0xa0, 0x2C, // controls
+ 0x30, 0x2A, // The PagedSearchControl
+ 0x04, 0x16, // Oid : 1.2.840.113556.1.4.319
+ 0x31, 0x2e, 0x32, 0x2e, 0x38, 0x34, 0x30, 0x2e,
+ 0x31, 0x31, 0x33, 0x35, 0x35, 0x36, 0x2e, 0x31,
+ 0x2e, 0x34, 0x2e, 0x33, 0x31, 0x39, // control
+ 0x01, 0x01, ( byte ) 0xff, // criticality: false
+ 0x04, 0x0D,
+ 0x30, 0x0B,
+ 0x02, 0x01, 0x05, // Size = 5, cookie = "abcdef"
+ 0x04, 0x06, 'a', 'b', 'c', 'd', 'e', 'f'
+ } );
String decodedPdu = StringTools.dumpBytes( stream.array() );
stream.flip();
@@ -181,8 +190,12 @@
Control control = message.getControls( 0 );
assertEquals( "1.2.840.113556.1.4.319", control.getControlType() );
- assertEquals( "0x30 0x0B 0x0A 0x01 0x08 0x04 0x03 0x61 0x3D 0x62 0x02 0x01 0x10 ", StringTools
- .dumpBytes( ( byte[] ) control.getControlValue() ) );
+ assertTrue( control.getControlValue() instanceof PagedSearchControlCodec );
+
+ PagedSearchControlCodec pagedSearchControl = (PagedSearchControlCodec)control.getControlValue();
+
+ assertEquals( 5, pagedSearchControl.getSize() );
+ assertTrue( Arrays.equals( "abcdef".getBytes(), pagedSearchControl.getCookie() ) );
// Check the encoding
try