From fc649ad091ca53cbb9798ab193f0e36695abe825 Mon Sep 17 00:00:00 2001
From: neil_a_wilson <neil_a_wilson@localhost>
Date: Wed, 09 May 2007 20:41:56 +0000
Subject: [PATCH] Update the DSML gateway so that it properly treats the request ID as an optional element rather than required.  Also, update the DSML search processing code to be a little more forgiving when it comes to the search scope and deref policy strings.

---
 opends/src/dsml/org/opends/dsml/protocol/DSMLSearchOperation.java |   39 +++++++++++++++++++++------------------
 1 files changed, 21 insertions(+), 18 deletions(-)

diff --git a/opends/src/dsml/org/opends/dsml/protocol/DSMLSearchOperation.java b/opends/src/dsml/org/opends/dsml/protocol/DSMLSearchOperation.java
index 81d1ebc..614df02 100644
--- a/opends/src/dsml/org/opends/dsml/protocol/DSMLSearchOperation.java
+++ b/opends/src/dsml/org/opends/dsml/protocol/DSMLSearchOperation.java
@@ -93,18 +93,7 @@
          throws IOException, LDAPException
   {
     SearchResponse searchResponse = objFactory.createSearchResponse();
-
-    String requestID = searchRequest.getRequestID();
-    int reqID = 1;
-    try
-    {
-      reqID = Integer.parseInt(requestID);
-    } catch (NumberFormatException nfe)
-    {
-      throw new IOException(nfe.getMessage());
-    }
-
-    searchResponse.setRequestID(requestID);
+    searchResponse.setRequestID(searchRequest.getRequestID());
 
     ArrayList<LDAPFilter> filters = new ArrayList<LDAPFilter> ();
     LDAPFilter f = null;
@@ -124,12 +113,27 @@
     {
       filters.add(f);
     }
-    DereferencePolicy derefPolicy = DereferencePolicy.DEREF_IN_SEARCHING;
+    DereferencePolicy derefPolicy = DereferencePolicy.NEVER_DEREF_ALIASES;
+    String derefStr = searchRequest.getDerefAliases().toLowerCase();
+    if (derefStr.equals("derefinsearching"))
+    {
+      derefPolicy = DereferencePolicy.DEREF_IN_SEARCHING;
+    }
+    else if (derefStr.equals("dereffindingbaseobj"))
+    {
+      derefPolicy = DereferencePolicy.DEREF_FINDING_BASE_OBJECT;
+    }
+    else if (derefStr.equals("derefalways"))
+    {
+      derefPolicy = DereferencePolicy.DEREF_ALWAYS;
+    }
+
     SearchScope scope = SearchScope.WHOLE_SUBTREE;
-    if(searchRequest.getScope().equals("singleLevel"))
+    String scopeStr = searchRequest.getScope().toLowerCase();
+    if(scopeStr.equals("singlelevel") || scopeStr.equals("one"))
     {
       scope = SearchScope.SINGLE_LEVEL;
-    } else if(searchRequest.getScope().equals("baseObject"))
+    } else if(scopeStr.equals("baseobject") || scopeStr.equals("base"))
     {
       scope = SearchScope.BASE_OBJECT;
     }
@@ -157,7 +161,8 @@
           false, filter, attributes);
       try
       {
-        LDAPMessage msg = new LDAPMessage(reqID, protocolOp);
+        LDAPMessage msg = new LDAPMessage(DSMLServlet.nextMessageID(),
+                                          protocolOp);
         int numBytes = connection.getASN1Writer().writeElement(msg.encode());
 
         byte opType;
@@ -250,8 +255,6 @@
         ae.printStackTrace();
         throw new IOException(ae.getMessage());
       }
-
-      reqID++;
     }
     return searchResponse;
   }

--
Gitblit v1.10.0