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