summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoreportnov <eportnov@ibs.ru>2022-09-12 16:46:44 +0300
committereportnov <eportnov@ibs.ru>2022-09-12 16:46:44 +0300
commitcdb7ae4c729b6a6c51b57eeefd21574952a4b767 (patch)
treec465900180840832e241ca5419dd90b429459588
parent9fa4addff6f90a8b5697a594e034f5517d64dd25 (diff)
downloadobmc-sila-smtp-cdb7ae4c729b6a6c51b57eeefd21574952a4b767.tar.xz
refactoringfeature/refactor
-rw-r--r--CMakeLists.txt46
-rw-r--r--src/main.cpp4
-rw-r--r--src/message/builder/cc.cpp (renamed from src/message_builder/cc.cpp)2
-rw-r--r--src/message/builder/cc.hpp (renamed from src/message_builder/cc.hpp)4
-rw-r--r--src/message/builder/date.cpp (renamed from src/message_builder/date.cpp)2
-rw-r--r--src/message/builder/date.hpp (renamed from src/message_builder/date.hpp)4
-rw-r--r--src/message/builder/from.cpp (renamed from src/message_builder/from.cpp)2
-rw-r--r--src/message/builder/from.hpp (renamed from src/message_builder/from.hpp)4
-rw-r--r--src/message/builder/mail_to.cpp (renamed from src/message_builder/mail_to.cpp)2
-rw-r--r--src/message/builder/mail_to.hpp (renamed from src/message_builder/mail_to.hpp)4
-rw-r--r--src/message/builder/subject.cpp (renamed from src/message_builder/subject.cpp)3
-rw-r--r--src/message/builder/subject.hpp (renamed from src/message_builder/subject.hpp)4
-rw-r--r--src/message/builder/text.cpp (renamed from src/message_builder/text.cpp)2
-rw-r--r--src/message/builder/text.hpp (renamed from src/message_builder/text.hpp)4
-rw-r--r--src/message/builder/types/idecorator.hpp (renamed from src/message_builder/types/idecorator.hpp)2
-rw-r--r--src/message/builder/types/imessage_builder.hpp (renamed from src/message_builder/types/imessage_build.hpp)2
-rw-r--r--src/message/sender.cpp127
-rw-r--r--src/message/sender.hpp38
-rw-r--r--src/message_sender.cpp123
-rw-r--r--src/message_sender.hpp48
-rw-r--r--src/service/settings.cpp54
-rw-r--r--src/service/settings.hpp36
-rw-r--r--src/service/smtp.cpp99
-rw-r--r--src/service/smtp.hpp (renamed from src/smtp_service.hpp)19
-rw-r--r--src/settings_storage.hpp14
-rw-r--r--src/smtp_service.cpp96
26 files changed, 412 insertions, 333 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 4d93f95..7b4acc3 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -76,28 +76,34 @@ endif()
include_directories(src)
set(SRC_DIR src)
+set(MESSAGE_DIR src/message)
+set(SERVICE_DIR src/service)
+
set(SRC_FILES
${SRC_DIR}/main.cpp
- ${SRC_DIR}/smtp_service.cpp
- ${SRC_DIR}/smtp_service.hpp
- ${SRC_DIR}/message_sender.hpp
- ${SRC_DIR}/message_sender.cpp
- ${SRC_DIR}/settings_storage.hpp
-
- ${SRC_DIR}/message_builder/date.hpp
- ${SRC_DIR}/message_builder/date.cpp
- ${SRC_DIR}/message_builder/mail_to.hpp
- ${SRC_DIR}/message_builder/mail_to.cpp
- ${SRC_DIR}/message_builder/cc.hpp
- ${SRC_DIR}/message_builder/cc.cpp
- ${SRC_DIR}/message_builder/subject.hpp
- ${SRC_DIR}/message_builder/subject.cpp
- ${SRC_DIR}/message_builder/text.hpp
- ${SRC_DIR}/message_builder/text.cpp
- ${SRC_DIR}/message_builder/from.hpp
- ${SRC_DIR}/message_builder/from.cpp
-
- ${SRC_DIR}/message_builder/types/idecorator.hpp
+
+ ${SERVICE_DIR}/smtp.cpp
+ ${SERVICE_DIR}/smtp.hpp
+ ${SERVICE_DIR}/settings.hpp
+ ${SERVICE_DIR}/settings.cpp
+
+ ${MESSAGE_DIR}/sender.hpp
+ ${MESSAGE_DIR}/sender.cpp
+
+ ${MESSAGE_DIR}/builder/date.hpp
+ ${MESSAGE_DIR}/builder/date.cpp
+ ${MESSAGE_DIR}/builder/mail_to.hpp
+ ${MESSAGE_DIR}/builder/mail_to.cpp
+ ${MESSAGE_DIR}/builder/cc.hpp
+ ${MESSAGE_DIR}/builder/cc.cpp
+ ${MESSAGE_DIR}/builder/subject.hpp
+ ${MESSAGE_DIR}/builder/subject.cpp
+ ${MESSAGE_DIR}/builder/text.hpp
+ ${MESSAGE_DIR}/builder/text.cpp
+ ${MESSAGE_DIR}/builder/from.hpp
+ ${MESSAGE_DIR}/builder/from.cpp
+ ${MESSAGE_DIR}/builder/types/imessage_builder.hpp
+ ${MESSAGE_DIR}/builder/types/idecorator.hpp
)
add_executable(smtp ${SRC_FILES})
diff --git a/src/main.cpp b/src/main.cpp
index ba2848d..96c06df 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -1,13 +1,13 @@
#include <sdbusplus/asio/connection.hpp>
-#include "smtp_service.hpp"
+#include "service/smtp.hpp"
int main()
{
boost::asio::io_service io_context;
auto connection = std::make_shared<sdbusplus::asio::connection>( io_context );
- smtp::SmtpService smtp{ connection };
+ smtp::service::Smtp smtp{ connection };
io_context.run();
return 0;
diff --git a/src/message_builder/cc.cpp b/src/message/builder/cc.cpp
index c686ef2..55d70ff 100644
--- a/src/message_builder/cc.cpp
+++ b/src/message/builder/cc.cpp
@@ -1,6 +1,6 @@
#include "cc.hpp"
-namespace smtp::message_builder
+namespace smtp::message::builder
{
Cc::Cc( std::list<std::string> const& mail_to )
: mMailTo( mail_to )
diff --git a/src/message_builder/cc.hpp b/src/message/builder/cc.hpp
index 5062c37..340c7cd 100644
--- a/src/message_builder/cc.hpp
+++ b/src/message/builder/cc.hpp
@@ -3,9 +3,9 @@
#include <list>
#include "types/idecorator.hpp"
-#include "types/imessage_build.hpp"
+#include "types/imessage_builder.hpp"
-namespace smtp::message_builder
+namespace smtp::message::builder
{
class Cc : public types::IDecorator<types::IMessageBuilder>
{
diff --git a/src/message_builder/date.cpp b/src/message/builder/date.cpp
index 96ee2e1..3268935 100644
--- a/src/message_builder/date.cpp
+++ b/src/message/builder/date.cpp
@@ -1,6 +1,6 @@
#include "date.hpp"
-namespace smtp::message_builder
+namespace smtp::message::builder
{
std::string Date::Get() const
{
diff --git a/src/message_builder/date.hpp b/src/message/builder/date.hpp
index 00fb6cb..31908ac 100644
--- a/src/message_builder/date.hpp
+++ b/src/message/builder/date.hpp
@@ -1,9 +1,9 @@
#pragma once
#include "types/idecorator.hpp"
-#include "types/imessage_build.hpp"
+#include "types/imessage_builder.hpp"
-namespace smtp::message_builder
+namespace smtp::message::builder
{
class Date : public types::IDecorator<types::IMessageBuilder>
{
diff --git a/src/message_builder/from.cpp b/src/message/builder/from.cpp
index 094e1a2..b19515a 100644
--- a/src/message_builder/from.cpp
+++ b/src/message/builder/from.cpp
@@ -1,6 +1,6 @@
#include "from.hpp"
-namespace smtp::message_builder
+namespace smtp::message::builder
{
From::From( std::string const& mail_to )
diff --git a/src/message_builder/from.hpp b/src/message/builder/from.hpp
index 4605469..d1f0b21 100644
--- a/src/message_builder/from.hpp
+++ b/src/message/builder/from.hpp
@@ -1,9 +1,9 @@
#pragma once
#include "types/idecorator.hpp"
-#include "types/imessage_build.hpp"
+#include "types/imessage_builder.hpp"
-namespace smtp::message_builder
+namespace smtp::message::builder
{
class From : public types::IDecorator<types::IMessageBuilder>
{
diff --git a/src/message_builder/mail_to.cpp b/src/message/builder/mail_to.cpp
index c73e2a7..dab1b7f 100644
--- a/src/message_builder/mail_to.cpp
+++ b/src/message/builder/mail_to.cpp
@@ -1,6 +1,6 @@
#include "mail_to.hpp"
-namespace smtp::message_builder
+namespace smtp::message::builder
{
MailTo::MailTo( std::string const& mail_to)
: mMailTo( mail_to )
diff --git a/src/message_builder/mail_to.hpp b/src/message/builder/mail_to.hpp
index 0245fd6..5d60d97 100644
--- a/src/message_builder/mail_to.hpp
+++ b/src/message/builder/mail_to.hpp
@@ -3,9 +3,9 @@
#include <list>
#include "types/idecorator.hpp"
-#include "types/imessage_build.hpp"
+#include "types/imessage_builder.hpp"
-namespace smtp::message_builder
+namespace smtp::message::builder
{
class MailTo : public types::IDecorator<types::IMessageBuilder>
{
diff --git a/src/message_builder/subject.cpp b/src/message/builder/subject.cpp
index 84e7e43..166bca4 100644
--- a/src/message_builder/subject.cpp
+++ b/src/message/builder/subject.cpp
@@ -1,6 +1,6 @@
#include "subject.hpp"
-namespace smtp::message_builder
+namespace smtp::message::builder
{
Subject::Subject( std::string const& subject )
: mSubject(subject)
@@ -15,6 +15,7 @@ namespace smtp::message_builder
{
result = mBase->Get();
}
+
result += "Subject: " + mSubject + "\r\n";
return result;
}
diff --git a/src/message_builder/subject.hpp b/src/message/builder/subject.hpp
index bf8bfab..8153bc8 100644
--- a/src/message_builder/subject.hpp
+++ b/src/message/builder/subject.hpp
@@ -1,9 +1,9 @@
#pragma once
#include "types/idecorator.hpp"
-#include "types/imessage_build.hpp"
+#include "types/imessage_builder.hpp"
-namespace smtp::message_builder
+namespace smtp::message::builder
{
class Subject : public types::IDecorator<types::IMessageBuilder>
{
diff --git a/src/message_builder/text.cpp b/src/message/builder/text.cpp
index e5e6bf0..c478b7d 100644
--- a/src/message_builder/text.cpp
+++ b/src/message/builder/text.cpp
@@ -1,6 +1,6 @@
#include "text.hpp"
-namespace smtp::message_builder
+namespace smtp::message::builder
{
Text::Text( std::string const& text)
: mText( text )
diff --git a/src/message_builder/text.hpp b/src/message/builder/text.hpp
index 4df90e1..9715656 100644
--- a/src/message_builder/text.hpp
+++ b/src/message/builder/text.hpp
@@ -1,9 +1,9 @@
#pragma once
#include "types/idecorator.hpp"
-#include "types/imessage_build.hpp"
+#include "types/imessage_builder.hpp"
-namespace smtp::message_builder
+namespace smtp::message::builder
{
class Text : public types::IDecorator<types::IMessageBuilder>
{
diff --git a/src/message_builder/types/idecorator.hpp b/src/message/builder/types/idecorator.hpp
index 3fabcd4..19284ac 100644
--- a/src/message_builder/types/idecorator.hpp
+++ b/src/message/builder/types/idecorator.hpp
@@ -2,7 +2,7 @@
#include <memory>
-namespace smtp::message_builder::types
+namespace smtp::message::builder::types
{
/**
diff --git a/src/message_builder/types/imessage_build.hpp b/src/message/builder/types/imessage_builder.hpp
index 4c4f1b8..701f5f9 100644
--- a/src/message_builder/types/imessage_build.hpp
+++ b/src/message/builder/types/imessage_builder.hpp
@@ -2,7 +2,7 @@
#include <string>
-namespace smtp::message_builder::types
+namespace smtp::message::builder::types
{
class IMessageBuilder
{
diff --git a/src/message/sender.cpp b/src/message/sender.cpp
new file mode 100644
index 0000000..cabcb8f
--- /dev/null
+++ b/src/message/sender.cpp
@@ -0,0 +1,127 @@
+#include <string.h>
+
+#include "sender.hpp"
+#include "builder/date.hpp"
+#include "builder/mail_to.hpp"
+#include "builder/cc.hpp"
+#include "builder/subject.hpp"
+#include "builder/text.hpp"
+#include "builder/from.hpp"
+#include <iostream>
+
+namespace smtp::message
+{
+ static std::string mText = "";
+
+ //
+ // Constructors/Destructors
+ //
+ Sender::Sender( service::Settings const& settings_storage )
+ : mSettingsStorage( settings_storage )
+ {
+
+ }
+
+ //
+ //Public methods
+ //
+
+ bool Sender::Send( std::string const& mail_from, std::string const& mail_to, std::list<std::string> const& cc,
+ 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 сделать инициализацию через регистратор инициализаторов
+ if( !InitCurl( curl, upload_ctx, mail_from ) )
+ {
+ return false;
+ }
+ FillRecipients( curl, mail_to, cc, recipients );
+ UpdateMailText( mail_from, mail_to, cc, subject, text);
+
+ result = curl_easy_perform(curl);
+
+ if ( result != CURLE_OK )
+ {
+ //TODO LOG
+ fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror( result ));
+ 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 )
+ {
+ //TODO LOG
+ 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& mail_to, std::list<std::string> const& cc,
+ std::string const& subject, std::string const& text ) const
+ {
+ auto text_decorator = std::make_shared<builder::Text>( text );
+ text_decorator->Apply( std::make_shared<builder::Subject>( subject ) )
+ .Apply( std::make_shared<builder::Cc>( cc ) )
+ .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();
+ std::cout << mText << std::endl;
+ }
+
+ void Sender::FillRecipients( CURL* curl, std::string const& mail_to, std::list<std::string> const& cc, curl_slist* recipients )
+ {
+ recipients = curl_slist_append( recipients, mail_to.c_str() );
+
+ for( const auto& recipient : cc )
+ {
+ 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<WriteThis*>( userp );
+ if( size * nmemb < 1 || pooh->counter++ > 0 )
+ {
+ return 0;
+ }
+ memcpy( ptr, mText.c_str(), mText.size() );
+ return mText.size();
+ }
+}
diff --git a/src/message/sender.hpp b/src/message/sender.hpp
new file mode 100644
index 0000000..e75faa8
--- /dev/null
+++ b/src/message/sender.hpp
@@ -0,0 +1,38 @@
+#pragma once
+
+#include <list>
+#include <memory>
+
+#include <curl/curl.h>
+
+#include "service/settings.hpp"
+
+namespace smtp::message
+{
+ struct WriteThis
+ {
+ int counter;
+ };
+
+ class Sender
+ {
+ public:
+ Sender( service::Settings const& settings_storage );
+ ~Sender() = default;
+
+ bool Send( std::string const& mail_from, std::string const& mail_to, std::list<std::string> const& cc,
+ std::string const& subject, std::string const& text );
+ private:
+ void UpdateMailText( std::string const& mail_from, std::string const& mail_to, std::list<std::string> const& cc,
+ std::string const& subject, std::string const& textt ) const;
+ void InitSenders( std::string const& mail_from, std::list<std::string> const& mail_to );
+ void FillRecipients( CURL* curl, std::string const& mail_to, std::list<std::string> const& cc, curl_slist* recipients );
+ std::string GetHostPortData() const;
+ static size_t ReadCallBack( void *ptr, size_t size, size_t nmemb, void *userp );
+
+ service::Settings const& mSettingsStorage;
+ bool InitCurl( CURL* curl, WriteThis const& upload_ctx, std::string const& mail_from );
+ };
+}
+
+
diff --git a/src/message_sender.cpp b/src/message_sender.cpp
deleted file mode 100644
index 5b2950c..0000000
--- a/src/message_sender.cpp
+++ /dev/null
@@ -1,123 +0,0 @@
-#include <string.h>
-
-#include "message_sender.hpp"
-#include "message_builder/date.hpp"
-#include "message_builder/mail_to.hpp"
-#include "message_builder/cc.hpp"
-#include "message_builder/subject.hpp"
-#include "message_builder/text.hpp"
-#include "message_builder/from.hpp"
-
-namespace smtp
-{
- static std::string mText = "";
-
- //
- // Constructors/Destructors
- //
- MessageSender::MessageSender( SettingsStorage const& settings_storage )
- : mSettingsStorage( settings_storage )
- {
-
- }
-
- //
- //Public methods
- //
- bool MessageSender::Send( std::string const& mail_from, std::string const& mail_to, std::list<std::string> const& cc,
- std::string const& subject, std::string const& text )
- {
- CURLcode result = CURLE_OK;
-
- struct curl_slist *recipients = NULL;
- struct WriteThis upload_ctx;
-
- upload_ctx.counter = 0;
-
- auto curl = curl_easy_init();
-
- if( !curl )
- {
- //Error
- return false;
- }
- mText = GetText( mail_from, mail_to, cc, subject, text);
- FillRecipients( curl, mail_to, cc, recipients );
-
- curl_easy_setopt(curl, CURLOPT_USERNAME, mSettingsStorage.username.c_str());
- curl_easy_setopt(curl, CURLOPT_PASSWORD, mSettingsStorage.password.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);
-
- result = curl_easy_perform(curl);
-
- if (result != CURLE_OK)
- {
- fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(result));
- return false;
- }
-
- curl_slist_free_all(recipients);
- curl_easy_cleanup(curl);
- return true;
- }
-
- //
- //Private methods
- //
- std::string MessageSender::GetText( std::string const& mail_from, std::string const& mail_to, std::list<std::string> const& cc,
- std::string const& subject, std::string const& text ) const
- {
- auto text_decorator = std::make_shared<message_builder::Text>( text );
- text_decorator->Apply( std::make_shared<message_builder::Subject>( subject ) )
- .Apply( std::make_shared<message_builder::Cc>( cc ) )
- .Apply( std::make_shared<message_builder::From>( mail_from ) )
- .Apply( std::make_shared<message_builder::MailTo>( mail_to ) )
- .Apply( std::make_shared<message_builder::Date>() );
- return text_decorator->Get();
- }
-
- void MessageSender::FillRecipients( CURL* curl, std::string const& mail_to, std::list<std::string> const& cc, curl_slist* recipients )
- {
- recipients = curl_slist_append( recipients, mail_to.c_str() );
-
- for( const auto& recipient : cc )
- {
- recipients = curl_slist_append( recipients, recipient.c_str() );
- }
-
- curl_easy_setopt( curl, CURLOPT_MAIL_RCPT, recipients );
- }
-
- std::string MessageSender::GetHostPortData() const
- {
- auto result = "smtp://" + mSettingsStorage.host;
- if( !mSettingsStorage.port.empty() )
- {
- result += ":" + mSettingsStorage.port;
- }
- return result;
- }
-
- size_t MessageSender::ReadCallBack( void *ptr, size_t size, size_t nmemb, void *userp )
- {
- struct WriteThis *pooh = reinterpret_cast<WriteThis*>( userp );
- if( size * nmemb < 1 )
- {
- return 0;
- }
- if( pooh->counter++ > 0 )
- {
- return 0;
- }
- memcpy( ptr, mText.c_str(), mText.size() );
- return mText.size();
- }
-}
diff --git a/src/message_sender.hpp b/src/message_sender.hpp
deleted file mode 100644
index 0728f0e..0000000
--- a/src/message_sender.hpp
+++ /dev/null
@@ -1,48 +0,0 @@
-#pragma once
-
-#include <list>
-#include <memory>
-
-#include <curl/curl.h>
-
-#include "settings_storage.hpp"
-
-namespace smtp
-{
- struct WriteThis
- {
- int counter;
- };
-
- class MessageSender
- {
- public:
- MessageSender( SettingsStorage const& settings_storage );
- ~MessageSender() = default;
-
- bool Send( std::string const& mail_from, std::string const& mail_to, std::list<std::string> const& cc,
- std::string const& subject, std::string const& text );
- private:
- std::string GetText( std::string const& mail_from, std::string const& mail_to, std::list<std::string> const& cc,
- std::string const& subject, std::string const& textt ) const;
- void InitSenders( std::string const& mail_from, std::list<std::string> const& mail_to );
- void FillRecipients( CURL* curl, std::string const& mail_to, std::list<std::string> const& cc, curl_slist* recipients );
- std::string GetHostPortData() const;
- void ProcessSending(const std::string &mail_from, const std::list<std::string> &mail_to, const std::string &subject, const std::string &text);
- timeval GetNowTime() const noexcept;
- bool IsTimeOut( timeval const& start_time ) const noexcept;
- long GetTimeDiff( timeval const& left, timeval const& right ) const noexcept;
- timeval GetTimeout() const;
- int ProcessHandle( timeval& timeout ) const;
- void ClearPtrs();
- static size_t ReadCallBack( void *ptr, size_t size, size_t nmemb, void *userp );
-
-// CURL *curl;
-// CURLM *mcurl;
- struct WriteThis pooh;
- struct curl_slist* recipients = NULL;
- SettingsStorage const& mSettingsStorage;
- };
-}
-
-
diff --git a/src/service/settings.cpp b/src/service/settings.cpp
new file mode 100644
index 0000000..075aafa
--- /dev/null
+++ b/src/service/settings.cpp
@@ -0,0 +1,54 @@
+#include "settings.hpp"
+
+namespace smtp::service
+{
+
+ Settings::Settings()
+ : mSettingsFields{}
+ {
+
+ }
+
+ Settings::Settings( SettingsFields data )
+ : mSettingsFields(data)
+ {
+
+ }
+
+ bool Settings::CheckAndSetSettings(SettingsFields data)
+ {
+ mSettingsFields = data;
+ return true;
+ }
+
+ bool Settings::IsNeedAuth() const noexcept
+ {
+ return mSettingsFields.is_need_auth;
+ }
+
+ bool Settings::IsNeedSsl() const noexcept
+ {
+ return mSettingsFields.is_need_ssl;
+ }
+
+ std::string Settings::GetUserName() const
+ {
+ return mSettingsFields.username;
+ }
+
+ std::string Settings::GetPassword() const
+ {
+ return mSettingsFields.password;
+ }
+
+ std::string Settings::GetHost() const
+ {
+ return mSettingsFields.host;
+ }
+
+ std::string Settings::GetPort() const
+ {
+ return mSettingsFields.port;
+ }
+
+}
diff --git a/src/service/settings.hpp b/src/service/settings.hpp
new file mode 100644
index 0000000..b6319f6
--- /dev/null
+++ b/src/service/settings.hpp
@@ -0,0 +1,36 @@
+#pragma once
+
+#include <string>
+
+namespace smtp::service
+{
+ struct SettingsFields
+ {
+ bool is_need_auth;
+ bool is_need_ssl;
+ std::string username;
+ std::string password;
+ std::string host;
+ std::string port;
+ };
+
+ class Settings
+ {
+ public:
+ Settings();
+ explicit Settings( SettingsFields data );
+ ~Settings() = default;
+
+ bool CheckAndSetSettings( SettingsFields data );
+
+ bool IsNeedAuth() const noexcept;
+ bool IsNeedSsl() const noexcept;
+
+ std::string GetUserName() const;
+ std::string GetPassword() const;
+ std::string GetHost() const;
+ std::string GetPort() const;
+ private:
+ SettingsFields mSettingsFields;
+ };
+}
diff --git a/src/service/smtp.cpp b/src/service/smtp.cpp
new file mode 100644
index 0000000..818a4de
--- /dev/null
+++ b/src/service/smtp.cpp
@@ -0,0 +1,99 @@
+#include "smtp.hpp"
+#include "message/sender.hpp"
+
+namespace smtp::service
+{
+ static constexpr char HOST_PROPERTY[] = "Host";
+ static constexpr char USER_PROPERTY[] = "User";
+ static constexpr char PORT_PROPERTY[] = "Port";
+
+ //
+ // Constructors
+ //
+
+ Smtp::Smtp( ConnectionPtr connection )
+ {
+ std::string from{"claiff@mail.ru"};
+ std::string to{"claiff1990@gmail.com"};
+ std::list<std::string> cc{"claiff@mail.ru"};
+ std::string subject{"subject"};
+ std::string text{"text"};
+
+ mSettingsStorage.CheckAndSetSettings({true, true, "claiff@mail.ru","nZZbXq7FbwWAqpPpy3YL", "smtp.mail.ru", "" });
+ message::Sender{ mSettingsStorage }.Send( "claiff@mail.ru", "claiff1990@gmail.com", {"claiff@mail.ru"}, "subject", "text" );
+
+// CreateService( connection );
+// CreateInterface( connection );
+ }
+
+ //
+ // Private methods
+ //
+
+ void Smtp::CreateService( ConnectionPtr connection )
+ {
+ static constexpr char SMTP_BUS_NAME[] = "xyz.openbmc_project.SMTP";
+
+ connection->request_name( SMTP_BUS_NAME );
+ }
+
+ void Smtp::CreateInterface( ConnectionPtr connection )
+ {
+ static constexpr char SMTP_OBJECT_NAME[] = "/xyz/openbmc_project/SMTP";
+ static constexpr char SMTP_INTERFACE_NAME[] = "xyz.openbmc_project.SMTP";
+
+ mObjectServer = std::make_shared<sdbusplus::asio::object_server>( connection );
+ mInterface = mObjectServer->add_interface( SMTP_OBJECT_NAME, SMTP_INTERFACE_NAME );
+
+ AddProperties();
+ AddMethods();
+
+ mInterface->initialize();
+ }
+
+ void Smtp::AddProperties()
+ {
+ mInterface->register_property( HOST_PROPERTY, mSettingsStorage.GetHost(), sdbusplus::asio::PropertyPermission::readOnly );
+ mInterface->register_property( USER_PROPERTY, mSettingsStorage.GetUserName(), sdbusplus::asio::PropertyPermission::readOnly );
+ mInterface->register_property( PORT_PROPERTY, mSettingsStorage.GetPort(), sdbusplus::asio::PropertyPermission::readOnly );
+ }
+
+ void Smtp::AddMethods()
+ {
+ static constexpr char SMTP_SEND_MESSAGE_METHOD_NAME[] = "SendMail";
+ static constexpr char SMTP_CHANGE_PARAMETERS_METHOD_NAME[] = "ChangeParameters";
+
+ mInterface->register_method(SMTP_SEND_MESSAGE_METHOD_NAME, [this]( std::string const& mail_from,
+ std::string const& mail_to,
+ std::list<std::string> const& cc,
+ std::string const& theme,
+ std::string const& text )
+ { return message::Sender{ mSettingsStorage }.Send( mail_from, mail_to, cc, theme, text );});
+
+
+ mInterface->register_method(SMTP_CHANGE_PARAMETERS_METHOD_NAME, [this]( bool is_need_auth,
+ bool is_need_ssl,
+ std::string const& user,
+ std::string const& password,
+ std::string const& host,
+ std::string const& port )
+ { return RefreshSettings( is_need_auth, is_need_ssl, user, password, host, port);});
+ }
+
+ bool Smtp::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 )
+ {
+ auto is_settings_norm = mSettingsStorage.CheckAndSetSettings({is_need_auth, is_need_ssl,
+ user, password, host, port});
+ if(!is_settings_norm)
+ {
+ return false;
+ }
+
+ mInterface->set_property(HOST_PROPERTY, host);
+ mInterface->set_property(USER_PROPERTY, user);
+ mInterface->set_property(PORT_PROPERTY, port);
+ return true;
+ }
+}
diff --git a/src/smtp_service.hpp b/src/service/smtp.hpp
index 7149e3a..c311645 100644
--- a/src/smtp_service.hpp
+++ b/src/service/smtp.hpp
@@ -5,32 +5,31 @@
#include <sdbusplus/asio/connection.hpp>
#include <sdbusplus/asio/object_server.hpp>
-#include "settings_storage.hpp"
+#include "settings.hpp"
-namespace smtp
+namespace smtp::service
{
using ConnectionPtr = std::shared_ptr<sdbusplus::asio::connection>;
using InterfacePtr = std::shared_ptr<sdbusplus::asio::dbus_interface>;
using ObjectServerPtr = std::shared_ptr<sdbusplus::asio::object_server>;
- class SmtpService
+ class Smtp
{
public:
- SmtpService( ConnectionPtr connection );
- ~SmtpService() = default;
+ Smtp( ConnectionPtr connection );
+ ~Smtp() = default;
private:
void FillStorageByDefault();
void CreateService( ConnectionPtr bus );
void CreateInterface( ConnectionPtr connection );
void AddProperties();
void AddMethods();
- bool RefreshSettings(std::string const& user,
- std::string const& password,
- std::string const& host,
- std::string const& port);
+ 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 mInterface;
ObjectServerPtr mObjectServer;
- SettingsStorage mStorage;
+ Settings mSettingsStorage;
};
}
diff --git a/src/settings_storage.hpp b/src/settings_storage.hpp
deleted file mode 100644
index d442d6f..0000000
--- a/src/settings_storage.hpp
+++ /dev/null
@@ -1,14 +0,0 @@
-#pragma once
-
-#include <string>
-
-namespace smtp
-{
- struct SettingsStorage
- {
- std::string username;
- std::string password;
- std::string host;
- std::string port;
- };
-}
diff --git a/src/smtp_service.cpp b/src/smtp_service.cpp
deleted file mode 100644
index 6235e4c..0000000
--- a/src/smtp_service.cpp
+++ /dev/null
@@ -1,96 +0,0 @@
-#include "smtp_service.hpp"
-#include "message_sender.hpp"
-
-namespace smtp
-{
- static constexpr char HOST_PROPERTY[] = "Host";
- static constexpr char USER_PROPERTY[] = "User";
- static constexpr char PORT_PROPERTY[] = "Port";
-
- //
- // Constructors
- //
-
- SmtpService::SmtpService( ConnectionPtr connection )
- {
- FillStorageByDefault();
- CreateService( connection );
- CreateInterface( connection );
- }
-
- //
- // Private methods
- //
-
- void SmtpService::FillStorageByDefault()
- {
- mStorage.host = "";
- mStorage.username = "";
- mStorage.password = "";
- mStorage.port = "";
- }
-
- void SmtpService::CreateService( ConnectionPtr connection )
- {
- static constexpr char SMTP_BUS_NAME[] = "xyz.openbmc_project.SMTP";
-
- connection->request_name( SMTP_BUS_NAME );
- }
-
- void SmtpService::CreateInterface( ConnectionPtr connection )
- {
- static constexpr char SMTP_OBJECT_NAME[] = "/xyz/openbmc_project/SMTP";
- static constexpr char SMTP_INTERFACE_NAME[] = "xyz.openbmc_project.SMTP";
-
- mObjectServer = std::make_shared<sdbusplus::asio::object_server>( connection );
- mInterface = mObjectServer->add_interface( SMTP_OBJECT_NAME, SMTP_INTERFACE_NAME );
-
- AddProperties();
- AddMethods();
-
- mInterface->initialize();
- }
-
- void SmtpService::AddProperties()
- {
- mInterface->register_property( HOST_PROPERTY, mStorage.host, sdbusplus::asio::PropertyPermission::readOnly );
- mInterface->register_property( USER_PROPERTY, mStorage.username, sdbusplus::asio::PropertyPermission::readOnly );
- mInterface->register_property( PORT_PROPERTY, mStorage.port, sdbusplus::asio::PropertyPermission::readOnly );
- }
-
- void SmtpService::AddMethods()
- {
- static constexpr char SMTP_SEND_MESSAGE_METHOD_NAME[] = "SendMail";
- static constexpr char SMTP_CHANGE_PARAMETERS_METHOD_NAME[] = "ChangeParameters";
-
- mInterface->register_method(SMTP_SEND_MESSAGE_METHOD_NAME, [this]( std::string const& mail_from,
- std::string const& mail_to,
- std::list<std::string> const& cc,
- std::string const& theme,
- std::string const& text )
- { return MessageSender{ mStorage }.Send( mail_from, mail_to, cc, theme, text );});
-
-
- mInterface->register_method(SMTP_CHANGE_PARAMETERS_METHOD_NAME, [this]( std::string const& user,
- std::string const& password,
- std::string const& host,
- std::string const& port )
- { return RefreshSettings(user, password, host, port);});
- }
-
- bool SmtpService::RefreshSettings(std::string const& user,
- std::string const& password,
- std::string const& host,
- std::string const& port)
- {
- mStorage.username = user;
- mStorage.password = password;
- mStorage.host = host;
- mStorage.port = port;
-
- mInterface->set_property(HOST_PROPERTY, host);
- mInterface->set_property(USER_PROPERTY, user);
- mInterface->set_property(PORT_PROPERTY, port);
- return true;
- }
-}