based on reworked servercore.
This commit is contained in:
parent
50eb707f10
commit
db3e82a18e
127
BMAMail.project
127
BMAMail.project
@ -1,127 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<CodeLite_Project Name="BMAMail" Version="10.0.0" InternalType="Console">
|
||||
<Description/>
|
||||
<Dependencies/>
|
||||
<VirtualDirectory Name="src">
|
||||
<File Name="main.cpp"/>
|
||||
<File Name="./BMAIMAPServer.h"/>
|
||||
<File Name="./BMAIMAPSession.h"/>
|
||||
<File Name="./BMAPOP3Server.h"/>
|
||||
<File Name="./BMAPOP3Session.h"/>
|
||||
<File Name="./BMASMTPServer.h"/>
|
||||
<File Name="./BMASMTPSession.h"/>
|
||||
<File Name="__SMTP_HELO.h"/>
|
||||
<File Name="__SMTP_EHLO.h"/>
|
||||
<File Name="__SMTP_AUTH.h"/>
|
||||
<File Name="__SMTP_MAIL.h"/>
|
||||
<File Name="__SMTP_RCPT.h"/>
|
||||
<File Name="__SMTP_DATA.h"/>
|
||||
<File Name="__SMTP_RSET.h"/>
|
||||
<File Name="__SMTP_VRFY.h"/>
|
||||
<File Name="__SMTP_NOOP.h"/>
|
||||
<File Name="__SMTP_QUIT.h"/>
|
||||
<File Name="SMTPService.h"/>
|
||||
<File Name="SMTPSession.h"/>
|
||||
<File Name="POP3Service.h"/>
|
||||
<File Name="IMAPService.h"/>
|
||||
</VirtualDirectory>
|
||||
<Dependencies Name="Debug"/>
|
||||
<Dependencies Name="Release"/>
|
||||
<Settings Type="Executable">
|
||||
<GlobalSettings>
|
||||
<Compiler Options="" C_Options="" Assembler="">
|
||||
<IncludePath Value="."/>
|
||||
</Compiler>
|
||||
<Linker Options="">
|
||||
<LibraryPath Value="."/>
|
||||
</Linker>
|
||||
<ResourceCompiler Options=""/>
|
||||
</GlobalSettings>
|
||||
<Configuration Name="Debug" CompilerType="GCC" DebuggerType="GNU gdb debugger" Type="Executable" BuildCmpWithGlobalSettings="append" BuildLnkWithGlobalSettings="append" BuildResWithGlobalSettings="append">
|
||||
<Compiler Options="-g;-O0;-Wall" C_Options="-g;-O0;-Wall" Assembler="" Required="yes" PreCompiledHeader="" PCHInCommandLine="no" PCHFlags="" PCHFlagsPolicy="0">
|
||||
<IncludePath Value="."/>
|
||||
<IncludePath Value="../ServerCore"/>
|
||||
<IncludePath Value="../BMAMySQL"/>
|
||||
</Compiler>
|
||||
<Linker Options="" Required="yes">
|
||||
<LibraryPath Value="../Debug/ServerCore"/>
|
||||
<LibraryPath Value="../Debug/BMAMySQL"/>
|
||||
<Library Value="ServerCore"/>
|
||||
<Library Value="BMAMySQL"/>
|
||||
</Linker>
|
||||
<ResourceCompiler Options="" Required="no"/>
|
||||
<General OutputFile="$(IntermediateDirectory)/$(ProjectName)" IntermediateDirectory="./Debug" Command="./$(ProjectName)" CommandArguments="" UseSeparateDebugArgs="no" DebugArguments="" WorkingDirectory="$(IntermediateDirectory)" PauseExecWhenProcTerminates="yes" IsGUIProgram="no" IsEnabled="yes"/>
|
||||
<BuildSystem Name="Default"/>
|
||||
<Environment EnvVarSetName="<Use Defaults>" DbgSetName="<Use Defaults>">
|
||||
<![CDATA[]]>
|
||||
</Environment>
|
||||
<Debugger IsRemote="no" RemoteHostName="" RemoteHostPort="" DebuggerPath="" IsExtended="no">
|
||||
<DebuggerSearchPaths/>
|
||||
<PostConnectCommands/>
|
||||
<StartupCommands/>
|
||||
</Debugger>
|
||||
<PreBuild/>
|
||||
<PostBuild/>
|
||||
<CustomBuild Enabled="no">
|
||||
<RebuildCommand/>
|
||||
<CleanCommand/>
|
||||
<BuildCommand/>
|
||||
<PreprocessFileCommand/>
|
||||
<SingleFileCommand/>
|
||||
<MakefileGenerationCommand/>
|
||||
<ThirdPartyToolName>None</ThirdPartyToolName>
|
||||
<WorkingDirectory/>
|
||||
</CustomBuild>
|
||||
<AdditionalRules>
|
||||
<CustomPostBuild/>
|
||||
<CustomPreBuild/>
|
||||
</AdditionalRules>
|
||||
<Completion EnableCpp11="no" EnableCpp14="no">
|
||||
<ClangCmpFlagsC/>
|
||||
<ClangCmpFlags/>
|
||||
<ClangPP/>
|
||||
<SearchPaths/>
|
||||
</Completion>
|
||||
</Configuration>
|
||||
<Configuration Name="Release" CompilerType="GCC" DebuggerType="GNU gdb debugger" Type="Executable" BuildCmpWithGlobalSettings="append" BuildLnkWithGlobalSettings="append" BuildResWithGlobalSettings="append">
|
||||
<Compiler Options="-O2;-Wall" C_Options="-O2;-Wall" Assembler="" Required="yes" PreCompiledHeader="" PCHInCommandLine="no" PCHFlags="" PCHFlagsPolicy="0">
|
||||
<IncludePath Value="."/>
|
||||
<Preprocessor Value="NDEBUG"/>
|
||||
</Compiler>
|
||||
<Linker Options="" Required="yes"/>
|
||||
<ResourceCompiler Options="" Required="no"/>
|
||||
<General OutputFile="$(IntermediateDirectory)/$(ProjectName)" IntermediateDirectory="./Release" Command="./$(ProjectName)" CommandArguments="" UseSeparateDebugArgs="no" DebugArguments="" WorkingDirectory="$(IntermediateDirectory)" PauseExecWhenProcTerminates="yes" IsGUIProgram="no" IsEnabled="yes"/>
|
||||
<BuildSystem Name="Default"/>
|
||||
<Environment EnvVarSetName="<Use Defaults>" DbgSetName="<Use Defaults>">
|
||||
<![CDATA[]]>
|
||||
</Environment>
|
||||
<Debugger IsRemote="no" RemoteHostName="" RemoteHostPort="" DebuggerPath="" IsExtended="no">
|
||||
<DebuggerSearchPaths/>
|
||||
<PostConnectCommands/>
|
||||
<StartupCommands/>
|
||||
</Debugger>
|
||||
<PreBuild/>
|
||||
<PostBuild/>
|
||||
<CustomBuild Enabled="no">
|
||||
<RebuildCommand/>
|
||||
<CleanCommand/>
|
||||
<BuildCommand/>
|
||||
<PreprocessFileCommand/>
|
||||
<SingleFileCommand/>
|
||||
<MakefileGenerationCommand/>
|
||||
<ThirdPartyToolName>None</ThirdPartyToolName>
|
||||
<WorkingDirectory/>
|
||||
</CustomBuild>
|
||||
<AdditionalRules>
|
||||
<CustomPostBuild/>
|
||||
<CustomPreBuild/>
|
||||
</AdditionalRules>
|
||||
<Completion EnableCpp11="no" EnableCpp14="no">
|
||||
<ClangCmpFlagsC/>
|
||||
<ClangCmpFlags/>
|
||||
<ClangPP/>
|
||||
<SearchPaths/>
|
||||
</Completion>
|
||||
</Configuration>
|
||||
</Settings>
|
||||
</CodeLite_Project>
|
@ -1 +0,0 @@
|
||||
./Debug/main.cpp.o
|
24
IMAPCommand.h
Normal file
24
IMAPCommand.h
Normal file
@ -0,0 +1,24 @@
|
||||
#ifndef __IMAPCommand_h__
|
||||
# define __IMAPCommand_h__
|
||||
|
||||
# include "Command.h"
|
||||
# include "TCPSession.h"
|
||||
# include "IMAPSession.h"
|
||||
|
||||
namespace mail {
|
||||
|
||||
class IMAPCommand : public core::Command {
|
||||
|
||||
public:
|
||||
virtual int processCommand(std::string request, core::TCPSession *session, std::stringstream &data) override {
|
||||
coreutils::PString parser(request);
|
||||
return processCommand(parser, (IMAPSession &)*session, data);
|
||||
}
|
||||
|
||||
virtual int processCommand(coreutils::PString request, IMAPSession &session, std::stringstream &data) {}
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif
|
106
IMAPService.h
106
IMAPService.h
@ -1,48 +1,88 @@
|
||||
#ifndef __IMAPService_h__
|
||||
#define __IMAPService_h__
|
||||
|
||||
#include "Service.h"
|
||||
#include "TCPServer.h"
|
||||
#include "Exception.h"
|
||||
#include "__SMTP_AUTH.h"
|
||||
#include "__SMTP_DATA.h"
|
||||
#include "__SMTP_EHLO.h"
|
||||
#include "__SMTP_HELO.h"
|
||||
#include "__SMTP_MAIL.h"
|
||||
#include "__SMTP_NOOP.h"
|
||||
#include "__SMTP_QUIT.h"
|
||||
#include "__SMTP_RCPT.h"
|
||||
#include "__SMTP_RSET.h"
|
||||
#include "__SMTP_VRFY.h"
|
||||
#include "__IMAP_APPEND.h"
|
||||
#include "__IMAP_AUTHENTICATE.h"
|
||||
#include "__IMAP_CHECK.h"
|
||||
#include "__IMAP_CLOSE.h"
|
||||
#include "__IMAP_COPY.h"
|
||||
#include "__IMAP_CREATE.h"
|
||||
#include "__IMAP_DELETE.h"
|
||||
#include "__IMAP_EXAMINE.h"
|
||||
#include "__IMAP_EXPUNGE.h"
|
||||
#include "__IMAP_FETCH.h"
|
||||
#include "__IMAP_LIST.h"
|
||||
#include "__IMAP_LOGIN.h"
|
||||
#include "__IMAP_LSUB.h"
|
||||
#include "__IMAP_RENAME.h"
|
||||
#include "__IMAP_SEARCH.h"
|
||||
#include "__IMAP_SELECT.h"
|
||||
#include "__IMAP_STARTTLS.h"
|
||||
#include "__IMAP_STATUS.h"
|
||||
#include "__IMAP_STORE.h"
|
||||
#include "__IMAP_SUBSCRIBE.h"
|
||||
#include "__IMAP_UID.h"
|
||||
#include "__IMAP_UNSUBSCRIBE.h"
|
||||
|
||||
namespace mail {
|
||||
|
||||
class IMAPService : public core::Service {
|
||||
class IMAPService : public core::TCPServer {
|
||||
|
||||
public:
|
||||
IMAPService() {
|
||||
commands.add(_smtp_auth, "AUTH");
|
||||
commands.add(_smtp_data, "DATA");
|
||||
commands.add(_smtp_ehlo, "EHLO");
|
||||
commands.add(_smtp_helo, "HELO");
|
||||
commands.add(_smtp_mail, "MAIL");
|
||||
commands.add(_smtp_noop, "NOOP");
|
||||
commands.add(_smtp_quit, "QUIT");
|
||||
commands.add(_smtp_rcpt, "RCPT");
|
||||
commands.add(_smtp_rset, "RSET");
|
||||
commands.add(_smtp_vrfy, "VRFY");
|
||||
IMAPService(core::EPoll &epoll, std::string hostName, std::string mailPath, core::IPAddress ipAddress)
|
||||
: TCPServer(epoll, ipAddress), mailFileSystem(mailPath), hostName(hostName) {
|
||||
commands.add(_imap_append, "APPEND");
|
||||
commands.add(_imap_authenticate, "AUTHENTCATE");
|
||||
commands.add(_imap_check, "CHECK");
|
||||
commands.add(_imap_close, "CLOSE");
|
||||
commands.add(_imap_copy, "COPY");
|
||||
commands.add(_imap_create, "CREATE");
|
||||
commands.add(_imap_delete, "DELETE");
|
||||
commands.add(_imap_examine, "EXAAMINE");
|
||||
commands.add(_imap_expunge, "EXPUNGE");
|
||||
commands.add(_imap_fetch, "FETCH");
|
||||
commands.add(_imap_list, "LIST");
|
||||
commands.add(_imap_login, "LOGIN");
|
||||
commands.add(_imap_lsub, "LSUB");
|
||||
commands.add(_imap_rename, "RENAME");
|
||||
commands.add(_imap_search, "SEARCH");
|
||||
commands.add(_imap_select, "SELECT");
|
||||
commands.add(_imap_starttls, "STARTTLS");
|
||||
commands.add(_imap_status, "STATUS");
|
||||
commands.add(_imap_store, "STORE");
|
||||
commands.add(_imap_subscribe, "SUBSCRIBE");
|
||||
commands.add(_imap_uid, "UID");
|
||||
commands.add(_imap_unsubscribe, "UNSUBSCRIBE");
|
||||
}
|
||||
|
||||
MailFileSystem mailFileSystem;
|
||||
std::string hostName;
|
||||
|
||||
private:
|
||||
__SMTP_AUTH _smtp_auth;
|
||||
__SMTP_DATA _smtp_data;
|
||||
__SMTP_EHLO _smtp_ehlo;
|
||||
__SMTP_HELO _smtp_helo;
|
||||
__SMTP_MAIL _smtp_mail;
|
||||
__SMTP_NOOP _smtp_noop;
|
||||
__SMTP_QUIT _smtp_quit;
|
||||
__SMTP_RCPT _smtp_rcpt;
|
||||
__SMTP_RSET _smtp_rset;
|
||||
__SMTP_VRFY _smtp_vrfy;
|
||||
__IMAP_APPEND _imap_append;
|
||||
__IMAP_AUTHENTICATE _imap_authenticate;
|
||||
__IMAP_CHECK _imap_check;
|
||||
__IMAP_CLOSE _imap_close;
|
||||
__IMAP_COPY _imap_copy;
|
||||
__IMAP_CREATE _imap_create;
|
||||
__IMAP_DELETE _imap_delete;
|
||||
__IMAP_EXAMINE _imap_examine;
|
||||
__IMAP_EXPUNGE _imap_expunge;
|
||||
__IMAP_FETCH _imap_fetch;
|
||||
__IMAP_LIST _imap_list;
|
||||
__IMAP_LOGIN _imap_login;
|
||||
__IMAP_LSUB _imap_lsub;
|
||||
__IMAP_RENAME _imap_rename;
|
||||
__IMAP_SEARCH _imap_search;
|
||||
__IMAP_SELECT _imap_select;
|
||||
__IMAP_STARTTLS _imap_starttls;
|
||||
__IMAP_STATUS _imap_status;
|
||||
__IMAP_STORE _imap_store;
|
||||
__IMAP_SUBSCRIBE _imap_subscribe;
|
||||
__IMAP_UID _imap_uid;
|
||||
__IMAP_UNSUBSCRIBE _imap_unsubscribe;
|
||||
|
||||
};
|
||||
|
||||
|
21
IMAPSession.h
Normal file
21
IMAPSession.h
Normal file
@ -0,0 +1,21 @@
|
||||
#ifndef __IMAPSession_h__
|
||||
#define __IMAPSession_h__
|
||||
|
||||
namespace mail {
|
||||
|
||||
class IMAPSession : public core::TCPSession {
|
||||
|
||||
public:
|
||||
|
||||
std::string clientDomainName;
|
||||
std::string userName;
|
||||
std::string password;
|
||||
AuthState authstate = USER_UNKNOWN;
|
||||
bool relay = false;
|
||||
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif
|
58
MailDelivery.cpp2
Normal file
58
MailDelivery.cpp2
Normal file
@ -0,0 +1,58 @@
|
||||
#include "MailDelivery.h"
|
||||
#include "Directory.h"
|
||||
#include "time.h"
|
||||
|
||||
namespace mail {
|
||||
|
||||
MailDelivery::MailDelivery(core::EPoll &ePoll, std::string mailQueue) : INotify(ePoll) {
|
||||
addWatch(mailQueue);
|
||||
startDelivery(mailQueue);
|
||||
}
|
||||
|
||||
void MailDelivery::onDataReceived(std::string data) {
|
||||
|
||||
// TODO: Receive file and parse email name.
|
||||
|
||||
// TODO: Compare time to named time and if time has passed then send the message
|
||||
// TODO: If email is a local mailbox then make a hard link to the mail message in the appropriate Inbox. Remove entry from queue.
|
||||
// TODO: If email is a remote mailbox then perform remote send algorithm.
|
||||
// TODO: If error sending on remote then calculate next send attempt time and rename file to reflect new time.
|
||||
// TODO: If date is on the future then set a timer to that time and wait.
|
||||
|
||||
}
|
||||
|
||||
int MailDelivery::startDelivery(std::string mailQueue) {
|
||||
coreutils::Directory mailDir(mailQueue);
|
||||
std::string entryName = mailDir.get().getName();
|
||||
std::string now = getMailFileName();
|
||||
// if(now > entryName) {
|
||||
// std::string recipientName = coreutils::File(); // read recipient name
|
||||
// if(isLocal(recipientName)) {
|
||||
// link(existing, new);
|
||||
// } else {
|
||||
// open connect socket to mx.domain
|
||||
// if error
|
||||
// calculate future date name and rename mail data
|
||||
// else
|
||||
// write smtp data on socket 25
|
||||
//
|
||||
// }
|
||||
// }
|
||||
}
|
||||
|
||||
int MailDelivery::deliver() {
|
||||
|
||||
|
||||
}
|
||||
|
||||
std::string MailDelivery::getMailFileName() {
|
||||
char fileName[64];
|
||||
time_t gtime;
|
||||
time(>ime);
|
||||
struct tm *timex;
|
||||
timex = gmtime(>ime);
|
||||
strftime(fileName, 64, "%Y%m%d%H%M%S", gmtime(>ime));
|
||||
return std::string(fileName);
|
||||
}
|
||||
|
||||
}
|
24
MailDelivery.h2
Normal file
24
MailDelivery.h2
Normal file
@ -0,0 +1,24 @@
|
||||
#ifndef __MailDelivery_h__
|
||||
# define __MailDelivery_h__
|
||||
|
||||
# include "INotify.h"
|
||||
# include "EPoll.h"
|
||||
|
||||
namespace mail {
|
||||
|
||||
class MailDelivery : core::INotify {
|
||||
|
||||
public:
|
||||
MailDelivery(core::EPoll &ePoll, std::string mailQueue);
|
||||
|
||||
void onDataReceived(std::string data) override;
|
||||
|
||||
int startDelivery(std::string mailQueue);
|
||||
int deliver();
|
||||
std::string getMailFileName();
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif
|
52
MailFileSystem.h
Normal file
52
MailFileSystem.h
Normal file
@ -0,0 +1,52 @@
|
||||
#ifndef __MailFileSystem_h__
|
||||
# define __MailFileSystem_h__
|
||||
|
||||
# include <sys/types.h>
|
||||
# include <sys/stat.h>
|
||||
# include <unistd.h>
|
||||
# include "EPoll.h"
|
||||
# include "INotify.h"
|
||||
|
||||
namespace mail {
|
||||
|
||||
class MailFileSystem {
|
||||
|
||||
public:
|
||||
MailFileSystem(std::string mailPath) : mailPath(mailPath) {}
|
||||
|
||||
bool ifMailBoxExists(std::string mailbox) {
|
||||
if(stat(getMailBoxPath(mailbox).c_str(), &statbuf) != -1)
|
||||
if(S_ISDIR(statbuf.st_mode))
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
bool ifAliasExists(std::string alias) {
|
||||
if(stat(getMailBoxPath(alias).c_str(), &statbuf) != -1)
|
||||
if(S_ISREG(statbuf.st_mode))
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
std::string getMailBoxPath(std::string mailbox) {
|
||||
coreutils::PString email(mailbox);
|
||||
email.split("@");
|
||||
std::string path = mailPath + "/" + email[1].str() + "/" + email[0].str();
|
||||
return path;
|
||||
}
|
||||
|
||||
std::vector<std::string> getAliasMailboxes(std::string alias);
|
||||
|
||||
std::string getMailPath() {
|
||||
return mailPath;
|
||||
}
|
||||
|
||||
private:
|
||||
std::string mailPath;
|
||||
struct stat statbuf;
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif
|
24
POP3Command.h
Normal file
24
POP3Command.h
Normal file
@ -0,0 +1,24 @@
|
||||
#ifndef __POP3Command_h__
|
||||
# define __POP3Command_h__
|
||||
|
||||
# include "Command.h"
|
||||
# include "TCPSession.h"
|
||||
# include "POP3Session.h"
|
||||
|
||||
namespace mail {
|
||||
|
||||
class POP3Command : public core::Command {
|
||||
|
||||
public:
|
||||
virtual int processCommand(std::string request, core::TCPSession *session, std::stringstream &data) override {
|
||||
coreutils::PString parser(request);
|
||||
return processCommand(parser, (POP3Session &)*session, data);
|
||||
}
|
||||
|
||||
virtual int processCommand(coreutils::PString request, POP3Session &session, std::stringstream &data) {}
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif
|
@ -1,48 +1,58 @@
|
||||
#ifndef __POP3Service_h__
|
||||
#define __POP3Service_h__
|
||||
|
||||
#include "Service.h"
|
||||
#include "TCPServer.h"
|
||||
#include "Exception.h"
|
||||
#include "__SMTP_AUTH.h"
|
||||
#include "__SMTP_DATA.h"
|
||||
#include "__SMTP_EHLO.h"
|
||||
#include "__SMTP_HELO.h"
|
||||
#include "__SMTP_MAIL.h"
|
||||
#include "__SMTP_NOOP.h"
|
||||
#include "__SMTP_QUIT.h"
|
||||
#include "__SMTP_RCPT.h"
|
||||
#include "__SMTP_RSET.h"
|
||||
#include "__SMTP_VRFY.h"
|
||||
#include "__POP3_DELE.h"
|
||||
#include "__POP3_LAST.h"
|
||||
#include "__POP3_LIST.h"
|
||||
#include "__POP3_NOOP.h"
|
||||
#include "__POP3_PASS.h"
|
||||
#include "__POP3_QUIT.h"
|
||||
#include "__POP3_RETR.h"
|
||||
#include "__POP3_RPOP.h"
|
||||
#include "__POP3_RSET.h"
|
||||
#include "__POP3_STAT.h"
|
||||
#include "__POP3_TOP.h"
|
||||
#include "__POP3_USER.h"
|
||||
|
||||
namespace mail {
|
||||
|
||||
class POP3Service : public core::Service {
|
||||
class POP3Service : public core::TCPServer {
|
||||
|
||||
public:
|
||||
POP3Service() {
|
||||
commands.add(_smtp_auth, "AUTH");
|
||||
commands.add(_smtp_data, "DATA");
|
||||
commands.add(_smtp_ehlo, "EHLO");
|
||||
commands.add(_smtp_helo, "HELO");
|
||||
commands.add(_smtp_mail, "MAIL");
|
||||
commands.add(_smtp_noop, "NOOP");
|
||||
commands.add(_smtp_quit, "QUIT");
|
||||
commands.add(_smtp_rcpt, "RCPT");
|
||||
commands.add(_smtp_rset, "RSET");
|
||||
commands.add(_smtp_vrfy, "VRFY");
|
||||
POP3Service(core::EPoll &epoll, std::string hostName, std::string mailPath, core::IPAddress ipAddress)
|
||||
: TCPServer(epoll, ipAddress), mailFileSystem(mailPath), hostName(hostName) {
|
||||
commands.add(_pop3_dele, "DELE");
|
||||
commands.add(_pop3_last, "LAST");
|
||||
commands.add(_pop3_list, "LIST");
|
||||
commands.add(_pop3_noop, "NOOP");
|
||||
commands.add(_pop3_pass, "PASS");
|
||||
commands.add(_pop3_quit, "QUIT");
|
||||
commands.add(_pop3_retr, "RETR");
|
||||
commands.add(_pop3_rpop, "RPOP");
|
||||
commands.add(_pop3_rset, "RSET");
|
||||
commands.add(_pop3_stat, "STAT");
|
||||
commands.add(_pop3_top, "TOP");
|
||||
commands.add(_pop3_user, "USER");
|
||||
}
|
||||
|
||||
MailFileSystem mailFileSystem;
|
||||
std::string hostName;
|
||||
|
||||
private:
|
||||
__SMTP_AUTH _smtp_auth;
|
||||
__SMTP_DATA _smtp_data;
|
||||
__SMTP_EHLO _smtp_ehlo;
|
||||
__SMTP_HELO _smtp_helo;
|
||||
__SMTP_MAIL _smtp_mail;
|
||||
__SMTP_NOOP _smtp_noop;
|
||||
__SMTP_QUIT _smtp_quit;
|
||||
__SMTP_RCPT _smtp_rcpt;
|
||||
__SMTP_RSET _smtp_rset;
|
||||
__SMTP_VRFY _smtp_vrfy;
|
||||
__POP3_DELE _pop3_dele;
|
||||
__POP3_LAST _pop3_last;
|
||||
__POP3_LIST _pop3_list;
|
||||
__POP3_NOOP _pop3_noop;
|
||||
__POP3_PASS _pop3_pass;
|
||||
__POP3_QUIT _pop3_quit;
|
||||
__POP3_RETR _pop3_retr;
|
||||
__POP3_RPOP _pop3_rpop;
|
||||
__POP3_RSET _pop3_rset;
|
||||
__POP3_STAT _pop3_stat;
|
||||
__POP3_TOP _pop3_top;
|
||||
__POP3_USER _pop3_user;
|
||||
|
||||
};
|
||||
|
||||
|
20
POP3Session.h
Normal file
20
POP3Session.h
Normal file
@ -0,0 +1,20 @@
|
||||
#ifndef __POP3Session_h__
|
||||
#define __POP3Session_h__
|
||||
|
||||
namespace mail {
|
||||
|
||||
class POP3Session : public core::TCPSession {
|
||||
|
||||
public:
|
||||
std::string clientDomainName;
|
||||
std::string userName;
|
||||
std::string password;
|
||||
AuthState authstate = USER_UNKNOWN;
|
||||
bool relay = false;
|
||||
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif
|
15
SMTPCommand.cpp
Normal file
15
SMTPCommand.cpp
Normal file
@ -0,0 +1,15 @@
|
||||
# include "Command.h"
|
||||
# include "SMTPSession.h"
|
||||
# include "SMTPServer.h"
|
||||
# include "Log.h"
|
||||
|
||||
namespace mail {
|
||||
|
||||
int SMTPCommand::processCommand(std::string request, core::TCPSession *session, std::stringstream &data) {
|
||||
coreutils::PString parser(request);
|
||||
parser.split(" ");
|
||||
return processCommand(parser, (SMTPSession &)*session, (SMTPServer &)session->server, data);
|
||||
}
|
||||
|
||||
}
|
||||
|
21
SMTPCommand.h
Normal file
21
SMTPCommand.h
Normal file
@ -0,0 +1,21 @@
|
||||
#ifndef __SMTPCommand_h__
|
||||
# define __SMTPCommand_h__
|
||||
|
||||
# include "Command.h"
|
||||
# include "SMTPSession.h"
|
||||
|
||||
namespace mail {
|
||||
|
||||
class SMTPServer;
|
||||
|
||||
class SMTPCommand : public core::Command {
|
||||
|
||||
public:
|
||||
virtual int processCommand(std::string request, core::TCPSession *session, std::stringstream &data) override;
|
||||
virtual int processCommand(coreutils::PString request, SMTPSession &session, SMTPServer &server, std::stringstream &data) {}
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif
|
91
SMTPServer.h
Normal file
91
SMTPServer.h
Normal file
@ -0,0 +1,91 @@
|
||||
#ifndef __SMTPServer_h__
|
||||
# define __SMTPServer_h__
|
||||
|
||||
# include <string>
|
||||
# include "EPoll.h"
|
||||
# include "TCPServer.h"
|
||||
# include "SMTPSession.h"
|
||||
# include "MailFileSystem.h"
|
||||
# include "__SMTP_AUTH.h"
|
||||
# include "__SMTP_DATA.h"
|
||||
# include "__SMTP_EHLO.h"
|
||||
# include "__SMTP_HELO.h"
|
||||
# include "__SMTP_MAIL.h"
|
||||
# include "__SMTP_NOOP.h"
|
||||
# include "__SMTP_QUIT.h"
|
||||
# include "__SMTP_RCPT.h"
|
||||
# include "__SMTP_RSET.h"
|
||||
# include "__SMTP_VRFY.h"
|
||||
# include "INotify.h"
|
||||
# include "Log.h"
|
||||
|
||||
namespace mail {
|
||||
|
||||
class SMTPServer : public core::TCPServer, public core::INotify {
|
||||
|
||||
public:
|
||||
SMTPServer(core::EPoll &ePoll, std::string hostName, std::string mailPath, core::IPAddress ipAddress)
|
||||
: core::TCPServer(ePoll, ipAddress, "SMTP Server"), core::INotify(ePoll), hostName(hostName), mailFileSystem(mailPath) {
|
||||
this->mailPath = mailPath;
|
||||
commands.add(_smtp_auth, "AUTH");
|
||||
commands.add(_smtp_data, "DATA");
|
||||
commands.add(_smtp_ehlo, "EHLO");
|
||||
commands.add(_smtp_helo, "HELO");
|
||||
commands.add(_smtp_mail, "MAIL");
|
||||
commands.add(_smtp_noop, "NOOP");
|
||||
commands.add(_smtp_quit, "QUIT");
|
||||
commands.add(_smtp_rcpt, "RCPT");
|
||||
commands.add(_smtp_rset, "RSET");
|
||||
commands.add(_smtp_vrfy, "VRFY");
|
||||
processExisting();
|
||||
wd = addWatch(mailPath + "/.queue/");
|
||||
}
|
||||
|
||||
MailFileSystem mailFileSystem;
|
||||
std::string hostName;
|
||||
std::string mailPath;
|
||||
|
||||
SMTPSession * getSocketAccept(core::EPoll &ePoll) override {
|
||||
return new SMTPSession(ePoll, *this);
|
||||
}
|
||||
|
||||
void sessionErrorHandler(std::string errorString, std::stringstream &out) {
|
||||
out << "252 " << errorString << CRLF;
|
||||
}
|
||||
|
||||
protected:
|
||||
void inCreate(std::string name) {
|
||||
int pos = name.find(".") + 10;
|
||||
std::string mail = name.substr(0, pos);
|
||||
std::string recipient = name.substr(pos);
|
||||
if(recipient != "") {
|
||||
std::string fileName = mailPath + "/.queue/" + name;
|
||||
std::string path = mailFileSystem.getMailBoxPath(recipient) + "/Inbox/" + mail;
|
||||
int rc = link(fileName.c_str(), path.c_str());
|
||||
rc = unlink(fileName.c_str());
|
||||
coreutils::Log(coreutils::LOG_INFO) << "Message " << mail << " delivered to " << recipient << ".";
|
||||
}
|
||||
}
|
||||
|
||||
private:
|
||||
__SMTP_AUTH _smtp_auth;
|
||||
__SMTP_DATA _smtp_data;
|
||||
__SMTP_EHLO _smtp_ehlo;
|
||||
__SMTP_HELO _smtp_helo;
|
||||
__SMTP_MAIL _smtp_mail;
|
||||
__SMTP_NOOP _smtp_noop;
|
||||
__SMTP_QUIT _smtp_quit;
|
||||
__SMTP_RCPT _smtp_rcpt;
|
||||
__SMTP_RSET _smtp_rset;
|
||||
__SMTP_VRFY _smtp_vrfy;
|
||||
int wd;
|
||||
|
||||
void processExisting() {
|
||||
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif
|
@ -1,51 +0,0 @@
|
||||
#ifndef __SMTPService_h__
|
||||
#define __SMTPService_h__
|
||||
|
||||
#include "Service.h"
|
||||
#include "Exception.h"
|
||||
#include "__SMTP_AUTH.h"
|
||||
#include "__SMTP_DATA.h"
|
||||
#include "__SMTP_EHLO.h"
|
||||
#include "__SMTP_HELO.h"
|
||||
#include "__SMTP_MAIL.h"
|
||||
#include "__SMTP_NOOP.h"
|
||||
#include "__SMTP_QUIT.h"
|
||||
#include "__SMTP_RCPT.h"
|
||||
#include "__SMTP_RSET.h"
|
||||
#include "__SMTP_VRFY.h"
|
||||
|
||||
namespace mail {
|
||||
|
||||
class SMTPService : public core::Service {
|
||||
|
||||
public:
|
||||
SMTPService() {
|
||||
commands.add(_smtp_auth, "AUTH");
|
||||
commands.add(_smtp_data, "DATA");
|
||||
commands.add(_smtp_ehlo, "EHLO");
|
||||
commands.add(_smtp_helo, "HELO");
|
||||
commands.add(_smtp_mail, "MAIL");
|
||||
commands.add(_smtp_noop, "NOOP");
|
||||
commands.add(_smtp_quit, "QUIT");
|
||||
commands.add(_smtp_rcpt, "RCPT");
|
||||
commands.add(_smtp_rset, "RSET");
|
||||
commands.add(_smtp_vrfy, "VRFY");
|
||||
}
|
||||
|
||||
private:
|
||||
__SMTP_AUTH _smtp_auth;
|
||||
__SMTP_DATA _smtp_data;
|
||||
__SMTP_EHLO _smtp_ehlo;
|
||||
__SMTP_HELO _smtp_helo;
|
||||
__SMTP_MAIL _smtp_mail;
|
||||
__SMTP_NOOP _smtp_noop;
|
||||
__SMTP_QUIT _smtp_quit;
|
||||
__SMTP_RCPT _smtp_rcpt;
|
||||
__SMTP_RSET _smtp_rset;
|
||||
__SMTP_VRFY _smtp_vrfy;
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif
|
@ -1,14 +1,37 @@
|
||||
#ifndef __SMTPSession_h__
|
||||
#define __SMTPSession_h__
|
||||
# define __SMTPSession_h__
|
||||
|
||||
#include "includes"
|
||||
# include "TCPSession.h"
|
||||
# include "TCPServer.h"
|
||||
|
||||
# define CRLF "\r\n"
|
||||
|
||||
namespace mail {
|
||||
|
||||
enum State {CONNECT, READY, MAIL, RCPT, DATA};
|
||||
enum AuthState {USER_UNKNOWN, USER_QUERY, USER_SECRET_QUERY, USER_KNOWN};
|
||||
enum Mode {WAIT_FOR_DATA, RECEIVE_DATA};
|
||||
|
||||
class SMTPSession : public core::TCPSession {
|
||||
|
||||
public:
|
||||
SMTPSession(core::EPoll &ePoll, core::TCPServer &server)
|
||||
: TCPSession(ePoll, server, "SMTP Client Session") {}
|
||||
|
||||
class SMTPSession : public core::Session {
|
||||
|
||||
public:
|
||||
std::string state;
|
||||
void onConnected(std::stringstream &out) {
|
||||
out << "220 localhost BMAMail" << CRLF;
|
||||
}
|
||||
|
||||
std::string clientDomainName;
|
||||
std::string userName;
|
||||
std::string password;
|
||||
std::stringstream mailData;
|
||||
State state = CONNECT;
|
||||
AuthState authState = USER_UNKNOWN;
|
||||
Mode mode = WAIT_FOR_DATA;
|
||||
bool relay = false;
|
||||
std::string sender;
|
||||
std::vector<std::string> recipientList;
|
||||
|
||||
};
|
||||
|
||||
|
19
__IMAP_APPEND.h
Normal file
19
__IMAP_APPEND.h
Normal file
@ -0,0 +1,19 @@
|
||||
#ifndef ____IMAP_APPEND_h__
|
||||
# define ____IMAP_APPEND_h__
|
||||
|
||||
# include "IMAPCommand.h"
|
||||
# include "IMAPSession.h"
|
||||
|
||||
namespace mail {
|
||||
|
||||
class __IMAP_APPEND : public IMAPCommand {
|
||||
|
||||
int processCommand(coreutils::PString request, IMAPSession &session, std::stringstream &data) {
|
||||
data << "250 OK" << CRLF;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif
|
19
__IMAP_AUTHENTICATE.h
Normal file
19
__IMAP_AUTHENTICATE.h
Normal file
@ -0,0 +1,19 @@
|
||||
#ifndef ____IMAP_AUTHENTICATE_h__
|
||||
# define ____IMAP_AUTHENTICATE_h__
|
||||
|
||||
# include "IMAPCommand.h"
|
||||
# include "IMAPSession.h"
|
||||
|
||||
namespace mail {
|
||||
|
||||
class __IMAP_AUTHENTICATE : public IMAPCommand {
|
||||
|
||||
int processCommand(coreutils::PString request, IMAPSession &session, std::stringstream &data) {
|
||||
data << "250 OK" << CRLF;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif
|
19
__IMAP_CHECK.h
Normal file
19
__IMAP_CHECK.h
Normal file
@ -0,0 +1,19 @@
|
||||
#ifndef ____IMAP_CHECK_h__
|
||||
# define ____IMAP_CHECK_h__
|
||||
|
||||
# include "IMAPCommand.h"
|
||||
# include "IMAPSession.h"
|
||||
|
||||
namespace mail {
|
||||
|
||||
class __IMAP_CHECK : public IMAPCommand {
|
||||
|
||||
int processCommand(coreutils::PString request, IMAPSession &session, std::stringstream &data) {
|
||||
data << "250 OK" << CRLF;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif
|
19
__IMAP_CLOSE.h
Normal file
19
__IMAP_CLOSE.h
Normal file
@ -0,0 +1,19 @@
|
||||
#ifndef ____IMAP_CLOSE_h__
|
||||
# define ____IMAP_CLOSE_h__
|
||||
|
||||
# include "IMAPCommand.h"
|
||||
# include "IMAPSession.h"
|
||||
|
||||
namespace mail {
|
||||
|
||||
class __IMAP_CLOSE : public IMAPCommand {
|
||||
|
||||
int processCommand(coreutils::PString request, IMAPSession &session, std::stringstream &data) {
|
||||
data << "250 OK" << CRLF;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif
|
19
__IMAP_COPY.h
Normal file
19
__IMAP_COPY.h
Normal file
@ -0,0 +1,19 @@
|
||||
#ifndef ____IMAP_COPY_h__
|
||||
# define ____IMAP_COPY_h__
|
||||
|
||||
# include "IMAPCommand.h"
|
||||
# include "IMAPSession.h"
|
||||
|
||||
namespace mail {
|
||||
|
||||
class __IMAP_COPY : public IMAPCommand {
|
||||
|
||||
int processCommand(coreutils::PString request, IMAPSession &session, std::stringstream &data) {
|
||||
data << "250 OK" << CRLF;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif
|
19
__IMAP_CREATE.h
Normal file
19
__IMAP_CREATE.h
Normal file
@ -0,0 +1,19 @@
|
||||
#ifndef ____IMAP_CREATE_h__
|
||||
# define ____IMAP_CREATE_h__
|
||||
|
||||
# include "IMAPCommand.h"
|
||||
# include "IMAPSession.h"
|
||||
|
||||
namespace mail {
|
||||
|
||||
class __IMAP_CREATE : public IMAPCommand {
|
||||
|
||||
int processCommand(coreutils::PString request, IMAPSession &session, std::stringstream &data) {
|
||||
data << "250 OK" << CRLF;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif
|
19
__IMAP_DELETE.h
Normal file
19
__IMAP_DELETE.h
Normal file
@ -0,0 +1,19 @@
|
||||
#ifndef ____IMAP_DELETE_h__
|
||||
# define ____IMAP_DELETE_h__
|
||||
|
||||
# include "IMAPCommand.h"
|
||||
# include "IMAPSession.h"
|
||||
|
||||
namespace mail {
|
||||
|
||||
class __IMAP_DELETE : public IMAPCommand {
|
||||
|
||||
int processCommand(coreutils::PString request, IMAPSession &session, std::stringstream &data) {
|
||||
data << "250 OK" << CRLF;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif
|
19
__IMAP_EXAMINE.h
Normal file
19
__IMAP_EXAMINE.h
Normal file
@ -0,0 +1,19 @@
|
||||
#ifndef ____IMAP_EXAMINE_h__
|
||||
# define ____IMAP_EXAMINE_h__
|
||||
|
||||
# include "IMAPCommand.h"
|
||||
# include "IMAPSession.h"
|
||||
|
||||
namespace mail {
|
||||
|
||||
class __IMAP_EXAMINE : public IMAPCommand {
|
||||
|
||||
int processCommand(coreutils::PString request, IMAPSession &session, std::stringstream &data) {
|
||||
data << "250 OK" << CRLF;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif
|
19
__IMAP_EXPUNGE.h
Normal file
19
__IMAP_EXPUNGE.h
Normal file
@ -0,0 +1,19 @@
|
||||
#ifndef ____IMAP_EXPUNGE_h__
|
||||
# define ____IMAP_EXPUNGE_h__
|
||||
|
||||
# include "IMAPCommand.h"
|
||||
# include "IMAPSession.h"
|
||||
|
||||
namespace mail {
|
||||
|
||||
class __IMAP_EXPUNGE : public IMAPCommand {
|
||||
|
||||
int processCommand(coreutils::PString request, IMAPSession &session, std::stringstream &data) {
|
||||
data << "250 OK" << CRLF;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif
|
19
__IMAP_FETCH.h
Normal file
19
__IMAP_FETCH.h
Normal file
@ -0,0 +1,19 @@
|
||||
#ifndef ____IMAP_FETCH_h__
|
||||
# define ____IMAP_FETCH_h__
|
||||
|
||||
# include "IMAPCommand.h"
|
||||
# include "IMAPSession.h"
|
||||
|
||||
namespace mail {
|
||||
|
||||
class __IMAP_FETCH : public IMAPCommand {
|
||||
|
||||
int processCommand(coreutils::PString request, IMAPSession &session, std::stringstream &data) {
|
||||
data << "250 OK" << CRLF;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif
|
19
__IMAP_LIST.h
Normal file
19
__IMAP_LIST.h
Normal file
@ -0,0 +1,19 @@
|
||||
#ifndef ____IMAP_LIST_h__
|
||||
# define ____IMAP_LIST_h__
|
||||
|
||||
# include "IMAPCommand.h"
|
||||
# include "IMAPSession.h"
|
||||
|
||||
namespace mail {
|
||||
|
||||
class __IMAP_LIST : public IMAPCommand {
|
||||
|
||||
int processCommand(coreutils::PString request, IMAPSession &session, std::stringstream &data) {
|
||||
data << "250 OK" << CRLF;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif
|
19
__IMAP_LOGIN.h
Normal file
19
__IMAP_LOGIN.h
Normal file
@ -0,0 +1,19 @@
|
||||
#ifndef ____IMAP_LOGIN_h__
|
||||
# define ____IMAP_LOGIN_h__
|
||||
|
||||
# include "IMAPCommand.h"
|
||||
# include "IMAPSession.h"
|
||||
|
||||
namespace mail {
|
||||
|
||||
class __IMAP_LOGIN : public IMAPCommand {
|
||||
|
||||
int processCommand(coreutils::PString request, IMAPSession &session, std::stringstream &data) {
|
||||
data << "250 OK" << CRLF;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif
|
19
__IMAP_LSUB.h
Normal file
19
__IMAP_LSUB.h
Normal file
@ -0,0 +1,19 @@
|
||||
#ifndef ____IMAP_LSUB_h__
|
||||
# define ____IMAP_LSUB_h__
|
||||
|
||||
# include "IMAPCommand.h"
|
||||
# include "IMAPSession.h"
|
||||
|
||||
namespace mail {
|
||||
|
||||
class __IMAP_LSUB : public IMAPCommand {
|
||||
|
||||
int processCommand(coreutils::PString request, IMAPSession &session, std::stringstream &data) {
|
||||
data << "250 OK" << CRLF;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif
|
19
__IMAP_RENAME.h
Normal file
19
__IMAP_RENAME.h
Normal file
@ -0,0 +1,19 @@
|
||||
#ifndef ____IMAP_RENAME_h__
|
||||
# define ____IMAP_RENAME_h__
|
||||
|
||||
# include "IMAPCommand.h"
|
||||
# include "IMAPSession.h"
|
||||
|
||||
namespace mail {
|
||||
|
||||
class __IMAP_RENAME : public IMAPCommand {
|
||||
|
||||
int processCommand(coreutils::PString request, IMAPSession &session, std::stringstream &data) {
|
||||
data << "250 OK" << CRLF;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif
|
19
__IMAP_SEARCH.h
Normal file
19
__IMAP_SEARCH.h
Normal file
@ -0,0 +1,19 @@
|
||||
#ifndef ____IMAP_SEARCH_h__
|
||||
# define ____IMAP_SEARCH_h__
|
||||
|
||||
# include "IMAPCommand.h"
|
||||
# include "IMAPSession.h"
|
||||
|
||||
namespace mail {
|
||||
|
||||
class __IMAP_SEARCH : public IMAPCommand {
|
||||
|
||||
int processCommand(coreutils::PString request, IMAPSession &session, std::stringstream &data) {
|
||||
data << "250 OK" << CRLF;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif
|
19
__IMAP_SELECT.h
Normal file
19
__IMAP_SELECT.h
Normal file
@ -0,0 +1,19 @@
|
||||
#ifndef ____IMAP_SELECT_h__
|
||||
# define ____IMAP_SELECT_h__
|
||||
|
||||
# include "IMAPCommand.h"
|
||||
# include "IMAPSession.h"
|
||||
|
||||
namespace mail {
|
||||
|
||||
class __IMAP_SELECT : public IMAPCommand {
|
||||
|
||||
int processCommand(coreutils::PString request, IMAPSession &session, std::stringstream &data) {
|
||||
data << "250 OK" << CRLF;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif
|
19
__IMAP_STARTTLS.h
Normal file
19
__IMAP_STARTTLS.h
Normal file
@ -0,0 +1,19 @@
|
||||
#ifndef ____IMAP_STARTTLS_h__
|
||||
# define ____IMAP_STARTTLS_h__
|
||||
|
||||
# include "IMAPCommand.h"
|
||||
# include "IMAPSession.h"
|
||||
|
||||
namespace mail {
|
||||
|
||||
class __IMAP_STARTTLS : public IMAPCommand {
|
||||
|
||||
int processCommand(coreutils::PString request, IMAPSession &session, std::stringstream &data) {
|
||||
data << "250 OK" << CRLF;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif
|
19
__IMAP_STATUS.h
Normal file
19
__IMAP_STATUS.h
Normal file
@ -0,0 +1,19 @@
|
||||
#ifndef ____IMAP_STATUS_h__
|
||||
# define ____IMAP_STATUS_h__
|
||||
|
||||
# include "IMAPCommand.h"
|
||||
# include "IMAPSession.h"
|
||||
|
||||
namespace mail {
|
||||
|
||||
class __IMAP_STATUS : public IMAPCommand {
|
||||
|
||||
int processCommand(coreutils::PString request, IMAPSession &session, std::stringstream &data) {
|
||||
data << "250 OK" << CRLF;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif
|
19
__IMAP_STORE.h
Normal file
19
__IMAP_STORE.h
Normal file
@ -0,0 +1,19 @@
|
||||
#ifndef ____IMAP_STORE_h__
|
||||
# define ____IMAP_STORE_h__
|
||||
|
||||
# include "IMAPCommand.h"
|
||||
# include "IMAPSession.h"
|
||||
|
||||
namespace mail {
|
||||
|
||||
class __IMAP_STORE : public IMAPCommand {
|
||||
|
||||
int processCommand(coreutils::PString request, IMAPSession &session, std::stringstream &data) {
|
||||
data << "250 OK" << CRLF;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif
|
19
__IMAP_SUBSCRIBE.h
Normal file
19
__IMAP_SUBSCRIBE.h
Normal file
@ -0,0 +1,19 @@
|
||||
#ifndef ____IMAP_SUBSCRIBE_h__
|
||||
# define ____IMAP_SUBSCRIBE_h__
|
||||
|
||||
# include "IMAPCommand.h"
|
||||
# include "IMAPSession.h"
|
||||
|
||||
namespace mail {
|
||||
|
||||
class __IMAP_SUBSCRIBE : public IMAPCommand {
|
||||
|
||||
int processCommand(coreutils::PString request, IMAPSession &session, std::stringstream &data) {
|
||||
data << "250 OK" << CRLF;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif
|
19
__IMAP_UID.h
Normal file
19
__IMAP_UID.h
Normal file
@ -0,0 +1,19 @@
|
||||
#ifndef ____IMAP_UID_h__
|
||||
# define ____IMAP_UID_h__
|
||||
|
||||
# include "IMAPCommand.h"
|
||||
# include "IMAPSession.h"
|
||||
|
||||
namespace mail {
|
||||
|
||||
class __IMAP_UID : public IMAPCommand {
|
||||
|
||||
int processCommand(coreutils::PString request, IMAPSession &session, std::stringstream &data) {
|
||||
data << "250 OK" << CRLF;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif
|
19
__IMAP_UNSUBSCRIBE.h
Normal file
19
__IMAP_UNSUBSCRIBE.h
Normal file
@ -0,0 +1,19 @@
|
||||
#ifndef ____IMAP_UNSUBSCRIBE_h__
|
||||
# define ____IMAP_UNSUBSCRIBE_h__
|
||||
|
||||
# include "IMAPCommand.h"
|
||||
# include "IMAPSession.h"
|
||||
|
||||
namespace mail {
|
||||
|
||||
class __IMAP_UNSUBSCRIBE : public IMAPCommand {
|
||||
|
||||
int processCommand(coreutils::PString request, IMAPSession &session, std::stringstream &data) {
|
||||
data << "250 OK" << CRLF;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif
|
19
__POP3_DELE.h
Normal file
19
__POP3_DELE.h
Normal file
@ -0,0 +1,19 @@
|
||||
#ifndef ____POP3_DELE_h__
|
||||
# define ____POP3_DELE_h__
|
||||
|
||||
# include "POP3Command.h"
|
||||
# include "POP3Session.h"
|
||||
|
||||
namespace mail {
|
||||
|
||||
class __POP3_DELE : public POP3Command {
|
||||
|
||||
int processCommand(coreutils::PString request, POP3Session &session, std::stringstream &data) {
|
||||
data << "250 OK" << CRLF;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif
|
19
__POP3_LAST.h
Normal file
19
__POP3_LAST.h
Normal file
@ -0,0 +1,19 @@
|
||||
#ifndef ____POP3_LAST_h__
|
||||
# define ____POP3_LAST_h__
|
||||
|
||||
# include "POP3Command.h"
|
||||
# include "POP3Session.h"
|
||||
|
||||
namespace mail {
|
||||
|
||||
class __POP3_LAST : public POP3Command {
|
||||
|
||||
int processCommand(coreutils::PString request, POP3Session &session, std::stringstream &data) {
|
||||
data << "250 OK" << CRLF;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif
|
19
__POP3_LIST.h
Normal file
19
__POP3_LIST.h
Normal file
@ -0,0 +1,19 @@
|
||||
#ifndef ____POP3_LIST_h__
|
||||
# define ____POP3_LIST_h__
|
||||
|
||||
# include "POP3Command.h"
|
||||
# include "POP3Session.h"
|
||||
|
||||
namespace mail {
|
||||
|
||||
class __POP3_LIST : public POP3Command {
|
||||
|
||||
int processCommand(coreutils::PString request, POP3Session &session, std::stringstream &data) {
|
||||
data << "250 OK" << CRLF;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif
|
19
__POP3_NOOP.h
Normal file
19
__POP3_NOOP.h
Normal file
@ -0,0 +1,19 @@
|
||||
#ifndef ____POP3_NOOP_h__
|
||||
# define ____POP3_NOOP_h__
|
||||
|
||||
# include "POP3Command.h"
|
||||
# include "POP3Session.h"
|
||||
|
||||
namespace mail {
|
||||
|
||||
class __POP3_NOOP : public POP3Command {
|
||||
|
||||
int processCommand(coreutils::PString request, POP3Session &session, std::stringstream &data) {
|
||||
data << "250 OK" << CRLF;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif
|
19
__POP3_PASS.h
Normal file
19
__POP3_PASS.h
Normal file
@ -0,0 +1,19 @@
|
||||
#ifndef ____POP3_PASS_h__
|
||||
# define ____POP3_PASS_h__
|
||||
|
||||
# include "POP3Command.h"
|
||||
# include "POP3Session.h"
|
||||
|
||||
namespace mail {
|
||||
|
||||
class __POP3_PASS : public POP3Command {
|
||||
|
||||
int processCommand(coreutils::PString request, POP3Session &session, std::stringstream &data) {
|
||||
data << "250 OK" << CRLF;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif
|
19
__POP3_QUIT.h
Normal file
19
__POP3_QUIT.h
Normal file
@ -0,0 +1,19 @@
|
||||
#ifndef ____POP3_QUIT_h__
|
||||
# define ____POP3_QUIT_h__
|
||||
|
||||
# include "POP3Command.h"
|
||||
# include "POP3Session.h"
|
||||
|
||||
namespace mail {
|
||||
|
||||
class __POP3_QUIT : public POP3Command {
|
||||
|
||||
int processCommand(coreutils::PString request, POP3Session &session, std::stringstream &data) {
|
||||
data << "250 OK" << CRLF;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif
|
19
__POP3_RETR.h
Normal file
19
__POP3_RETR.h
Normal file
@ -0,0 +1,19 @@
|
||||
#ifndef ____POP3_RETR_h__
|
||||
# define ____POP3_RETR_h__
|
||||
|
||||
# include "POP3Command.h"
|
||||
# include "POP3Session.h"
|
||||
|
||||
namespace mail {
|
||||
|
||||
class __POP3_RETR : public POP3Command {
|
||||
|
||||
int processCommand(coreutils::PString request, POP3Session &session, std::stringstream &data) {
|
||||
data << "250 OK" << CRLF;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif
|
19
__POP3_RPOP.h
Normal file
19
__POP3_RPOP.h
Normal file
@ -0,0 +1,19 @@
|
||||
#ifndef ____POP3_RPOP_h__
|
||||
# define ____POP3_RPOP_h__
|
||||
|
||||
# include "POP3Command.h"
|
||||
# include "POP3Session.h"
|
||||
|
||||
namespace mail {
|
||||
|
||||
class __POP3_RPOP : public POP3Command {
|
||||
|
||||
int processCommand(coreutils::PString request, POP3Session &session, std::stringstream &data) {
|
||||
data << "250 OK" << CRLF;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif
|
19
__POP3_RSET.h
Normal file
19
__POP3_RSET.h
Normal file
@ -0,0 +1,19 @@
|
||||
#ifndef ____POP3_RSET_h__
|
||||
# define ____POP3_RSET_h__
|
||||
|
||||
# include "POP3Command.h"
|
||||
# include "POP3Session.h"
|
||||
|
||||
namespace mail {
|
||||
|
||||
class __POP3_RSET : public POP3Command {
|
||||
|
||||
int processCommand(coreutils::PString request, POP3Session &session, std::stringstream &data) {
|
||||
data << "250 OK" << CRLF;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif
|
19
__POP3_STAT.h
Normal file
19
__POP3_STAT.h
Normal file
@ -0,0 +1,19 @@
|
||||
#ifndef ____POP3_STAT_h__
|
||||
# define ____POP3_STAT_h__
|
||||
|
||||
# include "POP3Command.h"
|
||||
# include "POP3Session.h"
|
||||
|
||||
namespace mail {
|
||||
|
||||
class __POP3_STAT : public POP3Command {
|
||||
|
||||
int processCommand(coreutils::PString request, POP3Session &session, std::stringstream &data) {
|
||||
data << "250 OK" << CRLF;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif
|
19
__POP3_TOP.h
Normal file
19
__POP3_TOP.h
Normal file
@ -0,0 +1,19 @@
|
||||
#ifndef ____POP3_TOP_h__
|
||||
# define ____POP3_TOP_h__
|
||||
|
||||
# include "POP3Command.h"
|
||||
# include "POP3Session.h"
|
||||
|
||||
namespace mail {
|
||||
|
||||
class __POP3_TOP : public POP3Command {
|
||||
|
||||
int processCommand(coreutils::PString request, POP3Session &session, std::stringstream &data) {
|
||||
data << "250 OK" << CRLF;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif
|
19
__POP3_USER.h
Normal file
19
__POP3_USER.h
Normal file
@ -0,0 +1,19 @@
|
||||
#ifndef ____POP3_USER_h__
|
||||
# define ____POP3_USER_h__
|
||||
|
||||
# include "POP3Command.h"
|
||||
# include "POP3Session.h"
|
||||
|
||||
namespace mail {
|
||||
|
||||
class __POP3_USER : public POP3Command {
|
||||
|
||||
int processCommand(coreutils::PString request, POP3Session &session, std::stringstream &data) {
|
||||
data << "250 OK" << CRLF;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif
|
70
__SMTP_AUTH.cpp
Normal file
70
__SMTP_AUTH.cpp
Normal file
@ -0,0 +1,70 @@
|
||||
#include "__SMTP_AUTH.h"
|
||||
#include "SMTPServer.h"
|
||||
#include "Base64.h"
|
||||
|
||||
namespace mail {
|
||||
|
||||
int __SMTP_AUTH::processCommand(coreutils::PString request, SMTPSession &session, SMTPServer &server, std::stringstream &data) {
|
||||
|
||||
switch(session.authState) {
|
||||
|
||||
case USER_UNKNOWN:
|
||||
if(request[1].str() == "LOGIN") {
|
||||
|
||||
data << "334 VXNlcm5hbWU6" << CRLF;
|
||||
|
||||
// setTimer(10.0f);
|
||||
|
||||
session.authState = USER_QUERY;
|
||||
session.server.commands.grabInput(&session, *this);
|
||||
}
|
||||
else {
|
||||
data << "504 AUTH method not supported." << CRLF;
|
||||
}
|
||||
return 1;
|
||||
|
||||
case USER_QUERY:
|
||||
|
||||
session.userName = request[0].str();
|
||||
|
||||
// setTimer(0.0f);
|
||||
|
||||
data << "334 UGFzc3dvcmQ6" << CRLF;
|
||||
|
||||
// setTimer(10.0f);
|
||||
session.authState = USER_SECRET_QUERY;
|
||||
return 1;
|
||||
|
||||
case USER_SECRET_QUERY:
|
||||
|
||||
session.password = request[0].str();
|
||||
|
||||
// setTimer(0.0f);
|
||||
|
||||
coreutils::Base64 base64;
|
||||
|
||||
if(authLogin(session.userName, session.password, server)) {
|
||||
data << "235 2.7.0 Authentication successful" << CRLF;
|
||||
session.relay = true;
|
||||
session.authState = USER_KNOWN;
|
||||
session.server.commands.clearGrab(&session);
|
||||
}
|
||||
|
||||
else {
|
||||
data << "530 Login was unsuccessful." << CRLF;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
bool __SMTP_AUTH::authLogin(std::string userName, std::string password, SMTPServer &server) {
|
||||
|
||||
std::string secretPath = server.mailFileSystem.getMailBoxPath(userName) + "/.password";
|
||||
coreutils::File secret(secretPath);
|
||||
secret.read();
|
||||
return secret.asString() == password;
|
||||
}
|
||||
|
||||
}
|
@ -1,98 +1,22 @@
|
||||
#ifndef ____SMTP_AUTH_h__
|
||||
#define ____SMTP_AUTH_h__
|
||||
# define ____SMTP_AUTH_h__
|
||||
|
||||
#include "Command.h"
|
||||
# include "SMTPCommand.h"
|
||||
# include "SMTPSession.h"
|
||||
|
||||
namespace mail {
|
||||
|
||||
class __SMTP_AUTH : public core::Command {
|
||||
|
||||
class SMTPServer;
|
||||
|
||||
class __SMTP_AUTH : public SMTPCommand {
|
||||
|
||||
int processCommand(std::string request, Session *session, std::stringstream &data);
|
||||
|
||||
data << "" << std::endl;
|
||||
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
// AUTH command request handling.
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
else if(command(input) == "AUTH") {
|
||||
|
||||
if(input.length() > 5) {
|
||||
string method = input.substr(5);
|
||||
|
||||
string userName;
|
||||
string password;
|
||||
|
||||
//--------------------------------
|
||||
// Check for AUTH LOGIN method.
|
||||
//--------------------------------
|
||||
|
||||
if(method == "LOGIN") {
|
||||
|
||||
cout << "334 VXNlcm5hbWU6" << CRLF;
|
||||
|
||||
alarm(10);
|
||||
|
||||
if(!getline(cin, userName)) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
alarm(0);
|
||||
|
||||
if(userName[userName.length() - 1] == '\r')
|
||||
userName.erase(userName.length() - 1);
|
||||
|
||||
cout << "334 UGFzc3dvcmQ6" << CRLF;
|
||||
|
||||
alarm(10);
|
||||
|
||||
if(!getline(cin, password)) {
|
||||
return -1;
|
||||
}
|
||||
alarm(0);
|
||||
|
||||
if(password[password.length() - 1] == '\r')
|
||||
password.erase(password.length() - 1);
|
||||
|
||||
BASE64 base64;
|
||||
|
||||
log.message("Logging in with user '" + base64.decode(userName) + "' using password '" + base64.decode(password) + "'.");
|
||||
|
||||
if(authLogin(base64.decode(userName), base64.decode(password))) {
|
||||
cout << "235 Authentication successful" << CRLF;
|
||||
log.message("Response: 235 Authentication successful.");
|
||||
relay = true;
|
||||
}
|
||||
|
||||
else {
|
||||
cout << "530 Login was unsuccessful." << CRLF;
|
||||
log.message("Response: 530 Login was unsuccessful.");
|
||||
}
|
||||
}
|
||||
|
||||
else {
|
||||
cout << "530 AUTH method not supported." << CRLF;
|
||||
log.message("Response: 530 AUTH method not supported.");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
else {
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
public:
|
||||
int processCommand(coreutils::PString request, SMTPSession &session, SMTPServer &server, std::stringstream &data);
|
||||
|
||||
bool authLogin(std::string userName, std::string password, SMTPServer &server);
|
||||
|
||||
httpRequest.response.addHeader("Content-Type", "script/javascript");
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
|
89
__SMTP_DATA.cpp
Normal file
89
__SMTP_DATA.cpp
Normal file
@ -0,0 +1,89 @@
|
||||
#include "__SMTP_DATA.h"
|
||||
#include "SMTPServer.h"
|
||||
#include "Log.h"
|
||||
#include <chrono>
|
||||
#include <iomanip>
|
||||
|
||||
namespace mail {
|
||||
|
||||
int __SMTP_DATA::processCommand(coreutils::PString request, SMTPSession &session, SMTPServer &server, std::stringstream &data) {
|
||||
|
||||
switch(session.mode) {
|
||||
|
||||
case WAIT_FOR_DATA:
|
||||
|
||||
switch(session.state) {
|
||||
|
||||
case RCPT:
|
||||
data << "354 Enter the mail message terminated by <CRLF>.<CRLF>" << CRLF;
|
||||
session.mailData.str("");
|
||||
session.mode = RECEIVE_DATA;
|
||||
session.server.commands.grabInput(&session, *this);
|
||||
// setTimer(120.0f);
|
||||
break;
|
||||
|
||||
case MAIL:
|
||||
data << "503 Please use RCPT first" << CRLF;
|
||||
break;
|
||||
|
||||
default:
|
||||
data << "503 Please use MAIL first" << CRLF;
|
||||
break;
|
||||
|
||||
}
|
||||
break;
|
||||
|
||||
case RECEIVE_DATA:
|
||||
if(request.str() != ".")
|
||||
session.mailData << request.str() << CRLF;
|
||||
else {
|
||||
session.mode = WAIT_FOR_DATA;
|
||||
session.state = READY;
|
||||
session.server.commands.clearGrab(&session);
|
||||
// if(filterMessage(session.mailData)) {
|
||||
if(session.recipientList.size() > 0) {
|
||||
if(session.mailData.str().size() > 0) {
|
||||
std::string ID = queueMail(server, session.sender, session.recipientList, session.mailData);
|
||||
if(ID != "") {
|
||||
coreutils::Log(coreutils::LOG_INFO) << "Queued message " << ID << ".";
|
||||
data << "250 OK Queued message " << ID << CRLF;
|
||||
}
|
||||
else
|
||||
data << "550 Mail message too big" << CRLF;
|
||||
} else
|
||||
data << "550 Mail message was empty" << CRLF;
|
||||
} else
|
||||
data << "250 OK Queued message " << CRLF;
|
||||
// } else
|
||||
// data << "550 Message is probably spam" << CRLF;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
std::string __SMTP_DATA::generateMailFileName() {
|
||||
std::stringstream temp;
|
||||
struct timespec timex;
|
||||
clock_gettime(CLOCK_REALTIME, &timex);
|
||||
temp << timex.tv_sec << "." << std::setfill('0') << std::setw(9) << timex.tv_nsec;
|
||||
return temp.str();
|
||||
}
|
||||
|
||||
std::string __SMTP_DATA::queueMail(SMTPServer &server, std::string sender, std::vector<std::string> recipientList, std::stringstream &mailData) {
|
||||
std::string fileName = server.mailFileSystem.getMailPath() + "/.queue/" + generateMailFileName();
|
||||
coreutils::File mailFile(fileName, O_CREAT | O_WRONLY, 0660);
|
||||
mailFile.write(mailData.str());
|
||||
|
||||
for(std::string recipient: recipientList) {
|
||||
std::string newName = fileName + recipient;
|
||||
link(fileName.c_str(), newName.c_str());
|
||||
}
|
||||
|
||||
unlink(fileName.c_str());
|
||||
|
||||
return fileName;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
191
__SMTP_DATA.h
191
__SMTP_DATA.h
@ -1,177 +1,24 @@
|
||||
#ifndef ____SMTP_DATA_h__
|
||||
#define ____SMTP_DATA_h__
|
||||
# define ____SMTP_DATA_h__
|
||||
|
||||
#include "Command.h"
|
||||
# include "SMTPCommand.h"
|
||||
# include "SMTPSession.h"
|
||||
|
||||
namespace mail {
|
||||
|
||||
class __SMTP_DATA : public core::Command {
|
||||
|
||||
class SMTPServer;
|
||||
|
||||
class __SMTP_DATA : public SMTPCommand {
|
||||
|
||||
int processCommand(std::string request, Session *session, std::stringstream &data);
|
||||
|
||||
data << "" << std::endl;
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
// DATA command request handling.
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
else if(command(input) == "DATA") {
|
||||
|
||||
//--------------------------------------------------------------
|
||||
// We must have recipients before we can send data.
|
||||
//--------------------------------------------------------------
|
||||
|
||||
if(state == "RCPT") {
|
||||
|
||||
//---------------------------------------------------------
|
||||
// Prompt for client to begin entering mail message data.
|
||||
//---------------------------------------------------------
|
||||
|
||||
cout << "354 Enter the mail message terminated by <CRLF>.<CRLF>" << CRLF;
|
||||
|
||||
mailData = "";
|
||||
|
||||
//-----------------------------------------------------------
|
||||
// Receive mail message one line at a time and keep an eye
|
||||
// out for the terminating period character.
|
||||
//-----------------------------------------------------------
|
||||
|
||||
do {
|
||||
|
||||
alarm(120);
|
||||
|
||||
if(!getline(cin, input)) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
if(input[input.length() - 1] == '\r')
|
||||
input.erase(input.length() - 1);
|
||||
|
||||
alarm(0);
|
||||
if(input != ".") {
|
||||
|
||||
//--------------------------------------------------------------
|
||||
// If there was a period for the first character but it wasn't
|
||||
// the only character then remove and ignore the first period.
|
||||
// This is the transparency mode capability.
|
||||
//--------------------------------------------------------------
|
||||
|
||||
if(input[0] == '.') {
|
||||
mailData += input.substr(1) + CRLF;
|
||||
}
|
||||
|
||||
else {
|
||||
mailData += input + CRLF;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
} while(input != ".");
|
||||
|
||||
//------------------------------------------------------------------
|
||||
// Run the received message through an external filter program if
|
||||
// one is configured into the system settings.
|
||||
//------------------------------------------------------------------
|
||||
|
||||
string ID;
|
||||
|
||||
if(filterMessage(mailData)) {
|
||||
|
||||
if(recipientList != "") {
|
||||
|
||||
if(mailData.length() > 0) {
|
||||
|
||||
//------------------------------------------------------------------
|
||||
// We have the message and we have a list of recipients. Send the
|
||||
// message to the queue since we know everyone in the recipient
|
||||
// list has passed the test.
|
||||
//------------------------------------------------------------------
|
||||
|
||||
ID = queueMail(sender, recipientList, mailData, clientIP, log, sql, "N");
|
||||
|
||||
if(ID != "") {
|
||||
|
||||
log.message("Response: 250 OK Queued message " + ID);
|
||||
|
||||
//------------------------------
|
||||
// Tell the client we sent it.
|
||||
//------------------------------
|
||||
|
||||
cout << "250 OK Queued message " << ID << CRLF;
|
||||
}
|
||||
|
||||
else {
|
||||
|
||||
log.message("Response: 550 Mail message too big.");
|
||||
|
||||
//---------------------------------
|
||||
// Tell the client it was too big.
|
||||
//---------------------------------
|
||||
|
||||
cout << "550 Mail message too big" << CRLF;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------
|
||||
// The mail message is empty so we are going to error out. We don't like
|
||||
// getting empty messages.
|
||||
//------------------------------------------------------------------------
|
||||
|
||||
else {
|
||||
|
||||
log.message("Response: 550 Mail message was empty.");
|
||||
cout << "550 Mail message was empty" << CRLF;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
else {
|
||||
|
||||
log.message("Response: 250 OK Queued message. (We actually discarded it due to empty recipient list)");
|
||||
|
||||
//------------------------------
|
||||
// Tell the client we sent it.
|
||||
//------------------------------
|
||||
|
||||
cout << "250 OK Queued message " << ID << CRLF;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//----------------------------------------------------
|
||||
// Error out cause it did not pass the filter test.
|
||||
//----------------------------------------------------
|
||||
|
||||
else {
|
||||
|
||||
cout << "550 Message is probably spam" << CRLF;
|
||||
log.message("Response: 550 Message is probably spam.");
|
||||
}
|
||||
|
||||
//----------------------------
|
||||
// Return to the READY state.
|
||||
//----------------------------
|
||||
|
||||
state = "READY";
|
||||
}
|
||||
//--------------------------------------------------------
|
||||
// Generate an error cause we are not in the right state.
|
||||
//--------------------------------------------------------
|
||||
|
||||
else {
|
||||
|
||||
if(state == "MAIL") {
|
||||
cout << "503 Please use RCPT first" << CRLF;
|
||||
log.message("Response: 503 Please use RCPT first.");
|
||||
}
|
||||
|
||||
else {
|
||||
cout << "503 Please use MAIL first" << CRLF;
|
||||
log.message("Response: 503 Please use MAIL first.");
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
public:
|
||||
int processCommand(coreutils::PString request, SMTPSession &session, SMTPServer &server, std::stringstream &data);
|
||||
|
||||
std::string generateMailFileName();
|
||||
std::string queueMail(SMTPServer &server, std::string sender, std::vector<std::string> recipientList, std::stringstream &mailData);
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
|
19
__SMTP_EHLO.cpp
Normal file
19
__SMTP_EHLO.cpp
Normal file
@ -0,0 +1,19 @@
|
||||
#include "__SMTP_EHLO.h"
|
||||
#include "SMTPServer.h"
|
||||
|
||||
namespace mail {
|
||||
|
||||
int __SMTP_EHLO::processCommand(coreutils::PString request, SMTPSession &session, SMTPServer &server, std::stringstream &data) {
|
||||
|
||||
session.clientDomainName = request[1].str();
|
||||
|
||||
data << "250-" << server.hostName << CRLF;
|
||||
// cout << "250-STARTTLS" << CRLF;
|
||||
// cout << "250-PIPELINING" << CRLF;
|
||||
// cout << "250-8BITMIME" << CRLF;
|
||||
data << "250-AUTH LOGIN" << CRLF;
|
||||
data << "250 HELP" << CRLF;
|
||||
session.state = READY;
|
||||
}
|
||||
|
||||
}
|
@ -1,30 +1,20 @@
|
||||
#ifndef ____SMTP_EHLO_h__
|
||||
#define ____SMTP_EHLO_h__
|
||||
# define ____SMTP_EHLO_h__
|
||||
|
||||
#include "Command.h"
|
||||
# include "SMTPCommand.h"
|
||||
# include "SMTPSession.h"
|
||||
|
||||
namespace mail {
|
||||
|
||||
class __SMTP_EHLO : public core::Command {
|
||||
|
||||
class SMTPServer;
|
||||
|
||||
class __SMTP_EHLO : public SMTPCommand {
|
||||
|
||||
int processCommand(std::string request, Session *session, std::stringstream &data);
|
||||
public:
|
||||
int processCommand(coreutils::PString request, SMTPSession &session, SMTPServer &server, std::stringstream &data);
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
if(input.length() > 5) {
|
||||
string hostName = input.substr(5);
|
||||
}
|
||||
|
||||
else {
|
||||
|
||||
// TODO: Provide error message demanding identity here.
|
||||
//
|
||||
}
|
||||
|
||||
data << "250-" << getHostName() << CRLF;
|
||||
// cout << "250-STARTTLS" << CRLF;
|
||||
// cout << "250-PIPELINING" << CRLF;
|
||||
// cout << "250-8BITMIME" << CRLF;
|
||||
data << "250-AUTH LOGIN" << CRLF;
|
||||
data << "250 HELP" << CRLF;
|
||||
session->state = "READY";
|
||||
}
|
||||
|
||||
#endif
|
||||
|
11
__SMTP_EXPN.cpp
Normal file
11
__SMTP_EXPN.cpp
Normal file
@ -0,0 +1,11 @@
|
||||
#include "__SMTP_EXPN.h"
|
||||
#include "SMTPServer.h"
|
||||
|
||||
namespace mail {
|
||||
|
||||
int __SMTP_EXPN::processCommand(coreutils::PString request, SMTPSession &session, SMTPServer &server, std::stringstream &data) {
|
||||
data << "252 You must know recipient." << CRLF;
|
||||
session.state = READY;
|
||||
}
|
||||
|
||||
}
|
19
__SMTP_EXPN.h
Normal file
19
__SMTP_EXPN.h
Normal file
@ -0,0 +1,19 @@
|
||||
#ifndef ____SMTP_EXPN_h__
|
||||
# define ____SMTP_EXPN_h__
|
||||
|
||||
# include "SMTPCommand.h"
|
||||
# include "SMTPSession.h"
|
||||
|
||||
namespace mail {
|
||||
|
||||
class SMTPServer;
|
||||
|
||||
class __SMTP_EXPN : public SMTPCommand {
|
||||
|
||||
public:
|
||||
int processCommand(coreutils::PString request, SMTPSession &session, SMTPServer &server, std::stringstream &data);
|
||||
|
||||
};
|
||||
}
|
||||
|
||||
#endif
|
15
__SMTP_HELO.cpp
Normal file
15
__SMTP_HELO.cpp
Normal file
@ -0,0 +1,15 @@
|
||||
#include "__SMTP_HELO.h"
|
||||
#include "SMTPServer.h"
|
||||
|
||||
namespace mail {
|
||||
|
||||
int __SMTP_HELO::processCommand(coreutils::PString request, SMTPSession &session, SMTPServer &server, std::stringstream &data) {
|
||||
|
||||
std::string clientName = request[1].str();
|
||||
|
||||
data << "250 " << server.hostName << CRLF;
|
||||
session.state = READY;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1,32 +1,20 @@
|
||||
#ifndef ____SMTP_HELO_h__
|
||||
#define ____SMTP_HELO_h__
|
||||
# define ____SMTP_HELO_h__
|
||||
|
||||
#include "Command.h"
|
||||
# include "SMTPCommand.h"
|
||||
# include "SMTPSession.h"
|
||||
|
||||
namespace mail {
|
||||
|
||||
class __SMTP_HELO : public core::Command {
|
||||
|
||||
class SMTPServer;
|
||||
|
||||
class __SMTP_HELO : public SMTPCommand {
|
||||
|
||||
int processCommand(std::string request, Session *session, std::stringstream &data);
|
||||
public:
|
||||
int processCommand(coreutils::PString request, SMTPSession &session, SMTPServer &server, std::stringstream &data);
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
data << "" << std::endl;
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
// HELO command request handling.
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
if(command(input) == "HELO") {
|
||||
|
||||
if(input.length() > 5) {
|
||||
string hostName = input.substr(5);
|
||||
}
|
||||
|
||||
else {
|
||||
|
||||
// TODO: Provide error message demanding identity here.
|
||||
//
|
||||
}
|
||||
|
||||
cout << "250 " << getHostName() << CRLF;
|
||||
state = "READY";
|
||||
}
|
||||
#endif
|
||||
|
12
__SMTP_HELP.cpp
Normal file
12
__SMTP_HELP.cpp
Normal file
@ -0,0 +1,12 @@
|
||||
#include "__SMTP_HELP.h"
|
||||
#include "SMTPServer.h"
|
||||
|
||||
namespace mail {
|
||||
|
||||
int __SMTP_HELP::processCommand(coreutils::PString request, SMTPSession &session, SMTPServer &server, std::stringstream &data) {
|
||||
|
||||
data << "250 Sure you need help." << CRLF;
|
||||
session.state = READY;
|
||||
}
|
||||
|
||||
}
|
19
__SMTP_HELP.h
Normal file
19
__SMTP_HELP.h
Normal file
@ -0,0 +1,19 @@
|
||||
#ifndef ____SMTP_HELP_h__
|
||||
# define ____SMTP_HELP_h__
|
||||
|
||||
# include "SMTPCommand.h"
|
||||
# include "SMTPSession.h"
|
||||
|
||||
namespace mail {
|
||||
|
||||
class SMTPServer;
|
||||
|
||||
class __SMTP_HELP : public SMTPCommand {
|
||||
|
||||
int processCommand(coreutils::PString request, SMTPSession &session, SMTPServer &server, std::stringstream &data);
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif
|
32
__SMTP_MAIL.cpp
Normal file
32
__SMTP_MAIL.cpp
Normal file
@ -0,0 +1,32 @@
|
||||
#include "__SMTP_MAIL.h"
|
||||
#include "SMTPServer.h"
|
||||
|
||||
namespace mail {
|
||||
|
||||
int __SMTP_MAIL::processCommand(coreutils::PString request, SMTPSession &session, SMTPServer &server, std::stringstream &data) {
|
||||
|
||||
if(request.ifNext("MAIL FROM:")) {
|
||||
request.skipWhitespace();
|
||||
if(request.ifNext("<")) {
|
||||
session.sender = request.getTokenExclude(">");
|
||||
if(session.authState = USER_KNOWN) {
|
||||
data << "250 OK" << CRLF;
|
||||
session.recipientList.clear();
|
||||
session.state = MAIL;
|
||||
}
|
||||
} else
|
||||
data << "550 Usage: MAIL FROM:<email-address>" << CRLF;
|
||||
} else
|
||||
data << "550 Usage: MAIL FROM:<email-address>" << CRLF;
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
std::string domainOnly(std::string email) {
|
||||
coreutils::PString split(email);
|
||||
split.split("@");
|
||||
return split[1].str();
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1,38 +1,21 @@
|
||||
#ifndef ____SMTP_MAIL_h__
|
||||
#define ____SMTP_MAIL_h__
|
||||
# define ____SMTP_MAIL_h__
|
||||
|
||||
#include "Command.h"
|
||||
# include "SMTPCommand.h"
|
||||
# include "SMTPSession.h"
|
||||
|
||||
namespace mail {
|
||||
|
||||
class __SMTP_MAIL : public core::Command {
|
||||
|
||||
class SMTPServer;
|
||||
|
||||
class __SMTP_MAIL : public SMTPCommand {
|
||||
|
||||
int processCommand(std::string request, Session *session, std::stringstream &data);
|
||||
public:
|
||||
|
||||
int processCommand(coreutils::PString request, SMTPSession &session, SMTPServer &server, std::stringstream &data);
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
data << "" << std::endl;
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
// MAIL command request handling.
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
else if(command(input) == "MAIL") {
|
||||
|
||||
sender = cleanEMail(input.substr(5));
|
||||
|
||||
//-------------------------------------------------------------
|
||||
// Verify that the senders domain name resolves to an address
|
||||
// with an MX record. If not and there is a bounce then we
|
||||
// will not be able to return the bounce message so it is
|
||||
// probably a spammer anyway.
|
||||
//-------------------------------------------------------------
|
||||
|
||||
if(verifyDomainMX(domainOnly(sender))) {
|
||||
|
||||
cout << "250 OK" << CRLF;
|
||||
log.message("Response: 250 OK.");
|
||||
recipientList = "";
|
||||
state = "MAIL";
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
#endif
|
||||
|
20
__SMTP_NOOP.cpp
Normal file
20
__SMTP_NOOP.cpp
Normal file
@ -0,0 +1,20 @@
|
||||
#ifndef ____SMTP_NOOP_h__
|
||||
# define ____SMTP_NOOP_h__
|
||||
|
||||
# include "SMTPCommand.h"
|
||||
# include "SMTPSession.h"
|
||||
# include "PString.h"
|
||||
|
||||
namespace mail {
|
||||
|
||||
class __SMTP_NOOP : public SMTPCommand {
|
||||
|
||||
int processCommand(coreutils::PString request, SMTPSession &session, std::stringstream &data) {
|
||||
data << "250 OK" << CRLF;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif
|
@ -1,12 +1,20 @@
|
||||
#ifndef ____SMTP_NOOP_h__
|
||||
#define ____SMTP_NOOP_h__
|
||||
# define ____SMTP_NOOP_h__
|
||||
|
||||
#include "Command.h"
|
||||
# include "SMTPCommand.h"
|
||||
# include "SMTPSession.h"
|
||||
# include "PString.h"
|
||||
|
||||
namespace mail {
|
||||
|
||||
class __SMTP_NOOP : public core::Command {
|
||||
|
||||
class __SMTP_NOOP : public SMTPCommand {
|
||||
|
||||
int processCommand(std::string request, Session *session, std::stringstream &data);
|
||||
int processCommand(coreutils::PString request, SMTPSession &session, std::stringstream &data) {
|
||||
data << "250 OK" << CRLF;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
|
12
__SMTP_QUIT.cpp
Normal file
12
__SMTP_QUIT.cpp
Normal file
@ -0,0 +1,12 @@
|
||||
# include "__SMTP_QUIT.h"
|
||||
# include "SMTPServer.h"
|
||||
|
||||
namespace mail {
|
||||
|
||||
int __SMTP_QUIT::processCommand(coreutils::PString request, SMTPSession &session, SMTPServer &server, std::stringstream &data) {
|
||||
data << "221 " << server.hostName << CRLF;
|
||||
session.shutdown("quit request");
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1,17 +1,21 @@
|
||||
#ifndef ____SMTP_QUIT_h__
|
||||
#define ____SMTP_QUIT_h__
|
||||
# define ____SMTP_QUIT_h__
|
||||
|
||||
#include "Command.h"
|
||||
# include "SMTPCommand.h"
|
||||
# include "SMTPSession.h"
|
||||
|
||||
namespace mail {
|
||||
|
||||
class __SMTP_QUIT : public core::Command {
|
||||
class SMTPServer;
|
||||
|
||||
class __SMTP_QUIT : public SMTPCommand {
|
||||
|
||||
public:
|
||||
|
||||
int processCommand(coreutils::PString request, SMTPSession &session, SMTPServer &server, std::stringstream &data);
|
||||
|
||||
int processCommand(std::string request, Session *session, std::stringstream &data);
|
||||
data << "221 " << getHostName() << CRLF;
|
||||
session->shutdown();
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
|
34
__SMTP_RCPT.cpp
Normal file
34
__SMTP_RCPT.cpp
Normal file
@ -0,0 +1,34 @@
|
||||
# include "__SMTP_RCPT.h"
|
||||
# include "SMTPServer.h"
|
||||
|
||||
namespace mail {
|
||||
|
||||
int __SMTP_RCPT::processCommand(coreutils::PString request, SMTPSession &session, SMTPServer &server, std::stringstream &data) {
|
||||
|
||||
if((session.state == MAIL) || (session.state == RCPT)) {
|
||||
std::string recipient;
|
||||
if(request.ifNext("RCPT TO:")) {
|
||||
request.skipWhitespace();
|
||||
if(request.ifNext("<")) {
|
||||
recipient = request.getTokenExclude(">");
|
||||
if(server.mailFileSystem.ifMailBoxExists(recipient)) {
|
||||
session.recipientList.push_back(recipient);
|
||||
data << "250 OK" << CRLF;
|
||||
session.state = RCPT;
|
||||
} else if(session.relay) {
|
||||
session.recipientList.push_back(recipient);
|
||||
data << "250 OK" << CRLF;
|
||||
session.state = RCPT;
|
||||
} else
|
||||
data << "550 Mailbox does not exist" << CRLF;
|
||||
} else
|
||||
data << "550 Usage: RCPT TO:<email-address>" << CRLF;
|
||||
} else
|
||||
data << "550 Usage: RCPT TO:<email-address>" << CRLF;
|
||||
} else
|
||||
data << "503 Please use MAIL first" << CRLF;
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
}
|
163
__SMTP_RCPT.h
163
__SMTP_RCPT.h
@ -1,162 +1,21 @@
|
||||
#ifndef ____SMTP_RCPT_h__
|
||||
#define ____SMTP_RCPT_h__
|
||||
# define ____SMTP_RCPT_h__
|
||||
|
||||
#include "Command.h"
|
||||
# include "SMTPCommand.h"
|
||||
# include "MailFileSystem.h"
|
||||
# include "SMTPSession.h"
|
||||
|
||||
namespace mail {
|
||||
|
||||
class __SMTP_RCPT : public core::Command {
|
||||
class SMTPServer;
|
||||
|
||||
class __SMTP_RCPT : public SMTPCommand {
|
||||
|
||||
int processCommand(std::string request, Session *session, std::stringstream &data);
|
||||
|
||||
if((state == "MAIL") || (state == "RCPT")) {
|
||||
|
||||
bool done = false;
|
||||
|
||||
//--------------------------------------
|
||||
// Obtain the recipient's email address.
|
||||
//--------------------------------------
|
||||
|
||||
string recipient = input.substr(5);
|
||||
|
||||
//-----------------------------------------------
|
||||
// Fetch the recipient list for the alias.
|
||||
//-----------------------------------------------
|
||||
|
||||
string aliasRecipients;
|
||||
|
||||
if(getAliasList(cleanEMail(recipient), aliasRecipients)) {
|
||||
|
||||
//-----------------------------------------------
|
||||
// If the list is not blank then add the list
|
||||
// to the recipient list and accept the request.
|
||||
//-----------------------------------------------
|
||||
|
||||
recipientList += aliasRecipients;
|
||||
data << "250 OK" << CRLF;
|
||||
state = "RCPT";
|
||||
done = true;
|
||||
}
|
||||
//-------------------------------------------------
|
||||
// No alias entry for the mailbox so check if it
|
||||
// is a hard mailbox.
|
||||
//-------------------------------------------------
|
||||
|
||||
if(!done) {
|
||||
|
||||
//--------------------------------------
|
||||
// Check to see if the user is a local
|
||||
// address to deliver to.
|
||||
//--------------------------------------
|
||||
|
||||
if(localUser(cleanEMail(recipient))) {
|
||||
|
||||
//------------------------------------------
|
||||
// They're local so lets queue it for them.
|
||||
//------------------------------------------
|
||||
|
||||
recipientList += cleanEMail(recipient) + " ";
|
||||
data << "250 OK" << CRLF;
|
||||
state = "RCPT";
|
||||
done = true;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//--------------------------------------------------
|
||||
// There is no mailbox either so do domain check.
|
||||
//--------------------------------------------------
|
||||
|
||||
if(!done) {
|
||||
|
||||
//---------------------------------------------------
|
||||
// Check to see if the domain is good at least and
|
||||
// if there is a default mailbox address..
|
||||
//---------------------------------------------------
|
||||
string defaultMailbox;
|
||||
|
||||
if(localDomain(domainOnly(cleanEMail(recipient)), defaultMailbox)) {
|
||||
|
||||
//--------------------------------------------------
|
||||
// The domain is local so if there is a default
|
||||
// mailbox then let's send it to the queue with the
|
||||
// default address attached instead.
|
||||
//--------------------------------------------------
|
||||
|
||||
if(defaultMailbox != "*NONE") {
|
||||
|
||||
//---------------------------------------------------------
|
||||
// If the default mailbox is *DISCARD then we do not want
|
||||
// to add the mailbox to the recipient list but we still
|
||||
// want to say we have a mailbox.
|
||||
//---------------------------------------------------------
|
||||
|
||||
if(defaultMailbox != "*DISCARD")
|
||||
recipientList += defaultMailbox + " ";
|
||||
|
||||
cout << "250 OK" << CRLF;
|
||||
log.message("Response: 250 OK.");
|
||||
|
||||
state = "RCPT";
|
||||
done = true;
|
||||
}
|
||||
|
||||
//--------------------------------------------------
|
||||
// If there is no default address then we will tell
|
||||
// the client that the mailbox does not exist.
|
||||
//--------------------------------------------------
|
||||
|
||||
else {
|
||||
|
||||
cout << "553 Mailbox does not exist" << CRLF;
|
||||
log.message("Response: 553 Mailbox does not exist.");
|
||||
|
||||
done = true;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------
|
||||
// If we are not done then this is a relay request.
|
||||
//--------------------------------------------------------------
|
||||
|
||||
if (!done) {
|
||||
|
||||
//---------------------------------------------------------
|
||||
// If relaying is enabled for this conversation then
|
||||
// queue the mail.
|
||||
//---------------------------------------------------------
|
||||
|
||||
if(relay) {
|
||||
recipientList += cleanEMail(recipient) + " ";
|
||||
cout << "250 OK" << CRLF;
|
||||
log.message("Response: 250 OK.");
|
||||
state = "RCPT";
|
||||
}
|
||||
|
||||
//----------------------------------------
|
||||
// Otherwise send an error.
|
||||
//----------------------------------------
|
||||
|
||||
else {
|
||||
cout << "553 Server requires authentication to relay" << CRLF;
|
||||
log.message("Response: 553 Server requires authentication to relay.");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
else {
|
||||
cout << "503 Please use MAIL first" << CRLF;
|
||||
log.message("Response: 503 Please use MAIL first.");
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
public:
|
||||
int processCommand(coreutils::PString request, SMTPSession &session, SMTPServer &server, std::stringstream &data);
|
||||
|
||||
};
|
||||
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
|
20
__SMTP_RSET.cpp
Normal file
20
__SMTP_RSET.cpp
Normal file
@ -0,0 +1,20 @@
|
||||
#ifndef ____SMTP_RSET_h__
|
||||
#define ____SMTP_RSET_h__
|
||||
|
||||
#include "SMTPCommand.h"
|
||||
|
||||
namespace mail {
|
||||
|
||||
class __SMTP_RSET : public SMTPCommand {
|
||||
|
||||
int processCommand(coreutils::PString request, SMTPSession &session, std::stringstream &data) {
|
||||
session.state = READY;
|
||||
data << "250 OK" << CRLF;
|
||||
return 0;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif
|
@ -1,20 +1,20 @@
|
||||
#ifndef ____SMTP_RSET_h__
|
||||
#define ____SMTP_RSET_h__
|
||||
|
||||
#include "Command.h"
|
||||
#include "SMTPCommand.h"
|
||||
|
||||
namespace mail {
|
||||
|
||||
class __SMTP_RSET : public core::Command {
|
||||
class __SMTP_RSET : public SMTPCommand {
|
||||
|
||||
int processCommand(std::string request, Session *session, std::stringstream &data);
|
||||
state = "READY";
|
||||
int processCommand(coreutils::PString request, SMTPSession &session, std::stringstream &data) {
|
||||
session.state = READY;
|
||||
data << "250 OK" << CRLF;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
};
|
||||
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
|
11
__SMTP_VRFY.cpp
Normal file
11
__SMTP_VRFY.cpp
Normal file
@ -0,0 +1,11 @@
|
||||
#include "__SMTP_VRFY.h"
|
||||
|
||||
namespace mail {
|
||||
|
||||
int __SMTP_VRFY::processCommand(coreutils::PString request, SMTPSession &session, std::stringstream &data) {
|
||||
data << "252 You must know who the mail is for" << CRLF;
|
||||
return 0;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1,19 +1,17 @@
|
||||
#ifndef ____SMTP_VRFY_h__
|
||||
#define ____SMTP_VRFY_h__
|
||||
# define ____SMTP_VRFY_h__
|
||||
|
||||
#include "Command.h"
|
||||
# include "SMTPCommand.h"
|
||||
# include "PString.h"
|
||||
|
||||
namespace mail {
|
||||
|
||||
class __SMTP_VRFY : public core::Command {
|
||||
|
||||
class __SMTP_VRFY : public SMTPCommand {
|
||||
|
||||
int processCommand(coreutils::PString request, SMTPSession &session, std::stringstream &data);
|
||||
|
||||
int processCommand(std::string request, Session *session, std::stringstream &data) {
|
||||
data << "252 You must know who the mail is for" << CRLF;
|
||||
return 0;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
|
29
compile
Executable file
29
compile
Executable file
@ -0,0 +1,29 @@
|
||||
#!/bin/bash
|
||||
|
||||
for file in *.cpp
|
||||
do
|
||||
filename="${file%.*}"
|
||||
list="$list $filename.o"
|
||||
echo -n "Compiling $filename..."
|
||||
g++ -g -c -std=c++17 -I../CoreUtils -I../ServerCore $file
|
||||
if [ $? = '0' ]
|
||||
then
|
||||
echo "OK"
|
||||
else
|
||||
echo "ERROR"
|
||||
exit -1
|
||||
fi
|
||||
done
|
||||
|
||||
wait
|
||||
echo -n "Building executable BMAMail..."
|
||||
g++ -g -std=c++17 -o BMAMail $list -L../CoreUtils -lCoreUtils -L../ServerCore -lServerCore -lpthread -luuid -lssl -lcrypto
|
||||
if [ $? = '0' ]
|
||||
then
|
||||
echo "OK"
|
||||
else
|
||||
echo "ERROR"
|
||||
exit -1
|
||||
fi
|
||||
|
||||
|
2494
docs/Doxyfile
Normal file
2494
docs/Doxyfile
Normal file
File diff suppressed because it is too large
Load Diff
111
docs/html/_____i_m_a_p___a_p_p_e_n_d_8h.html
Normal file
111
docs/html/_____i_m_a_p___a_p_p_e_n_d_8h.html
Normal file
@ -0,0 +1,111 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.8.13"/>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||
<title>BMAMail: /home/bradarant/barant/BMAMail/__IMAP_APPEND.h File Reference</title>
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="jquery.js"></script>
|
||||
<script type="text/javascript" src="dynsections.js"></script>
|
||||
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||
<script type="text/javascript" src="search/search.js"></script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">BMAMail
|
||||
 <span id="projectnumber">1.0.0</span>
|
||||
</div>
|
||||
<div id="projectbrief">E-Mail System</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.13 -->
|
||||
<script type="text/javascript">
|
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||
</script>
|
||||
<script type="text/javascript" src="menudata.js"></script>
|
||||
<script type="text/javascript" src="menu.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(function() {
|
||||
initMenu('',true,false,'search.php','Search');
|
||||
$(document).ready(function() { init_search(); });
|
||||
});
|
||||
</script>
|
||||
<div id="main-nav"></div>
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
</div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<iframe src="javascript:void(0)" frameborder="0"
|
||||
name="MSearchResults" id="MSearchResults">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
</div><!-- top -->
|
||||
<div class="header">
|
||||
<div class="summary">
|
||||
<a href="#nested-classes">Classes</a> |
|
||||
<a href="#namespaces">Namespaces</a> </div>
|
||||
<div class="headertitle">
|
||||
<div class="title">/home/bradarant/barant/BMAMail/__IMAP_APPEND.h File Reference</div> </div>
|
||||
</div><!--header-->
|
||||
<div class="contents">
|
||||
<div class="textblock"><code>#include "<a class="el" href="_i_m_a_p_command_8h_source.html">IMAPCommand.h</a>"</code><br />
|
||||
<code>#include "<a class="el" href="_i_m_a_p_session_8h_source.html">IMAPSession.h</a>"</code><br />
|
||||
</div><div class="textblock"><div class="dynheader">
|
||||
Include dependency graph for __IMAP_APPEND.h:</div>
|
||||
<div class="dyncontent">
|
||||
<div class="center"><img src="_____i_m_a_p___a_p_p_e_n_d_8h__incl.png" border="0" usemap="#_2home_2bradarant_2barant_2_b_m_a_mail_2_____i_m_a_p___a_p_p_e_n_d_8h" alt=""/></div>
|
||||
<map name="_2home_2bradarant_2barant_2_b_m_a_mail_2_____i_m_a_p___a_p_p_e_n_d_8h" id="_2home_2bradarant_2barant_2_b_m_a_mail_2_____i_m_a_p___a_p_p_e_n_d_8h">
|
||||
<area shape="rect" id="node2" href="_i_m_a_p_command_8h.html" title="IMAPCommand.h" alt="" coords="129,95,255,121"/>
|
||||
<area shape="rect" id="node5" href="_i_m_a_p_session_8h.html" title="IMAPSession.h" alt="" coords="254,169,367,196"/>
|
||||
</map>
|
||||
</div>
|
||||
</div><div class="textblock"><div class="dynheader">
|
||||
This graph shows which files directly or indirectly include this file:</div>
|
||||
<div class="dyncontent">
|
||||
<div class="center"><img src="_____i_m_a_p___a_p_p_e_n_d_8h__dep__incl.png" border="0" usemap="#_2home_2bradarant_2barant_2_b_m_a_mail_2_____i_m_a_p___a_p_p_e_n_d_8hdep" alt=""/></div>
|
||||
<map name="_2home_2bradarant_2barant_2_b_m_a_mail_2_____i_m_a_p___a_p_p_e_n_d_8hdep" id="_2home_2bradarant_2barant_2_b_m_a_mail_2_____i_m_a_p___a_p_p_e_n_d_8hdep">
|
||||
<area shape="rect" id="node2" href="_i_m_a_p_service_8h.html" title="/home/bradarant/barant\l/BMAMail/IMAPService.h" alt="" coords="22,95,193,136"/>
|
||||
<area shape="rect" id="node3" href="main_8cpp.html" title="/home/bradarant/barant\l/BMAMail/main.cpp" alt="" coords="29,184,185,225"/>
|
||||
</map>
|
||||
</div>
|
||||
</div>
|
||||
<p><a href="_____i_m_a_p___a_p_p_e_n_d_8h_source.html">Go to the source code of this file.</a></p>
|
||||
<table class="memberdecls">
|
||||
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
|
||||
Classes</h2></td></tr>
|
||||
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classmail_1_1_____i_m_a_p___a_p_p_e_n_d.html">mail::__IMAP_APPEND</a></td></tr>
|
||||
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
</table><table class="memberdecls">
|
||||
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="namespaces"></a>
|
||||
Namespaces</h2></td></tr>
|
||||
<tr class="memitem:namespacemail"><td class="memItemLeft" align="right" valign="top">  </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacemail.html">mail</a></td></tr>
|
||||
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
</table>
|
||||
</div><!-- contents -->
|
||||
<!-- start footer part -->
|
||||
<hr class="footer"/><address class="footer"><small>
|
||||
Generated by  <a href="http://www.doxygen.org/index.html">
|
||||
<img class="footer" src="doxygen.png" alt="doxygen"/>
|
||||
</a> 1.8.13
|
||||
</small></address>
|
||||
</body>
|
||||
</html>
|
4
docs/html/_____i_m_a_p___a_p_p_e_n_d_8h__dep__incl.map
Normal file
4
docs/html/_____i_m_a_p___a_p_p_e_n_d_8h__dep__incl.map
Normal file
@ -0,0 +1,4 @@
|
||||
<map id="/home/bradarant/barant/BMAMail/__IMAP_APPEND.h" name="/home/bradarant/barant/BMAMail/__IMAP_APPEND.h">
|
||||
<area shape="rect" id="node2" href="$_i_m_a_p_service_8h.html" title="/home/bradarant/barant\l/BMAMail/IMAPService.h" alt="" coords="22,95,193,136"/>
|
||||
<area shape="rect" id="node3" href="$main_8cpp.html" title="/home/bradarant/barant\l/BMAMail/main.cpp" alt="" coords="29,184,185,225"/>
|
||||
</map>
|
1
docs/html/_____i_m_a_p___a_p_p_e_n_d_8h__dep__incl.md5
Normal file
1
docs/html/_____i_m_a_p___a_p_p_e_n_d_8h__dep__incl.md5
Normal file
@ -0,0 +1 @@
|
||||
22f73b6a82680dc85cb63acda50fcaa8
|
BIN
docs/html/_____i_m_a_p___a_p_p_e_n_d_8h__dep__incl.png
Normal file
BIN
docs/html/_____i_m_a_p___a_p_p_e_n_d_8h__dep__incl.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 11 KiB |
4
docs/html/_____i_m_a_p___a_p_p_e_n_d_8h__incl.map
Normal file
4
docs/html/_____i_m_a_p___a_p_p_e_n_d_8h__incl.map
Normal file
@ -0,0 +1,4 @@
|
||||
<map id="/home/bradarant/barant/BMAMail/__IMAP_APPEND.h" name="/home/bradarant/barant/BMAMail/__IMAP_APPEND.h">
|
||||
<area shape="rect" id="node2" href="$_i_m_a_p_command_8h.html" title="IMAPCommand.h" alt="" coords="129,95,255,121"/>
|
||||
<area shape="rect" id="node5" href="$_i_m_a_p_session_8h.html" title="IMAPSession.h" alt="" coords="254,169,367,196"/>
|
||||
</map>
|
1
docs/html/_____i_m_a_p___a_p_p_e_n_d_8h__incl.md5
Normal file
1
docs/html/_____i_m_a_p___a_p_p_e_n_d_8h__incl.md5
Normal file
@ -0,0 +1 @@
|
||||
cd58f15aee07f1189f517c74a37f4eb8
|
BIN
docs/html/_____i_m_a_p___a_p_p_e_n_d_8h__incl.png
Normal file
BIN
docs/html/_____i_m_a_p___a_p_p_e_n_d_8h__incl.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 15 KiB |
82
docs/html/_____i_m_a_p___a_p_p_e_n_d_8h_source.html
Normal file
82
docs/html/_____i_m_a_p___a_p_p_e_n_d_8h_source.html
Normal file
@ -0,0 +1,82 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.8.13"/>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||
<title>BMAMail: /home/bradarant/barant/BMAMail/__IMAP_APPEND.h Source File</title>
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="jquery.js"></script>
|
||||
<script type="text/javascript" src="dynsections.js"></script>
|
||||
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||
<script type="text/javascript" src="search/search.js"></script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">BMAMail
|
||||
 <span id="projectnumber">1.0.0</span>
|
||||
</div>
|
||||
<div id="projectbrief">E-Mail System</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.13 -->
|
||||
<script type="text/javascript">
|
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||
</script>
|
||||
<script type="text/javascript" src="menudata.js"></script>
|
||||
<script type="text/javascript" src="menu.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(function() {
|
||||
initMenu('',true,false,'search.php','Search');
|
||||
$(document).ready(function() { init_search(); });
|
||||
});
|
||||
</script>
|
||||
<div id="main-nav"></div>
|
||||
</div><!-- top -->
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
</div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<iframe src="javascript:void(0)" frameborder="0"
|
||||
name="MSearchResults" id="MSearchResults">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
<div class="header">
|
||||
<div class="headertitle">
|
||||
<div class="title">/home/bradarant/barant/BMAMail/__IMAP_APPEND.h</div> </div>
|
||||
</div><!--header-->
|
||||
<div class="contents">
|
||||
<a href="_____i_m_a_p___a_p_p_e_n_d_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="preprocessor">#ifndef ____IMAP_APPEND_h__</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="preprocessor"># define ____IMAP_APPEND_h__</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> </div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="preprocessor"># include "<a class="code" href="_i_m_a_p_command_8h.html">IMAPCommand.h</a>"</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="preprocessor"># include "<a class="code" href="_i_m_a_p_session_8h.html">IMAPSession.h</a>"</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> </div><div class="line"><a name="l00007"></a><span class="lineno"><a class="line" href="namespacemail.html"> 7</a></span> <span class="keyword">namespace </span><a class="code" href="namespacemail.html">mail</a> {</div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>  </div><div class="line"><a name="l00009"></a><span class="lineno"><a class="line" href="classmail_1_1_____i_m_a_p___a_p_p_e_n_d.html"> 9</a></span>  <span class="keyword">class </span><a class="code" href="classmail_1_1_____i_m_a_p___a_p_p_e_n_d.html">__IMAP_APPEND</a> : <span class="keyword">public</span> <a class="code" href="classmail_1_1_i_m_a_p_command.html">IMAPCommand</a> {</div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>  </div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>  <span class="keywordtype">int</span> processCommand(coreutils::PString request, <a class="code" href="classmail_1_1_i_m_a_p_session.html">IMAPSession</a> &session, std::stringstream &data) { </div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>  data << <span class="stringliteral">"250 OK"</span> << <a class="code" href="_s_m_t_p_session_8h.html#a6cb23a858b0a21bdaa644b9181dc415f">CRLF</a>;</div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>  }</div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>  </div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>  };</div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>  </div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> }</div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span> </div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="preprocessor">#endif</span></div><div class="ttc" id="_i_m_a_p_command_8h_html"><div class="ttname"><a href="_i_m_a_p_command_8h.html">IMAPCommand.h</a></div></div>
|
||||
<div class="ttc" id="classmail_1_1_____i_m_a_p___a_p_p_e_n_d_html"><div class="ttname"><a href="classmail_1_1_____i_m_a_p___a_p_p_e_n_d.html">mail::__IMAP_APPEND</a></div><div class="ttdef"><b>Definition:</b> __IMAP_APPEND.h:9</div></div>
|
||||
<div class="ttc" id="namespacemail_html"><div class="ttname"><a href="namespacemail.html">mail</a></div><div class="ttdef"><b>Definition:</b> __IMAP_APPEND.h:7</div></div>
|
||||
<div class="ttc" id="classmail_1_1_i_m_a_p_command_html"><div class="ttname"><a href="classmail_1_1_i_m_a_p_command.html">mail::IMAPCommand</a></div><div class="ttdef"><b>Definition:</b> IMAPCommand.h:10</div></div>
|
||||
<div class="ttc" id="_s_m_t_p_session_8h_html_a6cb23a858b0a21bdaa644b9181dc415f"><div class="ttname"><a href="_s_m_t_p_session_8h.html#a6cb23a858b0a21bdaa644b9181dc415f">CRLF</a></div><div class="ttdeci">#define CRLF</div><div class="ttdef"><b>Definition:</b> SMTPSession.h:7</div></div>
|
||||
<div class="ttc" id="_i_m_a_p_session_8h_html"><div class="ttname"><a href="_i_m_a_p_session_8h.html">IMAPSession.h</a></div></div>
|
||||
<div class="ttc" id="classmail_1_1_i_m_a_p_session_html"><div class="ttname"><a href="classmail_1_1_i_m_a_p_session.html">mail::IMAPSession</a></div><div class="ttdef"><b>Definition:</b> IMAPSession.h:6</div></div>
|
||||
</div><!-- fragment --></div><!-- contents -->
|
||||
<!-- start footer part -->
|
||||
<hr class="footer"/><address class="footer"><small>
|
||||
Generated by  <a href="http://www.doxygen.org/index.html">
|
||||
<img class="footer" src="doxygen.png" alt="doxygen"/>
|
||||
</a> 1.8.13
|
||||
</small></address>
|
||||
</body>
|
||||
</html>
|
111
docs/html/_____i_m_a_p___a_u_t_h_e_n_t_i_c_a_t_e_8h.html
Normal file
111
docs/html/_____i_m_a_p___a_u_t_h_e_n_t_i_c_a_t_e_8h.html
Normal file
@ -0,0 +1,111 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.8.13"/>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||
<title>BMAMail: /home/bradarant/barant/BMAMail/__IMAP_AUTHENTICATE.h File Reference</title>
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="jquery.js"></script>
|
||||
<script type="text/javascript" src="dynsections.js"></script>
|
||||
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||
<script type="text/javascript" src="search/search.js"></script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">BMAMail
|
||||
 <span id="projectnumber">1.0.0</span>
|
||||
</div>
|
||||
<div id="projectbrief">E-Mail System</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.13 -->
|
||||
<script type="text/javascript">
|
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||
</script>
|
||||
<script type="text/javascript" src="menudata.js"></script>
|
||||
<script type="text/javascript" src="menu.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(function() {
|
||||
initMenu('',true,false,'search.php','Search');
|
||||
$(document).ready(function() { init_search(); });
|
||||
});
|
||||
</script>
|
||||
<div id="main-nav"></div>
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
</div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<iframe src="javascript:void(0)" frameborder="0"
|
||||
name="MSearchResults" id="MSearchResults">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
</div><!-- top -->
|
||||
<div class="header">
|
||||
<div class="summary">
|
||||
<a href="#nested-classes">Classes</a> |
|
||||
<a href="#namespaces">Namespaces</a> </div>
|
||||
<div class="headertitle">
|
||||
<div class="title">/home/bradarant/barant/BMAMail/__IMAP_AUTHENTICATE.h File Reference</div> </div>
|
||||
</div><!--header-->
|
||||
<div class="contents">
|
||||
<div class="textblock"><code>#include "<a class="el" href="_i_m_a_p_command_8h_source.html">IMAPCommand.h</a>"</code><br />
|
||||
<code>#include "<a class="el" href="_i_m_a_p_session_8h_source.html">IMAPSession.h</a>"</code><br />
|
||||
</div><div class="textblock"><div class="dynheader">
|
||||
Include dependency graph for __IMAP_AUTHENTICATE.h:</div>
|
||||
<div class="dyncontent">
|
||||
<div class="center"><img src="_____i_m_a_p___a_u_t_h_e_n_t_i_c_a_t_e_8h__incl.png" border="0" usemap="#_2home_2bradarant_2barant_2_b_m_a_mail_2_____i_m_a_p___a_u_t_h_e_n_t_i_c_a_t_e_8h" alt=""/></div>
|
||||
<map name="_2home_2bradarant_2barant_2_b_m_a_mail_2_____i_m_a_p___a_u_t_h_e_n_t_i_c_a_t_e_8h" id="_2home_2bradarant_2barant_2_b_m_a_mail_2_____i_m_a_p___a_u_t_h_e_n_t_i_c_a_t_e_8h">
|
||||
<area shape="rect" id="node2" href="_i_m_a_p_command_8h.html" title="IMAPCommand.h" alt="" coords="129,95,255,121"/>
|
||||
<area shape="rect" id="node5" href="_i_m_a_p_session_8h.html" title="IMAPSession.h" alt="" coords="254,169,367,196"/>
|
||||
</map>
|
||||
</div>
|
||||
</div><div class="textblock"><div class="dynheader">
|
||||
This graph shows which files directly or indirectly include this file:</div>
|
||||
<div class="dyncontent">
|
||||
<div class="center"><img src="_____i_m_a_p___a_u_t_h_e_n_t_i_c_a_t_e_8h__dep__incl.png" border="0" usemap="#_2home_2bradarant_2barant_2_b_m_a_mail_2_____i_m_a_p___a_u_t_h_e_n_t_i_c_a_t_e_8hdep" alt=""/></div>
|
||||
<map name="_2home_2bradarant_2barant_2_b_m_a_mail_2_____i_m_a_p___a_u_t_h_e_n_t_i_c_a_t_e_8hdep" id="_2home_2bradarant_2barant_2_b_m_a_mail_2_____i_m_a_p___a_u_t_h_e_n_t_i_c_a_t_e_8hdep">
|
||||
<area shape="rect" id="node2" href="_i_m_a_p_service_8h.html" title="/home/bradarant/barant\l/BMAMail/IMAPService.h" alt="" coords="46,95,217,136"/>
|
||||
<area shape="rect" id="node3" href="main_8cpp.html" title="/home/bradarant/barant\l/BMAMail/main.cpp" alt="" coords="53,184,209,225"/>
|
||||
</map>
|
||||
</div>
|
||||
</div>
|
||||
<p><a href="_____i_m_a_p___a_u_t_h_e_n_t_i_c_a_t_e_8h_source.html">Go to the source code of this file.</a></p>
|
||||
<table class="memberdecls">
|
||||
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
|
||||
Classes</h2></td></tr>
|
||||
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classmail_1_1_____i_m_a_p___a_u_t_h_e_n_t_i_c_a_t_e.html">mail::__IMAP_AUTHENTICATE</a></td></tr>
|
||||
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
</table><table class="memberdecls">
|
||||
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="namespaces"></a>
|
||||
Namespaces</h2></td></tr>
|
||||
<tr class="memitem:namespacemail"><td class="memItemLeft" align="right" valign="top">  </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacemail.html">mail</a></td></tr>
|
||||
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
</table>
|
||||
</div><!-- contents -->
|
||||
<!-- start footer part -->
|
||||
<hr class="footer"/><address class="footer"><small>
|
||||
Generated by  <a href="http://www.doxygen.org/index.html">
|
||||
<img class="footer" src="doxygen.png" alt="doxygen"/>
|
||||
</a> 1.8.13
|
||||
</small></address>
|
||||
</body>
|
||||
</html>
|
@ -0,0 +1,4 @@
|
||||
<map id="/home/bradarant/barant/BMAMail/__IMAP_AUTHENTICATE.h" name="/home/bradarant/barant/BMAMail/__IMAP_AUTHENTICATE.h">
|
||||
<area shape="rect" id="node2" href="$_i_m_a_p_service_8h.html" title="/home/bradarant/barant\l/BMAMail/IMAPService.h" alt="" coords="46,95,217,136"/>
|
||||
<area shape="rect" id="node3" href="$main_8cpp.html" title="/home/bradarant/barant\l/BMAMail/main.cpp" alt="" coords="53,184,209,225"/>
|
||||
</map>
|
@ -0,0 +1 @@
|
||||
5aefedb62eaf0aa8df6f0ec27f6197bd
|
Binary file not shown.
After Width: | Height: | Size: 12 KiB |
@ -0,0 +1,4 @@
|
||||
<map id="/home/bradarant/barant/BMAMail/__IMAP_AUTHENTICATE.h" name="/home/bradarant/barant/BMAMail/__IMAP_AUTHENTICATE.h">
|
||||
<area shape="rect" id="node2" href="$_i_m_a_p_command_8h.html" title="IMAPCommand.h" alt="" coords="129,95,255,121"/>
|
||||
<area shape="rect" id="node5" href="$_i_m_a_p_session_8h.html" title="IMAPSession.h" alt="" coords="254,169,367,196"/>
|
||||
</map>
|
@ -0,0 +1 @@
|
||||
62ff7e3fdbdb1928db6d124adecf1185
|
BIN
docs/html/_____i_m_a_p___a_u_t_h_e_n_t_i_c_a_t_e_8h__incl.png
Normal file
BIN
docs/html/_____i_m_a_p___a_u_t_h_e_n_t_i_c_a_t_e_8h__incl.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 14 KiB |
@ -0,0 +1,82 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.8.13"/>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||
<title>BMAMail: /home/bradarant/barant/BMAMail/__IMAP_AUTHENTICATE.h Source File</title>
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="jquery.js"></script>
|
||||
<script type="text/javascript" src="dynsections.js"></script>
|
||||
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||
<script type="text/javascript" src="search/search.js"></script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">BMAMail
|
||||
 <span id="projectnumber">1.0.0</span>
|
||||
</div>
|
||||
<div id="projectbrief">E-Mail System</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.13 -->
|
||||
<script type="text/javascript">
|
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||
</script>
|
||||
<script type="text/javascript" src="menudata.js"></script>
|
||||
<script type="text/javascript" src="menu.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(function() {
|
||||
initMenu('',true,false,'search.php','Search');
|
||||
$(document).ready(function() { init_search(); });
|
||||
});
|
||||
</script>
|
||||
<div id="main-nav"></div>
|
||||
</div><!-- top -->
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
</div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<iframe src="javascript:void(0)" frameborder="0"
|
||||
name="MSearchResults" id="MSearchResults">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
<div class="header">
|
||||
<div class="headertitle">
|
||||
<div class="title">/home/bradarant/barant/BMAMail/__IMAP_AUTHENTICATE.h</div> </div>
|
||||
</div><!--header-->
|
||||
<div class="contents">
|
||||
<a href="_____i_m_a_p___a_u_t_h_e_n_t_i_c_a_t_e_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="preprocessor">#ifndef ____IMAP_AUTHENTICATE_h__</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="preprocessor"># define ____IMAP_AUTHENTICATE_h__</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> </div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="preprocessor"># include "<a class="code" href="_i_m_a_p_command_8h.html">IMAPCommand.h</a>"</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="preprocessor"># include "<a class="code" href="_i_m_a_p_session_8h.html">IMAPSession.h</a>"</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> </div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="keyword">namespace </span><a class="code" href="namespacemail.html">mail</a> {</div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>  </div><div class="line"><a name="l00009"></a><span class="lineno"><a class="line" href="classmail_1_1_____i_m_a_p___a_u_t_h_e_n_t_i_c_a_t_e.html"> 9</a></span>  <span class="keyword">class </span><a class="code" href="classmail_1_1_____i_m_a_p___a_u_t_h_e_n_t_i_c_a_t_e.html">__IMAP_AUTHENTICATE</a> : <span class="keyword">public</span> <a class="code" href="classmail_1_1_i_m_a_p_command.html">IMAPCommand</a> {</div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>  </div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>  <span class="keywordtype">int</span> processCommand(coreutils::PString request, <a class="code" href="classmail_1_1_i_m_a_p_session.html">IMAPSession</a> &session, std::stringstream &data) { </div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>  data << <span class="stringliteral">"250 OK"</span> << <a class="code" href="_s_m_t_p_session_8h.html#a6cb23a858b0a21bdaa644b9181dc415f">CRLF</a>;</div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>  }</div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>  </div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>  };</div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>  </div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> }</div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span> </div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="preprocessor">#endif</span></div><div class="ttc" id="_i_m_a_p_command_8h_html"><div class="ttname"><a href="_i_m_a_p_command_8h.html">IMAPCommand.h</a></div></div>
|
||||
<div class="ttc" id="namespacemail_html"><div class="ttname"><a href="namespacemail.html">mail</a></div><div class="ttdef"><b>Definition:</b> __IMAP_APPEND.h:7</div></div>
|
||||
<div class="ttc" id="classmail_1_1_____i_m_a_p___a_u_t_h_e_n_t_i_c_a_t_e_html"><div class="ttname"><a href="classmail_1_1_____i_m_a_p___a_u_t_h_e_n_t_i_c_a_t_e.html">mail::__IMAP_AUTHENTICATE</a></div><div class="ttdef"><b>Definition:</b> __IMAP_AUTHENTICATE.h:9</div></div>
|
||||
<div class="ttc" id="classmail_1_1_i_m_a_p_command_html"><div class="ttname"><a href="classmail_1_1_i_m_a_p_command.html">mail::IMAPCommand</a></div><div class="ttdef"><b>Definition:</b> IMAPCommand.h:10</div></div>
|
||||
<div class="ttc" id="_s_m_t_p_session_8h_html_a6cb23a858b0a21bdaa644b9181dc415f"><div class="ttname"><a href="_s_m_t_p_session_8h.html#a6cb23a858b0a21bdaa644b9181dc415f">CRLF</a></div><div class="ttdeci">#define CRLF</div><div class="ttdef"><b>Definition:</b> SMTPSession.h:7</div></div>
|
||||
<div class="ttc" id="_i_m_a_p_session_8h_html"><div class="ttname"><a href="_i_m_a_p_session_8h.html">IMAPSession.h</a></div></div>
|
||||
<div class="ttc" id="classmail_1_1_i_m_a_p_session_html"><div class="ttname"><a href="classmail_1_1_i_m_a_p_session.html">mail::IMAPSession</a></div><div class="ttdef"><b>Definition:</b> IMAPSession.h:6</div></div>
|
||||
</div><!-- fragment --></div><!-- contents -->
|
||||
<!-- start footer part -->
|
||||
<hr class="footer"/><address class="footer"><small>
|
||||
Generated by  <a href="http://www.doxygen.org/index.html">
|
||||
<img class="footer" src="doxygen.png" alt="doxygen"/>
|
||||
</a> 1.8.13
|
||||
</small></address>
|
||||
</body>
|
||||
</html>
|
111
docs/html/_____i_m_a_p___c_h_e_c_k_8h.html
Normal file
111
docs/html/_____i_m_a_p___c_h_e_c_k_8h.html
Normal file
@ -0,0 +1,111 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.8.13"/>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||
<title>BMAMail: /home/bradarant/barant/BMAMail/__IMAP_CHECK.h File Reference</title>
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="jquery.js"></script>
|
||||
<script type="text/javascript" src="dynsections.js"></script>
|
||||
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||
<script type="text/javascript" src="search/search.js"></script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">BMAMail
|
||||
 <span id="projectnumber">1.0.0</span>
|
||||
</div>
|
||||
<div id="projectbrief">E-Mail System</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.13 -->
|
||||
<script type="text/javascript">
|
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||
</script>
|
||||
<script type="text/javascript" src="menudata.js"></script>
|
||||
<script type="text/javascript" src="menu.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(function() {
|
||||
initMenu('',true,false,'search.php','Search');
|
||||
$(document).ready(function() { init_search(); });
|
||||
});
|
||||
</script>
|
||||
<div id="main-nav"></div>
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
</div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<iframe src="javascript:void(0)" frameborder="0"
|
||||
name="MSearchResults" id="MSearchResults">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
</div><!-- top -->
|
||||
<div class="header">
|
||||
<div class="summary">
|
||||
<a href="#nested-classes">Classes</a> |
|
||||
<a href="#namespaces">Namespaces</a> </div>
|
||||
<div class="headertitle">
|
||||
<div class="title">/home/bradarant/barant/BMAMail/__IMAP_CHECK.h File Reference</div> </div>
|
||||
</div><!--header-->
|
||||
<div class="contents">
|
||||
<div class="textblock"><code>#include "<a class="el" href="_i_m_a_p_command_8h_source.html">IMAPCommand.h</a>"</code><br />
|
||||
<code>#include "<a class="el" href="_i_m_a_p_session_8h_source.html">IMAPSession.h</a>"</code><br />
|
||||
</div><div class="textblock"><div class="dynheader">
|
||||
Include dependency graph for __IMAP_CHECK.h:</div>
|
||||
<div class="dyncontent">
|
||||
<div class="center"><img src="_____i_m_a_p___c_h_e_c_k_8h__incl.png" border="0" usemap="#_2home_2bradarant_2barant_2_b_m_a_mail_2_____i_m_a_p___c_h_e_c_k_8h" alt=""/></div>
|
||||
<map name="_2home_2bradarant_2barant_2_b_m_a_mail_2_____i_m_a_p___c_h_e_c_k_8h" id="_2home_2bradarant_2barant_2_b_m_a_mail_2_____i_m_a_p___c_h_e_c_k_8h">
|
||||
<area shape="rect" id="node2" href="_i_m_a_p_command_8h.html" title="IMAPCommand.h" alt="" coords="129,95,255,121"/>
|
||||
<area shape="rect" id="node5" href="_i_m_a_p_session_8h.html" title="IMAPSession.h" alt="" coords="254,169,367,196"/>
|
||||
</map>
|
||||
</div>
|
||||
</div><div class="textblock"><div class="dynheader">
|
||||
This graph shows which files directly or indirectly include this file:</div>
|
||||
<div class="dyncontent">
|
||||
<div class="center"><img src="_____i_m_a_p___c_h_e_c_k_8h__dep__incl.png" border="0" usemap="#_2home_2bradarant_2barant_2_b_m_a_mail_2_____i_m_a_p___c_h_e_c_k_8hdep" alt=""/></div>
|
||||
<map name="_2home_2bradarant_2barant_2_b_m_a_mail_2_____i_m_a_p___c_h_e_c_k_8hdep" id="_2home_2bradarant_2barant_2_b_m_a_mail_2_____i_m_a_p___c_h_e_c_k_8hdep">
|
||||
<area shape="rect" id="node2" href="_i_m_a_p_service_8h.html" title="/home/bradarant/barant\l/BMAMail/IMAPService.h" alt="" coords="18,95,189,136"/>
|
||||
<area shape="rect" id="node3" href="main_8cpp.html" title="/home/bradarant/barant\l/BMAMail/main.cpp" alt="" coords="25,184,181,225"/>
|
||||
</map>
|
||||
</div>
|
||||
</div>
|
||||
<p><a href="_____i_m_a_p___c_h_e_c_k_8h_source.html">Go to the source code of this file.</a></p>
|
||||
<table class="memberdecls">
|
||||
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
|
||||
Classes</h2></td></tr>
|
||||
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classmail_1_1_____i_m_a_p___c_h_e_c_k.html">mail::__IMAP_CHECK</a></td></tr>
|
||||
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
</table><table class="memberdecls">
|
||||
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="namespaces"></a>
|
||||
Namespaces</h2></td></tr>
|
||||
<tr class="memitem:namespacemail"><td class="memItemLeft" align="right" valign="top">  </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacemail.html">mail</a></td></tr>
|
||||
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
</table>
|
||||
</div><!-- contents -->
|
||||
<!-- start footer part -->
|
||||
<hr class="footer"/><address class="footer"><small>
|
||||
Generated by  <a href="http://www.doxygen.org/index.html">
|
||||
<img class="footer" src="doxygen.png" alt="doxygen"/>
|
||||
</a> 1.8.13
|
||||
</small></address>
|
||||
</body>
|
||||
</html>
|
4
docs/html/_____i_m_a_p___c_h_e_c_k_8h__dep__incl.map
Normal file
4
docs/html/_____i_m_a_p___c_h_e_c_k_8h__dep__incl.map
Normal file
@ -0,0 +1,4 @@
|
||||
<map id="/home/bradarant/barant/BMAMail/__IMAP_CHECK.h" name="/home/bradarant/barant/BMAMail/__IMAP_CHECK.h">
|
||||
<area shape="rect" id="node2" href="$_i_m_a_p_service_8h.html" title="/home/bradarant/barant\l/BMAMail/IMAPService.h" alt="" coords="18,95,189,136"/>
|
||||
<area shape="rect" id="node3" href="$main_8cpp.html" title="/home/bradarant/barant\l/BMAMail/main.cpp" alt="" coords="25,184,181,225"/>
|
||||
</map>
|
1
docs/html/_____i_m_a_p___c_h_e_c_k_8h__dep__incl.md5
Normal file
1
docs/html/_____i_m_a_p___c_h_e_c_k_8h__dep__incl.md5
Normal file
@ -0,0 +1 @@
|
||||
a2880e4fcfb4fa8de1a024671205822a
|
BIN
docs/html/_____i_m_a_p___c_h_e_c_k_8h__dep__incl.png
Normal file
BIN
docs/html/_____i_m_a_p___c_h_e_c_k_8h__dep__incl.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 11 KiB |
4
docs/html/_____i_m_a_p___c_h_e_c_k_8h__incl.map
Normal file
4
docs/html/_____i_m_a_p___c_h_e_c_k_8h__incl.map
Normal file
@ -0,0 +1,4 @@
|
||||
<map id="/home/bradarant/barant/BMAMail/__IMAP_CHECK.h" name="/home/bradarant/barant/BMAMail/__IMAP_CHECK.h">
|
||||
<area shape="rect" id="node2" href="$_i_m_a_p_command_8h.html" title="IMAPCommand.h" alt="" coords="129,95,255,121"/>
|
||||
<area shape="rect" id="node5" href="$_i_m_a_p_session_8h.html" title="IMAPSession.h" alt="" coords="254,169,367,196"/>
|
||||
</map>
|
1
docs/html/_____i_m_a_p___c_h_e_c_k_8h__incl.md5
Normal file
1
docs/html/_____i_m_a_p___c_h_e_c_k_8h__incl.md5
Normal file
@ -0,0 +1 @@
|
||||
6caede9e0cd14de85fe7fb0dc70e152b
|
BIN
docs/html/_____i_m_a_p___c_h_e_c_k_8h__incl.png
Normal file
BIN
docs/html/_____i_m_a_p___c_h_e_c_k_8h__incl.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 15 KiB |
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user