]> git.sur5r.net Git - openldap/blob - contrib/ldapc++/src/LDAPAddRequest.cpp
Added ldif_countlines()
[openldap] / contrib / ldapc++ / src / LDAPAddRequest.cpp
1 /*
2  * Copyright 2000, OpenLDAP Foundation, All Rights Reserved.
3  * COPYING RESTRICTIONS APPLY, see COPYRIGHT file
4  */
5
6
7 #include <ldap.h>
8
9 #include "debug.h"
10
11 #include "LDAPAddRequest.h"
12 #include "LDAPEntry.h"
13 #include "LDAPException.h"
14 #include "LDAPMessageQueue.h"
15 #include "LDAPResult.h"
16
17 using namespace std;
18
19 LDAPAddRequest::LDAPAddRequest(const LDAPAddRequest& req) :
20         LDAPRequest(req){
21     DEBUG(LDAP_DEBUG_CONSTRUCT, "LDAPAddRequest::LDAPAddRequest(&)" << endl);
22     m_entry=new LDAPEntry(*(req.m_entry));
23 }
24
25 LDAPAddRequest::LDAPAddRequest(const LDAPEntry* entry, 
26         LDAPAsynConnection *connect, const LDAPConstraints *cons,
27         bool isReferral, const LDAPRequest* parent) 
28         : LDAPRequest(connect, cons, isReferral,parent){
29     DEBUG(LDAP_DEBUG_CONSTRUCT, "LDAPAddRequest::LDAPAddRequest()" << endl);
30     DEBUG(LDAP_DEBUG_CONSTRUCT | LDAP_DEBUG_PARAMETER, 
31             "   entry:" << entry << endl 
32             << "   isReferral:" << isReferral << endl);
33     m_requestType = LDAPRequest::ADD;
34     m_entry = new LDAPEntry(*entry);
35 }
36
37 LDAPAddRequest::~LDAPAddRequest(){
38     DEBUG(LDAP_DEBUG_DESTROY, "LDAPAddRequest::~LDAPAddRequest()" << endl);
39     delete m_entry;
40 }
41
42 LDAPMessageQueue* LDAPAddRequest::sendRequest(){
43     DEBUG(LDAP_DEBUG_TRACE, "LDAPAddRequest::sendRequest()" << endl);
44     int msgID=0;
45     const LDAPAttributeList* list=m_entry->getAttributes();
46     LDAPMod** attrs=list->toLDAPModArray();
47     LDAPControl** tmpSrvCtrls = m_cons->getSrvCtrlsArray();
48     LDAPControl** tmpClCtrls = m_cons->getClCtrlsArray();
49     int err=ldap_add_ext(m_connection->getSessionHandle(),
50             m_entry->getDN().c_str(),attrs,tmpSrvCtrls,tmpClCtrls,&msgID);
51     LDAPControlSet::freeLDAPControlArray(tmpSrvCtrls);
52     LDAPControlSet::freeLDAPControlArray(tmpClCtrls);
53     ldap_mods_free(attrs,1);
54     if(err != LDAP_SUCCESS){
55         throw LDAPException(err);
56     }else{
57         m_msgID=msgID;
58         return new LDAPMessageQueue(this);
59     }
60 }
61
62 LDAPRequest* LDAPAddRequest::followReferral(LDAPMsg* ref){
63     DEBUG(LDAP_DEBUG_TRACE, "LDAPAddRequest::followReferral()"<< endl);
64     LDAPUrlList::const_iterator usedUrl;
65     LDAPUrlList urls = ((LDAPResult*)ref)->getReferralUrls();
66     LDAPAsynConnection* con = 0;
67     try {
68         con = getConnection()->referralConnect(urls,usedUrl,m_cons);
69     } catch(LDAPException e){
70         delete con;
71         return 0;
72     }
73     if(con != 0){
74         return new LDAPAddRequest(m_entry, con, m_cons,true,this);
75     }
76     return 0;
77 }
78