#include #include "EPoll.h" #include "ConsoleServer.h" #include "Exception.h" #include "File.h" #include "Log.h" #include "IPAddress.h" #include "MailFileSystem.h" #include "SMTPServer.h" #include "POP3Server.h" #include "IMAPServer.h" #include "SendMail2.h" #include #include int main(int argc, char **argv) { coreutils::Log(new coreutils::File("/var/log/barantmail.log", O_WRONLY | O_APPEND | O_CREAT, 0644)); coreutils::Log(coreutils::LOG_INFO) << "BMAMAIL called with link " << argv[0]; std::string arg = argv[0]; if(arg.substr(arg.find_last_of("\\/") + 1) == "sendmail2") { try { coreutils::Log(coreutils::LOG_INFO) << "Starting Mail Injector. Build " << __DATE__ << " " << __TIME__; char buffer[1000000]; int index = 0; int len = 0; while((len = read(0, &buffer[index], 1000000)) > 0) index += len; coreutils::MString message(buffer, index); coreutils::Log(coreutils::LOG_DEBUG_1) << "Number of bytes read: " << index; core::EPoll ePoll; ePoll.start(1, 1000); mail::SendMail2 mail2(ePoll, argv[1], argv[2], message); mail2.send(); coreutils::Log(coreutils::LOG_DEBUG_1) << "waiting..."; coreutils::MString rc(mail2.wait()); coreutils::Log(coreutils::LOG_DEBUG_1) << "rc: " << rc; std::cout << rc; } catch(coreutils::Exception exception) { std::cout << exception.text << " Error reason is '" << strerror(exception.errorNumber) << "' in file " << exception.file << " at line " << exception.line << std::endl; } } else { try { coreutils::Log(coreutils::LOG_INFO) << "BMAMail Server starting. Build " << __DATE__ << " " << __TIME__; std::string hostName = "localhost"; std::string ipAddress = "0.0.0.0"; coreutils::ZString mailPath("/var/mail"); mail::MailFileSystem mailFileSystem(mailPath); core::EPoll ePoll; ePoll.start(1, 1000); mail::SMTPServer smtpServer(ePoll, hostName, mailFileSystem, core::IPAddress(ipAddress, 9025)); // mail::POP3Server pop3Server(ePoll, hostName, mailFileSystem, core::IPAddress(ipAddress, 110)); // mail::IMAPServer imapServer(ePoll, hostName, mailFileSystem, core::IPAddress(ipAddress, 143)); core::ConsoleServer consoleServer(ePoll, core::IPAddress(ipAddress, 1027)); consoleServer.commands.add(consoleServer.commands, "help"); consoleServer.commands.add(smtpServer.commands, "smtp"); while(true) sleep(3600); ePoll.stop(); } catch(coreutils::Exception exception) { std::cout << exception.text << " Error reason is '" << strerror(exception.errorNumber) << "' in file " << exception.file << " at line " << exception.line << std::endl; } } }