1// OpenLDAP: pkg/ldap/contrib/ldapc++/src/LDAPControl.cpp,v 1.4.10.2 2008/09/03 18:03:43 quanah Exp 2/* 3 * Copyright 2000, OpenLDAP Foundation, All Rights Reserved. 4 * COPYING RESTRICTIONS APPLY, see COPYRIGHT file 5 */ 6 7 8#include "LDAPControl.h" 9#include "debug.h" 10 11using namespace std; 12 13LDAPCtrl::LDAPCtrl(const char *oid, bool critical, const char* data, 14 int length){ 15 DEBUG(LDAP_DEBUG_CONSTRUCT,"LDAPCtrl::LDAPCtrl()" << endl); 16 DEBUG(LDAP_DEBUG_CONSTRUCT | LDAP_DEBUG_PARAMETER, 17 " oid:" << oid << endl << " critical:" << critical << endl); 18 m_oid = oid; 19 m_isCritical=critical; 20 if (data != 0 && length !=0){ 21 m_data.assign(data,length); 22 }else{ 23 m_data=string(); 24 m_noData=true; 25 } 26} 27 28LDAPCtrl::LDAPCtrl(const string& oid, bool critical, const string& data){ 29 DEBUG(LDAP_DEBUG_CONSTRUCT,"LDAPCtrl::LDAPCtrl()" << endl); 30 DEBUG(LDAP_DEBUG_CONSTRUCT | LDAP_DEBUG_PARAMETER, 31 " oid:" << oid << endl << " critical:" << critical << endl); 32 m_oid=oid; 33 m_isCritical=critical; 34 m_data=data; 35 m_noData=false; 36} 37 38LDAPCtrl::LDAPCtrl(const LDAPControl* ctrl){ 39 DEBUG(LDAP_DEBUG_CONSTRUCT,"LDAPCtrl::LDAPCtrl()" << endl); 40 m_oid = string(ctrl->ldctl_oid); 41 m_oid = ctrl->ldctl_iscritical ? true : false; 42 m_oid = string(ctrl->ldctl_value.bv_val, ctrl->ldctl_value.bv_len ); 43} 44 45LDAPCtrl::~LDAPCtrl(){ 46 DEBUG(LDAP_DEBUG_DESTROY,"LDAPCtrl::~LDAPCtrl" << endl); 47} 48 49string LDAPCtrl::getOID() const{ 50 DEBUG(LDAP_DEBUG_TRACE,"LDAPCtrl::getOID()" << endl); 51 return m_oid; 52} 53 54bool LDAPCtrl::isCritical()const { 55 DEBUG(LDAP_DEBUG_TRACE,"LDAPCtrl::isCritical()" << endl); 56 return m_isCritical; 57} 58 59bool LDAPCtrl::hasData() const{ 60 return !m_noData; 61} 62 63string LDAPCtrl::getData() const { 64 DEBUG(LDAP_DEBUG_TRACE,"LDAPCtrl::getData()" << endl); 65 return m_data; 66} 67 68LDAPControl* LDAPCtrl::getControlStruct() const { 69 DEBUG(LDAP_DEBUG_TRACE,"LDAPCtrl::getControlStruct()" << endl); 70 LDAPControl* ret = new LDAPControl; 71 ret->ldctl_oid= new char[m_oid.size() + 1]; 72 m_oid.copy(ret->ldctl_oid,string::npos); 73 ret->ldctl_oid[m_oid.size()]=0; 74 if ( m_noData ) { 75 ret->ldctl_value.bv_len = 0; 76 ret->ldctl_value.bv_val = NULL; 77 } else { 78 ret->ldctl_value.bv_len=m_data.size(); 79 ret->ldctl_value.bv_val= new char[m_data.size()]; 80 m_data.copy(ret->ldctl_value.bv_val,string::npos); 81 } 82 ret->ldctl_iscritical = ( m_isCritical ? 1:0); 83 return ret; 84} 85 86void LDAPCtrl::freeLDAPControlStruct(LDAPControl *ctrl){ 87 DEBUG(LDAP_DEBUG_TRACE,"LDAPCtrl::freeControlStruct()" << endl); 88 delete[] ctrl->ldctl_oid; 89 delete[] ctrl->ldctl_value.bv_val; 90 delete ctrl; 91} 92 93