summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDan Goodliffe <dan@randomdan.homeip.net>2019-05-27 19:57:47 +0100
committerDan Goodliffe <dan@randomdan.homeip.net>2019-05-27 19:57:47 +0100
commite1b26018358eb26ecc78589756043885d19fd97b (patch)
tree6a7f3bfaa31ac4b0b7b243066b1ce9b0c9a18dcd
parentInitial commit of MIME/Mail functionality (diff)
downloadicetray-e1b26018358eb26ecc78589756043885d19fd97b.tar.bz2
icetray-e1b26018358eb26ecc78589756043885d19fd97b.tar.xz
icetray-e1b26018358eb26ecc78589756043885d19fd97b.zip
General tidy and checker fixes for MIME/mail code
-rw-r--r--icetray/icetray/Jamfile.jam1
-rw-r--r--icetray/icetray/mailServer.cpp74
-rw-r--r--icetray/icetray/mailServer.h2
-rw-r--r--icetray/icetray/mimeImpl.cpp27
-rw-r--r--icetray/icetray/mimeImpl.h17
-rw-r--r--icetray/unittests/testIceTrayMail.cpp4
6 files changed, 63 insertions, 62 deletions
diff --git a/icetray/icetray/Jamfile.jam b/icetray/icetray/Jamfile.jam
index 09cf1b2..0f4168f 100644
--- a/icetray/icetray/Jamfile.jam
+++ b/icetray/icetray/Jamfile.jam
@@ -31,6 +31,7 @@ lib icetray :
<implicit-dependency>logWriter
<slicer>pure
<include>.
+ <toolset>tidy:<xcheckxx>hicpp-vararg
: :
<include>.
<library>..//dbppcore
diff --git a/icetray/icetray/mailServer.cpp b/icetray/icetray/mailServer.cpp
index 67287c8..743023a 100644
--- a/icetray/icetray/mailServer.cpp
+++ b/icetray/icetray/mailServer.cpp
@@ -1,53 +1,47 @@
#include "mailServer.h"
#include <libesmtp.h>
-#include <Ice/ObjectAdapter.h>
-#include <Ice/Communicator.h>
#include <memstream.h>
-namespace IceTray {
- namespace Mail {
- LibesmtpMailServer::LibesmtpMailServer(std::string s) :
- server(std::move(s))
- {
- }
+namespace IceTray::Mail {
+ LibesmtpMailServer::LibesmtpMailServer(std::string s) :
+ server(std::move(s))
+ {
+ }
- void
- LibesmtpMailServer::sendEmail(const EmailPtr & msg)
- {
- smtp_session_t session = smtp_create_session();
- smtp_message_t message = smtp_add_message(session);
- smtp_set_server(session, server.c_str());
- smtp_set_header(message, "To", msg->to.name.c_str(), msg->to.address.c_str());
- smtp_set_header(message, "From", msg->from.name.c_str(), msg->from.address.c_str());
- smtp_set_header(message, "Subject", msg->subject.c_str());
- smtp_add_recipient(message, msg->to.address.c_str());
- AdHoc::MemStream ms;
- writeEmailContent(msg, ms);
- smtp_set_message_fp(message, ms);
- if (!smtp_start_session(session)) {
- char buf[BUFSIZ];
- auto b = smtp_strerror(smtp_errno(), buf, sizeof(buf));
- assert(b);
- SendEmailFailed e(__FILE__, __LINE__, b);
- smtp_destroy_session(session);
- throw e;
- }
+ void
+ LibesmtpMailServer::sendEmail(const EmailPtr & msg)
+ {
+ smtp_session_t session = smtp_create_session();
+ smtp_message_t message = smtp_add_message(session);
+ smtp_set_server(session, server.c_str());
+ smtp_set_header(message, "To", msg->to.name.c_str(), msg->to.address.c_str());
+ smtp_set_header(message, "From", msg->from.name.c_str(), msg->from.address.c_str());
+ smtp_set_header(message, "Subject", msg->subject.c_str());
+ smtp_add_recipient(message, msg->to.address.c_str());
+ AdHoc::MemStream ms;
+ writeEmailContent(msg, ms);
+ smtp_set_message_fp(message, ms);
+ if (!smtp_start_session(session)) {
+ std::array<char, BUFSIZ> buf {};
+ smtp_strerror(smtp_errno(), buf.data(), buf.size());
smtp_destroy_session(session);
+ throw SendEmailFailed(__FILE__, __LINE__, buf.data());
}
+ smtp_destroy_session(session);
+ }
- void
- BasicMailServer::writeEmailContent(EmailPtr msg, FILE * ms)
- {
- fputs("MIME-Version: 1.0\r\n", ms);
- msg->content->write({ ms }, 0);
- }
+ void
+ BasicMailServer::writeEmailContent(const EmailPtr & msg, FILE * ms)
+ {
+ fputs("MIME-Version: 1.0\r\n", ms);
+ msg->content->write({ ms }, 0);
+ }
- void
- SendEmailFailed::ice_print(std::ostream & buf) const
- {
- buf << "Failed to send email: " << message;
- }
+ void
+ SendEmailFailed::ice_print(std::ostream & buf) const
+ {
+ buf << "Failed to send email: " << message;
}
}
diff --git a/icetray/icetray/mailServer.h b/icetray/icetray/mailServer.h
index 8f19877..03d7ca6 100644
--- a/icetray/icetray/mailServer.h
+++ b/icetray/icetray/mailServer.h
@@ -9,7 +9,7 @@ namespace IceTray {
namespace Mail {
class DLL_PUBLIC BasicMailServer {
public:
- static void writeEmailContent(EmailPtr msg, FILE * ms);
+ static void writeEmailContent(const EmailPtr & msg, FILE * ms);
};
class DLL_PUBLIC LibesmtpMailServer : public MailServer, BasicMailServer {
diff --git a/icetray/icetray/mimeImpl.cpp b/icetray/icetray/mimeImpl.cpp
index 74dfad5..ce58673 100644
--- a/icetray/icetray/mimeImpl.cpp
+++ b/icetray/icetray/mimeImpl.cpp
@@ -1,9 +1,10 @@
#include "mimeImpl.h"
+#include <string_view>
namespace IceTray::Mime {
static const char * const DIVIDER = "//divider//";
- static const char mime_base64[] =
- "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
+ static const std::string_view mime_base64 =
+ "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
void
PartHelper::writeHeaders(const Headers & headers, const StreamPtr & ms)
@@ -16,9 +17,9 @@ namespace IceTray::Mime {
}
}
- TextPart::TextPart(const Headers & h, const std::string & m, const std::string & p) :
+ TextPart::TextPart(const Headers & h, const std::string & m, std::string p) :
BasicSinglePart(h, m),
- payload(p)
+ payload(std::move(p))
{
}
@@ -79,9 +80,9 @@ namespace IceTray::Mime {
}
}
- BinaryViewPart::BinaryViewPart(const Headers & h, const std::string & m, const std::basic_string_view<uint8_t> & v) :
+ BinaryViewPart::BinaryViewPart(const Headers & h, const std::string & m, const byte_range & p) :
BasicSinglePart(h, m),
- payload(v)
+ payload(p)
{
}
@@ -102,19 +103,19 @@ namespace IceTray::Mime {
{
auto mime_encode_base64_block = [](auto & dest, const auto & src) {
if (src.length() >= 1) {
- dest[0] = mime_base64[(src[0] & 0xFC) >> 2];
+ dest[0] = mime_base64[(src[0] & 0xFCu) >> 2u];
if (src.length() >= 2) {
- dest[1] = mime_base64[((src[0] & 0x03) << 4) | ((src[1] & 0xF0) >> 4)];
+ dest[1] = mime_base64[((src[0] & 0x03u) << 4u) | ((src[1] & 0xF0u) >> 4u)];
if (src.length() >= 3) {
- dest[2] = mime_base64[((src[1] & 0x0F) << 2) | ((src[2] & 0xC0) >> 6)];
- dest[3] = mime_base64[((src[2] & 0x3F))];
+ dest[2] = mime_base64[((src[1] & 0x0Fu) << 2u) | ((src[2] & 0xC0u) >> 6u)];
+ dest[3] = mime_base64[((src[2] & 0x3Fu))];
}
else {
- dest[2] = mime_base64[((src[1] & 0x0F) << 2)];
+ dest[2] = mime_base64[((src[1] & 0x0Fu) << 2u)];
}
}
else {
- dest[1] = mime_base64[(src[0] & 0x03) << 4];
+ dest[1] = mime_base64[(src[0] & 0x03u) << 4u];
}
}
};
@@ -134,7 +135,7 @@ namespace IceTray::Mime {
fputs("\r\n", ms);
}
- BinaryCopyPart::BinaryCopyPart(const Headers & h, const std::string & m, std::vector<uint8_t> v) :
+ BinaryCopyPart::BinaryCopyPart(const Headers & h, const std::string & m, bytes v) :
BinaryViewPart(h, m, { v.data(), v.size() }),
payload(std::move(v))
{
diff --git a/icetray/icetray/mimeImpl.h b/icetray/icetray/mimeImpl.h
index 235d747..760fd06 100644
--- a/icetray/icetray/mimeImpl.h
+++ b/icetray/icetray/mimeImpl.h
@@ -12,7 +12,7 @@ namespace IceTray::Mime {
class DLL_PUBLIC TextPart : public BasicSinglePart, PartHelper {
public:
- TextPart(const Headers &, const std::string &, const std::string &);
+ TextPart(const Headers &, const std::string &, std::string);
void write(const StreamPtr & ms, Ice::Int depth) const override;
@@ -24,21 +24,26 @@ namespace IceTray::Mime {
class DLL_PUBLIC BinaryViewPart : public BasicSinglePart, PartHelper {
public:
- BinaryViewPart(const Headers &, const std::string &, const std::basic_string_view<uint8_t> &);
+ using byte = uint8_t;
+ using byte_range = std::basic_string_view<byte>;
+
+ BinaryViewPart(const Headers &, const std::string &, const byte_range &);
void write(const StreamPtr & ms, Ice::Int depth) const override;
- static void base64(const std::basic_string_view<uint8_t> & input, FILE * ms,
+ static void base64(const byte_range & input, FILE * ms,
const size_t maxWidth = 76);
- std::basic_string_view<uint8_t> payload;
+ const byte_range payload;
};
class DLL_PUBLIC BinaryCopyPart : public BinaryViewPart {
public:
- BinaryCopyPart(const Headers &, const std::string &, std::vector<uint8_t>);
+ using bytes = std::vector<byte>;
+
+ BinaryCopyPart(const Headers &, const std::string &, bytes);
- std::vector<uint8_t> payload;
+ const bytes payload;
};
class DLL_PUBLIC MultiPart : public BasicMultiPart, PartHelper {
diff --git a/icetray/unittests/testIceTrayMail.cpp b/icetray/unittests/testIceTrayMail.cpp
index ff2220a..c24b579 100644
--- a/icetray/unittests/testIceTrayMail.cpp
+++ b/icetray/unittests/testIceTrayMail.cpp
@@ -80,12 +80,12 @@ struct TestBase {
commonHeaders(dump);
#endif
}
+#ifdef DUMP
~TestBase()
{
-#ifdef DUMP
fclose(dump);
-#endif
}
+#endif
EmailPtr e;
AdHoc::MemStream ms;
#ifdef DUMP