xref: /netbsd-src/external/bsd/openldap/dist/contrib/ldapc++/src/LDAPControl.h (revision 549b59ed3ccf0d36d3097190a0db27b770f3a839)
1*549b59edSchristos /*	$NetBSD: LDAPControl.h,v 1.3 2021/08/14 16:14:49 christos Exp $	*/
24e6df137Slukem 
3d11b170bStron // $OpenLDAP$
42de962bdSlukem /*
5*549b59edSchristos  * Copyright 2000-2021 The OpenLDAP Foundation, All Rights Reserved.
62de962bdSlukem  * COPYING RESTRICTIONS APPLY, see COPYRIGHT file
72de962bdSlukem  */
82de962bdSlukem 
92de962bdSlukem 
102de962bdSlukem #ifndef LDAP_CONTROL_H
112de962bdSlukem #define LDAP_CONTROL_H
122de962bdSlukem #include <string>
132de962bdSlukem #include <ldap.h>
142de962bdSlukem 
152de962bdSlukem /**
162de962bdSlukem  * This class is used to store Controls. Controls are a mechanism to extend
172de962bdSlukem  * and modify LDAP-Operations.
182de962bdSlukem  */
192de962bdSlukem class LDAPCtrl{
202de962bdSlukem     public :
212de962bdSlukem         /**
222de962bdSlukem          * Constructor.
232de962bdSlukem          * @param oid:  The Object Identifier of the Control
242de962bdSlukem          * @param critical: "true" if the Control should be handled
252de962bdSlukem          *                  critical by the server.
262de962bdSlukem          * @param data: If there is data for the control, put it here.
272de962bdSlukem          * @param length: The length of the data field
282de962bdSlukem          */
294e6df137Slukem         LDAPCtrl(const char *oid, bool critical=false, const char *data=0,
302de962bdSlukem                 int length=0);
312de962bdSlukem 
322de962bdSlukem         /**
332de962bdSlukem          * Constructor.
342de962bdSlukem          * @param oid:  The Object Identifier of the Control
352de962bdSlukem          * @param critical: "true" if the Control should be handled
362de962bdSlukem          *                  critical by the server.
372de962bdSlukem          * @param data: If there is data for the control, put it here.
382de962bdSlukem          */
394e6df137Slukem         LDAPCtrl(const std::string& oid, bool critical,
404e6df137Slukem                  const std::string& data);
412de962bdSlukem 
422de962bdSlukem         /**
432de962bdSlukem          * Creates a copy of the Control that "ctrl is pointing to
442de962bdSlukem          */
452de962bdSlukem         LDAPCtrl(const LDAPControl* ctrl);
462de962bdSlukem 
472de962bdSlukem         /**
482de962bdSlukem          * Destructor
492de962bdSlukem          */
502de962bdSlukem         ~LDAPCtrl();
512de962bdSlukem 
522de962bdSlukem         /**
532de962bdSlukem          * @return The OID of the control
542de962bdSlukem          */
552de962bdSlukem         std::string getOID() const;
562de962bdSlukem 
572de962bdSlukem         /**
584e6df137Slukem          * @return true if there is no "Control Value" (there is a
594e6df137Slukem          * difference between no and an empty control value)
604e6df137Slukem          */
614e6df137Slukem         bool hasData() const;
624e6df137Slukem 
634e6df137Slukem         /**
644e6df137Slukem          * @return The Data of the control as a std::string-Object
652de962bdSlukem          */
662de962bdSlukem         std::string getData() const;
672de962bdSlukem 
682de962bdSlukem         /**
692de962bdSlukem          * @return "true" if the control is critical
702de962bdSlukem          */
712de962bdSlukem         bool isCritical() const;
722de962bdSlukem 
732de962bdSlukem         /**
742de962bdSlukem          * For internal use only.
752de962bdSlukem          *
762de962bdSlukem          * Translates the control to a LDAPControl-structure as needed by
772de962bdSlukem          * the C-API
782de962bdSlukem          */
792de962bdSlukem         LDAPControl* getControlStruct() const;
802de962bdSlukem 	static void freeLDAPControlStruct(LDAPControl *ctrl);
812de962bdSlukem 
822de962bdSlukem     private :
832de962bdSlukem         std::string m_oid;
842de962bdSlukem         std::string m_data;
852de962bdSlukem         bool m_isCritical;
864e6df137Slukem         bool m_noData;
872de962bdSlukem };
882de962bdSlukem 
892de962bdSlukem #endif //LDAP_CONTROL_H
90