xref: /netbsd-src/external/bsd/openldap/dist/contrib/ldapc++/src/LDAPControl.cpp (revision 6a9b3088d8d2341ca1454531d365c15fe9c1c589)
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 
11 using namespace std;
12 
13 LDAPCtrl::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 
28 LDAPCtrl::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 
38 LDAPCtrl::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 
45 LDAPCtrl::~LDAPCtrl(){
46     DEBUG(LDAP_DEBUG_DESTROY,"LDAPCtrl::~LDAPCtrl" << endl);
47 }
48 
49 string LDAPCtrl::getOID() const{
50     DEBUG(LDAP_DEBUG_TRACE,"LDAPCtrl::getOID()" << endl);
51     return m_oid;
52 }
53 
54 bool LDAPCtrl::isCritical()const {
55     DEBUG(LDAP_DEBUG_TRACE,"LDAPCtrl::isCritical()" << endl);
56     return m_isCritical;
57 }
58 
59 bool LDAPCtrl::hasData() const{
60     return !m_noData;
61 }
62 
63 string LDAPCtrl::getData() const {
64     DEBUG(LDAP_DEBUG_TRACE,"LDAPCtrl::getData()" << endl);
65     return m_data;
66 }
67 
68 LDAPControl* 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 
86 void 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