]> git.sur5r.net Git - openldap/blob - contrib/ldapc++/src/LDAPException.cpp
Happy New Year
[openldap] / contrib / ldapc++ / src / LDAPException.cpp
1 // $OpenLDAP$
2 /*
3  * Copyright 2000-2018 The OpenLDAP Foundation, All Rights Reserved.
4  * COPYING RESTRICTIONS APPLY, see COPYRIGHT file
5  */
6
7 #include <ldap.h>
8 #include "config.h"
9 #include "LDAPException.h"
10
11 #include "LDAPAsynConnection.h"
12 #include "LDAPResult.h"
13
14 using namespace std;
15
16 LDAPException::LDAPException(int res_code, const string& err_string) throw()
17     : std::runtime_error(err_string)
18 {
19         m_res_code=res_code;
20         m_res_string=string(ldap_err2string(res_code));
21     m_err_string=err_string;
22 }
23
24 LDAPException::LDAPException(const LDAPAsynConnection *lc) throw()
25     : std::runtime_error("")
26 {
27     LDAP *l = lc->getSessionHandle();
28     ldap_get_option(l,LDAP_OPT_RESULT_CODE,&m_res_code);
29     const char *res_cstring = ldap_err2string(m_res_code);
30     if ( res_cstring ) {
31         m_res_string = string(res_cstring);
32     } else {
33         m_res_string = "";
34     }
35     const char* err_string;
36
37 #ifdef LDAP_OPT_DIAGNOSTIC_MESSAGE
38     ldap_get_option(l,LDAP_OPT_DIAGNOSTIC_MESSAGE ,&err_string);
39 #else
40     ldap_get_option(l,LDAP_OPT_ERROR_STRING,&err_string);
41 #endif
42     if ( err_string ) {
43         m_err_string = string(err_string);
44     } else {
45         m_err_string = "";
46     }
47 }
48
49 LDAPException::~LDAPException() throw()
50 {
51 }
52
53 int LDAPException::getResultCode() const throw()
54 {
55         return m_res_code;
56 }
57
58 const string& LDAPException::getResultMsg() const throw()
59 {
60         return m_res_string;
61 }
62
63 const string& LDAPException::getServerMsg() const throw()
64 {
65     return m_err_string;
66 }
67
68 const char* LDAPException::what() const throw()
69 {
70     return this->m_res_string.c_str(); 
71 }
72
73 ostream& operator << (ostream& s, LDAPException e) throw()
74 {
75         s << "Error " << e.m_res_code << ": " << e.m_res_string;
76         if (!e.m_err_string.empty()) {
77                 s << endl <<  "additional info: " << e.m_err_string ;
78         }
79         return s;
80 }
81
82
83 LDAPReferralException::LDAPReferralException(const LDAPUrlList& urls) throw() 
84         : LDAPException(LDAPResult::REFERRAL) , m_urlList(urls)
85 {
86 }
87
88 LDAPReferralException::~LDAPReferralException() throw()
89 {
90 }
91
92 const LDAPUrlList& LDAPReferralException::getUrls() throw()
93 {
94     return m_urlList;
95 }
96