summaryrefslogtreecommitdiffabout
authorMichael Krelin <hacker@klever.net>2008-01-05 21:43:51 (UTC)
committer Michael Krelin <hacker@klever.net>2008-01-05 22:03:55 (UTC)
commita0719fb611507d8b9962b87c600855d8837fc266 (patch) (side-by-side diff)
treec4d2252f876dfdaf71f41affc5a2324762eca84e
parent7bde7f66284b47a75bbceadc360e7f03550ace21 (diff)
downloadlibopkele-a0719fb611507d8b9962b87c600855d8837fc266.zip
libopkele-a0719fb611507d8b9962b87c600855d8837fc266.tar.gz
libopkele-a0719fb611507d8b9962b87c600855d8837fc266.tar.bz2
added htmltidy dependency
- added libtidy detection to configure - added tidy flags to libopkele.pc.in - added primitive wrapper classes - added tidy exception class Signed-off-by: Michael Krelin <hacker@klever.net>
Diffstat (more/less context) (show whitespace changes)
-rw-r--r--configure.ac13
-rw-r--r--include/Makefile.am2
-rw-r--r--include/opkele/exception.h11
-rw-r--r--include/opkele/tidy.h73
-rw-r--r--lib/exception.cc6
-rw-r--r--libopkele.pc.in4
6 files changed, 106 insertions, 3 deletions
diff --git a/configure.ac b/configure.ac
index 51bacd5..5772ead 100644
--- a/configure.ac
+++ b/configure.ac
@@ -69,96 +69,109 @@ WANT_KONFORKA="yes"
AC_ARG_ENABLE([konforka],
AC_HELP_STRING([--disable-konforka],[do not use konforka library (default: use if found)]),
[
test "${enableval}" = "no" && WANT_KONFORKA="no"
]
)
if test "${WANT_KONFORKA}" = "yes" ; then
PKG_CHECK_MODULES([KONFORKA],[konforka],[
AC_SUBST([KONFORKA_CFLAGS])
AC_SUBST([KONFORKA_LIBS])
AC_DEFINE([HAVE_KONFORKA],,[defined in presence of konforka library])
AC_DEFINE([OPKELE_HAVE_KONFORKA],,[defined in presence of konforka library])
AC_SUBST([KONFORKA_KONFORKA],[konforka])
],[true])
fi
WANT_DOXYGEN="yes"
AC_ARG_ENABLE([doxygen],
AC_HELP_STRING([--disable-doxygen],[do not generate documentation]),
[
test "${enableval}" = "no" && WANT_DOXYGEN="no"
]
)
if test "${WANT_DOXYGEN}" = "yes" ; then
AC_WITH_DOXYGEN
AC_WITH_DOT
else
AM_CONDITIONAL([HAVE_DOXYGEN],[false])
AM_CONDITIONAL([HAVE_DOT],[false])
fi
LIBCURL_CHECK_CONFIG(,,,[
AC_MSG_ERROR([no required libcurl library. get one from http://curl.haxx.se/])
])
AC_CHECK_HEADER([expat.h],[
AC_CHECK_LIB([expat],[XML_ParserCreate],[
EXPAT_LIBS=-lexpat
EXPAT_CFLAGS=
AC_SUBST([EXPAT_LIBS])
AC_SUBST([EXPAT_CFLAGS])
],[
AC_MSG_ERROR([no required expat library. get one from http://expat.sourceforge.net/])
])
],[
AC_MSG_ERROR([no required expat library. get one from http://expat.sourceforge.net/])
])
+AC_CHECK_HEADER([tidy.h],[
+ AC_CHECK_LIB([tidy],[tidyParseBuffer],[
+ TIDY_LIBS=-ltidy
+ TIDY_CFLAGS=
+ AC_SUBST([TIDY_LIBS])
+ AC_SUBST([TIDY_CFLAGS])
+ ],[
+ AC_MSG_ERROR([no required htmltidy library found. get one from http://tidy.sourceforge.nt/])
+ ])
+],[
+ AC_MSG_ERROR([no required htmltidy library found. get one from http://tidy.sourceforge.nt/])
+])
+
if test -n "$PCRE_LIBS" -a -n "$PCRE_CFLAGS" ; then
AC_SUBST([PCRE_CFLAGS])
AC_SUBST([PCRE_LIBS])
:
else
PKG_CHECK_MODULES([PCRE],[libpcre],,[
AC_MSG_ERROR([no libpcre found, go get it at http://www.pcre.org/])
])
fi
curl_ssl_verify_host="true"
AC_ARG_ENABLE([ssl-verify-host],
AC_HELP_STRING([--disable-ssl-verify-host],[disable cURL cert/host relationships verification]),
[ test "${enableval}" = "no" && curl_ssl_verify_host="false" ]
)
${curl_ssl_verify_host} || AC_DEFINE([DISABLE_CURL_SSL_VERIFYHOST],,[defined if cURL is not to verify cert/host])
curl_ssl_verify_peer="true"
AC_ARG_ENABLE([ssl-verify-peer],
AC_HELP_STRING([--disable-ssl-verify-peer],[disable cURL cert validity verification]),
[ test "${enableval}" = "no" && curl_ssl_verify_peer="false" ]
)
${curl_ssl_verify_peer} || AC_DEFINE([DISABLE_CURL_SSL_VERIFYPEER],,[defined if cURL is not to verify cert validity])
postels_law=true
AC_ARG_ENABLE([postels-law],
AC_HELP_STRING([--disable-postels-law],[Be strict, do not adhere to Postel's Law ("be conservative in what you do, be liberal in what you accept from others", RFC 793)]),
[ test "${enableval}" = "no" && postels_law=false ]
)
$postels_law && AC_DEFINE([POSTELS_LAW],,[defined if we want to adhere to Postel's Law])
AC_DEFINE_UNQUOTED([OPKELE_SRC_DIR],["$PWD"],[source directory])
nitpick=false
AC_ARG_ENABLE([nitpicking],
AC_HELP_STRING([--enable-nitpicking],[make compiler somewhat overly fastidious about the code it deals with]),
[ test "$enableval" = "no" || nitpick=true ]
)
if $nitpick ; then
CPP_NITPICK="-pedantic -Wall -Wextra -Wundef -Wshadow \
-Wunsafe-loop-optimizations -Wconversion -Wmissing-format-attribute \
-Wredundant-decls -ansi"
# -Wlogical-op -Wmissing-noreturn
C_NITPICK="$CPP_NITPICK"
CXX_NITPICK="$C_NITPICK"
CPPFLAGS="$CPPFLAGS $CPP_NITPICK"
CFLAGS="$CFLAGS $C_NITPICK"
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
@@ -208,96 +208,107 @@ namespace opkele {
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) { }
};
}
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 */
diff --git a/lib/exception.cc b/lib/exception.cc
index 0b775f7..e32594b 100644
--- a/lib/exception.cc
+++ b/lib/exception.cc
@@ -1,45 +1,51 @@
#include <openssl/err.h>
#include <curl/curl.h>
#include <opkele/exception.h>
#include <opkele/debug.h>
namespace opkele {
# ifndef OPKELE_HAVE_KONFORKA
exception::exception(const string& w)
: _what(w)
{
DOUT_("throwing exception(\""<<w<<"\")");
}
exception::~exception() throw() {
}
const char *exception::what() const throw() {
return _what.c_str();
}
# else
exception::exception(const string& fi,const string& fu,int l,const string& w)
: konforka::exception(fi,fu,l,w)
{
DOUT_("throwing exception(\""<<w<<"\")");
DOUT_(" from "<<fi<<':'<<fu<<':'<<l);
}
# endif
exception_openssl::exception_openssl(OPKELE_E_PARS)
: exception(OPKELE_E_CONS_ w+" ["+ERR_error_string(ERR_peek_last_error(),0)+']'),
_error(ERR_peek_last_error()),
_ssl_string(ERR_error_string(_error,0)) {
}
exception_curl::exception_curl(OPKELE_E_PARS)
: exception_network(OPKELE_E_CONS), _error(CURLE_OK) { }
exception_curl::exception_curl(OPKELE_E_PARS,CURLcode e)
: exception_network(OPKELE_E_CONS_ w+" ["+curl_easy_strerror(e)+']'),
_error(e), _curl_string(curl_easy_strerror(e)) { }
+ exception_tidy::exception_tidy(OPKELE_E_PARS)
+ : exception(OPKELE_E_CONS), _rc(0) { }
+ exception_tidy::exception_tidy(OPKELE_E_PARS,int r)
+ : exception(OPKELE_E_CONS),
+ _rc(r) { }
+
}
diff --git a/libopkele.pc.in b/libopkele.pc.in
index 0a95e96..011f2fe 100644
--- a/libopkele.pc.in
+++ b/libopkele.pc.in
@@ -1,11 +1,11 @@
prefix=@prefix@
exec_prefix=@exec_prefix@
libdir=@libdir@
includedir=@includedir@
Name: libopkele
Description: C++ implementation of OpenID protocol
Version: @VERSION@
Requires: openssl libpcre @KONFORKA_KONFORKA@
-Cflags: -I${includedir} @LIBCURL_CPPFLAGS@ @PCRE_CFLAGS@ @EXPAT_CFLAGS@
-Libs: -L${libdir} -lopkele @LIBCURL@ @PCRE_LIBS@ @EXPAT_LIBS@
+Cflags: -I${includedir} @LIBCURL_CPPFLAGS@ @PCRE_CFLAGS@ @EXPAT_CFLAGS@ @TIDY_CFLAGS@
+Libs: -L${libdir} -lopkele @LIBCURL@ @PCRE_LIBS@ @EXPAT_LIBS@ @TIDY_LIBS@