Author: carnold
Date: Tue Dec 4 18:48:12 2007
New Revision: 601193
URL: http://svn.apache.org/viewvc?rev=601193&view=rev
Log:
LOGCXX-1: Unicode changes for SMTPAppender
Modified:
logging/log4cxx/trunk/src/main/cpp/smtpappender.cpp
logging/log4cxx/trunk/src/main/include/log4cxx/net/smtpappender.h
Modified: logging/log4cxx/trunk/src/main/cpp/smtpappender.cpp
URL:
http://svn.apache.org/viewvc/logging/log4cxx/trunk/src/main/cpp/smtpappender.cpp?rev=601193&r1=601192&r2=601193&view=diff
==============================================================================
--- logging/log4cxx/trunk/src/main/cpp/smtpappender.cpp (original)
+++ logging/log4cxx/trunk/src/main/cpp/smtpappender.cpp Tue Dec 4 18:48:12 2007
@@ -25,6 +25,8 @@
#include <log4cxx/spi/loggingevent.h>
#include <log4cxx/helpers/stringhelper.h>
#include <log4cxx/helpers/stringtokenizer.h>
+#include <log4cxx/helpers/transcoder.h>
+#include <log4cxx/helpers/synchronized.h>
#include <libsmtp.h>
#include <libsmtp_mime.h>
@@ -37,6 +39,9 @@
IMPLEMENT_LOG4CXX_OBJECT(DefaultEvaluator)
IMPLEMENT_LOG4CXX_OBJECT(SMTPAppender)
+DefaultEvaluator::DefaultEvaluator() {
+}
+
bool DefaultEvaluator::isTriggeringEvent(const spi::LoggingEventPtr& event)
{
return event->getLevel()->isGreaterOrEqual(Level::getError());
@@ -45,7 +50,7 @@
SMTPAppender::SMTPAppender()
: bufferSize(512), locationInfo(false), cb(bufferSize),
evaluator(new DefaultEvaluator()), session(0),
-encoding(_T("7bit")), charset(_T("us-ascii"))
+encoding(LOG4CXX_STR("7bit")), charset(LOG4CXX_STR("us-ascii"))
{
}
@@ -55,7 +60,7 @@
SMTPAppender::SMTPAppender(spi::TriggeringEventEvaluatorPtr evaluator)
: bufferSize(512), locationInfo(false), cb(bufferSize),
evaluator(evaluator), session(0),
-encoding(_T("7bit")), charset(_T("us-ascii"))
+encoding(LOG4CXX_STR("7bit")), charset(LOG4CXX_STR("us-ascii"))
{
}
@@ -64,38 +69,38 @@
finalize();
}
-void SMTPAppender::setOption(const String& option,
- const String& value)
+void SMTPAppender::setOption(const LogString& option,
+ const LogString& value)
{
- if (StringHelper::equalsIgnoreCase(option, _T("buffersize")))
+ if (StringHelper::equalsIgnoreCase(option, LOG4CXX_STR("BUFFERSIZE"),
LOG4CXX_STR("buffersize")))
{
setBufferSize(OptionConverter::toInt(value, 512));
}
- else if (StringHelper::equalsIgnoreCase(option, _T("evaluatorclass")))
+ else if (StringHelper::equalsIgnoreCase(option,
LOG4CXX_STR("EVALUATORCLASS"), LOG4CXX_STR("evaluatorclass")))
{
setEvaluatorClass(value);
}
- else if (StringHelper::equalsIgnoreCase(option, _T("from")))
+ else if (StringHelper::equalsIgnoreCase(option, LOG4CXX_STR("FROM"),
LOG4CXX_STR("from")))
{
setFrom(value);
}
- else if (StringHelper::equalsIgnoreCase(option, _T("smtphost")))
+ else if (StringHelper::equalsIgnoreCase(option, LOG4CXX_STR("SMTPHOST"),
LOG4CXX_STR("smtphost")))
{
setSMTPHost(value);
}
- else if (StringHelper::equalsIgnoreCase(option, _T("subject")))
+ else if (StringHelper::equalsIgnoreCase(option, LOG4CXX_STR("SUBJECT"),
LOG4CXX_STR("subject")))
{
setSubject(value);
}
- else if (StringHelper::equalsIgnoreCase(option, _T("to")))
+ else if (StringHelper::equalsIgnoreCase(option, LOG4CXX_STR("TO"),
LOG4CXX_STR("to")))
{
setTo(value);
}
- else if (StringHelper::equalsIgnoreCase(option, _T("charset")))
+ else if (StringHelper::equalsIgnoreCase(option, LOG4CXX_STR("CHARSET"),
LOG4CXX_STR("charset")))
{
setCharset(value);
}
- else if (StringHelper::equalsIgnoreCase(option, _T("encoding")))
+ else if (StringHelper::equalsIgnoreCase(option, LOG4CXX_STR("ENCODING"),
LOG4CXX_STR("encoding")))
{
setEncoding(value);
}
@@ -108,34 +113,33 @@
/**
Activate the specified options, such as the smtp host, the
recipient, from, etc. */
-void SMTPAppender::activateOptions()
+void SMTPAppender::activateOptions(Pool& p)
{
- USES_CONVERSION;
-
session = ::libsmtp_session_initialize();
if (session == 0)
{
- LogLog::error(_T("Could not intialize session."));
+ LogLog::error(LOG4CXX_STR("Could not intialize session."));
return;
}
- char * ansiFrom = T2A((TCHAR *)from.c_str());
- char * ansiSubject = T2A((TCHAR *)subject.c_str());
+ LOG4CXX_ENCODE_CHAR(ansiFrom, from);
+ LOG4CXX_ENCODE_CHAR(ansiSubject, subject);
::libsmtp_set_environment(
- ansiFrom,
- ansiSubject,
+ const_cast<char*>(ansiFrom.c_str()),
+ const_cast<char*>(ansiSubject.c_str()),
0,
(libsmtp_session_struct *)session);
- std::vector<String> recipients = parseAddress(to);
- std::vector<String>::iterator i;
+ std::vector<LogString> recipients = parseAddress(to);
+ std::vector<LogString>::iterator i;
for (i = recipients.begin(); i != recipients.end(); i++)
{
+ LOG4CXX_ENCODE_CHAR(ansiTo, *i);
if (::libsmtp_add_recipient(LIBSMTP_REC_TO,
- (TCHAR *)T2A(i->c_str()),
+ const_cast<char*>(ansiTo.c_str()),
(libsmtp_session_struct *)session) != 0)
{
- LogLog::error(_T("Could not add recipient ")+*i+_T("."));
+ LogLog::error(LOG4CXX_STR("Could not add recipient ")+ *i +
LOG4CXX_STR("."));
return;
}
}
@@ -144,68 +148,68 @@
if (layout != 0)
{
int mimeType = 0;
- String contentType = layout->getContentType();
- if (contentType == _T("text/plain"))
+ LogString contentType(layout->getContentType());
+ if (contentType == LOG4CXX_STR("text/plain"))
{
mimeType = LIBSMTP_MIME_SUB_PLAIN;
}
- else if (contentType == _T("text/html"))
+ else if (contentType == LOG4CXX_STR("text/html"))
{
mimeType = LIBSMTP_MIME_SUB_HTML;
}
else
{
- LogLog::error(_T("invalid layout content type:
")+contentType+_T("."));
+ LogLog::error(LOG4CXX_STR("invalid layout content type:
")+contentType+LOG4CXX_STR("."));
return;
}
int charset = 0;
- if (this->charset == _T("us-ascii"))
+ if (this->charset == LOG4CXX_STR("us-ascii"))
{
charset = LIBSMTP_CHARSET_USASCII;
}
- else if (this->charset == _T("iso8859_1"))
+ else if (this->charset == LOG4CXX_STR("iso8859_1"))
{
charset = LIBSMTP_CHARSET_ISO8859_1;
}
- else if (this->charset == _T("iso8859_2"))
+ else if (this->charset == LOG4CXX_STR("iso8859_2"))
{
charset = LIBSMTP_CHARSET_ISO8859_2;
}
- else if (this->charset == _T("iso8859_3"))
+ else if (this->charset == LOG4CXX_STR("iso8859_3"))
{
charset = LIBSMTP_CHARSET_ISO8859_3;
}
else
{
- LogLog::error(_T("invalid charset: ")+this->charset+_T("."));
+ LogLog::error(LOG4CXX_STR("invalid charset:
")+this->charset+LOG4CXX_STR("."));
return;
}
int encoding = 0;
- if (this->encoding == _T("7bit"))
+ if (this->encoding == LOG4CXX_STR("7bit"))
{
encoding = LIBSMTP_ENC_7BIT;
}
- else if (this->encoding == _T("8bit"))
+ else if (this->encoding == LOG4CXX_STR("8bit"))
{
encoding = LIBSMTP_ENC_8BIT;
}
- else if (this->encoding == _T("binary"))
+ else if (this->encoding == LOG4CXX_STR("binary"))
{
encoding = LIBSMTP_ENC_BINARY;
}
- else if (this->encoding == _T("base64"))
+ else if (this->encoding == LOG4CXX_STR("base64"))
{
encoding = LIBSMTP_ENC_BASE64;
}
- else if (this->encoding == _T("quoted"))
+ else if (this->encoding == LOG4CXX_STR("quoted"))
{
encoding = LIBSMTP_ENC_QUOTED;
}
else
{
- LogLog::error(_T("invalid encoding: ")+this->encoding+_T("."));
+ LogLog::error(LOG4CXX_STR("invalid encoding:
")+this->encoding+LOG4CXX_STR("."));
return;
}
@@ -220,12 +224,12 @@
(libsmtp_session_struct *)session);
if (part == 0)
{
- LogLog::error(_T("Error adding part."));
+ LogLog::error(LOG4CXX_STR("Error adding part."));
}
}
else
{
- LogLog::error(_T("Layout not set !"));
+ LogLog::error(LOG4CXX_STR("Layout not set !"));
}
}
@@ -233,7 +237,7 @@
Perform SMTPAppender specific appending actions, mainly adding
the event to a cyclic buffer and checking if the event triggers
an e-mail to be sent. */
-void SMTPAppender::append(const spi::LoggingEventPtr& event)
+void SMTPAppender::append(const spi::LoggingEventPtr& event, Pool& p)
{
if(!checkEntryConditions())
{
@@ -251,7 +255,7 @@
if(evaluator->isTriggeringEvent(event))
{
- sendBuffer();
+ sendBuffer(p);
}
}
@@ -264,21 +268,21 @@
{
if(to.empty() || from.empty() || subject.empty() || smtpHost.empty())
{
- errorHandler->error(_T("Message not configured."));
+ errorHandler->error(LOG4CXX_STR("Message not configured."));
return false;
}
if(evaluator == 0)
{
- errorHandler->error(_T("No TriggeringEventEvaluator is set for appender
[")+
- name+_T("]."));
+ errorHandler->error(LOG4CXX_STR("No TriggeringEventEvaluator is set for
appender [")+
+ name+ LOG4CXX_STR("]."));
return false;
}
if(layout == 0)
{
- errorHandler->error(_T("No layout set for appender named
[")+name+_T("]."));
+ errorHandler->error(LOG4CXX_STR("No layout set for appender named
[")+name+LOG4CXX_STR("]."));
return false;
}
return true;
@@ -296,11 +300,11 @@
this->closed = true;
}
-std::vector<String> SMTPAppender::parseAddress(const String& addressStr)
+std::vector<LogString> SMTPAppender::parseAddress(const LogString& addressStr)
{
- std::vector<String> addresses;
+ std::vector<LogString> addresses;
- StringTokenizer st(addressStr, _T(","));
+ StringTokenizer st(addressStr, LOG4CXX_STR(","));
while (st.hasMoreTokens())
{
addresses.push_back(st.nextToken());
@@ -312,93 +316,95 @@
/**
Send the contents of the cyclic buffer as an e-mail message.
*/
-void SMTPAppender::sendBuffer()
+void SMTPAppender::sendBuffer(Pool& p)
{
// Note: this code already owns the monitor for this
// appender. This frees us from needing to synchronize on 'cb'.
try
{
- StringBuffer sbuf;
- layout->appendHeader(sbuf);
+ LogString sbuf;
+ layout->appendHeader(sbuf, p);
int len = cb.length();
for(int i = 0; i < len; i++)
{
//sbuf.append(MimeUtility.encodeText(layout.format(cb.get())));
LoggingEventPtr event = cb.get();
- layout->format(sbuf, event);
+ layout->format(sbuf, event, p);
}
- layout->appendFooter(sbuf);
+ layout->appendFooter(sbuf, p);
+
+ LOG4CXX_ENCODE_CHAR(aSmtpHost, smtpHost);
/* This starts the SMTP connection */
if (::libsmtp_connect(
- T2A((TCHAR *)smtpHost.c_str()),
+ const_cast<char*>(aSmtpHost.c_str()),
0,
0,
(libsmtp_session_struct *)session) != 0)
{
- LogLog::error(_T("Error occured while starting the SMTP
connection."));
+ LogLog::error(LOG4CXX_STR("Error occured while starting the SMTP
connection."));
return;
}
/* This will conduct the SMTP dialogue */
if (::libsmtp_dialogue((libsmtp_session_struct *)session) != 0)
{
- LogLog::error(_T("Error occured while conducting the SMTP
dialogue."));
+ LogLog::error(LOG4CXX_STR("Error occured while conducting the SMTP
dialogue."));
return;
}
/* Now lets send the headers */
if (::libsmtp_headers((libsmtp_session_struct *)session) != 0)
{
- LogLog::error(_T("Error occured while sending the headers."));
+ LogLog::error(LOG4CXX_STR("Error occured while sending the
headers."));
return;
}
/* Now lets send the MIME headers */
if (::libsmtp_mime_headers((libsmtp_session_struct *)session) != 0)
{
- LogLog::error(_T("Error occured while sending the MIME headers."));
+ LogLog::error(LOG4CXX_STR("Error occured while sending the MIME
headers."));
return;
}
- String s = sbuf.str();
+ LOG4CXX_ENCODE_CHAR(s, sbuf);
if (::libsmtp_part_send(
- T2A((TCHAR *)s.c_str()),
+ const_cast<char*>(s.c_str()),
s.length(),
(libsmtp_session_struct *)session) != 0)
{
- LogLog::error(_T("Error occured while sending the message body."));
+ LogLog::error(LOG4CXX_STR("Error occured while sending the message
body."));
}
/* This ends the body part */
if (::libsmtp_body_end((libsmtp_session_struct *)session) != 0)
{
- LogLog::error(_T("Error occured while ending the body part."));
+ LogLog::error(LOG4CXX_STR("Error occured while ending the body
part."));
return;
}
/* This ends the connection gracefully */
if (::libsmtp_quit((libsmtp_session_struct *)session) != 0)
{
- LogLog::error(_T("Error occured while ending the connection."));
+ LogLog::error(LOG4CXX_STR("Error occured while ending the
connection."));
return;
}
}
- catch(Exception& e)
+ catch(std::exception& e)
{
- LogLog::error(_T("Error occured while sending e-mail notification."), e);
+ LogLog::error(LOG4CXX_STR("Error occured while sending e-mail
notification."), e);
}
}
/**
Returns value of the <b>EvaluatorClass</b> option.
*/
-String SMTPAppender::getEvaluatorClass()
+LogString SMTPAppender::getEvaluatorClass()
{
- return evaluator == 0 ? String() : evaluator->getClass().getName();
+ return evaluator == 0 ? LogString() : evaluator->getClass().getName();
}
/**
@@ -421,7 +427,7 @@
be instantiated and assigned as the triggering event evaluator
for the SMTPAppender.
*/
-void SMTPAppender::setEvaluatorClass(const String& value)
+void SMTPAppender::setEvaluatorClass(const LogString& value)
{
evaluator = OptionConverter::instantiateByClassName(value,
TriggeringEventEvaluator::getStaticClass(), evaluator);
Modified: logging/log4cxx/trunk/src/main/include/log4cxx/net/smtpappender.h
URL:
http://svn.apache.org/viewvc/logging/log4cxx/trunk/src/main/include/log4cxx/net/smtpappender.h?rev=601193&r1=601192&r2=601193&view=diff
==============================================================================
--- logging/log4cxx/trunk/src/main/include/log4cxx/net/smtpappender.h (original)
+++ logging/log4cxx/trunk/src/main/include/log4cxx/net/smtpappender.h Tue Dec
4 18:48:12 2007
@@ -123,7 +123,7 @@
/**
Send the contents of the cyclic buffer as an e-mail
message.
*/
- void sendBuffer();
+ void sendBuffer(log4cxx::helpers::Pool& p);
/**
Returns value of the <b>Charset</b> option.
@@ -265,7 +265,6 @@
END_LOG4CXX_CAST_MAP()
DefaultEvaluator();
- DefaultEvaluator(log4cxx::helpers::Pool& p);
/**
Is this <code>event</code> the e-mail triggering event?
@@ -274,6 +273,9 @@
<code>false</code>.
*/
virtual bool isTriggeringEvent(const
spi::LoggingEventPtr& event);
+ private:
+ DefaultEvaluator(const DefaultEvaluator&);
+ DefaultEvaluator& operator=(const DefaultEvaluator&);
}; // class DefaultEvaluator
} // namespace net
} // namespace log4cxx