diff options
Diffstat (limited to 'contrib/ldapc++/src/LDAPSearchResults.cpp')
-rw-r--r-- | contrib/ldapc++/src/LDAPSearchResults.cpp | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/contrib/ldapc++/src/LDAPSearchResults.cpp b/contrib/ldapc++/src/LDAPSearchResults.cpp new file mode 100644 index 0000000..a25afe5 --- /dev/null +++ b/contrib/ldapc++/src/LDAPSearchResults.cpp @@ -0,0 +1,60 @@ +// $OpenLDAP$ +/* + * Copyright 2000-2022 The OpenLDAP Foundation, All Rights Reserved. + * COPYING RESTRICTIONS APPLY, see COPYRIGHT file + */ + + +#include "LDAPException.h" +#include "LDAPSearchResult.h" +#include "LDAPResult.h" + +#include "LDAPSearchResults.h" + +LDAPSearchResults::LDAPSearchResults(){ + entryPos = entryList.begin(); + refPos = refList.begin(); +} + +LDAPResult* LDAPSearchResults::readMessageQueue(LDAPMessageQueue* msg){ + if(msg != 0){ + LDAPMsg* res=0; + for(;;){ + try{ + res = msg->getNext(); + }catch (LDAPException e){ + throw; + } + switch(res->getMessageType()){ + case LDAPMsg::SEARCH_ENTRY : + entryList.addEntry(*((LDAPSearchResult*)res)->getEntry()); + break; + case LDAPMsg::SEARCH_REFERENCE : + refList.addReference(*((LDAPSearchReference*)res)); + break; + default: + entryPos=entryList.begin(); + refPos=refList.begin(); + return ((LDAPResult*) res); + } + delete res; + res=0; + } + } + return 0; +} + +LDAPEntry* LDAPSearchResults::getNext(){ + if( entryPos != entryList.end() ){ + LDAPEntry* ret= new LDAPEntry(*entryPos); + entryPos++; + return ret; + } + if( refPos != refList.end() ){ + LDAPUrlList urls= refPos->getUrls(); + refPos++; + throw(LDAPReferralException(urls)); + } + return 0; +} + |