diff options
Diffstat (limited to 'contrib/ldapc++/src/LDAPRequest.cpp')
-rw-r--r-- | contrib/ldapc++/src/LDAPRequest.cpp | 145 |
1 files changed, 145 insertions, 0 deletions
diff --git a/contrib/ldapc++/src/LDAPRequest.cpp b/contrib/ldapc++/src/LDAPRequest.cpp new file mode 100644 index 0000000..57839ce --- /dev/null +++ b/contrib/ldapc++/src/LDAPRequest.cpp @@ -0,0 +1,145 @@ +// $OpenLDAP$ +/* + * Copyright 2000-2022 The OpenLDAP Foundation, All Rights Reserved. + * COPYING RESTRICTIONS APPLY, see COPYRIGHT file + */ + + +#include "debug.h" +#include "LDAPRequest.h" + +using namespace std; + +LDAPRequest::LDAPRequest(){ + DEBUG(LDAP_DEBUG_CONSTRUCT, "LDAPRequest::LDAPRequest()" << endl); +} + +LDAPRequest::LDAPRequest(const LDAPRequest& req){ + DEBUG(LDAP_DEBUG_CONSTRUCT, "LDAPRequest::LDAPRequest(&)" << endl); + m_isReferral=req.m_isReferral; + m_cons = new LDAPConstraints(*(req.m_cons)); + m_connection = req.m_connection; + m_parent = req.m_parent; + m_hopCount = req.m_hopCount; + m_msgID = req.m_msgID; +} + +LDAPRequest::LDAPRequest(LDAPAsynConnection* con, + const LDAPConstraints* cons,bool isReferral, const LDAPRequest* parent){ + DEBUG(LDAP_DEBUG_CONSTRUCT,"LDAPRequest::LDAPRequest()" << endl); + m_connection=con; + if(cons == 0){ + m_cons=new LDAPConstraints( *(con->getConstraints()) ); + }else{ + m_cons=new LDAPConstraints( *cons); + } + m_isReferral=isReferral; + if(m_isReferral){ + m_hopCount = (parent->getHopCount()+1); + m_parent= parent; + }else{ + m_hopCount=0; + m_parent=0; + } +} + +LDAPRequest::~LDAPRequest(){ + DEBUG(LDAP_DEBUG_DESTROY,"LDAPRequest::~LDAPRequest()" << endl); + delete m_cons; +} + +LDAPMsg* LDAPRequest::getNextMessage() const +{ + DEBUG(LDAP_DEBUG_DESTROY,"LDAPRequest::getNextMessage()" << endl); + int res; + LDAPMessage *msg; + + res=ldap_result(this->m_connection->getSessionHandle(), + this->m_msgID,0,0,&msg); + + if (res <= 0){ + if(msg != 0){ + ldap_msgfree(msg); + } + throw LDAPException(this->m_connection); + }else{ + LDAPMsg *ret=0; + //this can throw an exception (Decoding Error) + ret = LDAPMsg::create(this,msg); + ldap_msgfree(msg); + return ret; + } +} + +LDAPRequest* LDAPRequest::followReferral(LDAPMsg* /*urls*/){ + DEBUG(LDAP_DEBUG_TRACE,"LDAPBindRequest::followReferral()" << endl); + DEBUG(LDAP_DEBUG_TRACE, + "ReferralChasing not implemented for this operation" << endl); + return 0; +} + +const LDAPConstraints* LDAPRequest::getConstraints() const{ + DEBUG(LDAP_DEBUG_TRACE,"LDAPRequest::getConstraints()" << endl); + return m_cons; +} + +const LDAPAsynConnection* LDAPRequest::getConnection() const{ + DEBUG(LDAP_DEBUG_TRACE,"LDAPRequest::getConnection()" << endl); + return m_connection; +} + +int LDAPRequest::getType() const { + DEBUG(LDAP_DEBUG_TRACE,"LDAPRequest::getType()" << endl); + return m_requestType; +} + +int LDAPRequest::getMsgID() const { + DEBUG(LDAP_DEBUG_TRACE,"LDAPRequest::getMsgId()" << endl); + return m_msgID; +} + +int LDAPRequest::getHopCount() const { + DEBUG(LDAP_DEBUG_TRACE,"LDAPRequest::getHopCount()" << endl); + return m_hopCount; +} + +const LDAPRequest* LDAPRequest::getParent() const{ + DEBUG(LDAP_DEBUG_TRACE,"LDAPRequest::getParent()" << endl); + return m_parent; +} + +bool LDAPRequest::isReferral() const { + DEBUG(LDAP_DEBUG_TRACE,"LDAPRequest::isReferral()" << endl); + return m_isReferral; +} + +bool LDAPRequest::equals(const LDAPRequest* req) const{ + DEBUG(LDAP_DEBUG_TRACE,"LDAPRequest::equals()" << endl); + if( (this->m_requestType == req->getType()) && + (this->m_connection->getHost() == req->m_connection->getHost()) && + (this->m_connection->getPort() == req->m_connection->getPort()) + ){ + return true; + }return false; +} + +bool LDAPRequest::isCycle() const{ + DEBUG(LDAP_DEBUG_TRACE,"LDAPRequest::isCycle()" << endl); + const LDAPRequest* parent=m_parent; + if(parent != 0){ + do{ + if(this->equals(parent)){ + return true; + }else{ + parent=parent->getParent(); + } + } + while(parent != 0); + } + return false; +} + +void LDAPRequest::unbind() const{ + DEBUG(LDAP_DEBUG_TRACE,"LDAPRequest::unbind()" << endl); + m_connection->unbind(); +} |