X-Git-Url: http://developer.intra2net.com/git/?p=libt2n;a=blobdiff_plain;f=src%2Ft2n_exception.hxx;h=4ca7c07fed3995b40d2842932d9541264ce6f99d;hp=c756b09b86698109e40be40472ea4f5c6770d1bb;hb=ab2a4234912fd8325e966235d592b632290413df;hpb=ac7fdc22899c0c493fda5fdb3a4cb67e77504a6b diff --git a/src/t2n_exception.hxx b/src/t2n_exception.hxx index c756b09..4ca7c07 100644 --- a/src/t2n_exception.hxx +++ b/src/t2n_exception.hxx @@ -1,34 +1,36 @@ -/*************************************************************************** - * Copyright (C) 2006 by Gerd v. Egidy * - * gve@intra2net.com * - * * - * This library is free software; you can redistribute it and/or modify * - * it under the terms of the GNU Lesser General Public License version * - * 2.1 as published by the Free Software Foundation. * - * * - * This library is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this program; if not, write to the * - * Free Software Foundation, Inc., * - * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * - ***************************************************************************/ +/* +Copyright (C) 2006 by Intra2net AG - Gerd v. Egidy + +The software in this package is distributed under the GNU General +Public License version 2 (with a special exception described below). + +A copy of GNU General Public License (GPL) is included in this distribution, +in the file COPYING.GPL. + +As a special exception, if other files instantiate templates or use macros +or inline functions from this file, or you compile this file and link it +with other works to produce a work based on this file, this file +does not by itself cause the resulting work to be covered +by the GNU General Public License. + +However the source code for this file must still be made available +in accordance with section (3) of the GNU General Public License. + +This exception does not invalidate any other reasons why a work based +on this file might be covered by the GNU General Public License. +*/ #ifndef __LIBT2N_T2N_EXCEPTION #define __LIBT2N_T2N_EXCEPTION #include #include -#include -#include +#include -// serialization for std::exception namespace boost { namespace serialization { +// make std::exception serializable template void serialize(Archive & ar, std::exception & g, const unsigned int version) { @@ -39,23 +41,21 @@ void serialize(Archive & ar, std::exception & g, const unsigned int version) namespace libt2n { - -// a generic exception that can be handeled with libt2n +/** @brief a generic exception that can be handeled with libt2n + @note don't derive the exceptions your application generates directly from this one + but use libt2n::t2n_runtime_error for this +*/ class t2n_exception : public std::exception { private: - string message; + std::string message; friend class boost::serialization::access; template - void serialize(Archive & ar, const unsigned int version) - { - ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(exception); - ar & BOOST_SERIALIZATION_NVP(message); - } + void serialize(Archive & ar, const unsigned int version); public: - t2n_exception(const string& _message) + t2n_exception(const std::string& _message) { message=_message; } t2n_exception() @@ -73,225 +73,197 @@ class t2n_exception : public std::exception virtual void do_throw() { throw *this; } }; -BOOST_CLASS_EXPORT(t2n_exception) -// a (unspecified) problem with libt2n communication +/// a (unspecified) problem with libt2n communication class t2n_communication_error : public t2n_exception { private: friend class boost::serialization::access; template - void serialize(Archive & ar, const unsigned int version) - { - ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(t2n_exception); - } + void serialize(Archive & ar, const unsigned int version); public: - t2n_communication_error(const string& _message) + t2n_communication_error(const std::string& _message) : t2n_exception(_message) { } t2n_communication_error() { } - ipc_exception* clone() const + t2n_exception* clone() const { return new t2n_communication_error(*this); } void do_throw() { throw *this; } }; -BOOST_CLASS_EXPORT(t2n_communication_error) -// can't connect to libt2n server +/// can't connect to libt2n server class t2n_connect_error : public t2n_communication_error { private: friend class boost::serialization::access; template - void serialize(Archive & ar, const unsigned int version) - { - ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(t2n_communication_error); - } + void serialize(Archive & ar, const unsigned int version); public: - t2n_connect_error(const string& _message) + t2n_connect_error(const std::string& _message) : t2n_communication_error(_message) { } t2n_connect_error() { } - ipc_exception* clone() const + t2n_exception* clone() const { return new t2n_connect_error(*this); } void do_throw() { throw *this; } }; -BOOST_CLASS_EXPORT(t2n_connect_error) -// error establishing a socket on the server (only thrown on the server-side) +/// error establishing a socket on the server (only thrown on the server-side) class t2n_server_error : public t2n_communication_error { private: friend class boost::serialization::access; template - void serialize(Archive & ar, const unsigned int version) - { - ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(t2n_communication_error); - } + void serialize(Archive & ar, const unsigned int version); public: - t2n_server_error(const string& _message) + t2n_server_error(const std::string& _message) : t2n_communication_error(_message) { } t2n_server_error() { } - ipc_exception* clone() const + t2n_exception* clone() const { return new t2n_server_error(*this); } void do_throw() { throw *this; } }; -BOOST_CLASS_EXPORT(t2n_server_error) -// error transmitting or receiving libt2n messages +/// error transmitting or receiving libt2n messages class t2n_transfer_error : public t2n_communication_error { private: friend class boost::serialization::access; template - void serialize(Archive & ar, const unsigned int version) - { - ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(t2n_communication_error); - } + void serialize(Archive & ar, const unsigned int version); public: - t2n_transfer_error(const string& _message) + t2n_transfer_error(const std::string& _message) : t2n_communication_error(_message) { } t2n_transfer_error() { } - ipc_exception* clone() const + t2n_exception* clone() const { return new t2n_transfer_error(*this); } void do_throw() { throw *this; } }; -BOOST_CLASS_EXPORT(t2n_transfer_error) -// tried to talk to an incompatible libt2n version +/// tried to talk to an incompatible libt2n version class t2n_version_mismatch : public t2n_communication_error { private: friend class boost::serialization::access; template - void serialize(Archive & ar, const unsigned int version) - { - ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(t2n_communication_error); - } + void serialize(Archive & ar, const unsigned int version); public: - t2n_version_mismatch(const string& _message) + t2n_version_mismatch(const std::string& _message) : t2n_communication_error(_message) { } t2n_version_mismatch() { } - ipc_exception* clone() const + t2n_exception* clone() const { return new t2n_version_mismatch(*this); } void do_throw() { throw *this; } }; -BOOST_CLASS_EXPORT(t2n_version_mismatch) -// illegal libt2n command received +/// illegal libt2n command received class t2n_command_error : public t2n_exception { private: friend class boost::serialization::access; template - void serialize(Archive & ar, const unsigned int version) - { - ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(t2n_exception); - } + void serialize(Archive & ar, const unsigned int version); public: - t2n_command_error(const string& _message) + t2n_command_error(const std::string& _message) : t2n_exception(_message) { } t2n_command_error() { } - ipc_exception* clone() const + t2n_exception* clone() const { return new t2n_command_error(*this); } void do_throw() { throw *this; } }; -BOOST_CLASS_EXPORT(t2n_command_error) -// error serializing or deserializing a libt2n command packet +/// error serializing or deserializing a libt2n command packet class t2n_serialization_error : public t2n_exception { private: friend class boost::serialization::access; template - void serialize(Archive & ar, const unsigned int version) - { - ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(t2n_exception); - } + void serialize(Archive & ar, const unsigned int version); public: - t2n_serialization_error(const string& _message) + t2n_serialization_error(const std::string& _message) : t2n_exception(_message) { } t2n_serialization_error() { } - ipc_exception* clone() const + t2n_exception* clone() const { return new t2n_serialization_error(*this); } void do_throw() { throw *this; } }; -BOOST_CLASS_EXPORT(t2n_serialization_error) -// a runtime error within the remote function -// derive your own custom exceptions from this one +/** @brief a runtime error within the remote function. + derive your own custom exceptions from this one + + @note you must override the virtual clone method if you do so (used by libt2n::command_server::handle()) +*/ class t2n_runtime_error : public t2n_exception { private: friend class boost::serialization::access; template - void serialize(Archive & ar, const unsigned int version) - { - ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(t2n_exception); - } + void serialize(Archive & ar, const unsigned int version); public: - t2n_runtime_error(const string& _message) + t2n_runtime_error(const std::string& _message) : t2n_exception(_message) { } t2n_runtime_error() { } - ipc_exception* clone() const + t2n_exception* clone() const { return new t2n_runtime_error(*this); } void do_throw() { throw *this; } }; -BOOST_CLASS_EXPORT(t2n_runtime_error) -} +} // namespace libt2n + +#include "t2n_exception.tcc" #endif