* @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() )
{
AddResponse addResponse = response.getAddResponse();
copyMessageIdAndControls( response, addResponse );
AddResponseDsml addResponseDsml = new AddResponseDsml( addResponse );
batchResponse.addResponse( addResponseDsml );
}
else if ( LdapConstants.BIND_RESPONSE == response.getMessageType() )
{
BindResponse bindResponse = response.getBindResponse();
copyMessageIdAndControls( response, bindResponse );
AuthResponseDsml authResponseDsml = new AuthResponseDsml( bindResponse );
batchResponse.addResponse( authResponseDsml );
}
else if ( LdapConstants.COMPARE_RESPONSE == response.getMessageType() )
{
CompareResponse compareResponse = response.getCompareResponse();
copyMessageIdAndControls( response, compareResponse );
CompareResponseDsml authResponseDsml = new CompareResponseDsml( compareResponse );
batchResponse.addResponse( authResponseDsml );
}
else if ( LdapConstants.DEL_RESPONSE == response.getMessageType() )
{
DelResponse delResponse = response.getDelResponse();
copyMessageIdAndControls( response, delResponse );
DelResponseDsml delResponseDsml = new DelResponseDsml( delResponse );
batchResponse.addResponse( delResponseDsml );
}
else if ( LdapConstants.MODIFY_RESPONSE == response.getMessageType() )
{
ModifyResponse modifyResponse = response.getModifyResponse();
copyMessageIdAndControls( response, modifyResponse );
ModifyResponseDsml modifyResponseDsml = new ModifyResponseDsml( modifyResponse );
batchResponse.addResponse( modifyResponseDsml );
}
else if ( LdapConstants.MODIFYDN_RESPONSE == response.getMessageType() )
{
ModifyDNResponse modifyDNResponse = response.getModifyDNResponse();
copyMessageIdAndControls( response, modifyDNResponse );
ModDNResponseDsml modDNResponseDsml = new ModDNResponseDsml( modifyDNResponse );
batchResponse.addResponse( modDNResponseDsml );
}
else if ( LdapConstants.EXTENDED_RESPONSE == response.getMessageType() )
{
ExtendedResponse extendedResponse = response.getExtendedResponse();
copyMessageIdAndControls( response, extendedResponse );
ExtendedResponseDsml extendedResponseDsml = new ExtendedResponseDsml( extendedResponse );
batchResponse.addResponse( extendedResponseDsml );
}
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" );
SearchResponseDsml searchResponseDsml = new SearchResponseDsml();
// RequestID
int requestID = response.getMessageId();
if ( requestID != 0 )
{
searchResponseDsml.setMessageId( requestID );
}
while ( LdapConstants.SEARCH_RESULT_DONE != response.getMessageType() )
{
if ( LdapConstants.SEARCH_RESULT_ENTRY == response.getMessageType() )
{
SearchResultEntry sre = response.getSearchResultEntry();
copyMessageIdAndControls( response, sre );
SearchResultEntryDsml searchResultEntryDsml = new SearchResultEntryDsml( sre );
searchResponseDsml.addResponse( searchResultEntryDsml );
}
else if ( LdapConstants.SEARCH_RESULT_REFERENCE == response.getMessageType() )
{
SearchResultReference srr = response.getSearchResultReference();
copyMessageIdAndControls( response, srr );
SearchResultReferenceDsml searchResultReferenceDsml = new SearchResultReferenceDsml( srr );
searchResponseDsml.addResponse( searchResultReferenceDsml );
}
response = readResponse( bb );
}
SearchResultDone srd = response.getSearchResultDone();
copyMessageIdAndControls( response, srd );
SearchResultDoneDsml searchResultDoneDsml = new SearchResultDoneDsml( response );
searchResponseDsml.addResponse( searchResultDoneDsml );
}
LdapResponse realResponse = response.getLdapResponse();
if ( !continueOnError )
{
if ( ( realResponse.getLdapResult().getResultCode() != ResultCodeEnum.SUCCESS )
&& ( realResponse.getLdapResult().getResultCode() != ResultCodeEnum.COMPARE_TRUE )