LDAPControl.cpp revision 1.1.1.8
1// $OpenLDAP$
2/*
3 * Copyright 2000-2021 The 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        m_noData=false;
23    }else{
24        m_data=string();
25        m_noData=true;
26    }
27}
28
29LDAPCtrl::LDAPCtrl(const string& oid, bool critical, const string& data){
30    DEBUG(LDAP_DEBUG_CONSTRUCT,"LDAPCtrl::LDAPCtrl()" << endl);
31    DEBUG(LDAP_DEBUG_CONSTRUCT | LDAP_DEBUG_PARAMETER,
32            "   oid:" << oid << endl << "   critical:" << critical << endl);
33    m_oid=oid;
34    m_isCritical=critical;
35    m_data=data;
36    m_noData=false;
37}
38
39LDAPCtrl::LDAPCtrl(const LDAPControl* ctrl){
40    DEBUG(LDAP_DEBUG_CONSTRUCT,"LDAPCtrl::LDAPCtrl()" << endl);
41    m_oid = string(ctrl->ldctl_oid);
42    m_isCritical = ctrl->ldctl_iscritical ? true : false;
43    m_data = string(ctrl->ldctl_value.bv_val, ctrl->ldctl_value.bv_len );
44    m_noData = ctrl->ldctl_value.bv_len ? false : true;
45}
46
47LDAPCtrl::~LDAPCtrl(){
48    DEBUG(LDAP_DEBUG_DESTROY,"LDAPCtrl::~LDAPCtrl" << endl);
49}
50
51string LDAPCtrl::getOID() const{
52    DEBUG(LDAP_DEBUG_TRACE,"LDAPCtrl::getOID()" << endl);
53    return m_oid;
54}
55
56bool LDAPCtrl::isCritical()const {
57    DEBUG(LDAP_DEBUG_TRACE,"LDAPCtrl::isCritical()" << endl);
58    return m_isCritical;
59}
60
61bool LDAPCtrl::hasData() const{
62    return !m_noData;
63}
64
65string LDAPCtrl::getData() const {
66    DEBUG(LDAP_DEBUG_TRACE,"LDAPCtrl::getData()" << endl);
67    return m_data;
68}
69
70LDAPControl* LDAPCtrl::getControlStruct() const {
71    DEBUG(LDAP_DEBUG_TRACE,"LDAPCtrl::getControlStruct()" << endl);
72    LDAPControl* ret = new LDAPControl;
73    ret->ldctl_oid= new char[m_oid.size() + 1];
74    m_oid.copy(ret->ldctl_oid,string::npos);
75    ret->ldctl_oid[m_oid.size()]=0;
76    if ( m_noData ) {
77        ret->ldctl_value.bv_len = 0;
78        ret->ldctl_value.bv_val = NULL;
79    } else {
80        ret->ldctl_value.bv_len=m_data.size();
81        ret->ldctl_value.bv_val= new char[m_data.size()];
82        m_data.copy(ret->ldctl_value.bv_val,string::npos);
83    }
84    ret->ldctl_iscritical = ( m_isCritical ? 1:0);
85    return ret;
86}
87
88void LDAPCtrl::freeLDAPControlStruct(LDAPControl *ctrl){
89    DEBUG(LDAP_DEBUG_TRACE,"LDAPCtrl::freeControlStruct()" << endl);
90    delete[] ctrl->ldctl_oid;
91    delete[] ctrl->ldctl_value.bv_val;
92    delete ctrl;
93}
94
95