From 7fd7a6488625acc45b48ca21d55ed13783cae27f Mon Sep 17 00:00:00 2001 From: claiff Date: Sun, 18 Sep 2022 15:05:10 +0300 Subject: temp --- CMakeLists.txt | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 11f62b1..95eb853 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -71,6 +71,12 @@ else() include_directories(${Boost_INCLUDE_DIRS}) link_directories(${Boost_LIBRARY_DIRS}) + + find_package (PkgConfig REQUIRED) + find_package (PkgConfig REQUIRED) + pkg_check_modules (LOGGING phosphor-logging REQUIRED) + include_directories (SYSTEM ${LOGGING_INCLUDE_DIRS}) + link_directories (${LOGGING_LIBRARY_DIRS}) endif() include_directories(src) @@ -139,19 +145,18 @@ set(SRC_FILES ${MANAGER_BUILDER_DIR}/mail.cpp ) -add_executable(smtp ${SRC_FILES}) +add_executable(${PROJECT_NAME} ${SRC_FILES}) if(NOT ${YOCTO_DEPENDENCIES}) - add_dependencies(smtp sdbusplus-project) + add_dependencies(${PROJECT_NAME} sdbusplus-project) endif() -target_link_libraries(smtp boost_context) -target_link_libraries(smtp sdbusplus) -target_link_libraries(smtp systemd) -target_link_libraries(smtp curl) +target_link_libraries(${PROJECT_NAME} boost_context) +target_link_libraries(${PROJECT_NAME} sdbusplus) +target_link_libraries(${PROJECT_NAME} systemd) +target_link_libraries(${PROJECT_NAME} curl) -#target_link_libraries(curl_smtp curl) #target_link_libraries (${PROJECT_NAME} ${Boost_LIBRARIES}) -#target_link_libraries (${PROJECT_NAME} ${SDBUSPLUSPLUS_LIBRARIES} -# phosphor_logging) -install(TARGETS smtp DESTINATION bin) +target_link_libraries (${PROJECT_NAME} ${SDBUSPLUSPLUS_LIBRARIES} + phosphor_logging) +install(TARGETS ${PROJECT_NAME} DESTINATION bin) install(FILES ${PROJECT_SOURCE_DIR}/xyz.openbmc_project.SMTP.service DESTINATION /lib/systemd/system/) -- cgit v1.2.3 From 7485f26f35c9cfc1489a2e425fee57a2b51059a9 Mon Sep 17 00:00:00 2001 From: claiff Date: Mon, 19 Sep 2022 19:25:16 +0300 Subject: add logger journal and phosphor --- CMakeLists.txt | 59 ++++++++--- src/file/mail.cpp | 102 +++++++++--------- src/file/settings.cpp | 114 ++++++++++---------- src/logger/journal.cpp | 11 ++ src/logger/journal.hpp | 17 +++ src/logger/logger_set.cpp | 44 ++++++++ src/logger/logger_set.hpp | 25 +++++ src/logger/phosphor.cpp | 11 ++ src/logger/phosphor.hpp | 16 +++ src/logger/types/ilogger.hpp | 15 +++ src/managment/logger.cpp | 12 --- src/managment/logger.hpp | 13 --- src/message/sender.cpp | 246 ++++++++++++++++++++++--------------------- 13 files changed, 414 insertions(+), 271 deletions(-) create mode 100644 src/logger/journal.cpp create mode 100644 src/logger/journal.hpp create mode 100644 src/logger/logger_set.cpp create mode 100644 src/logger/logger_set.hpp create mode 100644 src/logger/phosphor.cpp create mode 100644 src/logger/phosphor.hpp create mode 100644 src/logger/types/ilogger.hpp delete mode 100644 src/managment/logger.cpp delete mode 100644 src/managment/logger.hpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 95eb853..e3e2153 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -14,6 +14,18 @@ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-unused-parameter") set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -Os -flto") set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -O0") +option ( + ADD_JOURNAL_LOGGING + "All logging write to journalctl" + ON +) + +option ( + ADD_PHOSPHOR_LOGGING + "All logging write to webui" + ON +) + if(NOT ${YOCTO_DEPENDENCIES}) include(ExternalProject) @@ -72,11 +84,9 @@ else() include_directories(${Boost_INCLUDE_DIRS}) link_directories(${Boost_LIBRARY_DIRS}) - find_package (PkgConfig REQUIRED) find_package (PkgConfig REQUIRED) pkg_check_modules (LOGGING phosphor-logging REQUIRED) - include_directories (SYSTEM ${LOGGING_INCLUDE_DIRS}) - link_directories (${LOGGING_LIBRARY_DIRS}) + endif() include_directories(src) @@ -84,11 +94,12 @@ include_directories(src) set(SRC_DIR src) set(MESSAGE_DIR src/message) set(SERVICE_DIR src/service) -set(MANAGMENT_DIR src/managment) +set(MANAGEMENT_DIR src/managment) set(FILE_DIR src/file) set(PARSER_DIR src/file/parser) set(MANAGER_BUILDER_DIR src/managment/builder) set(CONVERTER_DIR src/converter) +set(LOGGER_DIR src/logger) set(SRC_FILES ${SRC_DIR}/main.cpp @@ -114,13 +125,11 @@ set(SRC_FILES ${MESSAGE_DIR}/builder/types/imessage_builder.hpp ${MESSAGE_DIR}/builder/types/idecorator.hpp - ${MANAGMENT_DIR}/mail.hpp - ${MANAGMENT_DIR}/mail.cpp - ${MANAGMENT_DIR}/settings.hpp - ${MANAGMENT_DIR}/settings.cpp - ${MANAGMENT_DIR}/logger.hpp - ${MANAGMENT_DIR}/logger.cpp - ${MANAGMENT_DIR}/general.hpp + ${MANAGEMENT_DIR}/mail.hpp + ${MANAGEMENT_DIR}/mail.cpp + ${MANAGEMENT_DIR}/settings.hpp + ${MANAGEMENT_DIR}/settings.cpp + ${MANAGEMENT_DIR}/general.hpp ${FILE_DIR}/mail.hpp ${FILE_DIR}/mail.cpp @@ -143,20 +152,38 @@ set(SRC_FILES ${MANAGER_BUILDER_DIR}/settings.cpp ${MANAGER_BUILDER_DIR}/mail.hpp ${MANAGER_BUILDER_DIR}/mail.cpp - ) -add_executable(${PROJECT_NAME} ${SRC_FILES}) + ${LOGGER_DIR}/types/ilogger.hpp + ${LOGGER_DIR}/journal.cpp + ${LOGGER_DIR}/journal.hpp + ${LOGGER_DIR}/logger_set.cpp + ${LOGGER_DIR}/logger_set.hpp +) + +if( ${ADD_PHOSPHOR_LOGGING} ) + set(PHOSPHOR_LOGGING_FILES + src/logger/phosphor.cpp + src/logger/phosphor.hpp + ) +endif() + +add_executable(${PROJECT_NAME} ${SRC_FILES} ${PHOSPHOR_LOGGING_FILES}) + +target_compile_definitions ( + ${PROJECT_NAME} PRIVATE $<$: -DADD_JOURNAL_LOGGING> +) + if(NOT ${YOCTO_DEPENDENCIES}) add_dependencies(${PROJECT_NAME} sdbusplus-project) +elseif(${ADD_PHOSPHOR_LOGGING}) + target_link_libraries (${PROJECT_NAME} phosphor_logging) endif() + target_link_libraries(${PROJECT_NAME} boost_context) target_link_libraries(${PROJECT_NAME} sdbusplus) target_link_libraries(${PROJECT_NAME} systemd) target_link_libraries(${PROJECT_NAME} curl) -#target_link_libraries (${PROJECT_NAME} ${Boost_LIBRARIES}) -target_link_libraries (${PROJECT_NAME} ${SDBUSPLUSPLUS_LIBRARIES} - phosphor_logging) install(TARGETS ${PROJECT_NAME} DESTINATION bin) install(FILES ${PROJECT_SOURCE_DIR}/xyz.openbmc_project.SMTP.service DESTINATION /lib/systemd/system/) diff --git a/src/file/mail.cpp b/src/file/mail.cpp index 5452136..1453535 100644 --- a/src/file/mail.cpp +++ b/src/file/mail.cpp @@ -1,63 +1,63 @@ #include #include "mail.hpp" -#include "managment/logger.hpp" +#include "logger/logger_set.hpp" namespace smtp::file { - Mail::Mail( std::string const& path_file ) - : mPathFile( path_file ) - { - } + Mail::Mail( std::string const& path_file ) + : mPathFile( path_file ) + { + } - manage::MailsSet Mail::Read() const - { - std::ifstream mail_file{ mPathFile, std::fstream::in }; - if ( !mail_file.is_open() ) - { - manage::Logger::LogError( "Unable to open file to read " + mPathFile ); - return {}; - } - std::string line{}; - manage::MailsSet result; + manage::MailsSet Mail::Read() const + { + std::ifstream mail_file{mPathFile, std::fstream::in}; + if( !mail_file.is_open()) + { + logger::LoggerSet::GetInstance()->LogError( "Unable to open file to read " + mPathFile ); + return {}; + } + std::string line{}; + manage::MailsSet result; - while ( std::getline( mail_file, line ) ) - { - auto parsed_data = GetMailFromLine( line ); - if( parsed_data ) - { - result.push_back( *parsed_data ); - } - } - mail_file.close(); - return result; - } + while( std::getline( mail_file, line )) + { + auto parsed_data = GetMailFromLine( line ); + if( parsed_data ) + { + result.push_back( *parsed_data ); + } + } + mail_file.close(); + return result; + } - bool Mail::Write( manage::MailsSet const& data ) const - { - std::ofstream mail_file{ mPathFile, std::fstream::out | std::fstream::trunc }; - if ( !mail_file.is_open() ) - { - manage::Logger::LogError( "Unable to open file to write " + mPathFile ); - return false; - } - for( const auto& pair : data ) - { - mail_file << pair << "\n"; - } - mail_file.close(); - return true; - } + bool Mail::Write( manage::MailsSet const& data ) const + { + std::ofstream mail_file{mPathFile, std::fstream::out | std::fstream::trunc}; + if( !mail_file.is_open()) + { + logger::LoggerSet::GetInstance()->LogError( "Unable to open file to write " + mPathFile ); + return false; + } + for( const auto& pair: data ) + { + mail_file << pair << "\n"; + } + mail_file.close(); + return true; + } - std::optional Mail::GetMailFromLine( std::string const& line ) const - { - //TODO registrator if checking parsing - auto pos = line.find('@'); - if(pos == std::string::npos) - { - return {}; - } - return line; - } + std::optional < std::string > Mail::GetMailFromLine( std::string const& line ) const + { + //TODO registrator if checking parsing + auto pos = line.find( '@' ); + if( pos == std::string::npos ) + { + return {}; + } + return line; + } } diff --git a/src/file/settings.cpp b/src/file/settings.cpp index 83c1037..445cb5e 100644 --- a/src/file/settings.cpp +++ b/src/file/settings.cpp @@ -1,71 +1,71 @@ #include #include "settings.hpp" -#include "managment/logger.hpp" +#include "logger/logger_set.hpp" namespace smtp::file { - Settings::Settings( std::string const& path_file) - : mPathFile( path_file ) - { + Settings::Settings( std::string const& path_file ) + : mPathFile( path_file ) + { - } + } - manage::SettingsFields Settings::Read() const - { - auto parsed_store = GetParsedStore(); - return converter::Full{}.Convert( parsed_store ); - } + manage::SettingsFields Settings::Read() const + { + auto parsed_store = GetParsedStore(); + return converter::Full{}.Convert( parsed_store ); + } - bool Settings::Write( manage::SettingsFields const& settings_fields ) const - { - auto parsed_data = converter::Full{}.Convert( settings_fields ); - return SetParsedData( parsed_data ); - } + bool Settings::Write( manage::SettingsFields const& settings_fields ) const + { + auto parsed_data = converter::Full{}.Convert( settings_fields ); + return SetParsedData( parsed_data ); + } - ParsedStoreType Settings::GetParsedStore() const - { - std::ifstream settings_file{ mPathFile, std::fstream::in }; - if ( !settings_file.is_open() ) - { - manage::Logger::LogError( "Unable to open file to read " + mPathFile ); - return {}; - } - std::string line{}; - ParsedStoreType result; + ParsedStoreType Settings::GetParsedStore() const + { + std::ifstream settings_file{mPathFile, std::fstream::in}; + if( !settings_file.is_open()) + { + logger::LoggerSet::GetInstance()->LogError( "Unable to open file to read " + mPathFile ); + return {}; + } + std::string line{}; + ParsedStoreType result; - while ( std::getline( settings_file, line ) ) - { - auto parsed_data = parser::Settings{}.Parse(line); - result.insert( parsed_data ); - } - settings_file.close(); - return result; - } + while( std::getline( settings_file, line )) + { + auto parsed_data = parser::Settings{}.Parse( line ); + result.insert( parsed_data ); + } + settings_file.close(); + return result; + } - bool Settings::SetParsedData( ParsedStoreType const& parsed_data ) const - { - std::ofstream settings_file{ mPathFile, std::fstream::out | std::fstream::trunc }; - if ( !settings_file.is_open() ) - { - manage::Logger::LogError( "Unable to open file to write " + mPathFile ); - return false; - } - for( const auto& data : parsed_data ) - { - auto line = BuildParam( data ); - settings_file << line << "\n"; - } - settings_file.close(); - return true; - } + bool Settings::SetParsedData( ParsedStoreType const& parsed_data ) const + { + std::ofstream settings_file{mPathFile, std::fstream::out | std::fstream::trunc}; + if( !settings_file.is_open()) + { + logger::LoggerSet::GetInstance()->LogError( "Unable to open file to write " + mPathFile ); + return false; + } + for( const auto& data: parsed_data ) + { + auto line = BuildParam( data ); + settings_file << line << "\n"; + } + settings_file.close(); + return true; + } - std::string Settings::BuildParam( std::pair const& data) const - { - std::string result; - result += data.first; - result += '='; - result += data.second; - return result; - } + std::string Settings::BuildParam( std::pair < std::string, std::string > const& data ) const + { + std::string result; + result += data.first; + result += '='; + result += data.second; + return result; + } } diff --git a/src/logger/journal.cpp b/src/logger/journal.cpp new file mode 100644 index 0000000..001e87d --- /dev/null +++ b/src/logger/journal.cpp @@ -0,0 +1,11 @@ +#include + +#include "journal.hpp" + +namespace smtp::logger +{ + void Journal::LogError( std::string const& message ) const + { + std::cout << message << std::endl; + } +} \ No newline at end of file diff --git a/src/logger/journal.hpp b/src/logger/journal.hpp new file mode 100644 index 0000000..1b06b8c --- /dev/null +++ b/src/logger/journal.hpp @@ -0,0 +1,17 @@ +#pragma once + +#include "types/ilogger.hpp" + +namespace smtp::logger +{ + class Journal + : public types::ILogger + { + public: + Journal() = default; + ~Journal() override = default; + + void LogError( std::string const& message ) const override; + }; +} + diff --git a/src/logger/logger_set.cpp b/src/logger/logger_set.cpp new file mode 100644 index 0000000..8a061ed --- /dev/null +++ b/src/logger/logger_set.cpp @@ -0,0 +1,44 @@ +#include "logger_set.hpp" +#include "journal.hpp" + +namespace smtp::logger +{ + std::shared_ptr < LoggerSet > LoggerSet::mInstance = nullptr; + + LoggerSet::LoggerSet( std::list < types::ILoggerPtr > const& logger ) + : mLogger( logger ) + { + + } + + std::shared_ptr < LoggerSet > LoggerSet::GetInstance() + { + if( !mInstance ) + { + BuildLogger(); + } + return mInstance; + } + + void LoggerSet::BuildLogger() + { + std::list < types::ILoggerPtr > loggers; +#ifdef ADD_JOURNAL_LOGGING + loggers.push_back( std::make_shared < Journal >()); +#endif +#ifdef ADD_PHOSPHOR_LOGGING + loggers.push_back( std::make_shared < Journal >()); +#endif + mInstance.reset( new LoggerSet( loggers )); + } + + void LoggerSet::LogError( std::string const& message ) + { + for( const auto& logger: mLogger ) + { + logger->LogError( message ); + } + } + + +} diff --git a/src/logger/logger_set.hpp b/src/logger/logger_set.hpp new file mode 100644 index 0000000..fb74e56 --- /dev/null +++ b/src/logger/logger_set.hpp @@ -0,0 +1,25 @@ +#pragma once + +#include +#include + +#include "types/ilogger.hpp" + +namespace smtp::logger +{ + class LoggerSet + { + private: + explicit LoggerSet( std::list < types::ILoggerPtr > const& logger ); + static void BuildLogger(); + + static std::shared_ptr < LoggerSet > mInstance; + std::list < types::ILoggerPtr > mLogger; + public: + LoggerSet( const LoggerSet& ) = delete; + LoggerSet& operator=( LoggerSet& ) = delete; + + void LogError( std::string const& message ); + static std::shared_ptr < LoggerSet > GetInstance(); + }; +} diff --git a/src/logger/phosphor.cpp b/src/logger/phosphor.cpp new file mode 100644 index 0000000..48bb49e --- /dev/null +++ b/src/logger/phosphor.cpp @@ -0,0 +1,11 @@ +#include + +#include "phosphor.hpp" + +namespace smtp::logger +{ + void Phosphor::LogError( std::string const& message ) const + { + phosphor::logging::log < phosphor::logging::level::ERR >( message.c_str()); + } +} \ No newline at end of file diff --git a/src/logger/phosphor.hpp b/src/logger/phosphor.hpp new file mode 100644 index 0000000..dd536b5 --- /dev/null +++ b/src/logger/phosphor.hpp @@ -0,0 +1,16 @@ +#pragma once + +#include "types/ilogger.hpp" + +namespace smtp::logger +{ + class Phosphor + : public types::ILogger + { + public: + Phosphor() = default; + ~Phosphor() override = default; + + void LogError( std::string const& message ) const override; + }; +} diff --git a/src/logger/types/ilogger.hpp b/src/logger/types/ilogger.hpp new file mode 100644 index 0000000..9f88668 --- /dev/null +++ b/src/logger/types/ilogger.hpp @@ -0,0 +1,15 @@ +#pragma once + +#include + +namespace smtp::logger::types +{ + class ILogger + { + public: + virtual ~ILogger() = default; + + virtual void LogError( std::string const& message ) const = 0; + }; + using ILoggerPtr = std::shared_ptr; +} \ No newline at end of file diff --git a/src/managment/logger.cpp b/src/managment/logger.cpp deleted file mode 100644 index 0c55394..0000000 --- a/src/managment/logger.cpp +++ /dev/null @@ -1,12 +0,0 @@ -#include - -#include "logger.hpp" - -namespace smtp::manage -{ - void Logger::LogError( std::string const& message ) - { - std::cout << message << std::endl; - } - -} diff --git a/src/managment/logger.hpp b/src/managment/logger.hpp deleted file mode 100644 index 315e17e..0000000 --- a/src/managment/logger.hpp +++ /dev/null @@ -1,13 +0,0 @@ -#pragma once - -#include - -namespace smtp::manage -{ - class Logger - { - public: - Logger() = default; - static void LogError( std::string const& message ); - }; -} diff --git a/src/message/sender.cpp b/src/message/sender.cpp index 5b3a421..5845628 100644 --- a/src/message/sender.cpp +++ b/src/message/sender.cpp @@ -1,4 +1,4 @@ -#include +#include #include "sender.hpp" #include "builder/date.hpp" @@ -7,128 +7,130 @@ #include "builder/subject.hpp" #include "builder/text.hpp" #include "builder/from.hpp" -#include "managment/logger.hpp" +#include "logger/logger_set.hpp" namespace smtp::message { - static std::string mText = ""; - - // - // Constructors/Destructors - // - Sender::Sender( manage::Settings& settings_storage, manage::Mail const& mail_to ) - : mSettingsStorage( settings_storage ), - mMailTo( mail_to ) - { - - } - - // - //Public methods - // - - bool Sender::Send( std::string const& mail_from, std::string const& subject, std::string const& text ) - { - CURLcode result = CURLE_OK; - curl_slist *recipients = NULL; - WriteThis upload_ctx{}; - auto curl = curl_easy_init(); - - //TODO сделать инициализацию через регистратор инициализаторов - mSettingsStorage.ReloadSettings(); - if( !InitCurl( curl, upload_ctx, mail_from ) ) - { - manage::Logger::LogError("Error to initializate curl"); - return false; - } - //TODO раздать mail_to другим методам - auto mail_to = mMailTo.GetMailToSend(); - if( mail_to.empty() ) - { - manage::Logger::LogError("We haven't any mail to"); - return false; - } - FillRecipients( curl, recipients ); - UpdateMailText( mail_from, subject, text); - - result = curl_easy_perform(curl); - - if ( result != CURLE_OK ) - { - std::string message = "Error to send messge: " + std::string( curl_easy_strerror( result )); - manage::Logger::LogError(message); - return false; - } - //TODO сделать деинициализацию через регистратор деинициализаторов - curl_slist_free_all( recipients ); - curl_easy_cleanup( curl ); - return true; - } - - // - //Private methods - // - bool smtp::message::Sender::InitCurl( CURL* curl, WriteThis const& upload_ctx, std::string const& mail_from ) - { - if( !curl ) - { - return false; - } - curl_easy_setopt(curl, CURLOPT_USERNAME, mSettingsStorage.GetUserName().c_str()); - curl_easy_setopt(curl, CURLOPT_PASSWORD, mSettingsStorage.GetPassword().c_str()); - curl_easy_setopt(curl, CURLOPT_URL, GetHostPortData().c_str()); - - curl_easy_setopt(curl, CURLOPT_USE_SSL, (long)CURLUSESSL_ALL); - curl_easy_setopt(curl, CURLOPT_MAIL_FROM, mail_from.c_str()); - - curl_easy_setopt(curl, CURLOPT_READFUNCTION, ReadCallBack); - curl_easy_setopt(curl, CURLOPT_READDATA, &upload_ctx); - curl_easy_setopt(curl, CURLOPT_UPLOAD, 1L); - curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L); - return true; - } - - void Sender::UpdateMailText( std::string const& mail_from, std::string const& subject, std::string const& text ) const - { - auto mail_to = mMailTo.GetMailToSend(); - auto text_decorator = std::make_shared( text ); - text_decorator->Apply( std::make_shared( subject ) ) - .Apply( std::make_shared( mail_to ) ) - .Apply( std::make_shared( mail_from ) ) - .Apply( std::make_shared( mail_to ) ) - .Apply( std::make_shared() ); - mText = text_decorator->Get(); - } - - void Sender::FillRecipients( CURL* curl, curl_slist* recipients ) - { - auto mail_to = mMailTo.GetMailToSend(); - for( const auto& recipient : mail_to ) - { - recipients = curl_slist_append( recipients, recipient.c_str() ); - } - - curl_easy_setopt( curl, CURLOPT_MAIL_RCPT, recipients ); - } - - std::string Sender::GetHostPortData() const - { - auto result = "smtp://" + mSettingsStorage.GetHost(); - if( !mSettingsStorage.GetPort().empty() ) - { - result += ":" + mSettingsStorage.GetPort(); - } - return result; - } - //TODO Надо убрать этот ужас. Без статики!!! - size_t Sender::ReadCallBack( void *ptr, size_t size, size_t nmemb, void *userp ) - { - struct WriteThis *pooh = reinterpret_cast( userp ); - if( size * nmemb < 1 || pooh->counter++ > 0 ) - { - return 0; - } - memcpy( ptr, mText.c_str(), mText.size() ); - return mText.size(); - } + static std::string mText; + + // + // Constructors/Destructors + // + Sender::Sender( manage::Settings& settings_storage, manage::Mail const& mail_to ) + : mSettingsStorage( settings_storage ) + , mMailTo( mail_to ) + { + + } + + // + //Public methods + // + + bool Sender::Send( std::string const& mail_from, std::string const& subject, std::string const& text ) + { + CURLcode result = CURLE_OK; + curl_slist* recipients = nullptr; + WriteThis upload_ctx{}; + auto curl = curl_easy_init(); + + //TODO сделать инициализацию через регистратор инициализаторов + mSettingsStorage.ReloadSettings(); + if( !InitCurl( curl, upload_ctx, mail_from )) + { + logger::LoggerSet::GetInstance()->LogError( "Error to initializate curl" ); + return false; + } + //TODO раздать mail_to другим методам + auto mail_to = mMailTo.GetMailToSend(); + if( mail_to.empty()) + { + logger::LoggerSet::GetInstance()->LogError( "We haven't any mail to" ); + return false; + } + FillRecipients( curl, recipients ); + UpdateMailText( mail_from, subject, text ); + + result = curl_easy_perform( curl ); + + if( result != CURLE_OK ) + { + std::string message = "Error to send messge: " + std::string( curl_easy_strerror( result )); + logger::LoggerSet::GetInstance()->LogError( message ); + return false; + } + //TODO сделать деинициализацию через регистратор деинициализаторов + curl_slist_free_all( recipients ); + curl_easy_cleanup( curl ); + return true; + } + + // + //Private methods + // + bool smtp::message::Sender::InitCurl( CURL* curl, WriteThis const& upload_ctx, std::string const& mail_from ) + { + if( !curl ) + { + return false; + } + curl_easy_setopt( curl, CURLOPT_USERNAME, mSettingsStorage.GetUserName().c_str()); + curl_easy_setopt( curl, CURLOPT_PASSWORD, mSettingsStorage.GetPassword().c_str()); + curl_easy_setopt( curl, CURLOPT_URL, GetHostPortData().c_str()); + + curl_easy_setopt( curl, CURLOPT_USE_SSL, ( long ) CURLUSESSL_ALL ); + curl_easy_setopt( curl, CURLOPT_MAIL_FROM, mail_from.c_str()); + + curl_easy_setopt( curl, CURLOPT_READFUNCTION, ReadCallBack ); + curl_easy_setopt( curl, CURLOPT_READDATA, &upload_ctx ); + curl_easy_setopt( curl, CURLOPT_UPLOAD, 1L ); + curl_easy_setopt( curl, CURLOPT_VERBOSE, 1L ); + return true; + } + + void + Sender::UpdateMailText( std::string const& mail_from, std::string const& subject, std::string const& text ) const + { + auto mail_to = mMailTo.GetMailToSend(); + auto text_decorator = std::make_shared < builder::Text >( text ); + text_decorator->Apply( std::make_shared < builder::Subject >( subject )) + .Apply( std::make_shared < builder::Cc >( mail_to )) + .Apply( std::make_shared < builder::From >( mail_from )) + .Apply( std::make_shared < builder::MailTo >( mail_to )) + .Apply( std::make_shared < builder::Date >()); + mText = text_decorator->Get(); + } + + void Sender::FillRecipients( CURL* curl, curl_slist* recipients ) + { + auto mail_to = mMailTo.GetMailToSend(); + for( const auto& recipient: mail_to ) + { + recipients = curl_slist_append( recipients, recipient.c_str()); + } + + curl_easy_setopt( curl, CURLOPT_MAIL_RCPT, recipients ); + } + + std::string Sender::GetHostPortData() const + { + auto result = "smtp://" + mSettingsStorage.GetHost(); + if( !mSettingsStorage.GetPort().empty()) + { + result += ":" + mSettingsStorage.GetPort(); + } + return result; + } + + //TODO Надо убрать этот ужас. Без статики!!! + size_t Sender::ReadCallBack( void* ptr, size_t size, size_t nmemb, void* userp ) + { + auto pooh = reinterpret_cast( userp ); + if( size * nmemb < 1 || pooh->counter++ > 0 ) + { + return 0; + } + memcpy( ptr, mText.c_str(), mText.size()); + return mText.size(); + } } -- cgit v1.2.3 From a282ae6418c85db1aae5a2823dd37d56e56e5249 Mon Sep 17 00:00:00 2001 From: claiff Date: Tue, 20 Sep 2022 16:05:35 +0300 Subject: temp --- CMakeLists.txt | 14 +++++++++----- src/logger/logger_set.cpp | 5 +++-- src/logger/phosphor.cpp | 6 +++++- src/message/sender.hpp | 48 +++++++++++++++++++++++------------------------ src/service/smtp.cpp | 18 +++++++++--------- src/service/smtp.hpp | 12 +++--------- 6 files changed, 53 insertions(+), 50 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index e3e2153..56bc523 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -86,7 +86,6 @@ else() find_package (PkgConfig REQUIRED) pkg_check_modules (LOGGING phosphor-logging REQUIRED) - endif() include_directories(src) @@ -169,10 +168,6 @@ endif() add_executable(${PROJECT_NAME} ${SRC_FILES} ${PHOSPHOR_LOGGING_FILES}) -target_compile_definitions ( - ${PROJECT_NAME} PRIVATE $<$: -DADD_JOURNAL_LOGGING> -) - if(NOT ${YOCTO_DEPENDENCIES}) add_dependencies(${PROJECT_NAME} sdbusplus-project) elseif(${ADD_PHOSPHOR_LOGGING}) @@ -187,3 +182,12 @@ target_link_libraries(${PROJECT_NAME} curl) install(TARGETS ${PROJECT_NAME} DESTINATION bin) install(FILES ${PROJECT_SOURCE_DIR}/xyz.openbmc_project.SMTP.service DESTINATION /lib/systemd/system/) + +target_compile_definitions ( + ${PROJECT_NAME} PRIVATE $<$: -DADD_JOURNAL_LOGGING> + +) + +target_compile_definitions ( + ${PROJECT_NAME} PRIVATE $<$: -DADD_PHOSPHOR_LOGGING> +) diff --git a/src/logger/logger_set.cpp b/src/logger/logger_set.cpp index 8a061ed..6ea6d58 100644 --- a/src/logger/logger_set.cpp +++ b/src/logger/logger_set.cpp @@ -1,6 +1,7 @@ #include "logger_set.hpp" #include "journal.hpp" - +#include "phosphor.hpp" +#include namespace smtp::logger { std::shared_ptr < LoggerSet > LoggerSet::mInstance = nullptr; @@ -27,7 +28,7 @@ namespace smtp::logger loggers.push_back( std::make_shared < Journal >()); #endif #ifdef ADD_PHOSPHOR_LOGGING - loggers.push_back( std::make_shared < Journal >()); + loggers.push_back( std::make_shared < Phosphor >()); #endif mInstance.reset( new LoggerSet( loggers )); } diff --git a/src/logger/phosphor.cpp b/src/logger/phosphor.cpp index 48bb49e..d3c81b0 100644 --- a/src/logger/phosphor.cpp +++ b/src/logger/phosphor.cpp @@ -1,4 +1,6 @@ #include +#include +#include #include "phosphor.hpp" @@ -6,6 +8,8 @@ namespace smtp::logger { void Phosphor::LogError( std::string const& message ) const { - phosphor::logging::log < phosphor::logging::level::ERR >( message.c_str()); + using InternalFailure = + sdbusplus::xyz::openbmc_project::Common::Error::InternalFailure; + phosphor::logging::commit(message); } } \ No newline at end of file diff --git a/src/message/sender.hpp b/src/message/sender.hpp index ca2c3ff..d19e209 100644 --- a/src/message/sender.hpp +++ b/src/message/sender.hpp @@ -7,32 +7,32 @@ #include "managment/settings.hpp" #include "managment/mail.hpp" + namespace smtp::message { - struct WriteThis - { - int counter; - }; - - class Sender - { - public: - Sender( manage::Settings& settings_storage, manage::Mail const& mail_to ); - ~Sender() = default; - - bool Send( std::string const& mail_from, std::string const& subject, std::string const& text ); - private: - void UpdateMailText( std::string const& mail_from, std::string const& subject, std::string const& textt ) const; - void InitSenders( std::string const& mail_from, std::list const& mail_to ); - void FillRecipients(CURL* curl, curl_slist* recipients ); - std::string GetHostPortData() const; - static size_t ReadCallBack( void *ptr, size_t size, size_t nmemb, void *userp ); - - manage::Settings& mSettingsStorage; - manage::Mail const& mMailTo; - - bool InitCurl( CURL* curl, WriteThis const& upload_ctx, std::string const& mail_from ); - }; + struct WriteThis + { + int counter; + }; + + class Sender + { + public: + Sender( manage::Settings& settings_storage, manage::Mail const& mail_to ); + ~Sender() = default; + + bool Send( std::string const& mail_from, std::string const& subject, std::string const& text ); + private: + void UpdateMailText( std::string const& mail_from, std::string const& subject, std::string const& textt ) const; + void FillRecipients( CURL* curl, curl_slist* recipients ); + std::string GetHostPortData() const; + static size_t ReadCallBack( void* ptr, size_t size, size_t nmemb, void* userp ); + + manage::Settings& mSettingsStorage; + manage::Mail const& mMailTo; + + bool InitCurl( CURL* curl, WriteThis const& upload_ctx, std::string const& mail_from ); + }; } diff --git a/src/service/smtp.cpp b/src/service/smtp.cpp index 702de2d..7b1ca70 100644 --- a/src/service/smtp.cpp +++ b/src/service/smtp.cpp @@ -11,7 +11,7 @@ namespace smtp::service :mSettingsStorage(settings), mMailTo(mail_to) { CreateService( connection ); - CreateMessagerInterface( connection ); + CreateMessengerInterface( connection ); CreateSettingsManagerInterface( connection ); CreateMailManagerInterface( connection ); } @@ -27,17 +27,17 @@ namespace smtp::service connection->request_name( SMTP_BUS_NAME ); } - void Smtp::CreateMessagerInterface( ConnectionPtr connection ) + void Smtp::CreateMessengerInterface( ConnectionPtr connection ) { static constexpr char SMTP_OBJECT_NAME[] = "/xyz/openbmc_project/SMTP/Messenger"; static constexpr char SMTP_INTERFACE_NAME[] = "xyz.openbmc_project.Messenger"; mObjectServer = std::make_shared( connection ); - mMessagerInterface = mObjectServer->add_interface( SMTP_OBJECT_NAME, SMTP_INTERFACE_NAME ); + mMessengerInterface = mObjectServer->add_interface( SMTP_OBJECT_NAME, SMTP_INTERFACE_NAME ); - AddMessagerMethods(); + AddMessengerMethods(); - mMessagerInterface->initialize(); + mMessengerInterface->initialize(); } void Smtp::CreateSettingsManagerInterface(ConnectionPtr connection) @@ -66,13 +66,13 @@ namespace smtp::service mManagerMailInterface->initialize(); } - void Smtp::AddMessagerMethods() + void Smtp::AddMessengerMethods() { static constexpr char SMTP_SEND_MESSAGE_METHOD_NAME[] = "SendMail"; - mMessagerInterface->register_method(SMTP_SEND_MESSAGE_METHOD_NAME, [this]( std::string const& mail_from, - std::string const& theme, - std::string const& text ) + mMessengerInterface->register_method( SMTP_SEND_MESSAGE_METHOD_NAME, [this]( std::string const& mail_from, + std::string const& theme, + std::string const& text ) { return message::Sender{ mSettingsStorage, mMailTo }.Send( mail_from, theme, text );}); } diff --git a/src/service/smtp.hpp b/src/service/smtp.hpp index a52c9c0..edf964e 100644 --- a/src/service/smtp.hpp +++ b/src/service/smtp.hpp @@ -20,21 +20,15 @@ namespace smtp::service Smtp( ConnectionPtr connection, manage::Settings const& settings, manage::Mail const& mail_to ); ~Smtp() = default; private: - void FillStorageByDefault(); void CreateService( ConnectionPtr bus ); - void CreateMessagerInterface( ConnectionPtr connection ); + void CreateMessengerInterface( ConnectionPtr connection ); void CreateSettingsManagerInterface( ConnectionPtr connection ); void CreateMailManagerInterface( ConnectionPtr connection ); - void AddProperties(); - void AddMessagerMethods(); + void AddMessengerMethods(); void AddSettingsManagerMethods(); void AddMailManagerMethods(); - bool RefreshSettings( bool is_need_auth, bool is_need_ssl, - std::string const& user, std::string const& password, - std::string const& host, std::string const& port ); - - InterfacePtr mMessagerInterface; + InterfacePtr mMessengerInterface; InterfacePtr mManagerSettingsInterface; InterfacePtr mManagerMailInterface; -- cgit v1.2.3 From b8c1b47e32215cfa9f0483144ee643867ffc67c7 Mon Sep 17 00:00:00 2001 From: claiff Date: Fri, 23 Sep 2022 16:16:56 +0300 Subject: add phosphor logger --- CMakeLists.txt | 7 +-- src/checker/errors/settings/port_number.cpp | 11 ++-- src/file/mail.cpp | 8 ++- src/file/settings.cpp | 82 +++++++++++++++-------------- src/logger/journal.cpp | 2 +- src/logger/journal.hpp | 2 +- src/logger/logger_set.cpp | 4 +- src/logger/logger_set.hpp | 2 +- src/logger/phosphor.cpp | 12 ++--- src/logger/phosphor.hpp | 2 +- src/logger/types/ilogger.hpp | 5 +- src/message/sender.cpp | 8 +-- 12 files changed, 78 insertions(+), 67 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 9fe6741..ca5d5b2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -5,7 +5,7 @@ project(smtp LANGUAGES CXX) cmake_policy(SET CMP0054 NEW) set(CMAKE_EXPORT_COMPILE_COMMANDS ON) -set(CMAKE_CXX_STANDARD 17) +set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED ON) #set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -fno-rtti") @@ -23,7 +23,7 @@ option ( option ( ADD_PHOSPHOR_LOGGING "All logging write to webui" - ON + OFF ) if(NOT ${YOCTO_DEPENDENCIES}) @@ -170,7 +170,8 @@ set(SRC_FILES ${CHECKER_DIR}/errors/types/isettings_error.hpp ) -if( ${ADD_PHOSPHOR_LOGGING} ) +if( ${ADD_PHOSPHOR_LOGGING} STREQUAL "ON") + message("hello") set(PHOSPHOR_LOGGING_FILES src/logger/phosphor.cpp src/logger/phosphor.hpp diff --git a/src/checker/errors/settings/port_number.cpp b/src/checker/errors/settings/port_number.cpp index b02eec4..73469cb 100644 --- a/src/checker/errors/settings/port_number.cpp +++ b/src/checker/errors/settings/port_number.cpp @@ -1,7 +1,7 @@ #include #include "port_number.hpp" -#include "management/logger.hpp" +#include "logger/logger_set.hpp" namespace smtp::checker::errors::settings { @@ -10,12 +10,13 @@ namespace smtp::checker::errors::settings static const std::string PORT_FIELD = "port"; static constexpr int MIN_PORT_NUMBER = 0; static constexpr int MAX_PORT_NUMBER = 65535; + static const std::string METHOD_NAME = "Check settings"; //TODO общее использование полей auto find = line.find( PORT_FIELD ); if( find == line.end() ) { - manage::Logger::LogError( "Port doesn't found" ); + logger::LoggerSet::GetInstance()->LogError( METHOD_NAME, "Port doesn't found" ); return false; } auto host_as_string = find->second; @@ -30,17 +31,17 @@ namespace smtp::checker::errors::settings } catch( std::invalid_argument const& ex ) { - manage::Logger::LogError( "Port doesn't entered by numbers" ); + logger::LoggerSet::GetInstance()->LogError( METHOD_NAME, "Port doesn't entered by numbers" ); return false; } catch( std::out_of_range const& ex ) { - manage::Logger::LogError( "Port out of range" ); + logger::LoggerSet::GetInstance()->LogError( METHOD_NAME, "Port out of range" ); return false; } catch( ... ) { - manage::Logger::LogError( "Port doesn't entered by numbers" ); + logger::LoggerSet::GetInstance()->LogError( METHOD_NAME, "Port doesn't entered by numbers" ); return false; } return host_as_int >= MIN_PORT_NUMBER && host_as_int <= MAX_PORT_NUMBER; diff --git a/src/file/mail.cpp b/src/file/mail.cpp index cf5fe26..2a2231b 100644 --- a/src/file/mail.cpp +++ b/src/file/mail.cpp @@ -13,10 +13,12 @@ namespace smtp::file manage::MailsSet Mail::Read() const { + static const std::string METHOD_NAME = "Read mails"; + std::ifstream mail_file{ mPathFile, std::fstream::in }; if ( !mail_file.is_open() ) { - manage::Logger::LogError( "Unable to open file to read " + mPathFile ); + logger::LoggerSet::GetInstance()->LogError( METHOD_NAME, "Unable to open file to read " + mPathFile ); return {}; } std::string line{}; @@ -35,10 +37,12 @@ namespace smtp::file bool Mail::Write( manage::MailsSet const& data ) const { + static const std::string METHOD_NAME = "Write mails"; + std::ofstream mail_file{ mPathFile, std::fstream::out | std::fstream::trunc }; if ( !mail_file.is_open() ) { - manage::Logger::LogError( "Unable to open file to write " + mPathFile ); + logger::LoggerSet::GetInstance()->LogError( METHOD_NAME, "Unable to open file to write " + mPathFile ); return false; } for( const auto& mail : data ) diff --git a/src/file/settings.cpp b/src/file/settings.cpp index 83f8322..70f3cf7 100644 --- a/src/file/settings.cpp +++ b/src/file/settings.cpp @@ -8,51 +8,53 @@ namespace smtp::file // //Constructors // - Settings::Settings( std::string const& path_file, checker::RegistratorSettings const& registrator_errors ) - : mPathFile( path_file ) - , mRegistratorErrors( registrator_errors ) - { + Settings::Settings( std::string const& path_file, checker::RegistratorSettings const& registrator_errors ) + : mPathFile( path_file ) + , mRegistratorErrors( registrator_errors ) + { - } + } // //Public methods // - manage::SettingsFields Settings::Read() const - { - auto parsed_store = GetParsedStore(); - return converter::Full{}.Convert( parsed_store ); - } + manage::SettingsFields Settings::Read() const + { + auto parsed_store = GetParsedStore(); + return converter::Full{}.Convert( parsed_store ); + } - bool Settings::Write( manage::SettingsFields const& settings_fields ) const - { - auto parsed_data = converter::Full{}.Convert( settings_fields ); + bool Settings::Write( manage::SettingsFields const& settings_fields ) const + { + auto parsed_data = converter::Full{}.Convert( settings_fields ); return mRegistratorErrors.Check( parsed_data ) && SetParsedData( parsed_data ); - } + } // //Private methods // manage::SettingsFileDataType Settings::GetParsedStore() const - { - std::ifstream settings_file{ mPathFile, std::fstream::in }; - if ( !settings_file.is_open() ) - { - manage::Logger::LogError( "Unable to open file to read " + mPathFile ); - return {}; - } + { + static const std::string METHOD_NAME = "Read settings"; + + std::ifstream settings_file{mPathFile, std::fstream::in}; + if( !settings_file.is_open()) + { + logger::LoggerSet::GetInstance()->LogError( METHOD_NAME, "Unable to open file to read " + mPathFile ); + return {}; + } auto result = GetDataFromFile( settings_file ); settings_file.close(); - return mRegistratorErrors.Check(result) ? result : manage::SettingsFileDataType{}; - } + return mRegistratorErrors.Check( result ) ? result : manage::SettingsFileDataType{}; + } manage::SettingsFileDataType Settings::GetDataFromFile( std::ifstream& settings_file ) const { std::string line{}; manage::SettingsFileDataType result; - while ( std::getline( settings_file, line ) ) + while( std::getline( settings_file, line )) { auto parsed_data = parser::Settings{}.Parse( line ); result.insert( parsed_data ); @@ -61,21 +63,23 @@ namespace smtp::file } bool Settings::SetParsedData( manage::SettingsFileDataType const& parsed_data ) const - { - std::ofstream settings_file{ mPathFile, std::fstream::out | std::fstream::trunc }; - if ( !settings_file.is_open() ) - { - manage::Logger::LogError( "Unable to open file to write " + mPathFile ); - return false; - } - for( const auto& data : parsed_data ) - { - auto line = BuildParam( data ); - settings_file << line << "\n"; - } - settings_file.close(); - return true; - } + { + static const std::string METHOD_NAME = "Write settings"; + + std::ofstream settings_file{mPathFile, std::fstream::out | std::fstream::trunc}; + if( !settings_file.is_open()) + { + logger::LoggerSet::GetInstance()->LogError( METHOD_NAME, "Unable to open file to write " + mPathFile ); + return false; + } + for( const auto& data: parsed_data ) + { + auto line = BuildParam( data ); + settings_file << line << "\n"; + } + settings_file.close(); + return true; + } std::string Settings::BuildParam( std::pair < std::string, std::string > const& data ) const { diff --git a/src/logger/journal.cpp b/src/logger/journal.cpp index 001e87d..ba002b0 100644 --- a/src/logger/journal.cpp +++ b/src/logger/journal.cpp @@ -4,7 +4,7 @@ namespace smtp::logger { - void Journal::LogError( std::string const& message ) const + void Journal::LogError( std::string const& method, std::string const& message ) const { std::cout << message << std::endl; } diff --git a/src/logger/journal.hpp b/src/logger/journal.hpp index 1b06b8c..0f1e6bb 100644 --- a/src/logger/journal.hpp +++ b/src/logger/journal.hpp @@ -11,7 +11,7 @@ namespace smtp::logger Journal() = default; ~Journal() override = default; - void LogError( std::string const& message ) const override; + void LogError( std::string const& method, std::string const& message ) const override; }; } diff --git a/src/logger/logger_set.cpp b/src/logger/logger_set.cpp index 6ea6d58..d5d45a0 100644 --- a/src/logger/logger_set.cpp +++ b/src/logger/logger_set.cpp @@ -33,11 +33,11 @@ namespace smtp::logger mInstance.reset( new LoggerSet( loggers )); } - void LoggerSet::LogError( std::string const& message ) + void LoggerSet::LogError( std::string const& method, std::string const& message ) { for( const auto& logger: mLogger ) { - logger->LogError( message ); + logger->LogError( method, message ); } } diff --git a/src/logger/logger_set.hpp b/src/logger/logger_set.hpp index fb74e56..e482042 100644 --- a/src/logger/logger_set.hpp +++ b/src/logger/logger_set.hpp @@ -19,7 +19,7 @@ namespace smtp::logger LoggerSet( const LoggerSet& ) = delete; LoggerSet& operator=( LoggerSet& ) = delete; - void LogError( std::string const& message ); + void LogError( std::string const& method, std::string const& message ); static std::shared_ptr < LoggerSet > GetInstance(); }; } diff --git a/src/logger/phosphor.cpp b/src/logger/phosphor.cpp index d3c81b0..f3575c4 100644 --- a/src/logger/phosphor.cpp +++ b/src/logger/phosphor.cpp @@ -1,15 +1,13 @@ -#include -#include -#include +#include #include "phosphor.hpp" namespace smtp::logger { - void Phosphor::LogError( std::string const& message ) const + void Phosphor::LogError( std::string const& method, std::string const& message ) const { - using InternalFailure = - sdbusplus::xyz::openbmc_project::Common::Error::InternalFailure; - phosphor::logging::commit(message); + auto join_message = method + ',' + message; + const auto* msg = "OpenBMC.0.1.SMTPError"; + lg2::error("SMTP error", "REDFISH_MESSAGE_ID", msg, "REDFISH_MESSAGE_ARGS", join_message); } } \ No newline at end of file diff --git a/src/logger/phosphor.hpp b/src/logger/phosphor.hpp index dd536b5..f40ddf2 100644 --- a/src/logger/phosphor.hpp +++ b/src/logger/phosphor.hpp @@ -11,6 +11,6 @@ namespace smtp::logger Phosphor() = default; ~Phosphor() override = default; - void LogError( std::string const& message ) const override; + void LogError( std::string const& method, std::string const& message ) const override; }; } diff --git a/src/logger/types/ilogger.hpp b/src/logger/types/ilogger.hpp index 9f88668..5dce1d5 100644 --- a/src/logger/types/ilogger.hpp +++ b/src/logger/types/ilogger.hpp @@ -9,7 +9,8 @@ namespace smtp::logger::types public: virtual ~ILogger() = default; - virtual void LogError( std::string const& message ) const = 0; + virtual void LogError( std::string const& method, std::string const& message ) const = 0; }; - using ILoggerPtr = std::shared_ptr; + + using ILoggerPtr = std::shared_ptr < ILogger >; } \ No newline at end of file diff --git a/src/message/sender.cpp b/src/message/sender.cpp index 5845628..85c5d5d 100644 --- a/src/message/sender.cpp +++ b/src/message/sender.cpp @@ -29,6 +29,8 @@ namespace smtp::message bool Sender::Send( std::string const& mail_from, std::string const& subject, std::string const& text ) { + static const std::string METHOD_NAME = "Send message"; + CURLcode result = CURLE_OK; curl_slist* recipients = nullptr; WriteThis upload_ctx{}; @@ -38,14 +40,14 @@ namespace smtp::message mSettingsStorage.ReloadSettings(); if( !InitCurl( curl, upload_ctx, mail_from )) { - logger::LoggerSet::GetInstance()->LogError( "Error to initializate curl" ); + logger::LoggerSet::GetInstance()->LogError( METHOD_NAME, "Error to initializate message service" ); return false; } //TODO раздать mail_to другим методам auto mail_to = mMailTo.GetMailToSend(); if( mail_to.empty()) { - logger::LoggerSet::GetInstance()->LogError( "We haven't any mail to" ); + logger::LoggerSet::GetInstance()->LogError( METHOD_NAME, "We haven't any mail to" ); return false; } FillRecipients( curl, recipients ); @@ -56,7 +58,7 @@ namespace smtp::message if( result != CURLE_OK ) { std::string message = "Error to send messge: " + std::string( curl_easy_strerror( result )); - logger::LoggerSet::GetInstance()->LogError( message ); + logger::LoggerSet::GetInstance()->LogError( METHOD_NAME, message ); return false; } //TODO сделать деинициализацию через регистратор деинициализаторов -- cgit v1.2.3