summaryrefslogtreecommitdiffabout
path: root/include
Side-by-side diff
Diffstat (limited to 'include') (more/less context) (show whitespace changes)
-rw-r--r--include/Makefile.am2
-rw-r--r--include/opkele/exception.h11
-rw-r--r--include/opkele/tidy.h73
3 files changed, 85 insertions, 1 deletions
diff --git a/include/Makefile.am b/include/Makefile.am
index 1076c12..51dcea1 100644
--- a/include/Makefile.am
+++ b/include/Makefile.am
@@ -1,21 +1,21 @@
nobase_include_HEADERS = \
opkele/acconfig.h \
opkele/opkele-config.h \
opkele/types.h \
opkele/association.h \
opkele/exception.h \
opkele/server.h \
opkele/consumer.h \
opkele/extension.h \
opkele/sreg.h \
opkele/extension_chain.h \
opkele/xconsumer.h \
opkele/xserver.h \
opkele/discovery.h \
opkele/uris.h \
opkele/tr1-mem.h
EXTRA_DIST = \
opkele/data.h \
- opkele/curl.h opkele/expat.h \
+ opkele/curl.h opkele/expat.h opkele/tidy.h \
opkele/util.h \
opkele/debug.h
diff --git a/include/opkele/exception.h b/include/opkele/exception.h
index c200a13..a8c3339 100644
--- a/include/opkele/exception.h
+++ b/include/opkele/exception.h
@@ -1,305 +1,316 @@
#ifndef __OPKELE_EXCEPTION_H
#define __OPKELE_EXCEPTION_H
/**
* @file
* @brief opkele exceptions
*/
#include <curl/curl.h>
#include <opkele/opkele-config.h>
#ifdef OPKELE_HAVE_KONFORKA
# include <konforka/exception.h>
/**
* the exception parameters declaration
*/
# define OPKELE_E_PARS const string& fi,const string&fu,int l,const string& w
/**
* the exception parameters list to pass to constructor
*/
# define OPKELE_E_CONS_ fi,fu,l,
/**
* the exception codepoint specification
*/
# define OPKELE_CP_ CODEPOINT,
/**
* open function-try-block
*/
# define OPKELE_FUNC_TRY try
/**
* the simple rethrow of konforka-based exception
*/
# define OPKELE_RETHROW catch(konforka::exception& e) { e.see(CODEPOINT); throw; }
#else /* OPKELE_HAVE_KONFORKA */
# include <exception>
# include <string>
/**
* the exception parameter declaration
*/
# define OPKELE_E_PARS const string& w
/**
* the dummy prefix for exception parameters list to prepend in the absence of
* konforka library
*/
# define OPKELE_E_CONS_
/**
* the dummy placeholder for konforka exception codepoint specification
*/
# define OPKELE_CP_
/**
* the dummy define for the opening function-try-block
*/
# define OPKELE_FUNC_TRY
/**
* the dummy define for the konforka-based rethrow of exception
*/
# define OPKELE_RETHROW
#endif /* OPKELE_HAVE_KONFORKA */
/**
* the exception parameters list to pass to constructor
*/
# define OPKELE_E_CONS OPKELE_E_CONS_ w
namespace opkele {
using std::string;
/**
* the base opkele exception class
*/
class exception : public
# ifdef OPKELE_HAVE_KONFORKA
konforka::exception
# else
std::exception
# endif
{
public:
# ifdef OPKELE_HAVE_KONFORKA
explicit
exception(const string& fi,const string& fu,int l,const string& w);
# else /* OPKELE_HAVE_KONFORKA */
string _what;
explicit exception(const string& w);
virtual ~exception() throw();
virtual const char * what() const throw();
# endif /* OPKELE_HAVE_KONFORKA */
};
/**
* thrown in case of failed conversion
*/
class failed_conversion : public exception {
public:
failed_conversion(OPKELE_E_PARS)
: exception(OPKELE_E_CONS) { }
};
/**
* thrown in case of failed lookup (either parameter or persistent store)
*/
class failed_lookup : public exception {
public:
failed_lookup(OPKELE_E_PARS)
: exception(OPKELE_E_CONS) { }
};
/**
* thrown in case of bad input (either local or network)
*/
class bad_input : public exception {
public:
bad_input(OPKELE_E_PARS)
: exception(OPKELE_E_CONS) { }
};
/**
* thrown on failed assertion
*/
class failed_assertion : public exception {
public:
failed_assertion(OPKELE_E_PARS)
: exception(OPKELE_E_CONS) { }
};
/**
* thrown if the handle being retrieved is invalid
*/
class invalid_handle : public exception {
public:
invalid_handle(OPKELE_E_PARS)
: exception(OPKELE_E_CONS) { }
};
/**
* thrown if the handle passed to check_authentication request is not
* stateless
*/
class stateful_handle : public exception {
public:
stateful_handle(OPKELE_E_PARS)
: exception(OPKELE_E_CONS) { }
};
/**
* thrown if check_authentication request fails
*/
class failed_check_authentication : public exception {
public:
failed_check_authentication(OPKELE_E_PARS)
: exception(OPKELE_E_CONS) { }
};
/**
* thrown if the id_res request result is negative
*/
class id_res_failed : public exception {
public:
id_res_failed(OPKELE_E_PARS)
: exception(OPKELE_E_CONS) { }
};
/**
* thrown if the user_setup_url is provided with negative response
*/
class id_res_setup : public id_res_failed {
public:
string setup_url;
id_res_setup(OPKELE_E_PARS,const string& su="")
: id_res_failed(OPKELE_E_CONS), setup_url(su) { }
~id_res_setup() throw() { }
};
/**
* thrown in case of signature mismatch
*/
class id_res_mismatch : public id_res_failed {
public:
id_res_mismatch(OPKELE_E_PARS)
: id_res_failed(OPKELE_E_CONS) { }
};
/**
* thrown if the association has expired before it could've been verified.
*/
class id_res_expired_on_delivery : public id_res_failed {
public:
id_res_expired_on_delivery(OPKELE_E_PARS)
: id_res_failed(OPKELE_E_CONS) { }
};
/**
* thown when the user cancelled authentication process.
*/
class id_res_cancel : public id_res_failed {
public:
id_res_cancel(OPKELE_E_PARS)
: id_res_failed(OPKELE_E_CONS) { }
};
/**
* thrown in case of nonce reuse or otherwise imperfect nonce.
*/
class id_res_bad_nonce : public id_res_failed {
public:
id_res_bad_nonce(OPKELE_E_PARS)
: id_res_failed(OPKELE_E_CONS) { }
};
/**
* thrown if return_to didn't pass verification
*/
class id_res_bad_return_to : public id_res_failed {
public:
id_res_bad_return_to(OPKELE_E_PARS)
: id_res_failed(OPKELE_E_CONS) { }
};
/**
* thrown if OP isn't authorized to make an assertion
*/
class id_res_unauthorized : public id_res_failed {
public:
id_res_unauthorized(OPKELE_E_PARS)
: id_res_failed(OPKELE_E_CONS) { }
};
/**
* openssl malfunction occured
*/
class exception_openssl : public exception {
public:
unsigned long _error;
string _ssl_string;
exception_openssl(OPKELE_E_PARS);
~exception_openssl() throw() { }
};
/**
* network operation related error occured
*/
class exception_network : public exception {
public:
exception_network(OPKELE_E_PARS)
: exception(OPKELE_E_CONS) { }
};
/**
* network operation related error occured, specifically, related to
* libcurl
*/
class exception_curl : public exception_network {
public:
CURLcode _error;
string _curl_string;
exception_curl(OPKELE_E_PARS);
exception_curl(OPKELE_E_PARS,CURLcode e);
~exception_curl() throw() { }
};
/**
+ * htmltidy related error occured
+ */
+ class exception_tidy : public exception {
+ public:
+ int _rc;
+ exception_tidy(OPKELE_E_PARS);
+ exception_tidy(OPKELE_E_PARS,int r);
+ ~exception_tidy() throw() { }
+ };
+
+ /**
* exception thrown in case of failed discovery
*/
class failed_discovery : public exception {
public:
failed_discovery(OPKELE_E_PARS)
: exception(OPKELE_E_CONS) { }
};
/**
* unsuccessfull xri resolution
*/
class failed_xri_resolution : public failed_discovery {
public:
long _code;
failed_xri_resolution(OPKELE_E_PARS,long _c=-1)
: failed_discovery(OPKELE_E_CONS), _code(_c) { }
};
/**
* not implemented (think pure virtual) member function executed, signfies
* programmer error
*/
class not_implemented : public exception {
public:
not_implemented(OPKELE_E_PARS)
: exception(OPKELE_E_CONS) { }
};
/**
* internal error, indicates internal libopkele problem
*/
class internal_error : public exception {
public:
internal_error(OPKELE_E_PARS)
: exception(OPKELE_E_CONS) { }
};
/**
* thrown in case of unsupported parameter encountered (e.g. unsupported
* association type).
*/
class unsupported : public exception {
public:
unsupported(OPKELE_E_PARS)
: exception(OPKELE_E_CONS) { }
};
}
#endif /* __OPKELE_EXCEPTION_H */
diff --git a/include/opkele/tidy.h b/include/opkele/tidy.h
new file mode 100644
index 0000000..888e7d4
--- a/dev/null
+++ b/include/opkele/tidy.h
@@ -0,0 +1,73 @@
+#ifndef __OPKELE_TIDY_H
+#define __OPKELE_TIDY_H
+
+#include <cassert>
+#include <tidy.h>
+#include <buffio.h>
+
+namespace opkele {
+ namespace util {
+
+ class tidy_buf_t {
+ public:
+ TidyBuffer _x;
+
+ tidy_buf_t() { tidyBufInit(&_x); }
+ virtual ~tidy_buf_t() throw() {
+ tidyBufFree(&_x); }
+
+ inline operator const TidyBuffer&(void) const { return _x; }
+ inline operator TidyBuffer&(void) { return _x; }
+
+ inline operator const char*(void) const { return (const char*)_x.bp; }
+ inline operator char*(void) { return (char*)_x.bp; }
+
+ inline const char *c_str() const {
+ return (const char*)_x.bp; }
+ inline size_t size() const {
+ return _x.size; }
+ };
+
+ class tidy_doc_t {
+ public:
+ TidyDoc _x;
+
+ tidy_doc_t() : _x(0) { }
+ tidy_doc_t(TidyDoc x) : _x(x) { }
+ virtual ~tidy_doc_t() throw() {
+ if(_x) tidyRelease(_x); }
+
+ tidy_doc_t& operator=(TidyDoc x) {
+ if(_x) tidyRelease(_x);
+ _x = x;
+ return *this;
+ }
+
+ operator const TidyDoc(void) const { return _x; }
+ operator TidyDoc(void) { return _x; }
+
+ inline bool opt_set(TidyOptionId o,bool v) {
+ assert(_x);
+ return tidyOptSetBool(_x,o,v?yes:no); }
+ inline bool opt_set(TidyOptionId o,int v) {
+ assert(_x);
+ return tidyOptSetInt(_x,o,v); }
+
+ inline int parse_string(const string& s) {
+ assert(_x);
+ return tidyParseString(_x,s.c_str()); }
+ inline int clean_and_repair() {
+ assert(_x);
+ return tidyCleanAndRepair(_x); }
+ inline int save_buffer(TidyBuffer& ob) {
+ assert(_x);
+ return tidySaveBuffer(_x,&ob); }
+
+ static inline TidyDoc create() {
+ return tidyCreate(); }
+ };
+
+ }
+}
+
+#endif /* __OPKELE_TIDY_H */