From 86dbd004db709d9a6852d14f0e2ce3b9b2c2ca07 Mon Sep 17 00:00:00 2001 From: Thor Harald Johansen Date: Sat, 6 Jun 2020 03:57:08 +0200 Subject: [PATCH] Session and message stuff in main file --- src/bogofilter-smtpd.cpp | 37 +++++++++++++++++++++++++++++++------ 1 file changed, 31 insertions(+), 6 deletions(-) diff --git a/src/bogofilter-smtpd.cpp b/src/bogofilter-smtpd.cpp index 6f06a5d..4ed232e 100644 --- a/src/bogofilter-smtpd.cpp +++ b/src/bogofilter-smtpd.cpp @@ -12,7 +12,7 @@ const bool debug = true; using namespace std; -mail::session_map_t mail_messages; +mail::session_map_t sessions; void on_ready(protocol::protocol_t& protocol, protocol::message_t message) { debug && cerr << "Ready" << endl; @@ -23,15 +23,40 @@ void on_ready(protocol::protocol_t& protocol, protocol::message_t message) { } void on_data(protocol::protocol_t& protocol, protocol::message_t message) { - mail_messages.emplace(protocol::session_from(message), mail::message_t{}); + sessions.emplace(protocol::session_key_from(message), mail::session_t{}); } -void on_dataline(protocol::protocol_t& protocol, protocol::message_t message) { - debug && cerr << "Dataline" << endl; +void on_data_line(protocol::protocol_t& protocol, protocol::message_t message) { + auto tokens = protocol::token::decompose(message.input); + auto& session = sessions.at(protocol::session_key_from(tokens)); + auto& data_line = tokens.at(7); + + if(!session.has_header) { + if(data_line == "") { + session.has_header = true; + return; + } + + session.message.header.push_back(data_line); + return; + } + + if(data_line == ".") { + return; + } + + if(data_line == "..") { + session.message.body.push_back("."); + return; + } + + session.message.body.push_back(data_line); } void on_commit(protocol::protocol_t& protocol, protocol::message_t message) { - + auto session_key = protocol::session_key_from(message); + auto& session = sessions.at(session_key); + protocol.submit_message(session_key, session.message.header, session.message.body); } int main(int argc, char** argv) { @@ -40,7 +65,7 @@ int main(int argc, char** argv) { protocol::handler_map_t handlers; handlers.emplace("config|ready", on_ready); handlers.emplace("filter|*|*|smtp-in|data", on_data); - handlers.emplace("filter|*|*|smtp-in|data-line", on_dataline); + handlers.emplace("filter|*|*|smtp-in|data-line", on_data_line); handlers.emplace("filter|*|*|smtp-in|commit", on_commit); protocol.set_handlers(handlers);