Move to new Build System
This commit is contained in:
@@ -0,0 +1,113 @@
|
||||
#include "Protocol.h"
|
||||
#include "MailServer/Message.h"
|
||||
#include <Logging.h>
|
||||
#include <StringAlgorithm.h>
|
||||
#include <sstream>
|
||||
|
||||
|
||||
namespace Protocol {
|
||||
|
||||
Protocol::Protocol(const Util::Context& context) :
|
||||
m_internalState(InternalState::None),
|
||||
m_context(context)
|
||||
{
|
||||
}
|
||||
|
||||
Protocol::Result Protocol::OpenConnection(const std::string& address)
|
||||
{
|
||||
m_address = address;
|
||||
m_internalState = InternalState::Connect;
|
||||
|
||||
std::stringstream ss;
|
||||
ss << "Connection from " << address << std::endl;
|
||||
Logging::Log(Logging::Severity::Info, ss.str());
|
||||
|
||||
return Answer(Protocol::State::Connected, "220 AlarmServer");
|
||||
}
|
||||
|
||||
Protocol::Result Protocol::ProcessMessage(const std::string& message)
|
||||
{
|
||||
if (m_internalState == InternalState::Data)
|
||||
{
|
||||
AppendMessage(message);
|
||||
|
||||
if (StringAlgorithm::iends_with(message, ".\r\n"))
|
||||
{
|
||||
MailServer::Message msg(m_address, m_context, m_message);
|
||||
m_internalState = InternalState::Helo;
|
||||
return Answer(Protocol::State::Connected, "250 Ok");
|
||||
}
|
||||
|
||||
return Answer(Protocol::State::Connected, "");
|
||||
}
|
||||
|
||||
if (m_internalState == InternalState::Auth_login_user)
|
||||
{
|
||||
m_internalState = InternalState::Auth_login_pass;
|
||||
return Answer(Protocol::State::Connected, "334 UGFzc3dvcmQ6");
|
||||
}
|
||||
if (m_internalState == InternalState::Auth_login_pass)
|
||||
{
|
||||
m_internalState = InternalState::Helo;
|
||||
return Answer(Protocol::State::Connected, "235 2.7.0 Authentication successful");
|
||||
}
|
||||
|
||||
if (StringAlgorithm::iequals(message, "quit\r\n"))
|
||||
{
|
||||
m_internalState = InternalState::Disconnect;
|
||||
return Answer(Protocol::State::Disconnected, "221 Bye");
|
||||
}
|
||||
if (StringAlgorithm::istarts_with(message, "helo"))
|
||||
{
|
||||
m_internalState = InternalState::Helo;
|
||||
return Answer(Protocol::State::Connected, "250-AlarmServer\r\n250 AUTH LOGIN");
|
||||
}
|
||||
if (StringAlgorithm::istarts_with(message, "ehlo"))
|
||||
{
|
||||
m_internalState = InternalState::Helo;
|
||||
return Answer(Protocol::State::Connected, "250-AlarmServer\r\n250 AUTH LOGIN");
|
||||
}
|
||||
if (StringAlgorithm::istarts_with(message, "auth login"))
|
||||
{
|
||||
if (m_internalState != InternalState::Helo)
|
||||
return Answer(Protocol::State::Connected, "503 Bad sequence of commands");
|
||||
m_internalState = InternalState::Auth_login_user;
|
||||
return Answer(Protocol::State::Connected, "334 VXNlcm5hbWU6");
|
||||
}
|
||||
if (StringAlgorithm::istarts_with(message, "mail from:"))
|
||||
{
|
||||
if (m_internalState != InternalState::Helo)
|
||||
return Answer(Protocol::State::Connected, "503 Bad sequence of commands");
|
||||
m_internalState = InternalState::Mail_from;
|
||||
return Answer(Protocol::State::Connected, "250 Ok");
|
||||
}
|
||||
if (StringAlgorithm::istarts_with(message, "rcpt to:"))
|
||||
{
|
||||
if (m_internalState != InternalState::Mail_from)
|
||||
return Answer(Protocol::State::Connected, "503 Bad sequence of commands");
|
||||
m_internalState = InternalState::Rcpt_to;
|
||||
return Answer(Protocol::State::Connected, "250 Ok");
|
||||
}
|
||||
if (StringAlgorithm::iequals(message, "data\r\n"))
|
||||
{
|
||||
if (m_internalState != InternalState::Rcpt_to)
|
||||
return Answer(Protocol::State::Connected, "503 Bad sequence of commands");
|
||||
m_internalState = InternalState::Data;
|
||||
return Answer(Protocol::State::Connected, "354 Go ahead");
|
||||
}
|
||||
|
||||
return Answer(Protocol::State::Connected, "502 Error");
|
||||
}
|
||||
|
||||
Protocol::Result Protocol::Answer(Protocol::State::type state, std::string answer) const
|
||||
{
|
||||
return Result(state, answer);
|
||||
}
|
||||
|
||||
void Protocol::AppendMessage(const std::string& message)
|
||||
{
|
||||
m_message.append(message);
|
||||
m_message.append("\n");
|
||||
}
|
||||
|
||||
} // namespace Protocol
|
||||
Reference in New Issue
Block a user