1 // OpenLDAP: pkg/ldap/contrib/ldapc++/src/LDAPRequest.cpp,v 1.3.10.3 2008/04/14 23:09:26 quanah Exp 2 /* 3 * Copyright 2000, OpenLDAP Foundation, All Rights Reserved. 4 * COPYING RESTRICTIONS APPLY, see COPYRIGHT file 5 */ 6 7 8 #include "debug.h" 9 #include "LDAPRequest.h" 10 11 using namespace std; 12 13 LDAPRequest::LDAPRequest(){ 14 DEBUG(LDAP_DEBUG_CONSTRUCT, "LDAPRequest::LDAPRequest()" << endl); 15 } 16 17 LDAPRequest::LDAPRequest(const LDAPRequest& req){ 18 DEBUG(LDAP_DEBUG_CONSTRUCT, "LDAPRequest::LDAPRequest(&)" << endl); 19 m_isReferral=req.m_isReferral; 20 m_cons = new LDAPConstraints(*(req.m_cons)); 21 m_connection = req.m_connection; 22 m_parent = req.m_parent; 23 m_hopCount = req.m_hopCount; 24 m_msgID = req.m_msgID; 25 } 26 27 LDAPRequest::LDAPRequest(LDAPAsynConnection* con, 28 const LDAPConstraints* cons,bool isReferral, const LDAPRequest* parent){ 29 DEBUG(LDAP_DEBUG_CONSTRUCT,"LDAPRequest::LDAPRequest()" << endl); 30 m_connection=con; 31 if(cons == 0){ 32 m_cons=new LDAPConstraints( *(con->getConstraints()) ); 33 }else{ 34 m_cons=new LDAPConstraints( *cons); 35 } 36 m_isReferral=isReferral; 37 if(m_isReferral){ 38 m_hopCount = (parent->getHopCount()+1); 39 m_parent= parent; 40 }else{ 41 m_hopCount=0; 42 m_parent=0; 43 } 44 } 45 46 LDAPRequest::~LDAPRequest(){ 47 DEBUG(LDAP_DEBUG_DESTROY,"LDAPRequest::~LDAPRequest()" << endl); 48 delete m_cons; 49 } 50 51 LDAPMsg* LDAPRequest::getNextMessage() const 52 { 53 DEBUG(LDAP_DEBUG_DESTROY,"LDAPRequest::getNextMessage()" << endl); 54 int res; 55 LDAPMessage *msg; 56 57 res=ldap_result(this->m_connection->getSessionHandle(), 58 this->m_msgID,0,0,&msg); 59 60 if (res <= 0){ 61 if(msg != 0){ 62 ldap_msgfree(msg); 63 } 64 throw LDAPException(this->m_connection); 65 }else{ 66 LDAPMsg *ret=0; 67 //this can throw an exception (Decoding Error) 68 ret = LDAPMsg::create(this,msg); 69 ldap_msgfree(msg); 70 return ret; 71 } 72 } 73 74 LDAPRequest* LDAPRequest::followReferral(LDAPMsg* /*urls*/){ 75 DEBUG(LDAP_DEBUG_TRACE,"LDAPBindRequest::followReferral()" << endl); 76 DEBUG(LDAP_DEBUG_TRACE, 77 "ReferralChasing not implemented for this operation" << endl); 78 return 0; 79 } 80 81 const LDAPConstraints* LDAPRequest::getConstraints() const{ 82 DEBUG(LDAP_DEBUG_TRACE,"LDAPRequest::getConstraints()" << endl); 83 return m_cons; 84 } 85 86 const LDAPAsynConnection* LDAPRequest::getConnection() const{ 87 DEBUG(LDAP_DEBUG_TRACE,"LDAPRequest::getConnection()" << endl); 88 return m_connection; 89 } 90 91 int LDAPRequest::getType() const { 92 DEBUG(LDAP_DEBUG_TRACE,"LDAPRequest::getType()" << endl); 93 return m_requestType; 94 } 95 96 int LDAPRequest::getMsgID() const { 97 DEBUG(LDAP_DEBUG_TRACE,"LDAPRequest::getMsgId()" << endl); 98 return m_msgID; 99 } 100 101 int LDAPRequest::getHopCount() const { 102 DEBUG(LDAP_DEBUG_TRACE,"LDAPRequest::getHopCount()" << endl); 103 return m_hopCount; 104 } 105 106 const LDAPRequest* LDAPRequest::getParent() const{ 107 DEBUG(LDAP_DEBUG_TRACE,"LDAPRequest::getParent()" << endl); 108 return m_parent; 109 } 110 111 bool LDAPRequest::isReferral() const { 112 DEBUG(LDAP_DEBUG_TRACE,"LDAPRequest::isReferral()" << endl); 113 return m_isReferral; 114 } 115 116 bool LDAPRequest::equals(const LDAPRequest* req) const{ 117 DEBUG(LDAP_DEBUG_TRACE,"LDAPRequest::equals()" << endl); 118 if( (this->m_requestType == req->getType()) && 119 (this->m_connection->getHost() == req->m_connection->getHost()) && 120 (this->m_connection->getPort() == req->m_connection->getPort()) 121 ){ 122 return true; 123 }return false; 124 } 125 126 bool LDAPRequest::isCycle() const{ 127 DEBUG(LDAP_DEBUG_TRACE,"LDAPRequest::isCycle()" << endl); 128 const LDAPRequest* parent=m_parent; 129 if(parent != 0){ 130 do{ 131 if(this->equals(parent)){ 132 return true; 133 }else{ 134 parent=parent->getParent(); 135 } 136 } 137 while(parent != 0); 138 } 139 return false; 140 } 141 142 void LDAPRequest::unbind() const{ 143 DEBUG(LDAP_DEBUG_TRACE,"LDAPRequest::unbind()" << endl); 144 m_connection->unbind(); 145 } 146