summaryrefslogtreecommitdiffabout
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--include/opkele/exception.h8
-rw-r--r--lib/exception.cc10
2 files changed, 16 insertions, 2 deletions
diff --git a/include/opkele/exception.h b/include/opkele/exception.h
index 2ac0661..c5f5811 100644
--- a/include/opkele/exception.h
+++ b/include/opkele/exception.h
@@ -1,127 +1,131 @@
1#ifndef __OPKELE_EXCEPTION_H 1#ifndef __OPKELE_EXCEPTION_H
2#define __OPKELE_EXCEPTION_H 2#define __OPKELE_EXCEPTION_H
3 3
4/** 4/**
5 * @file 5 * @file
6 * @brief opkele exceptions 6 * @brief opkele exceptions
7 */ 7 */
8 8
9#include <curl/curl.h> 9#include <curl/curl.h>
10 10
11#include <opkele/opkele-config.h> 11#include <opkele/opkele-config.h>
12#ifdef OPKELE_HAVE_KONFORKA 12#ifdef OPKELE_HAVE_KONFORKA
13# include <konforka/exception.h> 13# include <konforka/exception.h>
14/** 14/**
15 * the exception parameters declaration 15 * the exception parameters declaration
16 */ 16 */
17# define OPKELE_E_PARS const string& fi,const string&fu,int l,const string& w 17# define OPKELE_E_PARS const string& fi,const string&fu,int l,const string& w
18/** 18/**
19 * the exception parameters list to pass to constructor 19 * the exception parameters list to pass to constructor
20 */ 20 */
21# define OPKELE_E_CONS_ fi,fu,l, 21# define OPKELE_E_CONS_ fi,fu,l,
22/** 22/**
23 * the exception codepoint specification 23 * the exception codepoint specification
24 */ 24 */
25# define OPKELE_CP_ CODEPOINT, 25# define OPKELE_CP_ CODEPOINT,
26/** 26/**
27 * the simple rethrow of konforka-based exception 27 * the simple rethrow of konforka-based exception
28 */ 28 */
29# define OPKELE_RETHROW catch(konforka::exception& e) { e.see(CODEPOINT); throw } 29# define OPKELE_RETHROW catch(konforka::exception& e) { e.see(CODEPOINT); throw }
30#else /* OPKELE_HAVE_KONFORKA */ 30#else /* OPKELE_HAVE_KONFORKA */
31# include <stdexcept> 31# include <exception>
32# include <string>
32/** 33/**
33 * the exception parameter declaration 34 * the exception parameter declaration
34 */ 35 */
35# define OPKELE_E_PARS const string& w 36# define OPKELE_E_PARS const string& w
36/** 37/**
37 * the dummy prefix for exception parameters list to prepend in the absence of 38 * the dummy prefix for exception parameters list to prepend in the absence of
38 * konforka library 39 * konforka library
39 */ 40 */
40# define OPKELE_E_CONS_ 41# define OPKELE_E_CONS_
41/** 42/**
42 * the dummy placeholder for konforka exception codepoint specification 43 * the dummy placeholder for konforka exception codepoint specification
43 */ 44 */
44# define OPKELE_CP_ 45# define OPKELE_CP_
45/** 46/**
46 * the dummy define for the konforka-based rethrow of exception 47 * the dummy define for the konforka-based rethrow of exception
47 */ 48 */
48# define OPKELE_RETHROW 49# define OPKELE_RETHROW
49#endif /* OPKELE_HAVE_KONFORKA */ 50#endif /* OPKELE_HAVE_KONFORKA */
50/** 51/**
51 * the exception parameters list to pass to constructor 52 * the exception parameters list to pass to constructor
52 */ 53 */
53# define OPKELE_E_CONS OPKELE_E_CONS_ w 54# define OPKELE_E_CONS OPKELE_E_CONS_ w
54 55
55/* 56/*
56 * @brief the main opkele namespace 57 * @brief the main opkele namespace
57 */ 58 */
58namespace opkele { 59namespace opkele {
59 using std::string; 60 using std::string;
60 61
61 /** 62 /**
62 * the base opkele exception class 63 * the base opkele exception class
63 */ 64 */
64 class exception : public 65 class exception : public
65# ifdef OPKELE_HAVE_KONFORKA 66# ifdef OPKELE_HAVE_KONFORKA
66 konforka::exception 67 konforka::exception
67# else 68# else
68 std::exception 69 std::exception
69# endif 70# endif
70 { 71 {
71 public: 72 public:
72# ifdef OPKELE_HAVE_KONFORKA 73# ifdef OPKELE_HAVE_KONFORKA
73 explicit 74 explicit
74 exception(const string& fi,const string& fu,int l,const string& w) 75 exception(const string& fi,const string& fu,int l,const string& w)
75 : konforka::exception(fi,fu,l,w) { } 76 : konforka::exception(fi,fu,l,w) { }
76# else /* OPKELE_HAVE_KONFORKA */ 77# else /* OPKELE_HAVE_KONFORKA */
78 string _what;
77 explicit 79 explicit
78 exception(const string& w) 80 exception(const string& w)
79 : std::exception(w) { } 81 : _what(w) { }
82 virtual ~exception() throw();
83 virtual const char * what() const throw();
80# endif /* OPKELE_HAVE_KONFORKA */ 84# endif /* OPKELE_HAVE_KONFORKA */
81 }; 85 };
82 86
83 /** 87 /**
84 * thrown in case of failed conversion 88 * thrown in case of failed conversion
85 */ 89 */
86 class failed_conversion : public exception { 90 class failed_conversion : public exception {
87 public: 91 public:
88 failed_conversion(OPKELE_E_PARS) 92 failed_conversion(OPKELE_E_PARS)
89 : exception(OPKELE_E_CONS) { } 93 : exception(OPKELE_E_CONS) { }
90 }; 94 };
91 /** 95 /**
92 * thrown in case of failed lookup (either parameter or persistent store) 96 * thrown in case of failed lookup (either parameter or persistent store)
93 */ 97 */
94 class failed_lookup : public exception { 98 class failed_lookup : public exception {
95 public: 99 public:
96 failed_lookup(OPKELE_E_PARS) 100 failed_lookup(OPKELE_E_PARS)
97 : exception(OPKELE_E_CONS) { } 101 : exception(OPKELE_E_CONS) { }
98 }; 102 };
99 /** 103 /**
100 * thrown in case of bad input (either local or network) 104 * thrown in case of bad input (either local or network)
101 */ 105 */
102 class bad_input : public exception { 106 class bad_input : public exception {
103 public: 107 public:
104 bad_input(OPKELE_E_PARS) 108 bad_input(OPKELE_E_PARS)
105 : exception(OPKELE_E_CONS) { } 109 : exception(OPKELE_E_CONS) { }
106 }; 110 };
107 111
108 /** 112 /**
109 * thrown on failed assertion 113 * thrown on failed assertion
110 */ 114 */
111 class failed_assertion : public exception { 115 class failed_assertion : public exception {
112 public: 116 public:
113 failed_assertion(OPKELE_E_PARS) 117 failed_assertion(OPKELE_E_PARS)
114 : exception(OPKELE_E_CONS) { } 118 : exception(OPKELE_E_CONS) { }
115 }; 119 };
116 120
117 /** 121 /**
118 * thrown if the handle being retrieved is invalid 122 * thrown if the handle being retrieved is invalid
119 */ 123 */
120 class invalid_handle : public exception { 124 class invalid_handle : public exception {
121 public: 125 public:
122 invalid_handle(OPKELE_E_PARS) 126 invalid_handle(OPKELE_E_PARS)
123 : exception(OPKELE_E_CONS) { } 127 : exception(OPKELE_E_CONS) { }
124 }; 128 };
125 /** 129 /**
126 * thrown if the handle passed to check_authentication request is not 130 * thrown if the handle passed to check_authentication request is not
127 * stateless 131 * stateless
diff --git a/lib/exception.cc b/lib/exception.cc
index b7c1702..4fe6c87 100644
--- a/lib/exception.cc
+++ b/lib/exception.cc
@@ -1,22 +1,32 @@
1#include <openssl/err.h> 1#include <openssl/err.h>
2#include <curl/curl.h> 2#include <curl/curl.h>
3#include <opkele/exception.h> 3#include <opkele/exception.h>
4 4
5namespace opkele { 5namespace opkele {
6 6
7# ifndef OPKELE_HAVE_KONFORKA
8
9 exception::~exception() throw() {
10 }
11 const char *exception::what() const throw() {
12 return _what.c_str();
13 }
14
15# endif
16
7 exception_openssl::exception_openssl(OPKELE_E_PARS) 17 exception_openssl::exception_openssl(OPKELE_E_PARS)
8 : _error(ERR_peek_last_error()), 18 : _error(ERR_peek_last_error()),
9 _ssl_string(ERR_error_string(_error,0)), 19 _ssl_string(ERR_error_string(_error,0)),
10 exception(OPKELE_E_CONS_ w+" ["+_ssl_string+']') { 20 exception(OPKELE_E_CONS_ w+" ["+_ssl_string+']') {
11 } 21 }
12 22
13 exception_curl::exception_curl(OPKELE_E_PARS) 23 exception_curl::exception_curl(OPKELE_E_PARS)
14 : _error(CURLE_OK), 24 : _error(CURLE_OK),
15 exception_network(OPKELE_E_CONS) { } 25 exception_network(OPKELE_E_CONS) { }
16 exception_curl::exception_curl(OPKELE_E_PARS,CURLcode e) 26 exception_curl::exception_curl(OPKELE_E_PARS,CURLcode e)
17 : _error(e), 27 : _error(e),
18 _curl_string(curl_easy_strerror(e)), 28 _curl_string(curl_easy_strerror(e)),
19 exception_network(OPKELE_E_CONS_ w+" ["+_curl_string+']') { 29 exception_network(OPKELE_E_CONS_ w+" ["+_curl_string+']') {
20 } 30 }
21 31
22} 32}