From: Jérémie Galarneau Date: Thu, 12 May 2022 18:27:06 +0000 (-0400) Subject: Add new exception types: communication, protocol, and invalid argument X-Git-Url: https://git.liburcu.org/?p=lttng-tools.git;a=commitdiff_plain;h=baac5795bc71176909898f7fcbf59dc822f11f4f Add new exception types: communication, protocol, and invalid argument These new exception types are useful to expess communication errors and are used in later patches when an application doesn't honor the liblttng-ust-ctl protocol. Signed-off-by: Jérémie Galarneau Change-Id: If5cd92c2f2fc31c6e68d49ade9e66f16e50394a3 --- diff --git a/src/common/exception.cpp b/src/common/exception.cpp index cc0011405..241686eaf 100644 --- a/src/common/exception.cpp +++ b/src/common/exception.cpp @@ -11,7 +11,7 @@ namespace { std::string format_throw_location( - const char *file_name, const char *function_name, unsigned int line_number) + const char *file_name, const char *function_name, unsigned int line_number) { std::stringstream location; @@ -20,32 +20,55 @@ std::string format_throw_location( return location.str(); } -} // namespace +} /* namespace */ lttng::ctl::error::error(lttng_error_code error_code, - const char *file_name, - const char *function_name, - unsigned int line_number) : - std::runtime_error(std::string(error_get_str(error_code)) + " " + - format_throw_location(file_name, function_name, line_number)) + const char *file_name, + const char *function_name, + unsigned int line_number) : + runtime_error(std::string(error_get_str(error_code)), file_name, function_name, line_number) { } -lttng::posix_error::posix_error(const std::string &msg, - int errno_code, - const char *file_name, - const char *function_name, - unsigned int line_number) : +lttng::posix_error::posix_error(const std::string& msg, + int errno_code, + const char *file_name, + const char *function_name, + unsigned int line_number) : std::system_error(errno_code, - std::generic_category(), - msg + " " + format_throw_location(file_name, function_name, line_number)) + std::generic_category(), + msg + " " + format_throw_location(file_name, function_name, line_number)) { } -lttng::runtime_error::runtime_error(const std::string &msg, - const char *file_name, - const char *function_name, - unsigned int line_number) : +lttng::runtime_error::runtime_error(const std::string& msg, + const char *file_name, + const char *function_name, + unsigned int line_number) : std::runtime_error(msg + " " + format_throw_location(file_name, function_name, line_number)) { } + +lttng::communication_error::communication_error(const std::string& msg, + const char *file_name, + const char *function_name, + unsigned int line_number) : + runtime_error(msg, file_name, function_name, line_number) +{ +} + +lttng::protocol_error::protocol_error(const std::string& msg, + const char *file_name, + const char *function_name, + unsigned int line_number) : + communication_error(msg, file_name, function_name, line_number) +{ +} + +lttng::invalid_argument_error::invalid_argument_error(const std::string& msg, + const char *file_name, + const char *function_name, + unsigned int line_number) : + runtime_error(msg, file_name, function_name, line_number) +{ +} diff --git a/src/common/exception.hpp b/src/common/exception.hpp index b22379915..b7e8261ed 100644 --- a/src/common/exception.hpp +++ b/src/common/exception.hpp @@ -20,17 +20,30 @@ throw lttng::posix_error(msg, errno_code, __FILE__, __func__, __LINE__) #define LTTNG_THROW_ERROR(msg) \ throw lttng::runtime_error(msg, __FILE__, __func__, __LINE__) +#define LTTNG_THROW_COMMUNICATION_ERROR(msg) \ + throw lttng::communication_error(msg, __FILE__, __func__, __LINE__) +#define LTTNG_THROW_PROTOCOL_ERROR(msg) \ + throw lttng::protocol_error(msg, __FILE__, __func__, __LINE__) +#define LTTNG_THROW_INVALID_ARGUMENT_ERROR(msg) \ + throw lttng::invalid_argument_error(msg, __FILE__, __func__, __LINE__) namespace lttng { +class runtime_error : public std::runtime_error { +public: + explicit runtime_error(const std::string& msg, + const char *file_name, + const char *function_name, + unsigned int line_number); +}; namespace ctl { /* Wrap lttng_error_code errors which may be reported through liblttng-ctl's interface. */ -class error : public std::runtime_error { +class error : public runtime_error { public: explicit error(lttng_error_code error_code, - const char *file_name, - const char *function_name, - unsigned int line_number); + const char *file_name, + const char *function_name, + unsigned int line_number); lttng_error_code get_code() const; private: @@ -40,19 +53,35 @@ private: class posix_error : public std::system_error { public: - explicit posix_error(const std::string &msg, - int errno_code, - const char *file_name, - const char *function_name, - unsigned int line_number); + explicit posix_error(const std::string& msg, + int errno_code, + const char *file_name, + const char *function_name, + unsigned int line_number); }; -class runtime_error : public std::runtime_error { +class communication_error : public runtime_error { +public: + explicit communication_error(const std::string& msg, + const char *file_name, + const char *function_name, + unsigned int line_number); +}; + +class protocol_error : public communication_error { +public: + explicit protocol_error(const std::string& msg, + const char *file_name, + const char *function_name, + unsigned int line_number); +}; + +class invalid_argument_error : public runtime_error { public: - explicit runtime_error(const std::string &msg, - const char *file_name, - const char *function_name, - unsigned int line_number); + explicit invalid_argument_error(const std::string& msg, + const char *file_name, + const char *function_name, + unsigned int line_number); }; }; /* namespace lttng */