From e1b26018358eb26ecc78589756043885d19fd97b Mon Sep 17 00:00:00 2001 From: Dan Goodliffe Date: Mon, 27 May 2019 19:57:47 +0100 Subject: General tidy and checker fixes for MIME/mail code --- icetray/icetray/Jamfile.jam | 1 + icetray/icetray/mailServer.cpp | 74 ++++++++++++++++------------------- icetray/icetray/mailServer.h | 2 +- icetray/icetray/mimeImpl.cpp | 27 +++++++------ icetray/icetray/mimeImpl.h | 17 +++++--- icetray/unittests/testIceTrayMail.cpp | 4 +- 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 : logWriter pure . + tidy:hicpp-vararg : : . ..//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 -#include -#include #include -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 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 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 & 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 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 &); + using byte = uint8_t; + using byte_range = std::basic_string_view; + + 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 & input, FILE * ms, + static void base64(const byte_range & input, FILE * ms, const size_t maxWidth = 76); - std::basic_string_view payload; + const byte_range payload; }; class DLL_PUBLIC BinaryCopyPart : public BinaryViewPart { public: - BinaryCopyPart(const Headers &, const std::string &, std::vector); + using bytes = std::vector; + + BinaryCopyPart(const Headers &, const std::string &, bytes); - std::vector 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 -- cgit v1.2.3