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