* @throws NamingException
* @throws DecoderException
*/
private void processRequest( LdapMessage request ) throws EncoderException, IOException, DecoderException, NamingException
{
LdapMessage message = new LdapMessage();
message.setProtocolOP( request );
message.setMessageId( request.getMessageId() );
ByteBuffer bb = null;
bb = message.encode( null );
bb.flip();
sendMessage( bb );
bb.clear();
bb.position( bb.capacity() );
// Get the response
LdapMessage response = null;
response = readResponse( bb );
if ( LdapConstants.ADD_RESPONSE == response.getMessageType() )
{
AddResponseDsml addResponseDsml = new AddResponseDsml( response );
addResponseDsml.toDsml( xmlResponse.getRootElement() );
}
else if ( LdapConstants.BIND_RESPONSE == response.getMessageType() )
{
AuthResponseDsml authResponseDsml = new AuthResponseDsml( response );
authResponseDsml.toDsml( xmlResponse.getRootElement() );
}
else if ( LdapConstants.COMPARE_RESPONSE == response.getMessageType() )
{
CompareResponseDsml authResponseDsml = new CompareResponseDsml( response );
authResponseDsml.toDsml( xmlResponse.getRootElement() );
}
else if ( LdapConstants.DEL_RESPONSE == response.getMessageType() )
{
DelResponseDsml delResponseDsml = new DelResponseDsml( response );
delResponseDsml.toDsml( xmlResponse.getRootElement() );
}
else if ( LdapConstants.MODIFY_RESPONSE == response.getMessageType() )
{
ModifyResponseDsml modifyResponseDsml = new ModifyResponseDsml( response );
modifyResponseDsml.toDsml( xmlResponse.getRootElement() );
}
else if ( LdapConstants.MODIFYDN_RESPONSE == response.getMessageType() )
{
ModDNResponseDsml modDNResponseDsml = new ModDNResponseDsml( response );
modDNResponseDsml.toDsml( xmlResponse.getRootElement() );
}
else if ( LdapConstants.EXTENDED_RESPONSE == response.getMessageType() )
{
ExtendedResponseDsml extendedResponseDsml = new ExtendedResponseDsml( response );
extendedResponseDsml.toDsml( xmlResponse.getRootElement() );
}
else if ( ( LdapConstants.SEARCH_RESULT_ENTRY == response.getMessageType() )
|| ( LdapConstants.SEARCH_RESULT_REFERENCE == response.getMessageType() )
|| ( LdapConstants.SEARCH_RESULT_DONE == response.getMessageType() ) )
{
// A SearchResponse can contains multiple responses of 3 types:
// - 0 to n SearchResultEntry
// - O to n SearchResultReference
// - 1 (only) SearchResultDone
// So we have to include those individual reponses in a "General" SearchResponse
Element searchResponse = xmlResponse.getRootElement().addElement( "searchResponse" );
// RequestID
int requestID = response.getMessageId();
if ( requestID != 0 )
{
searchResponse.addAttribute( "requestID", "" + requestID );
}
while ( LdapConstants.SEARCH_RESULT_DONE != response.getMessageType() )
{
if ( LdapConstants.SEARCH_RESULT_ENTRY == response.getMessageType() )
{
SearchResultEntryDsml searchResultEntryDsml = new SearchResultEntryDsml( response );
searchResultEntryDsml.toDsml( searchResponse );
}
else if ( LdapConstants.SEARCH_RESULT_REFERENCE == response.getMessageType() )
{
SearchResultReferenceDsml searchResultReferenceDsml = new SearchResultReferenceDsml( response );
searchResultReferenceDsml.toDsml( searchResponse );
}
response = readResponse( bb );
}
SearchResultDoneDsml searchResultDoneDsml = new SearchResultDoneDsml( response );
searchResultDoneDsml.toDsml( searchResponse );
}
LdapResponse realResponse = response.getLdapResponse();
if ( !continueOnError )
{
if ( ( realResponse.getLdapResult().getResultCode() != ResultCodeEnum.SUCCESS )
&& ( realResponse.getLdapResult().getResultCode() != ResultCodeEnum.COMPARE_TRUE )