blob: 4af8ded3deba047710cb8978c622d53bddae1e56 [file]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#define __STDC_WANT_LIB_EXT1__ 1
#include <log4cxx/logstring.h>
#include <log4cxx/helpers/exception.h>
#include <string.h>
#include <string>
#include <log4cxx/helpers/stringhelper.h>
#include <log4cxx/helpers/transcoder.h>
#include <apr_errno.h>
#include <apr_thread_proc.h>
using namespace LOG4CXX_NS;
using namespace LOG4CXX_NS::helpers;
Exception::Exception(const LogString& msg1)
{
LOG4CXX_ENCODE_CHAR(m, msg1);
msg = m;
}
Exception::Exception(const char* m)
{
msg = (m ? std::string(m) : std::string());
}
Exception::Exception(const Exception& src) : std::exception()
{
msg = src.msg;
}
Exception& Exception::operator=(const Exception& src)
{
msg = src.msg;
return *this;
}
const char* Exception::what() const throw()
{
return msg.c_str();
}
RuntimeException::RuntimeException(log4cxx_status_t stat)
: Exception(formatMessage(stat))
{
}
RuntimeException::RuntimeException(const LogString& msg1)
: Exception(msg1)
{
}
RuntimeException::RuntimeException(const RuntimeException& src)
: Exception(src)
{
}
RuntimeException& RuntimeException::operator=(const RuntimeException& src)
{
Exception::operator=(src);
return *this;
}
LogString RuntimeException::formatMessage(log4cxx_status_t stat)
{
LogString s(LOG4CXX_STR("RuntimeException: return code = "));
StringHelper::toString(stat, s);
return s;
}
NullPointerException::NullPointerException(const LogString& msg1)
: RuntimeException(msg1 + LOG4CXX_STR(" may not be null"))
{
}
NullPointerException::NullPointerException(const NullPointerException& src)
: RuntimeException(src)
{
}
NullPointerException& NullPointerException::operator=(const NullPointerException& src)
{
RuntimeException::operator=(src);
return *this;
}
IllegalArgumentException::IllegalArgumentException(const LogString& msg1)
: RuntimeException(msg1)
{
}
IllegalArgumentException::IllegalArgumentException(const IllegalArgumentException& src)
: RuntimeException(src)
{
}
IllegalArgumentException& IllegalArgumentException::operator=(const IllegalArgumentException& src)
{
RuntimeException::operator=(src);
return *this;
}
IOException::IOException()
: Exception(LOG4CXX_STR("IO exception"))
{
}
IOException::IOException(log4cxx_status_t stat)
: Exception(formatMessage(stat))
{
}
IOException::IOException(const LogString& type, log4cxx_status_t stat)
: Exception(makeMessage(type, stat))
{
}
#if !LOG4CXX_LOGCHAR_IS_UTF8
IOException::IOException(const char* type, log4cxx_status_t stat)
: Exception(makeMessage(type, stat).c_str())
{
}
#endif
IOException::IOException(const char* msg1)
: Exception(msg1)
{
}
IOException::IOException(const LogString& msg1)
: Exception(msg1)
{
}
IOException::IOException(const IOException& src)
: Exception(src)
{
}
IOException& IOException::operator=(const IOException& src)
{
Exception::operator=(src);
return *this;
}
LogString IOException::formatMessage(log4cxx_status_t stat)
{
return makeMessage(LOG4CXX_STR("IO Exception"), stat);
}
SubProcessFailure::SubProcessFailure(const LogString& processName, int exitCode, int exitWhy)
: Exception(makeMessage(processName, exitCode, exitWhy))
{
}
#if !LOG4CXX_LOGCHAR_IS_UTF8
SubProcessFailure::SubProcessFailure(const char* processName, int exitCode, int exitWhy)
: Exception(makeMessage(Transcoder::decode(processName), exitCode, exitWhy))
{
}
#endif
SubProcessFailure::SubProcessFailure(const SubProcessFailure& src)
: Exception(src)
{
}
SubProcessFailure& SubProcessFailure::operator=(const SubProcessFailure& src)
{
Exception::operator=(src);
return *this;
}
LogString SubProcessFailure::makeMessage(const LogString& processName, int exitCode, int exitWhy)
{
LogString msg = processName;
msg += LOG4CXX_STR(" exit code: ");
LogString codeStr;
StringHelper::toString(exitCode, codeStr);
msg += codeStr;
if (APR_PROC_SIGNAL == exitWhy || APR_PROC_SIGNAL_CORE == exitWhy)
{
msg += LOG4CXX_STR("; exited due to a signal");
}
return msg;
}
LogString Exception::makeMessage(const LogString& type, log4cxx_status_t stat)
{
LogString s = type;
char err_buff[1024] = {0};
apr_strerror(stat, err_buff, sizeof(err_buff));
if (0 == err_buff[0] || 0 == strncmp(err_buff, "APR does not understand", 23))
{
s.append(LOG4CXX_STR(": error code "));
StringHelper::toString(stat, s);
}
else
{
s.append(LOG4CXX_STR(" - "));
std::string sMsg = err_buff;
LOG4CXX_DECODE_CHAR(lsMsg, sMsg);
s.append(lsMsg);
}
return s;
}
#if !LOG4CXX_LOGCHAR_IS_UTF8
std::string Exception::makeMessage(const char* type, log4cxx_status_t stat)
{
std::string s = type;
char err_buff[1024] = {0};
apr_strerror(stat, err_buff, sizeof(err_buff));
if (0 == err_buff[0] || 0 == strncmp(err_buff, "APR does not understand", 23))
{
s.append(": error code ");
s.append(std::to_string(stat));
}
else
{
s.append(" - ");
s.append(err_buff);
}
return s;
}
#endif
MissingResourceException::MissingResourceException(const LogString& key)
: Exception(formatMessage(key))
{
}
MissingResourceException::MissingResourceException(const MissingResourceException& src)
: Exception(src)
{
}
MissingResourceException& MissingResourceException::operator=(const MissingResourceException& src)
{
Exception::operator=(src);
return *this;
}
LogString MissingResourceException::formatMessage(const LogString& key)
{
LogString s(LOG4CXX_STR("MissingResourceException: resource key = \""));
s.append(key);
s.append(LOG4CXX_STR("\"."));
return s;
}
PoolException::PoolException(log4cxx_status_t stat)
: Exception(formatMessage(stat))
{
}
PoolException::PoolException(const PoolException& src)
: Exception(src)
{
}
PoolException& PoolException::operator=(const PoolException& src)
{
Exception::operator=(src);
return *this;
}
LogString PoolException::formatMessage(log4cxx_status_t stat)
{
return makeMessage(LOG4CXX_STR("Pool exception"), stat);
}
TranscoderException::TranscoderException(log4cxx_status_t stat)
: Exception(formatMessage(stat))
{
}
TranscoderException::TranscoderException(const TranscoderException& src)
: Exception(src)
{
}
TranscoderException& TranscoderException::operator=(const TranscoderException& src)
{
Exception::operator=(src);
return *this;
}
LogString TranscoderException::formatMessage(log4cxx_status_t)
{
return LOG4CXX_STR("Transcoder exception");
}
InterruptedException::InterruptedException() : Exception(LOG4CXX_STR("Thread was interrupted"))
{
}
InterruptedException::InterruptedException(log4cxx_status_t stat)
: Exception(formatMessage(stat))
{
}
InterruptedException::InterruptedException(const InterruptedException& src)
: Exception(src)
{
}
InterruptedException& InterruptedException::operator=(const InterruptedException& src)
{
Exception::operator=(src);
return *this;
}
LogString InterruptedException::formatMessage(log4cxx_status_t stat)
{
LogString s(LOG4CXX_STR("InterruptedException: stat = "));
StringHelper::toString(stat, s);
return s;
}
ThreadException::ThreadException(log4cxx_status_t stat)
: Exception(formatMessage(stat))
{
}
ThreadException::ThreadException(const LogString& msg)
: Exception(msg)
{
}
ThreadException::ThreadException(const ThreadException& src)
: Exception(src)
{
}
ThreadException& ThreadException::operator=(const ThreadException& src)
{
Exception::operator=(src);
return *this;
}
LogString ThreadException::formatMessage(log4cxx_status_t stat)
{
return makeMessage(LOG4CXX_STR("Thread exception"), stat);
}
IllegalMonitorStateException::IllegalMonitorStateException(const LogString& msg1)
: Exception(msg1)
{
}
IllegalMonitorStateException::IllegalMonitorStateException(const IllegalMonitorStateException& src)
: Exception(src)
{
}
IllegalMonitorStateException& IllegalMonitorStateException::operator=(const IllegalMonitorStateException& src)
{
Exception::operator=(src);
return *this;
}
InstantiationException::InstantiationException(const LogString& msg1)
: Exception(msg1)
{
}
InstantiationException::InstantiationException(const InstantiationException& src)
: Exception(src)
{
}
InstantiationException& InstantiationException::operator=(const InstantiationException& src)
{
Exception::operator=(src);
return *this;
}
ClassNotFoundException::ClassNotFoundException(const LogString& className)
: Exception(formatMessage(className))
{
}
ClassNotFoundException::ClassNotFoundException(const ClassNotFoundException& src)
: Exception(src)
{
}
ClassNotFoundException& ClassNotFoundException::operator=(const ClassNotFoundException& src)
{
Exception::operator=(src);
return *this;
}
LogString ClassNotFoundException::formatMessage(const LogString& className)
{
LogString s(LOG4CXX_STR("Class not found: "));
s.append(className);
return s;
}
NoSuchElementException::NoSuchElementException()
: Exception(LOG4CXX_STR("No such element"))
{
}
NoSuchElementException::NoSuchElementException(const NoSuchElementException& src)
: Exception(src)
{
}
NoSuchElementException& NoSuchElementException::operator=(const NoSuchElementException& src)
{
Exception::operator=(src);
return *this;
}
IllegalStateException::IllegalStateException()
: Exception(LOG4CXX_STR("Illegal state"))
{
}
IllegalStateException::IllegalStateException(const IllegalStateException& src)
: Exception(src)
{
}
IllegalStateException& IllegalStateException::operator=(const IllegalStateException& src)
{
Exception::operator=(src);
return *this;
}
SocketException::SocketException(const LogString& msg) : IOException(msg)
{
}
SocketException::SocketException(log4cxx_status_t status) : IOException(status)
{
}
SocketException::SocketException(const SocketException& src)
: IOException(src)
{
}
SocketException& SocketException::operator=(const SocketException& src)
{
IOException::operator=(src);
return *this;
}
ConnectException::ConnectException(const LogString& msg) : SocketException(msg)
{
}
ConnectException::ConnectException(log4cxx_status_t status) : SocketException(status)
{
}
ConnectException::ConnectException(const ConnectException& src)
: SocketException(src)
{
}
ConnectException& ConnectException::operator=(const ConnectException& src)
{
SocketException::operator=(src);
return *this;
}
ClosedChannelException::ClosedChannelException() : SocketException(LOG4CXX_STR("Attempt to write to closed socket"))
{
}
ClosedChannelException::ClosedChannelException(const ClosedChannelException& src)
: SocketException(src)
{
}
ClosedChannelException& ClosedChannelException::operator=(const ClosedChannelException& src)
{
SocketException::operator=(src);
return *this;
}
BindException::BindException(log4cxx_status_t status) : SocketException(status)
{
}
BindException::BindException(const BindException& src)
: SocketException(src)
{
}
BindException& BindException::operator=(const BindException& src)
{
SocketException::operator=(src);
return *this;
}
InterruptedIOException::InterruptedIOException(const LogString& msg) : IOException(msg)
{
}
InterruptedIOException::InterruptedIOException(const InterruptedIOException& src)
: IOException(src)
{
}
InterruptedIOException& InterruptedIOException::operator=(const InterruptedIOException& src)
{
IOException::operator=(src);
return *this;
}
SocketTimeoutException::SocketTimeoutException()
: InterruptedIOException(LOG4CXX_STR("SocketTimeoutException"))
{
}
SocketTimeoutException::SocketTimeoutException(const SocketTimeoutException& src)
: InterruptedIOException(src)
{
}
SocketTimeoutException& SocketTimeoutException::operator=(const SocketTimeoutException& src)
{
InterruptedIOException::operator=(src);
return *this;
}